D3
OG
Old school D3 from simpler times
All examples
By author
By category
About
mkultra88
Full window
Github gist
Education Map
Built with
blockbuilder.org
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <script src="data:application/x-javascript;base64,KGZ1bmN0aW9uKCkgewogIC8vIElmIHdpbmRvdy5IVE1MV2lkZ2V0cyBpcyBhbHJlYWR5IGRlZmluZWQsIHRoZW4gdXNlIGl0OyBvdGhlcndpc2UgY3JlYXRlIGEKICAvLyBuZXcgb2JqZWN0LiBUaGlzIGFsbG93cyBwcmVjZWRpbmcgY29kZSB0byBzZXQgb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUKICAvLyBpbml0aWFsaXphdGlvbiBwcm9jZXNzICh0aG91Z2ggbm9uZSBjdXJyZW50bHkgZXhpc3QpLgogIHdpbmRvdy5IVE1MV2lkZ2V0cyA9IHdpbmRvdy5IVE1MV2lkZ2V0cyB8fCB7fTsKCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSB2aWV3ZXIgcGFuZS4gSWYgbm90LCB3ZSdyZSBpbiBhIHdlYiBicm93c2VyLgogIHZhciB2aWV3ZXJNb2RlID0gd2luZG93LkhUTUxXaWRnZXRzLnZpZXdlck1vZGUgPQogICAgICAvXGJ2aWV3ZXJfcGFuZT0xXGIvLnRlc3Qod2luZG93LmxvY2F0aW9uKTsKCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gU2hpbnkgbW9kZS4gSWYgbm90LCBpdCdzIGEgc3RhdGljIGRvY3VtZW50LgogIC8vIE5vdGUgdGhhdCBzdGF0aWMgd2lkZ2V0cyBjYW4gYXBwZWFyIGluIGJvdGggU2hpbnkgYW5kIHN0YXRpYyBtb2RlcywgYnV0CiAgLy8gb2J2aW91c2x5LCBTaGlueSB3aWRnZXRzIGNhbiBvbmx5IGFwcGVhciBpbiBTaGlueSBhcHBzL2RvY3VtZW50cy4KICB2YXIgc2hpbnlNb2RlID0gd2luZG93LkhUTUxXaWRnZXRzLnNoaW55TW9kZSA9CiAgICAgIHR5cGVvZih3aW5kb3cuU2hpbnkpICE9PSAidW5kZWZpbmVkIiAmJiAhIXdpbmRvdy5TaGlueS5vdXRwdXRCaW5kaW5nczsKCiAgLy8gV2UgY2FuJ3QgY291bnQgb24galF1ZXJ5IGJlaW5nIGF2YWlsYWJsZSwgc28gd2UgaW1wbGVtZW50IG91ciBvd24KICAvLyB2ZXJzaW9uIGlmIG5lY2Vzc2FyeS4KICBmdW5jdGlvbiBxdWVyeVNlbGVjdG9yQWxsKHNjb3BlLCBzZWxlY3RvcikgewogICAgaWYgKHR5cGVvZihqUXVlcnkpICE9PSAidW5kZWZpbmVkIiAmJiBzY29wZSBpbnN0YW5jZW9mIGpRdWVyeSkgewogICAgICByZXR1cm4gc2NvcGUuZmluZChzZWxlY3Rvcik7CiAgICB9CiAgICBpZiAoc2NvcGUucXVlcnlTZWxlY3RvckFsbCkgewogICAgICByZXR1cm4gc2NvcGUucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBhc0FycmF5KHZhbHVlKSB7CiAgICBpZiAodmFsdWUgPT09IG51bGwpCiAgICAgIHJldHVybiBbXTsKICAgIGlmICgkLmlzQXJyYXkodmFsdWUpKQogICAgICByZXR1cm4gdmFsdWU7CiAgICByZXR1cm4gW3ZhbHVlXTsKICB9CgogIC8vIEltcGxlbWVudCBqUXVlcnkncyBleHRlbmQKICBmdW5jdGlvbiBleHRlbmQodGFyZ2V0IC8qLCAuLi4gKi8pIHsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgcmV0dXJuIHRhcmdldDsKICAgIH0KICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07CiAgICAgIGZvciAodmFyIHByb3AgaW4gc291cmNlKSB7CiAgICAgICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgewogICAgICAgICAgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHRhcmdldDsKICB9CgogIC8vIElFOCBkb2Vzbid0IHN1cHBvcnQgQXJyYXkuZm9yRWFjaC4KICBmdW5jdGlvbiBmb3JFYWNoKHZhbHVlcywgY2FsbGJhY2ssIHRoaXNBcmcpIHsKICAgIGlmICh2YWx1ZXMuZm9yRWFjaCkgewogICAgICB2YWx1ZXMuZm9yRWFjaChjYWxsYmFjaywgdGhpc0FyZyk7CiAgICB9IGVsc2UgewogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgewogICAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdmFsdWVzW2ldLCBpLCB2YWx1ZXMpOwogICAgICB9CiAgICB9CiAgfQoKICAvLyBSZXBsYWNlcyB0aGUgc3BlY2lmaWVkIG1ldGhvZCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YgZnVuY1NvdXJjZS4KICAvLwogIC8vIE5vdGUgdGhhdCBmdW5jU291cmNlIHNob3VsZCBub3QgQkUgdGhlIG5ldyBtZXRob2QsIGl0IHNob3VsZCBiZSBhIGZ1bmN0aW9uCiAgLy8gdGhhdCBSRVRVUk5TIHRoZSBuZXcgbWV0aG9kLiBmdW5jU291cmNlIHJlY2VpdmVzIGEgc2luZ2xlIGFyZ3VtZW50IHRoYXQgaXMKICAvLyB0aGUgb3ZlcnJpZGRlbiBtZXRob2QsIGl0IGNhbiBiZSBjYWxsZWQgZnJvbSB0aGUgbmV3IG1ldGhvZC4gVGhlIG92ZXJyaWRkZW4KICAvLyBtZXRob2QgY2FuIGJlIGNhbGxlZCBsaWtlIGEgcmVndWxhciBmdW5jdGlvbiwgaXQgaGFzIHRoZSB0YXJnZXQgcGVybWFuZW50bHkKICAvLyBib3VuZCB0byBpdCBzbyAidGhpcyIgd2lsbCB3b3JrIGNvcnJlY3RseS4KICBmdW5jdGlvbiBvdmVycmlkZU1ldGhvZCh0YXJnZXQsIG1ldGhvZE5hbWUsIGZ1bmNTb3VyY2UpIHsKICAgIHZhciBzdXBlckZ1bmMgPSB0YXJnZXRbbWV0aG9kTmFtZV0gfHwgZnVuY3Rpb24oKSB7fTsKICAgIHZhciBzdXBlckZ1bmNCb3VuZCA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gc3VwZXJGdW5jLmFwcGx5KHRhcmdldCwgYXJndW1lbnRzKTsKICAgIH07CiAgICB0YXJnZXRbbWV0aG9kTmFtZV0gPSBmdW5jU291cmNlKHN1cGVyRnVuY0JvdW5kKTsKICB9CgogIC8vIEFkZCBhIG1ldGhvZCB0byBkZWxlZ2F0b3IgdGhhdCwgd2hlbiBpbnZva2VkLCBjYWxscwogIC8vIGRlbGVnYXRlZS5tZXRob2ROYW1lLiBJZiB0aGVyZSBpcyBubyBzdWNoIG1ldGhvZCBvbgogIC8vIHRoZSBkZWxlZ2F0ZWUsIGJ1dCB0aGVyZSB3YXMgb25lIG9uIGRlbGVnYXRvciBiZWZvcmUKICAvLyBkZWxlZ2F0ZU1ldGhvZCB3YXMgY2FsbGVkLCB0aGVuIHRoZSBvcmlnaW5hbCB2ZXJzaW9uCiAgLy8gaXMgaW52b2tlZCBpbnN0ZWFkLgogIC8vIEZvciBleGFtcGxlOgogIC8vCiAgLy8gdmFyIGEgPSB7CiAgLy8gICBtZXRob2QxOiBmdW5jdGlvbigpIHsgY29uc29sZS5sb2coJ2ExJyk7IH0KICAvLyAgIG1ldGhvZDI6IGZ1bmN0aW9uKCkgeyBjb25zb2xlLmxvZygnYTInKTsgfQogIC8vIH07CiAgLy8gdmFyIGIgPSB7CiAgLy8gICBtZXRob2QxOiBmdW5jdGlvbigpIHsgY29uc29sZS5sb2coJ2IxJyk7IH0KICAvLyB9OwogIC8vIGRlbGVnYXRlTWV0aG9kKGEsIGIsICJtZXRob2QxIik7CiAgLy8gZGVsZWdhdGVNZXRob2QoYSwgYiwgIm1ldGhvZDIiKTsKICAvLyBhLm1ldGhvZDEoKTsKICAvLyBhLm1ldGhvZDIoKTsKICAvLwogIC8vIFRoZSBvdXRwdXQgd291bGQgYmUgImIxIiwgImEyIi4KICBmdW5jdGlvbiBkZWxlZ2F0ZU1ldGhvZChkZWxlZ2F0b3IsIGRlbGVnYXRlZSwgbWV0aG9kTmFtZSkgewogICAgdmFyIGluaGVyaXRlZCA9IGRlbGVnYXRvclttZXRob2ROYW1lXTsKICAgIGRlbGVnYXRvclttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgdGFyZ2V0ID0gZGVsZWdhdGVlOwogICAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGVlW21ldGhvZE5hbWVdOwoKICAgICAgLy8gVGhlIG1ldGhvZCBkb2Vzbid0IGV4aXN0IG9uIHRoZSBkZWxlZ2F0ZWUuIEluc3RlYWQsCiAgICAgIC8vIGNhbGwgdGhlIG1ldGhvZCBvbiB0aGUgZGVsZWdhdG9yLCBpZiBpdCBleGlzdHMuCiAgICAgIGlmICghbWV0aG9kKSB7CiAgICAgICAgdGFyZ2V0ID0gZGVsZWdhdG9yOwogICAgICAgIG1ldGhvZCA9IGluaGVyaXRlZDsKICAgICAgfQoKICAgICAgaWYgKG1ldGhvZCkgewogICAgICAgIHJldHVybiBtZXRob2QuYXBwbHkodGFyZ2V0LCBhcmd1bWVudHMpOwogICAgICB9CiAgICB9OwogIH0KCiAgLy8gSW1wbGVtZW50IGEgdmFndWUgZmFjc2ltaWxpZSBvZiBqUXVlcnkncyBkYXRhIG1ldGhvZAogIGZ1bmN0aW9uIGVsZW1lbnREYXRhKGVsLCBuYW1lLCB2YWx1ZSkgewogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMikgewogICAgICByZXR1cm4gZWxbImh0bWx3aWRnZXRfZGF0YV8iICsgbmFtZV07CiAgICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMykgewogICAgICBlbFsiaHRtbHdpZGdldF9kYXRhXyIgKyBuYW1lXSA9IHZhbHVlOwogICAgICByZXR1cm4gZWw7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIGVsZW1lbnREYXRhOiAiICsKICAgICAgICBhcmd1bWVudHMubGVuZ3RoKTsKICAgIH0KICB9CgogIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzQ0NjE3MC9lc2NhcGUtc3RyaW5nLWZvci11c2UtaW4tamF2YXNjcmlwdC1yZWdleAogIGZ1bmN0aW9uIGVzY2FwZVJlZ0V4cChzdHIpIHsKICAgIHJldHVybiBzdHIucmVwbGFjZSgvW1wtXFtcXVwvXHtcfVwoXClcKlwrXD9cLlxcXF5cJFx8XS9nLCAiXFwkJiIpOwogIH0KCiAgZnVuY3Rpb24gaGFzQ2xhc3MoZWwsIGNsYXNzTmFtZSkgewogICAgdmFyIHJlID0gbmV3IFJlZ0V4cCgiXFxiIiArIGVzY2FwZVJlZ0V4cChjbGFzc05hbWUpICsgIlxcYiIpOwogICAgcmV0dXJuIHJlLnRlc3QoZWwuY2xhc3NOYW1lKTsKICB9CgogIC8vIGVsZW1lbnRzIC0gYXJyYXkgKG9yIGFycmF5LWxpa2Ugb2JqZWN0KSBvZiBIVE1MIGVsZW1lbnRzCiAgLy8gY2xhc3NOYW1lIC0gY2xhc3MgbmFtZSB0byB0ZXN0IGZvcgogIC8vIGluY2x1ZGUgLSBpZiB0cnVlLCBvbmx5IHJldHVybiBlbGVtZW50cyB3aXRoIGdpdmVuIGNsYXNzTmFtZTsKICAvLyAgIGlmIGZhbHNlLCBvbmx5IHJldHVybiBlbGVtZW50cyAqd2l0aG91dCogZ2l2ZW4gY2xhc3NOYW1lCiAgZnVuY3Rpb24gZmlsdGVyQnlDbGFzcyhlbGVtZW50cywgY2xhc3NOYW1lLCBpbmNsdWRlKSB7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykgewogICAgICBpZiAoaGFzQ2xhc3MoZWxlbWVudHNbaV0sIGNsYXNzTmFtZSkgPT0gaW5jbHVkZSkKICAgICAgICByZXN1bHRzLnB1c2goZWxlbWVudHNbaV0pOwogICAgfQogICAgcmV0dXJuIHJlc3VsdHM7CiAgfQoKICBmdW5jdGlvbiBvbihvYmosIGV2ZW50TmFtZSwgZnVuYykgewogICAgaWYgKG9iai5hZGRFdmVudExpc3RlbmVyKSB7CiAgICAgIG9iai5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZnVuYywgZmFsc2UpOwogICAgfSBlbHNlIGlmIChvYmouYXR0YWNoRXZlbnQpIHsKICAgICAgb2JqLmF0dGFjaEV2ZW50KGV2ZW50TmFtZSwgZnVuYyk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBvZmYob2JqLCBldmVudE5hbWUsIGZ1bmMpIHsKICAgIGlmIChvYmoucmVtb3ZlRXZlbnRMaXN0ZW5lcikKICAgICAgb2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBmdW5jLCBmYWxzZSk7CiAgICBlbHNlIGlmIChvYmouZGV0YWNoRXZlbnQpIHsKICAgICAgb2JqLmRldGFjaEV2ZW50KGV2ZW50TmFtZSwgZnVuYyk7CiAgICB9CiAgfQoKICAvLyBUcmFuc2xhdGUgYXJyYXkgb2YgdmFsdWVzIHRvIHRvcC9yaWdodC9ib3R0b20vbGVmdCwgYXMgdXN1YWwgd2l0aAogIC8vIHRoZSAicGFkZGluZyIgQ1NTIHByb3BlcnR5CiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3BhZGRpbmcKICBmdW5jdGlvbiB1bnBhY2tQYWRkaW5nKHZhbHVlKSB7CiAgICBpZiAodHlwZW9mKHZhbHVlKSA9PT0gIm51bWJlciIpCiAgICAgIHZhbHVlID0gW3ZhbHVlXTsKICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDEpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMF0sIGJvdHRvbTogdmFsdWVbMF0sIGxlZnQ6IHZhbHVlWzBdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDIpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMF0sIGxlZnQ6IHZhbHVlWzFdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDMpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMl0sIGxlZnQ6IHZhbHVlWzFdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDQpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMl0sIGxlZnQ6IHZhbHVlWzNdfTsKICAgIH0KICB9CgogIC8vIENvbnZlcnQgYW4gdW5wYWNrZWQgcGFkZGluZyBvYmplY3QgdG8gYSBDU1MgdmFsdWUKICBmdW5jdGlvbiBwYWRkaW5nVG9Dc3MocGFkZGluZ09iaikgewogICAgcmV0dXJuIHBhZGRpbmdPYmoudG9wICsgInB4ICIgKyBwYWRkaW5nT2JqLnJpZ2h0ICsgInB4ICIgKyBwYWRkaW5nT2JqLmJvdHRvbSArICJweCAiICsgcGFkZGluZ09iai5sZWZ0ICsgInB4IjsKICB9CgogIC8vIE1ha2VzIGEgbnVtYmVyIHN1aXRhYmxlIGZvciBDU1MKICBmdW5jdGlvbiBweCh4KSB7CiAgICBpZiAodHlwZW9mKHgpID09PSAibnVtYmVyIikKICAgICAgcmV0dXJuIHggKyAicHgiOwogICAgZWxzZQogICAgICByZXR1cm4geDsKICB9CgogIC8vIFJldHJpZXZlcyBydW50aW1lIHdpZGdldCBzaXppbmcgaW5mb3JtYXRpb24gZm9yIGFuIGVsZW1lbnQuCiAgLy8gVGhlIHJldHVybiB2YWx1ZSBpcyBlaXRoZXIgbnVsbCwgb3IgYW4gb2JqZWN0IHdpdGggZmlsbCwgcGFkZGluZywKICAvLyBkZWZhdWx0V2lkdGgsIGRlZmF1bHRIZWlnaHQgZmllbGRzLgogIGZ1bmN0aW9uIHNpemluZ1BvbGljeShlbCkgewogICAgdmFyIHNpemluZ0VsID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigic2NyaXB0W2RhdGEtZm9yPSciICsgZWwuaWQgKyAiJ11bdHlwZT0nYXBwbGljYXRpb24vaHRtbHdpZGdldC1zaXppbmcnXSIpOwogICAgaWYgKCFzaXppbmdFbCkKICAgICAgcmV0dXJuIG51bGw7CiAgICB2YXIgc3AgPSBKU09OLnBhcnNlKHNpemluZ0VsLnRleHRDb250ZW50IHx8IHNpemluZ0VsLnRleHQgfHwgInt9Iik7CiAgICBpZiAodmlld2VyTW9kZSkgewogICAgICByZXR1cm4gc3Audmlld2VyOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHNwLmJyb3dzZXI7CiAgICB9CiAgfQoKICAvLyBAcGFyYW0gdGFza3MgQXJyYXkgb2Ygc3RyaW5ncyAob3IgZmFsc3kgdmFsdWUsIGluIHdoaWNoIGNhc2Ugbm8tb3ApLgogIC8vICAgRWFjaCBlbGVtZW50IG11c3QgYmUgYSB2YWxpZCBKYXZhU2NyaXB0IGV4cHJlc3Npb24gdGhhdCB5aWVsZHMgYQogIC8vICAgZnVuY3Rpb24uIE9yLCBjYW4gYmUgYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoICJjb2RlIiBhbmQgImRhdGEiCiAgLy8gICBwcm9wZXJ0aWVzOyBpbiB0aGlzIGNhc2UsIHRoZSAiY29kZSIgcHJvcGVydHkgc2hvdWxkIGJlIGEgc3RyaW5nCiAgLy8gICBvZiBKUyB0aGF0J3MgYW4gZXhwciB0aGF0IHlpZWxkcyBhIGZ1bmN0aW9uLCBhbmQgImRhdGEiIHNob3VsZCBiZQogIC8vICAgYW4gb2JqZWN0IHRoYXQgd2lsbCBiZSBhZGRlZCBhcyBhbiBhZGRpdGlvbmFsIGFyZ3VtZW50IHdoZW4gdGhhdAogIC8vICAgZnVuY3Rpb24gaXMgY2FsbGVkLgogIC8vIEBwYXJhbSB0YXJnZXQgVGhlIG9iamVjdCB0aGF0IHdpbGwgYmUgInRoaXMiIGZvciBlYWNoIGZ1bmN0aW9uCiAgLy8gICBleGVjdXRpb24uCiAgLy8gQHBhcmFtIGFyZ3MgQXJyYXkgb2YgYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb25zLiAoVGhlCiAgLy8gICBzYW1lIGFyZ3VtZW50cyB3aWxsIGJlIHBhc3NlZCB0byBhbGwgZnVuY3Rpb25zLikKICBmdW5jdGlvbiBldmFsQW5kUnVuKHRhc2tzLCB0YXJnZXQsIGFyZ3MpIHsKICAgIGlmICh0YXNrcykgewogICAgICBmb3JFYWNoKHRhc2tzLCBmdW5jdGlvbih0YXNrKSB7CiAgICAgICAgdmFyIHRoZXNlQXJncyA9IGFyZ3M7CiAgICAgICAgaWYgKHR5cGVvZih0YXNrKSA9PT0gIm9iamVjdCIpIHsKICAgICAgICAgIHRoZXNlQXJncyA9IHRoZXNlQXJncy5jb25jYXQoW3Rhc2suZGF0YV0pOwogICAgICAgICAgdGFzayA9IHRhc2suY29kZTsKICAgICAgICB9CiAgICAgICAgdmFyIHRhc2tGdW5jID0gZXZhbCgiKCIgKyB0YXNrICsgIikiKTsKICAgICAgICBpZiAodHlwZW9mKHRhc2tGdW5jKSAhPT0gImZ1bmN0aW9uIikgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUYXNrIG11c3QgYmUgYSBmdW5jdGlvbiEgU291cmNlOlxuIiArIHRhc2spOwogICAgICAgIH0KICAgICAgICB0YXNrRnVuYy5hcHBseSh0YXJnZXQsIHRoZXNlQXJncyk7CiAgICAgIH0pOwogICAgfQogIH0KCiAgZnVuY3Rpb24gaW5pdFNpemluZyhlbCkgewogICAgdmFyIHNpemluZyA9IHNpemluZ1BvbGljeShlbCk7CiAgICBpZiAoIXNpemluZykKICAgICAgcmV0dXJuOwoKICAgIHZhciBjZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaHRtbHdpZGdldF9jb250YWluZXIiKTsKICAgIGlmICghY2VsKQogICAgICByZXR1cm47CgogICAgaWYgKHR5cGVvZihzaXppbmcucGFkZGluZykgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUubWFyZ2luID0gIjAiOwogICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmcgPSBwYWRkaW5nVG9Dc3ModW5wYWNrUGFkZGluZyhzaXppbmcucGFkZGluZykpOwogICAgfQoKICAgIGlmIChzaXppbmcuZmlsbCkgewogICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gImhpZGRlbiI7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUud2lkdGggPSAiMTAwJSI7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuaGVpZ2h0ID0gIjEwMCUiOwogICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUud2lkdGggPSAiMTAwJSI7CiAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5oZWlnaHQgPSAiMTAwJSI7CiAgICAgIGlmIChjZWwpIHsKICAgICAgICBjZWwuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOwogICAgICAgIHZhciBwYWQgPSB1bnBhY2tQYWRkaW5nKHNpemluZy5wYWRkaW5nKTsKICAgICAgICBjZWwuc3R5bGUudG9wID0gcGFkLnRvcCArICJweCI7CiAgICAgICAgY2VsLnN0eWxlLnJpZ2h0ID0gcGFkLnJpZ2h0ICsgInB4IjsKICAgICAgICBjZWwuc3R5bGUuYm90dG9tID0gcGFkLmJvdHRvbSArICJweCI7CiAgICAgICAgY2VsLnN0eWxlLmxlZnQgPSBwYWQubGVmdCArICJweCI7CiAgICAgICAgZWwuc3R5bGUud2lkdGggPSAiMTAwJSI7CiAgICAgICAgZWwuc3R5bGUuaGVpZ2h0ID0gIjEwMCUiOwogICAgICB9CgogICAgICByZXR1cm4gewogICAgICAgIGdldFdpZHRoOiBmdW5jdGlvbigpIHsgcmV0dXJuIGNlbC5vZmZzZXRXaWR0aDsgfSwKICAgICAgICBnZXRIZWlnaHQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gY2VsLm9mZnNldEhlaWdodDsgfQogICAgICB9OwoKICAgIH0gZWxzZSB7CiAgICAgIGVsLnN0eWxlLndpZHRoID0gcHgoc2l6aW5nLndpZHRoKTsKICAgICAgZWwuc3R5bGUuaGVpZ2h0ID0gcHgoc2l6aW5nLmhlaWdodCk7CgogICAgICByZXR1cm4gewogICAgICAgIGdldFdpZHRoOiBmdW5jdGlvbigpIHsgcmV0dXJuIGVsLm9mZnNldFdpZHRoOyB9LAogICAgICAgIGdldEhlaWdodDogZnVuY3Rpb24oKSB7IHJldHVybiBlbC5vZmZzZXRIZWlnaHQ7IH0KICAgICAgfTsKICAgIH0KICB9CgogIC8vIERlZmF1bHQgaW1wbGVtZW50YXRpb25zIGZvciBtZXRob2RzCiAgdmFyIGRlZmF1bHRzID0gewogICAgZmluZDogZnVuY3Rpb24oc2NvcGUpIHsKICAgICAgcmV0dXJuIHF1ZXJ5U2VsZWN0b3JBbGwoc2NvcGUsICIuIiArIHRoaXMubmFtZSk7CiAgICB9LAogICAgcmVuZGVyRXJyb3I6IGZ1bmN0aW9uKGVsLCBlcnIpIHsKICAgICAgdmFyICRlbCA9ICQoZWwpOwoKICAgICAgdGhpcy5jbGVhckVycm9yKGVsKTsKCiAgICAgIC8vIEFkZCBhbGwgdGhlc2UgZXJyb3IgY2xhc3NlcywgYXMgU2hpbnkgZG9lcwogICAgICB2YXIgZXJyQ2xhc3MgPSAic2hpbnktb3V0cHV0LWVycm9yIjsKICAgICAgaWYgKGVyci50eXBlICE9PSBudWxsKSB7CiAgICAgICAgLy8gdXNlIHRoZSBjbGFzc2VzIG9mIHRoZSBlcnJvciBjb25kaXRpb24gYXMgQ1NTIGNsYXNzIG5hbWVzCiAgICAgICAgZXJyQ2xhc3MgPSBlcnJDbGFzcyArICIgIiArICQubWFwKGFzQXJyYXkoZXJyLnR5cGUpLCBmdW5jdGlvbih0eXBlKSB7CiAgICAgICAgICByZXR1cm4gZXJyQ2xhc3MgKyAiLSIgKyB0eXBlOwogICAgICAgIH0pLmpvaW4oIiAiKTsKICAgICAgfQogICAgICBlcnJDbGFzcyA9IGVyckNsYXNzICsgIiBodG1sd2lkZ2V0cy1lcnJvciI7CgogICAgICAvLyBJcyBlbCBpbmxpbmUgb3IgYmxvY2s/IElmIGlubGluZSBvciBpbmxpbmUtYmxvY2ssIGp1c3QgZGlzcGxheTpub25lIGl0CiAgICAgIC8vIGFuZCBhZGQgYW4gaW5saW5lIGVycm9yLgogICAgICB2YXIgZGlzcGxheSA9ICRlbC5jc3MoImRpc3BsYXkiKTsKICAgICAgJGVsLmRhdGEoInJlc3RvcmUtZGlzcGxheS1tb2RlIiwgZGlzcGxheSk7CgogICAgICBpZiAoZGlzcGxheSA9PT0gImlubGluZSIgfHwgZGlzcGxheSA9PT0gImlubGluZS1ibG9jayIpIHsKICAgICAgICAkZWwuaGlkZSgpOwogICAgICAgIGlmIChlcnIubWVzc2FnZSAhPT0gIiIpIHsKICAgICAgICAgIHZhciBlcnJvclNwYW4gPSAkKCI8c3Bhbj4iKS5hZGRDbGFzcyhlcnJDbGFzcyk7CiAgICAgICAgICBlcnJvclNwYW4udGV4dChlcnIubWVzc2FnZSk7CiAgICAgICAgICAkZWwuYWZ0ZXIoZXJyb3JTcGFuKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoZGlzcGxheSA9PT0gImJsb2NrIikgewogICAgICAgIC8vIElmIGJsb2NrLCBhZGQgYW4gZXJyb3IganVzdCBhZnRlciB0aGUgZWwsIHNldCB2aXNpYmlsaXR5Om5vbmUgb24gdGhlCiAgICAgICAgLy8gZWwsIGFuZCBwb3NpdGlvbiB0aGUgZXJyb3IgdG8gYmUgb24gdG9wIG9mIHRoZSBlbC4KICAgICAgICAvLyBNYXJrIGl0IHdpdGggYSB1bmlxdWUgSUQgYW5kIENTUyBjbGFzcyBzbyB3ZSBjYW4gcmVtb3ZlIGl0IGxhdGVyLgogICAgICAgICRlbC5jc3MoInZpc2liaWxpdHkiLCAiaGlkZGVuIik7CiAgICAgICAgaWYgKGVyci5tZXNzYWdlICE9PSAiIikgewogICAgICAgICAgdmFyIGVycm9yRGl2ID0gJCgiPGRpdj4iKS5hZGRDbGFzcyhlcnJDbGFzcykuY3NzKCJwb3NpdGlvbiIsICJhYnNvbHV0ZSIpCiAgICAgICAgICAgIC5jc3MoInRvcCIsIGVsLm9mZnNldFRvcCkKICAgICAgICAgICAgLmNzcygibGVmdCIsIGVsLm9mZnNldExlZnQpCiAgICAgICAgICAgIC8vIHNldHRpbmcgd2lkdGggY2FuIHB1c2ggb3V0IHRoZSBwYWdlIHNpemUsIGZvcmNpbmcgb3RoZXJ3aXNlCiAgICAgICAgICAgIC8vIHVubmVjZXNzYXJ5IHNjcm9sbGJhcnMgdG8gYXBwZWFyIGFuZCBtYWtpbmcgaXQgaW1wb3NzaWJsZSBmb3IKICAgICAgICAgICAgLy8gdGhlIGVsZW1lbnQgdG8gc2hyaW5rOyBzbyB1c2UgbWF4LXdpZHRoIGluc3RlYWQKICAgICAgICAgICAgLmNzcygibWF4V2lkdGgiLCBlbC5vZmZzZXRXaWR0aCkKICAgICAgICAgICAgLmNzcygiaGVpZ2h0IiwgZWwub2Zmc2V0SGVpZ2h0KTsKICAgICAgICAgIGVycm9yRGl2LnRleHQoZXJyLm1lc3NhZ2UpOwogICAgICAgICAgJGVsLmFmdGVyKGVycm9yRGl2KTsKCiAgICAgICAgICAvLyBSZWFsbHkgZHVtYiB3YXkgdG8ga2VlcCB0aGUgc2l6ZS9wb3NpdGlvbiBvZiB0aGUgZXJyb3IgaW4gc3luYyB3aXRoCiAgICAgICAgICAvLyB0aGUgcGFyZW50IGVsZW1lbnQgYXMgdGhlIHdpbmRvdyBpcyByZXNpemVkIG9yIHdoYXRldmVyLgogICAgICAgICAgdmFyIGludElkID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGlmICghZXJyb3JEaXZbMF0ucGFyZW50RWxlbWVudCkgewogICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50SWQpOwogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBlcnJvckRpdgogICAgICAgICAgICAgIC5jc3MoInRvcCIsIGVsLm9mZnNldFRvcCkKICAgICAgICAgICAgICAuY3NzKCJsZWZ0IiwgZWwub2Zmc2V0TGVmdCkKICAgICAgICAgICAgICAuY3NzKCJtYXhXaWR0aCIsIGVsLm9mZnNldFdpZHRoKQogICAgICAgICAgICAgIC5jc3MoImhlaWdodCIsIGVsLm9mZnNldEhlaWdodCk7CiAgICAgICAgICB9LCA1MDApOwogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIGNsZWFyRXJyb3I6IGZ1bmN0aW9uKGVsKSB7CiAgICAgIHZhciAkZWwgPSAkKGVsKTsKICAgICAgdmFyIGRpc3BsYXkgPSAkZWwuZGF0YSgicmVzdG9yZS1kaXNwbGF5LW1vZGUiKTsKICAgICAgJGVsLmRhdGEoInJlc3RvcmUtZGlzcGxheS1tb2RlIiwgbnVsbCk7CgogICAgICBpZiAoZGlzcGxheSA9PT0gImlubGluZSIgfHwgZGlzcGxheSA9PT0gImlubGluZS1ibG9jayIpIHsKICAgICAgICBpZiAoZGlzcGxheSkKICAgICAgICAgICRlbC5jc3MoImRpc3BsYXkiLCBkaXNwbGF5KTsKICAgICAgICAkKGVsLm5leHRTaWJsaW5nKS5maWx0ZXIoIi5odG1sd2lkZ2V0cy1lcnJvciIpLnJlbW92ZSgpOwogICAgICB9IGVsc2UgaWYgKGRpc3BsYXkgPT09ICJibG9jayIpewogICAgICAgICRlbC5jc3MoInZpc2liaWxpdHkiLCAiaW5oZXJpdCIpOwogICAgICAgICQoZWwubmV4dFNpYmxpbmcpLmZpbHRlcigiLmh0bWx3aWRnZXRzLWVycm9yIikucmVtb3ZlKCk7CiAgICAgIH0KICAgIH0sCiAgICBzaXppbmc6IHt9CiAgfTsKCiAgLy8gQ2FsbGVkIGJ5IHdpZGdldCBiaW5kaW5ncyB0byByZWdpc3RlciBhIG5ldyB0eXBlIG9mIHdpZGdldC4gVGhlIGRlZmluaXRpb24KICAvLyBvYmplY3QgY2FuIGNvbnRhaW4gdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgogIC8vIC0gbmFtZSAocmVxdWlyZWQpIC0gQSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgYmluZGluZyBuYW1lLCB3aGljaCB3aWxsIGJlCiAgLy8gICB1c2VkIGJ5IGRlZmF1bHQgYXMgdGhlIENTUyBjbGFzc25hbWUgdG8gbG9vayBmb3IuCiAgLy8gLSBpbml0aWFsaXplIChvcHRpb25hbCkgLSBBIGZ1bmN0aW9uKGVsKSB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uY2UgcGVyCiAgLy8gICB3aWRnZXQgZWxlbWVudDsgaWYgYSB2YWx1ZSBpcyByZXR1cm5lZCwgaXQgd2lsbCBiZSBwYXNzZWQgYXMgdGhlIHRoaXJkCiAgLy8gICB2YWx1ZSB0byByZW5kZXJWYWx1ZS4KICAvLyAtIHJlbmRlclZhbHVlIChyZXF1aXJlZCkgLSBBIGZ1bmN0aW9uKGVsLCBkYXRhLCBpbml0VmFsdWUpIHRoYXQgd2lsbCBiZQogIC8vICAgY2FsbGVkIHdpdGggZGF0YS4gU3RhdGljIGNvbnRleHRzIHdpbGwgY2F1c2UgdGhpcyB0byBiZSBjYWxsZWQgb25jZSBwZXIKICAvLyAgIGVsZW1lbnQ7IFNoaW55IGFwcHMgd2lsbCBjYXVzZSB0aGlzIHRvIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBwZXIKICAvLyAgIGVsZW1lbnQsIGFzIHRoZSBkYXRhIGNoYW5nZXMuCiAgd2luZG93LkhUTUxXaWRnZXRzLndpZGdldCA9IGZ1bmN0aW9uKGRlZmluaXRpb24pIHsKICAgIGlmICghZGVmaW5pdGlvbi5uYW1lKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiV2lkZ2V0IG11c3QgaGF2ZSBhIG5hbWUiKTsKICAgIH0KICAgIGlmICghZGVmaW5pdGlvbi50eXBlKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiV2lkZ2V0IG11c3QgaGF2ZSBhIHR5cGUiKTsKICAgIH0KICAgIC8vIEN1cnJlbnRseSB3ZSBvbmx5IHN1cHBvcnQgb3V0cHV0IHdpZGdldHMKICAgIGlmIChkZWZpbml0aW9uLnR5cGUgIT09ICJvdXRwdXQiKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHdpZGdldCB0eXBlICciICsgZGVmaW5pdGlvbi50eXBlICsgIiciKTsKICAgIH0KICAgIC8vIFRPRE86IFZlcmlmeSB0aGF0IC5uYW1lIGlzIGEgdmFsaWQgQ1NTIGNsYXNzbmFtZQoKICAgIC8vIFN1cHBvcnQgbmV3LXN0eWxlIGluc3RhbmNlLWJvdW5kIGRlZmluaXRpb25zLiBPbGQtc3R5bGUgY2xhc3MtYm91bmQKICAgIC8vIGRlZmluaXRpb25zIGhhdmUgb25lIHdpZGdldCAib2JqZWN0IiBwZXIgd2lkZ2V0IHBlciB0eXBlL2NsYXNzIG9mCiAgICAvLyB3aWRnZXQ7IHRoZSByZW5kZXJWYWx1ZSBhbmQgcmVzaXplIG1ldGhvZHMgb24gc3VjaCB3aWRnZXQgb2JqZWN0cwogICAgLy8gdGFrZSBlbCBhbmQgaW5zdGFuY2UgYXJndW1lbnRzLCBiZWNhdXNlIHRoZSB3aWRnZXQgb2JqZWN0IGNhbid0CiAgICAvLyBzdG9yZSB0aGVtLiBOZXctc3R5bGUgaW5zdGFuY2UtYm91bmQgZGVmaW5pdGlvbnMgaGF2ZSBvbmUgd2lkZ2V0CiAgICAvLyBvYmplY3QgcGVyIHdpZGdldCBpbnN0YW5jZTsgdGhlIGRlZmluaXRpb24gdGhhdCdzIHBhc3NlZCBpbiBkb2Vzbid0CiAgICAvLyBwcm92aWRlIHJlbmRlclZhbHVlIG9yIHJlc2l6ZSBtZXRob2RzIGF0IGFsbCwganVzdCB0aGUgc2luZ2xlIG1ldGhvZAogICAgLy8gICBmYWN0b3J5KGVsLCB3aWR0aCwgaGVpZ2h0KQogICAgLy8gd2hpY2ggcmV0dXJucyBhbiBvYmplY3QgdGhhdCBoYXMgcmVuZGVyVmFsdWUoeCkgYW5kIHJlc2l6ZSh3LCBoKS4KICAgIC8vIFRoaXMgZW5hYmxlcyBhIGZhciBtb3JlIG5hdHVyYWwgcHJvZ3JhbW1pbmcgc3R5bGUgZm9yIHRoZSB3aWRnZXQKICAgIC8vIGF1dGhvciwgd2hvIGNhbiBzdG9yZSBwZXItaW5zdGFuY2Ugc3RhdGUgdXNpbmcgZWl0aGVyIE9PLXN0eWxlCiAgICAvLyBpbnN0YW5jZSBmaWVsZHMgb3IgZnVuY3Rpb25hbC1zdHlsZSBjbG9zdXJlIHZhcmlhYmxlcyAoSSBndWVzcyB0aGlzCiAgICAvLyBpcyBpbiBjb250cmFzdCB0byB3aGF0IGNhbiBvbmx5IGJlIGNhbGxlZCBDLXN0eWxlIHBzZXVkby1PTyB3aGljaCBpcwogICAgLy8gd2hhdCB3ZSByZXF1aXJlZCBiZWZvcmUpLgogICAgaWYgKGRlZmluaXRpb24uZmFjdG9yeSkgewogICAgICBkZWZpbml0aW9uID0gY3JlYXRlTGVnYWN5RGVmaW5pdGlvbkFkYXB0ZXIoZGVmaW5pdGlvbik7CiAgICB9CgogICAgaWYgKCFkZWZpbml0aW9uLnJlbmRlclZhbHVlKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiV2lkZ2V0IG11c3QgaGF2ZSBhIHJlbmRlclZhbHVlIGZ1bmN0aW9uIik7CiAgICB9CgogICAgLy8gRm9yIHN0YXRpYyByZW5kZXJpbmcgKG5vbi1TaGlueSksIHVzZSBhIHNpbXBsZSB3aWRnZXQgcmVnaXN0cmF0aW9uCiAgICAvLyBzY2hlbWUuIFdlIGFsc28gdXNlIHRoaXMgc2NoZW1lIGZvciBTaGlueSBhcHBzL2RvY3VtZW50cyB0aGF0IGFsc28KICAgIC8vIGNvbnRhaW4gc3RhdGljIHdpZGdldHMuCiAgICB3aW5kb3cuSFRNTFdpZGdldHMud2lkZ2V0cyA9IHdpbmRvdy5IVE1MV2lkZ2V0cy53aWRnZXRzIHx8IFtdOwogICAgLy8gTWVyZ2UgZGVmYXVsdHMgaW50byB0aGUgZGVmaW5pdGlvbjsgZG9uJ3QgbXV0YXRlIHRoZSBvcmlnaW5hbCBkZWZpbml0aW9uLgogICAgdmFyIHN0YXRpY0JpbmRpbmcgPSBleHRlbmQoe30sIGRlZmF1bHRzLCBkZWZpbml0aW9uKTsKICAgIG92ZXJyaWRlTWV0aG9kKHN0YXRpY0JpbmRpbmcsICJmaW5kIiwgZnVuY3Rpb24oc3VwZXJmdW5jKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbihzY29wZSkgewogICAgICAgIHZhciByZXN1bHRzID0gc3VwZXJmdW5jKHNjb3BlKTsKICAgICAgICAvLyBGaWx0ZXIgb3V0IFNoaW55IG91dHB1dHMsIHdlIG9ubHkgd2FudCB0aGUgc3RhdGljIGtpbmQKICAgICAgICByZXR1cm4gZmlsdGVyQnlDbGFzcyhyZXN1bHRzLCAiaHRtbC13aWRnZXQtb3V0cHV0IiwgZmFsc2UpOwogICAgICB9OwogICAgfSk7CiAgICB3aW5kb3cuSFRNTFdpZGdldHMud2lkZ2V0cy5wdXNoKHN0YXRpY0JpbmRpbmcpOwoKICAgIGlmIChzaGlueU1vZGUpIHsKICAgICAgLy8gU2hpbnkgaXMgcnVubmluZy4gUmVnaXN0ZXIgdGhlIGRlZmluaXRpb24gd2l0aCBhbiBvdXRwdXQgYmluZGluZy4KICAgICAgLy8gVGhlIGRlZmluaXRpb24gaXRzZWxmIHdpbGwgbm90IGJlIHRoZSBvdXRwdXQgYmluZGluZywgaW5zdGVhZAogICAgICAvLyB3ZSB3aWxsIG1ha2UgYW4gb3V0cHV0IGJpbmRpbmcgb2JqZWN0IHRoYXQgZGVsZWdhdGVzIHRvIHRoZQogICAgICAvLyBkZWZpbml0aW9uLiBUaGlzIGlzIGJlY2F1c2Ugd2UgZm9vbGlzaGx5IHVzZWQgdGhlIHNhbWUgbWV0aG9kCiAgICAgIC8vIG5hbWUgKHJlbmRlclZhbHVlKSBmb3IgaHRtbHdpZGdldHMgZGVmaW5pdGlvbiBhbmQgU2hpbnkgYmluZGluZ3MKICAgICAgLy8gYnV0IHRoZXkgYWN0dWFsbHkgaGF2ZSBxdWl0ZSBkaWZmZXJlbnQgc2VtYW50aWNzICh0aGUgU2hpbnkKICAgICAgLy8gYmluZGluZ3MgcmVjZWl2ZSBkYXRhIHRoYXQgaW5jbHVkZXMgbG90cyBvZiBtZXRhZGF0YSB0aGF0IGl0CiAgICAgIC8vIHN0cmlwcyBvZmYgYmVmb3JlIGNhbGxpbmcgaHRtbHdpZGdldHMgcmVuZGVyVmFsdWUpLiBXZSBjYW4ndAogICAgICAvLyBqdXN0IGlnbm9yZSB0aGUgZGlmZmVyZW5jZSBiZWNhdXNlIGluIHNvbWUgd2lkZ2V0cyBpdCdzIGhlbHBmdWwKICAgICAgLy8gdG8gY2FsbCB0aGlzLnJlbmRlclZhbHVlKCkgZnJvbSBpbnNpZGUgb2YgcmVzaXplKCksIGFuZCBpZgogICAgICAvLyB3ZSdyZSBub3QgZGVsZWdhdGluZywgdGhlbiB0aGF0IGNhbGwgd2lsbCBnbyB0byB0aGUgU2hpbnkKICAgICAgLy8gdmVyc2lvbiBpbnN0ZWFkIG9mIHRoZSBodG1sd2lkZ2V0cyB2ZXJzaW9uLgoKICAgICAgLy8gTWVyZ2UgZGVmYXVsdHMgd2l0aCBkZWZpbml0aW9uLCB3aXRob3V0IG11dGF0aW5nIGVpdGhlci4KICAgICAgdmFyIGJpbmRpbmdEZWYgPSBleHRlbmQoe30sIGRlZmF1bHRzLCBkZWZpbml0aW9uKTsKCiAgICAgIC8vIFRoaXMgb2JqZWN0IHdpbGwgYmUgb3VyIGFjdHVhbCBTaGlueSBiaW5kaW5nLgogICAgICB2YXIgc2hpbnlCaW5kaW5nID0gbmV3IFNoaW55Lk91dHB1dEJpbmRpbmcoKTsKCiAgICAgIC8vIFdpdGggYSBmZXcgZXhjZXB0aW9ucywgd2UnbGwgd2FudCB0byBzaW1wbHkgdXNlIHRoZSBiaW5kaW5nRGVmJ3MKICAgICAgLy8gdmVyc2lvbiBvZiBtZXRob2RzIGlmIHRoZXkgYXJlIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0bwogICAgICAvLyBTaGlueSdzIGRlZmF1bHRzLiBOT1RFOiBJZiBTaGlueSdzIG91dHB1dCBiaW5kaW5ncyBnYWluIGFkZGl0aW9uYWwKICAgICAgLy8gbWV0aG9kcyBpbiB0aGUgZnV0dXJlLCBhbmQgd2Ugd2FudCB0aGVtIHRvIGJlIG92ZXJyaWRlYWJsZSBieQogICAgICAvLyBIVE1MV2lkZ2V0IGJpbmRpbmcgZGVmaW5pdGlvbnMsIHRoZW4gd2UnbGwgbmVlZCB0byBhZGQgdGhlbSB0byB0aGlzCiAgICAgIC8vIGxpc3QuCiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgImdldElkIik7CiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgIm9uVmFsdWVDaGFuZ2UiKTsKICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAib25WYWx1ZUVycm9yIik7CiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgInJlbmRlckVycm9yIik7CiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgImNsZWFyRXJyb3IiKTsKICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAic2hvd1Byb2dyZXNzIik7CgogICAgICAvLyBUaGUgZmluZCwgcmVuZGVyVmFsdWUsIGFuZCByZXNpemUgYXJlIGhhbmRsZWQgZGlmZmVyZW50bHksIGJlY2F1c2Ugd2UKICAgICAgLy8gd2FudCB0byBhY3R1YWxseSBkZWNvcmF0ZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGJpbmRpbmdEZWYgbWV0aG9kcy4KCiAgICAgIHNoaW55QmluZGluZy5maW5kID0gZnVuY3Rpb24oc2NvcGUpIHsKICAgICAgICB2YXIgcmVzdWx0cyA9IGJpbmRpbmdEZWYuZmluZChzY29wZSk7CgogICAgICAgIC8vIE9ubHkgcmV0dXJuIGVsZW1lbnRzIHRoYXQgYXJlIFNoaW55IG91dHB1dHMsIG5vdCBzdGF0aWMgb25lcwogICAgICAgIHZhciBkeW5hbWljUmVzdWx0cyA9IHJlc3VsdHMuZmlsdGVyKCIuaHRtbC13aWRnZXQtb3V0cHV0Iik7CgogICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB3aGF0ZXZlciBjYXVzZWQgU2hpbnkgdG8gdGhpbmsgdGhlcmUgbWlnaHQgYmUKICAgICAgICAvLyBuZXcgZHluYW1pYyBvdXRwdXRzLCBhbHNvIGNhdXNlZCB0aGVyZSB0byBiZSBuZXcgc3RhdGljIG91dHB1dHMuCiAgICAgICAgLy8gU2luY2UgdGhlcmUgbWlnaHQgYmUgbG90cyBvZiBkaWZmZXJlbnQgaHRtbHdpZGdldHMgYmluZGluZ3MsIHdlCiAgICAgICAgLy8gc2NoZWR1bGUgZXhlY3V0aW9uIGZvciBsYXRlci0tbm8gbmVlZCB0byBzdGF0aWNSZW5kZXIgbXVsdGlwbGUKICAgICAgICAvLyB0aW1lcy4KICAgICAgICBpZiAocmVzdWx0cy5sZW5ndGggIT09IGR5bmFtaWNSZXN1bHRzLmxlbmd0aCkKICAgICAgICAgIHNjaGVkdWxlU3RhdGljUmVuZGVyKCk7CgogICAgICAgIHJldHVybiBkeW5hbWljUmVzdWx0czsKICAgICAgfTsKCiAgICAgIC8vIFdyYXAgcmVuZGVyVmFsdWUgdG8gaGFuZGxlIGluaXRpYWxpemF0aW9uLCB3aGljaCB1bmZvcnR1bmF0ZWx5IGlzbid0CiAgICAgIC8vIHN1cHBvcnRlZCBuYXRpdmVseSBieSBTaGlueSBhdCB0aGUgdGltZSBvZiB0aGlzIHdyaXRpbmcuCgogICAgICBzaGlueUJpbmRpbmcucmVuZGVyVmFsdWUgPSBmdW5jdGlvbihlbCwgZGF0YSkgewogICAgICAgIC8vIFJlc29sdmUgc3RyaW5ncyBtYXJrZWQgYXMgamF2YXNjcmlwdCBsaXRlcmFscyB0byBvYmplY3RzCiAgICAgICAgaWYgKCEoZGF0YS5ldmFscyBpbnN0YW5jZW9mIEFycmF5KSkgZGF0YS5ldmFscyA9IFtkYXRhLmV2YWxzXTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgZGF0YS5ldmFscyAmJiBpIDwgZGF0YS5ldmFscy5sZW5ndGg7IGkrKykgewogICAgICAgICAgd2luZG93LkhUTUxXaWRnZXRzLmV2YWx1YXRlU3RyaW5nTWVtYmVyKGRhdGEueCwgZGF0YS5ldmFsc1tpXSk7CiAgICAgICAgfQogICAgICAgIGlmICghYmluZGluZ0RlZi5yZW5kZXJPbk51bGxWYWx1ZSkgewogICAgICAgICAgaWYgKGRhdGEueCA9PT0gbnVsbCkgewogICAgICAgICAgICBlbC5zdHlsZS52aXNpYmlsaXR5ID0gImhpZGRlbiI7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGVsLnN0eWxlLnZpc2liaWxpdHkgPSAiaW5oZXJpdCI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICghZWxlbWVudERhdGEoZWwsICJpbml0aWFsaXplZCIpKSB7CiAgICAgICAgICBpbml0U2l6aW5nKGVsKTsKCiAgICAgICAgICBlbGVtZW50RGF0YShlbCwgImluaXRpYWxpemVkIiwgdHJ1ZSk7CiAgICAgICAgICBpZiAoYmluZGluZ0RlZi5pbml0aWFsaXplKSB7CiAgICAgICAgICAgIHZhciByZXN1bHQgPSBiaW5kaW5nRGVmLmluaXRpYWxpemUoZWwsIGVsLm9mZnNldFdpZHRoLAogICAgICAgICAgICAgIGVsLm9mZnNldEhlaWdodCk7CiAgICAgICAgICAgIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiLCByZXN1bHQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBTaGlueS5yZW5kZXJEZXBlbmRlbmNpZXMoZGF0YS5kZXBzKTsKICAgICAgICBiaW5kaW5nRGVmLnJlbmRlclZhbHVlKGVsLCBkYXRhLngsIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiKSk7CiAgICAgICAgZXZhbEFuZFJ1bihkYXRhLmpzSG9va3MucmVuZGVyLCBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0IiksIFtlbCwgZGF0YS54XSk7CiAgICAgIH07CgogICAgICAvLyBPbmx5IG92ZXJyaWRlIHJlc2l6ZSBpZiBiaW5kaW5nRGVmIGltcGxlbWVudHMgaXQKICAgICAgaWYgKGJpbmRpbmdEZWYucmVzaXplKSB7CiAgICAgICAgc2hpbnlCaW5kaW5nLnJlc2l6ZSA9IGZ1bmN0aW9uKGVsLCB3aWR0aCwgaGVpZ2h0KSB7CiAgICAgICAgICAvLyBTaGlueSBjYW4gY2FsbCByZXNpemUgYmVmb3JlIGluaXRpYWxpemUvcmVuZGVyVmFsdWUgaGF2ZSBiZWVuCiAgICAgICAgICAvLyBjYWxsZWQsIHdoaWNoIGRvZXNuJ3QgbWFrZSBzZW5zZSBmb3Igd2lkZ2V0cy4KICAgICAgICAgIGlmIChlbGVtZW50RGF0YShlbCwgImluaXRpYWxpemVkIikpIHsKICAgICAgICAgICAgYmluZGluZ0RlZi5yZXNpemUoZWwsIHdpZHRoLCBoZWlnaHQsIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiKSk7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgfQoKICAgICAgU2hpbnkub3V0cHV0QmluZGluZ3MucmVnaXN0ZXIoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLm5hbWUpOwogICAgfQogIH07CgogIHZhciBzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQgPSBudWxsOwogIGZ1bmN0aW9uIHNjaGVkdWxlU3RhdGljUmVuZGVyKCkgewogICAgaWYgKCFzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQpIHsKICAgICAgc2NoZWR1bGVTdGF0aWNSZW5kZXJUaW1lcklkID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICBzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQgPSBudWxsOwogICAgICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy5zdGF0aWNSZW5kZXIoKTsKICAgICAgfSwgMSk7CiAgICB9CiAgfQoKICAvLyBSZW5kZXIgc3RhdGljIHdpZGdldHMgYWZ0ZXIgdGhlIGRvY3VtZW50IGZpbmlzaGVzIGxvYWRpbmcKICAvLyBTdGF0aWNhbGx5IHJlbmRlciBhbGwgZWxlbWVudHMgdGhhdCBhcmUgb2YgdGhpcyB3aWRnZXQncyBjbGFzcwogIHdpbmRvdy5IVE1MV2lkZ2V0cy5zdGF0aWNSZW5kZXIgPSBmdW5jdGlvbigpIHsKICAgIHZhciBiaW5kaW5ncyA9IHdpbmRvdy5IVE1MV2lkZ2V0cy53aWRnZXRzIHx8IFtdOwogICAgZm9yRWFjaChiaW5kaW5ncywgZnVuY3Rpb24oYmluZGluZykgewogICAgICB2YXIgbWF0Y2hlcyA9IGJpbmRpbmcuZmluZChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpOwogICAgICBmb3JFYWNoKG1hdGNoZXMsIGZ1bmN0aW9uKGVsKSB7CiAgICAgICAgdmFyIHNpemVPYmogPSBpbml0U2l6aW5nKGVsLCBiaW5kaW5nKTsKCiAgICAgICAgaWYgKGhhc0NsYXNzKGVsLCAiaHRtbC13aWRnZXQtc3RhdGljLWJvdW5kIikpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgZWwuY2xhc3NOYW1lID0gZWwuY2xhc3NOYW1lICsgIiBodG1sLXdpZGdldC1zdGF0aWMtYm91bmQiOwoKICAgICAgICB2YXIgaW5pdFJlc3VsdDsKICAgICAgICBpZiAoYmluZGluZy5pbml0aWFsaXplKSB7CiAgICAgICAgICBpbml0UmVzdWx0ID0gYmluZGluZy5pbml0aWFsaXplKGVsLAogICAgICAgICAgICBzaXplT2JqID8gc2l6ZU9iai5nZXRXaWR0aCgpIDogZWwub2Zmc2V0V2lkdGgsCiAgICAgICAgICAgIHNpemVPYmogPyBzaXplT2JqLmdldEhlaWdodCgpIDogZWwub2Zmc2V0SGVpZ2h0CiAgICAgICAgICApOwogICAgICAgICAgZWxlbWVudERhdGEoZWwsICJpbml0X3Jlc3VsdCIsIGluaXRSZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgaWYgKGJpbmRpbmcucmVzaXplKSB7CiAgICAgICAgICB2YXIgbGFzdFNpemUgPSB7fTsKICAgICAgICAgIHZhciByZXNpemVIYW5kbGVyID0gZnVuY3Rpb24oZSkgewogICAgICAgICAgICB2YXIgc2l6ZSA9IHsKICAgICAgICAgICAgICB3OiBzaXplT2JqID8gc2l6ZU9iai5nZXRXaWR0aCgpIDogZWwub2Zmc2V0V2lkdGgsCiAgICAgICAgICAgICAgaDogc2l6ZU9iaiA/IHNpemVPYmouZ2V0SGVpZ2h0KCkgOiBlbC5vZmZzZXRIZWlnaHQKICAgICAgICAgICAgfTsKICAgICAgICAgICAgaWYgKHNpemUudyA9PT0gMCAmJiBzaXplLmggPT09IDApCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoc2l6ZS53ID09PSBsYXN0U2l6ZS53ICYmIHNpemUuaCA9PT0gbGFzdFNpemUuaCkKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGxhc3RTaXplID0gc2l6ZTsKICAgICAgICAgICAgYmluZGluZy5yZXNpemUoZWwsIHNpemUudywgc2l6ZS5oLCBpbml0UmVzdWx0KTsKICAgICAgICAgIH07CgogICAgICAgICAgb24od2luZG93LCAicmVzaXplIiwgcmVzaXplSGFuZGxlcik7CgogICAgICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgZm9yIGNhc2VzIHdoZXJlIHdlJ3JlIHJ1bm5pbmcgaW4gYSBTaGlueQogICAgICAgICAgLy8gYXBwLCBidXQgdGhlIHdpZGdldCBpdHNlbGYgaXMgbm90IGEgU2hpbnkgb3V0cHV0LCBidXQKICAgICAgICAgIC8vIHJhdGhlciBhIHNpbXBsZSBzdGF0aWMgd2lkZ2V0LiBPbmUgZXhhbXBsZSBvZiB0aGlzIGlzCiAgICAgICAgICAvLyBhbiBybWFya2Rvd24gZG9jdW1lbnQgdGhhdCBoYXMgcnVudGltZTpzaGlueSBhbmQgd2lkZ2V0CiAgICAgICAgICAvLyB0aGF0IGlzbid0IGluIGEgcmVuZGVyIGZ1bmN0aW9uLiBTaGlueSBvbmx5IGtub3dzIHRvCiAgICAgICAgICAvLyBjYWxsIHJlc2l6ZSBoYW5kbGVycyBmb3IgU2hpbnkgb3V0cHV0cywgbm90IGZvciBzdGF0aWMKICAgICAgICAgIC8vIHdpZGdldHMsIHNvIHdlIGRvIGl0IG91cnNlbHZlcy4KICAgICAgICAgIGlmICh3aW5kb3cualF1ZXJ5KSB7CiAgICAgICAgICAgIHdpbmRvdy5qUXVlcnkoZG9jdW1lbnQpLm9uKAogICAgICAgICAgICAgICJzaG93bi5odG1sd2lkZ2V0cyBzaG93bi5icy50YWIuaHRtbHdpZGdldHMgc2hvd24uYnMuY29sbGFwc2UuaHRtbHdpZGdldHMiLAogICAgICAgICAgICAgIHJlc2l6ZUhhbmRsZXIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgd2luZG93LmpRdWVyeShkb2N1bWVudCkub24oCiAgICAgICAgICAgICAgImhpZGRlbi5odG1sd2lkZ2V0cyBoaWRkZW4uYnMudGFiLmh0bWx3aWRnZXRzIGhpZGRlbi5icy5jb2xsYXBzZS5odG1sd2lkZ2V0cyIsCiAgICAgICAgICAgICAgcmVzaXplSGFuZGxlcgogICAgICAgICAgICApOwogICAgICAgICAgfQoKICAgICAgICAgIC8vIFRoaXMgaXMgbmVlZGVkIGZvciB0aGUgc3BlY2lmaWMgY2FzZSBvZiBpb3NsaWRlcywgd2hpY2gKICAgICAgICAgIC8vIGZsaXBzIHNsaWRlcyBiZXR3ZWVuIGRpc3BsYXk6bm9uZSBhbmQgZGlzcGxheTpibG9jay4KICAgICAgICAgIC8vIElkZWFsbHkgd2Ugd291bGQgbm90IGhhdmUgdG8gaGF2ZSBpb3NsaWRlLXNwZWNpZmljIGNvZGUKICAgICAgICAgIC8vIGhlcmUsIGJ1dCByYXRoZXIgaGF2ZSBpb3NsaWRlcyByYWlzZSBhIGdlbmVyaWMgZXZlbnQsCiAgICAgICAgICAvLyBidXQgdGhlIHJtYXJrZG93biBwYWNrYWdlIGp1c3Qgd2VudCB0byBDUkFOIHNvIHRoZQogICAgICAgICAgLy8gd2luZG93IHRvIGdldHRpbmcgdGhhdCBmaXhlZCBtYXkgYmUgbG9uZy4KICAgICAgICAgIGlmICh3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikgewogICAgICAgICAgICAvLyBJdCdzIE9LIHRvIGxpbWl0IHRoaXMgdG8gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIKICAgICAgICAgICAgLy8gYnJvd3NlcnMgYmVjYXVzZSBpb3NsaWRlcyBpdHNlbGYgb25seSBzdXBwb3J0cwogICAgICAgICAgICAvLyBzdWNoIGJyb3dzZXJzLgogICAgICAgICAgICBvbihkb2N1bWVudCwgInNsaWRlZW50ZXIiLCByZXNpemVIYW5kbGVyKTsKICAgICAgICAgICAgb24oZG9jdW1lbnQsICJzbGlkZWxlYXZlIiwgcmVzaXplSGFuZGxlcik7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB2YXIgc2NyaXB0RGF0YSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInNjcmlwdFtkYXRhLWZvcj0nIiArIGVsLmlkICsgIiddW3R5cGU9J2FwcGxpY2F0aW9uL2pzb24nXSIpOwogICAgICAgIGlmIChzY3JpcHREYXRhKSB7CiAgICAgICAgICB2YXIgZGF0YSA9IEpTT04ucGFyc2Uoc2NyaXB0RGF0YS50ZXh0Q29udGVudCB8fCBzY3JpcHREYXRhLnRleHQpOwogICAgICAgICAgLy8gUmVzb2x2ZSBzdHJpbmdzIG1hcmtlZCBhcyBqYXZhc2NyaXB0IGxpdGVyYWxzIHRvIG9iamVjdHMKICAgICAgICAgIGlmICghKGRhdGEuZXZhbHMgaW5zdGFuY2VvZiBBcnJheSkpIGRhdGEuZXZhbHMgPSBbZGF0YS5ldmFsc107CiAgICAgICAgICBmb3IgKHZhciBrID0gMDsgZGF0YS5ldmFscyAmJiBrIDwgZGF0YS5ldmFscy5sZW5ndGg7IGsrKykgewogICAgICAgICAgICB3aW5kb3cuSFRNTFdpZGdldHMuZXZhbHVhdGVTdHJpbmdNZW1iZXIoZGF0YS54LCBkYXRhLmV2YWxzW2tdKTsKICAgICAgICAgIH0KICAgICAgICAgIGJpbmRpbmcucmVuZGVyVmFsdWUoZWwsIGRhdGEueCwgaW5pdFJlc3VsdCk7CiAgICAgICAgICBldmFsQW5kUnVuKGRhdGEuanNIb29rcy5yZW5kZXIsIGluaXRSZXN1bHQsIFtlbCwgZGF0YS54XSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwoKICAgIGludm9rZVBvc3RSZW5kZXJIYW5kbGVycygpOwogIH0KCiAgLy8gV2FpdCB1bnRpbCBhZnRlciB0aGUgZG9jdW1lbnQgaGFzIGxvYWRlZCB0byByZW5kZXIgdGhlIHdpZGdldHMuCiAgaWYgKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHsKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCBmdW5jdGlvbigpIHsKICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsIGFyZ3VtZW50cy5jYWxsZWUsIGZhbHNlKTsKICAgICAgd2luZG93LkhUTUxXaWRnZXRzLnN0YXRpY1JlbmRlcigpOwogICAgfSwgZmFsc2UpOwogIH0gZWxzZSBpZiAoZG9jdW1lbnQuYXR0YWNoRXZlbnQpIHsKICAgIGRvY3VtZW50LmF0dGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCBmdW5jdGlvbigpIHsKICAgICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICJjb21wbGV0ZSIpIHsKICAgICAgICBkb2N1bWVudC5kZXRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIiwgYXJndW1lbnRzLmNhbGxlZSk7CiAgICAgICAgd2luZG93LkhUTUxXaWRnZXRzLnN0YXRpY1JlbmRlcigpOwogICAgICB9CiAgICB9KTsKICB9CgoKICB3aW5kb3cuSFRNTFdpZGdldHMuZ2V0QXR0YWNobWVudFVybCA9IGZ1bmN0aW9uKGRlcG5hbWUsIGtleSkgewogICAgLy8gSWYgbm8ga2V5LCBkZWZhdWx0IHRvIHRoZSBmaXJzdCBpdGVtCiAgICBpZiAodHlwZW9mKGtleSkgPT09ICJ1bmRlZmluZWQiKQogICAgICBrZXkgPSAxOwoKICAgIHZhciBsaW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZGVwbmFtZSArICItIiArIGtleSArICItYXR0YWNobWVudCIpOwogICAgaWYgKCFsaW5rKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiQXR0YWNobWVudCAiICsgZGVwbmFtZSArICIvIiArIGtleSArICIgbm90IGZvdW5kIGluIGRvY3VtZW50Iik7CiAgICB9CiAgICByZXR1cm4gbGluay5nZXRBdHRyaWJ1dGUoImhyZWYiKTsKICB9OwoKICB3aW5kb3cuSFRNTFdpZGdldHMuZGF0YWZyYW1lVG9EMyA9IGZ1bmN0aW9uKGRmKSB7CiAgICB2YXIgbmFtZXMgPSBbXTsKICAgIHZhciBsZW5ndGg7CiAgICBmb3IgKHZhciBuYW1lIGluIGRmKSB7CiAgICAgICAgaWYgKGRmLmhhc093blByb3BlcnR5KG5hbWUpKQogICAgICAgICAgICBuYW1lcy5wdXNoKG5hbWUpOwogICAgICAgIGlmICh0eXBlb2YoZGZbbmFtZV0pICE9PSAib2JqZWN0IiB8fCB0eXBlb2YoZGZbbmFtZV0ubGVuZ3RoKSA9PT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJBbGwgZmllbGRzIG11c3QgYmUgYXJyYXlzIik7CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YobGVuZ3RoKSAhPT0gInVuZGVmaW5lZCIgJiYgbGVuZ3RoICE9PSBkZltuYW1lXS5sZW5ndGgpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJBbGwgZmllbGRzIG11c3QgYmUgYXJyYXlzIG9mIHRoZSBzYW1lIGxlbmd0aCIpOwogICAgICAgIH0KICAgICAgICBsZW5ndGggPSBkZltuYW1lXS5sZW5ndGg7CiAgICB9CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgdmFyIGl0ZW07CiAgICBmb3IgKHZhciByb3cgPSAwOyByb3cgPCBsZW5ndGg7IHJvdysrKSB7CiAgICAgICAgaXRlbSA9IHt9OwogICAgICAgIGZvciAodmFyIGNvbCA9IDA7IGNvbCA8IG5hbWVzLmxlbmd0aDsgY29sKyspIHsKICAgICAgICAgICAgaXRlbVtuYW1lc1tjb2xdXSA9IGRmW25hbWVzW2NvbF1dW3Jvd107CiAgICAgICAgfQogICAgICAgIHJlc3VsdHMucHVzaChpdGVtKTsKICAgIH0KICAgIHJldHVybiByZXN1bHRzOwogIH07CgogIHdpbmRvdy5IVE1MV2lkZ2V0cy50cmFuc3Bvc2VBcnJheTJEID0gZnVuY3Rpb24oYXJyYXkpIHsKICAgICAgaWYgKGFycmF5Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIGFycmF5OwogICAgICB2YXIgbmV3QXJyYXkgPSBhcnJheVswXS5tYXAoZnVuY3Rpb24oY29sLCBpKSB7CiAgICAgICAgICByZXR1cm4gYXJyYXkubWFwKGZ1bmN0aW9uKHJvdykgewogICAgICAgICAgICAgIHJldHVybiByb3dbaV0KICAgICAgICAgIH0pCiAgICAgIH0pOwogICAgICByZXR1cm4gbmV3QXJyYXk7CiAgfTsKICAvLyBTcGxpdCB2YWx1ZSBhdCBzcGxpdENoYXIsIGJ1dCBhbGxvdyBzcGxpdENoYXIgdG8gYmUgZXNjYXBlZAogIC8vIHVzaW5nIGVzY2FwZUNoYXIuIEFueSBvdGhlciBjaGFyYWN0ZXJzIGVzY2FwZWQgYnkgZXNjYXBlQ2hhcgogIC8vIHdpbGwgYmUgaW5jbHVkZWQgYXMgdXN1YWwgKGluY2x1ZGluZyBlc2NhcGVDaGFyIGl0c2VsZikuCiAgZnVuY3Rpb24gc3BsaXRXaXRoRXNjYXBlKHZhbHVlLCBzcGxpdENoYXIsIGVzY2FwZUNoYXIpIHsKICAgIHZhciByZXN1bHRzID0gW107CiAgICB2YXIgZXNjYXBlTW9kZSA9IGZhbHNlOwogICAgdmFyIGN1cnJlbnRSZXN1bHQgPSAiIjsKICAgIGZvciAodmFyIHBvcyA9IDA7IHBvcyA8IHZhbHVlLmxlbmd0aDsgcG9zKyspIHsKICAgICAgaWYgKCFlc2NhcGVNb2RlKSB7CiAgICAgICAgaWYgKHZhbHVlW3Bvc10gPT09IHNwbGl0Q2hhcikgewogICAgICAgICAgcmVzdWx0cy5wdXNoKGN1cnJlbnRSZXN1bHQpOwogICAgICAgICAgY3VycmVudFJlc3VsdCA9ICIiOwogICAgICAgIH0gZWxzZSBpZiAodmFsdWVbcG9zXSA9PT0gZXNjYXBlQ2hhcikgewogICAgICAgICAgZXNjYXBlTW9kZSA9IHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGN1cnJlbnRSZXN1bHQgKz0gdmFsdWVbcG9zXTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY3VycmVudFJlc3VsdCArPSB2YWx1ZVtwb3NdOwogICAgICAgIGVzY2FwZU1vZGUgPSBmYWxzZTsKICAgICAgfQogICAgfQogICAgaWYgKGN1cnJlbnRSZXN1bHQgIT09ICIiKSB7CiAgICAgIHJlc3VsdHMucHVzaChjdXJyZW50UmVzdWx0KTsKICAgIH0KICAgIHJldHVybiByZXN1bHRzOwogIH0KICAvLyBGdW5jdGlvbiBhdXRob3JlZCBieSBZaWh1aS9KSiBBbGxhaXJlCiAgd2luZG93LkhUTUxXaWRnZXRzLmV2YWx1YXRlU3RyaW5nTWVtYmVyID0gZnVuY3Rpb24obywgbWVtYmVyKSB7CiAgICB2YXIgcGFydHMgPSBzcGxpdFdpdGhFc2NhcGUobWVtYmVyLCAnLicsICdcXCcpOwogICAgZm9yICh2YXIgaSA9IDAsIGwgPSBwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKICAgICAgdmFyIHBhcnQgPSBwYXJ0c1tpXTsKICAgICAgLy8gcGFydCBtYXkgYmUgYSBjaGFyYWN0ZXIgb3IgJ251bWVyaWMnIG1lbWJlciBuYW1lCiAgICAgIGlmIChvICE9PSBudWxsICYmIHR5cGVvZiBvID09PSAib2JqZWN0IiAmJiBwYXJ0IGluIG8pIHsKICAgICAgICBpZiAoaSA9PSAobCAtIDEpKSB7IC8vIGlmIHdlIGFyZSBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lIHRoZW4gZXZhbHVsYXRlCiAgICAgICAgICBpZiAodHlwZW9mIG9bcGFydF0gPT09ICJzdHJpbmciKQogICAgICAgICAgICBvW3BhcnRdID0gZXZhbCgiKCIgKyBvW3BhcnRdICsgIikiKTsKICAgICAgICB9IGVsc2UgeyAvLyBvdGhlcndpc2UgY29udGludWUgdG8gbmV4dCBlbWJlZGRlZCBvYmplY3QKICAgICAgICAgIG8gPSBvW3BhcnRdOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH07CgogIC8vIFJldHJpZXZlIHRoZSBIVE1MV2lkZ2V0IGluc3RhbmNlIChpLmUuIHRoZSByZXR1cm4gdmFsdWUgb2YgYW4KICAvLyBIVE1MV2lkZ2V0IGJpbmRpbmcncyBpbml0aWFsaXplKCkgb3IgZmFjdG9yeSgpIGZ1bmN0aW9uKQogIC8vIGFzc29jaWF0ZWQgd2l0aCBhbiBlbGVtZW50LCBvciBudWxsIGlmIG5vbmUuCiAgd2luZG93LkhUTUxXaWRnZXRzLmdldEluc3RhbmNlID0gZnVuY3Rpb24oZWwpIHsKICAgIHJldHVybiBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0Iik7CiAgfTsKCiAgLy8gRmluZHMgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIHNjb3BlIHRoYXQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IsCiAgLy8gYW5kIHJldHVybnMgdGhlIEhUTUxXaWRnZXQgaW5zdGFuY2UgKGkuZS4gdGhlIHJldHVybiB2YWx1ZSBvZgogIC8vIGFuIEhUTUxXaWRnZXQgYmluZGluZydzIGluaXRpYWxpemUoKSBvciBmYWN0b3J5KCkgZnVuY3Rpb24pCiAgLy8gYXNzb2NpYXRlZCB3aXRoIHRoYXQgZWxlbWVudCwgaWYgYW55LiBJZiBubyBlbGVtZW50IG1hdGNoZXMgdGhlCiAgLy8gc2VsZWN0b3IsIG9yIHRoZSBmaXJzdCBtYXRjaGluZyBlbGVtZW50IGhhcyBubyBIVE1MV2lkZ2V0CiAgLy8gaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIGl0LCB0aGVuIG51bGwgaXMgcmV0dXJuZWQuCiAgLy8KICAvLyBUaGUgc2NvcGUgYXJndW1lbnQgaXMgb3B0aW9uYWwsIGFuZCBkZWZhdWx0cyB0byB3aW5kb3cuZG9jdW1lbnQuCiAgd2luZG93LkhUTUxXaWRnZXRzLmZpbmQgPSBmdW5jdGlvbihzY29wZSwgc2VsZWN0b3IpIHsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgc2VsZWN0b3IgPSBzY29wZTsKICAgICAgc2NvcGUgPSBkb2N1bWVudDsKICAgIH0KCiAgICB2YXIgZWwgPSBzY29wZS5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTsKICAgIGlmIChlbCA9PT0gbnVsbCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiB3aW5kb3cuSFRNTFdpZGdldHMuZ2V0SW5zdGFuY2UoZWwpOwogICAgfQogIH07CgogIC8vIEZpbmRzIGFsbCBlbGVtZW50cyBpbiB0aGUgc2NvcGUgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3IsIGFuZAogIC8vIHJldHVybnMgdGhlIEhUTUxXaWRnZXQgaW5zdGFuY2VzIChpLmUuIHRoZSByZXR1cm4gdmFsdWVzIG9mCiAgLy8gYW4gSFRNTFdpZGdldCBiaW5kaW5nJ3MgaW5pdGlhbGl6ZSgpIG9yIGZhY3RvcnkoKSBmdW5jdGlvbikKICAvLyBhc3NvY2lhdGVkIHdpdGggdGhlIGVsZW1lbnRzLCBpbiBhbiBhcnJheS4gSWYgZWxlbWVudHMgdGhhdAogIC8vIG1hdGNoIHRoZSBzZWxlY3RvciBkb24ndCBoYXZlIGFuIGFzc29jaWF0ZWQgSFRNTFdpZGdldAogIC8vIGluc3RhbmNlLCB0aGUgcmV0dXJuZWQgYXJyYXkgd2lsbCBjb250YWluIG51bGxzLgogIC8vCiAgLy8gVGhlIHNjb3BlIGFyZ3VtZW50IGlzIG9wdGlvbmFsLCBhbmQgZGVmYXVsdHMgdG8gd2luZG93LmRvY3VtZW50LgogIHdpbmRvdy5IVE1MV2lkZ2V0cy5maW5kQWxsID0gZnVuY3Rpb24oc2NvcGUsIHNlbGVjdG9yKSB7CiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CiAgICAgIHNlbGVjdG9yID0gc2NvcGU7CiAgICAgIHNjb3BlID0gZG9jdW1lbnQ7CiAgICB9CgogICAgdmFyIG5vZGVzID0gc2NvcGUucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykgewogICAgICByZXN1bHRzLnB1c2god2luZG93LkhUTUxXaWRnZXRzLmdldEluc3RhbmNlKG5vZGVzW2ldKSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0czsKICB9OwoKICB2YXIgcG9zdFJlbmRlckhhbmRsZXJzID0gW107CiAgZnVuY3Rpb24gaW52b2tlUG9zdFJlbmRlckhhbmRsZXJzKCkgewogICAgd2hpbGUgKHBvc3RSZW5kZXJIYW5kbGVycy5sZW5ndGgpIHsKICAgICAgdmFyIGhhbmRsZXIgPSBwb3N0UmVuZGVySGFuZGxlcnMuc2hpZnQoKTsKICAgICAgaWYgKGhhbmRsZXIpIHsKICAgICAgICBoYW5kbGVyKCk7CiAgICAgIH0KICAgIH0KICB9CgogIC8vIFJlZ2lzdGVyIHRoZSBnaXZlbiBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBpbnZva2VkIGFmdGVyIHRoZQogIC8vIG5leHQgdGltZSBzdGF0aWMgd2lkZ2V0cyBhcmUgcmVuZGVyZWQuCiAgd2luZG93LkhUTUxXaWRnZXRzLmFkZFBvc3RSZW5kZXJIYW5kbGVyID0gZnVuY3Rpb24oY2FsbGJhY2spIHsKICAgIHBvc3RSZW5kZXJIYW5kbGVycy5wdXNoKGNhbGxiYWNrKTsKICB9OwoKICAvLyBUYWtlcyBhIG5ldy1zdHlsZSBpbnN0YW5jZS1ib3VuZCBkZWZpbml0aW9uLCBhbmQgcmV0dXJucyBhbgogIC8vIG9sZC1zdHlsZSBjbGFzcy1ib3VuZCBkZWZpbml0aW9uLiBUaGlzIHNhdmVzIHVzIGZyb20gaGF2aW5nCiAgLy8gdG8gcmV3cml0ZSBhbGwgdGhlIGxvZ2ljIGluIHRoaXMgZmlsZSB0byBhY2NvbW9kYXRlIGJvdGgKICAvLyB0eXBlcyBvZiBkZWZpbml0aW9ucy4KICBmdW5jdGlvbiBjcmVhdGVMZWdhY3lEZWZpbml0aW9uQWRhcHRlcihkZWZuKSB7CiAgICB2YXIgcmVzdWx0ID0gewogICAgICBuYW1lOiBkZWZuLm5hbWUsCiAgICAgIHR5cGU6IGRlZm4udHlwZSwKICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oZWwsIHdpZHRoLCBoZWlnaHQpIHsKICAgICAgICByZXR1cm4gZGVmbi5mYWN0b3J5KGVsLCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgfSwKICAgICAgcmVuZGVyVmFsdWU6IGZ1bmN0aW9uKGVsLCB4LCBpbnN0YW5jZSkgewogICAgICAgIHJldHVybiBpbnN0YW5jZS5yZW5kZXJWYWx1ZSh4KTsKICAgICAgfSwKICAgICAgcmVzaXplOiBmdW5jdGlvbihlbCwgd2lkdGgsIGhlaWdodCwgaW5zdGFuY2UpIHsKICAgICAgICByZXR1cm4gaW5zdGFuY2UucmVzaXplKHdpZHRoLCBoZWlnaHQpOwogICAgICB9CiAgICB9OwoKICAgIGlmIChkZWZuLmZpbmQpCiAgICAgIHJlc3VsdC5maW5kID0gZGVmbi5maW5kOwogICAgaWYgKGRlZm4ucmVuZGVyRXJyb3IpCiAgICAgIHJlc3VsdC5yZW5kZXJFcnJvciA9IGRlZm4ucmVuZGVyRXJyb3I7CiAgICBpZiAoZGVmbi5jbGVhckVycm9yKQogICAgICByZXN1bHQuY2xlYXJFcnJvciA9IGRlZm4uY2xlYXJFcnJvcjsKCiAgICByZXR1cm4gcmVzdWx0OwogIH0KfSkoKTsKCg=="></script> <script src="data:application/x-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;charset=utf-8,%0A%2Eleaflet%2Dmap%2Dpane%2C%0A%2Eleaflet%2Dtile%2C%0A%2Eleaflet%2Dmarker%2Dicon%2C%0A%2Eleaflet%2Dmarker%2Dshadow%2C%0A%2Eleaflet%2Dtile%2Dpane%2C%0A%2Eleaflet%2Dtile%2Dcontainer%2C%0A%2Eleaflet%2Doverlay%2Dpane%2C%0A%2Eleaflet%2Dshadow%2Dpane%2C%0A%2Eleaflet%2Dmarker%2Dpane%2C%0A%2Eleaflet%2Dpopup%2Dpane%2C%0A%2Eleaflet%2Doverlay%2Dpane%20svg%2C%0A%2Eleaflet%2Dzoom%2Dbox%2C%0A%2Eleaflet%2Dimage%2Dlayer%2C%0A%2Eleaflet%2Dlayer%20%7B%0Aposition%3A%20absolute%3B%0Aleft%3A%200%3B%0Atop%3A%200%3B%0A%7D%0A%2Eleaflet%2Dcontainer%20%7B%0Aoverflow%3A%20hidden%3B%0A%2Dms%2Dtouch%2Daction%3A%20none%3B%0Atouch%2Daction%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dtile%2C%0A%2Eleaflet%2Dmarker%2Dicon%2C%0A%2Eleaflet%2Dmarker%2Dshadow%20%7B%0A%2Dwebkit%2Duser%2Dselect%3A%20none%3B%0A%2Dmoz%2Duser%2Dselect%3A%20none%3B%0Auser%2Dselect%3A%20none%3B%0A%2Dwebkit%2Duser%2Ddrag%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dmarker%2Dicon%2C%0A%2Eleaflet%2Dmarker%2Dshadow%20%7B%0Adisplay%3A%20block%3B%0A%7D%0A%0A%2Eleaflet%2Dcontainer%20img%20%7B%0Amax%2Dwidth%3A%20none%20%21important%3B%0A%7D%0A%0A%2Eleaflet%2Dcontainer%20img%2Eleaflet%2Dimage%2Dlayer%20%7B%0Amax%2Dwidth%3A%2015000px%20%21important%3B%0A%7D%0A%2Eleaflet%2Dtile%20%7B%0Afilter%3A%20inherit%3B%0Avisibility%3A%20hidden%3B%0A%7D%0A%2Eleaflet%2Dtile%2Dloaded%20%7B%0Avisibility%3A%20inherit%3B%0A%7D%0A%2Eleaflet%2Dzoom%2Dbox%20%7B%0Awidth%3A%200%3B%0Aheight%3A%200%3B%0A%7D%0A%0A%2Eleaflet%2Doverlay%2Dpane%20svg%20%7B%0A%2Dmoz%2Duser%2Dselect%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dtile%2Dpane%20%7B%20z%2Dindex%3A%202%3B%20%7D%0A%2Eleaflet%2Dobjects%2Dpane%20%7B%20z%2Dindex%3A%203%3B%20%7D%0A%2Eleaflet%2Doverlay%2Dpane%20%7B%20z%2Dindex%3A%204%3B%20%7D%0A%2Eleaflet%2Dshadow%2Dpane%20%7B%20z%2Dindex%3A%205%3B%20%7D%0A%2Eleaflet%2Dmarker%2Dpane%20%7B%20z%2Dindex%3A%206%3B%20%7D%0A%2Eleaflet%2Dpopup%2Dpane%20%7B%20z%2Dindex%3A%207%3B%20%7D%0A%2Eleaflet%2Dvml%2Dshape%20%7B%0Awidth%3A%201px%3B%0Aheight%3A%201px%3B%0A%7D%0A%2Elvml%20%7B%0Abehavior%3A%20url%28%23default%23VML%29%3B%0Adisplay%3A%20inline%2Dblock%3B%0Aposition%3A%20absolute%3B%0A%7D%0A%0A%2Eleaflet%2Dcontrol%20%7B%0Aposition%3A%20relative%3B%0Az%2Dindex%3A%207%3B%0Apointer%2Devents%3A%20auto%3B%0A%7D%0A%2Eleaflet%2Dtop%2C%0A%2Eleaflet%2Dbottom%20%7B%0Aposition%3A%20absolute%3B%0Az%2Dindex%3A%201000%3B%0Apointer%2Devents%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dtop%20%7B%0Atop%3A%200%3B%0A%7D%0A%2Eleaflet%2Dright%20%7B%0Aright%3A%200%3B%0A%7D%0A%2Eleaflet%2Dbottom%20%7B%0Abottom%3A%200%3B%0A%7D%0A%2Eleaflet%2Dleft%20%7B%0Aleft%3A%200%3B%0A%7D%0A%2Eleaflet%2Dcontrol%20%7B%0Afloat%3A%20left%3B%0Aclear%3A%20both%3B%0A%7D%0A%2Eleaflet%2Dright%20%2Eleaflet%2Dcontrol%20%7B%0Afloat%3A%20right%3B%0A%7D%0A%2Eleaflet%2Dtop%20%2Eleaflet%2Dcontrol%20%7B%0Amargin%2Dtop%3A%2010px%3B%0A%7D%0A%2Eleaflet%2Dbottom%20%2Eleaflet%2Dcontrol%20%7B%0Amargin%2Dbottom%3A%2010px%3B%0A%7D%0A%2Eleaflet%2Dleft%20%2Eleaflet%2Dcontrol%20%7B%0Amargin%2Dleft%3A%2010px%3B%0A%7D%0A%2Eleaflet%2Dright%20%2Eleaflet%2Dcontrol%20%7B%0Amargin%2Dright%3A%2010px%3B%0A%7D%0A%0A%2Eleaflet%2Dfade%2Danim%20%2Eleaflet%2Dtile%2C%0A%2Eleaflet%2Dfade%2Danim%20%2Eleaflet%2Dpopup%20%7B%0Aopacity%3A%200%3B%0A%2Dwebkit%2Dtransition%3A%20opacity%200%2E2s%20linear%3B%0A%2Dmoz%2Dtransition%3A%20opacity%200%2E2s%20linear%3B%0A%2Do%2Dtransition%3A%20opacity%200%2E2s%20linear%3B%0Atransition%3A%20opacity%200%2E2s%20linear%3B%0A%7D%0A%2Eleaflet%2Dfade%2Danim%20%2Eleaflet%2Dtile%2Dloaded%2C%0A%2Eleaflet%2Dfade%2Danim%20%2Eleaflet%2Dmap%2Dpane%20%2Eleaflet%2Dpopup%20%7B%0Aopacity%3A%201%3B%0A%7D%0A%2Eleaflet%2Dzoom%2Danim%20%2Eleaflet%2Dzoom%2Danimated%20%7B%0A%2Dwebkit%2Dtransition%3A%20%2Dwebkit%2Dtransform%200%2E25s%20cubic%2Dbezier%280%2C0%2C0%2E25%2C1%29%3B%0A%2Dmoz%2Dtransition%3A%20%2Dmoz%2Dtransform%200%2E25s%20cubic%2Dbezier%280%2C0%2C0%2E25%2C1%29%3B%0A%2Do%2Dtransition%3A%20%2Do%2Dtransform%200%2E25s%20cubic%2Dbezier%280%2C0%2C0%2E25%2C1%29%3B%0Atransition%3A%20transform%200%2E25s%20cubic%2Dbezier%280%2C0%2C0%2E25%2C1%29%3B%0A%7D%0A%2Eleaflet%2Dzoom%2Danim%20%2Eleaflet%2Dtile%2C%0A%2Eleaflet%2Dpan%2Danim%20%2Eleaflet%2Dtile%2C%0A%2Eleaflet%2Dtouching%20%2Eleaflet%2Dzoom%2Danimated%20%7B%0A%2Dwebkit%2Dtransition%3A%20none%3B%0A%2Dmoz%2Dtransition%3A%20none%3B%0A%2Do%2Dtransition%3A%20none%3B%0Atransition%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dzoom%2Danim%20%2Eleaflet%2Dzoom%2Dhide%20%7B%0Avisibility%3A%20hidden%3B%0A%7D%0A%0A%2Eleaflet%2Dclickable%20%7B%0Acursor%3A%20pointer%3B%0A%7D%0A%2Eleaflet%2Dcontainer%20%7B%0Acursor%3A%20%2Dwebkit%2Dgrab%3B%0Acursor%3A%20%2Dmoz%2Dgrab%3B%0A%7D%0A%2Eleaflet%2Dpopup%2Dpane%2C%0A%2Eleaflet%2Dcontrol%20%7B%0Acursor%3A%20auto%3B%0A%7D%0A%2Eleaflet%2Ddragging%20%2Eleaflet%2Dcontainer%2C%0A%2Eleaflet%2Ddragging%20%2Eleaflet%2Dclickable%20%7B%0Acursor%3A%20move%3B%0Acursor%3A%20%2Dwebkit%2Dgrabbing%3B%0Acursor%3A%20%2Dmoz%2Dgrabbing%3B%0A%7D%0A%0A%2Eleaflet%2Dcontainer%20%7B%0Abackground%3A%20%23ddd%3B%0Aoutline%3A%200%3B%0A%7D%0A%2Eleaflet%2Dcontainer%20a%20%7B%0Acolor%3A%20%230078A8%3B%0A%7D%0A%2Eleaflet%2Dcontainer%20a%2Eleaflet%2Dactive%20%7B%0Aoutline%3A%202px%20solid%20orange%3B%0A%7D%0A%2Eleaflet%2Dzoom%2Dbox%20%7B%0Aborder%3A%202px%20dotted%20%2338f%3B%0Abackground%3A%20rgba%28255%2C255%2C255%2C0%2E5%29%3B%0A%7D%0A%0A%2Eleaflet%2Dcontainer%20%7B%0Afont%3A%2012px%2F1%2E5%20%22Helvetica%20Neue%22%2C%20Arial%2C%20Helvetica%2C%20sans%2Dserif%3B%0A%7D%0A%0A%2Eleaflet%2Dbar%20%7B%0Abox%2Dshadow%3A%200%201px%205px%20rgba%280%2C0%2C0%2C0%2E65%29%3B%0Aborder%2Dradius%3A%204px%3B%0A%7D%0A%2Eleaflet%2Dbar%20a%2C%0A%2Eleaflet%2Dbar%20a%3Ahover%20%7B%0Abackground%2Dcolor%3A%20%23fff%3B%0Aborder%2Dbottom%3A%201px%20solid%20%23ccc%3B%0Awidth%3A%2026px%3B%0Aheight%3A%2026px%3B%0Aline%2Dheight%3A%2026px%3B%0Adisplay%3A%20block%3B%0Atext%2Dalign%3A%20center%3B%0Atext%2Ddecoration%3A%20none%3B%0Acolor%3A%20black%3B%0A%7D%0A%2Eleaflet%2Dbar%20a%2C%0A%2Eleaflet%2Dcontrol%2Dlayers%2Dtoggle%20%7B%0Abackground%2Dposition%3A%2050%25%2050%25%3B%0Abackground%2Drepeat%3A%20no%2Drepeat%3B%0Adisplay%3A%20block%3B%0A%7D%0A%2Eleaflet%2Dbar%20a%3Ahover%20%7B%0Abackground%2Dcolor%3A%20%23f4f4f4%3B%0A%7D%0A%2Eleaflet%2Dbar%20a%3Afirst%2Dchild%20%7B%0Aborder%2Dtop%2Dleft%2Dradius%3A%204px%3B%0Aborder%2Dtop%2Dright%2Dradius%3A%204px%3B%0A%7D%0A%2Eleaflet%2Dbar%20a%3Alast%2Dchild%20%7B%0Aborder%2Dbottom%2Dleft%2Dradius%3A%204px%3B%0Aborder%2Dbottom%2Dright%2Dradius%3A%204px%3B%0Aborder%2Dbottom%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dbar%20a%2Eleaflet%2Ddisabled%20%7B%0Acursor%3A%20default%3B%0Abackground%2Dcolor%3A%20%23f4f4f4%3B%0Acolor%3A%20%23bbb%3B%0A%7D%0A%2Eleaflet%2Dtouch%20%2Eleaflet%2Dbar%20a%20%7B%0Awidth%3A%2030px%3B%0Aheight%3A%2030px%3B%0Aline%2Dheight%3A%2030px%3B%0A%7D%0A%0A%2Eleaflet%2Dcontrol%2Dzoom%2Din%2C%0A%2Eleaflet%2Dcontrol%2Dzoom%2Dout%20%7B%0Afont%3A%20bold%2018px%20%27Lucida%20Console%27%2C%20Monaco%2C%20monospace%3B%0Atext%2Dindent%3A%201px%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dzoom%2Dout%20%7B%0Afont%2Dsize%3A%2020px%3B%0A%7D%0A%2Eleaflet%2Dtouch%20%2Eleaflet%2Dcontrol%2Dzoom%2Din%20%7B%0Afont%2Dsize%3A%2022px%3B%0A%7D%0A%2Eleaflet%2Dtouch%20%2Eleaflet%2Dcontrol%2Dzoom%2Dout%20%7B%0Afont%2Dsize%3A%2024px%3B%0A%7D%0A%0A%2Eleaflet%2Dcontrol%2Dlayers%20%7B%0Abox%2Dshadow%3A%200%201px%205px%20rgba%280%2C0%2C0%2C0%2E4%29%3B%0Abackground%3A%20%23fff%3B%0Aborder%2Dradius%3A%205px%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dlayers%2Dtoggle%20%7B%0Abackground%2Dimage%3A%20url%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAVbSURBVEiJrZZfSFt3FMe%2Fv3tvbmLUZleNKSHE%2FLGRiNbGRovTtrA9lcFkpcOnMvawwhhjrb3soQ8djGFhXMQNRqEvY3R9kJVuPpRRWQebcdKYxkaHqcHchKJ2rVo1WhNz%2F%2Fz2UOLUadVuv9fvOedzfuec3x9CKcV%2B1qVLlwgAdHV17cuR7AfU29tb43a73wWAVCr1Q0dHx8T%2FCuru7i5ubGw843K5ms1mMwBgdXUV6XQ6HI1Gb3Z2dj7%2Fz6C%2Bvr6T1dXVp6xWa%2Bl2%2Buzs7PLk5OTP7e3tv70S6Pr1647q6uoOt9vtYRjmpcnouo5UKiVPTk72nj17dmpPIEmS%2BIaGhnaPx3O8tLSU3ahRSotyudzrAGAymf4ghGQ36svLy5osywOxWKxPFMX8jqBbt241ejyed%2Bx2e9nWjPL5fK2iKC2UUiMAEELWDAbDEM%2Fz41ttZ2Zmnsmy%2FOPp06ejm0DXrl2rqK2tPeNyuQ7zPL9pi5qmVaytrZ3Qdf3gdiVhGOYvo9H4O8uyc1sSI%2Bl0enR8fPzmuXPn5sjt27ff8nq9bwiCYNpSJsPa2lqzqqr1AF7eJEDnOG7MaDSGCSHKRmFhYSGXTCZ%2FZd1u93dOp3NJEAS9ICqK4snlcm%2Fpuu4EQHaBAADRdf2gqqo1hJBllmUXCsLjx4%2BL7t69e4Ztamqaffjw4QepVOr5oUOHDKqqvqkoShAAvwfA1sVrmlataVqlqqqzvb29lnA43KwoymeEUoqenp7XdF3vW11dPX7s2DHi9XpfgfHPSiaTuHfvHjWbzQMMw7SfP39%2BkUSj0ZOU0qsA%2FEtLSwiHwygpKUFraysOHDiwL0Amk8Hg4CBWVlbQ3NwMi8UCAHFCyIesw%2BH43uFwuAwGg9lkMsHj8SCfzyMUCkFRFNhsNux2YDVNQzQaRSgUgsvlwtGjR2EyvZitbDbL9Pf3H2YDgcD8xMREk67rCZvN5iSEkLKyMrjdbsiyjJGREVgslh13NzU1hf7%2Bfui6jra2NlitVhBCQCmlo6OjoYGBASWbzX5BKKW4cuWKhRDyk67rJ4LBIFNRUbEeaHZ2FpFIBDabDS0tLSgqKipkiqGhITx58gTBYBBWq3XdZ25uDpFIhLIsO8jzfPuFCxeekTt37rQCuAqgfmVlBfF4HOXl5Thy5Ah4%2FsXgUUoRj8chyzIaGhoAALFYDB6PB36%2FH4S8OAH5fB4PHjzA%2FPw8%2FH4%2FSkpKACAB4CPW6%2FXeqKysrOI4rpjnedjtdmSzWUSjURgMBgiCAEIIrFYrHA4HxsfHsbi4iNbWVtjt9nWILMsYGhpCeXk5ampqYDQaC3AyPDxcSy5evPg2IaTL6XTO%2B3y%2BNkIIAwCKoiCRSEBVVTQ1Ne3Yo0wmg%2BHhYXAcB5%2FPB4PBUJBoMpkclGW5lFJ6mVBKIYpiMYDLHMedCgQCnCAI%2FoL1wsICEokEHA4H6uvr1ydQ13WMjY1hamoKPp8PgiBshE%2Fev38%2FoyjKLwA%2BlyTp%2BabbWxTFOgDfCIKAQCAQ4DiutNCjdDqNp0%2BfIhAIAABGRkZQWVkJl8u1Xj5N01Zjsdjw3NwcBfCxJEl%2FFmL%2F6z0SRZEAeJ8QIvp8vsWqqqqWgpbL5RCPxwEAfr9%2F%2FawAwPT0dDgejxfput4D4FtJkjYF3vGFFUWxHMCXRqPxcDAYtBYXF1dtZ5fNZmcikcijbDY7DuBTSZLmt7Pb9c8gimIbIeQrm82Wqaura2EYxggAlFI1Ho8PTk9PmymlnZIkhV4WZ0%2B%2FIFEUOQCdDMO8V19fn2NZ1hCLxaimaTcAdEuSpO4WY1%2F%2FOlEUnQC%2BBkABfCJJ0qO9%2Bv4NmO9xnZob3WcAAAAASUVORK5CYII%3D%29%3B%0Awidth%3A%2036px%3B%0Aheight%3A%2036px%3B%0A%7D%0A%2Eleaflet%2Dretina%20%2Eleaflet%2Dcontrol%2Dlayers%2Dtoggle%20%7B%0Abackground%2Dimage%3A%20url%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAADQAAAA0CAYAAADFeBvrAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAbrwAAG68BXhqRHAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAArPSURBVGiB3Zp7TFvXHce%2F916%2FeBhCDInJwDjGBhvjQHi5SclaKRL5Z1Wl%2FrEq%2FWNr11TJmkpMw900pLVrplJ1cadFarp0zdZmmpZpf3SqNrUKfSnKgwI2sQPGBmNjAsUOxCW8bGzfe8%2F%2BSEAkMfa1A5m075%2F2%2Bf3O%2BZ7X595zLkUIwf%2BT6EdRSWdnp7izs1P8KOqitnqE3n%2F%2F%2FQMajeYZAPD7%2FR8fPXr00lbWt2WGTp48qdRoNC%2Fs2bNHXVhYyALA%2FPy86Pr16wG%2F3%2F%2Fhq6%2B%2BGtqKejfdUGdnJ6XT6Q4bDIZWjUaTNLnf76fcbvdlr9d7vqura1MbsKmGTp8%2BXadWqw%2Fv3bu3UCQS8anKsixLX7t2bT4QCJw%2Ffvy4c7PasCmGTpw4Ia%2BqqnrRZDIZSkpK2ExiZ2dnRYODg%2B7R0dE%2Fv%2Fbaa4sP25aHNnT27Nkf6HS6QwaD4aF2TLfbzXu93gtHjhz5z8PkydrQqVOnKtVq9Y%2Fq6uqUubm5GY3KRopEIiKn0xkKBAJ%2FbW9v92WTI2NDnZ2dYoPB8ILRaGwoKyvjsqk0naamphiXyzXgdrs%2F7OrqSmQSm5GhM2fOHNBoNM%2FU1dVJKYoSFEgIEcVisWYAkEql%2FRRFCRpNQgjldDpjfr%2F%2F42PHjglmlyBDJ0%2BeVO7evfsndXV1FatMEaJEIqGOx%2BMHCCFyAKAoalEikVwSi8UBoTnm5%2BdFTqdzYnx8%2FC9C2JXS0CpT9Hr9gcrKypTb8HrxPJ%2B%2FsrJygOf53cn%2Bp2l6XCaTXaJpekloTp%2FPR3s8nkvp2LWhoXfffbderVYfbmhoKEjHlPVtjcVidSzLNhFCUj67URSVEIlENqlU6gQgKD%2FLsvTAwMBCIBA4%2F8orrziS5r3f0IkTJ%2BQ6ne6IyWQy7NixQ%2FCCZFm2NB6PP8Hz%2FHahMQBA0%2FR3EonkokgkCgqNmZmZEQ8ODrq9Xu%2FZ%2B9l1j6EPPvjgKZ1Od6impoYSmpzneVksFtvHcZxBaEwyMQzjlkqlPTRNrwiNGR4eJl6v98JLL73079XfKEIITp06VVlRUfHj%2Bvr6nZkwJR6P6xOJxH5CiCxTA8lEUdSKWCy%2BKpFIPEJjIpGIyOFw3JyYmDjX3t7uo86dO3fUaDQ2lJeXCzbCcdz2WCz2BM%2Fzpdk1PbVomg5KpdKLDMN8JzRmcnJS5HK5Bhi9Xv9RcXHx7V27dqUd6rtMMcfj8YOEkIKHa3bKeuQsy9bwPC9mGCZEUVTaTWNsbKzQbrc%2FRXV0dBAAMYVCcfnpp5%2BeKC4uTmrsfqY8KqVj161bt2SffPJJRTgcbgUgZVpbW3sIIQei0Wij0%2BksmZubW9DpdEsUdWdf4Hk%2BPxqNHmRZtgWA9NFZWZOU4zgdy7LFd0crDgCEEHz66aelX3zxxfcjkUg9gAmapg8zV65c8fX09PwpHo%2FzhJC22dnZ2oGBARQUFCwVFBTUxOPxQ4QQxf%2FAyD0ihBSxLFtDCCFerzdy%2Fvz5PcFg8CAhRAqgSy6XP%2Ffmm2%2BO3LNtd3R0VFEU9R6AgyKRiNfr9fS%2BffsgFj%2BS8420SiQS6Onpgcfj4VmWpQF8SQh5%2BZ133hldLSNaH%2FDss8%2BGGYYJ3Lhxg9jtdnpoaAiTk5NoampCdXX1IzewXiMjI7DZbJifn4dMJqPNZjNRqVQBjuPC68utjhA1MDDwPIDfASgG7vSGw%2BHA2NgYAEClUmH%2F%2Fv0oKip6pEbm5uZw9epV3LhxAwCg1WpRX1%2B%2FftbcAvCLhoaGjwAQyuFwGDmOOwOgNVnCcDiMvr4%2BzM3NQSaTwWg0orm5GTS9tUd6PM%2Bjv78fLpcLKysrKCoqQktLCxSKDZfzZYZhjjFarfYfKpWqmabppAslNzcXWq0WMpkMwWAQU1NTCAQCyM%2FPx7Zt27bEzMTEBD7%2F%2FHP4fD5QFIWGhgaYzWbk5uZuGMNxXPHXX39tYkwm07nh4eGZ3Nxcz%2Fbt27%2BXrDBFUVAoFNBoNIhEIggGg%2FD5fLh9%2BzaUSuWmbRqRSAQXL15EX18flpeXoVKp8OSTT0KpVGIVI8nk8%2Fn6uru7xYuLi3WrHDr07bffmvx%2Bf295eTktkUiSwlMsFkOlUqGkpAQzMzMIBoPwer0AAKVS%2BVBmHA4HvvrqK4RCIeTl5aG1tRU1NTUpO2t5eXn6s88%2BGx4fHzcDmKVp%2BjBFCMEbb7whW1xc%2FBWAXwJgKysrbS0tLY9TFCXaKBnP8xgaGoLb7QbHcSgtLcW%2BffsyNhYKhdDT04NgMAiGYWAwGFBbW5tyjRJC2L6%2Bvis%2Bn68Jd3bqt%2BVy%2BVuvv%2F76yoYcysvLi5nNZmm6Bi4sLMBmsyEUCkEsFkOv1%2BOxxx5LOw0TiQS%2B%2BeYbeDweJBIJKJVKNDU1oaAg9SNiKBRCb28vu7y8LEISDt1jqLu7ezuAt0Oh0IsjIyNUPB5HeXk5mpubIZWmfuqZmJiA3W7HysoKCgsLU7LrPqagsbERFRUVKfPHYjH09%2FdjcnISEokE1dXVUCqV%2FwLQ3tbWNvmAoe7u7ucBnMRdDrEsC6%2FXu5bAZDKhqqoq5eJMxy4BTHlAhBCMjo5icHAQqx2s0%2BkgEq2thiUAvwFwqq2tjaUuXLhQA%2BCPAL6fLOHCwgJcLhcWFxeFsADAg%2Byqra0FAAwNDQllygN55HI5jEZjqil5HcBPmerq6r%2Ft2LFjL8MwOclKSaVSlJWVQSKRIBQKwefzIRqNYufOnRsu3GTsmp6eFswUlmVht9ths9mQSCRQVVUFo9EImWzjF2OO4%2BROp1NPdXR0JAAsaLVat0ajeXzDCNyZxx6PBzdv3kROTg727t0LtVqdKgTRaBR2ux0A0NjYiJycpP22pkAggGvXrq11ml6vT7t%2Bp6en%2B10uVykhpIzq6OhoA%2FAegEqxWOxsamrKl8vllakShMNhDA8Pr1VqNpuRn5%2BfstJ0WlpaQm9v71pn1dTUpJ2S0Wh02mazTUajUTMAH4CXKUIILBaLDMAqh%2BiSkpIre%2FbsaWEYZsN5wfM8%2FH4%2FAoEAKIqCwWCAyWRKuWkkEyEEg4ODcLvdIIRArVZDo9Gk5ZDb7b4yNTW1xiEAb1mt1ns5ZLFYqnBntA5SFDVlNBqDu3btak7VoOXlZXg8HoTDYeTn56OlpUUwXEOhEPr6%2BrC0tASFQgG9Xo%2B8vLyUMeFweNDhcEg5jqsC8CWAl61Wa3IOrTP2HIDfA9iZk5PT29TUVJ6Tk7MrXeNGRkYghF0bMCWlkUQiMWe324cWFhZaAcwA%2BLnVav37%2FeU2PAq2WCyFALoAHAMQLSsrsxkMhpSPQ%2BnYJYApSeX3%2By%2BPjY3VANgG4AyATqvVOp%2BsbNrbB4vF0nw3SQPDMKP19fUxhUJhShWTjF0AMmEKAGBxcdFns9mWEolEHYABAMesVmt%2FqhhB1ykWi4UBcBzAbwHICwoKLjc2NtaKxeINX18JIZicnMTY2Bh4%2Fs6xGk3T0Gq1KC8vT7l5cBwXuX79et%2Fs7OzjAKIAfg3gtNVqTXvBltGFl8ViKQXwBwA%2FBPCdVqsd1mg0Sd90V7XKLgAZMwXAPwH8zGq1Cj7Iz%2BqO1WKxZMyudErGFKvV2p1pnqwvjbNhVzKlYko27Xroa%2F1s2LWqdEzJRpv2JUkm7BLKlGy0qZ%2FGCGFXJkzJRlvyNVYydkkkktxMmZKNtuzzsvvZBYADEEEGTMlGW%2F4B4Dp2ARkyJRv9F9vsxWD%2F43R9AAAAAElFTkSuQmCC%29%3B%0Abackground%2Dsize%3A%2026px%2026px%3B%0A%7D%0A%2Eleaflet%2Dtouch%20%2Eleaflet%2Dcontrol%2Dlayers%2Dtoggle%20%7B%0Awidth%3A%2044px%3B%0Aheight%3A%2044px%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dlayers%20%2Eleaflet%2Dcontrol%2Dlayers%2Dlist%2C%0A%2Eleaflet%2Dcontrol%2Dlayers%2Dexpanded%20%2Eleaflet%2Dcontrol%2Dlayers%2Dtoggle%20%7B%0Adisplay%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dlayers%2Dexpanded%20%2Eleaflet%2Dcontrol%2Dlayers%2Dlist%20%7B%0Adisplay%3A%20block%3B%0Aposition%3A%20relative%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dlayers%2Dexpanded%20%7B%0Apadding%3A%206px%2010px%206px%206px%3B%0Acolor%3A%20%23333%3B%0Abackground%3A%20%23fff%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dlayers%2Dselector%20%7B%0Amargin%2Dtop%3A%202px%3B%0Aposition%3A%20relative%3B%0Atop%3A%201px%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dlayers%20label%20%7B%0Adisplay%3A%20block%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dlayers%2Dseparator%20%7B%0Aheight%3A%200%3B%0Aborder%2Dtop%3A%201px%20solid%20%23ddd%3B%0Amargin%3A%205px%20%2D10px%205px%20%2D6px%3B%0A%7D%0A%0A%2Eleaflet%2Dcontainer%20%2Eleaflet%2Dcontrol%2Dattribution%20%7B%0Abackground%3A%20%23fff%3B%0Abackground%3A%20rgba%28255%2C%20255%2C%20255%2C%200%2E7%29%3B%0Amargin%3A%200%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dattribution%2C%0A%2Eleaflet%2Dcontrol%2Dscale%2Dline%20%7B%0Apadding%3A%200%205px%3B%0Acolor%3A%20%23333%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dattribution%20a%20%7B%0Atext%2Ddecoration%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dattribution%20a%3Ahover%20%7B%0Atext%2Ddecoration%3A%20underline%3B%0A%7D%0A%2Eleaflet%2Dcontainer%20%2Eleaflet%2Dcontrol%2Dattribution%2C%0A%2Eleaflet%2Dcontainer%20%2Eleaflet%2Dcontrol%2Dscale%20%7B%0Afont%2Dsize%3A%2011px%3B%0A%7D%0A%2Eleaflet%2Dleft%20%2Eleaflet%2Dcontrol%2Dscale%20%7B%0Amargin%2Dleft%3A%205px%3B%0A%7D%0A%2Eleaflet%2Dbottom%20%2Eleaflet%2Dcontrol%2Dscale%20%7B%0Amargin%2Dbottom%3A%205px%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dscale%2Dline%20%7B%0Aborder%3A%202px%20solid%20%23777%3B%0Aborder%2Dtop%3A%20none%3B%0Aline%2Dheight%3A%201%2E1%3B%0Apadding%3A%202px%205px%201px%3B%0Afont%2Dsize%3A%2011px%3B%0Awhite%2Dspace%3A%20nowrap%3B%0Aoverflow%3A%20hidden%3B%0A%2Dmoz%2Dbox%2Dsizing%3A%20content%2Dbox%3B%0Abox%2Dsizing%3A%20content%2Dbox%3B%0Abackground%3A%20%23fff%3B%0Abackground%3A%20rgba%28255%2C%20255%2C%20255%2C%200%2E5%29%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dscale%2Dline%3Anot%28%3Afirst%2Dchild%29%20%7B%0Aborder%2Dtop%3A%202px%20solid%20%23777%3B%0Aborder%2Dbottom%3A%20none%3B%0Amargin%2Dtop%3A%20%2D2px%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dscale%2Dline%3Anot%28%3Afirst%2Dchild%29%3Anot%28%3Alast%2Dchild%29%20%7B%0Aborder%2Dbottom%3A%202px%20solid%20%23777%3B%0A%7D%0A%2Eleaflet%2Dtouch%20%2Eleaflet%2Dcontrol%2Dattribution%2C%0A%2Eleaflet%2Dtouch%20%2Eleaflet%2Dcontrol%2Dlayers%2C%0A%2Eleaflet%2Dtouch%20%2Eleaflet%2Dbar%20%7B%0Abox%2Dshadow%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dtouch%20%2Eleaflet%2Dcontrol%2Dlayers%2C%0A%2Eleaflet%2Dtouch%20%2Eleaflet%2Dbar%20%7B%0Aborder%3A%202px%20solid%20rgba%280%2C0%2C0%2C0%2E2%29%3B%0Abackground%2Dclip%3A%20padding%2Dbox%3B%0A%7D%0A%0A%2Eleaflet%2Dpopup%20%7B%0Aposition%3A%20absolute%3B%0Atext%2Dalign%3A%20center%3B%0A%7D%0A%2Eleaflet%2Dpopup%2Dcontent%2Dwrapper%20%7B%0Apadding%3A%201px%3B%0Atext%2Dalign%3A%20left%3B%0Aborder%2Dradius%3A%2012px%3B%0A%7D%0A%2Eleaflet%2Dpopup%2Dcontent%20%7B%0Amargin%3A%2013px%2019px%3B%0Aline%2Dheight%3A%201%2E4%3B%0A%7D%0A%2Eleaflet%2Dpopup%2Dcontent%20p%20%7B%0Amargin%3A%2018px%200%3B%0A%7D%0A%2Eleaflet%2Dpopup%2Dtip%2Dcontainer%20%7B%0Amargin%3A%200%20auto%3B%0Awidth%3A%2040px%3B%0Aheight%3A%2020px%3B%0Aposition%3A%20relative%3B%0Aoverflow%3A%20hidden%3B%0A%7D%0A%2Eleaflet%2Dpopup%2Dtip%20%7B%0Awidth%3A%2017px%3B%0Aheight%3A%2017px%3B%0Apadding%3A%201px%3B%0Amargin%3A%20%2D10px%20auto%200%3B%0A%2Dwebkit%2Dtransform%3A%20rotate%2845deg%29%3B%0A%2Dmoz%2Dtransform%3A%20rotate%2845deg%29%3B%0A%2Dms%2Dtransform%3A%20rotate%2845deg%29%3B%0A%2Do%2Dtransform%3A%20rotate%2845deg%29%3B%0Atransform%3A%20rotate%2845deg%29%3B%0A%7D%0A%2Eleaflet%2Dpopup%2Dcontent%2Dwrapper%2C%0A%2Eleaflet%2Dpopup%2Dtip%20%7B%0Abackground%3A%20white%3B%0Abox%2Dshadow%3A%200%203px%2014px%20rgba%280%2C0%2C0%2C0%2E4%29%3B%0A%7D%0A%2Eleaflet%2Dcontainer%20a%2Eleaflet%2Dpopup%2Dclose%2Dbutton%20%7B%0Aposition%3A%20absolute%3B%0Atop%3A%200%3B%0Aright%3A%200%3B%0Apadding%3A%204px%204px%200%200%3B%0Atext%2Dalign%3A%20center%3B%0Awidth%3A%2018px%3B%0Aheight%3A%2014px%3B%0Afont%3A%2016px%2F14px%20Tahoma%2C%20Verdana%2C%20sans%2Dserif%3B%0Acolor%3A%20%23c3c3c3%3B%0Atext%2Ddecoration%3A%20none%3B%0Afont%2Dweight%3A%20bold%3B%0Abackground%3A%20transparent%3B%0A%7D%0A%2Eleaflet%2Dcontainer%20a%2Eleaflet%2Dpopup%2Dclose%2Dbutton%3Ahover%20%7B%0Acolor%3A%20%23999%3B%0A%7D%0A%2Eleaflet%2Dpopup%2Dscrolled%20%7B%0Aoverflow%3A%20auto%3B%0Aborder%2Dbottom%3A%201px%20solid%20%23ddd%3B%0Aborder%2Dtop%3A%201px%20solid%20%23ddd%3B%0A%7D%0A%2Eleaflet%2Doldie%20%2Eleaflet%2Dpopup%2Dcontent%2Dwrapper%20%7B%0Azoom%3A%201%3B%0A%7D%0A%2Eleaflet%2Doldie%20%2Eleaflet%2Dpopup%2Dtip%20%7B%0Awidth%3A%2024px%3B%0Amargin%3A%200%20auto%3B%0A%2Dms%2Dfilter%3A%20%22progid%3ADXImageTransform%2EMicrosoft%2EMatrix%28M11%3D0%2E70710678%2C%20M12%3D0%2E70710678%2C%20M21%3D%2D0%2E70710678%2C%20M22%3D0%2E70710678%29%22%3B%0Afilter%3A%20progid%3ADXImageTransform%2EMicrosoft%2EMatrix%28M11%3D0%2E70710678%2C%20M12%3D0%2E70710678%2C%20M21%3D%2D0%2E70710678%2C%20M22%3D0%2E70710678%29%3B%0A%7D%0A%2Eleaflet%2Doldie%20%2Eleaflet%2Dpopup%2Dtip%2Dcontainer%20%7B%0Amargin%2Dtop%3A%20%2D1px%3B%0A%7D%0A%2Eleaflet%2Doldie%20%2Eleaflet%2Dcontrol%2Dzoom%2C%0A%2Eleaflet%2Doldie%20%2Eleaflet%2Dcontrol%2Dlayers%2C%0A%2Eleaflet%2Doldie%20%2Eleaflet%2Dpopup%2Dcontent%2Dwrapper%2C%0A%2Eleaflet%2Doldie%20%2Eleaflet%2Dpopup%2Dtip%20%7B%0Aborder%3A%201px%20solid%20%23999%3B%0A%7D%0A%0A%2Eleaflet%2Ddiv%2Dicon%20%7B%0Abackground%3A%20%23fff%3B%0Aborder%3A%201px%20solid%20%23666%3B%0A%7D%0A" rel="stylesheet" /> <script src="data:application/x-javascript;base64,LyoKIExlYWZsZXQsIGEgSmF2YVNjcmlwdCBsaWJyYXJ5IGZvciBtb2JpbGUtZnJpZW5kbHkgaW50ZXJhY3RpdmUgbWFwcy4gaHR0cDovL2xlYWZsZXRqcy5jb20KIChjKSAyMDEwLTIwMTUsIFZsYWRpbWlyIEFnYWZvbmtpbgogKGMpIDIwMTAtMjAxMSwgQ2xvdWRNYWRlCiovCiFmdW5jdGlvbih0LGUsaSl7dmFyIG49dC5MLG89e307by52ZXJzaW9uPSIwLjcuNyIsIm9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlLmV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9bzoiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kJiZkZWZpbmUobyksby5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHQuTD1uLHRoaXN9LHQuTD1vLG8uVXRpbD17ZXh0ZW5kOmZ1bmN0aW9uKHQpe3ZhciBlLGksbixvLHM9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO2ZvcihpPTAsbj1zLmxlbmd0aDtuPmk7aSsrKXtvPXNbaV18fHt9O2ZvcihlIGluIG8pby5oYXNPd25Qcm9wZXJ0eShlKSYmKHRbZV09b1tlXSl9cmV0dXJuIHR9LGJpbmQ6ZnVuY3Rpb24odCxlKXt2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjI/QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpOm51bGw7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkoZSxpfHxhcmd1bWVudHMpfX0sc3RhbXA6ZnVuY3Rpb24oKXt2YXIgdD0wLGU9Il9sZWFmbGV0X2lkIjtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIGlbZV09aVtlXXx8Kyt0LGlbZV19fSgpLGludm9rZUVhY2g6ZnVuY3Rpb24odCxlLGkpe3ZhciBuLG87aWYoIm9iamVjdCI9PXR5cGVvZiB0KXtvPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywzKTtmb3IobiBpbiB0KWUuYXBwbHkoaSxbbix0W25dXS5jb25jYXQobykpO3JldHVybiEwfXJldHVybiExfSxsaW1pdEV4ZWNCeUludGVydmFsOmZ1bmN0aW9uKHQsZSxpKXt2YXIgbixvO3JldHVybiBmdW5jdGlvbiBzKCl7dmFyIGE9YXJndW1lbnRzO3JldHVybiBuP3ZvaWQobz0hMCk6KG49ITAsc2V0VGltZW91dChmdW5jdGlvbigpe249ITEsbyYmKHMuYXBwbHkoaSxhKSxvPSExKX0sZSksdm9pZCB0LmFwcGx5KGksYSkpfX0sZmFsc2VGbjpmdW5jdGlvbigpe3JldHVybiExfSxmb3JtYXROdW06ZnVuY3Rpb24odCxlKXt2YXIgaT1NYXRoLnBvdygxMCxlfHw1KTtyZXR1cm4gTWF0aC5yb3VuZCh0KmkpL2l9LHRyaW06ZnVuY3Rpb24odCl7cmV0dXJuIHQudHJpbT90LnRyaW0oKTp0LnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX0sc3BsaXRXb3JkczpmdW5jdGlvbih0KXtyZXR1cm4gby5VdGlsLnRyaW0odCkuc3BsaXQoL1xzKy8pfSxzZXRPcHRpb25zOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQub3B0aW9ucz1vLmV4dGVuZCh7fSx0Lm9wdGlvbnMsZSksdC5vcHRpb25zfSxnZXRQYXJhbVN0cmluZzpmdW5jdGlvbih0LGUsaSl7dmFyIG49W107Zm9yKHZhciBvIGluIHQpbi5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChpP28udG9VcHBlckNhc2UoKTpvKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KHRbb10pKTtyZXR1cm4oZSYmLTEhPT1lLmluZGV4T2YoIj8iKT8iJiI6Ij8iKStuLmpvaW4oIiYiKX0sdGVtcGxhdGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5yZXBsYWNlKC9ceyAqKFtcd19dKykgKlx9L2csZnVuY3Rpb24odCxuKXt2YXIgbz1lW25dO2lmKG89PT1pKXRocm93IG5ldyBFcnJvcigiTm8gdmFsdWUgcHJvdmlkZWQgZm9yIHZhcmlhYmxlICIrdCk7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG8mJihvPW8oZSkpLG99KX0saXNBcnJheTpBcnJheS5pc0FycmF5fHxmdW5jdGlvbih0KXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfSxlbXB0eUltYWdlVXJsOiJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUFEL0FDd0FBQUFBQVFBQkFBQUNBRHM9In0sZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3ZhciBpLG4sbz1bIndlYmtpdCIsIm1veiIsIm8iLCJtcyJdO2ZvcihpPTA7aTxvLmxlbmd0aCYmIW47aSsrKW49dFtvW2ldK2VdO3JldHVybiBufWZ1bmN0aW9uIGkoZSl7dmFyIGk9K25ldyBEYXRlLG89TWF0aC5tYXgoMCwxNi0oaS1uKSk7cmV0dXJuIG49aStvLHQuc2V0VGltZW91dChlLG8pfXZhciBuPTAscz10LnJlcXVlc3RBbmltYXRpb25GcmFtZXx8ZSgiUmVxdWVzdEFuaW1hdGlvbkZyYW1lIil8fGksYT10LmNhbmNlbEFuaW1hdGlvbkZyYW1lfHxlKCJDYW5jZWxBbmltYXRpb25GcmFtZSIpfHxlKCJDYW5jZWxSZXF1ZXN0QW5pbWF0aW9uRnJhbWUiKXx8ZnVuY3Rpb24oZSl7dC5jbGVhclRpbWVvdXQoZSl9O28uVXRpbC5yZXF1ZXN0QW5pbUZyYW1lPWZ1bmN0aW9uKGUsbixhLHIpe3JldHVybiBlPW8uYmluZChlLG4pLGEmJnM9PT1pP3ZvaWQgZSgpOnMuY2FsbCh0LGUscil9LG8uVXRpbC5jYW5jZWxBbmltRnJhbWU9ZnVuY3Rpb24oZSl7ZSYmYS5jYWxsKHQsZSl9fSgpLG8uZXh0ZW5kPW8uVXRpbC5leHRlbmQsby5iaW5kPW8uVXRpbC5iaW5kLG8uc3RhbXA9by5VdGlsLnN0YW1wLG8uc2V0T3B0aW9ucz1vLlV0aWwuc2V0T3B0aW9ucyxvLkNsYXNzPWZ1bmN0aW9uKCl7fSxvLkNsYXNzLmV4dGVuZD1mdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbigpe3RoaXMuaW5pdGlhbGl6ZSYmdGhpcy5pbml0aWFsaXplLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLl9pbml0SG9va3MmJnRoaXMuY2FsbEluaXRIb29rcygpfSxpPWZ1bmN0aW9uKCl7fTtpLnByb3RvdHlwZT10aGlzLnByb3RvdHlwZTt2YXIgbj1uZXcgaTtuLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGU9bjtmb3IodmFyIHMgaW4gdGhpcyl0aGlzLmhhc093blByb3BlcnR5KHMpJiYicHJvdG90eXBlIiE9PXMmJihlW3NdPXRoaXNbc10pO3Quc3RhdGljcyYmKG8uZXh0ZW5kKGUsdC5zdGF0aWNzKSxkZWxldGUgdC5zdGF0aWNzKSx0LmluY2x1ZGVzJiYoby5VdGlsLmV4dGVuZC5hcHBseShudWxsLFtuXS5jb25jYXQodC5pbmNsdWRlcykpLGRlbGV0ZSB0LmluY2x1ZGVzKSx0Lm9wdGlvbnMmJm4ub3B0aW9ucyYmKHQub3B0aW9ucz1vLmV4dGVuZCh7fSxuLm9wdGlvbnMsdC5vcHRpb25zKSksby5leHRlbmQobix0KSxuLl9pbml0SG9va3M9W107dmFyIGE9dGhpcztyZXR1cm4gZS5fX3N1cGVyX189YS5wcm90b3R5cGUsbi5jYWxsSW5pdEhvb2tzPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2luaXRIb29rc0NhbGxlZCl7YS5wcm90b3R5cGUuY2FsbEluaXRIb29rcyYmYS5wcm90b3R5cGUuY2FsbEluaXRIb29rcy5jYWxsKHRoaXMpLHRoaXMuX2luaXRIb29rc0NhbGxlZD0hMDtmb3IodmFyIHQ9MCxlPW4uX2luaXRIb29rcy5sZW5ndGg7ZT50O3QrKyluLl9pbml0SG9va3NbdF0uY2FsbCh0aGlzKX19LGV9LG8uQ2xhc3MuaW5jbHVkZT1mdW5jdGlvbih0KXtvLmV4dGVuZCh0aGlzLnByb3RvdHlwZSx0KX0sby5DbGFzcy5tZXJnZU9wdGlvbnM9ZnVuY3Rpb24odCl7by5leHRlbmQodGhpcy5wcm90b3R5cGUub3B0aW9ucyx0KX0sby5DbGFzcy5hZGRJbml0SG9vaz1mdW5jdGlvbih0KXt2YXIgZT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmZ1bmN0aW9uKCl7dGhpc1t0XS5hcHBseSh0aGlzLGUpfTt0aGlzLnByb3RvdHlwZS5faW5pdEhvb2tzPXRoaXMucHJvdG90eXBlLl9pbml0SG9va3N8fFtdLHRoaXMucHJvdG90eXBlLl9pbml0SG9va3MucHVzaChpKX07dmFyIHM9Il9sZWFmbGV0X2V2ZW50cyI7by5NaXhpbj17fSxvLk1peGluLkV2ZW50cz17YWRkRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbih0LGUsaSl7aWYoby5VdGlsLmludm9rZUVhY2godCx0aGlzLmFkZEV2ZW50TGlzdGVuZXIsdGhpcyxlLGkpKXJldHVybiB0aGlzO3ZhciBuLGEscixoLGwsdSxjLGQ9dGhpc1tzXT10aGlzW3NdfHx7fSxwPWkmJmkhPT10aGlzJiZvLnN0YW1wKGkpO2Zvcih0PW8uVXRpbC5zcGxpdFdvcmRzKHQpLG49MCxhPXQubGVuZ3RoO2E+bjtuKyspcj17YWN0aW9uOmUsY29udGV4dDppfHx0aGlzfSxoPXRbbl0scD8obD1oKyJfaWR4Iix1PWwrIl9sZW4iLGM9ZFtsXT1kW2xdfHx7fSxjW3BdfHwoY1twXT1bXSxkW3VdPShkW3VdfHwwKSsxKSxjW3BdLnB1c2gocikpOihkW2hdPWRbaF18fFtdLGRbaF0ucHVzaChyKSk7cmV0dXJuIHRoaXN9LGhhc0V2ZW50TGlzdGVuZXJzOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXNbc107cmV0dXJuISFlJiYodCBpbiBlJiZlW3RdLmxlbmd0aD4wfHx0KyJfaWR4ImluIGUmJmVbdCsiX2lkeF9sZW4iXT4wKX0scmVtb3ZlRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbih0LGUsaSl7aWYoIXRoaXNbc10pcmV0dXJuIHRoaXM7aWYoIXQpcmV0dXJuIHRoaXMuY2xlYXJBbGxFdmVudExpc3RlbmVycygpO2lmKG8uVXRpbC5pbnZva2VFYWNoKHQsdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyLHRoaXMsZSxpKSlyZXR1cm4gdGhpczt2YXIgbixhLHIsaCxsLHUsYyxkLHAsXz10aGlzW3NdLG09aSYmaSE9PXRoaXMmJm8uc3RhbXAoaSk7Zm9yKHQ9by5VdGlsLnNwbGl0V29yZHModCksbj0wLGE9dC5sZW5ndGg7YT5uO24rKylpZihyPXRbbl0sdT1yKyJfaWR4IixjPXUrIl9sZW4iLGQ9X1t1XSxlKXtpZihoPW0mJmQ/ZFttXTpfW3JdKXtmb3IobD1oLmxlbmd0aC0xO2w+PTA7bC0tKWhbbF0uYWN0aW9uIT09ZXx8aSYmaFtsXS5jb250ZXh0IT09aXx8KHA9aC5zcGxpY2UobCwxKSxwWzBdLmFjdGlvbj1vLlV0aWwuZmFsc2VGbik7aSYmZCYmMD09PWgubGVuZ3RoJiYoZGVsZXRlIGRbbV0sX1tjXS0tKX19ZWxzZSBkZWxldGUgX1tyXSxkZWxldGUgX1t1XSxkZWxldGUgX1tjXTtyZXR1cm4gdGhpc30sY2xlYXJBbGxFdmVudExpc3RlbmVyczpmdW5jdGlvbigpe3JldHVybiBkZWxldGUgdGhpc1tzXSx0aGlzfSxmaXJlRXZlbnQ6ZnVuY3Rpb24odCxlKXtpZighdGhpcy5oYXNFdmVudExpc3RlbmVycyh0KSlyZXR1cm4gdGhpczt2YXIgaSxuLGEscixoLGw9by5VdGlsLmV4dGVuZCh7fSxlLHt0eXBlOnQsdGFyZ2V0OnRoaXN9KSx1PXRoaXNbc107aWYodVt0XSlmb3IoaT11W3RdLnNsaWNlKCksbj0wLGE9aS5sZW5ndGg7YT5uO24rKylpW25dLmFjdGlvbi5jYWxsKGlbbl0uY29udGV4dCxsKTtyPXVbdCsiX2lkeCJdO2ZvcihoIGluIHIpaWYoaT1yW2hdLnNsaWNlKCkpZm9yKG49MCxhPWkubGVuZ3RoO2E+bjtuKyspaVtuXS5hY3Rpb24uY2FsbChpW25dLmNvbnRleHQsbCk7cmV0dXJuIHRoaXN9LGFkZE9uZVRpbWVFdmVudExpc3RlbmVyOmZ1bmN0aW9uKHQsZSxpKXtpZihvLlV0aWwuaW52b2tlRWFjaCh0LHRoaXMuYWRkT25lVGltZUV2ZW50TGlzdGVuZXIsdGhpcyxlLGkpKXJldHVybiB0aGlzO3ZhciBuPW8uYmluZChmdW5jdGlvbigpe3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LGUsaSkucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4saSl9LHRoaXMpO3JldHVybiB0aGlzLmFkZEV2ZW50TGlzdGVuZXIodCxlLGkpLmFkZEV2ZW50TGlzdGVuZXIodCxuLGkpfX0sby5NaXhpbi5FdmVudHMub249by5NaXhpbi5FdmVudHMuYWRkRXZlbnRMaXN0ZW5lcixvLk1peGluLkV2ZW50cy5vZmY9by5NaXhpbi5FdmVudHMucmVtb3ZlRXZlbnRMaXN0ZW5lcixvLk1peGluLkV2ZW50cy5vbmNlPW8uTWl4aW4uRXZlbnRzLmFkZE9uZVRpbWVFdmVudExpc3RlbmVyLG8uTWl4aW4uRXZlbnRzLmZpcmU9by5NaXhpbi5FdmVudHMuZmlyZUV2ZW50LGZ1bmN0aW9uKCl7dmFyIG49IkFjdGl2ZVhPYmplY3QiaW4gdCxzPW4mJiFlLmFkZEV2ZW50TGlzdGVuZXIsYT1uYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkscj0tMSE9PWEuaW5kZXhPZigid2Via2l0IiksaD0tMSE9PWEuaW5kZXhPZigiY2hyb21lIiksbD0tMSE9PWEuaW5kZXhPZigicGhhbnRvbSIpLHU9LTEhPT1hLmluZGV4T2YoImFuZHJvaWQiKSxjPS0xIT09YS5zZWFyY2goImFuZHJvaWQgWzIzXSIpLGQ9LTEhPT1hLmluZGV4T2YoImdlY2tvIikscD10eXBlb2Ygb3JpZW50YXRpb24hPWkrIiIsXz0hdC5Qb2ludGVyRXZlbnQmJnQuTVNQb2ludGVyRXZlbnQsbT10LlBvaW50ZXJFdmVudCYmdC5uYXZpZ2F0b3IucG9pbnRlckVuYWJsZWQmJnQubmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzfHxfLGY9ImRldmljZVBpeGVsUmF0aW8iaW4gdCYmdC5kZXZpY2VQaXhlbFJhdGlvPjF8fCJtYXRjaE1lZGlhImluIHQmJnQubWF0Y2hNZWRpYSgiKG1pbi1yZXNvbHV0aW9uOjE0NGRwaSkiKSYmdC5tYXRjaE1lZGlhKCIobWluLXJlc29sdXRpb246MTQ0ZHBpKSIpLm1hdGNoZXMsZz1lLmRvY3VtZW50RWxlbWVudCx2PW4mJiJ0cmFuc2l0aW9uImluIGcuc3R5bGUseT0iV2ViS2l0Q1NTTWF0cml4ImluIHQmJiJtMTEiaW4gbmV3IHQuV2ViS2l0Q1NTTWF0cml4JiYhYyxQPSJNb3pQZXJzcGVjdGl2ZSJpbiBnLnN0eWxlLEw9Ik9UcmFuc2l0aW9uImluIGcuc3R5bGUseD0hdC5MX0RJU0FCTEVfM0QmJih2fHx5fHxQfHxMKSYmIWwsdz0hdC5MX05PX1RPVUNIJiYhbCYmKG18fCJvbnRvdWNoc3RhcnQiaW4gdHx8dC5Eb2N1bWVudFRvdWNoJiZlIGluc3RhbmNlb2YgdC5Eb2N1bWVudFRvdWNoKTtvLkJyb3dzZXI9e2llOm4saWVsdDk6cyx3ZWJraXQ6cixnZWNrbzpkJiYhciYmIXQub3BlcmEmJiFuLGFuZHJvaWQ6dSxhbmRyb2lkMjM6YyxjaHJvbWU6aCxpZTNkOnYsd2Via2l0M2Q6eSxnZWNrbzNkOlAsb3BlcmEzZDpMLGFueTNkOngsbW9iaWxlOnAsbW9iaWxlV2Via2l0OnAmJnIsbW9iaWxlV2Via2l0M2Q6cCYmeSxtb2JpbGVPcGVyYTpwJiZ0Lm9wZXJhLHRvdWNoOncsbXNQb2ludGVyOl8scG9pbnRlcjptLHJldGluYTpmfX0oKSxvLlBvaW50PWZ1bmN0aW9uKHQsZSxpKXt0aGlzLng9aT9NYXRoLnJvdW5kKHQpOnQsdGhpcy55PWk/TWF0aC5yb3VuZChlKTplfSxvLlBvaW50LnByb3RvdHlwZT17Y2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG8uUG9pbnQodGhpcy54LHRoaXMueSl9LGFkZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9hZGQoby5wb2ludCh0KSl9LF9hZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueCs9dC54LHRoaXMueSs9dC55LHRoaXN9LHN1YnRyYWN0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX3N1YnRyYWN0KG8ucG9pbnQodCkpfSxfc3VidHJhY3Q6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueC09dC54LHRoaXMueS09dC55LHRoaXN9LGRpdmlkZUJ5OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX2RpdmlkZUJ5KHQpfSxfZGl2aWRlQnk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueC89dCx0aGlzLnkvPXQsdGhpc30sbXVsdGlwbHlCeTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9tdWx0aXBseUJ5KHQpfSxfbXVsdGlwbHlCeTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54Kj10LHRoaXMueSo9dCx0aGlzfSxyb3VuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuX3JvdW5kKCl9LF9yb3VuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpc30sZmxvb3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9mbG9vcigpfSxfZmxvb3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54PU1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9TWF0aC5mbG9vcih0aGlzLnkpLHRoaXN9LGRpc3RhbmNlVG86ZnVuY3Rpb24odCl7dD1vLnBvaW50KHQpO3ZhciBlPXQueC10aGlzLngsaT10LnktdGhpcy55O3JldHVybiBNYXRoLnNxcnQoZSplK2kqaSl9LGVxdWFsczpmdW5jdGlvbih0KXtyZXR1cm4gdD1vLnBvaW50KHQpLHQueD09PXRoaXMueCYmdC55PT09dGhpcy55fSxjb250YWluczpmdW5jdGlvbih0KXtyZXR1cm4gdD1vLnBvaW50KHQpLE1hdGguYWJzKHQueCk8PU1hdGguYWJzKHRoaXMueCkmJk1hdGguYWJzKHQueSk8PU1hdGguYWJzKHRoaXMueSl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIlBvaW50KCIrby5VdGlsLmZvcm1hdE51bSh0aGlzLngpKyIsICIrby5VdGlsLmZvcm1hdE51bSh0aGlzLnkpKyIpIn19LG8ucG9pbnQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0IGluc3RhbmNlb2Ygby5Qb2ludD90Om8uVXRpbC5pc0FycmF5KHQpP25ldyBvLlBvaW50KHRbMF0sdFsxXSk6dD09PWl8fG51bGw9PT10P3Q6bmV3IG8uUG9pbnQodCxlLG4pfSxvLkJvdW5kcz1mdW5jdGlvbih0LGUpe2lmKHQpZm9yKHZhciBpPWU/W3QsZV06dCxuPTAsbz1pLmxlbmd0aDtvPm47bisrKXRoaXMuZXh0ZW5kKGlbbl0pfSxvLkJvdW5kcy5wcm90b3R5cGU9e2V4dGVuZDpmdW5jdGlvbih0KXtyZXR1cm4gdD1vLnBvaW50KHQpLHRoaXMubWlufHx0aGlzLm1heD8odGhpcy5taW4ueD1NYXRoLm1pbih0LngsdGhpcy5taW4ueCksdGhpcy5tYXgueD1NYXRoLm1heCh0LngsdGhpcy5tYXgueCksdGhpcy5taW4ueT1NYXRoLm1pbih0LnksdGhpcy5taW4ueSksdGhpcy5tYXgueT1NYXRoLm1heCh0LnksdGhpcy5tYXgueSkpOih0aGlzLm1pbj10LmNsb25lKCksdGhpcy5tYXg9dC5jbG9uZSgpKSx0aGlzfSxnZXRDZW50ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvLlBvaW50KCh0aGlzLm1pbi54K3RoaXMubWF4LngpLzIsKHRoaXMubWluLnkrdGhpcy5tYXgueSkvMix0KX0sZ2V0Qm90dG9tTGVmdDpmdW5jdGlvbigpe3JldHVybiBuZXcgby5Qb2ludCh0aGlzLm1pbi54LHRoaXMubWF4LnkpfSxnZXRUb3BSaWdodDpmdW5jdGlvbigpe3JldHVybiBuZXcgby5Qb2ludCh0aGlzLm1heC54LHRoaXMubWluLnkpfSxnZXRTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF4LnN1YnRyYWN0KHRoaXMubWluKX0sY29udGFpbnM6ZnVuY3Rpb24odCl7dmFyIGUsaTtyZXR1cm4gdD0ibnVtYmVyIj09dHlwZW9mIHRbMF18fHQgaW5zdGFuY2VvZiBvLlBvaW50P28ucG9pbnQodCk6by5ib3VuZHModCksdCBpbnN0YW5jZW9mIG8uQm91bmRzPyhlPXQubWluLGk9dC5tYXgpOmU9aT10LGUueD49dGhpcy5taW4ueCYmaS54PD10aGlzLm1heC54JiZlLnk+PXRoaXMubWluLnkmJmkueTw9dGhpcy5tYXgueX0saW50ZXJzZWN0czpmdW5jdGlvbih0KXt0PW8uYm91bmRzKHQpO3ZhciBlPXRoaXMubWluLGk9dGhpcy5tYXgsbj10Lm1pbixzPXQubWF4LGE9cy54Pj1lLngmJm4ueDw9aS54LHI9cy55Pj1lLnkmJm4ueTw9aS55O3JldHVybiBhJiZyfSxpc1ZhbGlkOmZ1bmN0aW9uKCl7cmV0dXJuISghdGhpcy5taW58fCF0aGlzLm1heCl9fSxvLmJvdW5kcz1mdW5jdGlvbih0LGUpe3JldHVybiF0fHx0IGluc3RhbmNlb2Ygby5Cb3VuZHM/dDpuZXcgby5Cb3VuZHModCxlKX0sby5UcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbih0LGUsaSxuKXt0aGlzLl9hPXQsdGhpcy5fYj1lLHRoaXMuX2M9aSx0aGlzLl9kPW59LG8uVHJhbnNmb3JtYXRpb24ucHJvdG90eXBlPXt0cmFuc2Zvcm06ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdHJhbnNmb3JtKHQuY2xvbmUoKSxlKX0sX3RyYW5zZm9ybTpmdW5jdGlvbih0LGUpe3JldHVybiBlPWV8fDEsdC54PWUqKHRoaXMuX2EqdC54K3RoaXMuX2IpLHQueT1lKih0aGlzLl9jKnQueSt0aGlzLl9kKSx0fSx1bnRyYW5zZm9ybTpmdW5jdGlvbih0LGUpe3JldHVybiBlPWV8fDEsbmV3IG8uUG9pbnQoKHQueC9lLXRoaXMuX2IpL3RoaXMuX2EsKHQueS9lLXRoaXMuX2QpL3RoaXMuX2MpfX0sby5Eb21VdGlsPXtnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P2UuZ2V0RWxlbWVudEJ5SWQodCk6dH0sZ2V0U3R5bGU6ZnVuY3Rpb24odCxpKXt2YXIgbj10LnN0eWxlW2ldO2lmKCFuJiZ0LmN1cnJlbnRTdHlsZSYmKG49dC5jdXJyZW50U3R5bGVbaV0pLCghbnx8ImF1dG8iPT09bikmJmUuZGVmYXVsdFZpZXcpe3ZhciBvPWUuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSh0LG51bGwpO249bz9vW2ldOm51bGx9cmV0dXJuImF1dG8iPT09bj9udWxsOm59LGdldFZpZXdwb3J0T2Zmc2V0OmZ1bmN0aW9uKHQpe3ZhciBpLG49MCxzPTAsYT10LHI9ZS5ib2R5LGg9ZS5kb2N1bWVudEVsZW1lbnQ7ZG97aWYobis9YS5vZmZzZXRUb3B8fDAscys9YS5vZmZzZXRMZWZ0fHwwLG4rPXBhcnNlSW50KG8uRG9tVXRpbC5nZXRTdHlsZShhLCJib3JkZXJUb3BXaWR0aCIpLDEwKXx8MCxzKz1wYXJzZUludChvLkRvbVV0aWwuZ2V0U3R5bGUoYSwiYm9yZGVyTGVmdFdpZHRoIiksMTApfHwwLGk9by5Eb21VdGlsLmdldFN0eWxlKGEsInBvc2l0aW9uIiksYS5vZmZzZXRQYXJlbnQ9PT1yJiYiYWJzb2x1dGUiPT09aSlicmVhaztpZigiZml4ZWQiPT09aSl7bis9ci5zY3JvbGxUb3B8fGguc2Nyb2xsVG9wfHwwLHMrPXIuc2Nyb2xsTGVmdHx8aC5zY3JvbGxMZWZ0fHwwO2JyZWFrfWlmKCJyZWxhdGl2ZSI9PT1pJiYhYS5vZmZzZXRMZWZ0KXt2YXIgbD1vLkRvbVV0aWwuZ2V0U3R5bGUoYSwid2lkdGgiKSx1PW8uRG9tVXRpbC5nZXRTdHlsZShhLCJtYXgtd2lkdGgiKSxjPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7KCJub25lIiE9PWx8fCJub25lIiE9PXUpJiYocys9Yy5sZWZ0K2EuY2xpZW50TGVmdCksbis9Yy50b3ArKHIuc2Nyb2xsVG9wfHxoLnNjcm9sbFRvcHx8MCk7YnJlYWt9YT1hLm9mZnNldFBhcmVudH13aGlsZShhKTthPXQ7ZG97aWYoYT09PXIpYnJlYWs7bi09YS5zY3JvbGxUb3B8fDAscy09YS5zY3JvbGxMZWZ0fHwwLGE9YS5wYXJlbnROb2RlfXdoaWxlKGEpO3JldHVybiBuZXcgby5Qb2ludChzLG4pfSxkb2N1bWVudElzTHRyOmZ1bmN0aW9uKCl7cmV0dXJuIG8uRG9tVXRpbC5fZG9jSXNMdHJDYWNoZWR8fChvLkRvbVV0aWwuX2RvY0lzTHRyQ2FjaGVkPSEwLG8uRG9tVXRpbC5fZG9jSXNMdHI9Imx0ciI9PT1vLkRvbVV0aWwuZ2V0U3R5bGUoZS5ib2R5LCJkaXJlY3Rpb24iKSksby5Eb21VdGlsLl9kb2NJc0x0cn0sY3JlYXRlOmZ1bmN0aW9uKHQsaSxuKXt2YXIgbz1lLmNyZWF0ZUVsZW1lbnQodCk7cmV0dXJuIG8uY2xhc3NOYW1lPWksbiYmbi5hcHBlbmRDaGlsZChvKSxvfSxoYXNDbGFzczpmdW5jdGlvbih0LGUpe2lmKHQuY2xhc3NMaXN0IT09aSlyZXR1cm4gdC5jbGFzc0xpc3QuY29udGFpbnMoZSk7dmFyIG49by5Eb21VdGlsLl9nZXRDbGFzcyh0KTtyZXR1cm4gbi5sZW5ndGg+MCYmbmV3IFJlZ0V4cCgiKF58XFxzKSIrZSsiKFxcc3wkKSIpLnRlc3Qobil9LGFkZENsYXNzOmZ1bmN0aW9uKHQsZSl7aWYodC5jbGFzc0xpc3QhPT1pKWZvcih2YXIgbj1vLlV0aWwuc3BsaXRXb3JkcyhlKSxzPTAsYT1uLmxlbmd0aDthPnM7cysrKXQuY2xhc3NMaXN0LmFkZChuW3NdKTtlbHNlIGlmKCFvLkRvbVV0aWwuaGFzQ2xhc3ModCxlKSl7dmFyIHI9by5Eb21VdGlsLl9nZXRDbGFzcyh0KTtvLkRvbVV0aWwuX3NldENsYXNzKHQsKHI/cisiICI6IiIpK2UpfX0scmVtb3ZlQ2xhc3M6ZnVuY3Rpb24odCxlKXt0LmNsYXNzTGlzdCE9PWk/dC5jbGFzc0xpc3QucmVtb3ZlKGUpOm8uRG9tVXRpbC5fc2V0Q2xhc3ModCxvLlV0aWwudHJpbSgoIiAiK28uRG9tVXRpbC5fZ2V0Q2xhc3ModCkrIiAiKS5yZXBsYWNlKCIgIitlKyIgIiwiICIpKSl9LF9zZXRDbGFzczpmdW5jdGlvbih0LGUpe3QuY2xhc3NOYW1lLmJhc2VWYWw9PT1pP3QuY2xhc3NOYW1lPWU6dC5jbGFzc05hbWUuYmFzZVZhbD1lfSxfZ2V0Q2xhc3M6ZnVuY3Rpb24odCl7cmV0dXJuIHQuY2xhc3NOYW1lLmJhc2VWYWw9PT1pP3QuY2xhc3NOYW1lOnQuY2xhc3NOYW1lLmJhc2VWYWx9LHNldE9wYWNpdHk6ZnVuY3Rpb24odCxlKXtpZigib3BhY2l0eSJpbiB0LnN0eWxlKXQuc3R5bGUub3BhY2l0eT1lO2Vsc2UgaWYoImZpbHRlciJpbiB0LnN0eWxlKXt2YXIgaT0hMSxuPSJEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYSI7dHJ5e2k9dC5maWx0ZXJzLml0ZW0obil9Y2F0Y2gobyl7aWYoMT09PWUpcmV0dXJufWU9TWF0aC5yb3VuZCgxMDAqZSksaT8oaS5FbmFibGVkPTEwMCE9PWUsaS5PcGFjaXR5PWUpOnQuc3R5bGUuZmlsdGVyKz0iIHByb2dpZDoiK24rIihvcGFjaXR5PSIrZSsiKSJ9fSx0ZXN0UHJvcDpmdW5jdGlvbih0KXtmb3IodmFyIGk9ZS5kb2N1bWVudEVsZW1lbnQuc3R5bGUsbj0wO248dC5sZW5ndGg7bisrKWlmKHRbbl1pbiBpKXJldHVybiB0W25dO3JldHVybiExfSxnZXRUcmFuc2xhdGVTdHJpbmc6ZnVuY3Rpb24odCl7dmFyIGU9by5Ccm93c2VyLndlYmtpdDNkLGk9InRyYW5zbGF0ZSIrKGU/IjNkIjoiIikrIigiLG49KGU/IiwwIjoiIikrIikiO3JldHVybiBpK3QueCsicHgsIit0LnkrInB4IitufSxnZXRTY2FsZVN0cmluZzpmdW5jdGlvbih0LGUpe3ZhciBpPW8uRG9tVXRpbC5nZXRUcmFuc2xhdGVTdHJpbmcoZS5hZGQoZS5tdWx0aXBseUJ5KC0xKnQpKSksbj0iIHNjYWxlKCIrdCsiKSAiO3JldHVybiBpK259LHNldFBvc2l0aW9uOmZ1bmN0aW9uKHQsZSxpKXt0Ll9sZWFmbGV0X3Bvcz1lLCFpJiZvLkJyb3dzZXIuYW55M2Q/dC5zdHlsZVtvLkRvbVV0aWwuVFJBTlNGT1JNXT1vLkRvbVV0aWwuZ2V0VHJhbnNsYXRlU3RyaW5nKGUpOih0LnN0eWxlLmxlZnQ9ZS54KyJweCIsdC5zdHlsZS50b3A9ZS55KyJweCIpfSxnZXRQb3NpdGlvbjpmdW5jdGlvbih0KXtyZXR1cm4gdC5fbGVhZmxldF9wb3N9fSxvLkRvbVV0aWwuVFJBTlNGT1JNPW8uRG9tVXRpbC50ZXN0UHJvcChbInRyYW5zZm9ybSIsIldlYmtpdFRyYW5zZm9ybSIsIk9UcmFuc2Zvcm0iLCJNb3pUcmFuc2Zvcm0iLCJtc1RyYW5zZm9ybSJdKSxvLkRvbVV0aWwuVFJBTlNJVElPTj1vLkRvbVV0aWwudGVzdFByb3AoWyJ3ZWJraXRUcmFuc2l0aW9uIiwidHJhbnNpdGlvbiIsIk9UcmFuc2l0aW9uIiwiTW96VHJhbnNpdGlvbiIsIm1zVHJhbnNpdGlvbiJdKSxvLkRvbVV0aWwuVFJBTlNJVElPTl9FTkQ9IndlYmtpdFRyYW5zaXRpb24iPT09by5Eb21VdGlsLlRSQU5TSVRJT058fCJPVHJhbnNpdGlvbiI9PT1vLkRvbVV0aWwuVFJBTlNJVElPTj9vLkRvbVV0aWwuVFJBTlNJVElPTisiRW5kIjoidHJhbnNpdGlvbmVuZCIsZnVuY3Rpb24oKXtpZigib25zZWxlY3RzdGFydCJpbiBlKW8uZXh0ZW5kKG8uRG9tVXRpbCx7ZGlzYWJsZVRleHRTZWxlY3Rpb246ZnVuY3Rpb24oKXtvLkRvbUV2ZW50Lm9uKHQsInNlbGVjdHN0YXJ0IixvLkRvbUV2ZW50LnByZXZlbnREZWZhdWx0KX0sZW5hYmxlVGV4dFNlbGVjdGlvbjpmdW5jdGlvbigpe28uRG9tRXZlbnQub2ZmKHQsInNlbGVjdHN0YXJ0IixvLkRvbUV2ZW50LnByZXZlbnREZWZhdWx0KX19KTtlbHNle3ZhciBpPW8uRG9tVXRpbC50ZXN0UHJvcChbInVzZXJTZWxlY3QiLCJXZWJraXRVc2VyU2VsZWN0IiwiT1VzZXJTZWxlY3QiLCJNb3pVc2VyU2VsZWN0IiwibXNVc2VyU2VsZWN0Il0pO28uZXh0ZW5kKG8uRG9tVXRpbCx7ZGlzYWJsZVRleHRTZWxlY3Rpb246ZnVuY3Rpb24oKXtpZihpKXt2YXIgdD1lLmRvY3VtZW50RWxlbWVudC5zdHlsZTt0aGlzLl91c2VyU2VsZWN0PXRbaV0sdFtpXT0ibm9uZSJ9fSxlbmFibGVUZXh0U2VsZWN0aW9uOmZ1bmN0aW9uKCl7aSYmKGUuZG9jdW1lbnRFbGVtZW50LnN0eWxlW2ldPXRoaXMuX3VzZXJTZWxlY3QsZGVsZXRlIHRoaXMuX3VzZXJTZWxlY3QpfX0pfW8uZXh0ZW5kKG8uRG9tVXRpbCx7ZGlzYWJsZUltYWdlRHJhZzpmdW5jdGlvbigpe28uRG9tRXZlbnQub24odCwiZHJhZ3N0YXJ0IixvLkRvbUV2ZW50LnByZXZlbnREZWZhdWx0KX0sZW5hYmxlSW1hZ2VEcmFnOmZ1bmN0aW9uKCl7by5Eb21FdmVudC5vZmYodCwiZHJhZ3N0YXJ0IixvLkRvbUV2ZW50LnByZXZlbnREZWZhdWx0KX19KX0oKSxvLkxhdExuZz1mdW5jdGlvbih0LGUsbil7aWYodD1wYXJzZUZsb2F0KHQpLGU9cGFyc2VGbG9hdChlKSxpc05hTih0KXx8aXNOYU4oZSkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIExhdExuZyBvYmplY3Q6ICgiK3QrIiwgIitlKyIpIik7dGhpcy5sYXQ9dCx0aGlzLmxuZz1lLG4hPT1pJiYodGhpcy5hbHQ9cGFyc2VGbG9hdChuKSl9LG8uZXh0ZW5kKG8uTGF0TG5nLHtERUdfVE9fUkFEOk1hdGguUEkvMTgwLFJBRF9UT19ERUc6MTgwL01hdGguUEksTUFYX01BUkdJTjoxZS05fSksby5MYXRMbmcucHJvdG90eXBlPXtlcXVhbHM6ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuITE7dD1vLmxhdExuZyh0KTt2YXIgZT1NYXRoLm1heChNYXRoLmFicyh0aGlzLmxhdC10LmxhdCksTWF0aC5hYnModGhpcy5sbmctdC5sbmcpKTtyZXR1cm4gZTw9by5MYXRMbmcuTUFYX01BUkdJTn0sdG9TdHJpbmc6ZnVuY3Rpb24odCl7cmV0dXJuIkxhdExuZygiK28uVXRpbC5mb3JtYXROdW0odGhpcy5sYXQsdCkrIiwgIitvLlV0aWwuZm9ybWF0TnVtKHRoaXMubG5nLHQpKyIpIn0sZGlzdGFuY2VUbzpmdW5jdGlvbih0KXt0PW8ubGF0TG5nKHQpO3ZhciBlPTYzNzgxMzcsaT1vLkxhdExuZy5ERUdfVE9fUkFELG49KHQubGF0LXRoaXMubGF0KSppLHM9KHQubG5nLXRoaXMubG5nKSppLGE9dGhpcy5sYXQqaSxyPXQubGF0KmksaD1NYXRoLnNpbihuLzIpLGw9TWF0aC5zaW4ocy8yKSx1PWgqaCtsKmwqTWF0aC5jb3MoYSkqTWF0aC5jb3Mocik7cmV0dXJuIDIqZSpNYXRoLmF0YW4yKE1hdGguc3FydCh1KSxNYXRoLnNxcnQoMS11KSl9LHdyYXA6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLmxuZztyZXR1cm4gdD10fHwtMTgwLGU9ZXx8MTgwLGk9KGkrZSklKGUtdCkrKHQ+aXx8aT09PWU/ZTp0KSxuZXcgby5MYXRMbmcodGhpcy5sYXQsaSl9fSxvLmxhdExuZz1mdW5jdGlvbih0LGUpe3JldHVybiB0IGluc3RhbmNlb2Ygby5MYXRMbmc/dDpvLlV0aWwuaXNBcnJheSh0KT8ibnVtYmVyIj09dHlwZW9mIHRbMF18fCJzdHJpbmciPT10eXBlb2YgdFswXT9uZXcgby5MYXRMbmcodFswXSx0WzFdLHRbMl0pOm51bGw6dD09PWl8fG51bGw9PT10P3Q6Im9iamVjdCI9PXR5cGVvZiB0JiYibGF0ImluIHQ/bmV3IG8uTGF0TG5nKHQubGF0LCJsbmciaW4gdD90LmxuZzp0Lmxvbik6ZT09PWk/bnVsbDpuZXcgby5MYXRMbmcodCxlKX0sby5MYXRMbmdCb3VuZHM9ZnVuY3Rpb24odCxlKXtpZih0KWZvcih2YXIgaT1lP1t0LGVdOnQsbj0wLG89aS5sZW5ndGg7bz5uO24rKyl0aGlzLmV4dGVuZChpW25dKX0sby5MYXRMbmdCb3VuZHMucHJvdG90eXBlPXtleHRlbmQ6ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuIHRoaXM7dmFyIGU9by5sYXRMbmcodCk7cmV0dXJuIHQ9bnVsbCE9PWU/ZTpvLmxhdExuZ0JvdW5kcyh0KSx0IGluc3RhbmNlb2Ygby5MYXRMbmc/dGhpcy5fc291dGhXZXN0fHx0aGlzLl9ub3J0aEVhc3Q/KHRoaXMuX3NvdXRoV2VzdC5sYXQ9TWF0aC5taW4odC5sYXQsdGhpcy5fc291dGhXZXN0LmxhdCksdGhpcy5fc291dGhXZXN0LmxuZz1NYXRoLm1pbih0LmxuZyx0aGlzLl9zb3V0aFdlc3QubG5nKSx0aGlzLl9ub3J0aEVhc3QubGF0PU1hdGgubWF4KHQubGF0LHRoaXMuX25vcnRoRWFzdC5sYXQpLHRoaXMuX25vcnRoRWFzdC5sbmc9TWF0aC5tYXgodC5sbmcsdGhpcy5fbm9ydGhFYXN0LmxuZykpOih0aGlzLl9zb3V0aFdlc3Q9bmV3IG8uTGF0TG5nKHQubGF0LHQubG5nKSx0aGlzLl9ub3J0aEVhc3Q9bmV3IG8uTGF0TG5nKHQubGF0LHQubG5nKSk6dCBpbnN0YW5jZW9mIG8uTGF0TG5nQm91bmRzJiYodGhpcy5leHRlbmQodC5fc291dGhXZXN0KSx0aGlzLmV4dGVuZCh0Ll9ub3J0aEVhc3QpKSx0aGlzfSxwYWQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fc291dGhXZXN0LGk9dGhpcy5fbm9ydGhFYXN0LG49TWF0aC5hYnMoZS5sYXQtaS5sYXQpKnQscz1NYXRoLmFicyhlLmxuZy1pLmxuZykqdDtyZXR1cm4gbmV3IG8uTGF0TG5nQm91bmRzKG5ldyBvLkxhdExuZyhlLmxhdC1uLGUubG5nLXMpLG5ldyBvLkxhdExuZyhpLmxhdCtuLGkubG5nK3MpKX0sZ2V0Q2VudGVyOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBvLkxhdExuZygodGhpcy5fc291dGhXZXN0LmxhdCt0aGlzLl9ub3J0aEVhc3QubGF0KS8yLCh0aGlzLl9zb3V0aFdlc3QubG5nK3RoaXMuX25vcnRoRWFzdC5sbmcpLzIpfSxnZXRTb3V0aFdlc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc291dGhXZXN0fSxnZXROb3J0aEVhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbm9ydGhFYXN0fSxnZXROb3J0aFdlc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG8uTGF0TG5nKHRoaXMuZ2V0Tm9ydGgoKSx0aGlzLmdldFdlc3QoKSl9LGdldFNvdXRoRWFzdDpmdW5jdGlvbigpe3JldHVybiBuZXcgby5MYXRMbmcodGhpcy5nZXRTb3V0aCgpLHRoaXMuZ2V0RWFzdCgpKX0sZ2V0V2VzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zb3V0aFdlc3QubG5nfSxnZXRTb3V0aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zb3V0aFdlc3QubGF0fSxnZXRFYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25vcnRoRWFzdC5sbmd9LGdldE5vcnRoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25vcnRoRWFzdC5sYXR9LGNvbnRhaW5zOmZ1bmN0aW9uKHQpe3Q9Im51bWJlciI9PXR5cGVvZiB0WzBdfHx0IGluc3RhbmNlb2Ygby5MYXRMbmc/by5sYXRMbmcodCk6by5sYXRMbmdCb3VuZHModCk7dmFyIGUsaSxuPXRoaXMuX3NvdXRoV2VzdCxzPXRoaXMuX25vcnRoRWFzdDtyZXR1cm4gdCBpbnN0YW5jZW9mIG8uTGF0TG5nQm91bmRzPyhlPXQuZ2V0U291dGhXZXN0KCksaT10LmdldE5vcnRoRWFzdCgpKTplPWk9dCxlLmxhdD49bi5sYXQmJmkubGF0PD1zLmxhdCYmZS5sbmc+PW4ubG5nJiZpLmxuZzw9cy5sbmd9LGludGVyc2VjdHM6ZnVuY3Rpb24odCl7dD1vLmxhdExuZ0JvdW5kcyh0KTt2YXIgZT10aGlzLl9zb3V0aFdlc3QsaT10aGlzLl9ub3J0aEVhc3Qsbj10LmdldFNvdXRoV2VzdCgpLHM9dC5nZXROb3J0aEVhc3QoKSxhPXMubGF0Pj1lLmxhdCYmbi5sYXQ8PWkubGF0LHI9cy5sbmc+PWUubG5nJiZuLmxuZzw9aS5sbmc7cmV0dXJuIGEmJnJ9LHRvQkJveFN0cmluZzpmdW5jdGlvbigpe3JldHVyblt0aGlzLmdldFdlc3QoKSx0aGlzLmdldFNvdXRoKCksdGhpcy5nZXRFYXN0KCksdGhpcy5nZXROb3J0aCgpXS5qb2luKCIsIil9LGVxdWFsczpmdW5jdGlvbih0KXtyZXR1cm4gdD8odD1vLmxhdExuZ0JvdW5kcyh0KSx0aGlzLl9zb3V0aFdlc3QuZXF1YWxzKHQuZ2V0U291dGhXZXN0KCkpJiZ0aGlzLl9ub3J0aEVhc3QuZXF1YWxzKHQuZ2V0Tm9ydGhFYXN0KCkpKTohMX0saXNWYWxpZDpmdW5jdGlvbigpe3JldHVybiEoIXRoaXMuX3NvdXRoV2VzdHx8IXRoaXMuX25vcnRoRWFzdCl9fSxvLmxhdExuZ0JvdW5kcz1mdW5jdGlvbih0LGUpe3JldHVybiF0fHx0IGluc3RhbmNlb2Ygby5MYXRMbmdCb3VuZHM/dDpuZXcgby5MYXRMbmdCb3VuZHModCxlKX0sby5Qcm9qZWN0aW9uPXt9LG8uUHJvamVjdGlvbi5TcGhlcmljYWxNZXJjYXRvcj17TUFYX0xBVElUVURFOjg1LjA1MTEyODc3OTgscHJvamVjdDpmdW5jdGlvbih0KXt2YXIgZT1vLkxhdExuZy5ERUdfVE9fUkFELGk9dGhpcy5NQVhfTEFUSVRVREUsbj1NYXRoLm1heChNYXRoLm1pbihpLHQubGF0KSwtaSkscz10LmxuZyplLGE9biplO3JldHVybiBhPU1hdGgubG9nKE1hdGgudGFuKE1hdGguUEkvNCthLzIpKSxuZXcgby5Qb2ludChzLGEpfSx1bnByb2plY3Q6ZnVuY3Rpb24odCl7dmFyIGU9by5MYXRMbmcuUkFEX1RPX0RFRyxpPXQueCplLG49KDIqTWF0aC5hdGFuKE1hdGguZXhwKHQueSkpLU1hdGguUEkvMikqZTtyZXR1cm4gbmV3IG8uTGF0TG5nKG4saSl9fSxvLlByb2plY3Rpb24uTG9uTGF0PXtwcm9qZWN0OmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgby5Qb2ludCh0LmxuZyx0LmxhdCl9LHVucHJvamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IG8uTGF0TG5nKHQueSx0LngpfX0sby5DUlM9e2xhdExuZ1RvUG9pbnQ6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLnByb2plY3Rpb24ucHJvamVjdCh0KSxuPXRoaXMuc2NhbGUoZSk7cmV0dXJuIHRoaXMudHJhbnNmb3JtYXRpb24uX3RyYW5zZm9ybShpLG4pfSxwb2ludFRvTGF0TG5nOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5zY2FsZShlKSxuPXRoaXMudHJhbnNmb3JtYXRpb24udW50cmFuc2Zvcm0odCxpKTtyZXR1cm4gdGhpcy5wcm9qZWN0aW9uLnVucHJvamVjdChuKX0scHJvamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcm9qZWN0aW9uLnByb2plY3QodCl9LHNjYWxlOmZ1bmN0aW9uKHQpe3JldHVybiAyNTYqTWF0aC5wb3coMix0KX0sZ2V0U2l6ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnNjYWxlKHQpO3JldHVybiBvLnBvaW50KGUsZSl9fSxvLkNSUy5TaW1wbGU9by5leHRlbmQoe30sby5DUlMse3Byb2plY3Rpb246by5Qcm9qZWN0aW9uLkxvbkxhdCx0cmFuc2Zvcm1hdGlvbjpuZXcgby5UcmFuc2Zvcm1hdGlvbigxLDAsLTEsMCksc2NhbGU6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucG93KDIsdCl9fSksby5DUlMuRVBTRzM4NTc9by5leHRlbmQoe30sby5DUlMse2NvZGU6IkVQU0c6Mzg1NyIscHJvamVjdGlvbjpvLlByb2plY3Rpb24uU3BoZXJpY2FsTWVyY2F0b3IsdHJhbnNmb3JtYXRpb246bmV3IG8uVHJhbnNmb3JtYXRpb24oLjUvTWF0aC5QSSwuNSwtLjUvTWF0aC5QSSwuNSkscHJvamVjdDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnByb2plY3Rpb24ucHJvamVjdCh0KSxpPTYzNzgxMzc7cmV0dXJuIGUubXVsdGlwbHlCeShpKX19KSxvLkNSUy5FUFNHOTAwOTEzPW8uZXh0ZW5kKHt9LG8uQ1JTLkVQU0czODU3LHtjb2RlOiJFUFNHOjkwMDkxMyJ9KSxvLkNSUy5FUFNHNDMyNj1vLmV4dGVuZCh7fSxvLkNSUyx7Y29kZToiRVBTRzo0MzI2Iixwcm9qZWN0aW9uOm8uUHJvamVjdGlvbi5Mb25MYXQsdHJhbnNmb3JtYXRpb246bmV3IG8uVHJhbnNmb3JtYXRpb24oMS8zNjAsLjUsLTEvMzYwLC41KX0pLG8uTWFwPW8uQ2xhc3MuZXh0ZW5kKHtpbmNsdWRlczpvLk1peGluLkV2ZW50cyxvcHRpb25zOntjcnM6by5DUlMuRVBTRzM4NTcsZmFkZUFuaW1hdGlvbjpvLkRvbVV0aWwuVFJBTlNJVElPTiYmIW8uQnJvd3Nlci5hbmRyb2lkMjMsdHJhY2tSZXNpemU6ITAsbWFya2VyWm9vbUFuaW1hdGlvbjpvLkRvbVV0aWwuVFJBTlNJVElPTiYmby5Ccm93c2VyLmFueTNkfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQsZSl7ZT1vLnNldE9wdGlvbnModGhpcyxlKSx0aGlzLl9pbml0Q29udGFpbmVyKHQpLHRoaXMuX2luaXRMYXlvdXQoKSx0aGlzLl9vblJlc2l6ZT1vLmJpbmQodGhpcy5fb25SZXNpemUsdGhpcyksdGhpcy5faW5pdEV2ZW50cygpLGUubWF4Qm91bmRzJiZ0aGlzLnNldE1heEJvdW5kcyhlLm1heEJvdW5kcyksZS5jZW50ZXImJmUuem9vbSE9PWkmJnRoaXMuc2V0VmlldyhvLmxhdExuZyhlLmNlbnRlciksZS56b29tLHtyZXNldDohMH0pLHRoaXMuX2hhbmRsZXJzPVtdLHRoaXMuX2xheWVycz17fSx0aGlzLl96b29tQm91bmRMYXllcnM9e30sdGhpcy5fdGlsZUxheWVyc051bT0wLHRoaXMuY2FsbEluaXRIb29rcygpLHRoaXMuX2FkZExheWVycyhlLmxheWVycyl9LHNldFZpZXc6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT1lPT09aT90aGlzLmdldFpvb20oKTplLHRoaXMuX3Jlc2V0VmlldyhvLmxhdExuZyh0KSx0aGlzLl9saW1pdFpvb20oZSkpLHRoaXN9LHNldFpvb206ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fbG9hZGVkP3RoaXMuc2V0Vmlldyh0aGlzLmdldENlbnRlcigpLHQse3pvb206ZX0pOih0aGlzLl96b29tPXRoaXMuX2xpbWl0Wm9vbSh0KSx0aGlzKX0sem9vbUluOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc2V0Wm9vbSh0aGlzLl96b29tKyh0fHwxKSxlKX0sem9vbU91dDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnNldFpvb20odGhpcy5fem9vbS0odHx8MSksZSl9LHNldFpvb21Bcm91bmQ6ZnVuY3Rpb24odCxlLGkpe3ZhciBuPXRoaXMuZ2V0Wm9vbVNjYWxlKGUpLHM9dGhpcy5nZXRTaXplKCkuZGl2aWRlQnkoMiksYT10IGluc3RhbmNlb2Ygby5Qb2ludD90OnRoaXMubGF0TG5nVG9Db250YWluZXJQb2ludCh0KSxyPWEuc3VidHJhY3QocykubXVsdGlwbHlCeSgxLTEvbiksaD10aGlzLmNvbnRhaW5lclBvaW50VG9MYXRMbmcocy5hZGQocikpO3JldHVybiB0aGlzLnNldFZpZXcoaCxlLHt6b29tOml9KX0sZml0Qm91bmRzOmZ1bmN0aW9uKHQsZSl7ZT1lfHx7fSx0PXQuZ2V0Qm91bmRzP3QuZ2V0Qm91bmRzKCk6by5sYXRMbmdCb3VuZHModCk7dmFyIGk9by5wb2ludChlLnBhZGRpbmdUb3BMZWZ0fHxlLnBhZGRpbmd8fFswLDBdKSxuPW8ucG9pbnQoZS5wYWRkaW5nQm90dG9tUmlnaHR8fGUucGFkZGluZ3x8WzAsMF0pLHM9dGhpcy5nZXRCb3VuZHNab29tKHQsITEsaS5hZGQobikpO3M9Im51bWJlciI9PXR5cGVvZiBlLm1heFpvb20/TWF0aC5taW4oZS5tYXhab29tLHMpOnM7dmFyIGE9bi5zdWJ0cmFjdChpKS5kaXZpZGVCeSgyKSxyPXRoaXMucHJvamVjdCh0LmdldFNvdXRoV2VzdCgpLHMpLGg9dGhpcy5wcm9qZWN0KHQuZ2V0Tm9ydGhFYXN0KCkscyksbD10aGlzLnVucHJvamVjdChyLmFkZChoKS5kaXZpZGVCeSgyKS5hZGQoYSkscyk7cmV0dXJuIHRoaXMuc2V0VmlldyhsLHMsZSl9LGZpdFdvcmxkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmZpdEJvdW5kcyhbWy05MCwtMTgwXSxbOTAsMTgwXV0sdCl9LHBhblRvOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc2V0Vmlldyh0LHRoaXMuX3pvb20se3BhbjplfSl9LHBhbkJ5OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmZpcmUoIm1vdmVzdGFydCIpLHRoaXMuX3Jhd1BhbkJ5KG8ucG9pbnQodCkpLHRoaXMuZmlyZSgibW92ZSIpLHRoaXMuZmlyZSgibW92ZWVuZCIpfSxzZXRNYXhCb3VuZHM6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9by5sYXRMbmdCb3VuZHModCksdGhpcy5vcHRpb25zLm1heEJvdW5kcz10LHQ/KHRoaXMuX2xvYWRlZCYmdGhpcy5fcGFuSW5zaWRlTWF4Qm91bmRzKCksdGhpcy5vbigibW92ZWVuZCIsdGhpcy5fcGFuSW5zaWRlTWF4Qm91bmRzLHRoaXMpKTp0aGlzLm9mZigibW92ZWVuZCIsdGhpcy5fcGFuSW5zaWRlTWF4Qm91bmRzLHRoaXMpfSxwYW5JbnNpZGVCb3VuZHM6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLmdldENlbnRlcigpLG49dGhpcy5fbGltaXRDZW50ZXIoaSx0aGlzLl96b29tLHQpO3JldHVybiBpLmVxdWFscyhuKT90aGlzOnRoaXMucGFuVG8obixlKX0sYWRkTGF5ZXI6ZnVuY3Rpb24odCl7dmFyIGU9by5zdGFtcCh0KTtyZXR1cm4gdGhpcy5fbGF5ZXJzW2VdP3RoaXM6KHRoaXMuX2xheWVyc1tlXT10LCF0Lm9wdGlvbnN8fGlzTmFOKHQub3B0aW9ucy5tYXhab29tKSYmaXNOYU4odC5vcHRpb25zLm1pblpvb20pfHwodGhpcy5fem9vbUJvdW5kTGF5ZXJzW2VdPXQsdGhpcy5fdXBkYXRlWm9vbUxldmVscygpKSx0aGlzLm9wdGlvbnMuem9vbUFuaW1hdGlvbiYmby5UaWxlTGF5ZXImJnQgaW5zdGFuY2VvZiBvLlRpbGVMYXllciYmKHRoaXMuX3RpbGVMYXllcnNOdW0rKyx0aGlzLl90aWxlTGF5ZXJzVG9Mb2FkKyssdC5vbigibG9hZCIsdGhpcy5fb25UaWxlTGF5ZXJMb2FkLHRoaXMpKSx0aGlzLl9sb2FkZWQmJnRoaXMuX2xheWVyQWRkKHQpLHRoaXMpfSxyZW1vdmVMYXllcjpmdW5jdGlvbih0KXt2YXIgZT1vLnN0YW1wKHQpO3JldHVybiB0aGlzLl9sYXllcnNbZV0/KHRoaXMuX2xvYWRlZCYmdC5vblJlbW92ZSh0aGlzKSxkZWxldGUgdGhpcy5fbGF5ZXJzW2VdLHRoaXMuX2xvYWRlZCYmdGhpcy5maXJlKCJsYXllcnJlbW92ZSIse2xheWVyOnR9KSx0aGlzLl96b29tQm91bmRMYXllcnNbZV0mJihkZWxldGUgdGhpcy5fem9vbUJvdW5kTGF5ZXJzW2VdLHRoaXMuX3VwZGF0ZVpvb21MZXZlbHMoKSksdGhpcy5vcHRpb25zLnpvb21BbmltYXRpb24mJm8uVGlsZUxheWVyJiZ0IGluc3RhbmNlb2Ygby5UaWxlTGF5ZXImJih0aGlzLl90aWxlTGF5ZXJzTnVtLS0sdGhpcy5fdGlsZUxheWVyc1RvTG9hZC0tLHQub2ZmKCJsb2FkIix0aGlzLl9vblRpbGVMYXllckxvYWQsdGhpcykpLHRoaXMpOnRoaXN9LGhhc0xheWVyOmZ1bmN0aW9uKHQpe3JldHVybiB0P28uc3RhbXAodClpbiB0aGlzLl9sYXllcnM6ITF9LGVhY2hMYXllcjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgaSBpbiB0aGlzLl9sYXllcnMpdC5jYWxsKGUsdGhpcy5fbGF5ZXJzW2ldKTtyZXR1cm4gdGhpc30saW52YWxpZGF0ZVNpemU6ZnVuY3Rpb24odCl7aWYoIXRoaXMuX2xvYWRlZClyZXR1cm4gdGhpczt0PW8uZXh0ZW5kKHthbmltYXRlOiExLHBhbjohMH0sdD09PSEwP3thbmltYXRlOiEwfTp0KTt2YXIgZT10aGlzLmdldFNpemUoKTt0aGlzLl9zaXplQ2hhbmdlZD0hMCx0aGlzLl9pbml0aWFsQ2VudGVyPW51bGw7dmFyIGk9dGhpcy5nZXRTaXplKCksbj1lLmRpdmlkZUJ5KDIpLnJvdW5kKCkscz1pLmRpdmlkZUJ5KDIpLnJvdW5kKCksYT1uLnN1YnRyYWN0KHMpO3JldHVybiBhLnh8fGEueT8odC5hbmltYXRlJiZ0LnBhbj90aGlzLnBhbkJ5KGEpOih0LnBhbiYmdGhpcy5fcmF3UGFuQnkoYSksdGhpcy5maXJlKCJtb3ZlIiksdC5kZWJvdW5jZU1vdmVlbmQ/KGNsZWFyVGltZW91dCh0aGlzLl9zaXplVGltZXIpLHRoaXMuX3NpemVUaW1lcj1zZXRUaW1lb3V0KG8uYmluZCh0aGlzLmZpcmUsdGhpcywibW92ZWVuZCIpLDIwMCkpOnRoaXMuZmlyZSgibW92ZWVuZCIpKSx0aGlzLmZpcmUoInJlc2l6ZSIse29sZFNpemU6ZSxuZXdTaXplOml9KSk6dGhpc30sYWRkSGFuZGxlcjpmdW5jdGlvbih0LGUpe2lmKCFlKXJldHVybiB0aGlzO3ZhciBpPXRoaXNbdF09bmV3IGUodGhpcyk7cmV0dXJuIHRoaXMuX2hhbmRsZXJzLnB1c2goaSksdGhpcy5vcHRpb25zW3RdJiZpLmVuYWJsZSgpLHRoaXN9LHJlbW92ZTpmdW5jdGlvbigpe3RoaXMuX2xvYWRlZCYmdGhpcy5maXJlKCJ1bmxvYWQiKSx0aGlzLl9pbml0RXZlbnRzKCJvZmYiKTt0cnl7ZGVsZXRlIHRoaXMuX2NvbnRhaW5lci5fbGVhZmxldH1jYXRjaCh0KXt0aGlzLl9jb250YWluZXIuX2xlYWZsZXQ9aX1yZXR1cm4gdGhpcy5fY2xlYXJQYW5lcygpLHRoaXMuX2NsZWFyQ29udHJvbFBvcyYmdGhpcy5fY2xlYXJDb250cm9sUG9zKCksdGhpcy5fY2xlYXJIYW5kbGVycygpLHRoaXN9LGdldENlbnRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jaGVja0lmTG9hZGVkKCksdGhpcy5faW5pdGlhbENlbnRlciYmIXRoaXMuX21vdmVkKCk/dGhpcy5faW5pdGlhbENlbnRlcjp0aGlzLmxheWVyUG9pbnRUb0xhdExuZyh0aGlzLl9nZXRDZW50ZXJMYXllclBvaW50KCkpfSxnZXRab29tOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3pvb219LGdldEJvdW5kczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2V0UGl4ZWxCb3VuZHMoKSxlPXRoaXMudW5wcm9qZWN0KHQuZ2V0Qm90dG9tTGVmdCgpKSxpPXRoaXMudW5wcm9qZWN0KHQuZ2V0VG9wUmlnaHQoKSk7cmV0dXJuIG5ldyBvLkxhdExuZ0JvdW5kcyhlLGkpfSxnZXRNaW5ab29tOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5taW5ab29tPT09aT90aGlzLl9sYXllcnNNaW5ab29tPT09aT8wOnRoaXMuX2xheWVyc01pblpvb206dGhpcy5vcHRpb25zLm1pblpvb219LGdldE1heFpvb206ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLm1heFpvb209PT1pP3RoaXMuX2xheWVyc01heFpvb209PT1pPzEvMDp0aGlzLl9sYXllcnNNYXhab29tOnRoaXMub3B0aW9ucy5tYXhab29tfSxnZXRCb3VuZHNab29tOmZ1bmN0aW9uKHQsZSxpKXt0PW8ubGF0TG5nQm91bmRzKHQpO3ZhciBuLHM9dGhpcy5nZXRNaW5ab29tKCktKGU/MTowKSxhPXRoaXMuZ2V0TWF4Wm9vbSgpLHI9dGhpcy5nZXRTaXplKCksaD10LmdldE5vcnRoV2VzdCgpLGw9dC5nZXRTb3V0aEVhc3QoKSx1PSEwO2k9by5wb2ludChpfHxbMCwwXSk7ZG8gcysrLG49dGhpcy5wcm9qZWN0KGwscykuc3VidHJhY3QodGhpcy5wcm9qZWN0KGgscykpLmFkZChpKSx1PWU/bi54PHIueHx8bi55PHIueTpyLmNvbnRhaW5zKG4pO3doaWxlKHUmJmE+PXMpO3JldHVybiB1JiZlP251bGw6ZT9zOnMtMX0sZ2V0U2l6ZTpmdW5jdGlvbigpe3JldHVybighdGhpcy5fc2l6ZXx8dGhpcy5fc2l6ZUNoYW5nZWQpJiYodGhpcy5fc2l6ZT1uZXcgby5Qb2ludCh0aGlzLl9jb250YWluZXIuY2xpZW50V2lkdGgsdGhpcy5fY29udGFpbmVyLmNsaWVudEhlaWdodCksdGhpcy5fc2l6ZUNoYW5nZWQ9ITEpLHRoaXMuX3NpemUuY2xvbmUoKX0sZ2V0UGl4ZWxCb3VuZHM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9nZXRUb3BMZWZ0UG9pbnQoKTtyZXR1cm4gbmV3IG8uQm91bmRzKHQsdC5hZGQodGhpcy5nZXRTaXplKCkpKX0sZ2V0UGl4ZWxPcmlnaW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hlY2tJZkxvYWRlZCgpLHRoaXMuX2luaXRpYWxUb3BMZWZ0UG9pbnR9LGdldFBhbmVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhbmVzfSxnZXRDb250YWluZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGFpbmVyfSxnZXRab29tU2NhbGU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5vcHRpb25zLmNycztyZXR1cm4gZS5zY2FsZSh0KS9lLnNjYWxlKHRoaXMuX3pvb20pfSxnZXRTY2FsZVpvb206ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3pvb20rTWF0aC5sb2codCkvTWF0aC5MTjJ9LHByb2plY3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT1lPT09aT90aGlzLl96b29tOmUsdGhpcy5vcHRpb25zLmNycy5sYXRMbmdUb1BvaW50KG8ubGF0TG5nKHQpLGUpfSx1bnByb2plY3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT1lPT09aT90aGlzLl96b29tOmUsdGhpcy5vcHRpb25zLmNycy5wb2ludFRvTGF0TG5nKG8ucG9pbnQodCksZSl9LGxheWVyUG9pbnRUb0xhdExuZzpmdW5jdGlvbih0KXt2YXIgZT1vLnBvaW50KHQpLmFkZCh0aGlzLmdldFBpeGVsT3JpZ2luKCkpO3JldHVybiB0aGlzLnVucHJvamVjdChlKX0sbGF0TG5nVG9MYXllclBvaW50OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucHJvamVjdChvLmxhdExuZyh0KSkuX3JvdW5kKCk7cmV0dXJuIGUuX3N1YnRyYWN0KHRoaXMuZ2V0UGl4ZWxPcmlnaW4oKSl9LGNvbnRhaW5lclBvaW50VG9MYXllclBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiBvLnBvaW50KHQpLnN1YnRyYWN0KHRoaXMuX2dldE1hcFBhbmVQb3MoKSl9LGxheWVyUG9pbnRUb0NvbnRhaW5lclBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiBvLnBvaW50KHQpLmFkZCh0aGlzLl9nZXRNYXBQYW5lUG9zKCkpfSxjb250YWluZXJQb2ludFRvTGF0TG5nOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY29udGFpbmVyUG9pbnRUb0xheWVyUG9pbnQoby5wb2ludCh0KSk7cmV0dXJuIHRoaXMubGF5ZXJQb2ludFRvTGF0TG5nKGUpfSxsYXRMbmdUb0NvbnRhaW5lclBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxheWVyUG9pbnRUb0NvbnRhaW5lclBvaW50KHRoaXMubGF0TG5nVG9MYXllclBvaW50KG8ubGF0TG5nKHQpKSl9LG1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiBvLkRvbUV2ZW50LmdldE1vdXNlUG9zaXRpb24odCx0aGlzLl9jb250YWluZXIpfSxtb3VzZUV2ZW50VG9MYXllclBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNvbnRhaW5lclBvaW50VG9MYXllclBvaW50KHRoaXMubW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQodCkpfSxtb3VzZUV2ZW50VG9MYXRMbmc6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGF5ZXJQb2ludFRvTGF0TG5nKHRoaXMubW91c2VFdmVudFRvTGF5ZXJQb2ludCh0KSl9LF9pbml0Q29udGFpbmVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2NvbnRhaW5lcj1vLkRvbVV0aWwuZ2V0KHQpO2lmKCFlKXRocm93IG5ldyBFcnJvcigiTWFwIGNvbnRhaW5lciBub3QgZm91bmQuIik7aWYoZS5fbGVhZmxldCl0aHJvdyBuZXcgRXJyb3IoIk1hcCBjb250YWluZXIgaXMgYWxyZWFkeSBpbml0aWFsaXplZC4iKTtlLl9sZWFmbGV0PSEwfSxfaW5pdExheW91dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2NvbnRhaW5lcjtvLkRvbVV0aWwuYWRkQ2xhc3ModCwibGVhZmxldC1jb250YWluZXIiKyhvLkJyb3dzZXIudG91Y2g/IiBsZWFmbGV0LXRvdWNoIjoiIikrKG8uQnJvd3Nlci5yZXRpbmE/IiBsZWFmbGV0LXJldGluYSI6IiIpKyhvLkJyb3dzZXIuaWVsdDk/IiBsZWFmbGV0LW9sZGllIjoiIikrKHRoaXMub3B0aW9ucy5mYWRlQW5pbWF0aW9uPyIgbGVhZmxldC1mYWRlLWFuaW0iOiIiKSk7dmFyIGU9by5Eb21VdGlsLmdldFN0eWxlKHQsInBvc2l0aW9uIik7ImFic29sdXRlIiE9PWUmJiJyZWxhdGl2ZSIhPT1lJiYiZml4ZWQiIT09ZSYmKHQuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIiksdGhpcy5faW5pdFBhbmVzKCksdGhpcy5faW5pdENvbnRyb2xQb3MmJnRoaXMuX2luaXRDb250cm9sUG9zKCl9LF9pbml0UGFuZXM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wYW5lcz17fTt0aGlzLl9tYXBQYW5lPXQubWFwUGFuZT10aGlzLl9jcmVhdGVQYW5lKCJsZWFmbGV0LW1hcC1wYW5lIix0aGlzLl9jb250YWluZXIpLHRoaXMuX3RpbGVQYW5lPXQudGlsZVBhbmU9dGhpcy5fY3JlYXRlUGFuZSgibGVhZmxldC10aWxlLXBhbmUiLHRoaXMuX21hcFBhbmUpLHQub2JqZWN0c1BhbmU9dGhpcy5fY3JlYXRlUGFuZSgibGVhZmxldC1vYmplY3RzLXBhbmUiLHRoaXMuX21hcFBhbmUpLHQuc2hhZG93UGFuZT10aGlzLl9jcmVhdGVQYW5lKCJsZWFmbGV0LXNoYWRvdy1wYW5lIiksdC5vdmVybGF5UGFuZT10aGlzLl9jcmVhdGVQYW5lKCJsZWFmbGV0LW92ZXJsYXktcGFuZSIpLHQubWFya2VyUGFuZT10aGlzLl9jcmVhdGVQYW5lKCJsZWFmbGV0LW1hcmtlci1wYW5lIiksdC5wb3B1cFBhbmU9dGhpcy5fY3JlYXRlUGFuZSgibGVhZmxldC1wb3B1cC1wYW5lIik7dmFyIGU9IiBsZWFmbGV0LXpvb20taGlkZSI7dGhpcy5vcHRpb25zLm1hcmtlclpvb21BbmltYXRpb258fChvLkRvbVV0aWwuYWRkQ2xhc3ModC5tYXJrZXJQYW5lLGUpLG8uRG9tVXRpbC5hZGRDbGFzcyh0LnNoYWRvd1BhbmUsZSksby5Eb21VdGlsLmFkZENsYXNzKHQucG9wdXBQYW5lLGUpKX0sX2NyZWF0ZVBhbmU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gby5Eb21VdGlsLmNyZWF0ZSgiZGl2Iix0LGV8fHRoaXMuX3BhbmVzLm9iamVjdHNQYW5lKX0sX2NsZWFyUGFuZXM6ZnVuY3Rpb24oKXt0aGlzLl9jb250YWluZXIucmVtb3ZlQ2hpbGQodGhpcy5fbWFwUGFuZSl9LF9hZGRMYXllcnM6ZnVuY3Rpb24odCl7dD10P28uVXRpbC5pc0FycmF5KHQpP3Q6W3RdOltdO2Zvcih2YXIgZT0wLGk9dC5sZW5ndGg7aT5lO2UrKyl0aGlzLmFkZExheWVyKHRbZV0pfSxfcmVzZXRWaWV3OmZ1bmN0aW9uKHQsZSxpLG4pe3ZhciBzPXRoaXMuX3pvb20hPT1lO258fCh0aGlzLmZpcmUoIm1vdmVzdGFydCIpLHMmJnRoaXMuZmlyZSgiem9vbXN0YXJ0IikpLHRoaXMuX3pvb209ZSx0aGlzLl9pbml0aWFsQ2VudGVyPXQsdGhpcy5faW5pdGlhbFRvcExlZnRQb2ludD10aGlzLl9nZXROZXdUb3BMZWZ0UG9pbnQodCksaT90aGlzLl9pbml0aWFsVG9wTGVmdFBvaW50Ll9hZGQodGhpcy5fZ2V0TWFwUGFuZVBvcygpKTpvLkRvbVV0aWwuc2V0UG9zaXRpb24odGhpcy5fbWFwUGFuZSxuZXcgby5Qb2ludCgwLDApKSx0aGlzLl90aWxlTGF5ZXJzVG9Mb2FkPXRoaXMuX3RpbGVMYXllcnNOdW07dmFyIGE9IXRoaXMuX2xvYWRlZDt0aGlzLl9sb2FkZWQ9ITAsdGhpcy5maXJlKCJ2aWV3cmVzZXQiLHtoYXJkOiFpfSksYSYmKHRoaXMuZmlyZSgibG9hZCIpLHRoaXMuZWFjaExheWVyKHRoaXMuX2xheWVyQWRkLHRoaXMpKSx0aGlzLmZpcmUoIm1vdmUiKSwoc3x8bikmJnRoaXMuZmlyZSgiem9vbWVuZCIpLHRoaXMuZmlyZSgibW92ZWVuZCIse2hhcmQ6IWl9KX0sX3Jhd1BhbkJ5OmZ1bmN0aW9uKHQpe28uRG9tVXRpbC5zZXRQb3NpdGlvbih0aGlzLl9tYXBQYW5lLHRoaXMuX2dldE1hcFBhbmVQb3MoKS5zdWJ0cmFjdCh0KSl9LF9nZXRab29tU3BhbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldE1heFpvb20oKS10aGlzLmdldE1pblpvb20oKX0sX3VwZGF0ZVpvb21MZXZlbHM6ZnVuY3Rpb24oKXt2YXIgdCxlPTEvMCxuPS0oMS8wKSxvPXRoaXMuX2dldFpvb21TcGFuKCk7Zm9yKHQgaW4gdGhpcy5fem9vbUJvdW5kTGF5ZXJzKXt2YXIgcz10aGlzLl96b29tQm91bmRMYXllcnNbdF07aXNOYU4ocy5vcHRpb25zLm1pblpvb20pfHwoZT1NYXRoLm1pbihlLHMub3B0aW9ucy5taW5ab29tKSksaXNOYU4ocy5vcHRpb25zLm1heFpvb20pfHwobj1NYXRoLm1heChuLHMub3B0aW9ucy5tYXhab29tKSl9dD09PWk/dGhpcy5fbGF5ZXJzTWF4Wm9vbT10aGlzLl9sYXllcnNNaW5ab29tPWk6KHRoaXMuX2xheWVyc01heFpvb209bix0aGlzLl9sYXllcnNNaW5ab29tPWUpLG8hPT10aGlzLl9nZXRab29tU3BhbigpJiZ0aGlzLmZpcmUoInpvb21sZXZlbHNjaGFuZ2UiKX0sX3Bhbkluc2lkZU1heEJvdW5kczpmdW5jdGlvbigpe3RoaXMucGFuSW5zaWRlQm91bmRzKHRoaXMub3B0aW9ucy5tYXhCb3VuZHMpfSxfY2hlY2tJZkxvYWRlZDpmdW5jdGlvbigpe2lmKCF0aGlzLl9sb2FkZWQpdGhyb3cgbmV3IEVycm9yKCJTZXQgbWFwIGNlbnRlciBhbmQgem9vbSBmaXJzdC4iKX0sX2luaXRFdmVudHM6ZnVuY3Rpb24oZSl7aWYoby5Eb21FdmVudCl7ZT1lfHwib24iLG8uRG9tRXZlbnRbZV0odGhpcy5fY29udGFpbmVyLCJjbGljayIsdGhpcy5fb25Nb3VzZUNsaWNrLHRoaXMpO3ZhciBpLG4scz1bImRibGNsaWNrIiwibW91c2Vkb3duIiwibW91c2V1cCIsIm1vdXNlZW50ZXIiLCJtb3VzZWxlYXZlIiwibW91c2Vtb3ZlIiwiY29udGV4dG1lbnUiXTtmb3IoaT0wLG49cy5sZW5ndGg7bj5pO2krKylvLkRvbUV2ZW50W2VdKHRoaXMuX2NvbnRhaW5lcixzW2ldLHRoaXMuX2ZpcmVNb3VzZUV2ZW50LHRoaXMpO3RoaXMub3B0aW9ucy50cmFja1Jlc2l6ZSYmby5Eb21FdmVudFtlXSh0LCJyZXNpemUiLHRoaXMuX29uUmVzaXplLHRoaXMpfX0sX29uUmVzaXplOmZ1bmN0aW9uKCl7by5VdGlsLmNhbmNlbEFuaW1GcmFtZSh0aGlzLl9yZXNpemVSZXF1ZXN0KSx0aGlzLl9yZXNpemVSZXF1ZXN0PW8uVXRpbC5yZXF1ZXN0QW5pbUZyYW1lKGZ1bmN0aW9uKCl7dGhpcy5pbnZhbGlkYXRlU2l6ZSh7ZGVib3VuY2VNb3ZlZW5kOiEwfSl9LHRoaXMsITEsdGhpcy5fY29udGFpbmVyKX0sX29uTW91c2VDbGljazpmdW5jdGlvbih0KXshdGhpcy5fbG9hZGVkfHwhdC5fc2ltdWxhdGVkJiYodGhpcy5kcmFnZ2luZyYmdGhpcy5kcmFnZ2luZy5tb3ZlZCgpfHx0aGlzLmJveFpvb20mJnRoaXMuYm94Wm9vbS5tb3ZlZCgpKXx8by5Eb21FdmVudC5fc2tpcHBlZCh0KXx8KHRoaXMuZmlyZSgicHJlY2xpY2siKSx0aGlzLl9maXJlTW91c2VFdmVudCh0KSl9LF9maXJlTW91c2VFdmVudDpmdW5jdGlvbih0KXtpZih0aGlzLl9sb2FkZWQmJiFvLkRvbUV2ZW50Ll9za2lwcGVkKHQpKXt2YXIgZT10LnR5cGU7aWYoZT0ibW91c2VlbnRlciI9PT1lPyJtb3VzZW92ZXIiOiJtb3VzZWxlYXZlIj09PWU/Im1vdXNlb3V0IjplLHRoaXMuaGFzRXZlbnRMaXN0ZW5lcnMoZSkpeyJjb250ZXh0bWVudSI9PT1lJiZvLkRvbUV2ZW50LnByZXZlbnREZWZhdWx0KHQpO3ZhciBpPXRoaXMubW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQodCksbj10aGlzLmNvbnRhaW5lclBvaW50VG9MYXllclBvaW50KGkpLHM9dGhpcy5sYXllclBvaW50VG9MYXRMbmcobik7dGhpcy5maXJlKGUse2xhdGxuZzpzLGxheWVyUG9pbnQ6bixjb250YWluZXJQb2ludDppLG9yaWdpbmFsRXZlbnQ6dH0pfX19LF9vblRpbGVMYXllckxvYWQ6ZnVuY3Rpb24oKXt0aGlzLl90aWxlTGF5ZXJzVG9Mb2FkLS0sdGhpcy5fdGlsZUxheWVyc051bSYmIXRoaXMuX3RpbGVMYXllcnNUb0xvYWQmJnRoaXMuZmlyZSgidGlsZWxheWVyc2xvYWQiKX0sX2NsZWFySGFuZGxlcnM6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxlPXRoaXMuX2hhbmRsZXJzLmxlbmd0aDtlPnQ7dCsrKXRoaXMuX2hhbmRsZXJzW3RdLmRpc2FibGUoKX0sd2hlblJlYWR5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2xvYWRlZD90LmNhbGwoZXx8dGhpcyx0aGlzKTp0aGlzLm9uKCJsb2FkIix0LGUpLHRoaXN9LF9sYXllckFkZDpmdW5jdGlvbih0KXt0Lm9uQWRkKHRoaXMpLHRoaXMuZmlyZSgibGF5ZXJhZGQiLHtsYXllcjp0fSl9LF9nZXRNYXBQYW5lUG9zOmZ1bmN0aW9uKCl7cmV0dXJuIG8uRG9tVXRpbC5nZXRQb3NpdGlvbih0aGlzLl9tYXBQYW5lKX0sX21vdmVkOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZ2V0TWFwUGFuZVBvcygpO3JldHVybiB0JiYhdC5lcXVhbHMoWzAsMF0pfSxfZ2V0VG9wTGVmdFBvaW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0UGl4ZWxPcmlnaW4oKS5zdWJ0cmFjdCh0aGlzLl9nZXRNYXBQYW5lUG9zKCkpfSxfZ2V0TmV3VG9wTGVmdFBvaW50OmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5nZXRTaXplKCkuX2RpdmlkZUJ5KDIpO3JldHVybiB0aGlzLnByb2plY3QodCxlKS5fc3VidHJhY3QoaSkuX3JvdW5kKCl9LF9sYXRMbmdUb05ld0xheWVyUG9pbnQ6ZnVuY3Rpb24odCxlLGkpe3ZhciBuPXRoaXMuX2dldE5ld1RvcExlZnRQb2ludChpLGUpLmFkZCh0aGlzLl9nZXRNYXBQYW5lUG9zKCkpO3JldHVybiB0aGlzLnByb2plY3QodCxlKS5fc3VidHJhY3Qobil9LF9nZXRDZW50ZXJMYXllclBvaW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udGFpbmVyUG9pbnRUb0xheWVyUG9pbnQodGhpcy5nZXRTaXplKCkuX2RpdmlkZUJ5KDIpKX0sX2dldENlbnRlck9mZnNldDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sYXRMbmdUb0xheWVyUG9pbnQodCkuc3VidHJhY3QodGhpcy5fZ2V0Q2VudGVyTGF5ZXJQb2ludCgpKX0sX2xpbWl0Q2VudGVyOmZ1bmN0aW9uKHQsZSxpKXtpZighaSlyZXR1cm4gdDt2YXIgbj10aGlzLnByb2plY3QodCxlKSxzPXRoaXMuZ2V0U2l6ZSgpLmRpdmlkZUJ5KDIpLGE9bmV3IG8uQm91bmRzKG4uc3VidHJhY3Qocyksbi5hZGQocykpLHI9dGhpcy5fZ2V0Qm91bmRzT2Zmc2V0KGEsaSxlKTtyZXR1cm4gdGhpcy51bnByb2plY3Qobi5hZGQociksZSl9LF9saW1pdE9mZnNldDpmdW5jdGlvbih0LGUpe2lmKCFlKXJldHVybiB0O3ZhciBpPXRoaXMuZ2V0UGl4ZWxCb3VuZHMoKSxuPW5ldyBvLkJvdW5kcyhpLm1pbi5hZGQodCksaS5tYXguYWRkKHQpKTtyZXR1cm4gdC5hZGQodGhpcy5fZ2V0Qm91bmRzT2Zmc2V0KG4sZSkpfSxfZ2V0Qm91bmRzT2Zmc2V0OmZ1bmN0aW9uKHQsZSxpKXt2YXIgbj10aGlzLnByb2plY3QoZS5nZXROb3J0aFdlc3QoKSxpKS5zdWJ0cmFjdCh0Lm1pbikscz10aGlzLnByb2plY3QoZS5nZXRTb3V0aEVhc3QoKSxpKS5zdWJ0cmFjdCh0Lm1heCksYT10aGlzLl9yZWJvdW5kKG4ueCwtcy54KSxyPXRoaXMuX3JlYm91bmQobi55LC1zLnkpO3JldHVybiBuZXcgby5Qb2ludChhLHIpfSxfcmVib3VuZDpmdW5jdGlvbih0LGUpe3JldHVybiB0K2U+MD9NYXRoLnJvdW5kKHQtZSkvMjpNYXRoLm1heCgwLE1hdGguY2VpbCh0KSktTWF0aC5tYXgoMCxNYXRoLmZsb29yKGUpKX0sX2xpbWl0Wm9vbTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmdldE1pblpvb20oKSxpPXRoaXMuZ2V0TWF4Wm9vbSgpO3JldHVybiBNYXRoLm1heChlLE1hdGgubWluKGksdCkpfX0pLG8ubWFwPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBvLk1hcCh0LGUpfSxvLlByb2plY3Rpb24uTWVyY2F0b3I9e01BWF9MQVRJVFVERTo4NS4wODQwNTkxNTU2LFJfTUlOT1I6NjM1Njc1Mi4zMTQyNDUxNzksUl9NQUpPUjo2Mzc4MTM3LHByb2plY3Q6ZnVuY3Rpb24odCl7dmFyIGU9by5MYXRMbmcuREVHX1RPX1JBRCxpPXRoaXMuTUFYX0xBVElUVURFLG49TWF0aC5tYXgoTWF0aC5taW4oaSx0LmxhdCksLWkpLHM9dGhpcy5SX01BSk9SLGE9dGhpcy5SX01JTk9SLHI9dC5sbmcqZSpzLGg9biplLGw9YS9zLHU9TWF0aC5zcXJ0KDEtbCpsKSxjPXUqTWF0aC5zaW4oaCk7Yz1NYXRoLnBvdygoMS1jKS8oMStjKSwuNSp1KTt2YXIgZD1NYXRoLnRhbiguNSooLjUqTWF0aC5QSS1oKSkvYztyZXR1cm4gaD0tcypNYXRoLmxvZyhkKSxuZXcgby5Qb2ludChyLGgpfSx1bnByb2plY3Q6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLGk9by5MYXRMbmcuUkFEX1RPX0RFRyxuPXRoaXMuUl9NQUpPUixzPXRoaXMuUl9NSU5PUixhPXQueCppL24scj1zL24saD1NYXRoLnNxcnQoMS1yKnIpLGw9TWF0aC5leHAoLXQueS9uKSx1PU1hdGguUEkvMi0yKk1hdGguYXRhbihsKSxjPTE1LGQ9MWUtNyxwPWMsXz0uMTtNYXRoLmFicyhfKT5kJiYtLXA+MDspZT1oKk1hdGguc2luKHUpLF89TWF0aC5QSS8yLTIqTWF0aC5hdGFuKGwqTWF0aC5wb3coKDEtZSkvKDErZSksLjUqaCkpLXUsdSs9XztyZXR1cm4gbmV3IG8uTGF0TG5nKHUqaSxhKX19LG8uQ1JTLkVQU0czMzk1PW8uZXh0ZW5kKHt9LG8uQ1JTLHsKY29kZToiRVBTRzozMzk1Iixwcm9qZWN0aW9uOm8uUHJvamVjdGlvbi5NZXJjYXRvcix0cmFuc2Zvcm1hdGlvbjpmdW5jdGlvbigpe3ZhciB0PW8uUHJvamVjdGlvbi5NZXJjYXRvcixlPXQuUl9NQUpPUixpPS41LyhNYXRoLlBJKmUpO3JldHVybiBuZXcgby5UcmFuc2Zvcm1hdGlvbihpLC41LC1pLC41KX0oKX0pLG8uVGlsZUxheWVyPW8uQ2xhc3MuZXh0ZW5kKHtpbmNsdWRlczpvLk1peGluLkV2ZW50cyxvcHRpb25zOnttaW5ab29tOjAsbWF4Wm9vbToxOCx0aWxlU2l6ZToyNTYsc3ViZG9tYWluczoiYWJjIixlcnJvclRpbGVVcmw6IiIsYXR0cmlidXRpb246IiIsem9vbU9mZnNldDowLG9wYWNpdHk6MSx1bmxvYWRJbnZpc2libGVUaWxlczpvLkJyb3dzZXIubW9iaWxlLHVwZGF0ZVdoZW5JZGxlOm8uQnJvd3Nlci5tb2JpbGV9LGluaXRpYWxpemU6ZnVuY3Rpb24odCxlKXtlPW8uc2V0T3B0aW9ucyh0aGlzLGUpLGUuZGV0ZWN0UmV0aW5hJiZvLkJyb3dzZXIucmV0aW5hJiZlLm1heFpvb20+MCYmKGUudGlsZVNpemU9TWF0aC5mbG9vcihlLnRpbGVTaXplLzIpLGUuem9vbU9mZnNldCsrLGUubWluWm9vbT4wJiZlLm1pblpvb20tLSx0aGlzLm9wdGlvbnMubWF4Wm9vbS0tKSxlLmJvdW5kcyYmKGUuYm91bmRzPW8ubGF0TG5nQm91bmRzKGUuYm91bmRzKSksdGhpcy5fdXJsPXQ7dmFyIGk9dGhpcy5vcHRpb25zLnN1YmRvbWFpbnM7InN0cmluZyI9PXR5cGVvZiBpJiYodGhpcy5vcHRpb25zLnN1YmRvbWFpbnM9aS5zcGxpdCgiIikpfSxvbkFkZDpmdW5jdGlvbih0KXt0aGlzLl9tYXA9dCx0aGlzLl9hbmltYXRlZD10Ll96b29tQW5pbWF0ZWQsdGhpcy5faW5pdENvbnRhaW5lcigpLHQub24oe3ZpZXdyZXNldDp0aGlzLl9yZXNldCxtb3ZlZW5kOnRoaXMuX3VwZGF0ZX0sdGhpcyksdGhpcy5fYW5pbWF0ZWQmJnQub24oe3pvb21hbmltOnRoaXMuX2FuaW1hdGVab29tLHpvb21lbmQ6dGhpcy5fZW5kWm9vbUFuaW19LHRoaXMpLHRoaXMub3B0aW9ucy51cGRhdGVXaGVuSWRsZXx8KHRoaXMuX2xpbWl0ZWRVcGRhdGU9by5VdGlsLmxpbWl0RXhlY0J5SW50ZXJ2YWwodGhpcy5fdXBkYXRlLDE1MCx0aGlzKSx0Lm9uKCJtb3ZlIix0aGlzLl9saW1pdGVkVXBkYXRlLHRoaXMpKSx0aGlzLl9yZXNldCgpLHRoaXMuX3VwZGF0ZSgpfSxhZGRUbzpmdW5jdGlvbih0KXtyZXR1cm4gdC5hZGRMYXllcih0aGlzKSx0aGlzfSxvblJlbW92ZTpmdW5jdGlvbih0KXt0aGlzLl9jb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9jb250YWluZXIpLHQub2ZmKHt2aWV3cmVzZXQ6dGhpcy5fcmVzZXQsbW92ZWVuZDp0aGlzLl91cGRhdGV9LHRoaXMpLHRoaXMuX2FuaW1hdGVkJiZ0Lm9mZih7em9vbWFuaW06dGhpcy5fYW5pbWF0ZVpvb20sem9vbWVuZDp0aGlzLl9lbmRab29tQW5pbX0sdGhpcyksdGhpcy5vcHRpb25zLnVwZGF0ZVdoZW5JZGxlfHx0Lm9mZigibW92ZSIsdGhpcy5fbGltaXRlZFVwZGF0ZSx0aGlzKSx0aGlzLl9jb250YWluZXI9bnVsbCx0aGlzLl9tYXA9bnVsbH0sYnJpbmdUb0Zyb250OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwLl9wYW5lcy50aWxlUGFuZTtyZXR1cm4gdGhpcy5fY29udGFpbmVyJiYodC5hcHBlbmRDaGlsZCh0aGlzLl9jb250YWluZXIpLHRoaXMuX3NldEF1dG9aSW5kZXgodCxNYXRoLm1heCkpLHRoaXN9LGJyaW5nVG9CYWNrOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwLl9wYW5lcy50aWxlUGFuZTtyZXR1cm4gdGhpcy5fY29udGFpbmVyJiYodC5pbnNlcnRCZWZvcmUodGhpcy5fY29udGFpbmVyLHQuZmlyc3RDaGlsZCksdGhpcy5fc2V0QXV0b1pJbmRleCh0LE1hdGgubWluKSksdGhpc30sZ2V0QXR0cmlidXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmF0dHJpYnV0aW9ufSxnZXRDb250YWluZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGFpbmVyfSxzZXRPcGFjaXR5OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnMub3BhY2l0eT10LHRoaXMuX21hcCYmdGhpcy5fdXBkYXRlT3BhY2l0eSgpLHRoaXN9LHNldFpJbmRleDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLnpJbmRleD10LHRoaXMuX3VwZGF0ZVpJbmRleCgpLHRoaXN9LHNldFVybDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl91cmw9dCxlfHx0aGlzLnJlZHJhdygpLHRoaXN9LHJlZHJhdzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXAmJih0aGlzLl9yZXNldCh7aGFyZDohMH0pLHRoaXMuX3VwZGF0ZSgpKSx0aGlzfSxfdXBkYXRlWkluZGV4OmZ1bmN0aW9uKCl7dGhpcy5fY29udGFpbmVyJiZ0aGlzLm9wdGlvbnMuekluZGV4IT09aSYmKHRoaXMuX2NvbnRhaW5lci5zdHlsZS56SW5kZXg9dGhpcy5vcHRpb25zLnpJbmRleCl9LF9zZXRBdXRvWkluZGV4OmZ1bmN0aW9uKHQsZSl7dmFyIGksbixvLHM9dC5jaGlsZHJlbixhPS1lKDEvMCwtKDEvMCkpO2ZvcihuPTAsbz1zLmxlbmd0aDtvPm47bisrKXNbbl0hPT10aGlzLl9jb250YWluZXImJihpPXBhcnNlSW50KHNbbl0uc3R5bGUuekluZGV4LDEwKSxpc05hTihpKXx8KGE9ZShhLGkpKSk7dGhpcy5vcHRpb25zLnpJbmRleD10aGlzLl9jb250YWluZXIuc3R5bGUuekluZGV4PShpc0Zpbml0ZShhKT9hOjApK2UoMSwtMSl9LF91cGRhdGVPcGFjaXR5OmZ1bmN0aW9uKCl7dmFyIHQsZT10aGlzLl90aWxlcztpZihvLkJyb3dzZXIuaWVsdDkpZm9yKHQgaW4gZSlvLkRvbVV0aWwuc2V0T3BhY2l0eShlW3RdLHRoaXMub3B0aW9ucy5vcGFjaXR5KTtlbHNlIG8uRG9tVXRpbC5zZXRPcGFjaXR5KHRoaXMuX2NvbnRhaW5lcix0aGlzLm9wdGlvbnMub3BhY2l0eSl9LF9pbml0Q29udGFpbmVyOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwLl9wYW5lcy50aWxlUGFuZTtpZighdGhpcy5fY29udGFpbmVyKXtpZih0aGlzLl9jb250YWluZXI9by5Eb21VdGlsLmNyZWF0ZSgiZGl2IiwibGVhZmxldC1sYXllciIpLHRoaXMuX3VwZGF0ZVpJbmRleCgpLHRoaXMuX2FuaW1hdGVkKXt2YXIgZT0ibGVhZmxldC10aWxlLWNvbnRhaW5lciI7dGhpcy5fYmdCdWZmZXI9by5Eb21VdGlsLmNyZWF0ZSgiZGl2IixlLHRoaXMuX2NvbnRhaW5lciksdGhpcy5fdGlsZUNvbnRhaW5lcj1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLGUsdGhpcy5fY29udGFpbmVyKX1lbHNlIHRoaXMuX3RpbGVDb250YWluZXI9dGhpcy5fY29udGFpbmVyO3QuYXBwZW5kQ2hpbGQodGhpcy5fY29udGFpbmVyKSx0aGlzLm9wdGlvbnMub3BhY2l0eTwxJiZ0aGlzLl91cGRhdGVPcGFjaXR5KCl9fSxfcmVzZXQ6ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuX3RpbGVzKXRoaXMuZmlyZSgidGlsZXVubG9hZCIse3RpbGU6dGhpcy5fdGlsZXNbZV19KTt0aGlzLl90aWxlcz17fSx0aGlzLl90aWxlc1RvTG9hZD0wLHRoaXMub3B0aW9ucy5yZXVzZVRpbGVzJiYodGhpcy5fdW51c2VkVGlsZXM9W10pLHRoaXMuX3RpbGVDb250YWluZXIuaW5uZXJIVE1MPSIiLHRoaXMuX2FuaW1hdGVkJiZ0JiZ0LmhhcmQmJnRoaXMuX2NsZWFyQmdCdWZmZXIoKSx0aGlzLl9pbml0Q29udGFpbmVyKCl9LF9nZXRUaWxlU2l6ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcCxlPXQuZ2V0Wm9vbSgpK3RoaXMub3B0aW9ucy56b29tT2Zmc2V0LGk9dGhpcy5vcHRpb25zLm1heE5hdGl2ZVpvb20sbj10aGlzLm9wdGlvbnMudGlsZVNpemU7cmV0dXJuIGkmJmU+aSYmKG49TWF0aC5yb3VuZCh0LmdldFpvb21TY2FsZShlKS90LmdldFpvb21TY2FsZShpKSpuKSksbn0sX3VwZGF0ZTpmdW5jdGlvbigpe2lmKHRoaXMuX21hcCl7dmFyIHQ9dGhpcy5fbWFwLGU9dC5nZXRQaXhlbEJvdW5kcygpLGk9dC5nZXRab29tKCksbj10aGlzLl9nZXRUaWxlU2l6ZSgpO2lmKCEoaT50aGlzLm9wdGlvbnMubWF4Wm9vbXx8aTx0aGlzLm9wdGlvbnMubWluWm9vbSkpe3ZhciBzPW8uYm91bmRzKGUubWluLmRpdmlkZUJ5KG4pLl9mbG9vcigpLGUubWF4LmRpdmlkZUJ5KG4pLl9mbG9vcigpKTt0aGlzLl9hZGRUaWxlc0Zyb21DZW50ZXJPdXQocyksKHRoaXMub3B0aW9ucy51bmxvYWRJbnZpc2libGVUaWxlc3x8dGhpcy5vcHRpb25zLnJldXNlVGlsZXMpJiZ0aGlzLl9yZW1vdmVPdGhlclRpbGVzKHMpfX19LF9hZGRUaWxlc0Zyb21DZW50ZXJPdXQ6ZnVuY3Rpb24odCl7dmFyIGksbixzLGE9W10scj10LmdldENlbnRlcigpO2ZvcihpPXQubWluLnk7aTw9dC5tYXgueTtpKyspZm9yKG49dC5taW4ueDtuPD10Lm1heC54O24rKylzPW5ldyBvLlBvaW50KG4saSksdGhpcy5fdGlsZVNob3VsZEJlTG9hZGVkKHMpJiZhLnB1c2gocyk7dmFyIGg9YS5sZW5ndGg7aWYoMCE9PWgpe2Euc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LmRpc3RhbmNlVG8ociktZS5kaXN0YW5jZVRvKHIpfSk7dmFyIGw9ZS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Zm9yKHRoaXMuX3RpbGVzVG9Mb2FkfHx0aGlzLmZpcmUoImxvYWRpbmciKSx0aGlzLl90aWxlc1RvTG9hZCs9aCxuPTA7aD5uO24rKyl0aGlzLl9hZGRUaWxlKGFbbl0sbCk7dGhpcy5fdGlsZUNvbnRhaW5lci5hcHBlbmRDaGlsZChsKX19LF90aWxlU2hvdWxkQmVMb2FkZWQ6ZnVuY3Rpb24odCl7aWYodC54KyI6Iit0LnkgaW4gdGhpcy5fdGlsZXMpcmV0dXJuITE7dmFyIGU9dGhpcy5vcHRpb25zO2lmKCFlLmNvbnRpbnVvdXNXb3JsZCl7dmFyIGk9dGhpcy5fZ2V0V3JhcFRpbGVOdW0oKTtpZihlLm5vV3JhcCYmKHQueDwwfHx0Lng+PWkueCl8fHQueTwwfHx0Lnk+PWkueSlyZXR1cm4hMX1pZihlLmJvdW5kcyl7dmFyIG49dGhpcy5fZ2V0VGlsZVNpemUoKSxvPXQubXVsdGlwbHlCeShuKSxzPW8uYWRkKFtuLG5dKSxhPXRoaXMuX21hcC51bnByb2plY3Qobykscj10aGlzLl9tYXAudW5wcm9qZWN0KHMpO2lmKGUuY29udGludW91c1dvcmxkfHxlLm5vV3JhcHx8KGE9YS53cmFwKCkscj1yLndyYXAoKSksIWUuYm91bmRzLmludGVyc2VjdHMoW2Escl0pKXJldHVybiExfXJldHVybiEwfSxfcmVtb3ZlT3RoZXJUaWxlczpmdW5jdGlvbih0KXt2YXIgZSxpLG4sbztmb3IobyBpbiB0aGlzLl90aWxlcyllPW8uc3BsaXQoIjoiKSxpPXBhcnNlSW50KGVbMF0sMTApLG49cGFyc2VJbnQoZVsxXSwxMCksKGk8dC5taW4ueHx8aT50Lm1heC54fHxuPHQubWluLnl8fG4+dC5tYXgueSkmJnRoaXMuX3JlbW92ZVRpbGUobyl9LF9yZW1vdmVUaWxlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3RpbGVzW3RdO3RoaXMuZmlyZSgidGlsZXVubG9hZCIse3RpbGU6ZSx1cmw6ZS5zcmN9KSx0aGlzLm9wdGlvbnMucmV1c2VUaWxlcz8oby5Eb21VdGlsLnJlbW92ZUNsYXNzKGUsImxlYWZsZXQtdGlsZS1sb2FkZWQiKSx0aGlzLl91bnVzZWRUaWxlcy5wdXNoKGUpKTplLnBhcmVudE5vZGU9PT10aGlzLl90aWxlQ29udGFpbmVyJiZ0aGlzLl90aWxlQ29udGFpbmVyLnJlbW92ZUNoaWxkKGUpLG8uQnJvd3Nlci5hbmRyb2lkfHwoZS5vbmxvYWQ9bnVsbCxlLnNyYz1vLlV0aWwuZW1wdHlJbWFnZVVybCksZGVsZXRlIHRoaXMuX3RpbGVzW3RdfSxfYWRkVGlsZTpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMuX2dldFRpbGVQb3ModCksbj10aGlzLl9nZXRUaWxlKCk7by5Eb21VdGlsLnNldFBvc2l0aW9uKG4saSxvLkJyb3dzZXIuY2hyb21lKSx0aGlzLl90aWxlc1t0LngrIjoiK3QueV09bix0aGlzLl9sb2FkVGlsZShuLHQpLG4ucGFyZW50Tm9kZSE9PXRoaXMuX3RpbGVDb250YWluZXImJmUuYXBwZW5kQ2hpbGQobil9LF9nZXRab29tRm9yVXJsOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zLGU9dGhpcy5fbWFwLmdldFpvb20oKTtyZXR1cm4gdC56b29tUmV2ZXJzZSYmKGU9dC5tYXhab29tLWUpLGUrPXQuem9vbU9mZnNldCx0Lm1heE5hdGl2ZVpvb20/TWF0aC5taW4oZSx0Lm1heE5hdGl2ZVpvb20pOmV9LF9nZXRUaWxlUG9zOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX21hcC5nZXRQaXhlbE9yaWdpbigpLGk9dGhpcy5fZ2V0VGlsZVNpemUoKTtyZXR1cm4gdC5tdWx0aXBseUJ5KGkpLnN1YnRyYWN0KGUpfSxnZXRUaWxlVXJsOmZ1bmN0aW9uKHQpe3JldHVybiBvLlV0aWwudGVtcGxhdGUodGhpcy5fdXJsLG8uZXh0ZW5kKHtzOnRoaXMuX2dldFN1YmRvbWFpbih0KSx6OnQueix4OnQueCx5OnQueX0sdGhpcy5vcHRpb25zKSl9LF9nZXRXcmFwVGlsZU51bTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcC5vcHRpb25zLmNycyxlPXQuZ2V0U2l6ZSh0aGlzLl9tYXAuZ2V0Wm9vbSgpKTtyZXR1cm4gZS5kaXZpZGVCeSh0aGlzLl9nZXRUaWxlU2l6ZSgpKS5fZmxvb3IoKX0sX2FkanVzdFRpbGVQb2ludDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9nZXRXcmFwVGlsZU51bSgpO3RoaXMub3B0aW9ucy5jb250aW51b3VzV29ybGR8fHRoaXMub3B0aW9ucy5ub1dyYXB8fCh0Lng9KHQueCVlLngrZS54KSVlLngpLHRoaXMub3B0aW9ucy50bXMmJih0Lnk9ZS55LXQueS0xKSx0Lno9dGhpcy5fZ2V0Wm9vbUZvclVybCgpfSxfZ2V0U3ViZG9tYWluOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguYWJzKHQueCt0LnkpJXRoaXMub3B0aW9ucy5zdWJkb21haW5zLmxlbmd0aDtyZXR1cm4gdGhpcy5vcHRpb25zLnN1YmRvbWFpbnNbZV19LF9nZXRUaWxlOmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLnJldXNlVGlsZXMmJnRoaXMuX3VudXNlZFRpbGVzLmxlbmd0aD4wKXt2YXIgdD10aGlzLl91bnVzZWRUaWxlcy5wb3AoKTtyZXR1cm4gdGhpcy5fcmVzZXRUaWxlKHQpLHR9cmV0dXJuIHRoaXMuX2NyZWF0ZVRpbGUoKX0sX3Jlc2V0VGlsZTpmdW5jdGlvbigpe30sX2NyZWF0ZVRpbGU6ZnVuY3Rpb24oKXt2YXIgdD1vLkRvbVV0aWwuY3JlYXRlKCJpbWciLCJsZWFmbGV0LXRpbGUiKTtyZXR1cm4gdC5zdHlsZS53aWR0aD10LnN0eWxlLmhlaWdodD10aGlzLl9nZXRUaWxlU2l6ZSgpKyJweCIsdC5nYWxsZXJ5aW1nPSJubyIsdC5vbnNlbGVjdHN0YXJ0PXQub25tb3VzZW1vdmU9by5VdGlsLmZhbHNlRm4sby5Ccm93c2VyLmllbHQ5JiZ0aGlzLm9wdGlvbnMub3BhY2l0eSE9PWkmJm8uRG9tVXRpbC5zZXRPcGFjaXR5KHQsdGhpcy5vcHRpb25zLm9wYWNpdHkpLG8uQnJvd3Nlci5tb2JpbGVXZWJraXQzZCYmKHQuc3R5bGUuV2Via2l0QmFja2ZhY2VWaXNpYmlsaXR5PSJoaWRkZW4iKSx0fSxfbG9hZFRpbGU6ZnVuY3Rpb24odCxlKXt0Ll9sYXllcj10aGlzLHQub25sb2FkPXRoaXMuX3RpbGVPbkxvYWQsdC5vbmVycm9yPXRoaXMuX3RpbGVPbkVycm9yLHRoaXMuX2FkanVzdFRpbGVQb2ludChlKSx0LnNyYz10aGlzLmdldFRpbGVVcmwoZSksdGhpcy5maXJlKCJ0aWxlbG9hZHN0YXJ0Iix7dGlsZTp0LHVybDp0LnNyY30pfSxfdGlsZUxvYWRlZDpmdW5jdGlvbigpe3RoaXMuX3RpbGVzVG9Mb2FkLS0sdGhpcy5fYW5pbWF0ZWQmJm8uRG9tVXRpbC5hZGRDbGFzcyh0aGlzLl90aWxlQ29udGFpbmVyLCJsZWFmbGV0LXpvb20tYW5pbWF0ZWQiKSx0aGlzLl90aWxlc1RvTG9hZHx8KHRoaXMuZmlyZSgibG9hZCIpLHRoaXMuX2FuaW1hdGVkJiYoY2xlYXJUaW1lb3V0KHRoaXMuX2NsZWFyQmdCdWZmZXJUaW1lciksdGhpcy5fY2xlYXJCZ0J1ZmZlclRpbWVyPXNldFRpbWVvdXQoby5iaW5kKHRoaXMuX2NsZWFyQmdCdWZmZXIsdGhpcyksNTAwKSkpfSxfdGlsZU9uTG9hZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2xheWVyO3RoaXMuc3JjIT09by5VdGlsLmVtcHR5SW1hZ2VVcmwmJihvLkRvbVV0aWwuYWRkQ2xhc3ModGhpcywibGVhZmxldC10aWxlLWxvYWRlZCIpLHQuZmlyZSgidGlsZWxvYWQiLHt0aWxlOnRoaXMsdXJsOnRoaXMuc3JjfSkpLHQuX3RpbGVMb2FkZWQoKX0sX3RpbGVPbkVycm9yOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbGF5ZXI7dC5maXJlKCJ0aWxlZXJyb3IiLHt0aWxlOnRoaXMsdXJsOnRoaXMuc3JjfSk7dmFyIGU9dC5vcHRpb25zLmVycm9yVGlsZVVybDtlJiYodGhpcy5zcmM9ZSksdC5fdGlsZUxvYWRlZCgpfX0pLG8udGlsZUxheWVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBvLlRpbGVMYXllcih0LGUpfSxvLlRpbGVMYXllci5XTVM9by5UaWxlTGF5ZXIuZXh0ZW5kKHtkZWZhdWx0V21zUGFyYW1zOntzZXJ2aWNlOiJXTVMiLHJlcXVlc3Q6IkdldE1hcCIsdmVyc2lvbjoiMS4xLjEiLGxheWVyczoiIixzdHlsZXM6IiIsZm9ybWF0OiJpbWFnZS9qcGVnIix0cmFuc3BhcmVudDohMX0saW5pdGlhbGl6ZTpmdW5jdGlvbih0LGUpe3RoaXMuX3VybD10O3ZhciBpPW8uZXh0ZW5kKHt9LHRoaXMuZGVmYXVsdFdtc1BhcmFtcyksbj1lLnRpbGVTaXplfHx0aGlzLm9wdGlvbnMudGlsZVNpemU7ZS5kZXRlY3RSZXRpbmEmJm8uQnJvd3Nlci5yZXRpbmE/aS53aWR0aD1pLmhlaWdodD0yKm46aS53aWR0aD1pLmhlaWdodD1uO2Zvcih2YXIgcyBpbiBlKXRoaXMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShzKXx8ImNycyI9PT1zfHwoaVtzXT1lW3NdKTt0aGlzLndtc1BhcmFtcz1pLG8uc2V0T3B0aW9ucyh0aGlzLGUpfSxvbkFkZDpmdW5jdGlvbih0KXt0aGlzLl9jcnM9dGhpcy5vcHRpb25zLmNyc3x8dC5vcHRpb25zLmNycyx0aGlzLl93bXNWZXJzaW9uPXBhcnNlRmxvYXQodGhpcy53bXNQYXJhbXMudmVyc2lvbik7dmFyIGU9dGhpcy5fd21zVmVyc2lvbj49MS4zPyJjcnMiOiJzcnMiO3RoaXMud21zUGFyYW1zW2VdPXRoaXMuX2Nycy5jb2RlLG8uVGlsZUxheWVyLnByb3RvdHlwZS5vbkFkZC5jYWxsKHRoaXMsdCl9LGdldFRpbGVVcmw6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbWFwLGk9dGhpcy5vcHRpb25zLnRpbGVTaXplLG49dC5tdWx0aXBseUJ5KGkpLHM9bi5hZGQoW2ksaV0pLGE9dGhpcy5fY3JzLnByb2plY3QoZS51bnByb2plY3Qobix0LnopKSxyPXRoaXMuX2Nycy5wcm9qZWN0KGUudW5wcm9qZWN0KHMsdC56KSksaD10aGlzLl93bXNWZXJzaW9uPj0xLjMmJnRoaXMuX2Nycz09PW8uQ1JTLkVQU0c0MzI2P1tyLnksYS54LGEueSxyLnhdLmpvaW4oIiwiKTpbYS54LHIueSxyLngsYS55XS5qb2luKCIsIiksbD1vLlV0aWwudGVtcGxhdGUodGhpcy5fdXJsLHtzOnRoaXMuX2dldFN1YmRvbWFpbih0KX0pO3JldHVybiBsK28uVXRpbC5nZXRQYXJhbVN0cmluZyh0aGlzLndtc1BhcmFtcyxsLCEwKSsiJkJCT1g9IitofSxzZXRQYXJhbXM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gby5leHRlbmQodGhpcy53bXNQYXJhbXMsdCksZXx8dGhpcy5yZWRyYXcoKSx0aGlzfX0pLG8udGlsZUxheWVyLndtcz1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgby5UaWxlTGF5ZXIuV01TKHQsZSl9LG8uVGlsZUxheWVyLkNhbnZhcz1vLlRpbGVMYXllci5leHRlbmQoe29wdGlvbnM6e2FzeW5jOiExfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe28uc2V0T3B0aW9ucyh0aGlzLHQpfSxyZWRyYXc6ZnVuY3Rpb24oKXt0aGlzLl9tYXAmJih0aGlzLl9yZXNldCh7aGFyZDohMH0pLHRoaXMuX3VwZGF0ZSgpKTtmb3IodmFyIHQgaW4gdGhpcy5fdGlsZXMpdGhpcy5fcmVkcmF3VGlsZSh0aGlzLl90aWxlc1t0XSk7cmV0dXJuIHRoaXN9LF9yZWRyYXdUaWxlOmZ1bmN0aW9uKHQpe3RoaXMuZHJhd1RpbGUodCx0Ll90aWxlUG9pbnQsdGhpcy5fbWFwLl96b29tKX0sX2NyZWF0ZVRpbGU6ZnVuY3Rpb24oKXt2YXIgdD1vLkRvbVV0aWwuY3JlYXRlKCJjYW52YXMiLCJsZWFmbGV0LXRpbGUiKTtyZXR1cm4gdC53aWR0aD10LmhlaWdodD10aGlzLm9wdGlvbnMudGlsZVNpemUsdC5vbnNlbGVjdHN0YXJ0PXQub25tb3VzZW1vdmU9by5VdGlsLmZhbHNlRm4sdH0sX2xvYWRUaWxlOmZ1bmN0aW9uKHQsZSl7dC5fbGF5ZXI9dGhpcyx0Ll90aWxlUG9pbnQ9ZSx0aGlzLl9yZWRyYXdUaWxlKHQpLHRoaXMub3B0aW9ucy5hc3luY3x8dGhpcy50aWxlRHJhd24odCl9LGRyYXdUaWxlOmZ1bmN0aW9uKCl7fSx0aWxlRHJhd246ZnVuY3Rpb24odCl7dGhpcy5fdGlsZU9uTG9hZC5jYWxsKHQpfX0pLG8udGlsZUxheWVyLmNhbnZhcz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IG8uVGlsZUxheWVyLkNhbnZhcyh0KX0sby5JbWFnZU92ZXJsYXk9by5DbGFzcy5leHRlbmQoe2luY2x1ZGVzOm8uTWl4aW4uRXZlbnRzLG9wdGlvbnM6e29wYWNpdHk6MX0saW5pdGlhbGl6ZTpmdW5jdGlvbih0LGUsaSl7dGhpcy5fdXJsPXQsdGhpcy5fYm91bmRzPW8ubGF0TG5nQm91bmRzKGUpLG8uc2V0T3B0aW9ucyh0aGlzLGkpfSxvbkFkZDpmdW5jdGlvbih0KXt0aGlzLl9tYXA9dCx0aGlzLl9pbWFnZXx8dGhpcy5faW5pdEltYWdlKCksdC5fcGFuZXMub3ZlcmxheVBhbmUuYXBwZW5kQ2hpbGQodGhpcy5faW1hZ2UpLHQub24oInZpZXdyZXNldCIsdGhpcy5fcmVzZXQsdGhpcyksdC5vcHRpb25zLnpvb21BbmltYXRpb24mJm8uQnJvd3Nlci5hbnkzZCYmdC5vbigiem9vbWFuaW0iLHRoaXMuX2FuaW1hdGVab29tLHRoaXMpLHRoaXMuX3Jlc2V0KCl9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe3QuZ2V0UGFuZXMoKS5vdmVybGF5UGFuZS5yZW1vdmVDaGlsZCh0aGlzLl9pbWFnZSksdC5vZmYoInZpZXdyZXNldCIsdGhpcy5fcmVzZXQsdGhpcyksdC5vcHRpb25zLnpvb21BbmltYXRpb24mJnQub2ZmKCJ6b29tYW5pbSIsdGhpcy5fYW5pbWF0ZVpvb20sdGhpcyl9LGFkZFRvOmZ1bmN0aW9uKHQpe3JldHVybiB0LmFkZExheWVyKHRoaXMpLHRoaXN9LHNldE9wYWNpdHk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy5vcGFjaXR5PXQsdGhpcy5fdXBkYXRlT3BhY2l0eSgpLHRoaXN9LGJyaW5nVG9Gcm9udDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pbWFnZSYmdGhpcy5fbWFwLl9wYW5lcy5vdmVybGF5UGFuZS5hcHBlbmRDaGlsZCh0aGlzLl9pbWFnZSksdGhpc30sYnJpbmdUb0JhY2s6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tYXAuX3BhbmVzLm92ZXJsYXlQYW5lO3JldHVybiB0aGlzLl9pbWFnZSYmdC5pbnNlcnRCZWZvcmUodGhpcy5faW1hZ2UsdC5maXJzdENoaWxkKSx0aGlzfSxzZXRVcmw6ZnVuY3Rpb24odCl7dGhpcy5fdXJsPXQsdGhpcy5faW1hZ2Uuc3JjPXRoaXMuX3VybH0sZ2V0QXR0cmlidXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmF0dHJpYnV0aW9ufSxfaW5pdEltYWdlOmZ1bmN0aW9uKCl7dGhpcy5faW1hZ2U9by5Eb21VdGlsLmNyZWF0ZSgiaW1nIiwibGVhZmxldC1pbWFnZS1sYXllciIpLHRoaXMuX21hcC5vcHRpb25zLnpvb21BbmltYXRpb24mJm8uQnJvd3Nlci5hbnkzZD9vLkRvbVV0aWwuYWRkQ2xhc3ModGhpcy5faW1hZ2UsImxlYWZsZXQtem9vbS1hbmltYXRlZCIpOm8uRG9tVXRpbC5hZGRDbGFzcyh0aGlzLl9pbWFnZSwibGVhZmxldC16b29tLWhpZGUiKSx0aGlzLl91cGRhdGVPcGFjaXR5KCksby5leHRlbmQodGhpcy5faW1hZ2Use2dhbGxlcnlpbWc6Im5vIixvbnNlbGVjdHN0YXJ0Om8uVXRpbC5mYWxzZUZuLG9ubW91c2Vtb3ZlOm8uVXRpbC5mYWxzZUZuLG9ubG9hZDpvLmJpbmQodGhpcy5fb25JbWFnZUxvYWQsdGhpcyksc3JjOnRoaXMuX3VybH0pfSxfYW5pbWF0ZVpvb206ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbWFwLGk9dGhpcy5faW1hZ2Usbj1lLmdldFpvb21TY2FsZSh0Lnpvb20pLHM9dGhpcy5fYm91bmRzLmdldE5vcnRoV2VzdCgpLGE9dGhpcy5fYm91bmRzLmdldFNvdXRoRWFzdCgpLHI9ZS5fbGF0TG5nVG9OZXdMYXllclBvaW50KHMsdC56b29tLHQuY2VudGVyKSxoPWUuX2xhdExuZ1RvTmV3TGF5ZXJQb2ludChhLHQuem9vbSx0LmNlbnRlcikuX3N1YnRyYWN0KHIpLGw9ci5fYWRkKGguX211bHRpcGx5QnkoLjUqKDEtMS9uKSkpO2kuc3R5bGVbby5Eb21VdGlsLlRSQU5TRk9STV09by5Eb21VdGlsLmdldFRyYW5zbGF0ZVN0cmluZyhsKSsiIHNjYWxlKCIrbisiKSAifSxfcmVzZXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pbWFnZSxlPXRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fYm91bmRzLmdldE5vcnRoV2VzdCgpKSxpPXRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fYm91bmRzLmdldFNvdXRoRWFzdCgpKS5fc3VidHJhY3QoZSk7by5Eb21VdGlsLnNldFBvc2l0aW9uKHQsZSksdC5zdHlsZS53aWR0aD1pLngrInB4Iix0LnN0eWxlLmhlaWdodD1pLnkrInB4In0sX29uSW1hZ2VMb2FkOmZ1bmN0aW9uKCl7dGhpcy5maXJlKCJsb2FkIil9LF91cGRhdGVPcGFjaXR5OmZ1bmN0aW9uKCl7by5Eb21VdGlsLnNldE9wYWNpdHkodGhpcy5faW1hZ2UsdGhpcy5vcHRpb25zLm9wYWNpdHkpfX0pLG8uaW1hZ2VPdmVybGF5PWZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gbmV3IG8uSW1hZ2VPdmVybGF5KHQsZSxpKX0sby5JY29uPW8uQ2xhc3MuZXh0ZW5kKHtvcHRpb25zOntjbGFzc05hbWU6IiJ9LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7by5zZXRPcHRpb25zKHRoaXMsdCl9LGNyZWF0ZUljb246ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUljb24oImljb24iLHQpfSxjcmVhdGVTaGFkb3c6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUljb24oInNoYWRvdyIsdCl9LF9jcmVhdGVJY29uOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5fZ2V0SWNvblVybCh0KTtpZighaSl7aWYoImljb24iPT09dCl0aHJvdyBuZXcgRXJyb3IoImljb25Vcmwgbm90IHNldCBpbiBJY29uIG9wdGlvbnMgKHNlZSB0aGUgZG9jcykuIik7cmV0dXJuIG51bGx9dmFyIG47cmV0dXJuIG49ZSYmIklNRyI9PT1lLnRhZ05hbWU/dGhpcy5fY3JlYXRlSW1nKGksZSk6dGhpcy5fY3JlYXRlSW1nKGkpLHRoaXMuX3NldEljb25TdHlsZXMobix0KSxufSxfc2V0SWNvblN0eWxlczpmdW5jdGlvbih0LGUpe3ZhciBpLG49dGhpcy5vcHRpb25zLHM9by5wb2ludChuW2UrIlNpemUiXSk7aT0ic2hhZG93Ij09PWU/by5wb2ludChuLnNoYWRvd0FuY2hvcnx8bi5pY29uQW5jaG9yKTpvLnBvaW50KG4uaWNvbkFuY2hvciksIWkmJnMmJihpPXMuZGl2aWRlQnkoMiwhMCkpLHQuY2xhc3NOYW1lPSJsZWFmbGV0LW1hcmtlci0iK2UrIiAiK24uY2xhc3NOYW1lLGkmJih0LnN0eWxlLm1hcmdpbkxlZnQ9LWkueCsicHgiLHQuc3R5bGUubWFyZ2luVG9wPS1pLnkrInB4IikscyYmKHQuc3R5bGUud2lkdGg9cy54KyJweCIsdC5zdHlsZS5oZWlnaHQ9cy55KyJweCIpfSxfY3JlYXRlSW1nOmZ1bmN0aW9uKHQsaSl7cmV0dXJuIGk9aXx8ZS5jcmVhdGVFbGVtZW50KCJpbWciKSxpLnNyYz10LGl9LF9nZXRJY29uVXJsOmZ1bmN0aW9uKHQpe3JldHVybiBvLkJyb3dzZXIucmV0aW5hJiZ0aGlzLm9wdGlvbnNbdCsiUmV0aW5hVXJsIl0/dGhpcy5vcHRpb25zW3QrIlJldGluYVVybCJdOnRoaXMub3B0aW9uc1t0KyJVcmwiXX19KSxvLmljb249ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvLkljb24odCl9LG8uSWNvbi5EZWZhdWx0PW8uSWNvbi5leHRlbmQoe29wdGlvbnM6e2ljb25TaXplOlsyNSw0MV0saWNvbkFuY2hvcjpbMTIsNDFdLHBvcHVwQW5jaG9yOlsxLC0zNF0sc2hhZG93U2l6ZTpbNDEsNDFdfSxfZ2V0SWNvblVybDpmdW5jdGlvbih0KXt2YXIgZT10KyJVcmwiO2lmKHRoaXMub3B0aW9uc1tlXSlyZXR1cm4gdGhpcy5vcHRpb25zW2VdO28uQnJvd3Nlci5yZXRpbmEmJiJpY29uIj09PXQmJih0Kz0iLTJ4Iik7dmFyIGk9by5JY29uLkRlZmF1bHQuaW1hZ2VQYXRoO2lmKCFpKXRocm93IG5ldyBFcnJvcigiQ291bGRuJ3QgYXV0b2RldGVjdCBMLkljb24uRGVmYXVsdC5pbWFnZVBhdGgsIHNldCBpdCBtYW51YWxseS4iKTtyZXR1cm4gaSsiL21hcmtlci0iK3QrIi5wbmcifX0pLG8uSWNvbi5EZWZhdWx0LmltYWdlUGF0aD1mdW5jdGlvbigpe3ZhciB0LGksbixvLHMsYT1lLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKSxyPS9bXC9eXWxlYWZsZXRbXC1cLl9dPyhbXHdcLVwuX10qKVwuanNcPz8vO2Zvcih0PTAsaT1hLmxlbmd0aDtpPnQ7dCsrKWlmKG49YVt0XS5zcmMsbz1uLm1hdGNoKHIpKXJldHVybiBzPW4uc3BsaXQocilbMF0sKHM/cysiLyI6IiIpKyJpbWFnZXMifSgpLG8uTWFya2VyPW8uQ2xhc3MuZXh0ZW5kKHtpbmNsdWRlczpvLk1peGluLkV2ZW50cyxvcHRpb25zOntpY29uOm5ldyBvLkljb24uRGVmYXVsdCx0aXRsZToiIixhbHQ6IiIsY2xpY2thYmxlOiEwLGRyYWdnYWJsZTohMSxrZXlib2FyZDohMCx6SW5kZXhPZmZzZXQ6MCxvcGFjaXR5OjEscmlzZU9uSG92ZXI6ITEscmlzZU9mZnNldDoyNTB9LGluaXRpYWxpemU6ZnVuY3Rpb24odCxlKXtvLnNldE9wdGlvbnModGhpcyxlKSx0aGlzLl9sYXRsbmc9by5sYXRMbmcodCl9LG9uQWRkOmZ1bmN0aW9uKHQpe3RoaXMuX21hcD10LHQub24oInZpZXdyZXNldCIsdGhpcy51cGRhdGUsdGhpcyksdGhpcy5faW5pdEljb24oKSx0aGlzLnVwZGF0ZSgpLHRoaXMuZmlyZSgiYWRkIiksdC5vcHRpb25zLnpvb21BbmltYXRpb24mJnQub3B0aW9ucy5tYXJrZXJab29tQW5pbWF0aW9uJiZ0Lm9uKCJ6b29tYW5pbSIsdGhpcy5fYW5pbWF0ZVpvb20sdGhpcyl9LGFkZFRvOmZ1bmN0aW9uKHQpe3JldHVybiB0LmFkZExheWVyKHRoaXMpLHRoaXN9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe3RoaXMuZHJhZ2dpbmcmJnRoaXMuZHJhZ2dpbmcuZGlzYWJsZSgpLHRoaXMuX3JlbW92ZUljb24oKSx0aGlzLl9yZW1vdmVTaGFkb3coKSx0aGlzLmZpcmUoInJlbW92ZSIpLHQub2ZmKHt2aWV3cmVzZXQ6dGhpcy51cGRhdGUsem9vbWFuaW06dGhpcy5fYW5pbWF0ZVpvb219LHRoaXMpLHRoaXMuX21hcD1udWxsfSxnZXRMYXRMbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGF0bG5nfSxzZXRMYXRMbmc6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2xhdGxuZz1vLmxhdExuZyh0KSx0aGlzLnVwZGF0ZSgpLHRoaXMuZmlyZSgibW92ZSIse2xhdGxuZzp0aGlzLl9sYXRsbmd9KX0sc2V0WkluZGV4T2Zmc2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnMuekluZGV4T2Zmc2V0PXQsdGhpcy51cGRhdGUoKSx0aGlzfSxzZXRJY29uOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnMuaWNvbj10LHRoaXMuX21hcCYmKHRoaXMuX2luaXRJY29uKCksdGhpcy51cGRhdGUoKSksdGhpcy5fcG9wdXAmJnRoaXMuYmluZFBvcHVwKHRoaXMuX3BvcHVwKSx0aGlzfSx1cGRhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faWNvbiYmdGhpcy5fc2V0UG9zKHRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fbGF0bG5nKS5yb3VuZCgpKSx0aGlzfSxfaW5pdEljb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMsZT10aGlzLl9tYXAsaT1lLm9wdGlvbnMuem9vbUFuaW1hdGlvbiYmZS5vcHRpb25zLm1hcmtlclpvb21BbmltYXRpb24sbj1pPyJsZWFmbGV0LXpvb20tYW5pbWF0ZWQiOiJsZWFmbGV0LXpvb20taGlkZSIscz10Lmljb24uY3JlYXRlSWNvbih0aGlzLl9pY29uKSxhPSExO3MhPT10aGlzLl9pY29uJiYodGhpcy5faWNvbiYmdGhpcy5fcmVtb3ZlSWNvbigpLGE9ITAsdC50aXRsZSYmKHMudGl0bGU9dC50aXRsZSksdC5hbHQmJihzLmFsdD10LmFsdCkpLG8uRG9tVXRpbC5hZGRDbGFzcyhzLG4pLHQua2V5Ym9hcmQmJihzLnRhYkluZGV4PSIwIiksdGhpcy5faWNvbj1zLHRoaXMuX2luaXRJbnRlcmFjdGlvbigpLHQucmlzZU9uSG92ZXImJm8uRG9tRXZlbnQub24ocywibW91c2VvdmVyIix0aGlzLl9icmluZ1RvRnJvbnQsdGhpcykub24ocywibW91c2VvdXQiLHRoaXMuX3Jlc2V0WkluZGV4LHRoaXMpO3ZhciByPXQuaWNvbi5jcmVhdGVTaGFkb3codGhpcy5fc2hhZG93KSxoPSExO3IhPT10aGlzLl9zaGFkb3cmJih0aGlzLl9yZW1vdmVTaGFkb3coKSxoPSEwKSxyJiZvLkRvbVV0aWwuYWRkQ2xhc3MocixuKSx0aGlzLl9zaGFkb3c9cix0Lm9wYWNpdHk8MSYmdGhpcy5fdXBkYXRlT3BhY2l0eSgpO3ZhciBsPXRoaXMuX21hcC5fcGFuZXM7YSYmbC5tYXJrZXJQYW5lLmFwcGVuZENoaWxkKHRoaXMuX2ljb24pLHImJmgmJmwuc2hhZG93UGFuZS5hcHBlbmRDaGlsZCh0aGlzLl9zaGFkb3cpfSxfcmVtb3ZlSWNvbjpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5yaXNlT25Ib3ZlciYmby5Eb21FdmVudC5vZmYodGhpcy5faWNvbiwibW91c2VvdmVyIix0aGlzLl9icmluZ1RvRnJvbnQpLm9mZih0aGlzLl9pY29uLCJtb3VzZW91dCIsdGhpcy5fcmVzZXRaSW5kZXgpLHRoaXMuX21hcC5fcGFuZXMubWFya2VyUGFuZS5yZW1vdmVDaGlsZCh0aGlzLl9pY29uKSx0aGlzLl9pY29uPW51bGx9LF9yZW1vdmVTaGFkb3c6ZnVuY3Rpb24oKXt0aGlzLl9zaGFkb3cmJnRoaXMuX21hcC5fcGFuZXMuc2hhZG93UGFuZS5yZW1vdmVDaGlsZCh0aGlzLl9zaGFkb3cpLHRoaXMuX3NoYWRvdz1udWxsfSxfc2V0UG9zOmZ1bmN0aW9uKHQpe28uRG9tVXRpbC5zZXRQb3NpdGlvbih0aGlzLl9pY29uLHQpLHRoaXMuX3NoYWRvdyYmby5Eb21VdGlsLnNldFBvc2l0aW9uKHRoaXMuX3NoYWRvdyx0KSx0aGlzLl96SW5kZXg9dC55K3RoaXMub3B0aW9ucy56SW5kZXhPZmZzZXQsdGhpcy5fcmVzZXRaSW5kZXgoKX0sX3VwZGF0ZVpJbmRleDpmdW5jdGlvbih0KXt0aGlzLl9pY29uLnN0eWxlLnpJbmRleD10aGlzLl96SW5kZXgrdH0sX2FuaW1hdGVab29tOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX21hcC5fbGF0TG5nVG9OZXdMYXllclBvaW50KHRoaXMuX2xhdGxuZyx0Lnpvb20sdC5jZW50ZXIpLnJvdW5kKCk7dGhpcy5fc2V0UG9zKGUpfSxfaW5pdEludGVyYWN0aW9uOmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmNsaWNrYWJsZSl7dmFyIHQ9dGhpcy5faWNvbixlPVsiZGJsY2xpY2siLCJtb3VzZWRvd24iLCJtb3VzZW92ZXIiLCJtb3VzZW91dCIsImNvbnRleHRtZW51Il07by5Eb21VdGlsLmFkZENsYXNzKHQsImxlYWZsZXQtY2xpY2thYmxlIiksby5Eb21FdmVudC5vbih0LCJjbGljayIsdGhpcy5fb25Nb3VzZUNsaWNrLHRoaXMpLG8uRG9tRXZlbnQub24odCwia2V5cHJlc3MiLHRoaXMuX29uS2V5UHJlc3MsdGhpcyk7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspby5Eb21FdmVudC5vbih0LGVbaV0sdGhpcy5fZmlyZU1vdXNlRXZlbnQsdGhpcyk7by5IYW5kbGVyLk1hcmtlckRyYWcmJih0aGlzLmRyYWdnaW5nPW5ldyBvLkhhbmRsZXIuTWFya2VyRHJhZyh0aGlzKSx0aGlzLm9wdGlvbnMuZHJhZ2dhYmxlJiZ0aGlzLmRyYWdnaW5nLmVuYWJsZSgpKX19LF9vbk1vdXNlQ2xpY2s6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kcmFnZ2luZyYmdGhpcy5kcmFnZ2luZy5tb3ZlZCgpOyh0aGlzLmhhc0V2ZW50TGlzdGVuZXJzKHQudHlwZSl8fGUpJiZvLkRvbUV2ZW50LnN0b3BQcm9wYWdhdGlvbih0KSxlfHwodGhpcy5kcmFnZ2luZyYmdGhpcy5kcmFnZ2luZy5fZW5hYmxlZHx8IXRoaXMuX21hcC5kcmFnZ2luZ3x8IXRoaXMuX21hcC5kcmFnZ2luZy5tb3ZlZCgpKSYmdGhpcy5maXJlKHQudHlwZSx7b3JpZ2luYWxFdmVudDp0LGxhdGxuZzp0aGlzLl9sYXRsbmd9KX0sX29uS2V5UHJlc3M6ZnVuY3Rpb24odCl7MTM9PT10LmtleUNvZGUmJnRoaXMuZmlyZSgiY2xpY2siLHtvcmlnaW5hbEV2ZW50OnQsbGF0bG5nOnRoaXMuX2xhdGxuZ30pfSxfZmlyZU1vdXNlRXZlbnQ6ZnVuY3Rpb24odCl7dGhpcy5maXJlKHQudHlwZSx7b3JpZ2luYWxFdmVudDp0LGxhdGxuZzp0aGlzLl9sYXRsbmd9KSwiY29udGV4dG1lbnUiPT09dC50eXBlJiZ0aGlzLmhhc0V2ZW50TGlzdGVuZXJzKHQudHlwZSkmJm8uRG9tRXZlbnQucHJldmVudERlZmF1bHQodCksIm1vdXNlZG93biIhPT10LnR5cGU/by5Eb21FdmVudC5zdG9wUHJvcGFnYXRpb24odCk6by5Eb21FdmVudC5wcmV2ZW50RGVmYXVsdCh0KX0sc2V0T3BhY2l0eTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLm9wYWNpdHk9dCx0aGlzLl9tYXAmJnRoaXMuX3VwZGF0ZU9wYWNpdHkoKSx0aGlzfSxfdXBkYXRlT3BhY2l0eTpmdW5jdGlvbigpe28uRG9tVXRpbC5zZXRPcGFjaXR5KHRoaXMuX2ljb24sdGhpcy5vcHRpb25zLm9wYWNpdHkpLHRoaXMuX3NoYWRvdyYmby5Eb21VdGlsLnNldE9wYWNpdHkodGhpcy5fc2hhZG93LHRoaXMub3B0aW9ucy5vcGFjaXR5KX0sX2JyaW5nVG9Gcm9udDpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVpJbmRleCh0aGlzLm9wdGlvbnMucmlzZU9mZnNldCl9LF9yZXNldFpJbmRleDpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVpJbmRleCgwKX19KSxvLm1hcmtlcj1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgby5NYXJrZXIodCxlKX0sby5EaXZJY29uPW8uSWNvbi5leHRlbmQoe29wdGlvbnM6e2ljb25TaXplOlsxMiwxMl0sY2xhc3NOYW1lOiJsZWFmbGV0LWRpdi1pY29uIixodG1sOiExfSxjcmVhdGVJY29uOmZ1bmN0aW9uKHQpe3ZhciBpPXQmJiJESVYiPT09dC50YWdOYW1lP3Q6ZS5jcmVhdGVFbGVtZW50KCJkaXYiKSxuPXRoaXMub3B0aW9ucztyZXR1cm4gbi5odG1sIT09ITE/aS5pbm5lckhUTUw9bi5odG1sOmkuaW5uZXJIVE1MPSIiLG4uYmdQb3MmJihpLnN0eWxlLmJhY2tncm91bmRQb3NpdGlvbj0tbi5iZ1Bvcy54KyJweCAiKy1uLmJnUG9zLnkrInB4IiksdGhpcy5fc2V0SWNvblN0eWxlcyhpLCJpY29uIiksaX0sY3JlYXRlU2hhZG93OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9fSksby5kaXZJY29uPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgby5EaXZJY29uKHQpfSxvLk1hcC5tZXJnZU9wdGlvbnMoe2Nsb3NlUG9wdXBPbkNsaWNrOiEwfSksby5Qb3B1cD1vLkNsYXNzLmV4dGVuZCh7aW5jbHVkZXM6by5NaXhpbi5FdmVudHMsb3B0aW9uczp7bWluV2lkdGg6NTAsbWF4V2lkdGg6MzAwLGF1dG9QYW46ITAsY2xvc2VCdXR0b246ITAsb2Zmc2V0OlswLDddLGF1dG9QYW5QYWRkaW5nOls1LDVdLGtlZXBJblZpZXc6ITEsY2xhc3NOYW1lOiIiLHpvb21BbmltYXRpb246ITB9LGluaXRpYWxpemU6ZnVuY3Rpb24odCxlKXtvLnNldE9wdGlvbnModGhpcyx0KSx0aGlzLl9zb3VyY2U9ZSx0aGlzLl9hbmltYXRlZD1vLkJyb3dzZXIuYW55M2QmJnRoaXMub3B0aW9ucy56b29tQW5pbWF0aW9uLHRoaXMuX2lzT3Blbj0hMX0sb25BZGQ6ZnVuY3Rpb24odCl7dGhpcy5fbWFwPXQsdGhpcy5fY29udGFpbmVyfHx0aGlzLl9pbml0TGF5b3V0KCk7dmFyIGU9dC5vcHRpb25zLmZhZGVBbmltYXRpb247ZSYmby5Eb21VdGlsLnNldE9wYWNpdHkodGhpcy5fY29udGFpbmVyLDApLHQuX3BhbmVzLnBvcHVwUGFuZS5hcHBlbmRDaGlsZCh0aGlzLl9jb250YWluZXIpLHQub24odGhpcy5fZ2V0RXZlbnRzKCksdGhpcyksdGhpcy51cGRhdGUoKSxlJiZvLkRvbVV0aWwuc2V0T3BhY2l0eSh0aGlzLl9jb250YWluZXIsMSksdGhpcy5maXJlKCJvcGVuIiksdC5maXJlKCJwb3B1cG9wZW4iLHtwb3B1cDp0aGlzfSksdGhpcy5fc291cmNlJiZ0aGlzLl9zb3VyY2UuZmlyZSgicG9wdXBvcGVuIix7cG9wdXA6dGhpc30pfSxhZGRUbzpmdW5jdGlvbih0KXtyZXR1cm4gdC5hZGRMYXllcih0aGlzKSx0aGlzfSxvcGVuT246ZnVuY3Rpb24odCl7cmV0dXJuIHQub3BlblBvcHVwKHRoaXMpLHRoaXN9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe3QuX3BhbmVzLnBvcHVwUGFuZS5yZW1vdmVDaGlsZCh0aGlzLl9jb250YWluZXIpLG8uVXRpbC5mYWxzZUZuKHRoaXMuX2NvbnRhaW5lci5vZmZzZXRXaWR0aCksdC5vZmYodGhpcy5fZ2V0RXZlbnRzKCksdGhpcyksdC5vcHRpb25zLmZhZGVBbmltYXRpb24mJm8uRG9tVXRpbC5zZXRPcGFjaXR5KHRoaXMuX2NvbnRhaW5lciwwKSx0aGlzLl9tYXA9bnVsbCx0aGlzLmZpcmUoImNsb3NlIiksdC5maXJlKCJwb3B1cGNsb3NlIix7cG9wdXA6dGhpc30pLHRoaXMuX3NvdXJjZSYmdGhpcy5fc291cmNlLmZpcmUoInBvcHVwY2xvc2UiLHtwb3B1cDp0aGlzfSl9LGdldExhdExuZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sYXRsbmd9LHNldExhdExuZzpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbGF0bG5nPW8ubGF0TG5nKHQpLHRoaXMuX21hcCYmKHRoaXMuX3VwZGF0ZVBvc2l0aW9uKCksdGhpcy5fYWRqdXN0UGFuKCkpLHRoaXN9LGdldENvbnRlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGVudH0sc2V0Q29udGVudDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY29udGVudD10LHRoaXMudXBkYXRlKCksdGhpc30sdXBkYXRlOmZ1bmN0aW9uKCl7dGhpcy5fbWFwJiYodGhpcy5fY29udGFpbmVyLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIsdGhpcy5fdXBkYXRlQ29udGVudCgpLHRoaXMuX3VwZGF0ZUxheW91dCgpLHRoaXMuX3VwZGF0ZVBvc2l0aW9uKCksdGhpcy5fY29udGFpbmVyLnN0eWxlLnZpc2liaWxpdHk9IiIsdGhpcy5fYWRqdXN0UGFuKCkpfSxfZ2V0RXZlbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9e3ZpZXdyZXNldDp0aGlzLl91cGRhdGVQb3NpdGlvbn07cmV0dXJuIHRoaXMuX2FuaW1hdGVkJiYodC56b29tYW5pbT10aGlzLl96b29tQW5pbWF0aW9uKSwoImNsb3NlT25DbGljayJpbiB0aGlzLm9wdGlvbnM/dGhpcy5vcHRpb25zLmNsb3NlT25DbGljazp0aGlzLl9tYXAub3B0aW9ucy5jbG9zZVBvcHVwT25DbGljaykmJih0LnByZWNsaWNrPXRoaXMuX2Nsb3NlKSx0aGlzLm9wdGlvbnMua2VlcEluVmlldyYmKHQubW92ZWVuZD10aGlzLl9hZGp1c3RQYW4pLHR9LF9jbG9zZTpmdW5jdGlvbigpe3RoaXMuX21hcCYmdGhpcy5fbWFwLmNsb3NlUG9wdXAodGhpcyl9LF9pbml0TGF5b3V0OmZ1bmN0aW9uKCl7dmFyIHQsZT0ibGVhZmxldC1wb3B1cCIsaT1lKyIgIit0aGlzLm9wdGlvbnMuY2xhc3NOYW1lKyIgbGVhZmxldC16b29tLSIrKHRoaXMuX2FuaW1hdGVkPyJhbmltYXRlZCI6ImhpZGUiKSxuPXRoaXMuX2NvbnRhaW5lcj1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLGkpO3RoaXMub3B0aW9ucy5jbG9zZUJ1dHRvbiYmKHQ9dGhpcy5fY2xvc2VCdXR0b249by5Eb21VdGlsLmNyZWF0ZSgiYSIsZSsiLWNsb3NlLWJ1dHRvbiIsbiksdC5ocmVmPSIjY2xvc2UiLHQuaW5uZXJIVE1MPSImIzIxNTsiLG8uRG9tRXZlbnQuZGlzYWJsZUNsaWNrUHJvcGFnYXRpb24odCksby5Eb21FdmVudC5vbih0LCJjbGljayIsdGhpcy5fb25DbG9zZUJ1dHRvbkNsaWNrLHRoaXMpKTt2YXIgcz10aGlzLl93cmFwcGVyPW8uRG9tVXRpbC5jcmVhdGUoImRpdiIsZSsiLWNvbnRlbnQtd3JhcHBlciIsbik7by5Eb21FdmVudC5kaXNhYmxlQ2xpY2tQcm9wYWdhdGlvbihzKSx0aGlzLl9jb250ZW50Tm9kZT1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLGUrIi1jb250ZW50IixzKSxvLkRvbUV2ZW50LmRpc2FibGVTY3JvbGxQcm9wYWdhdGlvbih0aGlzLl9jb250ZW50Tm9kZSksby5Eb21FdmVudC5vbihzLCJjb250ZXh0bWVudSIsby5Eb21FdmVudC5zdG9wUHJvcGFnYXRpb24pLHRoaXMuX3RpcENvbnRhaW5lcj1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLGUrIi10aXAtY29udGFpbmVyIixuKSx0aGlzLl90aXA9by5Eb21VdGlsLmNyZWF0ZSgiZGl2IixlKyItdGlwIix0aGlzLl90aXBDb250YWluZXIpfSxfdXBkYXRlQ29udGVudDpmdW5jdGlvbigpe2lmKHRoaXMuX2NvbnRlbnQpe2lmKCJzdHJpbmciPT10eXBlb2YgdGhpcy5fY29udGVudCl0aGlzLl9jb250ZW50Tm9kZS5pbm5lckhUTUw9dGhpcy5fY29udGVudDtlbHNle2Zvcig7dGhpcy5fY29udGVudE5vZGUuaGFzQ2hpbGROb2RlcygpOyl0aGlzLl9jb250ZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9jb250ZW50Tm9kZS5maXJzdENoaWxkKTt0aGlzLl9jb250ZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzLl9jb250ZW50KX10aGlzLmZpcmUoImNvbnRlbnR1cGRhdGUiKX19LF91cGRhdGVMYXlvdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jb250ZW50Tm9kZSxlPXQuc3R5bGU7ZS53aWR0aD0iIixlLndoaXRlU3BhY2U9Im5vd3JhcCI7dmFyIGk9dC5vZmZzZXRXaWR0aDtpPU1hdGgubWluKGksdGhpcy5vcHRpb25zLm1heFdpZHRoKSxpPU1hdGgubWF4KGksdGhpcy5vcHRpb25zLm1pbldpZHRoKSxlLndpZHRoPWkrMSsicHgiLGUud2hpdGVTcGFjZT0iIixlLmhlaWdodD0iIjt2YXIgbj10Lm9mZnNldEhlaWdodCxzPXRoaXMub3B0aW9ucy5tYXhIZWlnaHQsYT0ibGVhZmxldC1wb3B1cC1zY3JvbGxlZCI7cyYmbj5zPyhlLmhlaWdodD1zKyJweCIsby5Eb21VdGlsLmFkZENsYXNzKHQsYSkpOm8uRG9tVXRpbC5yZW1vdmVDbGFzcyh0LGEpLHRoaXMuX2NvbnRhaW5lcldpZHRoPXRoaXMuX2NvbnRhaW5lci5vZmZzZXRXaWR0aH0sX3VwZGF0ZVBvc2l0aW9uOmZ1bmN0aW9uKCl7aWYodGhpcy5fbWFwKXt2YXIgdD10aGlzLl9tYXAubGF0TG5nVG9MYXllclBvaW50KHRoaXMuX2xhdGxuZyksZT10aGlzLl9hbmltYXRlZCxpPW8ucG9pbnQodGhpcy5vcHRpb25zLm9mZnNldCk7ZSYmby5Eb21VdGlsLnNldFBvc2l0aW9uKHRoaXMuX2NvbnRhaW5lcix0KSx0aGlzLl9jb250YWluZXJCb3R0b209LWkueS0oZT8wOnQueSksdGhpcy5fY29udGFpbmVyTGVmdD0tTWF0aC5yb3VuZCh0aGlzLl9jb250YWluZXJXaWR0aC8yKStpLngrKGU/MDp0LngpLHRoaXMuX2NvbnRhaW5lci5zdHlsZS5ib3R0b209dGhpcy5fY29udGFpbmVyQm90dG9tKyJweCIsdGhpcy5fY29udGFpbmVyLnN0eWxlLmxlZnQ9dGhpcy5fY29udGFpbmVyTGVmdCsicHgifX0sX3pvb21BbmltYXRpb246ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbWFwLl9sYXRMbmdUb05ld0xheWVyUG9pbnQodGhpcy5fbGF0bG5nLHQuem9vbSx0LmNlbnRlcik7by5Eb21VdGlsLnNldFBvc2l0aW9uKHRoaXMuX2NvbnRhaW5lcixlKX0sX2FkanVzdFBhbjpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5hdXRvUGFuKXt2YXIgdD10aGlzLl9tYXAsZT10aGlzLl9jb250YWluZXIub2Zmc2V0SGVpZ2h0LGk9dGhpcy5fY29udGFpbmVyV2lkdGgsbj1uZXcgby5Qb2ludCh0aGlzLl9jb250YWluZXJMZWZ0LC1lLXRoaXMuX2NvbnRhaW5lckJvdHRvbSk7dGhpcy5fYW5pbWF0ZWQmJm4uX2FkZChvLkRvbVV0aWwuZ2V0UG9zaXRpb24odGhpcy5fY29udGFpbmVyKSk7dmFyIHM9dC5sYXllclBvaW50VG9Db250YWluZXJQb2ludChuKSxhPW8ucG9pbnQodGhpcy5vcHRpb25zLmF1dG9QYW5QYWRkaW5nKSxyPW8ucG9pbnQodGhpcy5vcHRpb25zLmF1dG9QYW5QYWRkaW5nVG9wTGVmdHx8YSksaD1vLnBvaW50KHRoaXMub3B0aW9ucy5hdXRvUGFuUGFkZGluZ0JvdHRvbVJpZ2h0fHxhKSxsPXQuZ2V0U2l6ZSgpLHU9MCxjPTA7cy54K2kraC54PmwueCYmKHU9cy54K2ktbC54K2gueCkscy54LXUtci54PDAmJih1PXMueC1yLngpLHMueStlK2gueT5sLnkmJihjPXMueStlLWwueStoLnkpLHMueS1jLXIueTwwJiYoYz1zLnktci55KSwodXx8YykmJnQuZmlyZSgiYXV0b3BhbnN0YXJ0IikucGFuQnkoW3UsY10pfX0sX29uQ2xvc2VCdXR0b25DbGljazpmdW5jdGlvbih0KXt0aGlzLl9jbG9zZSgpLG8uRG9tRXZlbnQuc3RvcCh0KX19KSxvLnBvcHVwPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBvLlBvcHVwKHQsZSl9LG8uTWFwLmluY2x1ZGUoe29wZW5Qb3B1cDpmdW5jdGlvbih0LGUsaSl7aWYodGhpcy5jbG9zZVBvcHVwKCksISh0IGluc3RhbmNlb2Ygby5Qb3B1cCkpe3ZhciBuPXQ7dD1uZXcgby5Qb3B1cChpKS5zZXRMYXRMbmcoZSkuc2V0Q29udGVudChuKX1yZXR1cm4gdC5faXNPcGVuPSEwLHRoaXMuX3BvcHVwPXQsdGhpcy5hZGRMYXllcih0KX0sY2xvc2VQb3B1cDpmdW5jdGlvbih0KXtyZXR1cm4gdCYmdCE9PXRoaXMuX3BvcHVwfHwodD10aGlzLl9wb3B1cCx0aGlzLl9wb3B1cD1udWxsKSx0JiYodGhpcy5yZW1vdmVMYXllcih0KSx0Ll9pc09wZW49ITEpLHRoaXN9fSksby5NYXJrZXIuaW5jbHVkZSh7b3BlblBvcHVwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BvcHVwJiZ0aGlzLl9tYXAmJiF0aGlzLl9tYXAuaGFzTGF5ZXIodGhpcy5fcG9wdXApJiYodGhpcy5fcG9wdXAuc2V0TGF0TG5nKHRoaXMuX2xhdGxuZyksdGhpcy5fbWFwLm9wZW5Qb3B1cCh0aGlzLl9wb3B1cCkpLHRoaXN9LGNsb3NlUG9wdXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9wdXAmJnRoaXMuX3BvcHVwLl9jbG9zZSgpLHRoaXN9LHRvZ2dsZVBvcHVwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BvcHVwJiYodGhpcy5fcG9wdXAuX2lzT3Blbj90aGlzLmNsb3NlUG9wdXAoKTp0aGlzLm9wZW5Qb3B1cCgpKSx0aGlzfSxiaW5kUG9wdXA6ZnVuY3Rpb24odCxlKXt2YXIgaT1vLnBvaW50KHRoaXMub3B0aW9ucy5pY29uLm9wdGlvbnMucG9wdXBBbmNob3J8fFswLDBdKTtyZXR1cm4gaT1pLmFkZChvLlBvcHVwLnByb3RvdHlwZS5vcHRpb25zLm9mZnNldCksZSYmZS5vZmZzZXQmJihpPWkuYWRkKGUub2Zmc2V0KSksZT1vLmV4dGVuZCh7b2Zmc2V0Oml9LGUpLHRoaXMuX3BvcHVwSGFuZGxlcnNBZGRlZHx8KHRoaXMub24oImNsaWNrIix0aGlzLnRvZ2dsZVBvcHVwLHRoaXMpLm9uKCJyZW1vdmUiLHRoaXMuY2xvc2VQb3B1cCx0aGlzKS5vbigibW92ZSIsdGhpcy5fbW92ZVBvcHVwLHRoaXMpLHRoaXMuX3BvcHVwSGFuZGxlcnNBZGRlZD0hMCksdCBpbnN0YW5jZW9mIG8uUG9wdXA/KG8uc2V0T3B0aW9ucyh0LGUpLHRoaXMuX3BvcHVwPXQsdC5fc291cmNlPXRoaXMpOnRoaXMuX3BvcHVwPW5ldyBvLlBvcHVwKGUsdGhpcykuc2V0Q29udGVudCh0KSx0aGlzfSxzZXRQb3B1cENvbnRlbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BvcHVwJiZ0aGlzLl9wb3B1cC5zZXRDb250ZW50KHQpLHRoaXN9LHVuYmluZFBvcHVwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BvcHVwJiYodGhpcy5fcG9wdXA9bnVsbCx0aGlzLm9mZigiY2xpY2siLHRoaXMudG9nZ2xlUG9wdXAsdGhpcykub2ZmKCJyZW1vdmUiLHRoaXMuY2xvc2VQb3B1cCx0aGlzKS5vZmYoIm1vdmUiLHRoaXMuX21vdmVQb3B1cCx0aGlzKSx0aGlzLl9wb3B1cEhhbmRsZXJzQWRkZWQ9ITEpLHRoaXN9LGdldFBvcHVwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BvcHVwfSxfbW92ZVBvcHVwOmZ1bmN0aW9uKHQpe3RoaXMuX3BvcHVwLnNldExhdExuZyh0LmxhdGxuZyl9fSksby5MYXllckdyb3VwPW8uQ2xhc3MuZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9uKHQpe3RoaXMuX2xheWVycz17fTt2YXIgZSxpO2lmKHQpZm9yKGU9MCxpPXQubGVuZ3RoO2k+ZTtlKyspdGhpcy5hZGRMYXllcih0W2VdKX0sYWRkTGF5ZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXRMYXllcklkKHQpO3JldHVybiB0aGlzLl9sYXllcnNbZV09dCx0aGlzLl9tYXAmJnRoaXMuX21hcC5hZGRMYXllcih0KSx0aGlzfSxyZW1vdmVMYXllcjpmdW5jdGlvbih0KXt2YXIgZT10IGluIHRoaXMuX2xheWVycz90OnRoaXMuZ2V0TGF5ZXJJZCh0KTtyZXR1cm4gdGhpcy5fbWFwJiZ0aGlzLl9sYXllcnNbZV0mJnRoaXMuX21hcC5yZW1vdmVMYXllcih0aGlzLl9sYXllcnNbZV0pLGRlbGV0ZSB0aGlzLl9sYXllcnNbZV0sdGhpc30saGFzTGF5ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ/dCBpbiB0aGlzLl9sYXllcnN8fHRoaXMuZ2V0TGF5ZXJJZCh0KWluIHRoaXMuX2xheWVyczohMX0sY2xlYXJMYXllcnM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoTGF5ZXIodGhpcy5yZW1vdmVMYXllcix0aGlzKSx0aGlzfSxpbnZva2U6ZnVuY3Rpb24odCl7dmFyIGUsaSxuPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtmb3IoZSBpbiB0aGlzLl9sYXllcnMpaT10aGlzLl9sYXllcnNbZV0saVt0XSYmaVt0XS5hcHBseShpLG4pO3JldHVybiB0aGlzfSxvbkFkZDpmdW5jdGlvbih0KXt0aGlzLl9tYXA9dCx0aGlzLmVhY2hMYXllcih0LmFkZExheWVyLHQpfSxvblJlbW92ZTpmdW5jdGlvbih0KXt0aGlzLmVhY2hMYXllcih0LnJlbW92ZUxheWVyLHQpLHRoaXMuX21hcD1udWxsfSxhZGRUbzpmdW5jdGlvbih0KXtyZXR1cm4gdC5hZGRMYXllcih0aGlzKSx0aGlzfSxlYWNoTGF5ZXI6ZnVuY3Rpb24odCxlKXtmb3IodmFyIGkgaW4gdGhpcy5fbGF5ZXJzKXQuY2FsbChlLHRoaXMuX2xheWVyc1tpXSk7cmV0dXJuIHRoaXN9LGdldExheWVyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9sYXllcnNbdF19LGdldExheWVyczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzLl9sYXllcnMpdC5wdXNoKHRoaXMuX2xheWVyc1tlXSk7cmV0dXJuIHR9LHNldFpJbmRleDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbnZva2UoInNldFpJbmRleCIsdCl9LGdldExheWVySWQ6ZnVuY3Rpb24odCl7cmV0dXJuIG8uc3RhbXAodCl9fSksby5sYXllckdyb3VwPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgby5MYXllckdyb3VwKHQpfSxvLkZlYXR1cmVHcm91cD1vLkxheWVyR3JvdXAuZXh0ZW5kKHtpbmNsdWRlczpvLk1peGluLkV2ZW50cyxzdGF0aWNzOntFVkVOVFM6ImNsaWNrIGRibGNsaWNrIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZW1vdmUgY29udGV4dG1lbnUgcG9wdXBvcGVuIHBvcHVwY2xvc2UifSxhZGRMYXllcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5oYXNMYXllcih0KT90aGlzOigib24iaW4gdCYmdC5vbihvLkZlYXR1cmVHcm91cC5FVkVOVFMsdGhpcy5fcHJvcGFnYXRlRXZlbnQsdGhpcyksby5MYXllckdyb3VwLnByb3RvdHlwZS5hZGRMYXllci5jYWxsKHRoaXMsdCksdGhpcy5fcG9wdXBDb250ZW50JiZ0LmJpbmRQb3B1cCYmdC5iaW5kUG9wdXAodGhpcy5fcG9wdXBDb250ZW50LHRoaXMuX3BvcHVwT3B0aW9ucyksdGhpcy5maXJlKCJsYXllcmFkZCIse2xheWVyOnR9KSl9LHJlbW92ZUxheWVyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmhhc0xheWVyKHQpPyh0IGluIHRoaXMuX2xheWVycyYmKHQ9dGhpcy5fbGF5ZXJzW3RdKSwib2ZmImluIHQmJnQub2ZmKG8uRmVhdHVyZUdyb3VwLkVWRU5UUyx0aGlzLl9wcm9wYWdhdGVFdmVudCx0aGlzKSxvLkxheWVyR3JvdXAucHJvdG90eXBlLnJlbW92ZUxheWVyLmNhbGwodGhpcyx0KSx0aGlzLl9wb3B1cENvbnRlbnQmJnRoaXMuaW52b2tlKCJ1bmJpbmRQb3B1cCIpLHRoaXMuZmlyZSgibGF5ZXJyZW1vdmUiLHtsYXllcjp0fSkpOnRoaXN9LGJpbmRQb3B1cDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9wb3B1cENvbnRlbnQ9dCx0aGlzLl9wb3B1cE9wdGlvbnM9ZSx0aGlzLmludm9rZSgiYmluZFBvcHVwIix0LGUpfSxvcGVuUG9wdXA6ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuX2xheWVycyl7dGhpcy5fbGF5ZXJzW2VdLm9wZW5Qb3B1cCh0KTticmVha31yZXR1cm4gdGhpc30sc2V0U3R5bGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW52b2tlKCJzZXRTdHlsZSIsdCl9LGJyaW5nVG9Gcm9udDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmludm9rZSgiYnJpbmdUb0Zyb250Iil9LGJyaW5nVG9CYWNrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW52b2tlKCJicmluZ1RvQmFjayIpfSxnZXRCb3VuZHM6ZnVuY3Rpb24oKXt2YXIgdD1uZXcgby5MYXRMbmdCb3VuZHM7cmV0dXJuIHRoaXMuZWFjaExheWVyKGZ1bmN0aW9uKGUpe3QuZXh0ZW5kKGUgaW5zdGFuY2VvZiBvLk1hcmtlcj9lLmdldExhdExuZygpOmUuZ2V0Qm91bmRzKCkpfSksdH0sX3Byb3BhZ2F0ZUV2ZW50OmZ1bmN0aW9uKHQpe3Q9by5leHRlbmQoe2xheWVyOnQudGFyZ2V0LHRhcmdldDp0aGlzfSx0KSx0aGlzLmZpcmUodC50eXBlLHQpfX0pLG8uZmVhdHVyZUdyb3VwPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgby5GZWF0dXJlR3JvdXAodCl9LG8uUGF0aD1vLkNsYXNzLmV4dGVuZCh7aW5jbHVkZXM6W28uTWl4aW4uRXZlbnRzXSxzdGF0aWNzOntDTElQX1BBRERJTkc6ZnVuY3Rpb24oKXt2YXIgZT1vLkJyb3dzZXIubW9iaWxlPzEyODA6MmUzLGk9KGUvTWF0aC5tYXgodC5vdXRlcldpZHRoLHQub3V0ZXJIZWlnaHQpLTEpLzI7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oLjUsaSkpfSgpfSxvcHRpb25zOntzdHJva2U6ITAsY29sb3I6IiMwMDMzZmYiLGRhc2hBcnJheTpudWxsLGxpbmVDYXA6bnVsbCxsaW5lSm9pbjpudWxsLHdlaWdodDo1LG9wYWNpdHk6LjUsZmlsbDohMSxmaWxsQ29sb3I6bnVsbCxmaWxsT3BhY2l0eTouMixjbGlja2FibGU6ITB9LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7by5zZXRPcHRpb25zKHRoaXMsdCl9LG9uQWRkOmZ1bmN0aW9uKHQpe3RoaXMuX21hcD10LHRoaXMuX2NvbnRhaW5lcnx8KHRoaXMuX2luaXRFbGVtZW50cygpLHRoaXMuX2luaXRFdmVudHMoKSksdGhpcy5wcm9qZWN0TGF0bG5ncygpLHRoaXMuX3VwZGF0ZVBhdGgoKSx0aGlzLl9jb250YWluZXImJnRoaXMuX21hcC5fcGF0aFJvb3QuYXBwZW5kQ2hpbGQodGhpcy5fY29udGFpbmVyKSx0aGlzLmZpcmUoImFkZCIpLHQub24oe3ZpZXdyZXNldDp0aGlzLnByb2plY3RMYXRsbmdzLG1vdmVlbmQ6dGhpcy5fdXBkYXRlUGF0aH0sdGhpcyl9LGFkZFRvOmZ1bmN0aW9uKHQpe3JldHVybiB0LmFkZExheWVyKHRoaXMpLHRoaXN9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe3QuX3BhdGhSb290LnJlbW92ZUNoaWxkKHRoaXMuX2NvbnRhaW5lciksdGhpcy5maXJlKCJyZW1vdmUiKSx0aGlzLl9tYXA9bnVsbCxvLkJyb3dzZXIudm1sJiYodGhpcy5fY29udGFpbmVyPW51bGwsdGhpcy5fc3Ryb2tlPW51bGwsdGhpcy5fZmlsbD1udWxsKSx0Lm9mZih7dmlld3Jlc2V0OnRoaXMucHJvamVjdExhdGxuZ3MsbW92ZWVuZDp0aGlzLl91cGRhdGVQYXRofSx0aGlzKX0scHJvamVjdExhdGxuZ3M6ZnVuY3Rpb24oKXt9LHNldFN0eWxlOmZ1bmN0aW9uKHQpe3JldHVybiBvLnNldE9wdGlvbnModGhpcyx0KSx0aGlzLl9jb250YWluZXImJnRoaXMuX3VwZGF0ZVN0eWxlKCksdGhpc30scmVkcmF3OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hcCYmKHRoaXMucHJvamVjdExhdGxuZ3MoKSx0aGlzLl91cGRhdGVQYXRoKCkpLHRoaXN9fSksby5NYXAuaW5jbHVkZSh7X3VwZGF0ZVBhdGhWaWV3cG9ydDpmdW5jdGlvbigpe3ZhciB0PW8uUGF0aC5DTElQX1BBRERJTkcsZT10aGlzLmdldFNpemUoKSxpPW8uRG9tVXRpbC5nZXRQb3NpdGlvbih0aGlzLl9tYXBQYW5lKSxuPWkubXVsdGlwbHlCeSgtMSkuX3N1YnRyYWN0KGUubXVsdGlwbHlCeSh0KS5fcm91bmQoKSkscz1uLmFkZChlLm11bHRpcGx5QnkoMSsyKnQpLl9yb3VuZCgpKTt0aGlzLl9wYXRoVmlld3BvcnQ9bmV3IG8uQm91bmRzKG4scyl9fSksby5QYXRoLlNWR19OUz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLG8uQnJvd3Nlci5zdmc9ISghZS5jcmVhdGVFbGVtZW50TlN8fCFlLmNyZWF0ZUVsZW1lbnROUyhvLlBhdGguU1ZHX05TLCJzdmciKS5jcmVhdGVTVkdSZWN0KSxvLlBhdGg9by5QYXRoLmV4dGVuZCh7c3RhdGljczp7U1ZHOm8uQnJvd3Nlci5zdmd9LGJyaW5nVG9Gcm9udDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcC5fcGF0aFJvb3QsZT10aGlzLl9jb250YWluZXI7cmV0dXJuIGUmJnQubGFzdENoaWxkIT09ZSYmdC5hcHBlbmRDaGlsZChlKSx0aGlzfSxicmluZ1RvQmFjazpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcC5fcGF0aFJvb3QsZT10aGlzLl9jb250YWluZXIsaT10LmZpcnN0Q2hpbGQ7cmV0dXJuIGUmJmkhPT1lJiZ0Lmluc2VydEJlZm9yZShlLGkpLHRoaXN9LGdldFBhdGhTdHJpbmc6ZnVuY3Rpb24oKXt9LF9jcmVhdGVFbGVtZW50OmZ1bmN0aW9uKHQpe3JldHVybiBlLmNyZWF0ZUVsZW1lbnROUyhvLlBhdGguU1ZHX05TLHQpfSxfaW5pdEVsZW1lbnRzOmZ1bmN0aW9uKCl7dGhpcy5fbWFwLl9pbml0UGF0aFJvb3QoKSx0aGlzLl9pbml0UGF0aCgpLHRoaXMuX2luaXRTdHlsZSgpfSxfaW5pdFBhdGg6ZnVuY3Rpb24oKXt0aGlzLl9jb250YWluZXI9dGhpcy5fY3JlYXRlRWxlbWVudCgiZyIpLHRoaXMuX3BhdGg9dGhpcy5fY3JlYXRlRWxlbWVudCgicGF0aCIpLHRoaXMub3B0aW9ucy5jbGFzc05hbWUmJm8uRG9tVXRpbC5hZGRDbGFzcyh0aGlzLl9wYXRoLHRoaXMub3B0aW9ucy5jbGFzc05hbWUpLHRoaXMuX2NvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLl9wYXRoKX0sX2luaXRTdHlsZTpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5zdHJva2UmJih0aGlzLl9wYXRoLnNldEF0dHJpYnV0ZSgic3Ryb2tlLWxpbmVqb2luIiwicm91bmQiKSx0aGlzLl9wYXRoLnNldEF0dHJpYnV0ZSgic3Ryb2tlLWxpbmVjYXAiLCJyb3VuZCIpKSx0aGlzLm9wdGlvbnMuZmlsbCYmdGhpcy5fcGF0aC5zZXRBdHRyaWJ1dGUoImZpbGwtcnVsZSIsImV2ZW5vZGQiKSx0aGlzLm9wdGlvbnMucG9pbnRlckV2ZW50cyYmdGhpcy5fcGF0aC5zZXRBdHRyaWJ1dGUoInBvaW50ZXItZXZlbnRzIix0aGlzLm9wdGlvbnMucG9pbnRlckV2ZW50cyksdGhpcy5vcHRpb25zLmNsaWNrYWJsZXx8dGhpcy5vcHRpb25zLnBvaW50ZXJFdmVudHN8fHRoaXMuX3BhdGguc2V0QXR0cmlidXRlKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKSx0aGlzLl91cGRhdGVTdHlsZSgpfSxfdXBkYXRlU3R5bGU6ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuc3Ryb2tlPyh0aGlzLl9wYXRoLnNldEF0dHJpYnV0ZSgic3Ryb2tlIix0aGlzLm9wdGlvbnMuY29sb3IpLHRoaXMuX3BhdGguc2V0QXR0cmlidXRlKCJzdHJva2Utb3BhY2l0eSIsdGhpcy5vcHRpb25zLm9wYWNpdHkpLHRoaXMuX3BhdGguc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLHRoaXMub3B0aW9ucy53ZWlnaHQpLHRoaXMub3B0aW9ucy5kYXNoQXJyYXk/dGhpcy5fcGF0aC5zZXRBdHRyaWJ1dGUoInN0cm9rZS1kYXNoYXJyYXkiLHRoaXMub3B0aW9ucy5kYXNoQXJyYXkpOnRoaXMuX3BhdGgucmVtb3ZlQXR0cmlidXRlKCJzdHJva2UtZGFzaGFycmF5IiksdGhpcy5vcHRpb25zLmxpbmVDYXAmJnRoaXMuX3BhdGguc2V0QXR0cmlidXRlKCJzdHJva2UtbGluZWNhcCIsdGhpcy5vcHRpb25zLmxpbmVDYXApLHRoaXMub3B0aW9ucy5saW5lSm9pbiYmdGhpcy5fcGF0aC5zZXRBdHRyaWJ1dGUoInN0cm9rZS1saW5lam9pbiIsdGhpcy5vcHRpb25zLmxpbmVKb2luKSk6dGhpcy5fcGF0aC5zZXRBdHRyaWJ1dGUoInN0cm9rZSIsIm5vbmUiKSx0aGlzLm9wdGlvbnMuZmlsbD8odGhpcy5fcGF0aC5zZXRBdHRyaWJ1dGUoImZpbGwiLHRoaXMub3B0aW9ucy5maWxsQ29sb3J8fHRoaXMub3B0aW9ucy5jb2xvciksdGhpcy5fcGF0aC5zZXRBdHRyaWJ1dGUoImZpbGwtb3BhY2l0eSIsdGhpcy5vcHRpb25zLmZpbGxPcGFjaXR5KSk6dGhpcy5fcGF0aC5zZXRBdHRyaWJ1dGUoImZpbGwiLCJub25lIil9LF91cGRhdGVQYXRoOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nZXRQYXRoU3RyaW5nKCk7dHx8KHQ9Ik0wIDAiKSx0aGlzLl9wYXRoLnNldEF0dHJpYnV0ZSgiZCIsdCl9LF9pbml0RXZlbnRzOmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmNsaWNrYWJsZSl7KG8uQnJvd3Nlci5zdmd8fCFvLkJyb3dzZXIudm1sKSYmby5Eb21VdGlsLmFkZENsYXNzKHRoaXMuX3BhdGgsImxlYWZsZXQtY2xpY2thYmxlIiksby5Eb21FdmVudC5vbih0aGlzLl9jb250YWluZXIsImNsaWNrIix0aGlzLl9vbk1vdXNlQ2xpY2ssdGhpcyk7Zm9yKHZhciB0PVsiZGJsY2xpY2siLCJtb3VzZWRvd24iLCJtb3VzZW92ZXIiLCJtb3VzZW91dCIsIm1vdXNlbW92ZSIsImNvbnRleHRtZW51Il0sZT0wO2U8dC5sZW5ndGg7ZSsrKW8uRG9tRXZlbnQub24odGhpcy5fY29udGFpbmVyLHRbZV0sdGhpcy5fZmlyZU1vdXNlRXZlbnQsdGhpcyl9fSxfb25Nb3VzZUNsaWNrOmZ1bmN0aW9uKHQpeyF0Ll9zaW11bGF0ZWQmJnRoaXMuX21hcC5kcmFnZ2luZyYmdGhpcy5fbWFwLmRyYWdnaW5nLm1vdmVkKCl8fHRoaXMuX2ZpcmVNb3VzZUV2ZW50KHQpfSxfZmlyZU1vdXNlRXZlbnQ6ZnVuY3Rpb24odCl7aWYodGhpcy5fbWFwJiZ0aGlzLmhhc0V2ZW50TGlzdGVuZXJzKHQudHlwZSkpe3ZhciBlPXRoaXMuX21hcCxpPWUubW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQodCksbj1lLmNvbnRhaW5lclBvaW50VG9MYXllclBvaW50KGkpLHM9ZS5sYXllclBvaW50VG9MYXRMbmcobik7dGhpcy5maXJlKHQudHlwZSx7bGF0bG5nOnMsbGF5ZXJQb2ludDpuLGNvbnRhaW5lclBvaW50Omksb3JpZ2luYWxFdmVudDp0fSksImNvbnRleHRtZW51Ij09PXQudHlwZSYmby5Eb21FdmVudC5wcmV2ZW50RGVmYXVsdCh0KSwibW91c2Vtb3ZlIiE9PXQudHlwZSYmby5Eb21FdmVudC5zdG9wUHJvcGFnYXRpb24odCl9fX0pLG8uTWFwLmluY2x1ZGUoe19pbml0UGF0aFJvb3Q6ZnVuY3Rpb24oKXt0aGlzLl9wYXRoUm9vdHx8KHRoaXMuX3BhdGhSb290PW8uUGF0aC5wcm90b3R5cGUuX2NyZWF0ZUVsZW1lbnQoInN2ZyIpLHRoaXMuX3BhbmVzLm92ZXJsYXlQYW5lLmFwcGVuZENoaWxkKHRoaXMuX3BhdGhSb290KSx0aGlzLm9wdGlvbnMuem9vbUFuaW1hdGlvbiYmby5Ccm93c2VyLmFueTNkPyhvLkRvbVV0aWwuYWRkQ2xhc3ModGhpcy5fcGF0aFJvb3QsImxlYWZsZXQtem9vbS1hbmltYXRlZCIpLAp0aGlzLm9uKHt6b29tYW5pbTp0aGlzLl9hbmltYXRlUGF0aFpvb20sem9vbWVuZDp0aGlzLl9lbmRQYXRoWm9vbX0pKTpvLkRvbVV0aWwuYWRkQ2xhc3ModGhpcy5fcGF0aFJvb3QsImxlYWZsZXQtem9vbS1oaWRlIiksdGhpcy5vbigibW92ZWVuZCIsdGhpcy5fdXBkYXRlU3ZnVmlld3BvcnQpLHRoaXMuX3VwZGF0ZVN2Z1ZpZXdwb3J0KCkpfSxfYW5pbWF0ZVBhdGhab29tOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2V0Wm9vbVNjYWxlKHQuem9vbSksaT10aGlzLl9nZXRDZW50ZXJPZmZzZXQodC5jZW50ZXIpLl9tdWx0aXBseUJ5KC1lKS5fYWRkKHRoaXMuX3BhdGhWaWV3cG9ydC5taW4pO3RoaXMuX3BhdGhSb290LnN0eWxlW28uRG9tVXRpbC5UUkFOU0ZPUk1dPW8uRG9tVXRpbC5nZXRUcmFuc2xhdGVTdHJpbmcoaSkrIiBzY2FsZSgiK2UrIikgIix0aGlzLl9wYXRoWm9vbWluZz0hMH0sX2VuZFBhdGhab29tOmZ1bmN0aW9uKCl7dGhpcy5fcGF0aFpvb21pbmc9ITF9LF91cGRhdGVTdmdWaWV3cG9ydDpmdW5jdGlvbigpe2lmKCF0aGlzLl9wYXRoWm9vbWluZyl7dGhpcy5fdXBkYXRlUGF0aFZpZXdwb3J0KCk7dmFyIHQ9dGhpcy5fcGF0aFZpZXdwb3J0LGU9dC5taW4saT10Lm1heCxuPWkueC1lLngscz1pLnktZS55LGE9dGhpcy5fcGF0aFJvb3Qscj10aGlzLl9wYW5lcy5vdmVybGF5UGFuZTtvLkJyb3dzZXIubW9iaWxlV2Via2l0JiZyLnJlbW92ZUNoaWxkKGEpLG8uRG9tVXRpbC5zZXRQb3NpdGlvbihhLGUpLGEuc2V0QXR0cmlidXRlKCJ3aWR0aCIsbiksYS5zZXRBdHRyaWJ1dGUoImhlaWdodCIscyksYS5zZXRBdHRyaWJ1dGUoInZpZXdCb3giLFtlLngsZS55LG4sc10uam9pbigiICIpKSxvLkJyb3dzZXIubW9iaWxlV2Via2l0JiZyLmFwcGVuZENoaWxkKGEpfX19KSxvLlBhdGguaW5jbHVkZSh7YmluZFBvcHVwOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQgaW5zdGFuY2VvZiBvLlBvcHVwP3RoaXMuX3BvcHVwPXQ6KCghdGhpcy5fcG9wdXB8fGUpJiYodGhpcy5fcG9wdXA9bmV3IG8uUG9wdXAoZSx0aGlzKSksdGhpcy5fcG9wdXAuc2V0Q29udGVudCh0KSksdGhpcy5fcG9wdXBIYW5kbGVyc0FkZGVkfHwodGhpcy5vbigiY2xpY2siLHRoaXMuX29wZW5Qb3B1cCx0aGlzKS5vbigicmVtb3ZlIix0aGlzLmNsb3NlUG9wdXAsdGhpcyksdGhpcy5fcG9wdXBIYW5kbGVyc0FkZGVkPSEwKSx0aGlzfSx1bmJpbmRQb3B1cDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3B1cCYmKHRoaXMuX3BvcHVwPW51bGwsdGhpcy5vZmYoImNsaWNrIix0aGlzLl9vcGVuUG9wdXApLm9mZigicmVtb3ZlIix0aGlzLmNsb3NlUG9wdXApLHRoaXMuX3BvcHVwSGFuZGxlcnNBZGRlZD0hMSksdGhpc30sb3BlblBvcHVwOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wb3B1cCYmKHQ9dHx8dGhpcy5fbGF0bG5nfHx0aGlzLl9sYXRsbmdzW01hdGguZmxvb3IodGhpcy5fbGF0bG5ncy5sZW5ndGgvMildLHRoaXMuX29wZW5Qb3B1cCh7bGF0bG5nOnR9KSksdGhpc30sY2xvc2VQb3B1cDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3B1cCYmdGhpcy5fcG9wdXAuX2Nsb3NlKCksdGhpc30sX29wZW5Qb3B1cDpmdW5jdGlvbih0KXt0aGlzLl9wb3B1cC5zZXRMYXRMbmcodC5sYXRsbmcpLHRoaXMuX21hcC5vcGVuUG9wdXAodGhpcy5fcG9wdXApfX0pLG8uQnJvd3Nlci52bWw9IW8uQnJvd3Nlci5zdmcmJmZ1bmN0aW9uKCl7dHJ5e3ZhciB0PWUuY3JlYXRlRWxlbWVudCgiZGl2Iik7dC5pbm5lckhUTUw9Jzx2OnNoYXBlIGFkaj0iMSIvPic7dmFyIGk9dC5maXJzdENoaWxkO3JldHVybiBpLnN0eWxlLmJlaGF2aW9yPSJ1cmwoI2RlZmF1bHQjVk1MKSIsaSYmIm9iamVjdCI9PXR5cGVvZiBpLmFkan1jYXRjaChuKXtyZXR1cm4hMX19KCksby5QYXRoPW8uQnJvd3Nlci5zdmd8fCFvLkJyb3dzZXIudm1sP28uUGF0aDpvLlBhdGguZXh0ZW5kKHtzdGF0aWNzOntWTUw6ITAsQ0xJUF9QQURESU5HOi4wMn0sX2NyZWF0ZUVsZW1lbnQ6ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIGUubmFtZXNwYWNlcy5hZGQoImx2bWwiLCJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOnZtbCIpLGZ1bmN0aW9uKHQpe3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoIjxsdm1sOiIrdCsnIGNsYXNzPSJsdm1sIj4nKX19Y2F0Y2godCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoIjwiK3QrJyB4bWxucz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LmNvbTp2bWwiIGNsYXNzPSJsdm1sIj4nKX19fSgpLF9pbml0UGF0aDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2NvbnRhaW5lcj10aGlzLl9jcmVhdGVFbGVtZW50KCJzaGFwZSIpO28uRG9tVXRpbC5hZGRDbGFzcyh0LCJsZWFmbGV0LXZtbC1zaGFwZSIrKHRoaXMub3B0aW9ucy5jbGFzc05hbWU/IiAiK3RoaXMub3B0aW9ucy5jbGFzc05hbWU6IiIpKSx0aGlzLm9wdGlvbnMuY2xpY2thYmxlJiZvLkRvbVV0aWwuYWRkQ2xhc3ModCwibGVhZmxldC1jbGlja2FibGUiKSx0LmNvb3Jkc2l6ZT0iMSAxIix0aGlzLl9wYXRoPXRoaXMuX2NyZWF0ZUVsZW1lbnQoInBhdGgiKSx0LmFwcGVuZENoaWxkKHRoaXMuX3BhdGgpLHRoaXMuX21hcC5fcGF0aFJvb3QuYXBwZW5kQ2hpbGQodCl9LF9pbml0U3R5bGU6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVTdHlsZSgpfSxfdXBkYXRlU3R5bGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zdHJva2UsZT10aGlzLl9maWxsLGk9dGhpcy5vcHRpb25zLG49dGhpcy5fY29udGFpbmVyO24uc3Ryb2tlZD1pLnN0cm9rZSxuLmZpbGxlZD1pLmZpbGwsaS5zdHJva2U/KHR8fCh0PXRoaXMuX3N0cm9rZT10aGlzLl9jcmVhdGVFbGVtZW50KCJzdHJva2UiKSx0LmVuZGNhcD0icm91bmQiLG4uYXBwZW5kQ2hpbGQodCkpLHQud2VpZ2h0PWkud2VpZ2h0KyJweCIsdC5jb2xvcj1pLmNvbG9yLHQub3BhY2l0eT1pLm9wYWNpdHksaS5kYXNoQXJyYXk/dC5kYXNoU3R5bGU9by5VdGlsLmlzQXJyYXkoaS5kYXNoQXJyYXkpP2kuZGFzaEFycmF5LmpvaW4oIiAiKTppLmRhc2hBcnJheS5yZXBsYWNlKC8oICosICopL2csIiAiKTp0LmRhc2hTdHlsZT0iIixpLmxpbmVDYXAmJih0LmVuZGNhcD1pLmxpbmVDYXAucmVwbGFjZSgiYnV0dCIsImZsYXQiKSksaS5saW5lSm9pbiYmKHQuam9pbnN0eWxlPWkubGluZUpvaW4pKTp0JiYobi5yZW1vdmVDaGlsZCh0KSx0aGlzLl9zdHJva2U9bnVsbCksaS5maWxsPyhlfHwoZT10aGlzLl9maWxsPXRoaXMuX2NyZWF0ZUVsZW1lbnQoImZpbGwiKSxuLmFwcGVuZENoaWxkKGUpKSxlLmNvbG9yPWkuZmlsbENvbG9yfHxpLmNvbG9yLGUub3BhY2l0eT1pLmZpbGxPcGFjaXR5KTplJiYobi5yZW1vdmVDaGlsZChlKSx0aGlzLl9maWxsPW51bGwpfSxfdXBkYXRlUGF0aDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2NvbnRhaW5lci5zdHlsZTt0LmRpc3BsYXk9Im5vbmUiLHRoaXMuX3BhdGgudj10aGlzLmdldFBhdGhTdHJpbmcoKSsiICIsdC5kaXNwbGF5PSIifX0pLG8uTWFwLmluY2x1ZGUoby5Ccm93c2VyLnN2Z3x8IW8uQnJvd3Nlci52bWw/e306e19pbml0UGF0aFJvb3Q6ZnVuY3Rpb24oKXtpZighdGhpcy5fcGF0aFJvb3Qpe3ZhciB0PXRoaXMuX3BhdGhSb290PWUuY3JlYXRlRWxlbWVudCgiZGl2Iik7dC5jbGFzc05hbWU9ImxlYWZsZXQtdm1sLWNvbnRhaW5lciIsdGhpcy5fcGFuZXMub3ZlcmxheVBhbmUuYXBwZW5kQ2hpbGQodCksdGhpcy5vbigibW92ZWVuZCIsdGhpcy5fdXBkYXRlUGF0aFZpZXdwb3J0KSx0aGlzLl91cGRhdGVQYXRoVmlld3BvcnQoKX19fSksby5Ccm93c2VyLmNhbnZhcz1mdW5jdGlvbigpe3JldHVybiEhZS5jcmVhdGVFbGVtZW50KCJjYW52YXMiKS5nZXRDb250ZXh0fSgpLG8uUGF0aD1vLlBhdGguU1ZHJiYhdC5MX1BSRUZFUl9DQU5WQVN8fCFvLkJyb3dzZXIuY2FudmFzP28uUGF0aDpvLlBhdGguZXh0ZW5kKHtzdGF0aWNzOntDQU5WQVM6ITAsU1ZHOiExfSxyZWRyYXc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwJiYodGhpcy5wcm9qZWN0TGF0bG5ncygpLHRoaXMuX3JlcXVlc3RVcGRhdGUoKSksdGhpc30sc2V0U3R5bGU6ZnVuY3Rpb24odCl7cmV0dXJuIG8uc2V0T3B0aW9ucyh0aGlzLHQpLHRoaXMuX2FkZExpbmVEYXNoKCksdGhpcy5fbWFwJiYodGhpcy5fdXBkYXRlU3R5bGUoKSx0aGlzLl9yZXF1ZXN0VXBkYXRlKCkpLHRoaXN9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe3Qub2ZmKCJ2aWV3cmVzZXQiLHRoaXMucHJvamVjdExhdGxuZ3MsdGhpcykub2ZmKCJtb3ZlZW5kIix0aGlzLl91cGRhdGVQYXRoLHRoaXMpLHRoaXMub3B0aW9ucy5jbGlja2FibGUmJnRoaXMuX29uQ2xpY2shPT1pJiYodGhpcy5fbWFwLm9mZigiY2xpY2siLHRoaXMuX29uQ2xpY2ssdGhpcyksdGhpcy5fbWFwLm9mZigibW91c2Vtb3ZlIix0aGlzLl9vbk1vdXNlTW92ZSx0aGlzKSksdGhpcy5fcmVxdWVzdFVwZGF0ZSgpLHRoaXMuZmlyZSgicmVtb3ZlIiksdGhpcy5fbWFwPW51bGx9LF9yZXF1ZXN0VXBkYXRlOmZ1bmN0aW9uKCl7dGhpcy5fbWFwJiYhby5QYXRoLl91cGRhdGVSZXF1ZXN0JiYoby5QYXRoLl91cGRhdGVSZXF1ZXN0PW8uVXRpbC5yZXF1ZXN0QW5pbUZyYW1lKHRoaXMuX2ZpcmVNYXBNb3ZlRW5kLHRoaXMuX21hcCkpfSxfZmlyZU1hcE1vdmVFbmQ6ZnVuY3Rpb24oKXtvLlBhdGguX3VwZGF0ZVJlcXVlc3Q9bnVsbCx0aGlzLmZpcmUoIm1vdmVlbmQiKX0sX2luaXRFbGVtZW50czpmdW5jdGlvbigpe3RoaXMuX21hcC5faW5pdFBhdGhSb290KCksdGhpcy5fY3R4PXRoaXMuX21hcC5fY2FudmFzQ3R4fSxfYWRkTGluZURhc2g6ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuZGFzaEFycmF5JiYodGhpcy5vcHRpb25zLl9kYXNoQXJyYXk9dGhpcy5vcHRpb25zLmRhc2hBcnJheS5zcGxpdCgiLCIpLm1hcChOdW1iZXIpKX0sX3VwZGF0ZVN0eWxlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zO3Quc3Ryb2tlJiYodGhpcy5fY3R4LmxpbmVXaWR0aD10LndlaWdodCx0aGlzLl9jdHguc3Ryb2tlU3R5bGU9dC5jb2xvciksdC5maWxsJiYodGhpcy5fY3R4LmZpbGxTdHlsZT10LmZpbGxDb2xvcnx8dC5jb2xvciksdC5saW5lQ2FwJiYodGhpcy5fY3R4LmxpbmVDYXA9dC5saW5lQ2FwKSx0LmxpbmVKb2luJiYodGhpcy5fY3R4LmxpbmVKb2luPXQubGluZUpvaW4pLHRoaXMuX2FkZExpbmVEYXNoKCl9LF9kcmF3UGF0aDpmdW5jdGlvbigpe3ZhciB0LGUsaSxuLHMsYTtmb3IodGhpcy5fY3R4LmJlZ2luUGF0aCgpLHRoaXMuX2N0eC5zZXRMaW5lRGFzaCh0aGlzLm9wdGlvbnMmJnRoaXMub3B0aW9ucy5fZGFzaEFycmF5fHxbXSksdD0wLGk9dGhpcy5fcGFydHMubGVuZ3RoO2k+dDt0Kyspe2ZvcihlPTAsbj10aGlzLl9wYXJ0c1t0XS5sZW5ndGg7bj5lO2UrKylzPXRoaXMuX3BhcnRzW3RdW2VdLGE9KDA9PT1lPyJtb3ZlIjoibGluZSIpKyJUbyIsdGhpcy5fY3R4W2FdKHMueCxzLnkpO3RoaXMgaW5zdGFuY2VvZiBvLlBvbHlnb24mJnRoaXMuX2N0eC5jbG9zZVBhdGgoKX19LF9jaGVja0lmRW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5fcGFydHMubGVuZ3RofSxfdXBkYXRlUGF0aDpmdW5jdGlvbigpe2lmKCF0aGlzLl9jaGVja0lmRW1wdHkoKSl7dmFyIHQ9dGhpcy5fY3R4LGU9dGhpcy5vcHRpb25zO3RoaXMuX2RyYXdQYXRoKCksdC5zYXZlKCksdGhpcy5fdXBkYXRlU3R5bGUoKSxlLmZpbGwmJih0Lmdsb2JhbEFscGhhPWUuZmlsbE9wYWNpdHksdC5maWxsKGUuZmlsbFJ1bGV8fCJldmVub2RkIikpLGUuc3Ryb2tlJiYodC5nbG9iYWxBbHBoYT1lLm9wYWNpdHksdC5zdHJva2UoKSksdC5yZXN0b3JlKCl9fSxfaW5pdEV2ZW50czpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5jbGlja2FibGUmJih0aGlzLl9tYXAub24oIm1vdXNlbW92ZSIsdGhpcy5fb25Nb3VzZU1vdmUsdGhpcyksdGhpcy5fbWFwLm9uKCJjbGljayBkYmxjbGljayBjb250ZXh0bWVudSIsdGhpcy5fZmlyZU1vdXNlRXZlbnQsdGhpcykpfSxfZmlyZU1vdXNlRXZlbnQ6ZnVuY3Rpb24odCl7dGhpcy5fY29udGFpbnNQb2ludCh0LmxheWVyUG9pbnQpJiZ0aGlzLmZpcmUodC50eXBlLHQpfSxfb25Nb3VzZU1vdmU6ZnVuY3Rpb24odCl7dGhpcy5fbWFwJiYhdGhpcy5fbWFwLl9hbmltYXRpbmdab29tJiYodGhpcy5fY29udGFpbnNQb2ludCh0LmxheWVyUG9pbnQpPyh0aGlzLl9jdHguY2FudmFzLnN0eWxlLmN1cnNvcj0icG9pbnRlciIsdGhpcy5fbW91c2VJbnNpZGU9ITAsdGhpcy5maXJlKCJtb3VzZW92ZXIiLHQpKTp0aGlzLl9tb3VzZUluc2lkZSYmKHRoaXMuX2N0eC5jYW52YXMuc3R5bGUuY3Vyc29yPSIiLHRoaXMuX21vdXNlSW5zaWRlPSExLHRoaXMuZmlyZSgibW91c2VvdXQiLHQpKSl9fSksby5NYXAuaW5jbHVkZShvLlBhdGguU1ZHJiYhdC5MX1BSRUZFUl9DQU5WQVN8fCFvLkJyb3dzZXIuY2FudmFzP3t9OntfaW5pdFBhdGhSb290OmZ1bmN0aW9uKCl7dmFyIHQsaT10aGlzLl9wYXRoUm9vdDtpfHwoaT10aGlzLl9wYXRoUm9vdD1lLmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLGkuc3R5bGUucG9zaXRpb249ImFic29sdXRlIix0PXRoaXMuX2NhbnZhc0N0eD1pLmdldENvbnRleHQoIjJkIiksdC5saW5lQ2FwPSJyb3VuZCIsdC5saW5lSm9pbj0icm91bmQiLHRoaXMuX3BhbmVzLm92ZXJsYXlQYW5lLmFwcGVuZENoaWxkKGkpLHRoaXMub3B0aW9ucy56b29tQW5pbWF0aW9uJiYodGhpcy5fcGF0aFJvb3QuY2xhc3NOYW1lPSJsZWFmbGV0LXpvb20tYW5pbWF0ZWQiLHRoaXMub24oInpvb21hbmltIix0aGlzLl9hbmltYXRlUGF0aFpvb20pLHRoaXMub24oInpvb21lbmQiLHRoaXMuX2VuZFBhdGhab29tKSksdGhpcy5vbigibW92ZWVuZCIsdGhpcy5fdXBkYXRlQ2FudmFzVmlld3BvcnQpLHRoaXMuX3VwZGF0ZUNhbnZhc1ZpZXdwb3J0KCkpfSxfdXBkYXRlQ2FudmFzVmlld3BvcnQ6ZnVuY3Rpb24oKXtpZighdGhpcy5fcGF0aFpvb21pbmcpe3RoaXMuX3VwZGF0ZVBhdGhWaWV3cG9ydCgpO3ZhciB0PXRoaXMuX3BhdGhWaWV3cG9ydCxlPXQubWluLGk9dC5tYXguc3VidHJhY3QoZSksbj10aGlzLl9wYXRoUm9vdDtvLkRvbVV0aWwuc2V0UG9zaXRpb24obixlKSxuLndpZHRoPWkueCxuLmhlaWdodD1pLnksbi5nZXRDb250ZXh0KCIyZCIpLnRyYW5zbGF0ZSgtZS54LC1lLnkpfX19KSxvLkxpbmVVdGlsPXtzaW1wbGlmeTpmdW5jdGlvbih0LGUpe2lmKCFlfHwhdC5sZW5ndGgpcmV0dXJuIHQuc2xpY2UoKTt2YXIgaT1lKmU7cmV0dXJuIHQ9dGhpcy5fcmVkdWNlUG9pbnRzKHQsaSksdD10aGlzLl9zaW1wbGlmeURQKHQsaSl9LHBvaW50VG9TZWdtZW50RGlzdGFuY2U6ZnVuY3Rpb24odCxlLGkpe3JldHVybiBNYXRoLnNxcnQodGhpcy5fc3FDbG9zZXN0UG9pbnRPblNlZ21lbnQodCxlLGksITApKX0sY2xvc2VzdFBvaW50T25TZWdtZW50OmZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gdGhpcy5fc3FDbG9zZXN0UG9pbnRPblNlZ21lbnQodCxlLGkpfSxfc2ltcGxpZnlEUDpmdW5jdGlvbih0LGUpe3ZhciBuPXQubGVuZ3RoLG89dHlwZW9mIFVpbnQ4QXJyYXkhPWkrIiI/VWludDhBcnJheTpBcnJheSxzPW5ldyBvKG4pO3NbMF09c1tuLTFdPTEsdGhpcy5fc2ltcGxpZnlEUFN0ZXAodCxzLGUsMCxuLTEpO3ZhciBhLHI9W107Zm9yKGE9MDtuPmE7YSsrKXNbYV0mJnIucHVzaCh0W2FdKTtyZXR1cm4gcn0sX3NpbXBsaWZ5RFBTdGVwOmZ1bmN0aW9uKHQsZSxpLG4sbyl7dmFyIHMsYSxyLGg9MDtmb3IoYT1uKzE7by0xPj1hO2ErKylyPXRoaXMuX3NxQ2xvc2VzdFBvaW50T25TZWdtZW50KHRbYV0sdFtuXSx0W29dLCEwKSxyPmgmJihzPWEsaD1yKTtoPmkmJihlW3NdPTEsdGhpcy5fc2ltcGxpZnlEUFN0ZXAodCxlLGksbixzKSx0aGlzLl9zaW1wbGlmeURQU3RlcCh0LGUsaSxzLG8pKX0sX3JlZHVjZVBvaW50czpmdW5jdGlvbih0LGUpe2Zvcih2YXIgaT1bdFswXV0sbj0xLG89MCxzPXQubGVuZ3RoO3M+bjtuKyspdGhpcy5fc3FEaXN0KHRbbl0sdFtvXSk+ZSYmKGkucHVzaCh0W25dKSxvPW4pO3JldHVybiBzLTE+byYmaS5wdXNoKHRbcy0xXSksaX0sY2xpcFNlZ21lbnQ6ZnVuY3Rpb24odCxlLGksbil7dmFyIG8scyxhLHI9bj90aGlzLl9sYXN0Q29kZTp0aGlzLl9nZXRCaXRDb2RlKHQsaSksaD10aGlzLl9nZXRCaXRDb2RlKGUsaSk7Zm9yKHRoaXMuX2xhc3RDb2RlPWg7Oyl7aWYoIShyfGgpKXJldHVyblt0LGVdO2lmKHImaClyZXR1cm4hMTtvPXJ8fGgscz10aGlzLl9nZXRFZGdlSW50ZXJzZWN0aW9uKHQsZSxvLGkpLGE9dGhpcy5fZ2V0Qml0Q29kZShzLGkpLG89PT1yPyh0PXMscj1hKTooZT1zLGg9YSl9fSxfZ2V0RWRnZUludGVyc2VjdGlvbjpmdW5jdGlvbih0LGUsaSxuKXt2YXIgcz1lLngtdC54LGE9ZS55LXQueSxyPW4ubWluLGg9bi5tYXg7cmV0dXJuIDgmaT9uZXcgby5Qb2ludCh0LngrcyooaC55LXQueSkvYSxoLnkpOjQmaT9uZXcgby5Qb2ludCh0Lngrcyooci55LXQueSkvYSxyLnkpOjImaT9uZXcgby5Qb2ludChoLngsdC55K2EqKGgueC10LngpL3MpOjEmaT9uZXcgby5Qb2ludChyLngsdC55K2EqKHIueC10LngpL3MpOnZvaWQgMH0sX2dldEJpdENvZGU6ZnVuY3Rpb24odCxlKXt2YXIgaT0wO3JldHVybiB0Lng8ZS5taW4ueD9pfD0xOnQueD5lLm1heC54JiYoaXw9MiksdC55PGUubWluLnk/aXw9NDp0Lnk+ZS5tYXgueSYmKGl8PTgpLGl9LF9zcURpc3Q6ZnVuY3Rpb24odCxlKXt2YXIgaT1lLngtdC54LG49ZS55LXQueTtyZXR1cm4gaSppK24qbn0sX3NxQ2xvc2VzdFBvaW50T25TZWdtZW50OmZ1bmN0aW9uKHQsZSxpLG4pe3ZhciBzLGE9ZS54LHI9ZS55LGg9aS54LWEsbD1pLnktcix1PWgqaCtsKmw7cmV0dXJuIHU+MCYmKHM9KCh0LngtYSkqaCsodC55LXIpKmwpL3Uscz4xPyhhPWkueCxyPWkueSk6cz4wJiYoYSs9aCpzLHIrPWwqcykpLGg9dC54LWEsbD10LnktcixuP2gqaCtsKmw6bmV3IG8uUG9pbnQoYSxyKX19LG8uUG9seWxpbmU9by5QYXRoLmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbih0LGUpe28uUGF0aC5wcm90b3R5cGUuaW5pdGlhbGl6ZS5jYWxsKHRoaXMsZSksdGhpcy5fbGF0bG5ncz10aGlzLl9jb252ZXJ0TGF0TG5ncyh0KX0sb3B0aW9uczp7c21vb3RoRmFjdG9yOjEsbm9DbGlwOiExfSxwcm9qZWN0TGF0bG5nczpmdW5jdGlvbigpe3RoaXMuX29yaWdpbmFsUG9pbnRzPVtdO2Zvcih2YXIgdD0wLGU9dGhpcy5fbGF0bG5ncy5sZW5ndGg7ZT50O3QrKyl0aGlzLl9vcmlnaW5hbFBvaW50c1t0XT10aGlzLl9tYXAubGF0TG5nVG9MYXllclBvaW50KHRoaXMuX2xhdGxuZ3NbdF0pfSxnZXRQYXRoU3RyaW5nOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsZT10aGlzLl9wYXJ0cy5sZW5ndGgsaT0iIjtlPnQ7dCsrKWkrPXRoaXMuX2dldFBhdGhQYXJ0U3RyKHRoaXMuX3BhcnRzW3RdKTtyZXR1cm4gaX0sZ2V0TGF0TG5nczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sYXRsbmdzfSxzZXRMYXRMbmdzOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9sYXRsbmdzPXRoaXMuX2NvbnZlcnRMYXRMbmdzKHQpLHRoaXMucmVkcmF3KCl9LGFkZExhdExuZzpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbGF0bG5ncy5wdXNoKG8ubGF0TG5nKHQpKSx0aGlzLnJlZHJhdygpfSxzcGxpY2VMYXRMbmdzOmZ1bmN0aW9uKCl7dmFyIHQ9W10uc3BsaWNlLmFwcGx5KHRoaXMuX2xhdGxuZ3MsYXJndW1lbnRzKTtyZXR1cm4gdGhpcy5fY29udmVydExhdExuZ3ModGhpcy5fbGF0bG5ncywhMCksdGhpcy5yZWRyYXcoKSx0fSxjbG9zZXN0TGF5ZXJQb2ludDpmdW5jdGlvbih0KXtmb3IodmFyIGUsaSxuPTEvMCxzPXRoaXMuX3BhcnRzLGE9bnVsbCxyPTAsaD1zLmxlbmd0aDtoPnI7cisrKWZvcih2YXIgbD1zW3JdLHU9MSxjPWwubGVuZ3RoO2M+dTt1Kyspe2U9bFt1LTFdLGk9bFt1XTt2YXIgZD1vLkxpbmVVdGlsLl9zcUNsb3Nlc3RQb2ludE9uU2VnbWVudCh0LGUsaSwhMCk7bj5kJiYobj1kLGE9by5MaW5lVXRpbC5fc3FDbG9zZXN0UG9pbnRPblNlZ21lbnQodCxlLGkpKX1yZXR1cm4gYSYmKGEuZGlzdGFuY2U9TWF0aC5zcXJ0KG4pKSxhfSxnZXRCb3VuZHM6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG8uTGF0TG5nQm91bmRzKHRoaXMuZ2V0TGF0TG5ncygpKX0sX2NvbnZlcnRMYXRMbmdzOmZ1bmN0aW9uKHQsZSl7dmFyIGksbixzPWU/dDpbXTtmb3IoaT0wLG49dC5sZW5ndGg7bj5pO2krKyl7aWYoby5VdGlsLmlzQXJyYXkodFtpXSkmJiJudW1iZXIiIT10eXBlb2YgdFtpXVswXSlyZXR1cm47c1tpXT1vLmxhdExuZyh0W2ldKX1yZXR1cm4gc30sX2luaXRFdmVudHM6ZnVuY3Rpb24oKXtvLlBhdGgucHJvdG90eXBlLl9pbml0RXZlbnRzLmNhbGwodGhpcyl9LF9nZXRQYXRoUGFydFN0cjpmdW5jdGlvbih0KXtmb3IodmFyIGUsaT1vLlBhdGguVk1MLG49MCxzPXQubGVuZ3RoLGE9IiI7cz5uO24rKyllPXRbbl0saSYmZS5fcm91bmQoKSxhKz0obj8iTCI6Ik0iKStlLngrIiAiK2UueTtyZXR1cm4gYX0sX2NsaXBQb2ludHM6ZnVuY3Rpb24oKXt2YXIgdCxlLGksbj10aGlzLl9vcmlnaW5hbFBvaW50cyxzPW4ubGVuZ3RoO2lmKHRoaXMub3B0aW9ucy5ub0NsaXApcmV0dXJuIHZvaWQodGhpcy5fcGFydHM9W25dKTt0aGlzLl9wYXJ0cz1bXTt2YXIgYT10aGlzLl9wYXJ0cyxyPXRoaXMuX21hcC5fcGF0aFZpZXdwb3J0LGg9by5MaW5lVXRpbDtmb3IodD0wLGU9MDtzLTE+dDt0KyspaT1oLmNsaXBTZWdtZW50KG5bdF0sblt0KzFdLHIsdCksaSYmKGFbZV09YVtlXXx8W10sYVtlXS5wdXNoKGlbMF0pLChpWzFdIT09blt0KzFdfHx0PT09cy0yKSYmKGFbZV0ucHVzaChpWzFdKSxlKyspKX0sX3NpbXBsaWZ5UG9pbnRzOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX3BhcnRzLGU9by5MaW5lVXRpbCxpPTAsbj10Lmxlbmd0aDtuPmk7aSsrKXRbaV09ZS5zaW1wbGlmeSh0W2ldLHRoaXMub3B0aW9ucy5zbW9vdGhGYWN0b3IpfSxfdXBkYXRlUGF0aDpmdW5jdGlvbigpe3RoaXMuX21hcCYmKHRoaXMuX2NsaXBQb2ludHMoKSx0aGlzLl9zaW1wbGlmeVBvaW50cygpLG8uUGF0aC5wcm90b3R5cGUuX3VwZGF0ZVBhdGguY2FsbCh0aGlzKSl9fSksby5wb2x5bGluZT1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgby5Qb2x5bGluZSh0LGUpfSxvLlBvbHlVdGlsPXt9LG8uUG9seVV0aWwuY2xpcFBvbHlnb249ZnVuY3Rpb24odCxlKXt2YXIgaSxuLHMsYSxyLGgsbCx1LGMsZD1bMSw0LDIsOF0scD1vLkxpbmVVdGlsO2ZvcihuPTAsbD10Lmxlbmd0aDtsPm47bisrKXRbbl0uX2NvZGU9cC5fZ2V0Qml0Q29kZSh0W25dLGUpO2ZvcihhPTA7ND5hO2ErKyl7Zm9yKHU9ZFthXSxpPVtdLG49MCxsPXQubGVuZ3RoLHM9bC0xO2w+bjtzPW4rKylyPXRbbl0saD10W3NdLHIuX2NvZGUmdT9oLl9jb2RlJnV8fChjPXAuX2dldEVkZ2VJbnRlcnNlY3Rpb24oaCxyLHUsZSksYy5fY29kZT1wLl9nZXRCaXRDb2RlKGMsZSksaS5wdXNoKGMpKTooaC5fY29kZSZ1JiYoYz1wLl9nZXRFZGdlSW50ZXJzZWN0aW9uKGgscix1LGUpLGMuX2NvZGU9cC5fZ2V0Qml0Q29kZShjLGUpLGkucHVzaChjKSksaS5wdXNoKHIpKTt0PWl9cmV0dXJuIHR9LG8uUG9seWdvbj1vLlBvbHlsaW5lLmV4dGVuZCh7b3B0aW9uczp7ZmlsbDohMH0saW5pdGlhbGl6ZTpmdW5jdGlvbih0LGUpe28uUG9seWxpbmUucHJvdG90eXBlLmluaXRpYWxpemUuY2FsbCh0aGlzLHQsZSksdGhpcy5faW5pdFdpdGhIb2xlcyh0KX0sX2luaXRXaXRoSG9sZXM6ZnVuY3Rpb24odCl7dmFyIGUsaSxuO2lmKHQmJm8uVXRpbC5pc0FycmF5KHRbMF0pJiYibnVtYmVyIiE9dHlwZW9mIHRbMF1bMF0pZm9yKHRoaXMuX2xhdGxuZ3M9dGhpcy5fY29udmVydExhdExuZ3ModFswXSksdGhpcy5faG9sZXM9dC5zbGljZSgxKSxlPTAsaT10aGlzLl9ob2xlcy5sZW5ndGg7aT5lO2UrKyluPXRoaXMuX2hvbGVzW2VdPXRoaXMuX2NvbnZlcnRMYXRMbmdzKHRoaXMuX2hvbGVzW2VdKSxuWzBdLmVxdWFscyhuW24ubGVuZ3RoLTFdKSYmbi5wb3AoKTt0PXRoaXMuX2xhdGxuZ3MsdC5sZW5ndGg+PTImJnRbMF0uZXF1YWxzKHRbdC5sZW5ndGgtMV0pJiZ0LnBvcCgpfSxwcm9qZWN0TGF0bG5nczpmdW5jdGlvbigpe2lmKG8uUG9seWxpbmUucHJvdG90eXBlLnByb2plY3RMYXRsbmdzLmNhbGwodGhpcyksdGhpcy5faG9sZVBvaW50cz1bXSx0aGlzLl9ob2xlcyl7dmFyIHQsZSxpLG47Zm9yKHQ9MCxpPXRoaXMuX2hvbGVzLmxlbmd0aDtpPnQ7dCsrKWZvcih0aGlzLl9ob2xlUG9pbnRzW3RdPVtdLGU9MCxuPXRoaXMuX2hvbGVzW3RdLmxlbmd0aDtuPmU7ZSsrKXRoaXMuX2hvbGVQb2ludHNbdF1bZV09dGhpcy5fbWFwLmxhdExuZ1RvTGF5ZXJQb2ludCh0aGlzLl9ob2xlc1t0XVtlXSl9fSxzZXRMYXRMbmdzOmZ1bmN0aW9uKHQpe3JldHVybiB0JiZvLlV0aWwuaXNBcnJheSh0WzBdKSYmIm51bWJlciIhPXR5cGVvZiB0WzBdWzBdPyh0aGlzLl9pbml0V2l0aEhvbGVzKHQpLHRoaXMucmVkcmF3KCkpOm8uUG9seWxpbmUucHJvdG90eXBlLnNldExhdExuZ3MuY2FsbCh0aGlzLHQpfSxfY2xpcFBvaW50czpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX29yaWdpbmFsUG9pbnRzLGU9W107aWYodGhpcy5fcGFydHM9W3RdLmNvbmNhdCh0aGlzLl9ob2xlUG9pbnRzKSwhdGhpcy5vcHRpb25zLm5vQ2xpcCl7Zm9yKHZhciBpPTAsbj10aGlzLl9wYXJ0cy5sZW5ndGg7bj5pO2krKyl7dmFyIHM9by5Qb2x5VXRpbC5jbGlwUG9seWdvbih0aGlzLl9wYXJ0c1tpXSx0aGlzLl9tYXAuX3BhdGhWaWV3cG9ydCk7cy5sZW5ndGgmJmUucHVzaChzKX10aGlzLl9wYXJ0cz1lfX0sX2dldFBhdGhQYXJ0U3RyOmZ1bmN0aW9uKHQpe3ZhciBlPW8uUG9seWxpbmUucHJvdG90eXBlLl9nZXRQYXRoUGFydFN0ci5jYWxsKHRoaXMsdCk7cmV0dXJuIGUrKG8uQnJvd3Nlci5zdmc/InoiOiJ4Iil9fSksby5wb2x5Z29uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBvLlBvbHlnb24odCxlKX0sZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3JldHVybiBvLkZlYXR1cmVHcm91cC5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24odCxlKXt0aGlzLl9sYXllcnM9e30sdGhpcy5fb3B0aW9ucz1lLHRoaXMuc2V0TGF0TG5ncyh0KX0sc2V0TGF0TG5nczpmdW5jdGlvbihlKXt2YXIgaT0wLG49ZS5sZW5ndGg7Zm9yKHRoaXMuZWFjaExheWVyKGZ1bmN0aW9uKHQpe24+aT90LnNldExhdExuZ3MoZVtpKytdKTp0aGlzLnJlbW92ZUxheWVyKHQpfSx0aGlzKTtuPmk7KXRoaXMuYWRkTGF5ZXIobmV3IHQoZVtpKytdLHRoaXMuX29wdGlvbnMpKTtyZXR1cm4gdGhpc30sZ2V0TGF0TG5nczpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmVhY2hMYXllcihmdW5jdGlvbihlKXt0LnB1c2goZS5nZXRMYXRMbmdzKCkpfSksdH19KX1vLk11bHRpUG9seWxpbmU9dChvLlBvbHlsaW5lKSxvLk11bHRpUG9seWdvbj10KG8uUG9seWdvbiksby5tdWx0aVBvbHlsaW5lPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBvLk11bHRpUG9seWxpbmUodCxlKX0sby5tdWx0aVBvbHlnb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IG8uTXVsdGlQb2x5Z29uKHQsZSl9fSgpLG8uUmVjdGFuZ2xlPW8uUG9seWdvbi5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24odCxlKXtvLlBvbHlnb24ucHJvdG90eXBlLmluaXRpYWxpemUuY2FsbCh0aGlzLHRoaXMuX2JvdW5kc1RvTGF0TG5ncyh0KSxlKX0sc2V0Qm91bmRzOmZ1bmN0aW9uKHQpe3RoaXMuc2V0TGF0TG5ncyh0aGlzLl9ib3VuZHNUb0xhdExuZ3ModCkpfSxfYm91bmRzVG9MYXRMbmdzOmZ1bmN0aW9uKHQpe3JldHVybiB0PW8ubGF0TG5nQm91bmRzKHQpLFt0LmdldFNvdXRoV2VzdCgpLHQuZ2V0Tm9ydGhXZXN0KCksdC5nZXROb3J0aEVhc3QoKSx0LmdldFNvdXRoRWFzdCgpXX19KSxvLnJlY3RhbmdsZT1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgby5SZWN0YW5nbGUodCxlKX0sby5DaXJjbGU9by5QYXRoLmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbih0LGUsaSl7aWYoby5QYXRoLnByb3RvdHlwZS5pbml0aWFsaXplLmNhbGwodGhpcyxpKSxpc05hTihlKSl0aHJvdyBuZXcgRXJyb3IoIkNpcmNsZSByYWRpdXMgY2Fubm90IGJlIE5hTiIpO3RoaXMuX2xhdGxuZz1vLmxhdExuZyh0KSx0aGlzLl9tUmFkaXVzPWV9LG9wdGlvbnM6e2ZpbGw6ITB9LHNldExhdExuZzpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbGF0bG5nPW8ubGF0TG5nKHQpLHRoaXMucmVkcmF3KCl9LHNldFJhZGl1czpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbVJhZGl1cz10LHRoaXMucmVkcmF3KCl9LHByb2plY3RMYXRsbmdzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZ2V0TG5nUmFkaXVzKCksZT10aGlzLl9sYXRsbmcsaT10aGlzLl9tYXAubGF0TG5nVG9MYXllclBvaW50KFtlLmxhdCxlLmxuZy10XSk7dGhpcy5fcG9pbnQ9dGhpcy5fbWFwLmxhdExuZ1RvTGF5ZXJQb2ludChlKSx0aGlzLl9yYWRpdXM9TWF0aC5tYXgodGhpcy5fcG9pbnQueC1pLngsMSl9LGdldEJvdW5kczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2dldExuZ1JhZGl1cygpLGU9dGhpcy5fbVJhZGl1cy80MDA3NTAxNyozNjAsaT10aGlzLl9sYXRsbmc7cmV0dXJuIG5ldyBvLkxhdExuZ0JvdW5kcyhbaS5sYXQtZSxpLmxuZy10XSxbaS5sYXQrZSxpLmxuZyt0XSl9LGdldExhdExuZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sYXRsbmd9LGdldFBhdGhTdHJpbmc6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wb2ludCxlPXRoaXMuX3JhZGl1cztyZXR1cm4gdGhpcy5fY2hlY2tJZkVtcHR5KCk/IiI6by5Ccm93c2VyLnN2Zz8iTSIrdC54KyIsIisodC55LWUpKyJBIitlKyIsIitlKyIsMCwxLDEsIisodC54LS4xKSsiLCIrKHQueS1lKSsiIHoiOih0Ll9yb3VuZCgpLGU9TWF0aC5yb3VuZChlKSwiQUwgIit0LngrIiwiK3QueSsiICIrZSsiLCIrZSsiIDAsMjM1OTI2MDAiKX0sZ2V0UmFkaXVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21SYWRpdXN9LF9nZXRMYXRSYWRpdXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbVJhZGl1cy80MDA3NTAxNyozNjB9LF9nZXRMbmdSYWRpdXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZ2V0TGF0UmFkaXVzKCkvTWF0aC5jb3Moby5MYXRMbmcuREVHX1RPX1JBRCp0aGlzLl9sYXRsbmcubGF0KX0sX2NoZWNrSWZFbXB0eTpmdW5jdGlvbigpe2lmKCF0aGlzLl9tYXApcmV0dXJuITE7dmFyIHQ9dGhpcy5fbWFwLl9wYXRoVmlld3BvcnQsZT10aGlzLl9yYWRpdXMsaT10aGlzLl9wb2ludDtyZXR1cm4gaS54LWU+dC5tYXgueHx8aS55LWU+dC5tYXgueXx8aS54K2U8dC5taW4ueHx8aS55K2U8dC5taW4ueX19KSxvLmNpcmNsZT1mdW5jdGlvbih0LGUsaSl7cmV0dXJuIG5ldyBvLkNpcmNsZSh0LGUsaSl9LG8uQ2lyY2xlTWFya2VyPW8uQ2lyY2xlLmV4dGVuZCh7b3B0aW9uczp7cmFkaXVzOjEwLHdlaWdodDoyfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQsZSl7by5DaXJjbGUucHJvdG90eXBlLmluaXRpYWxpemUuY2FsbCh0aGlzLHQsbnVsbCxlKSx0aGlzLl9yYWRpdXM9dGhpcy5vcHRpb25zLnJhZGl1c30scHJvamVjdExhdGxuZ3M6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD10aGlzLl9tYXAubGF0TG5nVG9MYXllclBvaW50KHRoaXMuX2xhdGxuZyl9LF91cGRhdGVTdHlsZTpmdW5jdGlvbigpe28uQ2lyY2xlLnByb3RvdHlwZS5fdXBkYXRlU3R5bGUuY2FsbCh0aGlzKSx0aGlzLnNldFJhZGl1cyh0aGlzLm9wdGlvbnMucmFkaXVzKX0sc2V0TGF0TG5nOmZ1bmN0aW9uKHQpe3JldHVybiBvLkNpcmNsZS5wcm90b3R5cGUuc2V0TGF0TG5nLmNhbGwodGhpcyx0KSx0aGlzLl9wb3B1cCYmdGhpcy5fcG9wdXAuX2lzT3BlbiYmdGhpcy5fcG9wdXAuc2V0TGF0TG5nKHQpLHRoaXN9LHNldFJhZGl1czpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLnJhZGl1cz10aGlzLl9yYWRpdXM9dCx0aGlzLnJlZHJhdygpfSxnZXRSYWRpdXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmFkaXVzfX0pLG8uY2lyY2xlTWFya2VyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBvLkNpcmNsZU1hcmtlcih0LGUpfSxvLlBvbHlsaW5lLmluY2x1ZGUoby5QYXRoLkNBTlZBUz97X2NvbnRhaW5zUG9pbnQ6ZnVuY3Rpb24odCxlKXt2YXIgaSxuLHMsYSxyLGgsbCx1PXRoaXMub3B0aW9ucy53ZWlnaHQvMjtmb3Ioby5Ccm93c2VyLnRvdWNoJiYodSs9MTApLGk9MCxhPXRoaXMuX3BhcnRzLmxlbmd0aDthPmk7aSsrKWZvcihsPXRoaXMuX3BhcnRzW2ldLG49MCxyPWwubGVuZ3RoLHM9ci0xO3I+bjtzPW4rKylpZigoZXx8MCE9PW4pJiYoaD1vLkxpbmVVdGlsLnBvaW50VG9TZWdtZW50RGlzdGFuY2UodCxsW3NdLGxbbl0pLHU+PWgpKXJldHVybiEwO3JldHVybiExfX06e30pLG8uUG9seWdvbi5pbmNsdWRlKG8uUGF0aC5DQU5WQVM/e19jb250YWluc1BvaW50OmZ1bmN0aW9uKHQpe3ZhciBlLGksbixzLGEscixoLGwsdT0hMTtpZihvLlBvbHlsaW5lLnByb3RvdHlwZS5fY29udGFpbnNQb2ludC5jYWxsKHRoaXMsdCwhMCkpcmV0dXJuITA7Zm9yKHM9MCxoPXRoaXMuX3BhcnRzLmxlbmd0aDtoPnM7cysrKWZvcihlPXRoaXMuX3BhcnRzW3NdLGE9MCxsPWUubGVuZ3RoLHI9bC0xO2w+YTtyPWErKylpPWVbYV0sbj1lW3JdLGkueT50LnkhPW4ueT50LnkmJnQueDwobi54LWkueCkqKHQueS1pLnkpLyhuLnktaS55KStpLngmJih1PSF1KTtyZXR1cm4gdX19Ont9KSxvLkNpcmNsZS5pbmNsdWRlKG8uUGF0aC5DQU5WQVM/e19kcmF3UGF0aDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3BvaW50O3RoaXMuX2N0eC5iZWdpblBhdGgoKSx0aGlzLl9jdHguYXJjKHQueCx0LnksdGhpcy5fcmFkaXVzLDAsMipNYXRoLlBJLCExKX0sX2NvbnRhaW5zUG9pbnQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcG9pbnQsaT10aGlzLm9wdGlvbnMuc3Ryb2tlP3RoaXMub3B0aW9ucy53ZWlnaHQvMjowO3JldHVybiB0LmRpc3RhbmNlVG8oZSk8PXRoaXMuX3JhZGl1cytpfX06e30pLG8uQ2lyY2xlTWFya2VyLmluY2x1ZGUoby5QYXRoLkNBTlZBUz97X3VwZGF0ZVN0eWxlOmZ1bmN0aW9uKCl7by5QYXRoLnByb3RvdHlwZS5fdXBkYXRlU3R5bGUuY2FsbCh0aGlzKX19Ont9KSxvLkdlb0pTT049by5GZWF0dXJlR3JvdXAuZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9uKHQsZSl7by5zZXRPcHRpb25zKHRoaXMsZSksdGhpcy5fbGF5ZXJzPXt9LHQmJnRoaXMuYWRkRGF0YSh0KX0sYWRkRGF0YTpmdW5jdGlvbih0KXt2YXIgZSxpLG4scz1vLlV0aWwuaXNBcnJheSh0KT90OnQuZmVhdHVyZXM7aWYocyl7Zm9yKGU9MCxpPXMubGVuZ3RoO2k+ZTtlKyspbj1zW2VdLChuLmdlb21ldHJpZXN8fG4uZ2VvbWV0cnl8fG4uZmVhdHVyZXN8fG4uY29vcmRpbmF0ZXMpJiZ0aGlzLmFkZERhdGEoc1tlXSk7cmV0dXJuIHRoaXN9dmFyIGE9dGhpcy5vcHRpb25zO2lmKCFhLmZpbHRlcnx8YS5maWx0ZXIodCkpe3ZhciByPW8uR2VvSlNPTi5nZW9tZXRyeVRvTGF5ZXIodCxhLnBvaW50VG9MYXllcixhLmNvb3Jkc1RvTGF0TG5nLGEpO3JldHVybiByLmZlYXR1cmU9by5HZW9KU09OLmFzRmVhdHVyZSh0KSxyLmRlZmF1bHRPcHRpb25zPXIub3B0aW9ucyx0aGlzLnJlc2V0U3R5bGUociksYS5vbkVhY2hGZWF0dXJlJiZhLm9uRWFjaEZlYXR1cmUodCxyKSx0aGlzLmFkZExheWVyKHIpfX0scmVzZXRTdHlsZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLm9wdGlvbnMuc3R5bGU7ZSYmKG8uVXRpbC5leHRlbmQodC5vcHRpb25zLHQuZGVmYXVsdE9wdGlvbnMpLHRoaXMuX3NldExheWVyU3R5bGUodCxlKSl9LHNldFN0eWxlOmZ1bmN0aW9uKHQpe3RoaXMuZWFjaExheWVyKGZ1bmN0aW9uKGUpe3RoaXMuX3NldExheWVyU3R5bGUoZSx0KX0sdGhpcyl9LF9zZXRMYXllclN0eWxlOmZ1bmN0aW9uKHQsZSl7ImZ1bmN0aW9uIj09dHlwZW9mIGUmJihlPWUodC5mZWF0dXJlKSksdC5zZXRTdHlsZSYmdC5zZXRTdHlsZShlKX19KSxvLmV4dGVuZChvLkdlb0pTT04se2dlb21ldHJ5VG9MYXllcjpmdW5jdGlvbih0LGUsaSxuKXt2YXIgcyxhLHIsaCxsPSJGZWF0dXJlIj09PXQudHlwZT90Lmdlb21ldHJ5OnQsdT1sLmNvb3JkaW5hdGVzLGM9W107c3dpdGNoKGk9aXx8dGhpcy5jb29yZHNUb0xhdExuZyxsLnR5cGUpe2Nhc2UiUG9pbnQiOnJldHVybiBzPWkodSksZT9lKHQscyk6bmV3IG8uTWFya2VyKHMpO2Nhc2UiTXVsdGlQb2ludCI6Zm9yKHI9MCxoPXUubGVuZ3RoO2g+cjtyKyspcz1pKHVbcl0pLGMucHVzaChlP2UodCxzKTpuZXcgby5NYXJrZXIocykpO3JldHVybiBuZXcgby5GZWF0dXJlR3JvdXAoYyk7Y2FzZSJMaW5lU3RyaW5nIjpyZXR1cm4gYT10aGlzLmNvb3Jkc1RvTGF0TG5ncyh1LDAsaSksbmV3IG8uUG9seWxpbmUoYSxuKTtjYXNlIlBvbHlnb24iOmlmKDI9PT11Lmxlbmd0aCYmIXVbMV0ubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBHZW9KU09OIG9iamVjdC4iKTtyZXR1cm4gYT10aGlzLmNvb3Jkc1RvTGF0TG5ncyh1LDEsaSksbmV3IG8uUG9seWdvbihhLG4pO2Nhc2UiTXVsdGlMaW5lU3RyaW5nIjpyZXR1cm4gYT10aGlzLmNvb3Jkc1RvTGF0TG5ncyh1LDEsaSksbmV3IG8uTXVsdGlQb2x5bGluZShhLG4pO2Nhc2UiTXVsdGlQb2x5Z29uIjpyZXR1cm4gYT10aGlzLmNvb3Jkc1RvTGF0TG5ncyh1LDIsaSksbmV3IG8uTXVsdGlQb2x5Z29uKGEsbik7Y2FzZSJHZW9tZXRyeUNvbGxlY3Rpb24iOmZvcihyPTAsaD1sLmdlb21ldHJpZXMubGVuZ3RoO2g+cjtyKyspYy5wdXNoKHRoaXMuZ2VvbWV0cnlUb0xheWVyKHtnZW9tZXRyeTpsLmdlb21ldHJpZXNbcl0sdHlwZToiRmVhdHVyZSIscHJvcGVydGllczp0LnByb3BlcnRpZXN9LGUsaSxuKSk7cmV0dXJuIG5ldyBvLkZlYXR1cmVHcm91cChjKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSW52YWxpZCBHZW9KU09OIG9iamVjdC4iKX19LGNvb3Jkc1RvTGF0TG5nOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgby5MYXRMbmcodFsxXSx0WzBdLHRbMl0pfSxjb29yZHNUb0xhdExuZ3M6ZnVuY3Rpb24odCxlLGkpe3ZhciBuLG8scyxhPVtdO2ZvcihvPTAscz10Lmxlbmd0aDtzPm87bysrKW49ZT90aGlzLmNvb3Jkc1RvTGF0TG5ncyh0W29dLGUtMSxpKTooaXx8dGhpcy5jb29yZHNUb0xhdExuZykodFtvXSksYS5wdXNoKG4pO3JldHVybiBhfSxsYXRMbmdUb0Nvb3JkczpmdW5jdGlvbih0KXt2YXIgZT1bdC5sbmcsdC5sYXRdO3JldHVybiB0LmFsdCE9PWkmJmUucHVzaCh0LmFsdCksZX0sbGF0TG5nc1RvQ29vcmRzOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxpPTAsbj10Lmxlbmd0aDtuPmk7aSsrKWUucHVzaChvLkdlb0pTT04ubGF0TG5nVG9Db29yZHModFtpXSkpO3JldHVybiBlfSxnZXRGZWF0dXJlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZmVhdHVyZT9vLmV4dGVuZCh7fSx0LmZlYXR1cmUse2dlb21ldHJ5OmV9KTpvLkdlb0pTT04uYXNGZWF0dXJlKGUpfSxhc0ZlYXR1cmU6ZnVuY3Rpb24odCl7cmV0dXJuIkZlYXR1cmUiPT09dC50eXBlP3Q6e3R5cGU6IkZlYXR1cmUiLHByb3BlcnRpZXM6e30sZ2VvbWV0cnk6dH19fSk7dmFyIGE9e3RvR2VvSlNPTjpmdW5jdGlvbigpe3JldHVybiBvLkdlb0pTT04uZ2V0RmVhdHVyZSh0aGlzLHt0eXBlOiJQb2ludCIsY29vcmRpbmF0ZXM6by5HZW9KU09OLmxhdExuZ1RvQ29vcmRzKHRoaXMuZ2V0TGF0TG5nKCkpfSl9fTtvLk1hcmtlci5pbmNsdWRlKGEpLG8uQ2lyY2xlLmluY2x1ZGUoYSksby5DaXJjbGVNYXJrZXIuaW5jbHVkZShhKSxvLlBvbHlsaW5lLmluY2x1ZGUoe3RvR2VvSlNPTjpmdW5jdGlvbigpe3JldHVybiBvLkdlb0pTT04uZ2V0RmVhdHVyZSh0aGlzLHt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczpvLkdlb0pTT04ubGF0TG5nc1RvQ29vcmRzKHRoaXMuZ2V0TGF0TG5ncygpKX0pfX0pLG8uUG9seWdvbi5pbmNsdWRlKHt0b0dlb0pTT046ZnVuY3Rpb24oKXt2YXIgdCxlLGksbj1bby5HZW9KU09OLmxhdExuZ3NUb0Nvb3Jkcyh0aGlzLmdldExhdExuZ3MoKSldO2lmKG5bMF0ucHVzaChuWzBdWzBdKSx0aGlzLl9ob2xlcylmb3IodD0wLGU9dGhpcy5faG9sZXMubGVuZ3RoO2U+dDt0KyspaT1vLkdlb0pTT04ubGF0TG5nc1RvQ29vcmRzKHRoaXMuX2hvbGVzW3RdKSxpLnB1c2goaVswXSksbi5wdXNoKGkpO3JldHVybiBvLkdlb0pTT04uZ2V0RmVhdHVyZSh0aGlzLHt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpufSl9fSksZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPVtdO3JldHVybiB0aGlzLmVhY2hMYXllcihmdW5jdGlvbih0KXtlLnB1c2godC50b0dlb0pTT04oKS5nZW9tZXRyeS5jb29yZGluYXRlcyl9KSxvLkdlb0pTT04uZ2V0RmVhdHVyZSh0aGlzLHt0eXBlOnQsY29vcmRpbmF0ZXM6ZX0pfX1vLk11bHRpUG9seWxpbmUuaW5jbHVkZSh7dG9HZW9KU09OOnQoIk11bHRpTGluZVN0cmluZyIpfSksby5NdWx0aVBvbHlnb24uaW5jbHVkZSh7dG9HZW9KU09OOnQoIk11bHRpUG9seWdvbiIpfSksby5MYXllckdyb3VwLmluY2x1ZGUoe3RvR2VvSlNPTjpmdW5jdGlvbigpe3ZhciBlLGk9dGhpcy5mZWF0dXJlJiZ0aGlzLmZlYXR1cmUuZ2VvbWV0cnksbj1bXTtpZihpJiYiTXVsdGlQb2ludCI9PT1pLnR5cGUpcmV0dXJuIHQoIk11bHRpUG9pbnQiKS5jYWxsKHRoaXMpO3ZhciBzPWkmJiJHZW9tZXRyeUNvbGxlY3Rpb24iPT09aS50eXBlO3JldHVybiB0aGlzLmVhY2hMYXllcihmdW5jdGlvbih0KXt0LnRvR2VvSlNPTiYmKGU9dC50b0dlb0pTT04oKSxuLnB1c2gocz9lLmdlb21ldHJ5Om8uR2VvSlNPTi5hc0ZlYXR1cmUoZSkpKX0pLHM/by5HZW9KU09OLmdldEZlYXR1cmUodGhpcyx7Z2VvbWV0cmllczpuLHR5cGU6Ikdlb21ldHJ5Q29sbGVjdGlvbiJ9KTp7dHlwZToiRmVhdHVyZUNvbGxlY3Rpb24iLGZlYXR1cmVzOm59fX0pfSgpLG8uZ2VvSnNvbj1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgby5HZW9KU09OKHQsZSl9LG8uRG9tRXZlbnQ9e2FkZExpc3RlbmVyOmZ1bmN0aW9uKHQsZSxpLG4pe3ZhciBzLGEscixoPW8uc3RhbXAoaSksbD0iX2xlYWZsZXRfIitlK2g7cmV0dXJuIHRbbF0/dGhpczoocz1mdW5jdGlvbihlKXtyZXR1cm4gaS5jYWxsKG58fHQsZXx8by5Eb21FdmVudC5fZ2V0RXZlbnQoKSl9LG8uQnJvd3Nlci5wb2ludGVyJiYwPT09ZS5pbmRleE9mKCJ0b3VjaCIpP3RoaXMuYWRkUG9pbnRlckxpc3RlbmVyKHQsZSxzLGgpOihvLkJyb3dzZXIudG91Y2gmJiJkYmxjbGljayI9PT1lJiZ0aGlzLmFkZERvdWJsZVRhcExpc3RlbmVyJiZ0aGlzLmFkZERvdWJsZVRhcExpc3RlbmVyKHQscyxoKSwiYWRkRXZlbnRMaXN0ZW5lciJpbiB0PyJtb3VzZXdoZWVsIj09PWU/KHQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NTW91c2VTY3JvbGwiLHMsITEpLHQuYWRkRXZlbnRMaXN0ZW5lcihlLHMsITEpKToibW91c2VlbnRlciI9PT1lfHwibW91c2VsZWF2ZSI9PT1lPyhhPXMscj0ibW91c2VlbnRlciI9PT1lPyJtb3VzZW92ZXIiOiJtb3VzZW91dCIscz1mdW5jdGlvbihlKXtyZXR1cm4gby5Eb21FdmVudC5fY2hlY2tNb3VzZSh0LGUpP2EoZSk6dm9pZCAwfSx0LmFkZEV2ZW50TGlzdGVuZXIocixzLCExKSk6ImNsaWNrIj09PWUmJm8uQnJvd3Nlci5hbmRyb2lkPyhhPXMscz1mdW5jdGlvbih0KXtyZXR1cm4gby5Eb21FdmVudC5fZmlsdGVyQ2xpY2sodCxhKX0sdC5hZGRFdmVudExpc3RlbmVyKGUscywhMSkpOnQuYWRkRXZlbnRMaXN0ZW5lcihlLHMsITEpOiJhdHRhY2hFdmVudCJpbiB0JiZ0LmF0dGFjaEV2ZW50KCJvbiIrZSxzKSx0W2xdPXMsdGhpcykpfSxyZW1vdmVMaXN0ZW5lcjpmdW5jdGlvbih0LGUsaSl7dmFyIG49by5zdGFtcChpKSxzPSJfbGVhZmxldF8iK2UrbixhPXRbc107cmV0dXJuIGE/KG8uQnJvd3Nlci5wb2ludGVyJiYwPT09ZS5pbmRleE9mKCJ0b3VjaCIpP3RoaXMucmVtb3ZlUG9pbnRlckxpc3RlbmVyKHQsZSxuKTpvLkJyb3dzZXIudG91Y2gmJiJkYmxjbGljayI9PT1lJiZ0aGlzLnJlbW92ZURvdWJsZVRhcExpc3RlbmVyP3RoaXMucmVtb3ZlRG91YmxlVGFwTGlzdGVuZXIodCxuKToicmVtb3ZlRXZlbnRMaXN0ZW5lciJpbiB0PyJtb3VzZXdoZWVsIj09PWU/KHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NTW91c2VTY3JvbGwiLGEsITEpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLGEsITEpKToibW91c2VlbnRlciI9PT1lfHwibW91c2VsZWF2ZSI9PT1lP3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2VlbnRlciI9PT1lPyJtb3VzZW92ZXIiOiJtb3VzZW91dCIsYSwhMSk6dC5yZW1vdmVFdmVudExpc3RlbmVyKGUsYSwhMSk6ImRldGFjaEV2ZW50ImluIHQmJnQuZGV0YWNoRXZlbnQoIm9uIitlLGEpLHRbc109bnVsbCx0aGlzKTp0aGlzfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24odCl7cmV0dXJuIHQuc3RvcFByb3BhZ2F0aW9uP3Quc3RvcFByb3BhZ2F0aW9uKCk6dC5jYW5jZWxCdWJibGU9ITAsby5Eb21FdmVudC5fc2tpcHBlZCh0KSx0aGlzfSxkaXNhYmxlU2Nyb2xsUHJvcGFnYXRpb246ZnVuY3Rpb24odCl7dmFyIGU9by5Eb21FdmVudC5zdG9wUHJvcGFnYXRpb247cmV0dXJuIG8uRG9tRXZlbnQub24odCwibW91c2V3aGVlbCIsZSkub24odCwiTW96TW91c2VQaXhlbFNjcm9sbCIsZSl9LGRpc2FibGVDbGlja1Byb3BhZ2F0aW9uOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1vLkRvbUV2ZW50LnN0b3BQcm9wYWdhdGlvbixpPW8uRHJhZ2dhYmxlLlNUQVJULmxlbmd0aC0xO2k+PTA7aS0tKW8uRG9tRXZlbnQub24odCxvLkRyYWdnYWJsZS5TVEFSVFtpXSxlKTtyZXR1cm4gby5Eb21FdmVudC5vbih0LCJjbGljayIsby5Eb21FdmVudC5fZmFrZVN0b3ApLm9uKHQsImRibGNsaWNrIixlKX0scHJldmVudERlZmF1bHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQucHJldmVudERlZmF1bHQ/dC5wcmV2ZW50RGVmYXVsdCgpOnQucmV0dXJuVmFsdWU9ITEsdGhpc30sc3RvcDpmdW5jdGlvbih0KXtyZXR1cm4gby5Eb21FdmVudC5wcmV2ZW50RGVmYXVsdCh0KS5zdG9wUHJvcGFnYXRpb24odCl9LGdldE1vdXNlUG9zaXRpb246ZnVuY3Rpb24odCxlKXtpZighZSlyZXR1cm4gbmV3IG8uUG9pbnQodC5jbGllbnRYLHQuY2xpZW50WSk7dmFyIGk9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gbmV3IG8uUG9pbnQodC5jbGllbnRYLWkubGVmdC1lLmNsaWVudExlZnQsdC5jbGllbnRZLWkudG9wLWUuY2xpZW50VG9wKX0sZ2V0V2hlZWxEZWx0YTpmdW5jdGlvbih0KXt2YXIgZT0wO3JldHVybiB0LndoZWVsRGVsdGEmJihlPXQud2hlZWxEZWx0YS8xMjApLHQuZGV0YWlsJiYoZT0tdC5kZXRhaWwvMyksZX0sX3NraXBFdmVudHM6e30sX2Zha2VTdG9wOmZ1bmN0aW9uKHQpe28uRG9tRXZlbnQuX3NraXBFdmVudHNbdC50eXBlXT0hMH0sX3NraXBwZWQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fc2tpcEV2ZW50c1t0LnR5cGVdO3JldHVybiB0aGlzLl9za2lwRXZlbnRzW3QudHlwZV09ITEsZX0sX2NoZWNrTW91c2U6ZnVuY3Rpb24odCxlKXt2YXIgaT1lLnJlbGF0ZWRUYXJnZXQ7aWYoIWkpcmV0dXJuITA7dHJ5e2Zvcig7aSYmaSE9PXQ7KWk9aS5wYXJlbnROb2RlfWNhdGNoKG4pe3JldHVybiExfXJldHVybiBpIT09dH0sX2dldEV2ZW50OmZ1bmN0aW9uKCl7dmFyIGU9dC5ldmVudDtpZighZSlmb3IodmFyIGk9YXJndW1lbnRzLmNhbGxlZS5jYWxsZXI7aSYmKGU9aS5hcmd1bWVudHNbMF0sIWV8fHQuRXZlbnQhPT1lLmNvbnN0cnVjdG9yKTspaT1pLmNhbGxlcjtyZXR1cm4gZX0sX2ZpbHRlckNsaWNrOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dC50aW1lU3RhbXB8fHQub3JpZ2luYWxFdmVudC50aW1lU3RhbXAsbj1vLkRvbUV2ZW50Ll9sYXN0Q2xpY2smJmktby5Eb21FdmVudC5fbGFzdENsaWNrO3JldHVybiBuJiZuPjEwMCYmNTAwPm58fHQudGFyZ2V0Ll9zaW11bGF0ZWRDbGljayYmIXQuX3NpbXVsYXRlZD92b2lkIG8uRG9tRXZlbnQuc3RvcCh0KTooby5Eb21FdmVudC5fbGFzdENsaWNrPWksZSh0KSl9fSxvLkRvbUV2ZW50Lm9uPW8uRG9tRXZlbnQuYWRkTGlzdGVuZXIsby5Eb21FdmVudC5vZmY9by5Eb21FdmVudC5yZW1vdmVMaXN0ZW5lcixvLkRyYWdnYWJsZT1vLkNsYXNzLmV4dGVuZCh7aW5jbHVkZXM6by5NaXhpbi5FdmVudHMsc3RhdGljczp7U1RBUlQ6by5Ccm93c2VyLnRvdWNoP1sidG91Y2hzdGFydCIsIm1vdXNlZG93biJdOlsibW91c2Vkb3duIl0sRU5EOnttb3VzZWRvd246Im1vdXNldXAiLHRvdWNoc3RhcnQ6InRvdWNoZW5kIixwb2ludGVyZG93bjoidG91Y2hlbmQiLE1TUG9pbnRlckRvd246InRvdWNoZW5kIn0sTU9WRTp7bW91c2Vkb3duOiJtb3VzZW1vdmUiLHRvdWNoc3RhcnQ6InRvdWNobW92ZSIscG9pbnRlcmRvd246InRvdWNobW92ZSIsTVNQb2ludGVyRG93bjoidG91Y2htb3ZlIn19LGluaXRpYWxpemU6ZnVuY3Rpb24odCxlKXt0aGlzLl9lbGVtZW50PXQsdGhpcy5fZHJhZ1N0YXJ0VGFyZ2V0PWV8fHR9LGVuYWJsZTpmdW5jdGlvbigpe2lmKCF0aGlzLl9lbmFibGVkKXtmb3IodmFyIHQ9by5EcmFnZ2FibGUuU1RBUlQubGVuZ3RoLTE7dD49MDt0LS0pby5Eb21FdmVudC5vbih0aGlzLl9kcmFnU3RhcnRUYXJnZXQsby5EcmFnZ2FibGUuU1RBUlRbdF0sdGhpcy5fb25Eb3duLHRoaXMpO3RoaXMuX2VuYWJsZWQ9ITB9fSxkaXNhYmxlOmZ1bmN0aW9uKCl7aWYodGhpcy5fZW5hYmxlZCl7Zm9yKHZhciB0PW8uRHJhZ2dhYmxlLlNUQVJULmxlbmd0aC0xO3Q+PTA7dC0tKW8uRG9tRXZlbnQub2ZmKHRoaXMuX2RyYWdTdGFydFRhcmdldCxvLkRyYWdnYWJsZS5TVEFSVFt0XSx0aGlzLl9vbkRvd24sdGhpcyk7dGhpcy5fZW5hYmxlZD0hMSx0aGlzLl9tb3ZlZD0hMX19LF9vbkRvd246ZnVuY3Rpb24odCl7aWYodGhpcy5fbW92ZWQ9ITEsIXQuc2hpZnRLZXkmJigxPT09dC53aGljaHx8MT09PXQuYnV0dG9ufHx0LnRvdWNoZXMpJiYoby5Eb21FdmVudC5zdG9wUHJvcGFnYXRpb24odCksIW8uRHJhZ2dhYmxlLl9kaXNhYmxlZCYmKG8uRG9tVXRpbC5kaXNhYmxlSW1hZ2VEcmFnKCksby5Eb21VdGlsLmRpc2FibGVUZXh0U2VsZWN0aW9uKCksIXRoaXMuX21vdmluZykpKXt2YXIgaT10LnRvdWNoZXM/dC50b3VjaGVzWzBdOnQ7dGhpcy5fc3RhcnRQb2ludD1uZXcgby5Qb2ludChpLmNsaWVudFgsaS5jbGllbnRZKSx0aGlzLl9zdGFydFBvcz10aGlzLl9uZXdQb3M9by5Eb21VdGlsLmdldFBvc2l0aW9uKHRoaXMuX2VsZW1lbnQpLG8uRG9tRXZlbnQub24oZSxvLkRyYWdnYWJsZS5NT1ZFW3QudHlwZV0sdGhpcy5fb25Nb3ZlLHRoaXMpLm9uKGUsby5EcmFnZ2FibGUuRU5EW3QudHlwZV0sdGhpcy5fb25VcCx0aGlzKX19LF9vbk1vdmU6ZnVuY3Rpb24odCl7aWYodC50b3VjaGVzJiZ0LnRvdWNoZXMubGVuZ3RoPjEpcmV0dXJuIHZvaWQodGhpcy5fbW92ZWQ9ITApO3ZhciBpPXQudG91Y2hlcyYmMT09PXQudG91Y2hlcy5sZW5ndGg/dC50b3VjaGVzWzBdOnQsbj1uZXcgby5Qb2ludChpLmNsaWVudFgsaS5jbGllbnRZKSxzPW4uc3VidHJhY3QodGhpcy5fc3RhcnRQb2ludCk7KHMueHx8cy55KSYmKG8uQnJvd3Nlci50b3VjaCYmTWF0aC5hYnMocy54KStNYXRoLmFicyhzLnkpPDN8fChvLkRvbUV2ZW50LnByZXZlbnREZWZhdWx0KHQpLHRoaXMuX21vdmVkfHwodGhpcy5maXJlKCJkcmFnc3RhcnQiKSx0aGlzLl9tb3ZlZD0hMCx0aGlzLl9zdGFydFBvcz1vLkRvbVV0aWwuZ2V0UG9zaXRpb24odGhpcy5fZWxlbWVudCkuc3VidHJhY3Qocyksby5Eb21VdGlsLmFkZENsYXNzKGUuYm9keSwibGVhZmxldC1kcmFnZ2luZyIpLHRoaXMuX2xhc3RUYXJnZXQ9dC50YXJnZXR8fHQuc3JjRWxlbWVudCxvLkRvbVV0aWwuYWRkQ2xhc3ModGhpcy5fbGFzdFRhcmdldCwibGVhZmxldC1kcmFnLXRhcmdldCIpKSx0aGlzLl9uZXdQb3M9dGhpcy5fc3RhcnRQb3MuYWRkKHMpLHRoaXMuX21vdmluZz0hMCxvLlV0aWwuY2FuY2VsQW5pbUZyYW1lKHRoaXMuX2FuaW1SZXF1ZXN0KSx0aGlzLl9hbmltUmVxdWVzdD1vLlV0aWwucmVxdWVzdEFuaW1GcmFtZSh0aGlzLl91cGRhdGVQb3NpdGlvbix0aGlzLCEwLHRoaXMuX2RyYWdTdGFydFRhcmdldCkpKX0sX3VwZGF0ZVBvc2l0aW9uOmZ1bmN0aW9uKCl7dGhpcy5maXJlKCJwcmVkcmFnIiksby5Eb21VdGlsLnNldFBvc2l0aW9uKHRoaXMuX2VsZW1lbnQsdGhpcy5fbmV3UG9zKSx0aGlzLmZpcmUoImRyYWciKX0sX29uVXA6ZnVuY3Rpb24oKXtvLkRvbVV0aWwucmVtb3ZlQ2xhc3MoZS5ib2R5LCJsZWFmbGV0LWRyYWdnaW5nIiksdGhpcy5fbGFzdFRhcmdldCYmKG8uRG9tVXRpbC5yZW1vdmVDbGFzcyh0aGlzLl9sYXN0VGFyZ2V0LCJsZWFmbGV0LWRyYWctdGFyZ2V0IiksdGhpcy5fbGFzdFRhcmdldD1udWxsKTtmb3IodmFyIHQgaW4gby5EcmFnZ2FibGUuTU9WRSlvLkRvbUV2ZW50Lm9mZihlLG8uRHJhZ2dhYmxlLk1PVkVbdF0sdGhpcy5fb25Nb3ZlKS5vZmYoZSxvLkRyYWdnYWJsZS5FTkRbdF0sdGhpcy5fb25VcCk7by5Eb21VdGlsLmVuYWJsZUltYWdlRHJhZygpLG8uRG9tVXRpbC5lbmFibGVUZXh0U2VsZWN0aW9uKCksdGhpcy5fbW92ZWQmJnRoaXMuX21vdmluZyYmKG8uVXRpbC5jYW5jZWxBbmltRnJhbWUodGhpcy5fYW5pbVJlcXVlc3QpLHRoaXMuZmlyZSgiZHJhZ2VuZCIse2Rpc3RhbmNlOnRoaXMuX25ld1Bvcy5kaXN0YW5jZVRvKHRoaXMuX3N0YXJ0UG9zKX0pKSx0aGlzLl9tb3Zpbmc9ITF9fSksby5IYW5kbGVyPW8uQ2xhc3MuZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9uKHQpe3RoaXMuX21hcD10fSxlbmFibGU6ZnVuY3Rpb24oKXt0aGlzLl9lbmFibGVkfHwodGhpcy5fZW5hYmxlZD0hMCx0aGlzLmFkZEhvb2tzKCkpfSxkaXNhYmxlOmZ1bmN0aW9uKCl7dGhpcy5fZW5hYmxlZCYmKHRoaXMuX2VuYWJsZWQ9ITEsdGhpcy5yZW1vdmVIb29rcygpKX0sZW5hYmxlZDpmdW5jdGlvbigpe3JldHVybiEhdGhpcy5fZW5hYmxlZH19KSxvLk1hcC5tZXJnZU9wdGlvbnMoe2RyYWdnaW5nOiEwLGluZXJ0aWE6IW8uQnJvd3Nlci5hbmRyb2lkMjMsaW5lcnRpYURlY2VsZXJhdGlvbjozNDAwLGluZXJ0aWFNYXhTcGVlZDoxLzAsaW5lcnRpYVRocmVzaG9sZDpvLkJyb3dzZXIudG91Y2g/MzI6MTgsZWFzZUxpbmVhcml0eTouMjUsd29ybGRDb3B5SnVtcDohMX0pLG8uTWFwLkRyYWc9by5IYW5kbGVyLmV4dGVuZCh7YWRkSG9va3M6ZnVuY3Rpb24oKXtpZighdGhpcy5fZHJhZ2dhYmxlKXt2YXIgdD10aGlzLl9tYXA7dGhpcy5fZHJhZ2dhYmxlPW5ldyBvLkRyYWdnYWJsZSh0Ll9tYXBQYW5lLHQuX2NvbnRhaW5lciksdGhpcy5fZHJhZ2dhYmxlLm9uKHtkcmFnc3RhcnQ6dGhpcy5fb25EcmFnU3RhcnQsZHJhZzp0aGlzLl9vbkRyYWcsZHJhZ2VuZDp0aGlzLl9vbkRyYWdFbmR9LHRoaXMpLHQub3B0aW9ucy53b3JsZENvcHlKdW1wJiYodGhpcy5fZHJhZ2dhYmxlLm9uKCJwcmVkcmFnIix0aGlzLl9vblByZURyYWcsdGhpcyksdC5vbigidmlld3Jlc2V0Iix0aGlzLl9vblZpZXdSZXNldCx0aGlzKSx0LndoZW5SZWFkeSh0aGlzLl9vblZpZXdSZXNldCx0aGlzKSl9dGhpcy5fZHJhZ2dhYmxlLmVuYWJsZSgpfSxyZW1vdmVIb29rczpmdW5jdGlvbigpe3RoaXMuX2RyYWdnYWJsZS5kaXNhYmxlKCl9LG1vdmVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RyYWdnYWJsZSYmdGhpcy5fZHJhZ2dhYmxlLl9tb3ZlZH0sX29uRHJhZ1N0YXJ0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwO3QuX3BhbkFuaW0mJnQuX3BhbkFuaW0uc3RvcCgpLHQuZmlyZSgibW92ZXN0YXJ0IikuZmlyZSgiZHJhZ3N0YXJ0IiksdC5vcHRpb25zLmluZXJ0aWEmJih0aGlzLl9wb3NpdGlvbnM9W10sdGhpcy5fdGltZXM9W10pfSxfb25EcmFnOmZ1bmN0aW9uKCl7aWYodGhpcy5fbWFwLm9wdGlvbnMuaW5lcnRpYSl7dmFyIHQ9dGhpcy5fbGFzdFRpbWU9K25ldyBEYXRlLGU9dGhpcy5fbGFzdFBvcz10aGlzLl9kcmFnZ2FibGUuX25ld1Bvczt0aGlzLl9wb3NpdGlvbnMucHVzaChlKSx0aGlzLl90aW1lcy5wdXNoKHQpLHQtdGhpcy5fdGltZXNbMF0+MjAwJiYodGhpcy5fcG9zaXRpb25zLnNoaWZ0KCksdGhpcy5fdGltZXMuc2hpZnQoKSl9dGhpcy5fbWFwLmZpcmUoIm1vdmUiKS5maXJlKCJkcmFnIil9LF9vblZpZXdSZXNldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcC5nZXRTaXplKCkuX2RpdmlkZUJ5KDIpLGU9dGhpcy5fbWFwLmxhdExuZ1RvTGF5ZXJQb2ludChbMCwwXSk7dGhpcy5faW5pdGlhbFdvcmxkT2Zmc2V0PWUuc3VidHJhY3QodCkueCx0aGlzLl93b3JsZFdpZHRoPXRoaXMuX21hcC5wcm9qZWN0KFswLDE4MF0pLnh9LF9vblByZURyYWc6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl93b3JsZFdpZHRoLGU9TWF0aC5yb3VuZCh0LzIpLGk9dGhpcy5faW5pdGlhbFdvcmxkT2Zmc2V0LG49dGhpcy5fZHJhZ2dhYmxlLl9uZXdQb3MueCxvPShuLWUraSkldCtlLWkscz0obitlK2kpJXQtZS1pLGE9TWF0aC5hYnMobytpKTxNYXRoLmFicyhzK2kpP286czt0aGlzLl9kcmFnZ2FibGUuX25ld1Bvcy54PWF9LF9vbkRyYWdFbmQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbWFwLGk9ZS5vcHRpb25zLG49K25ldyBEYXRlLXRoaXMuX2xhc3RUaW1lLHM9IWkuaW5lcnRpYXx8bj5pLmluZXJ0aWFUaHJlc2hvbGR8fCF0aGlzLl9wb3NpdGlvbnNbMF07aWYoZS5maXJlKCJkcmFnZW5kIix0KSxzKWUuZmlyZSgibW92ZWVuZCIpO2Vsc2V7dmFyIGE9dGhpcy5fbGFzdFBvcy5zdWJ0cmFjdCh0aGlzLl9wb3NpdGlvbnNbMF0pLHI9KHRoaXMuX2xhc3RUaW1lK24tdGhpcy5fdGltZXNbMF0pLzFlMyxoPWkuZWFzZUxpbmVhcml0eSxsPWEubXVsdGlwbHlCeShoL3IpLHU9bC5kaXN0YW5jZVRvKFswLDBdKSxjPU1hdGgubWluKGkuaW5lcnRpYU1heFNwZWVkLHUpLGQ9bC5tdWx0aXBseUJ5KGMvdSkscD1jLyhpLmluZXJ0aWFEZWNlbGVyYXRpb24qaCksXz1kLm11bHRpcGx5QnkoLXAvMikucm91bmQoKTtfLngmJl8ueT8oXz1lLl9saW1pdE9mZnNldChfLGUub3B0aW9ucy5tYXhCb3VuZHMpLG8uVXRpbC5yZXF1ZXN0QW5pbUZyYW1lKGZ1bmN0aW9uKCl7ZS5wYW5CeShfLHtkdXJhdGlvbjpwLGVhc2VMaW5lYXJpdHk6aCxub01vdmVTdGFydDohMH0pfSkpOmUuZmlyZSgibW92ZWVuZCIpfX19KSxvLk1hcC5hZGRJbml0SG9vaygiYWRkSGFuZGxlciIsImRyYWdnaW5nIixvLk1hcC5EcmFnKSxvLk1hcC5tZXJnZU9wdGlvbnMoe2RvdWJsZUNsaWNrWm9vbTohMH0pLG8uTWFwLkRvdWJsZUNsaWNrWm9vbT1vLkhhbmRsZXIuZXh0ZW5kKHthZGRIb29rczpmdW5jdGlvbigpe3RoaXMuX21hcC5vbigiZGJsY2xpY2siLHRoaXMuX29uRG91YmxlQ2xpY2ssdGhpcyl9LHJlbW92ZUhvb2tzOmZ1bmN0aW9uKCl7dGhpcy5fbWFwLm9mZigiZGJsY2xpY2siLHRoaXMuX29uRG91YmxlQ2xpY2ssdGhpcyl9LF9vbkRvdWJsZUNsaWNrOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX21hcCxpPWUuZ2V0Wm9vbSgpKyh0Lm9yaWdpbmFsRXZlbnQuc2hpZnRLZXk/LTE6MSk7ImNlbnRlciI9PT1lLm9wdGlvbnMuZG91YmxlQ2xpY2tab29tP2Uuc2V0Wm9vbShpKTplLnNldFpvb21Bcm91bmQodC5jb250YWluZXJQb2ludCxpKX19KSxvLk1hcC5hZGRJbml0SG9vaygiYWRkSGFuZGxlciIsImRvdWJsZUNsaWNrWm9vbSIsby5NYXAuRG91YmxlQ2xpY2tab29tKSxvLk1hcC5tZXJnZU9wdGlvbnMoe3Njcm9sbFdoZWVsWm9vbTohMH0pLG8uTWFwLlNjcm9sbFdoZWVsWm9vbT1vLkhhbmRsZXIuZXh0ZW5kKHthZGRIb29rczpmdW5jdGlvbigpe28uRG9tRXZlbnQub24odGhpcy5fbWFwLl9jb250YWluZXIsIm1vdXNld2hlZWwiLHRoaXMuX29uV2hlZWxTY3JvbGwsdGhpcyksby5Eb21FdmVudC5vbih0aGlzLl9tYXAuX2NvbnRhaW5lciwiTW96TW91c2VQaXhlbFNjcm9sbCIsby5Eb21FdmVudC5wcmV2ZW50RGVmYXVsdCksdGhpcy5fZGVsdGE9MH0scmVtb3ZlSG9va3M6ZnVuY3Rpb24oKXtvLkRvbUV2ZW50Lm9mZih0aGlzLl9tYXAuX2NvbnRhaW5lciwibW91c2V3aGVlbCIsdGhpcy5fb25XaGVlbFNjcm9sbCksby5Eb21FdmVudC5vZmYodGhpcy5fbWFwLl9jb250YWluZXIsIk1vek1vdXNlUGl4ZWxTY3JvbGwiLG8uRG9tRXZlbnQucHJldmVudERlZmF1bHQpfSxfb25XaGVlbFNjcm9sbDpmdW5jdGlvbih0KXt2YXIgZT1vLkRvbUV2ZW50LmdldFdoZWVsRGVsdGEodCk7dGhpcy5fZGVsdGErPWUsdGhpcy5fbGFzdE1vdXNlUG9zPXRoaXMuX21hcC5tb3VzZUV2ZW50VG9Db250YWluZXJQb2ludCh0KSx0aGlzLl9zdGFydFRpbWV8fCh0aGlzLl9zdGFydFRpbWU9K25ldyBEYXRlKTt2YXIgaT1NYXRoLm1heCg0MC0oK25ldyBEYXRlLXRoaXMuX3N0YXJ0VGltZSksMCk7Y2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKSx0aGlzLl90aW1lcj1zZXRUaW1lb3V0KG8uYmluZCh0aGlzLl9wZXJmb3JtWm9vbSx0aGlzKSxpKSxvLkRvbUV2ZW50LnByZXZlbnREZWZhdWx0KHQpLG8uRG9tRXZlbnQuc3RvcFByb3BhZ2F0aW9uKHQpfSxfcGVyZm9ybVpvb206ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tYXAsZT10aGlzLl9kZWx0YSxpPXQuZ2V0Wm9vbSgpO2U9ZT4wP01hdGguY2VpbChlKTpNYXRoLmZsb29yKGUpLGU9TWF0aC5tYXgoTWF0aC5taW4oZSw0KSwtNCksZT10Ll9saW1pdFpvb20oaStlKS1pLHRoaXMuX2RlbHRhPTAsdGhpcy5fc3RhcnRUaW1lPW51bGwsZSYmKCJjZW50ZXIiPT09dC5vcHRpb25zLnNjcm9sbFdoZWVsWm9vbT90LnNldFpvb20oaStlKTp0LnNldFpvb21Bcm91bmQodGhpcy5fbGFzdE1vdXNlUG9zLGkrZSkpfX0pLG8uTWFwLmFkZEluaXRIb29rKCJhZGRIYW5kbGVyIiwic2Nyb2xsV2hlZWxab29tIixvLk1hcC5TY3JvbGxXaGVlbFpvb20pLG8uZXh0ZW5kKG8uRG9tRXZlbnQse190b3VjaHN0YXJ0Om8uQnJvd3Nlci5tc1BvaW50ZXI/Ik1TUG9pbnRlckRvd24iOm8uQnJvd3Nlci5wb2ludGVyPyJwb2ludGVyZG93biI6InRvdWNoc3RhcnQiLF90b3VjaGVuZDpvLkJyb3dzZXIubXNQb2ludGVyPyJNU1BvaW50ZXJVcCI6by5Ccm93c2VyLnBvaW50ZXI/InBvaW50ZXJ1cCI6InRvdWNoZW5kIixhZGREb3VibGVUYXBMaXN0ZW5lcjpmdW5jdGlvbih0LGksbil7ZnVuY3Rpb24gcyh0KXt2YXIgZTtpZihvLkJyb3dzZXIucG9pbnRlcj8oXy5wdXNoKHQucG9pbnRlcklkKSxlPV8ubGVuZ3RoKTplPXQudG91Y2hlcy5sZW5ndGgsIShlPjEpKXt2YXIgaT1EYXRlLm5vdygpLG49aS0ocnx8aSk7aD10LnRvdWNoZXM/dC50b3VjaGVzWzBdOnQsbD1uPjAmJnU+PW4scj1pfX1mdW5jdGlvbiBhKHQpe2lmKG8uQnJvd3Nlci5wb2ludGVyKXt2YXIgZT1fLmluZGV4T2YodC5wb2ludGVySWQpO2lmKC0xPT09ZSlyZXR1cm47Xy5zcGxpY2UoZSwxKX1pZihsKXtpZihvLkJyb3dzZXIucG9pbnRlcil7dmFyIG4scz17fTtmb3IodmFyIGEgaW4gaCluPWhbYV0sImZ1bmN0aW9uIj09dHlwZW9mIG4/c1thXT1uLmJpbmQoaCk6c1thXT1uO2g9c31oLnR5cGU9ImRibGNsaWNrIixpKGgpLHI9bnVsbH19dmFyIHIsaCxsPSExLHU9MjUwLGM9Il9sZWFmbGV0XyIsZD10aGlzLl90b3VjaHN0YXJ0LHA9dGhpcy5fdG91Y2hlbmQsXz1bXTt0W2MrZCtuXT1zLHRbYytwK25dPWE7dmFyIG09by5Ccm93c2VyLnBvaW50ZXI/ZS5kb2N1bWVudEVsZW1lbnQ6dDtyZXR1cm4gdC5hZGRFdmVudExpc3RlbmVyKGQscywhMSksbS5hZGRFdmVudExpc3RlbmVyKHAsYSwhMSksby5Ccm93c2VyLnBvaW50ZXImJm0uYWRkRXZlbnRMaXN0ZW5lcihvLkRvbUV2ZW50LlBPSU5URVJfQ0FOQ0VMLGEsITEpLHRoaXN9LHJlbW92ZURvdWJsZVRhcExpc3RlbmVyOmZ1bmN0aW9uKHQsaSl7dmFyIG49Il9sZWFmbGV0XyI7cmV0dXJuIHQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLl90b3VjaHN0YXJ0LHRbbit0aGlzLl90b3VjaHN0YXJ0K2ldLCExKSwoby5Ccm93c2VyLnBvaW50ZXI/ZS5kb2N1bWVudEVsZW1lbnQ6dCkucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLl90b3VjaGVuZCx0W24rdGhpcy5fdG91Y2hlbmQraV0sITEpLG8uQnJvd3Nlci5wb2ludGVyJiZlLmRvY3VtZW50RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKG8uRG9tRXZlbnQuUE9JTlRFUl9DQU5DRUwsdFtuK3RoaXMuX3RvdWNoZW5kK2ldLCExKSx0aGlzfX0pLG8uZXh0ZW5kKG8uRG9tRXZlbnQse1BPSU5URVJfRE9XTjpvLkJyb3dzZXIubXNQb2ludGVyPyJNU1BvaW50ZXJEb3duIjoicG9pbnRlcmRvd24iLApQT0lOVEVSX01PVkU6by5Ccm93c2VyLm1zUG9pbnRlcj8iTVNQb2ludGVyTW92ZSI6InBvaW50ZXJtb3ZlIixQT0lOVEVSX1VQOm8uQnJvd3Nlci5tc1BvaW50ZXI/Ik1TUG9pbnRlclVwIjoicG9pbnRlcnVwIixQT0lOVEVSX0NBTkNFTDpvLkJyb3dzZXIubXNQb2ludGVyPyJNU1BvaW50ZXJDYW5jZWwiOiJwb2ludGVyY2FuY2VsIixfcG9pbnRlcnM6W10sX3BvaW50ZXJEb2N1bWVudExpc3RlbmVyOiExLGFkZFBvaW50ZXJMaXN0ZW5lcjpmdW5jdGlvbih0LGUsaSxuKXtzd2l0Y2goZSl7Y2FzZSJ0b3VjaHN0YXJ0IjpyZXR1cm4gdGhpcy5hZGRQb2ludGVyTGlzdGVuZXJTdGFydCh0LGUsaSxuKTtjYXNlInRvdWNoZW5kIjpyZXR1cm4gdGhpcy5hZGRQb2ludGVyTGlzdGVuZXJFbmQodCxlLGksbik7Y2FzZSJ0b3VjaG1vdmUiOnJldHVybiB0aGlzLmFkZFBvaW50ZXJMaXN0ZW5lck1vdmUodCxlLGksbik7ZGVmYXVsdDp0aHJvdyJVbmtub3duIHRvdWNoIGV2ZW50IHR5cGUifX0sYWRkUG9pbnRlckxpc3RlbmVyU3RhcnQ6ZnVuY3Rpb24odCxpLG4scyl7dmFyIGE9Il9sZWFmbGV0XyIscj10aGlzLl9wb2ludGVycyxoPWZ1bmN0aW9uKHQpeyJtb3VzZSIhPT10LnBvaW50ZXJUeXBlJiZ0LnBvaW50ZXJUeXBlIT09dC5NU1BPSU5URVJfVFlQRV9NT1VTRSYmby5Eb21FdmVudC5wcmV2ZW50RGVmYXVsdCh0KTtmb3IodmFyIGU9ITEsaT0wO2k8ci5sZW5ndGg7aSsrKWlmKHJbaV0ucG9pbnRlcklkPT09dC5wb2ludGVySWQpe2U9ITA7YnJlYWt9ZXx8ci5wdXNoKHQpLHQudG91Y2hlcz1yLnNsaWNlKCksdC5jaGFuZ2VkVG91Y2hlcz1bdF0sbih0KX07aWYodFthKyJ0b3VjaHN0YXJ0IitzXT1oLHQuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLlBPSU5URVJfRE9XTixoLCExKSwhdGhpcy5fcG9pbnRlckRvY3VtZW50TGlzdGVuZXIpe3ZhciBsPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8ci5sZW5ndGg7ZSsrKWlmKHJbZV0ucG9pbnRlcklkPT09dC5wb2ludGVySWQpe3Iuc3BsaWNlKGUsMSk7YnJlYWt9fTtlLmRvY3VtZW50RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHRoaXMuUE9JTlRFUl9VUCxsLCExKSxlLmRvY3VtZW50RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHRoaXMuUE9JTlRFUl9DQU5DRUwsbCwhMSksdGhpcy5fcG9pbnRlckRvY3VtZW50TGlzdGVuZXI9ITB9cmV0dXJuIHRoaXN9LGFkZFBvaW50ZXJMaXN0ZW5lck1vdmU6ZnVuY3Rpb24odCxlLGksbil7ZnVuY3Rpb24gbyh0KXtpZih0LnBvaW50ZXJUeXBlIT09dC5NU1BPSU5URVJfVFlQRV9NT1VTRSYmIm1vdXNlIiE9PXQucG9pbnRlclR5cGV8fDAhPT10LmJ1dHRvbnMpe2Zvcih2YXIgZT0wO2U8YS5sZW5ndGg7ZSsrKWlmKGFbZV0ucG9pbnRlcklkPT09dC5wb2ludGVySWQpe2FbZV09dDticmVha310LnRvdWNoZXM9YS5zbGljZSgpLHQuY2hhbmdlZFRvdWNoZXM9W3RdLGkodCl9fXZhciBzPSJfbGVhZmxldF8iLGE9dGhpcy5fcG9pbnRlcnM7cmV0dXJuIHRbcysidG91Y2htb3ZlIituXT1vLHQuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLlBPSU5URVJfTU9WRSxvLCExKSx0aGlzfSxhZGRQb2ludGVyTGlzdGVuZXJFbmQ6ZnVuY3Rpb24odCxlLGksbil7dmFyIG89Il9sZWFmbGV0XyIscz10aGlzLl9wb2ludGVycyxhPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8cy5sZW5ndGg7ZSsrKWlmKHNbZV0ucG9pbnRlcklkPT09dC5wb2ludGVySWQpe3Muc3BsaWNlKGUsMSk7YnJlYWt9dC50b3VjaGVzPXMuc2xpY2UoKSx0LmNoYW5nZWRUb3VjaGVzPVt0XSxpKHQpfTtyZXR1cm4gdFtvKyJ0b3VjaGVuZCIrbl09YSx0LmFkZEV2ZW50TGlzdGVuZXIodGhpcy5QT0lOVEVSX1VQLGEsITEpLHQuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLlBPSU5URVJfQ0FOQ0VMLGEsITEpLHRoaXN9LHJlbW92ZVBvaW50ZXJMaXN0ZW5lcjpmdW5jdGlvbih0LGUsaSl7dmFyIG49Il9sZWFmbGV0XyIsbz10W24rZStpXTtzd2l0Y2goZSl7Y2FzZSJ0b3VjaHN0YXJ0Ijp0LnJlbW92ZUV2ZW50TGlzdGVuZXIodGhpcy5QT0lOVEVSX0RPV04sbywhMSk7YnJlYWs7Y2FzZSJ0b3VjaG1vdmUiOnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLlBPSU5URVJfTU9WRSxvLCExKTticmVhaztjYXNlInRvdWNoZW5kIjp0LnJlbW92ZUV2ZW50TGlzdGVuZXIodGhpcy5QT0lOVEVSX1VQLG8sITEpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLlBPSU5URVJfQ0FOQ0VMLG8sITEpfXJldHVybiB0aGlzfX0pLG8uTWFwLm1lcmdlT3B0aW9ucyh7dG91Y2hab29tOm8uQnJvd3Nlci50b3VjaCYmIW8uQnJvd3Nlci5hbmRyb2lkMjMsYm91bmNlQXRab29tTGltaXRzOiEwfSksby5NYXAuVG91Y2hab29tPW8uSGFuZGxlci5leHRlbmQoe2FkZEhvb2tzOmZ1bmN0aW9uKCl7by5Eb21FdmVudC5vbih0aGlzLl9tYXAuX2NvbnRhaW5lciwidG91Y2hzdGFydCIsdGhpcy5fb25Ub3VjaFN0YXJ0LHRoaXMpfSxyZW1vdmVIb29rczpmdW5jdGlvbigpe28uRG9tRXZlbnQub2ZmKHRoaXMuX21hcC5fY29udGFpbmVyLCJ0b3VjaHN0YXJ0Iix0aGlzLl9vblRvdWNoU3RhcnQsdGhpcyl9LF9vblRvdWNoU3RhcnQ6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fbWFwO2lmKHQudG91Y2hlcyYmMj09PXQudG91Y2hlcy5sZW5ndGgmJiFpLl9hbmltYXRpbmdab29tJiYhdGhpcy5fem9vbWluZyl7dmFyIG49aS5tb3VzZUV2ZW50VG9MYXllclBvaW50KHQudG91Y2hlc1swXSkscz1pLm1vdXNlRXZlbnRUb0xheWVyUG9pbnQodC50b3VjaGVzWzFdKSxhPWkuX2dldENlbnRlckxheWVyUG9pbnQoKTt0aGlzLl9zdGFydENlbnRlcj1uLmFkZChzKS5fZGl2aWRlQnkoMiksdGhpcy5fc3RhcnREaXN0PW4uZGlzdGFuY2VUbyhzKSx0aGlzLl9tb3ZlZD0hMSx0aGlzLl96b29taW5nPSEwLHRoaXMuX2NlbnRlck9mZnNldD1hLnN1YnRyYWN0KHRoaXMuX3N0YXJ0Q2VudGVyKSxpLl9wYW5BbmltJiZpLl9wYW5BbmltLnN0b3AoKSxvLkRvbUV2ZW50Lm9uKGUsInRvdWNobW92ZSIsdGhpcy5fb25Ub3VjaE1vdmUsdGhpcykub24oZSwidG91Y2hlbmQiLHRoaXMuX29uVG91Y2hFbmQsdGhpcyksby5Eb21FdmVudC5wcmV2ZW50RGVmYXVsdCh0KX19LF9vblRvdWNoTW92ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9tYXA7aWYodC50b3VjaGVzJiYyPT09dC50b3VjaGVzLmxlbmd0aCYmdGhpcy5fem9vbWluZyl7dmFyIGk9ZS5tb3VzZUV2ZW50VG9MYXllclBvaW50KHQudG91Y2hlc1swXSksbj1lLm1vdXNlRXZlbnRUb0xheWVyUG9pbnQodC50b3VjaGVzWzFdKTt0aGlzLl9zY2FsZT1pLmRpc3RhbmNlVG8obikvdGhpcy5fc3RhcnREaXN0LHRoaXMuX2RlbHRhPWkuX2FkZChuKS5fZGl2aWRlQnkoMikuX3N1YnRyYWN0KHRoaXMuX3N0YXJ0Q2VudGVyKSwxIT09dGhpcy5fc2NhbGUmJihlLm9wdGlvbnMuYm91bmNlQXRab29tTGltaXRzfHwhKGUuZ2V0Wm9vbSgpPT09ZS5nZXRNaW5ab29tKCkmJnRoaXMuX3NjYWxlPDF8fGUuZ2V0Wm9vbSgpPT09ZS5nZXRNYXhab29tKCkmJnRoaXMuX3NjYWxlPjEpKSYmKHRoaXMuX21vdmVkfHwoby5Eb21VdGlsLmFkZENsYXNzKGUuX21hcFBhbmUsImxlYWZsZXQtdG91Y2hpbmciKSxlLmZpcmUoIm1vdmVzdGFydCIpLmZpcmUoInpvb21zdGFydCIpLHRoaXMuX21vdmVkPSEwKSxvLlV0aWwuY2FuY2VsQW5pbUZyYW1lKHRoaXMuX2FuaW1SZXF1ZXN0KSx0aGlzLl9hbmltUmVxdWVzdD1vLlV0aWwucmVxdWVzdEFuaW1GcmFtZSh0aGlzLl91cGRhdGVPbk1vdmUsdGhpcywhMCx0aGlzLl9tYXAuX2NvbnRhaW5lciksby5Eb21FdmVudC5wcmV2ZW50RGVmYXVsdCh0KSl9fSxfdXBkYXRlT25Nb3ZlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwLGU9dGhpcy5fZ2V0U2NhbGVPcmlnaW4oKSxpPXQubGF5ZXJQb2ludFRvTGF0TG5nKGUpLG49dC5nZXRTY2FsZVpvb20odGhpcy5fc2NhbGUpO3QuX2FuaW1hdGVab29tKGksbix0aGlzLl9zdGFydENlbnRlcix0aGlzLl9zY2FsZSx0aGlzLl9kZWx0YSwhMSwhMCl9LF9vblRvdWNoRW5kOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX21vdmVkfHwhdGhpcy5fem9vbWluZylyZXR1cm4gdm9pZCh0aGlzLl96b29taW5nPSExKTt2YXIgdD10aGlzLl9tYXA7dGhpcy5fem9vbWluZz0hMSxvLkRvbVV0aWwucmVtb3ZlQ2xhc3ModC5fbWFwUGFuZSwibGVhZmxldC10b3VjaGluZyIpLG8uVXRpbC5jYW5jZWxBbmltRnJhbWUodGhpcy5fYW5pbVJlcXVlc3QpLG8uRG9tRXZlbnQub2ZmKGUsInRvdWNobW92ZSIsdGhpcy5fb25Ub3VjaE1vdmUpLm9mZihlLCJ0b3VjaGVuZCIsdGhpcy5fb25Ub3VjaEVuZCk7dmFyIGk9dGhpcy5fZ2V0U2NhbGVPcmlnaW4oKSxuPXQubGF5ZXJQb2ludFRvTGF0TG5nKGkpLHM9dC5nZXRab29tKCksYT10LmdldFNjYWxlWm9vbSh0aGlzLl9zY2FsZSktcyxyPWE+MD9NYXRoLmNlaWwoYSk6TWF0aC5mbG9vcihhKSxoPXQuX2xpbWl0Wm9vbShzK3IpLGw9dC5nZXRab29tU2NhbGUoaCkvdGhpcy5fc2NhbGU7dC5fYW5pbWF0ZVpvb20obixoLGksbCl9LF9nZXRTY2FsZU9yaWdpbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2NlbnRlck9mZnNldC5zdWJ0cmFjdCh0aGlzLl9kZWx0YSkuZGl2aWRlQnkodGhpcy5fc2NhbGUpO3JldHVybiB0aGlzLl9zdGFydENlbnRlci5hZGQodCl9fSksby5NYXAuYWRkSW5pdEhvb2soImFkZEhhbmRsZXIiLCJ0b3VjaFpvb20iLG8uTWFwLlRvdWNoWm9vbSksby5NYXAubWVyZ2VPcHRpb25zKHt0YXA6ITAsdGFwVG9sZXJhbmNlOjE1fSksby5NYXAuVGFwPW8uSGFuZGxlci5leHRlbmQoe2FkZEhvb2tzOmZ1bmN0aW9uKCl7by5Eb21FdmVudC5vbih0aGlzLl9tYXAuX2NvbnRhaW5lciwidG91Y2hzdGFydCIsdGhpcy5fb25Eb3duLHRoaXMpfSxyZW1vdmVIb29rczpmdW5jdGlvbigpe28uRG9tRXZlbnQub2ZmKHRoaXMuX21hcC5fY29udGFpbmVyLCJ0b3VjaHN0YXJ0Iix0aGlzLl9vbkRvd24sdGhpcyl9LF9vbkRvd246ZnVuY3Rpb24odCl7aWYodC50b3VjaGVzKXtpZihvLkRvbUV2ZW50LnByZXZlbnREZWZhdWx0KHQpLHRoaXMuX2ZpcmVDbGljaz0hMCx0LnRvdWNoZXMubGVuZ3RoPjEpcmV0dXJuIHRoaXMuX2ZpcmVDbGljaz0hMSx2b2lkIGNsZWFyVGltZW91dCh0aGlzLl9ob2xkVGltZW91dCk7dmFyIGk9dC50b3VjaGVzWzBdLG49aS50YXJnZXQ7dGhpcy5fc3RhcnRQb3M9dGhpcy5fbmV3UG9zPW5ldyBvLlBvaW50KGkuY2xpZW50WCxpLmNsaWVudFkpLG4udGFnTmFtZSYmImEiPT09bi50YWdOYW1lLnRvTG93ZXJDYXNlKCkmJm8uRG9tVXRpbC5hZGRDbGFzcyhuLCJsZWFmbGV0LWFjdGl2ZSIpLHRoaXMuX2hvbGRUaW1lb3V0PXNldFRpbWVvdXQoby5iaW5kKGZ1bmN0aW9uKCl7dGhpcy5faXNUYXBWYWxpZCgpJiYodGhpcy5fZmlyZUNsaWNrPSExLHRoaXMuX29uVXAoKSx0aGlzLl9zaW11bGF0ZUV2ZW50KCJjb250ZXh0bWVudSIsaSkpfSx0aGlzKSwxZTMpLG8uRG9tRXZlbnQub24oZSwidG91Y2htb3ZlIix0aGlzLl9vbk1vdmUsdGhpcykub24oZSwidG91Y2hlbmQiLHRoaXMuX29uVXAsdGhpcyl9fSxfb25VcDpmdW5jdGlvbih0KXtpZihjbGVhclRpbWVvdXQodGhpcy5faG9sZFRpbWVvdXQpLG8uRG9tRXZlbnQub2ZmKGUsInRvdWNobW92ZSIsdGhpcy5fb25Nb3ZlLHRoaXMpLm9mZihlLCJ0b3VjaGVuZCIsdGhpcy5fb25VcCx0aGlzKSx0aGlzLl9maXJlQ2xpY2smJnQmJnQuY2hhbmdlZFRvdWNoZXMpe3ZhciBpPXQuY2hhbmdlZFRvdWNoZXNbMF0sbj1pLnRhcmdldDtuJiZuLnRhZ05hbWUmJiJhIj09PW4udGFnTmFtZS50b0xvd2VyQ2FzZSgpJiZvLkRvbVV0aWwucmVtb3ZlQ2xhc3MobiwibGVhZmxldC1hY3RpdmUiKSx0aGlzLl9pc1RhcFZhbGlkKCkmJnRoaXMuX3NpbXVsYXRlRXZlbnQoImNsaWNrIixpKX19LF9pc1RhcFZhbGlkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25ld1Bvcy5kaXN0YW5jZVRvKHRoaXMuX3N0YXJ0UG9zKTw9dGhpcy5fbWFwLm9wdGlvbnMudGFwVG9sZXJhbmNlfSxfb25Nb3ZlOmZ1bmN0aW9uKHQpe3ZhciBlPXQudG91Y2hlc1swXTt0aGlzLl9uZXdQb3M9bmV3IG8uUG9pbnQoZS5jbGllbnRYLGUuY2xpZW50WSl9LF9zaW11bGF0ZUV2ZW50OmZ1bmN0aW9uKGksbil7dmFyIG89ZS5jcmVhdGVFdmVudCgiTW91c2VFdmVudHMiKTtvLl9zaW11bGF0ZWQ9ITAsbi50YXJnZXQuX3NpbXVsYXRlZENsaWNrPSEwLG8uaW5pdE1vdXNlRXZlbnQoaSwhMCwhMCx0LDEsbi5zY3JlZW5YLG4uc2NyZWVuWSxuLmNsaWVudFgsbi5jbGllbnRZLCExLCExLCExLCExLDAsbnVsbCksbi50YXJnZXQuZGlzcGF0Y2hFdmVudChvKX19KSxvLkJyb3dzZXIudG91Y2gmJiFvLkJyb3dzZXIucG9pbnRlciYmby5NYXAuYWRkSW5pdEhvb2soImFkZEhhbmRsZXIiLCJ0YXAiLG8uTWFwLlRhcCksby5NYXAubWVyZ2VPcHRpb25zKHtib3hab29tOiEwfSksby5NYXAuQm94Wm9vbT1vLkhhbmRsZXIuZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9uKHQpe3RoaXMuX21hcD10LHRoaXMuX2NvbnRhaW5lcj10Ll9jb250YWluZXIsdGhpcy5fcGFuZT10Ll9wYW5lcy5vdmVybGF5UGFuZSx0aGlzLl9tb3ZlZD0hMX0sYWRkSG9va3M6ZnVuY3Rpb24oKXtvLkRvbUV2ZW50Lm9uKHRoaXMuX2NvbnRhaW5lciwibW91c2Vkb3duIix0aGlzLl9vbk1vdXNlRG93bix0aGlzKX0scmVtb3ZlSG9va3M6ZnVuY3Rpb24oKXtvLkRvbUV2ZW50Lm9mZih0aGlzLl9jb250YWluZXIsIm1vdXNlZG93biIsdGhpcy5fb25Nb3VzZURvd24pLHRoaXMuX21vdmVkPSExfSxtb3ZlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3ZlZH0sX29uTW91c2VEb3duOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tb3ZlZD0hMSwhdC5zaGlmdEtleXx8MSE9PXQud2hpY2gmJjEhPT10LmJ1dHRvbj8hMTooby5Eb21VdGlsLmRpc2FibGVUZXh0U2VsZWN0aW9uKCksby5Eb21VdGlsLmRpc2FibGVJbWFnZURyYWcoKSx0aGlzLl9zdGFydExheWVyUG9pbnQ9dGhpcy5fbWFwLm1vdXNlRXZlbnRUb0xheWVyUG9pbnQodCksdm9pZCBvLkRvbUV2ZW50Lm9uKGUsIm1vdXNlbW92ZSIsdGhpcy5fb25Nb3VzZU1vdmUsdGhpcykub24oZSwibW91c2V1cCIsdGhpcy5fb25Nb3VzZVVwLHRoaXMpLm9uKGUsImtleWRvd24iLHRoaXMuX29uS2V5RG93bix0aGlzKSl9LF9vbk1vdXNlTW92ZTpmdW5jdGlvbih0KXt0aGlzLl9tb3ZlZHx8KHRoaXMuX2JveD1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLCJsZWFmbGV0LXpvb20tYm94Iix0aGlzLl9wYW5lKSxvLkRvbVV0aWwuc2V0UG9zaXRpb24odGhpcy5fYm94LHRoaXMuX3N0YXJ0TGF5ZXJQb2ludCksdGhpcy5fY29udGFpbmVyLnN0eWxlLmN1cnNvcj0iY3Jvc3NoYWlyIix0aGlzLl9tYXAuZmlyZSgiYm94em9vbXN0YXJ0IikpO3ZhciBlPXRoaXMuX3N0YXJ0TGF5ZXJQb2ludCxpPXRoaXMuX2JveCxuPXRoaXMuX21hcC5tb3VzZUV2ZW50VG9MYXllclBvaW50KHQpLHM9bi5zdWJ0cmFjdChlKSxhPW5ldyBvLlBvaW50KE1hdGgubWluKG4ueCxlLngpLE1hdGgubWluKG4ueSxlLnkpKTtvLkRvbVV0aWwuc2V0UG9zaXRpb24oaSxhKSx0aGlzLl9tb3ZlZD0hMCxpLnN0eWxlLndpZHRoPU1hdGgubWF4KDAsTWF0aC5hYnMocy54KS00KSsicHgiLGkuc3R5bGUuaGVpZ2h0PU1hdGgubWF4KDAsTWF0aC5hYnMocy55KS00KSsicHgifSxfZmluaXNoOmZ1bmN0aW9uKCl7dGhpcy5fbW92ZWQmJih0aGlzLl9wYW5lLnJlbW92ZUNoaWxkKHRoaXMuX2JveCksdGhpcy5fY29udGFpbmVyLnN0eWxlLmN1cnNvcj0iIiksby5Eb21VdGlsLmVuYWJsZVRleHRTZWxlY3Rpb24oKSxvLkRvbVV0aWwuZW5hYmxlSW1hZ2VEcmFnKCksby5Eb21FdmVudC5vZmYoZSwibW91c2Vtb3ZlIix0aGlzLl9vbk1vdXNlTW92ZSkub2ZmKGUsIm1vdXNldXAiLHRoaXMuX29uTW91c2VVcCkub2ZmKGUsImtleWRvd24iLHRoaXMuX29uS2V5RG93bil9LF9vbk1vdXNlVXA6ZnVuY3Rpb24odCl7dGhpcy5fZmluaXNoKCk7dmFyIGU9dGhpcy5fbWFwLGk9ZS5tb3VzZUV2ZW50VG9MYXllclBvaW50KHQpO2lmKCF0aGlzLl9zdGFydExheWVyUG9pbnQuZXF1YWxzKGkpKXt2YXIgbj1uZXcgby5MYXRMbmdCb3VuZHMoZS5sYXllclBvaW50VG9MYXRMbmcodGhpcy5fc3RhcnRMYXllclBvaW50KSxlLmxheWVyUG9pbnRUb0xhdExuZyhpKSk7ZS5maXRCb3VuZHMobiksZS5maXJlKCJib3h6b29tZW5kIix7Ym94Wm9vbUJvdW5kczpufSl9fSxfb25LZXlEb3duOmZ1bmN0aW9uKHQpezI3PT09dC5rZXlDb2RlJiZ0aGlzLl9maW5pc2goKX19KSxvLk1hcC5hZGRJbml0SG9vaygiYWRkSGFuZGxlciIsImJveFpvb20iLG8uTWFwLkJveFpvb20pLG8uTWFwLm1lcmdlT3B0aW9ucyh7a2V5Ym9hcmQ6ITAsa2V5Ym9hcmRQYW5PZmZzZXQ6ODAsa2V5Ym9hcmRab29tT2Zmc2V0OjF9KSxvLk1hcC5LZXlib2FyZD1vLkhhbmRsZXIuZXh0ZW5kKHtrZXlDb2Rlczp7bGVmdDpbMzddLHJpZ2h0OlszOV0sZG93bjpbNDBdLHVwOlszOF0sem9vbUluOlsxODcsMTA3LDYxLDE3MV0sem9vbU91dDpbMTg5LDEwOSwxNzNdfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe3RoaXMuX21hcD10LHRoaXMuX3NldFBhbk9mZnNldCh0Lm9wdGlvbnMua2V5Ym9hcmRQYW5PZmZzZXQpLHRoaXMuX3NldFpvb21PZmZzZXQodC5vcHRpb25zLmtleWJvYXJkWm9vbU9mZnNldCl9LGFkZEhvb2tzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwLl9jb250YWluZXI7LTE9PT10LnRhYkluZGV4JiYodC50YWJJbmRleD0iMCIpLG8uRG9tRXZlbnQub24odCwiZm9jdXMiLHRoaXMuX29uRm9jdXMsdGhpcykub24odCwiYmx1ciIsdGhpcy5fb25CbHVyLHRoaXMpLm9uKHQsIm1vdXNlZG93biIsdGhpcy5fb25Nb3VzZURvd24sdGhpcyksdGhpcy5fbWFwLm9uKCJmb2N1cyIsdGhpcy5fYWRkSG9va3MsdGhpcykub24oImJsdXIiLHRoaXMuX3JlbW92ZUhvb2tzLHRoaXMpfSxyZW1vdmVIb29rczpmdW5jdGlvbigpe3RoaXMuX3JlbW92ZUhvb2tzKCk7dmFyIHQ9dGhpcy5fbWFwLl9jb250YWluZXI7by5Eb21FdmVudC5vZmYodCwiZm9jdXMiLHRoaXMuX29uRm9jdXMsdGhpcykub2ZmKHQsImJsdXIiLHRoaXMuX29uQmx1cix0aGlzKS5vZmYodCwibW91c2Vkb3duIix0aGlzLl9vbk1vdXNlRG93bix0aGlzKSx0aGlzLl9tYXAub2ZmKCJmb2N1cyIsdGhpcy5fYWRkSG9va3MsdGhpcykub2ZmKCJibHVyIix0aGlzLl9yZW1vdmVIb29rcyx0aGlzKX0sX29uTW91c2VEb3duOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX2ZvY3VzZWQpe3ZhciBpPWUuYm9keSxuPWUuZG9jdW1lbnRFbGVtZW50LG89aS5zY3JvbGxUb3B8fG4uc2Nyb2xsVG9wLHM9aS5zY3JvbGxMZWZ0fHxuLnNjcm9sbExlZnQ7dGhpcy5fbWFwLl9jb250YWluZXIuZm9jdXMoKSx0LnNjcm9sbFRvKHMsbyl9fSxfb25Gb2N1czpmdW5jdGlvbigpe3RoaXMuX2ZvY3VzZWQ9ITAsdGhpcy5fbWFwLmZpcmUoImZvY3VzIil9LF9vbkJsdXI6ZnVuY3Rpb24oKXt0aGlzLl9mb2N1c2VkPSExLHRoaXMuX21hcC5maXJlKCJibHVyIil9LF9zZXRQYW5PZmZzZXQ6ZnVuY3Rpb24odCl7dmFyIGUsaSxuPXRoaXMuX3BhbktleXM9e30sbz10aGlzLmtleUNvZGVzO2ZvcihlPTAsaT1vLmxlZnQubGVuZ3RoO2k+ZTtlKyspbltvLmxlZnRbZV1dPVstMSp0LDBdO2ZvcihlPTAsaT1vLnJpZ2h0Lmxlbmd0aDtpPmU7ZSsrKW5bby5yaWdodFtlXV09W3QsMF07Zm9yKGU9MCxpPW8uZG93bi5sZW5ndGg7aT5lO2UrKyluW28uZG93bltlXV09WzAsdF07Zm9yKGU9MCxpPW8udXAubGVuZ3RoO2k+ZTtlKyspbltvLnVwW2VdXT1bMCwtMSp0XX0sX3NldFpvb21PZmZzZXQ6ZnVuY3Rpb24odCl7dmFyIGUsaSxuPXRoaXMuX3pvb21LZXlzPXt9LG89dGhpcy5rZXlDb2Rlcztmb3IoZT0wLGk9by56b29tSW4ubGVuZ3RoO2k+ZTtlKyspbltvLnpvb21JbltlXV09dDtmb3IoZT0wLGk9by56b29tT3V0Lmxlbmd0aDtpPmU7ZSsrKW5bby56b29tT3V0W2VdXT0tdH0sX2FkZEhvb2tzOmZ1bmN0aW9uKCl7by5Eb21FdmVudC5vbihlLCJrZXlkb3duIix0aGlzLl9vbktleURvd24sdGhpcyl9LF9yZW1vdmVIb29rczpmdW5jdGlvbigpe28uRG9tRXZlbnQub2ZmKGUsImtleWRvd24iLHRoaXMuX29uS2V5RG93bix0aGlzKX0sX29uS2V5RG93bjpmdW5jdGlvbih0KXt2YXIgZT10LmtleUNvZGUsaT10aGlzLl9tYXA7aWYoZSBpbiB0aGlzLl9wYW5LZXlzKXtpZihpLl9wYW5BbmltJiZpLl9wYW5BbmltLl9pblByb2dyZXNzKXJldHVybjtpLnBhbkJ5KHRoaXMuX3BhbktleXNbZV0pLGkub3B0aW9ucy5tYXhCb3VuZHMmJmkucGFuSW5zaWRlQm91bmRzKGkub3B0aW9ucy5tYXhCb3VuZHMpfWVsc2V7aWYoIShlIGluIHRoaXMuX3pvb21LZXlzKSlyZXR1cm47aS5zZXRab29tKGkuZ2V0Wm9vbSgpK3RoaXMuX3pvb21LZXlzW2VdKX1vLkRvbUV2ZW50LnN0b3AodCl9fSksby5NYXAuYWRkSW5pdEhvb2soImFkZEhhbmRsZXIiLCJrZXlib2FyZCIsby5NYXAuS2V5Ym9hcmQpLG8uSGFuZGxlci5NYXJrZXJEcmFnPW8uSGFuZGxlci5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24odCl7dGhpcy5fbWFya2VyPXR9LGFkZEhvb2tzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFya2VyLl9pY29uO3RoaXMuX2RyYWdnYWJsZXx8KHRoaXMuX2RyYWdnYWJsZT1uZXcgby5EcmFnZ2FibGUodCx0KSksdGhpcy5fZHJhZ2dhYmxlLm9uKCJkcmFnc3RhcnQiLHRoaXMuX29uRHJhZ1N0YXJ0LHRoaXMpLm9uKCJkcmFnIix0aGlzLl9vbkRyYWcsdGhpcykub24oImRyYWdlbmQiLHRoaXMuX29uRHJhZ0VuZCx0aGlzKSx0aGlzLl9kcmFnZ2FibGUuZW5hYmxlKCksby5Eb21VdGlsLmFkZENsYXNzKHRoaXMuX21hcmtlci5faWNvbiwibGVhZmxldC1tYXJrZXItZHJhZ2dhYmxlIil9LHJlbW92ZUhvb2tzOmZ1bmN0aW9uKCl7dGhpcy5fZHJhZ2dhYmxlLm9mZigiZHJhZ3N0YXJ0Iix0aGlzLl9vbkRyYWdTdGFydCx0aGlzKS5vZmYoImRyYWciLHRoaXMuX29uRHJhZyx0aGlzKS5vZmYoImRyYWdlbmQiLHRoaXMuX29uRHJhZ0VuZCx0aGlzKSx0aGlzLl9kcmFnZ2FibGUuZGlzYWJsZSgpLG8uRG9tVXRpbC5yZW1vdmVDbGFzcyh0aGlzLl9tYXJrZXIuX2ljb24sImxlYWZsZXQtbWFya2VyLWRyYWdnYWJsZSIpfSxtb3ZlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kcmFnZ2FibGUmJnRoaXMuX2RyYWdnYWJsZS5fbW92ZWR9LF9vbkRyYWdTdGFydDpmdW5jdGlvbigpe3RoaXMuX21hcmtlci5jbG9zZVBvcHVwKCkuZmlyZSgibW92ZXN0YXJ0IikuZmlyZSgiZHJhZ3N0YXJ0Iil9LF9vbkRyYWc6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tYXJrZXIsZT10Ll9zaGFkb3csaT1vLkRvbVV0aWwuZ2V0UG9zaXRpb24odC5faWNvbiksbj10Ll9tYXAubGF5ZXJQb2ludFRvTGF0TG5nKGkpO2UmJm8uRG9tVXRpbC5zZXRQb3NpdGlvbihlLGkpLHQuX2xhdGxuZz1uLHQuZmlyZSgibW92ZSIse2xhdGxuZzpufSkuZmlyZSgiZHJhZyIpfSxfb25EcmFnRW5kOmZ1bmN0aW9uKHQpe3RoaXMuX21hcmtlci5maXJlKCJtb3ZlZW5kIikuZmlyZSgiZHJhZ2VuZCIsdCl9fSksby5Db250cm9sPW8uQ2xhc3MuZXh0ZW5kKHtvcHRpb25zOntwb3NpdGlvbjoidG9wcmlnaHQifSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe28uc2V0T3B0aW9ucyh0aGlzLHQpfSxnZXRQb3NpdGlvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMucG9zaXRpb259LHNldFBvc2l0aW9uOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX21hcDtyZXR1cm4gZSYmZS5yZW1vdmVDb250cm9sKHRoaXMpLHRoaXMub3B0aW9ucy5wb3NpdGlvbj10LGUmJmUuYWRkQ29udHJvbCh0aGlzKSx0aGlzfSxnZXRDb250YWluZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGFpbmVyfSxhZGRUbzpmdW5jdGlvbih0KXt0aGlzLl9tYXA9dDt2YXIgZT10aGlzLl9jb250YWluZXI9dGhpcy5vbkFkZCh0KSxpPXRoaXMuZ2V0UG9zaXRpb24oKSxuPXQuX2NvbnRyb2xDb3JuZXJzW2ldO3JldHVybiBvLkRvbVV0aWwuYWRkQ2xhc3MoZSwibGVhZmxldC1jb250cm9sIiksLTEhPT1pLmluZGV4T2YoImJvdHRvbSIpP24uaW5zZXJ0QmVmb3JlKGUsbi5maXJzdENoaWxkKTpuLmFwcGVuZENoaWxkKGUpLHRoaXN9LHJlbW92ZUZyb206ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXRQb3NpdGlvbigpLGk9dC5fY29udHJvbENvcm5lcnNbZV07cmV0dXJuIGkucmVtb3ZlQ2hpbGQodGhpcy5fY29udGFpbmVyKSx0aGlzLl9tYXA9bnVsbCx0aGlzLm9uUmVtb3ZlJiZ0aGlzLm9uUmVtb3ZlKHQpLHRoaXN9LF9yZWZvY3VzT25NYXA6ZnVuY3Rpb24oKXt0aGlzLl9tYXAmJnRoaXMuX21hcC5nZXRDb250YWluZXIoKS5mb2N1cygpfX0pLG8uY29udHJvbD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IG8uQ29udHJvbCh0KX0sby5NYXAuaW5jbHVkZSh7YWRkQ29udHJvbDpmdW5jdGlvbih0KXtyZXR1cm4gdC5hZGRUbyh0aGlzKSx0aGlzfSxyZW1vdmVDb250cm9sOmZ1bmN0aW9uKHQpe3JldHVybiB0LnJlbW92ZUZyb20odGhpcyksdGhpc30sX2luaXRDb250cm9sUG9zOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LHMpe3ZhciBhPWkrdCsiICIraStzO2VbdCtzXT1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLGEsbil9dmFyIGU9dGhpcy5fY29udHJvbENvcm5lcnM9e30saT0ibGVhZmxldC0iLG49dGhpcy5fY29udHJvbENvbnRhaW5lcj1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLGkrImNvbnRyb2wtY29udGFpbmVyIix0aGlzLl9jb250YWluZXIpO3QoInRvcCIsImxlZnQiKSx0KCJ0b3AiLCJyaWdodCIpLHQoImJvdHRvbSIsImxlZnQiKSx0KCJib3R0b20iLCJyaWdodCIpfSxfY2xlYXJDb250cm9sUG9zOmZ1bmN0aW9uKCl7dGhpcy5fY29udGFpbmVyLnJlbW92ZUNoaWxkKHRoaXMuX2NvbnRyb2xDb250YWluZXIpfX0pLG8uQ29udHJvbC5ab29tPW8uQ29udHJvbC5leHRlbmQoe29wdGlvbnM6e3Bvc2l0aW9uOiJ0b3BsZWZ0Iix6b29tSW5UZXh0OiIrIix6b29tSW5UaXRsZToiWm9vbSBpbiIsem9vbU91dFRleHQ6Ii0iLHpvb21PdXRUaXRsZToiWm9vbSBvdXQifSxvbkFkZDpmdW5jdGlvbih0KXt2YXIgZT0ibGVhZmxldC1jb250cm9sLXpvb20iLGk9by5Eb21VdGlsLmNyZWF0ZSgiZGl2IixlKyIgbGVhZmxldC1iYXIiKTtyZXR1cm4gdGhpcy5fbWFwPXQsdGhpcy5fem9vbUluQnV0dG9uPXRoaXMuX2NyZWF0ZUJ1dHRvbih0aGlzLm9wdGlvbnMuem9vbUluVGV4dCx0aGlzLm9wdGlvbnMuem9vbUluVGl0bGUsZSsiLWluIixpLHRoaXMuX3pvb21Jbix0aGlzKSx0aGlzLl96b29tT3V0QnV0dG9uPXRoaXMuX2NyZWF0ZUJ1dHRvbih0aGlzLm9wdGlvbnMuem9vbU91dFRleHQsdGhpcy5vcHRpb25zLnpvb21PdXRUaXRsZSxlKyItb3V0IixpLHRoaXMuX3pvb21PdXQsdGhpcyksdGhpcy5fdXBkYXRlRGlzYWJsZWQoKSx0Lm9uKCJ6b29tZW5kIHpvb21sZXZlbHNjaGFuZ2UiLHRoaXMuX3VwZGF0ZURpc2FibGVkLHRoaXMpLGl9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe3Qub2ZmKCJ6b29tZW5kIHpvb21sZXZlbHNjaGFuZ2UiLHRoaXMuX3VwZGF0ZURpc2FibGVkLHRoaXMpfSxfem9vbUluOmZ1bmN0aW9uKHQpe3RoaXMuX21hcC56b29tSW4odC5zaGlmdEtleT8zOjEpfSxfem9vbU91dDpmdW5jdGlvbih0KXt0aGlzLl9tYXAuem9vbU91dCh0LnNoaWZ0S2V5PzM6MSl9LF9jcmVhdGVCdXR0b246ZnVuY3Rpb24odCxlLGksbixzLGEpe3ZhciByPW8uRG9tVXRpbC5jcmVhdGUoImEiLGksbik7ci5pbm5lckhUTUw9dCxyLmhyZWY9IiMiLHIudGl0bGU9ZTt2YXIgaD1vLkRvbUV2ZW50LnN0b3BQcm9wYWdhdGlvbjtyZXR1cm4gby5Eb21FdmVudC5vbihyLCJjbGljayIsaCkub24ociwibW91c2Vkb3duIixoKS5vbihyLCJkYmxjbGljayIsaCkub24ociwiY2xpY2siLG8uRG9tRXZlbnQucHJldmVudERlZmF1bHQpLm9uKHIsImNsaWNrIixzLGEpLm9uKHIsImNsaWNrIix0aGlzLl9yZWZvY3VzT25NYXAsYSkscn0sX3VwZGF0ZURpc2FibGVkOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwLGU9ImxlYWZsZXQtZGlzYWJsZWQiO28uRG9tVXRpbC5yZW1vdmVDbGFzcyh0aGlzLl96b29tSW5CdXR0b24sZSksby5Eb21VdGlsLnJlbW92ZUNsYXNzKHRoaXMuX3pvb21PdXRCdXR0b24sZSksdC5fem9vbT09PXQuZ2V0TWluWm9vbSgpJiZvLkRvbVV0aWwuYWRkQ2xhc3ModGhpcy5fem9vbU91dEJ1dHRvbixlKSx0Ll96b29tPT09dC5nZXRNYXhab29tKCkmJm8uRG9tVXRpbC5hZGRDbGFzcyh0aGlzLl96b29tSW5CdXR0b24sZSl9fSksby5NYXAubWVyZ2VPcHRpb25zKHt6b29tQ29udHJvbDohMH0pLG8uTWFwLmFkZEluaXRIb29rKGZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLnpvb21Db250cm9sJiYodGhpcy56b29tQ29udHJvbD1uZXcgby5Db250cm9sLlpvb20sdGhpcy5hZGRDb250cm9sKHRoaXMuem9vbUNvbnRyb2wpKX0pLG8uY29udHJvbC56b29tPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgby5Db250cm9sLlpvb20odCl9LG8uQ29udHJvbC5BdHRyaWJ1dGlvbj1vLkNvbnRyb2wuZXh0ZW5kKHtvcHRpb25zOntwb3NpdGlvbjoiYm90dG9tcmlnaHQiLHByZWZpeDonPGEgaHJlZj0iaHR0cDovL2xlYWZsZXRqcy5jb20iIHRpdGxlPSJBIEpTIGxpYnJhcnkgZm9yIGludGVyYWN0aXZlIG1hcHMiPkxlYWZsZXQ8L2E+J30saW5pdGlhbGl6ZTpmdW5jdGlvbih0KXtvLnNldE9wdGlvbnModGhpcyx0KSx0aGlzLl9hdHRyaWJ1dGlvbnM9e319LG9uQWRkOmZ1bmN0aW9uKHQpe3RoaXMuX2NvbnRhaW5lcj1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLCJsZWFmbGV0LWNvbnRyb2wtYXR0cmlidXRpb24iKSxvLkRvbUV2ZW50LmRpc2FibGVDbGlja1Byb3BhZ2F0aW9uKHRoaXMuX2NvbnRhaW5lcik7Zm9yKHZhciBlIGluIHQuX2xheWVycyl0Ll9sYXllcnNbZV0uZ2V0QXR0cmlidXRpb24mJnRoaXMuYWRkQXR0cmlidXRpb24odC5fbGF5ZXJzW2VdLmdldEF0dHJpYnV0aW9uKCkpO3JldHVybiB0Lm9uKCJsYXllcmFkZCIsdGhpcy5fb25MYXllckFkZCx0aGlzKS5vbigibGF5ZXJyZW1vdmUiLHRoaXMuX29uTGF5ZXJSZW1vdmUsdGhpcyksdGhpcy5fdXBkYXRlKCksdGhpcy5fY29udGFpbmVyfSxvblJlbW92ZTpmdW5jdGlvbih0KXt0Lm9mZigibGF5ZXJhZGQiLHRoaXMuX29uTGF5ZXJBZGQpLm9mZigibGF5ZXJyZW1vdmUiLHRoaXMuX29uTGF5ZXJSZW1vdmUpfSxzZXRQcmVmaXg6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy5wcmVmaXg9dCx0aGlzLl91cGRhdGUoKSx0aGlzfSxhZGRBdHRyaWJ1dGlvbjpmdW5jdGlvbih0KXtyZXR1cm4gdD8odGhpcy5fYXR0cmlidXRpb25zW3RdfHwodGhpcy5fYXR0cmlidXRpb25zW3RdPTApLHRoaXMuX2F0dHJpYnV0aW9uc1t0XSsrLHRoaXMuX3VwZGF0ZSgpLHRoaXMpOnZvaWQgMH0scmVtb3ZlQXR0cmlidXRpb246ZnVuY3Rpb24odCl7cmV0dXJuIHQ/KHRoaXMuX2F0dHJpYnV0aW9uc1t0XSYmKHRoaXMuX2F0dHJpYnV0aW9uc1t0XS0tLHRoaXMuX3VwZGF0ZSgpKSx0aGlzKTp2b2lkIDB9LF91cGRhdGU6ZnVuY3Rpb24oKXtpZih0aGlzLl9tYXApe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzLl9hdHRyaWJ1dGlvbnMpdGhpcy5fYXR0cmlidXRpb25zW2VdJiZ0LnB1c2goZSk7dmFyIGk9W107dGhpcy5vcHRpb25zLnByZWZpeCYmaS5wdXNoKHRoaXMub3B0aW9ucy5wcmVmaXgpLHQubGVuZ3RoJiZpLnB1c2godC5qb2luKCIsICIpKSx0aGlzLl9jb250YWluZXIuaW5uZXJIVE1MPWkuam9pbigiIHwgIil9fSxfb25MYXllckFkZDpmdW5jdGlvbih0KXt0LmxheWVyLmdldEF0dHJpYnV0aW9uJiZ0aGlzLmFkZEF0dHJpYnV0aW9uKHQubGF5ZXIuZ2V0QXR0cmlidXRpb24oKSl9LF9vbkxheWVyUmVtb3ZlOmZ1bmN0aW9uKHQpe3QubGF5ZXIuZ2V0QXR0cmlidXRpb24mJnRoaXMucmVtb3ZlQXR0cmlidXRpb24odC5sYXllci5nZXRBdHRyaWJ1dGlvbigpKX19KSxvLk1hcC5tZXJnZU9wdGlvbnMoe2F0dHJpYnV0aW9uQ29udHJvbDohMH0pLG8uTWFwLmFkZEluaXRIb29rKGZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLmF0dHJpYnV0aW9uQ29udHJvbCYmKHRoaXMuYXR0cmlidXRpb25Db250cm9sPShuZXcgby5Db250cm9sLkF0dHJpYnV0aW9uKS5hZGRUbyh0aGlzKSl9KSxvLmNvbnRyb2wuYXR0cmlidXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvLkNvbnRyb2wuQXR0cmlidXRpb24odCl9LG8uQ29udHJvbC5TY2FsZT1vLkNvbnRyb2wuZXh0ZW5kKHtvcHRpb25zOntwb3NpdGlvbjoiYm90dG9tbGVmdCIsbWF4V2lkdGg6MTAwLG1ldHJpYzohMCxpbXBlcmlhbDohMCx1cGRhdGVXaGVuSWRsZTohMX0sb25BZGQ6ZnVuY3Rpb24odCl7dGhpcy5fbWFwPXQ7dmFyIGU9ImxlYWZsZXQtY29udHJvbC1zY2FsZSIsaT1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLGUpLG49dGhpcy5vcHRpb25zO3JldHVybiB0aGlzLl9hZGRTY2FsZXMobixlLGkpLHQub24obi51cGRhdGVXaGVuSWRsZT8ibW92ZWVuZCI6Im1vdmUiLHRoaXMuX3VwZGF0ZSx0aGlzKSx0LndoZW5SZWFkeSh0aGlzLl91cGRhdGUsdGhpcyksaX0sb25SZW1vdmU6ZnVuY3Rpb24odCl7dC5vZmYodGhpcy5vcHRpb25zLnVwZGF0ZVdoZW5JZGxlPyJtb3ZlZW5kIjoibW92ZSIsdGhpcy5fdXBkYXRlLHRoaXMpfSxfYWRkU2NhbGVzOmZ1bmN0aW9uKHQsZSxpKXt0Lm1ldHJpYyYmKHRoaXMuX21TY2FsZT1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLGUrIi1saW5lIixpKSksdC5pbXBlcmlhbCYmKHRoaXMuX2lTY2FsZT1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLGUrIi1saW5lIixpKSl9LF91cGRhdGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tYXAuZ2V0Qm91bmRzKCksZT10LmdldENlbnRlcigpLmxhdCxpPTYzNzgxMzcqTWF0aC5QSSpNYXRoLmNvcyhlKk1hdGguUEkvMTgwKSxuPWkqKHQuZ2V0Tm9ydGhFYXN0KCkubG5nLXQuZ2V0U291dGhXZXN0KCkubG5nKS8xODAsbz10aGlzLl9tYXAuZ2V0U2l6ZSgpLHM9dGhpcy5vcHRpb25zLGE9MDtvLng+MCYmKGE9bioocy5tYXhXaWR0aC9vLngpKSx0aGlzLl91cGRhdGVTY2FsZXMocyxhKX0sX3VwZGF0ZVNjYWxlczpmdW5jdGlvbih0LGUpe3QubWV0cmljJiZlJiZ0aGlzLl91cGRhdGVNZXRyaWMoZSksdC5pbXBlcmlhbCYmZSYmdGhpcy5fdXBkYXRlSW1wZXJpYWwoZSl9LF91cGRhdGVNZXRyaWM6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZ2V0Um91bmROdW0odCk7dGhpcy5fbVNjYWxlLnN0eWxlLndpZHRoPXRoaXMuX2dldFNjYWxlV2lkdGgoZS90KSsicHgiLHRoaXMuX21TY2FsZS5pbm5lckhUTUw9MWUzPmU/ZSsiIG0iOmUvMWUzKyIga20ifSxfdXBkYXRlSW1wZXJpYWw6ZnVuY3Rpb24odCl7dmFyIGUsaSxuLG89My4yODA4Mzk5KnQscz10aGlzLl9pU2NhbGU7bz41MjgwPyhlPW8vNTI4MCxpPXRoaXMuX2dldFJvdW5kTnVtKGUpLHMuc3R5bGUud2lkdGg9dGhpcy5fZ2V0U2NhbGVXaWR0aChpL2UpKyJweCIscy5pbm5lckhUTUw9aSsiIG1pIik6KG49dGhpcy5fZ2V0Um91bmROdW0obykscy5zdHlsZS53aWR0aD10aGlzLl9nZXRTY2FsZVdpZHRoKG4vbykrInB4IixzLmlubmVySFRNTD1uKyIgZnQiKX0sX2dldFNjYWxlV2lkdGg6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodGhpcy5vcHRpb25zLm1heFdpZHRoKnQpLTEwfSxfZ2V0Um91bmROdW06ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5wb3coMTAsKE1hdGguZmxvb3IodCkrIiIpLmxlbmd0aC0xKSxpPXQvZTtyZXR1cm4gaT1pPj0xMD8xMDppPj01PzU6aT49Mz8zOmk+PTI/MjoxLGUqaX19KSxvLmNvbnRyb2wuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvLkNvbnRyb2wuU2NhbGUodCl9LG8uQ29udHJvbC5MYXllcnM9by5Db250cm9sLmV4dGVuZCh7b3B0aW9uczp7Y29sbGFwc2VkOiEwLHBvc2l0aW9uOiJ0b3ByaWdodCIsYXV0b1pJbmRleDohMH0saW5pdGlhbGl6ZTpmdW5jdGlvbih0LGUsaSl7by5zZXRPcHRpb25zKHRoaXMsaSksdGhpcy5fbGF5ZXJzPXt9LHRoaXMuX2xhc3RaSW5kZXg9MCx0aGlzLl9oYW5kbGluZ0NsaWNrPSExO2Zvcih2YXIgbiBpbiB0KXRoaXMuX2FkZExheWVyKHRbbl0sbik7Zm9yKG4gaW4gZSl0aGlzLl9hZGRMYXllcihlW25dLG4sITApfSxvbkFkZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faW5pdExheW91dCgpLHRoaXMuX3VwZGF0ZSgpLHQub24oImxheWVyYWRkIix0aGlzLl9vbkxheWVyQ2hhbmdlLHRoaXMpLm9uKCJsYXllcnJlbW92ZSIsdGhpcy5fb25MYXllckNoYW5nZSx0aGlzKSx0aGlzLl9jb250YWluZXJ9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe3Qub2ZmKCJsYXllcmFkZCIsdGhpcy5fb25MYXllckNoYW5nZSx0aGlzKS5vZmYoImxheWVycmVtb3ZlIix0aGlzLl9vbkxheWVyQ2hhbmdlLHRoaXMpfSxhZGRCYXNlTGF5ZXI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fYWRkTGF5ZXIodCxlKSx0aGlzLl91cGRhdGUoKSx0aGlzfSxhZGRPdmVybGF5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2FkZExheWVyKHQsZSwhMCksdGhpcy5fdXBkYXRlKCksdGhpc30scmVtb3ZlTGF5ZXI6ZnVuY3Rpb24odCl7dmFyIGU9by5zdGFtcCh0KTtyZXR1cm4gZGVsZXRlIHRoaXMuX2xheWVyc1tlXSx0aGlzLl91cGRhdGUoKSx0aGlzfSxfaW5pdExheW91dDpmdW5jdGlvbigpe3ZhciB0PSJsZWFmbGV0LWNvbnRyb2wtbGF5ZXJzIixlPXRoaXMuX2NvbnRhaW5lcj1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLHQpO2Uuc2V0QXR0cmlidXRlKCJhcmlhLWhhc3BvcHVwIiwhMCksby5Ccm93c2VyLnRvdWNoP28uRG9tRXZlbnQub24oZSwiY2xpY2siLG8uRG9tRXZlbnQuc3RvcFByb3BhZ2F0aW9uKTpvLkRvbUV2ZW50LmRpc2FibGVDbGlja1Byb3BhZ2F0aW9uKGUpLmRpc2FibGVTY3JvbGxQcm9wYWdhdGlvbihlKTt2YXIgaT10aGlzLl9mb3JtPW8uRG9tVXRpbC5jcmVhdGUoImZvcm0iLHQrIi1saXN0Iik7aWYodGhpcy5vcHRpb25zLmNvbGxhcHNlZCl7by5Ccm93c2VyLmFuZHJvaWR8fG8uRG9tRXZlbnQub24oZSwibW91c2VvdmVyIix0aGlzLl9leHBhbmQsdGhpcykub24oZSwibW91c2VvdXQiLHRoaXMuX2NvbGxhcHNlLHRoaXMpO3ZhciBuPXRoaXMuX2xheWVyc0xpbms9by5Eb21VdGlsLmNyZWF0ZSgiYSIsdCsiLXRvZ2dsZSIsZSk7bi5ocmVmPSIjIixuLnRpdGxlPSJMYXllcnMiLG8uQnJvd3Nlci50b3VjaD9vLkRvbUV2ZW50Lm9uKG4sImNsaWNrIixvLkRvbUV2ZW50LnN0b3ApLm9uKG4sImNsaWNrIix0aGlzLl9leHBhbmQsdGhpcyk6by5Eb21FdmVudC5vbihuLCJmb2N1cyIsdGhpcy5fZXhwYW5kLHRoaXMpLG8uRG9tRXZlbnQub24oaSwiY2xpY2siLGZ1bmN0aW9uKCl7c2V0VGltZW91dChvLmJpbmQodGhpcy5fb25JbnB1dENsaWNrLHRoaXMpLDApfSx0aGlzKSx0aGlzLl9tYXAub24oImNsaWNrIix0aGlzLl9jb2xsYXBzZSx0aGlzKX1lbHNlIHRoaXMuX2V4cGFuZCgpO3RoaXMuX2Jhc2VMYXllcnNMaXN0PW8uRG9tVXRpbC5jcmVhdGUoImRpdiIsdCsiLWJhc2UiLGkpLHRoaXMuX3NlcGFyYXRvcj1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLHQrIi1zZXBhcmF0b3IiLGkpLHRoaXMuX292ZXJsYXlzTGlzdD1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLHQrIi1vdmVybGF5cyIsaSksZS5hcHBlbmRDaGlsZChpKX0sX2FkZExheWVyOmZ1bmN0aW9uKHQsZSxpKXt2YXIgbj1vLnN0YW1wKHQpO3RoaXMuX2xheWVyc1tuXT17bGF5ZXI6dCxuYW1lOmUsb3ZlcmxheTppfSx0aGlzLm9wdGlvbnMuYXV0b1pJbmRleCYmdC5zZXRaSW5kZXgmJih0aGlzLl9sYXN0WkluZGV4KyssdC5zZXRaSW5kZXgodGhpcy5fbGFzdFpJbmRleCkpfSxfdXBkYXRlOmZ1bmN0aW9uKCl7aWYodGhpcy5fY29udGFpbmVyKXt0aGlzLl9iYXNlTGF5ZXJzTGlzdC5pbm5lckhUTUw9IiIsdGhpcy5fb3ZlcmxheXNMaXN0LmlubmVySFRNTD0iIjt2YXIgdCxlLGk9ITEsbj0hMTtmb3IodCBpbiB0aGlzLl9sYXllcnMpZT10aGlzLl9sYXllcnNbdF0sdGhpcy5fYWRkSXRlbShlKSxuPW58fGUub3ZlcmxheSxpPWl8fCFlLm92ZXJsYXk7dGhpcy5fc2VwYXJhdG9yLnN0eWxlLmRpc3BsYXk9biYmaT8iIjoibm9uZSJ9fSxfb25MYXllckNoYW5nZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9sYXllcnNbby5zdGFtcCh0LmxheWVyKV07aWYoZSl7dGhpcy5faGFuZGxpbmdDbGlja3x8dGhpcy5fdXBkYXRlKCk7dmFyIGk9ZS5vdmVybGF5PyJsYXllcmFkZCI9PT10LnR5cGU/Im92ZXJsYXlhZGQiOiJvdmVybGF5cmVtb3ZlIjoibGF5ZXJhZGQiPT09dC50eXBlPyJiYXNlbGF5ZXJjaGFuZ2UiOm51bGw7aSYmdGhpcy5fbWFwLmZpcmUoaSxlKX19LF9jcmVhdGVSYWRpb0VsZW1lbnQ6ZnVuY3Rpb24odCxpKXt2YXIgbj0nPGlucHV0IHR5cGU9InJhZGlvIiBjbGFzcz0ibGVhZmxldC1jb250cm9sLWxheWVycy1zZWxlY3RvciIgbmFtZT0iJyt0KyciJztpJiYobis9JyBjaGVja2VkPSJjaGVja2VkIicpLG4rPSIvPiI7dmFyIG89ZS5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gby5pbm5lckhUTUw9bixvLmZpcnN0Q2hpbGR9LF9hZGRJdGVtOmZ1bmN0aW9uKHQpe3ZhciBpLG49ZS5jcmVhdGVFbGVtZW50KCJsYWJlbCIpLHM9dGhpcy5fbWFwLmhhc0xheWVyKHQubGF5ZXIpO3Qub3ZlcmxheT8oaT1lLmNyZWF0ZUVsZW1lbnQoImlucHV0IiksaS50eXBlPSJjaGVja2JveCIsaS5jbGFzc05hbWU9ImxlYWZsZXQtY29udHJvbC1sYXllcnMtc2VsZWN0b3IiLGkuZGVmYXVsdENoZWNrZWQ9cyk6aT10aGlzLl9jcmVhdGVSYWRpb0VsZW1lbnQoImxlYWZsZXQtYmFzZS1sYXllcnMiLHMpLGkubGF5ZXJJZD1vLnN0YW1wKHQubGF5ZXIpLG8uRG9tRXZlbnQub24oaSwiY2xpY2siLHRoaXMuX29uSW5wdXRDbGljayx0aGlzKTt2YXIgYT1lLmNyZWF0ZUVsZW1lbnQoInNwYW4iKTthLmlubmVySFRNTD0iICIrdC5uYW1lLG4uYXBwZW5kQ2hpbGQoaSksbi5hcHBlbmRDaGlsZChhKTt2YXIgcj10Lm92ZXJsYXk/dGhpcy5fb3ZlcmxheXNMaXN0OnRoaXMuX2Jhc2VMYXllcnNMaXN0O3JldHVybiByLmFwcGVuZENoaWxkKG4pLG59LF9vbklucHV0Q2xpY2s6ZnVuY3Rpb24oKXt2YXIgdCxlLGksbj10aGlzLl9mb3JtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLG89bi5sZW5ndGg7Zm9yKHRoaXMuX2hhbmRsaW5nQ2xpY2s9ITAsdD0wO28+dDt0KyspZT1uW3RdLGk9dGhpcy5fbGF5ZXJzW2UubGF5ZXJJZF0sZS5jaGVja2VkJiYhdGhpcy5fbWFwLmhhc0xheWVyKGkubGF5ZXIpP3RoaXMuX21hcC5hZGRMYXllcihpLmxheWVyKTohZS5jaGVja2VkJiZ0aGlzLl9tYXAuaGFzTGF5ZXIoaS5sYXllcikmJnRoaXMuX21hcC5yZW1vdmVMYXllcihpLmxheWVyKTt0aGlzLl9oYW5kbGluZ0NsaWNrPSExLHRoaXMuX3JlZm9jdXNPbk1hcCgpfSxfZXhwYW5kOmZ1bmN0aW9uKCl7by5Eb21VdGlsLmFkZENsYXNzKHRoaXMuX2NvbnRhaW5lciwibGVhZmxldC1jb250cm9sLWxheWVycy1leHBhbmRlZCIpfSxfY29sbGFwc2U6ZnVuY3Rpb24oKXt0aGlzLl9jb250YWluZXIuY2xhc3NOYW1lPXRoaXMuX2NvbnRhaW5lci5jbGFzc05hbWUucmVwbGFjZSgiIGxlYWZsZXQtY29udHJvbC1sYXllcnMtZXhwYW5kZWQiLCIiKX19KSxvLmNvbnRyb2wubGF5ZXJzPWZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gbmV3IG8uQ29udHJvbC5MYXllcnModCxlLGkpfSxvLlBvc0FuaW1hdGlvbj1vLkNsYXNzLmV4dGVuZCh7aW5jbHVkZXM6by5NaXhpbi5FdmVudHMscnVuOmZ1bmN0aW9uKHQsZSxpLG4pe3RoaXMuc3RvcCgpLHRoaXMuX2VsPXQsdGhpcy5faW5Qcm9ncmVzcz0hMCx0aGlzLl9uZXdQb3M9ZSx0aGlzLmZpcmUoInN0YXJ0IiksdC5zdHlsZVtvLkRvbVV0aWwuVFJBTlNJVElPTl09ImFsbCAiKyhpfHwuMjUpKyJzIGN1YmljLWJlemllcigwLDAsIisobnx8LjUpKyIsMSkiLG8uRG9tRXZlbnQub24odCxvLkRvbVV0aWwuVFJBTlNJVElPTl9FTkQsdGhpcy5fb25UcmFuc2l0aW9uRW5kLHRoaXMpLG8uRG9tVXRpbC5zZXRQb3NpdGlvbih0LGUpLG8uVXRpbC5mYWxzZUZuKHQub2Zmc2V0V2lkdGgpLHRoaXMuX3N0ZXBUaW1lcj1zZXRJbnRlcnZhbChvLmJpbmQodGhpcy5fb25TdGVwLHRoaXMpLDUwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuX2luUHJvZ3Jlc3MmJihvLkRvbVV0aWwuc2V0UG9zaXRpb24odGhpcy5fZWwsdGhpcy5fZ2V0UG9zKCkpLHRoaXMuX29uVHJhbnNpdGlvbkVuZCgpLG8uVXRpbC5mYWxzZUZuKHRoaXMuX2VsLm9mZnNldFdpZHRoKSl9LF9vblN0ZXA6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9nZXRQb3MoKTtyZXR1cm4gdD8odGhpcy5fZWwuX2xlYWZsZXRfcG9zPXQsdm9pZCB0aGlzLmZpcmUoInN0ZXAiKSk6dm9pZCB0aGlzLl9vblRyYW5zaXRpb25FbmQoKX0sX3RyYW5zZm9ybVJlOi8oWy0rXT8oPzpcZCpcLik/XGQrKVxEKiwgKFstK10/KD86XGQqXC4pP1xkKylcRCpcKS8sX2dldFBvczpmdW5jdGlvbigpe3ZhciBlLGksbixzPXRoaXMuX2VsLGE9dC5nZXRDb21wdXRlZFN0eWxlKHMpO2lmKG8uQnJvd3Nlci5hbnkzZCl7aWYobj1hW28uRG9tVXRpbC5UUkFOU0ZPUk1dLm1hdGNoKHRoaXMuX3RyYW5zZm9ybVJlKSwhbilyZXR1cm47ZT1wYXJzZUZsb2F0KG5bMV0pLGk9cGFyc2VGbG9hdChuWzJdKX1lbHNlIGU9cGFyc2VGbG9hdChhLmxlZnQpLGk9cGFyc2VGbG9hdChhLnRvcCk7cmV0dXJuIG5ldyBvLlBvaW50KGUsaSwhMCl9LF9vblRyYW5zaXRpb25FbmQ6ZnVuY3Rpb24oKXtvLkRvbUV2ZW50Lm9mZih0aGlzLl9lbCxvLkRvbVV0aWwuVFJBTlNJVElPTl9FTkQsdGhpcy5fb25UcmFuc2l0aW9uRW5kLHRoaXMpLHRoaXMuX2luUHJvZ3Jlc3MmJih0aGlzLl9pblByb2dyZXNzPSExLHRoaXMuX2VsLnN0eWxlW28uRG9tVXRpbC5UUkFOU0lUSU9OXT0iIix0aGlzLl9lbC5fbGVhZmxldF9wb3M9dGhpcy5fbmV3UG9zLGNsZWFySW50ZXJ2YWwodGhpcy5fc3RlcFRpbWVyKSx0aGlzLmZpcmUoInN0ZXAiKS5maXJlKCJlbmQiKSl9fSksby5NYXAuaW5jbHVkZSh7c2V0VmlldzpmdW5jdGlvbih0LGUsbil7aWYoZT1lPT09aT90aGlzLl96b29tOnRoaXMuX2xpbWl0Wm9vbShlKSx0PXRoaXMuX2xpbWl0Q2VudGVyKG8ubGF0TG5nKHQpLGUsdGhpcy5vcHRpb25zLm1heEJvdW5kcyksbj1ufHx7fSx0aGlzLl9wYW5BbmltJiZ0aGlzLl9wYW5BbmltLnN0b3AoKSx0aGlzLl9sb2FkZWQmJiFuLnJlc2V0JiZuIT09ITApe24uYW5pbWF0ZSE9PWkmJihuLnpvb209by5leHRlbmQoe2FuaW1hdGU6bi5hbmltYXRlfSxuLnpvb20pLG4ucGFuPW8uZXh0ZW5kKHthbmltYXRlOm4uYW5pbWF0ZX0sbi5wYW4pKTt2YXIgcz10aGlzLl96b29tIT09ZT90aGlzLl90cnlBbmltYXRlZFpvb20mJnRoaXMuX3RyeUFuaW1hdGVkWm9vbSh0LGUsbi56b29tKTp0aGlzLl90cnlBbmltYXRlZFBhbih0LG4ucGFuKTtpZihzKXJldHVybiBjbGVhclRpbWVvdXQodGhpcy5fc2l6ZVRpbWVyKSx0aGlzfXJldHVybiB0aGlzLl9yZXNldFZpZXcodCxlKSx0aGlzfSxwYW5CeTpmdW5jdGlvbih0LGUpe2lmKHQ9by5wb2ludCh0KS5yb3VuZCgpLGU9ZXx8e30sIXQueCYmIXQueSlyZXR1cm4gdGhpcztpZih0aGlzLl9wYW5BbmltfHwodGhpcy5fcGFuQW5pbT1uZXcgby5Qb3NBbmltYXRpb24sdGhpcy5fcGFuQW5pbS5vbih7c3RlcDp0aGlzLl9vblBhblRyYW5zaXRpb25TdGVwLGVuZDp0aGlzLl9vblBhblRyYW5zaXRpb25FbmR9LHRoaXMpKSxlLm5vTW92ZVN0YXJ0fHx0aGlzLmZpcmUoIm1vdmVzdGFydCIpLGUuYW5pbWF0ZSE9PSExKXtvLkRvbVV0aWwuYWRkQ2xhc3ModGhpcy5fbWFwUGFuZSwibGVhZmxldC1wYW4tYW5pbSIpO3ZhciBpPXRoaXMuX2dldE1hcFBhbmVQb3MoKS5zdWJ0cmFjdCh0KTt0aGlzLl9wYW5BbmltLnJ1bih0aGlzLl9tYXBQYW5lLGksZS5kdXJhdGlvbnx8LjI1LGUuZWFzZUxpbmVhcml0eSl9ZWxzZSB0aGlzLl9yYXdQYW5CeSh0KSx0aGlzLmZpcmUoIm1vdmUiKS5maXJlKCJtb3ZlZW5kIik7cmV0dXJuIHRoaXN9LF9vblBhblRyYW5zaXRpb25TdGVwOmZ1bmN0aW9uKCl7dGhpcy5maXJlKCJtb3ZlIil9LF9vblBhblRyYW5zaXRpb25FbmQ6ZnVuY3Rpb24oKXtvLkRvbVV0aWwucmVtb3ZlQ2xhc3ModGhpcy5fbWFwUGFuZSwibGVhZmxldC1wYW4tYW5pbSIpLHRoaXMuZmlyZSgibW92ZWVuZCIpfSxfdHJ5QW5pbWF0ZWRQYW46ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLl9nZXRDZW50ZXJPZmZzZXQodCkuX2Zsb29yKCk7cmV0dXJuKGUmJmUuYW5pbWF0ZSk9PT0hMHx8dGhpcy5nZXRTaXplKCkuY29udGFpbnMoaSk/KHRoaXMucGFuQnkoaSxlKSwhMCk6ITF9fSksby5Qb3NBbmltYXRpb249by5Eb21VdGlsLlRSQU5TSVRJT04/by5Qb3NBbmltYXRpb246by5Qb3NBbmltYXRpb24uZXh0ZW5kKHtydW46ZnVuY3Rpb24odCxlLGksbil7dGhpcy5zdG9wKCksdGhpcy5fZWw9dCx0aGlzLl9pblByb2dyZXNzPSEwLHRoaXMuX2R1cmF0aW9uPWl8fC4yNSx0aGlzLl9lYXNlT3V0UG93ZXI9MS9NYXRoLm1heChufHwuNSwuMiksdGhpcy5fc3RhcnRQb3M9by5Eb21VdGlsLmdldFBvc2l0aW9uKHQpLHRoaXMuX29mZnNldD1lLnN1YnRyYWN0KHRoaXMuX3N0YXJ0UG9zKSx0aGlzLl9zdGFydFRpbWU9K25ldyBEYXRlLHRoaXMuZmlyZSgic3RhcnQiKSx0aGlzLl9hbmltYXRlKCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9pblByb2dyZXNzJiYodGhpcy5fc3RlcCgpLHRoaXMuX2NvbXBsZXRlKCkpfSxfYW5pbWF0ZTpmdW5jdGlvbigpe3RoaXMuX2FuaW1JZD1vLlV0aWwucmVxdWVzdEFuaW1GcmFtZSh0aGlzLl9hbmltYXRlLHRoaXMpLHRoaXMuX3N0ZXAoKX0sX3N0ZXA6ZnVuY3Rpb24oKXt2YXIgdD0rbmV3IERhdGUtdGhpcy5fc3RhcnRUaW1lLGU9MWUzKnRoaXMuX2R1cmF0aW9uO2U+dD90aGlzLl9ydW5GcmFtZSh0aGlzLl9lYXNlT3V0KHQvZSkpOih0aGlzLl9ydW5GcmFtZSgxKSx0aGlzLl9jb21wbGV0ZSgpKX0sX3J1bkZyYW1lOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3N0YXJ0UG9zLmFkZCh0aGlzLl9vZmZzZXQubXVsdGlwbHlCeSh0KSk7by5Eb21VdGlsLnNldFBvc2l0aW9uKHRoaXMuX2VsLGUpLHRoaXMuZmlyZSgic3RlcCIpfSxfY29tcGxldGU6ZnVuY3Rpb24oKXtvLlV0aWwuY2FuY2VsQW5pbUZyYW1lKHRoaXMuX2FuaW1JZCksdGhpcy5faW5Qcm9ncmVzcz0hMSx0aGlzLmZpcmUoImVuZCIpfSxfZWFzZU91dDpmdW5jdGlvbih0KXtyZXR1cm4gMS1NYXRoLnBvdygxLXQsdGhpcy5fZWFzZU91dFBvd2VyKX19KSxvLk1hcC5tZXJnZU9wdGlvbnMoe3pvb21BbmltYXRpb246ITAsem9vbUFuaW1hdGlvblRocmVzaG9sZDo0fSksby5Eb21VdGlsLlRSQU5TSVRJT04mJm8uTWFwLmFkZEluaXRIb29rKGZ1bmN0aW9uKCl7dGhpcy5fem9vbUFuaW1hdGVkPXRoaXMub3B0aW9ucy56b29tQW5pbWF0aW9uJiZvLkRvbVV0aWwuVFJBTlNJVElPTiYmby5Ccm93c2VyLmFueTNkJiYhby5Ccm93c2VyLmFuZHJvaWQyMyYmIW8uQnJvd3Nlci5tb2JpbGVPcGVyYSx0aGlzLl96b29tQW5pbWF0ZWQmJm8uRG9tRXZlbnQub24odGhpcy5fbWFwUGFuZSxvLkRvbVV0aWwuVFJBTlNJVElPTl9FTkQsdGhpcy5fY2F0Y2hUcmFuc2l0aW9uRW5kLHRoaXMpfSksby5NYXAuaW5jbHVkZShvLkRvbVV0aWwuVFJBTlNJVElPTj97X2NhdGNoVHJhbnNpdGlvbkVuZDpmdW5jdGlvbih0KXt0aGlzLl9hbmltYXRpbmdab29tJiZ0LnByb3BlcnR5TmFtZS5pbmRleE9mKCJ0cmFuc2Zvcm0iKT49MCYmdGhpcy5fb25ab29tVHJhbnNpdGlvbkVuZCgpfSxfbm90aGluZ1RvQW5pbWF0ZTpmdW5jdGlvbigpe3JldHVybiF0aGlzLl9jb250YWluZXIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgibGVhZmxldC16b29tLWFuaW1hdGVkIikubGVuZ3RofSxfdHJ5QW5pbWF0ZWRab29tOmZ1bmN0aW9uKHQsZSxpKXtpZih0aGlzLl9hbmltYXRpbmdab29tKXJldHVybiEwO2lmKGk9aXx8e30sIXRoaXMuX3pvb21BbmltYXRlZHx8aS5hbmltYXRlPT09ITF8fHRoaXMuX25vdGhpbmdUb0FuaW1hdGUoKXx8TWF0aC5hYnMoZS10aGlzLl96b29tKT50aGlzLm9wdGlvbnMuem9vbUFuaW1hdGlvblRocmVzaG9sZClyZXR1cm4hMTt2YXIgbj10aGlzLmdldFpvb21TY2FsZShlKSxvPXRoaXMuX2dldENlbnRlck9mZnNldCh0KS5fZGl2aWRlQnkoMS0xL24pLHM9dGhpcy5fZ2V0Q2VudGVyTGF5ZXJQb2ludCgpLl9hZGQobyk7cmV0dXJuIGkuYW5pbWF0ZT09PSEwfHx0aGlzLmdldFNpemUoKS5jb250YWlucyhvKT8odGhpcy5maXJlKCJtb3Zlc3RhcnQiKS5maXJlKCJ6b29tc3RhcnQiKSx0aGlzLl9hbmltYXRlWm9vbSh0LGUscyxuLG51bGwsITApLCEwKTohMX0sX2FuaW1hdGVab29tOmZ1bmN0aW9uKHQsZSxpLG4scyxhLHIpe3J8fCh0aGlzLl9hbmltYXRpbmdab29tPSEwKSxvLkRvbVV0aWwuYWRkQ2xhc3ModGhpcy5fbWFwUGFuZSwibGVhZmxldC16b29tLWFuaW0iKSx0aGlzLl9hbmltYXRlVG9DZW50ZXI9dCx0aGlzLl9hbmltYXRlVG9ab29tPWUsby5EcmFnZ2FibGUmJihvLkRyYWdnYWJsZS5fZGlzYWJsZWQ9ITApLG8uVXRpbC5yZXF1ZXN0QW5pbUZyYW1lKGZ1bmN0aW9uKCl7dGhpcy5maXJlKCJ6b29tYW5pbSIse2NlbnRlcjp0LHpvb206ZSxvcmlnaW46aSxzY2FsZTpuLGRlbHRhOnMsYmFja3dhcmRzOmF9KSxzZXRUaW1lb3V0KG8uYmluZCh0aGlzLl9vblpvb21UcmFuc2l0aW9uRW5kLHRoaXMpLDI1MCl9LHRoaXMpfSxfb25ab29tVHJhbnNpdGlvbkVuZDpmdW5jdGlvbigpe3RoaXMuX2FuaW1hdGluZ1pvb20mJih0aGlzLl9hbmltYXRpbmdab29tPSExLG8uRG9tVXRpbC5yZW1vdmVDbGFzcyh0aGlzLl9tYXBQYW5lLCJsZWFmbGV0LXpvb20tYW5pbSIpLG8uVXRpbC5yZXF1ZXN0QW5pbUZyYW1lKGZ1bmN0aW9uKCl7dGhpcy5fcmVzZXRWaWV3KHRoaXMuX2FuaW1hdGVUb0NlbnRlcix0aGlzLl9hbmltYXRlVG9ab29tLCEwLCEwKSxvLkRyYWdnYWJsZSYmKG8uRHJhZ2dhYmxlLl9kaXNhYmxlZD0hMSl9LHRoaXMpKX19Ont9KSxvLlRpbGVMYXllci5pbmNsdWRlKHtfYW5pbWF0ZVpvb206ZnVuY3Rpb24odCl7dGhpcy5fYW5pbWF0aW5nfHwodGhpcy5fYW5pbWF0aW5nPSEwLHRoaXMuX3ByZXBhcmVCZ0J1ZmZlcigpKTt2YXIgZT10aGlzLl9iZ0J1ZmZlcixpPW8uRG9tVXRpbC5UUkFOU0ZPUk0sbj10LmRlbHRhP28uRG9tVXRpbC5nZXRUcmFuc2xhdGVTdHJpbmcodC5kZWx0YSk6ZS5zdHlsZVtpXSxzPW8uRG9tVXRpbC5nZXRTY2FsZVN0cmluZyh0LnNjYWxlLHQub3JpZ2luKTtlLnN0eWxlW2ldPXQuYmFja3dhcmRzP3MrIiAiK246bisiICIrc30sX2VuZFpvb21BbmltOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fdGlsZUNvbnRhaW5lcixlPXRoaXMuX2JnQnVmZmVyO3Quc3R5bGUudmlzaWJpbGl0eT0iIix0LnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodCksby5VdGlsLmZhbHNlRm4oZS5vZmZzZXRXaWR0aCk7dmFyIGk9dGhpcy5fbWFwLmdldFpvb20oKTsoaT50aGlzLm9wdGlvbnMubWF4Wm9vbXx8aTx0aGlzLm9wdGlvbnMubWluWm9vbSkmJnRoaXMuX2NsZWFyQmdCdWZmZXIoKSx0aGlzLl9hbmltYXRpbmc9ITF9LF9jbGVhckJnQnVmZmVyOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwOyF0fHx0Ll9hbmltYXRpbmdab29tfHx0LnRvdWNoWm9vbS5fem9vbWluZ3x8KHRoaXMuX2JnQnVmZmVyLmlubmVySFRNTD0iIix0aGlzLl9iZ0J1ZmZlci5zdHlsZVtvLkRvbVV0aWwuVFJBTlNGT1JNXT0iIil9LF9wcmVwYXJlQmdCdWZmZXI6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl90aWxlQ29udGFpbmVyLGU9dGhpcy5fYmdCdWZmZXIsaT10aGlzLl9nZXRMb2FkZWRUaWxlc1BlcmNlbnRhZ2UoZSksbj10aGlzLl9nZXRMb2FkZWRUaWxlc1BlcmNlbnRhZ2UodCk7cmV0dXJuIGUmJmk+LjUmJi41Pm4/KHQuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIix2b2lkIHRoaXMuX3N0b3BMb2FkaW5nSW1hZ2VzKHQpKTooZS5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4iLGUuc3R5bGVbby5Eb21VdGlsLlRSQU5TRk9STV09IiIsdGhpcy5fdGlsZUNvbnRhaW5lcj1lLGU9dGhpcy5fYmdCdWZmZXI9dCx0aGlzLl9zdG9wTG9hZGluZ0ltYWdlcyhlKSx2b2lkIGNsZWFyVGltZW91dCh0aGlzLl9jbGVhckJnQnVmZmVyVGltZXIpKX0sX2dldExvYWRlZFRpbGVzUGVyY2VudGFnZTpmdW5jdGlvbih0KXt2YXIgZSxpLG49dC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW1nIiksbz0wO2ZvcihlPTAsaT1uLmxlbmd0aDtpPmU7ZSsrKW5bZV0uY29tcGxldGUmJm8rKztyZXR1cm4gby9pfSxfc3RvcExvYWRpbmdJbWFnZXM6ZnVuY3Rpb24odCl7dmFyIGUsaSxuLHM9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW1nIikpO2ZvcihlPTAsaT1zLmxlbmd0aDtpPmU7ZSsrKW49c1tlXSxuLmNvbXBsZXRlfHwobi5vbmxvYWQ9by5VdGlsLmZhbHNlRm4sbi5vbmVycm9yPW8uVXRpbC5mYWxzZUZuLG4uc3JjPW8uVXRpbC5lbXB0eUltYWdlVXJsLG4ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuKSl9fSksby5NYXAuaW5jbHVkZSh7X2RlZmF1bHRMb2NhdGVPcHRpb25zOnt3YXRjaDohMSxzZXRWaWV3OiExLG1heFpvb206MS8wLHRpbWVvdXQ6MWU0LG1heGltdW1BZ2U6MCxlbmFibGVIaWdoQWNjdXJhY3k6ITF9LGxvY2F0ZTpmdW5jdGlvbih0KXtpZih0PXRoaXMuX2xvY2F0ZU9wdGlvbnM9by5leHRlbmQodGhpcy5fZGVmYXVsdExvY2F0ZU9wdGlvbnMsdCksIW5hdmlnYXRvci5nZW9sb2NhdGlvbilyZXR1cm4gdGhpcy5faGFuZGxlR2VvbG9jYXRpb25FcnJvcih7Y29kZTowLG1lc3NhZ2U6Ikdlb2xvY2F0aW9uIG5vdCBzdXBwb3J0ZWQuIn0pLHRoaXM7dmFyIGU9by5iaW5kKHRoaXMuX2hhbmRsZUdlb2xvY2F0aW9uUmVzcG9uc2UsdGhpcyksaT1vLmJpbmQodGhpcy5faGFuZGxlR2VvbG9jYXRpb25FcnJvcix0aGlzKTtyZXR1cm4gdC53YXRjaD90aGlzLl9sb2NhdGlvbldhdGNoSWQ9bmF2aWdhdG9yLmdlb2xvY2F0aW9uLndhdGNoUG9zaXRpb24oZSxpLHQpOm5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZSxpLHQpLHRoaXN9LHN0b3BMb2NhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gbmF2aWdhdG9yLmdlb2xvY2F0aW9uJiZuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uY2xlYXJXYXRjaCh0aGlzLl9sb2NhdGlvbldhdGNoSWQpLHRoaXMuX2xvY2F0ZU9wdGlvbnMmJih0aGlzLl9sb2NhdGVPcHRpb25zLnNldFZpZXc9ITEpLHRoaXN9LF9oYW5kbGVHZW9sb2NhdGlvbkVycm9yOmZ1bmN0aW9uKHQpe3ZhciBlPXQuY29kZSxpPXQubWVzc2FnZXx8KDE9PT1lPyJwZXJtaXNzaW9uIGRlbmllZCI6Mj09PWU/InBvc2l0aW9uIHVuYXZhaWxhYmxlIjoidGltZW91dCIpO3RoaXMuX2xvY2F0ZU9wdGlvbnMuc2V0VmlldyYmIXRoaXMuX2xvYWRlZCYmdGhpcy5maXRXb3JsZCgpLHRoaXMuZmlyZSgibG9jYXRpb25lcnJvciIse2NvZGU6ZSxtZXNzYWdlOiJHZW9sb2NhdGlvbiBlcnJvcjogIitpKyIuIn0pfSxfaGFuZGxlR2VvbG9jYXRpb25SZXNwb25zZTpmdW5jdGlvbih0KXt2YXIgZT10LmNvb3Jkcy5sYXRpdHVkZSxpPXQuY29vcmRzLmxvbmdpdHVkZSxuPW5ldyBvLkxhdExuZyhlLGkpLHM9MTgwKnQuY29vcmRzLmFjY3VyYWN5LzQwMDc1MDE3LGE9cy9NYXRoLmNvcyhvLkxhdExuZy5ERUdfVE9fUkFEKmUpLHI9by5sYXRMbmdCb3VuZHMoW2UtcyxpLWFdLFtlK3MsaSthXSksaD10aGlzLl9sb2NhdGVPcHRpb25zO2lmKGguc2V0Vmlldyl7dmFyIGw9TWF0aC5taW4odGhpcy5nZXRCb3VuZHNab29tKHIpLGgubWF4Wm9vbSk7dGhpcy5zZXRWaWV3KG4sbCl9dmFyIHU9e2xhdGxuZzpuLGJvdW5kczpyLHRpbWVzdGFtcDp0LnRpbWVzdGFtcH07Zm9yKHZhciBjIGluIHQuY29vcmRzKSJudW1iZXIiPT10eXBlb2YgdC5jb29yZHNbY10mJih1W2NdPXQuY29vcmRzW2NdKTt0aGlzLmZpcmUoImxvY2F0aW9uZm91bmQiLHUpfX0pfSh3aW5kb3csZG9jdW1lbnQpOw=="></script> <link href="data:text/css;charset=utf-8,%0Aimg%2Eleaflet%2Dtile%20%7B%0Apadding%3A%200%3B%0Amargin%3A%200%3B%0Aborder%2Dradius%3A%200%3B%0Aborder%3A%20none%3B%0A%7D%0A%2Einfo%20%7B%0Apadding%3A%206px%208px%3B%0Afont%3A%2014px%2F16px%20Arial%2C%20Helvetica%2C%20sans%2Dserif%3B%0Abackground%3A%20white%3B%0Abackground%3A%20rgba%28255%2C255%2C255%2C0%2E8%29%3B%0Abox%2Dshadow%3A%200%200%2015px%20rgba%280%2C0%2C0%2C0%2E2%29%3B%0Aborder%2Dradius%3A%205px%3B%0A%7D%0A%2Elegend%20%7B%0Aline%2Dheight%3A%2018px%3B%0Acolor%3A%20%23555%3B%0A%7D%0A%2Elegend%20svg%20text%20%7B%0Afill%3A%20%23555%3B%0A%7D%0A%2Elegend%20svg%20line%20%7B%0Astroke%3A%20%23555%3B%0A%7D%0A%2Elegend%20i%20%7B%0Awidth%3A%2018px%3B%0Aheight%3A%2018px%3B%0Afloat%3A%20left%3B%0Amargin%2Dright%3A%208px%3B%0Aopacity%3A%200%2E7%3B%0A%7D%0A" rel="stylesheet" /> <link href="data:text/css;charset=utf-8,%2Eleaflet%2Dlabel%20%7B%0Abackground%3A%20rgb%28235%2C%20235%2C%20235%29%3B%0Abackground%3A%20rgba%28235%2C%20235%2C%20235%2C%200%2E81%29%3B%0Abackground%2Dclip%3A%20padding%2Dbox%3B%0Aborder%2Dcolor%3A%20%23777%3B%0Aborder%2Dcolor%3A%20rgba%280%2C0%2C0%2C0%2E45%29%3B%0Aborder%2Dradius%3A%204px%3B%0Aborder%2Dstyle%3A%20solid%3B%0Aborder%2Dwidth%3A%204px%3B%0Acolor%3A%20%23111%3B%0Adisplay%3A%20block%3B%0Afont%3A%2012px%2F20px%20%22Helvetica%20Neue%22%2C%20Arial%2C%20Helvetica%2C%20sans%2Dserif%3B%0Afont%2Dweight%3A%20bold%3B%0Apadding%3A%201px%206px%3B%0Aposition%3A%20absolute%3B%0A%2Dwebkit%2Duser%2Dselect%3A%20none%3B%0A%2Dmoz%2Duser%2Dselect%3A%20none%3B%0A%2Dms%2Duser%2Dselect%3A%20none%3B%0Auser%2Dselect%3A%20none%3B%0Apointer%2Devents%3A%20none%3B%0Awhite%2Dspace%3A%20nowrap%3B%0Az%2Dindex%3A%20500%3B%0A%7D%0A%2Eleaflet%2Dlabel%2Eleaflet%2Dclickable%20%7B%0Acursor%3A%20pointer%3B%0Apointer%2Devents%3A%20auto%3B%0A%7D%0A%2Eleaflet%2Dlabel%3Abefore%2C%0A%2Eleaflet%2Dlabel%3Aafter%20%7B%0Aborder%2Dtop%3A%206px%20solid%20transparent%3B%0Aborder%2Dbottom%3A%206px%20solid%20transparent%3B%0Aborder%2Dright%3A%206px%20solid%20transparent%3B%0Acontent%3A%20none%3B%0Aposition%3A%20absolute%3B%0Atop%3A%205px%3B%0A%7D%0A%2Eleaflet%2Dlabel%3Abefore%20%7B%0Aborder%2Dright%3A%206px%20solid%20black%3B%0Aborder%2Dright%2Dcolor%3A%20inherit%3B%0Aleft%3A%20%2D10px%3B%0A%7D%0A%2Eleaflet%2Dlabel%3Aafter%20%7B%0Aborder%2Dleft%3A%206px%20solid%20black%3B%0Aborder%2Dleft%2Dcolor%3A%20inherit%3B%0Aright%3A%20%2D16px%3B%0A%7D%0A%2Eleaflet%2Dlabel%2Dtop%3Aafter%2C%0A%2Eleaflet%2Dlabel%2Dtop%3Abefore%20%7B%0Aleft%3A%20%2D50%25%3B%0Aborder%2Dtop%2Dcolor%3A%20black%3B%0Aborder%2Dtop%2Dcolor%3A%20rgba%280%2C0%2C0%2C0%2E45%29%3B%0Aposition%3A%20relative%3B%0Atop%3A%2029px%3B%0A%7D%0A%2Eleaflet%2Dlabel%2Dtop%3Abefore%20%7B%0Adisplay%3A%20none%3B%0Aborder%2Dright%2Dcolor%3A%20transparent%3B%0Aborder%2Dbottom%2Dcolor%3A%20transparent%3B%0Aborder%2Dleft%2Dcolor%3A%20transparent%3B%0Aborder%2Dtop%2Dcolor%3A%20transparent%3B%0A%7D%0A%2Eleaflet%2Dlabel%2Dtop%3Aafter%20%7B%0Acontent%3A%20%27%20%27%3B%0Aborder%2Dright%2Dcolor%3A%20transparent%3B%0Aborder%2Dbottom%2Dcolor%3A%20transparent%3B%0Aborder%2Dleft%2Dcolor%3A%20transparent%3B%0A%7D%0A%2Eleaflet%2Dlabel%2Dbottom%3Abefore%20%7B%0Adisplay%3A%20none%3B%0Aborder%2Dright%2Dcolor%3A%20transparent%3B%0Aborder%2Dbottom%2Dcolor%3A%20transparent%3B%0Aborder%2Dleft%2Dcolor%3A%20transparent%3B%0Aborder%2Dtop%2Dcolor%3A%20transparent%3B%0A%7D%0A%2Eleaflet%2Dlabel%2Dbottom%3Aafter%2C%0A%2Eleaflet%2Dlabel%2Dbottom%3Abefore%20%7B%0Aleft%3A%20%2D50%25%3B%0Aborder%2Dbottom%2Dcolor%3A%20black%3B%0Aborder%2Dbottom%2Dcolor%3A%20rgba%280%2C0%2C0%2C0%2E45%29%3B%0Aposition%3A%20relative%3B%0Atop%3A%20%2D28px%3B%0A%7D%0A%2Eleaflet%2Dlabel%2Dbottom%3Aafter%20%7B%0Aborder%2Dright%2Dcolor%3A%20transparent%3B%0Aborder%2Dtop%2Dcolor%3A%20transparent%3B%0Aborder%2Dleft%2Dcolor%3A%20transparent%3B%0A%7D%0A%2Eleaflet%2Dlabel%2Dbottom%3Aafter%2C%0A%2Eleaflet%2Dlabel%2Dtop%3Aafter%2C%0A%2Eleaflet%2Dlabel%2Dright%3Abefore%2C%0A%2Eleaflet%2Dlabel%2Dleft%3Aafter%20%7B%0Acontent%3A%20%22%22%3B%0A%7D%0A%2Eleaflet%2Dlabel%2Eleaflet%2Dlabel%2Dtext%2Donly%2C%0A%2Eleaflet%2Dlabel%2Eleaflet%2Dlabel%2Dtext%2Donly%3Abefore%2C%0A%2Eleaflet%2Dlabel%2Eleaflet%2Dlabel%2Dtext%2Donly%3Aafter%20%7B%0Abackground%3A%20none%3B%0Aborder%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dlabel%2Eleaflet%2Dlabel%2Dtext%2Donly%2Eleaflet%2Dlabel%2Dleft%20%7B%0Amargin%2Dright%3A%20%2D10px%3B%0A%7D%0A%2Eleaflet%2Dlabel%2Eleaflet%2Dlabel%2Dtext%2Donly%2Eleaflet%2Dlabel%2Dright%20%7B%0Amargin%2Dleft%3A%20%2D10px%3B%0A%7D%0A" rel="stylesheet" /> <script src="data:application/x-javascript;base64,LyoKCUxlYWZsZXQubGFiZWwsIGEgcGx1Z2luIHRoYXQgYWRkcyBsYWJlbHMgdG8gbWFya2VycyBhbmQgdmVjdG9ycyBmb3IgTGVhZmxldCBwb3dlcmVkIG1hcHMuCgkoYykgMjAxMi0yMDEzLCBKYWNvYiBUb3llLCBTbWFydHJhawoKCWh0dHBzOi8vZ2l0aHViLmNvbS9MZWFmbGV0L0xlYWZsZXQubGFiZWwKCWh0dHA6Ly9sZWFmbGV0anMuY29tCglodHRwczovL2dpdGh1Yi5jb20vamFjb2J0b3llCiovCiFmdW5jdGlvbih0LGUpeyJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFsibGVhZmxldCJdLHQpOiJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmKG1vZHVsZS5leHBvcnRzPXQocmVxdWlyZSgibGVhZmxldCIpKSksInVuZGVmaW5lZCIhPXR5cGVvZiBlJiZlLkwmJihlLkxlYWZsZXRMYWJlbD10KEwpKX0oZnVuY3Rpb24odCl7dC5sYWJlbFZlcnNpb249IjAuMi40Ijt2YXIgZT10LkNsYXNzLmV4dGVuZCh7aW5jbHVkZXM6dC5NaXhpbi5FdmVudHMsX2RpcmVjdGlvbnM6WyJ0b3AiLCJyaWdodCIsImJvdHRvbSIsImxlZnQiXSxvcHRpb25zOntjbGFzc05hbWU6IiIsY2xpY2thYmxlOiExLGRpcmVjdGlvbjoicmlnaHQiLG5vSGlkZTohMSxvZmZzZXQ6WzEyLC0xNV0sb3BhY2l0eToxLHRleHRzaXplOiIxMHB4Iix0ZXh0T25seTohMSxzdHlsZTpudWxsLHpvb21BbmltYXRpb246ITB9LGluaXRpYWxpemU6ZnVuY3Rpb24oZSxpKXt0LnNldE9wdGlvbnModGhpcyxlKSx0aGlzLl9zb3VyY2U9aSx0aGlzLl9hbmltYXRlZD10LkJyb3dzZXIuYW55M2QmJnRoaXMub3B0aW9ucy56b29tQW5pbWF0aW9uLHRoaXMuX2lzT3Blbj0hMX0sX2lzT25NYXJrZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc291cmNlIGluc3RhbmNlb2YgdC5NYXJrZXJ9LG9uQWRkOmZ1bmN0aW9uKGUpe3RoaXMuX21hcD1lLHRoaXMuX3BhbmU9dGhpcy5vcHRpb25zLnBhbmU/ZS5fcGFuZXNbdGhpcy5vcHRpb25zLnBhbmVdOnRoaXMuX2lzT25NYXJrZXIoKT9lLl9wYW5lcy5tYXJrZXJQYW5lOmUuX3BhbmVzLnBvcHVwUGFuZSx0aGlzLl9jb250YWluZXJ8fHRoaXMuX2luaXRMYXlvdXQoKSx0aGlzLl9wYW5lLmFwcGVuZENoaWxkKHRoaXMuX2NvbnRhaW5lciksdGhpcy5faW5pdEludGVyYWN0aW9uKCksdGhpcy5fdXBkYXRlKCksdGhpcy5zZXRPcGFjaXR5KHRoaXMub3B0aW9ucy5vcGFjaXR5KSxlLm9uKCJtb3ZlZW5kIix0aGlzLl9vbk1vdmVFbmQsdGhpcykub24oInZpZXdyZXNldCIsdGhpcy5fb25WaWV3UmVzZXQsdGhpcyksdGhpcy5fYW5pbWF0ZWQmJmUub24oInpvb21hbmltIix0aGlzLl96b29tQW5pbWF0aW9uLHRoaXMpLHQuQnJvd3Nlci50b3VjaCYmIXRoaXMub3B0aW9ucy5ub0hpZGUmJih0LkRvbUV2ZW50Lm9uKHRoaXMuX2NvbnRhaW5lciwiY2xpY2siLHRoaXMuY2xvc2UsdGhpcyksZS5vbigiY2xpY2siLHRoaXMuY2xvc2UsdGhpcykpfSxvblJlbW92ZTpmdW5jdGlvbih0KXt0aGlzLl9wYW5lLnJlbW92ZUNoaWxkKHRoaXMuX2NvbnRhaW5lciksdC5vZmYoe3pvb21hbmltOnRoaXMuX3pvb21BbmltYXRpb24sbW92ZWVuZDp0aGlzLl9vbk1vdmVFbmQsdmlld3Jlc2V0OnRoaXMuX29uVmlld1Jlc2V0fSx0aGlzKSx0aGlzLl9yZW1vdmVJbnRlcmFjdGlvbigpLHRoaXMuX21hcD1udWxsfSxzZXRMYXRMbmc6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2xhdGxuZz10LmxhdExuZyhlKSx0aGlzLl9tYXAmJnRoaXMuX3VwZGF0ZVBvc2l0aW9uKCksdGhpc30sc2V0Q29udGVudDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcHJldmlvdXNDb250ZW50PXRoaXMuX2NvbnRlbnQsdGhpcy5fY29udGVudD10LHRoaXMuX3VwZGF0ZUNvbnRlbnQoKSx0aGlzfSxjbG9zZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX21hcDtlJiYodC5Ccm93c2VyLnRvdWNoJiYhdGhpcy5vcHRpb25zLm5vSGlkZSYmKHQuRG9tRXZlbnQub2ZmKHRoaXMuX2NvbnRhaW5lciwiY2xpY2siLHRoaXMuY2xvc2UpLGUub2ZmKCJjbGljayIsdGhpcy5jbG9zZSx0aGlzKSksZS5yZW1vdmVMYXllcih0aGlzKSl9LHVwZGF0ZVpJbmRleDpmdW5jdGlvbih0KXt0aGlzLl96SW5kZXg9dCx0aGlzLl9jb250YWluZXImJnRoaXMuX3pJbmRleCYmKHRoaXMuX2NvbnRhaW5lci5zdHlsZS56SW5kZXg9dCl9LHNldE9wYWNpdHk6ZnVuY3Rpb24oZSl7dGhpcy5vcHRpb25zLm9wYWNpdHk9ZSx0aGlzLl9jb250YWluZXImJnQuRG9tVXRpbC5zZXRPcGFjaXR5KHRoaXMuX2NvbnRhaW5lcixlKX0sX2luaXRMYXlvdXQ6ZnVuY3Rpb24oKXtpZih0aGlzLl9jb250YWluZXI9dC5Eb21VdGlsLmNyZWF0ZSgiZGl2IiwibGVhZmxldC1sYWJlbCAiK3RoaXMub3B0aW9ucy5jbGFzc05hbWUrIiBsZWFmbGV0LXpvb20tYW5pbWF0ZWQiKSx0aGlzLl9jb250YWluZXIuc3R5bGUuZm9udFNpemU9dGhpcy5vcHRpb25zLnRleHRzaXplLHRoaXMub3B0aW9ucy50ZXh0T25seSYmdC5Eb21VdGlsLmFkZENsYXNzKHRoaXMuX2NvbnRhaW5lciwibGVhZmxldC1sYWJlbC10ZXh0LW9ubHkiKSx0aGlzLm9wdGlvbnMuc3R5bGUpZm9yKHZhciBlIGluIHRoaXMub3B0aW9ucy5zdHlsZSl0aGlzLm9wdGlvbnMuc3R5bGUuaGFzT3duUHJvcGVydHkoZSkmJih0aGlzLl9jb250YWluZXIuc3R5bGVbZV09dGhpcy5vcHRpb25zLnN0eWxlW2VdKTt0aGlzLnVwZGF0ZVpJbmRleCh0aGlzLl96SW5kZXgpfSxfdXBkYXRlOmZ1bmN0aW9uKCl7dGhpcy5fbWFwJiYodGhpcy5fY29udGFpbmVyLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIsdGhpcy5fdXBkYXRlQ29udGVudCgpLHRoaXMuX3VwZGF0ZVBvc2l0aW9uKCksdGhpcy5fY29udGFpbmVyLnN0eWxlLnZpc2liaWxpdHk9IiIpfSxfdXBkYXRlQ29udGVudDpmdW5jdGlvbigpe3RoaXMuX2NvbnRlbnQmJnRoaXMuX21hcCYmdGhpcy5fcHJldkNvbnRlbnQhPT10aGlzLl9jb250ZW50JiYic3RyaW5nIj09dHlwZW9mIHRoaXMuX2NvbnRlbnQmJih0aGlzLl9jb250YWluZXIuaW5uZXJIVE1MPXRoaXMuX2NvbnRlbnQsdGhpcy5fcHJldkNvbnRlbnQ9dGhpcy5fY29udGVudCx0aGlzLl9sYWJlbFdpZHRoPXRoaXMuX2NvbnRhaW5lci5vZmZzZXRXaWR0aCl9LF91cGRhdGVQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fbGF0bG5nKTt0aGlzLl9zZXRQb3NpdGlvbih0KX0sX2dldEljb25IZWlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc291cmNlLm9wdGlvbnMuaWNvbj90aGlzLl9zb3VyY2Uub3B0aW9ucy5pY29uLm9wdGlvbnMuaWNvblNpemVbMV06MH0sX3NldFBvc2l0aW9uOmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXMuX21hcCxuPXRoaXMuX2NvbnRhaW5lcixvPWkubGF0TG5nVG9Db250YWluZXJQb2ludChpLmdldENlbnRlcigpKSxzPWkubGF5ZXJQb2ludFRvQ29udGFpbmVyUG9pbnQoZSksYT10aGlzLl9nZXREaXJlY3Rpb24oKSxoPXRoaXMuX2xhYmVsV2lkdGgsbD10LnBvaW50KHRoaXMub3B0aW9ucy5vZmZzZXQpLHI9bC55OyJ0b3AiPT09YT8oci09dGhpcy5faXNPbk1hcmtlcigpP3RoaXMuX2dldEljb25IZWlnaHQoKTowLGU9ZS5hZGQodC5wb2ludCgtaC8yLHIpKSk6ImJvdHRvbSI9PT1hPyhyKz10aGlzLl9pc09uTWFya2VyP3RoaXMuX2dldEljb25IZWlnaHQoKTowLGU9ZS5hZGQodC5wb2ludCgtaC8yLHIpKSk6InJpZ2h0Ij09PWF8fCJhdXRvIj09PWEmJnMueDxvLng/KGE9InJpZ2h0IixlPWUuYWRkKGwpKTooYT0ibGVmdCIsZT1lLmFkZCh0LnBvaW50KC1sLngtaCxsLnkpKSksdGhpcy5fc2V0UHJvcGVyQ2xhc3MoZSxhKSx0LkRvbVV0aWwuc2V0UG9zaXRpb24obixlKX0sX2dlbmVyYXRlTGFiZWxDbGFzczpmdW5jdGlvbih0KXtyZXR1cm4ibGVhZmxldC1sYWJlbC0iK3R9LF9zZXRQcm9wZXJDbGFzczpmdW5jdGlvbihlLGkpe2Zvcih2YXIgbj10aGlzLl9tYXAsbz10aGlzLl9jb250YWluZXIscz1pfHx0aGlzLl9nZXREaXJlY3Rpb24oKSxhPShuLmxheWVyUG9pbnRUb0NvbnRhaW5lclBvaW50KGUpLG4ubGF0TG5nVG9Db250YWluZXJQb2ludChuLmdldENlbnRlcigpKSx0aGlzLl9nZW5lcmF0ZUxhYmVsQ2xhc3MocykpLGg9MDtoPHRoaXMuX2RpcmVjdGlvbnMubGVuZ3RoO2grKyl7dmFyIGw9dGhpcy5fZGlyZWN0aW9uc1toXTtpZihsIT09cyl7dmFyIHI9dGhpcy5fZ2VuZXJhdGVMYWJlbENsYXNzKGwpO3QuRG9tVXRpbC5yZW1vdmVDbGFzcyhvLHIpfX10LkRvbVV0aWwuYWRkQ2xhc3MobyxhKX0sX2dldERpcmVjdGlvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMuZGlyZWN0aW9ufSxfem9vbUFuaW1hdGlvbjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9tYXAuX2xhdExuZ1RvTmV3TGF5ZXJQb2ludCh0aGlzLl9sYXRsbmcsdC56b29tLHQuY2VudGVyKS5yb3VuZCgpO3RoaXMuX3NldFBvc2l0aW9uKGUpfSxfb25Nb3ZlRW5kOmZ1bmN0aW9uKCl7dGhpcy5fYW5pbWF0ZWQmJiJhdXRvIiE9PXRoaXMuX2dldERpcmVjdGlvbigpfHx0aGlzLl91cGRhdGVQb3NpdGlvbigpfSxfb25WaWV3UmVzZXQ6ZnVuY3Rpb24odCl7dCYmdC5oYXJkJiZ0aGlzLl91cGRhdGUoKX0sX2luaXRJbnRlcmFjdGlvbjpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5jbGlja2FibGUpe3ZhciBlPXRoaXMuX2NvbnRhaW5lcixpPVsiZGJsY2xpY2siLCJtb3VzZWRvd24iLCJtb3VzZW92ZXIiLCJtb3VzZW91dCIsImNvbnRleHRtZW51Il07dC5Eb21VdGlsLmFkZENsYXNzKGUsImxlYWZsZXQtY2xpY2thYmxlIiksdC5Eb21FdmVudC5vbihlLCJjbGljayIsdGhpcy5fb25Nb3VzZUNsaWNrLHRoaXMpO2Zvcih2YXIgbj0wO248aS5sZW5ndGg7bisrKXQuRG9tRXZlbnQub24oZSxpW25dLHRoaXMuX2ZpcmVNb3VzZUV2ZW50LHRoaXMpfX0sX3JlbW92ZUludGVyYWN0aW9uOmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmNsaWNrYWJsZSl7dmFyIGU9dGhpcy5fY29udGFpbmVyLGk9WyJkYmxjbGljayIsIm1vdXNlZG93biIsIm1vdXNlb3ZlciIsIm1vdXNlb3V0IiwiY29udGV4dG1lbnUiXTt0LkRvbVV0aWwucmVtb3ZlQ2xhc3MoZSwibGVhZmxldC1jbGlja2FibGUiKSx0LkRvbUV2ZW50Lm9mZihlLCJjbGljayIsdGhpcy5fb25Nb3VzZUNsaWNrLHRoaXMpO2Zvcih2YXIgbj0wO248aS5sZW5ndGg7bisrKXQuRG9tRXZlbnQub2ZmKGUsaVtuXSx0aGlzLl9maXJlTW91c2VFdmVudCx0aGlzKX19LF9vbk1vdXNlQ2xpY2s6ZnVuY3Rpb24oZSl7dGhpcy5oYXNFdmVudExpc3RlbmVycyhlLnR5cGUpJiZ0LkRvbUV2ZW50LnN0b3BQcm9wYWdhdGlvbihlKSx0aGlzLmZpcmUoZS50eXBlLHtvcmlnaW5hbEV2ZW50OmV9KX0sX2ZpcmVNb3VzZUV2ZW50OmZ1bmN0aW9uKGUpe3RoaXMuZmlyZShlLnR5cGUse29yaWdpbmFsRXZlbnQ6ZX0pLCJjb250ZXh0bWVudSI9PT1lLnR5cGUmJnRoaXMuaGFzRXZlbnRMaXN0ZW5lcnMoZS50eXBlKSYmdC5Eb21FdmVudC5wcmV2ZW50RGVmYXVsdChlKSwibW91c2Vkb3duIiE9PWUudHlwZT90LkRvbUV2ZW50LnN0b3BQcm9wYWdhdGlvbihlKTp0LkRvbUV2ZW50LnByZXZlbnREZWZhdWx0KGUpfX0pO3JldHVybiB0LkJhc2VNYXJrZXJNZXRob2RzPXtzaG93TGFiZWw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sYWJlbCYmdGhpcy5fbWFwJiYodGhpcy5sYWJlbC5zZXRMYXRMbmcodGhpcy5fbGF0bG5nKSx0aGlzLl9tYXAuc2hvd0xhYmVsKHRoaXMubGFiZWwpKSx0aGlzfSxoaWRlTGFiZWw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sYWJlbCYmdGhpcy5sYWJlbC5jbG9zZSgpLHRoaXN9LHNldExhYmVsTm9IaWRlOmZ1bmN0aW9uKHQpe3RoaXMuX2xhYmVsTm9IaWRlIT09dCYmKHRoaXMuX2xhYmVsTm9IaWRlPXQsdD8odGhpcy5fcmVtb3ZlTGFiZWxSZXZlYWxIYW5kbGVycygpLHRoaXMuc2hvd0xhYmVsKCkpOih0aGlzLl9hZGRMYWJlbFJldmVhbEhhbmRsZXJzKCksdGhpcy5oaWRlTGFiZWwoKSkpfSxiaW5kTGFiZWw6ZnVuY3Rpb24oaSxuKXt2YXIgbz10aGlzLm9wdGlvbnMuaWNvbj90aGlzLm9wdGlvbnMuaWNvbi5vcHRpb25zLmxhYmVsQW5jaG9yOnRoaXMub3B0aW9ucy5sYWJlbEFuY2hvcixzPXQucG9pbnQobyl8fHQucG9pbnQoMCwwKTtyZXR1cm4gcz1zLmFkZChlLnByb3RvdHlwZS5vcHRpb25zLm9mZnNldCksbiYmbi5vZmZzZXQmJihzPXMuYWRkKG4ub2Zmc2V0KSksbj10LlV0aWwuZXh0ZW5kKHtvZmZzZXQ6c30sbiksdGhpcy5fbGFiZWxOb0hpZGU9bi5ub0hpZGUsdGhpcy5sYWJlbHx8KHRoaXMuX2xhYmVsTm9IaWRlfHx0aGlzLl9hZGRMYWJlbFJldmVhbEhhbmRsZXJzKCksdGhpcy5vbigicmVtb3ZlIix0aGlzLmhpZGVMYWJlbCx0aGlzKS5vbigibW92ZSIsdGhpcy5fbW92ZUxhYmVsLHRoaXMpLm9uKCJhZGQiLHRoaXMuX29uTWFya2VyQWRkLHRoaXMpLHRoaXMuX2hhc0xhYmVsSGFuZGxlcnM9ITApLHRoaXMubGFiZWw9bmV3IGUobix0aGlzKS5zZXRDb250ZW50KGkpLHRoaXN9LHVuYmluZExhYmVsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGFiZWwmJih0aGlzLmhpZGVMYWJlbCgpLHRoaXMubGFiZWw9bnVsbCx0aGlzLl9oYXNMYWJlbEhhbmRsZXJzJiYodGhpcy5fbGFiZWxOb0hpZGV8fHRoaXMuX3JlbW92ZUxhYmVsUmV2ZWFsSGFuZGxlcnMoKSx0aGlzLm9mZigicmVtb3ZlIix0aGlzLmhpZGVMYWJlbCx0aGlzKS5vZmYoIm1vdmUiLHRoaXMuX21vdmVMYWJlbCx0aGlzKS5vZmYoImFkZCIsdGhpcy5fb25NYXJrZXJBZGQsdGhpcykpLHRoaXMuX2hhc0xhYmVsSGFuZGxlcnM9ITEpLHRoaXN9LHVwZGF0ZUxhYmVsQ29udGVudDpmdW5jdGlvbih0KXt0aGlzLmxhYmVsJiZ0aGlzLmxhYmVsLnNldENvbnRlbnQodCl9LGdldExhYmVsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGFiZWx9LF9vbk1hcmtlckFkZDpmdW5jdGlvbigpe3RoaXMuX2xhYmVsTm9IaWRlJiZ0aGlzLnNob3dMYWJlbCgpfSxfYWRkTGFiZWxSZXZlYWxIYW5kbGVyczpmdW5jdGlvbigpe3RoaXMub24oIm1vdXNlb3ZlciIsdGhpcy5zaG93TGFiZWwsdGhpcykub24oIm1vdXNlb3V0Iix0aGlzLmhpZGVMYWJlbCx0aGlzKSx0LkJyb3dzZXIudG91Y2gmJnRoaXMub24oImNsaWNrIix0aGlzLnNob3dMYWJlbCx0aGlzKX0sX3JlbW92ZUxhYmVsUmV2ZWFsSGFuZGxlcnM6ZnVuY3Rpb24oKXt0aGlzLm9mZigibW91c2VvdmVyIix0aGlzLnNob3dMYWJlbCx0aGlzKS5vZmYoIm1vdXNlb3V0Iix0aGlzLmhpZGVMYWJlbCx0aGlzKSx0LkJyb3dzZXIudG91Y2gmJnRoaXMub2ZmKCJjbGljayIsdGhpcy5zaG93TGFiZWwsdGhpcyl9LF9tb3ZlTGFiZWw6ZnVuY3Rpb24odCl7dGhpcy5sYWJlbC5zZXRMYXRMbmcodC5sYXRsbmcpfX0sdC5JY29uLkRlZmF1bHQubWVyZ2VPcHRpb25zKHtsYWJlbEFuY2hvcjpuZXcgdC5Qb2ludCg5LC0yMCl9KSx0Lk1hcmtlci5tZXJnZU9wdGlvbnMoe2ljb246bmV3IHQuSWNvbi5EZWZhdWx0fSksdC5NYXJrZXIuaW5jbHVkZSh0LkJhc2VNYXJrZXJNZXRob2RzKSx0Lk1hcmtlci5pbmNsdWRlKHtfb3JpZ2luYWxVcGRhdGVaSW5kZXg6dC5NYXJrZXIucHJvdG90eXBlLl91cGRhdGVaSW5kZXgsX3VwZGF0ZVpJbmRleDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl96SW5kZXgrdDt0aGlzLl9vcmlnaW5hbFVwZGF0ZVpJbmRleCh0KSx0aGlzLmxhYmVsJiZ0aGlzLmxhYmVsLnVwZGF0ZVpJbmRleChlKX0sX29yaWdpbmFsU2V0T3BhY2l0eTp0Lk1hcmtlci5wcm90b3R5cGUuc2V0T3BhY2l0eSxzZXRPcGFjaXR5OmZ1bmN0aW9uKHQsZSl7dGhpcy5vcHRpb25zLmxhYmVsSGFzU2VtaVRyYW5zcGFyZW5jeT1lLHRoaXMuX29yaWdpbmFsU2V0T3BhY2l0eSh0KX0sX29yaWdpbmFsVXBkYXRlT3BhY2l0eTp0Lk1hcmtlci5wcm90b3R5cGUuX3VwZGF0ZU9wYWNpdHksX3VwZGF0ZU9wYWNpdHk6ZnVuY3Rpb24oKXt2YXIgdD0wPT09dGhpcy5vcHRpb25zLm9wYWNpdHk/MDoxO3RoaXMuX29yaWdpbmFsVXBkYXRlT3BhY2l0eSgpLHRoaXMubGFiZWwmJnRoaXMubGFiZWwuc2V0T3BhY2l0eSh0aGlzLm9wdGlvbnMubGFiZWxIYXNTZW1pVHJhbnNwYXJlbmN5P3RoaXMub3B0aW9ucy5vcGFjaXR5OnQpfSxfb3JpZ2luYWxTZXRMYXRMbmc6dC5NYXJrZXIucHJvdG90eXBlLnNldExhdExuZyxzZXRMYXRMbmc6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGFiZWwmJiF0aGlzLl9sYWJlbE5vSGlkZSYmdGhpcy5oaWRlTGFiZWwoKSx0aGlzLl9vcmlnaW5hbFNldExhdExuZyh0KX19KSx0LkNpcmNsZU1hcmtlci5tZXJnZU9wdGlvbnMoe2xhYmVsQW5jaG9yOm5ldyB0LlBvaW50KDAsMCl9KSx0LkNpcmNsZU1hcmtlci5pbmNsdWRlKHQuQmFzZU1hcmtlck1ldGhvZHMpLHQuUGF0aC5pbmNsdWRlKHtiaW5kTGFiZWw6ZnVuY3Rpb24oaSxuKXtyZXR1cm4gdGhpcy5sYWJlbCYmdGhpcy5sYWJlbC5vcHRpb25zPT09bnx8KHRoaXMubGFiZWw9bmV3IGUobix0aGlzKSksdGhpcy5sYWJlbC5zZXRDb250ZW50KGkpLHRoaXMuX3Nob3dMYWJlbEFkZGVkfHwodGhpcy5vbigibW91c2VvdmVyIix0aGlzLl9zaG93TGFiZWwsdGhpcykub24oIm1vdXNlbW92ZSIsdGhpcy5fbW92ZUxhYmVsLHRoaXMpLm9uKCJtb3VzZW91dCByZW1vdmUiLHRoaXMuX2hpZGVMYWJlbCx0aGlzKSx0LkJyb3dzZXIudG91Y2gmJnRoaXMub24oImNsaWNrIix0aGlzLl9zaG93TGFiZWwsdGhpcyksdGhpcy5fc2hvd0xhYmVsQWRkZWQ9ITApLHRoaXN9LHVuYmluZExhYmVsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGFiZWwmJih0aGlzLl9oaWRlTGFiZWwoKSx0aGlzLmxhYmVsPW51bGwsdGhpcy5fc2hvd0xhYmVsQWRkZWQ9ITEsdGhpcy5vZmYoIm1vdXNlb3ZlciIsdGhpcy5fc2hvd0xhYmVsLHRoaXMpLm9mZigibW91c2Vtb3ZlIix0aGlzLl9tb3ZlTGFiZWwsdGhpcykub2ZmKCJtb3VzZW91dCByZW1vdmUiLHRoaXMuX2hpZGVMYWJlbCx0aGlzKSksdGhpc30sdXBkYXRlTGFiZWxDb250ZW50OmZ1bmN0aW9uKHQpe3RoaXMubGFiZWwmJnRoaXMubGFiZWwuc2V0Q29udGVudCh0KX0sX3Nob3dMYWJlbDpmdW5jdGlvbih0KXt0aGlzLmxhYmVsLnNldExhdExuZyh0LmxhdGxuZyksdGhpcy5fbWFwLnNob3dMYWJlbCh0aGlzLmxhYmVsKX0sX21vdmVMYWJlbDpmdW5jdGlvbih0KXt0aGlzLmxhYmVsLnNldExhdExuZyh0LmxhdGxuZyl9LF9oaWRlTGFiZWw6ZnVuY3Rpb24oKXt0aGlzLmxhYmVsLmNsb3NlKCl9fSksdC5NYXAuaW5jbHVkZSh7c2hvd0xhYmVsOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmFkZExheWVyKHQpfX0pLHQuRmVhdHVyZUdyb3VwLmluY2x1ZGUoe2NsZWFyTGF5ZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5iaW5kTGFiZWwoKSx0aGlzLmVhY2hMYXllcih0aGlzLnJlbW92ZUxheWVyLHRoaXMpLHRoaXN9LGJpbmRMYWJlbDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmludm9rZSgiYmluZExhYmVsIix0LGUpfSx1bmJpbmRMYWJlbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmludm9rZSgiaGlkZUxhYmVsIil9LHVwZGF0ZUxhYmVsQ29udGVudDpmdW5jdGlvbih0KXt0aGlzLmludm9rZSgidXBkYXRlTGFiZWxDb250ZW50Iix0KX19KSxlfSx3aW5kb3cpOw=="></script> <script src="data:application/x-javascript;base64,IWZ1bmN0aW9uKGEpe2lmKCJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmInVuZGVmaW5lZCIhPXR5cGVvZiBtb2R1bGUpbW9kdWxlLmV4cG9ydHM9YSgpO2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZClkZWZpbmUoW10sYSk7ZWxzZXt2YXIgYjtiPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzoidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6dGhpcyxiLnByb2o0PWEoKX19KGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGEoYixjLGQpe2Z1bmN0aW9uIGUoZyxoKXtpZighY1tnXSl7aWYoIWJbZ10pe3ZhciBpPSJmdW5jdGlvbiI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFoJiZpKXJldHVybiBpKGcsITApO2lmKGYpcmV0dXJuIGYoZywhMCk7dmFyIGo9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIrZysiJyIpO3Rocm93IGouY29kZT0iTU9EVUxFX05PVF9GT1VORCIsan12YXIgaz1jW2ddPXtleHBvcnRzOnt9fTtiW2ddWzBdLmNhbGwoay5leHBvcnRzLGZ1bmN0aW9uKGEpe3ZhciBjPWJbZ11bMV1bYV07cmV0dXJuIGUoYz9jOmEpfSxrLGsuZXhwb3J0cyxhLGIsYyxkKX1yZXR1cm4gY1tnXS5leHBvcnRzfWZvcih2YXIgZj0iZnVuY3Rpb24iPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxnPTA7ZzxkLmxlbmd0aDtnKyspZShkW2ddKTtyZXR1cm4gZX0oeyIuL2luY2x1ZGVkUHJvamVjdGlvbnMiOltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9W2EoIi4vbGliL3Byb2plY3Rpb25zL3RtZXJjIiksYSgiLi9saWIvcHJvamVjdGlvbnMvdXRtIiksYSgiLi9saWIvcHJvamVjdGlvbnMvc3RlcmVhIiksYSgiLi9saWIvcHJvamVjdGlvbnMvc3RlcmUiKSxhKCIuL2xpYi9wcm9qZWN0aW9ucy9zb21lcmMiKSxhKCIuL2xpYi9wcm9qZWN0aW9ucy9vbWVyYyIpLGEoIi4vbGliL3Byb2plY3Rpb25zL2xjYyIpLGEoIi4vbGliL3Byb2plY3Rpb25zL2tyb3ZhayIpLGEoIi4vbGliL3Byb2plY3Rpb25zL2Nhc3MiKSxhKCIuL2xpYi9wcm9qZWN0aW9ucy9sYWVhIiksYSgiLi9saWIvcHJvamVjdGlvbnMvYWVhIiksYSgiLi9saWIvcHJvamVjdGlvbnMvZ25vbSIpLGEoIi4vbGliL3Byb2plY3Rpb25zL2NlYSIpLGEoIi4vbGliL3Byb2plY3Rpb25zL2VxYyIpLGEoIi4vbGliL3Byb2plY3Rpb25zL3BvbHkiKSxhKCIuL2xpYi9wcm9qZWN0aW9ucy9uem1nIiksYSgiLi9saWIvcHJvamVjdGlvbnMvbWlsbCIpLGEoIi4vbGliL3Byb2plY3Rpb25zL3NpbnUiKSxhKCIuL2xpYi9wcm9qZWN0aW9ucy9tb2xsIiksYSgiLi9saWIvcHJvamVjdGlvbnMvZXFkYyIpLGEoIi4vbGliL3Byb2plY3Rpb25zL3ZhbmRnIiksYSgiLi9saWIvcHJvamVjdGlvbnMvYWVxZCIpLGEoIi4vbGliL3Byb2plY3Rpb25zL29ydGhvIildO2IuZXhwb3J0cz1mdW5jdGlvbihwcm9qNCl7ZC5mb3JFYWNoKGZ1bmN0aW9uKGEpe3Byb2o0LlByb2oucHJvamVjdGlvbnMuYWRkKGEpfSl9fSx7Ii4vbGliL3Byb2plY3Rpb25zL2FlYSI6NDAsIi4vbGliL3Byb2plY3Rpb25zL2FlcWQiOjQxLCIuL2xpYi9wcm9qZWN0aW9ucy9jYXNzIjo0MiwiLi9saWIvcHJvamVjdGlvbnMvY2VhIjo0MywiLi9saWIvcHJvamVjdGlvbnMvZXFjIjo0NCwiLi9saWIvcHJvamVjdGlvbnMvZXFkYyI6NDUsIi4vbGliL3Byb2plY3Rpb25zL2dub20iOjQ3LCIuL2xpYi9wcm9qZWN0aW9ucy9rcm92YWsiOjQ4LCIuL2xpYi9wcm9qZWN0aW9ucy9sYWVhIjo0OSwiLi9saWIvcHJvamVjdGlvbnMvbGNjIjo1MCwiLi9saWIvcHJvamVjdGlvbnMvbWlsbCI6NTMsIi4vbGliL3Byb2plY3Rpb25zL21vbGwiOjU0LCIuL2xpYi9wcm9qZWN0aW9ucy9uem1nIjo1NSwiLi9saWIvcHJvamVjdGlvbnMvb21lcmMiOjU2LCIuL2xpYi9wcm9qZWN0aW9ucy9vcnRobyI6NTcsIi4vbGliL3Byb2plY3Rpb25zL3BvbHkiOjU4LCIuL2xpYi9wcm9qZWN0aW9ucy9zaW51Ijo1OSwiLi9saWIvcHJvamVjdGlvbnMvc29tZXJjIjo2MCwiLi9saWIvcHJvamVjdGlvbnMvc3RlcmUiOjYxLCIuL2xpYi9wcm9qZWN0aW9ucy9zdGVyZWEiOjYyLCIuL2xpYi9wcm9qZWN0aW9ucy90bWVyYyI6NjMsIi4vbGliL3Byb2plY3Rpb25zL3V0bSI6NjQsIi4vbGliL3Byb2plY3Rpb25zL3ZhbmRnIjo2NX1dLDE6W2Z1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBQb2ludChhLGIsYyl7aWYoISh0aGlzIGluc3RhbmNlb2YgUG9pbnQpKXJldHVybiBuZXcgUG9pbnQoYSxiLGMpO2lmKEFycmF5LmlzQXJyYXkoYSkpdGhpcy54PWFbMF0sdGhpcy55PWFbMV0sdGhpcy56PWFbMl18fDA7ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIGEpdGhpcy54PWEueCx0aGlzLnk9YS55LHRoaXMuej1hLnp8fDA7ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIGEmJiJ1bmRlZmluZWQiPT10eXBlb2YgYil7dmFyIGQ9YS5zcGxpdCgiLCIpO3RoaXMueD1wYXJzZUZsb2F0KGRbMF0sMTApLHRoaXMueT1wYXJzZUZsb2F0KGRbMV0sMTApLHRoaXMuej1wYXJzZUZsb2F0KGRbMl0sMTApfHwwfWVsc2UgdGhpcy54PWEsdGhpcy55PWIsdGhpcy56PWN8fDA7Y29uc29sZS53YXJuKCJwcm9qNC5Qb2ludCB3aWxsIGJlIHJlbW92ZWQgaW4gdmVyc2lvbiAzLCB1c2UgcHJvajQudG9Qb2ludCIpfXZhciBkPWEoIm1ncnMiKTtQb2ludC5mcm9tTUdSUz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3IFBvaW50KGQudG9Qb2ludChhKSl9LFBvaW50LnByb3RvdHlwZS50b01HUlM9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuZm9yd2FyZChbdGhpcy54LHRoaXMueV0sYSl9LGIuZXhwb3J0cz1Qb2ludH0se21ncnM6Njh9XSwyOltmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gUHJvamVjdGlvbihhLGIpe2lmKCEodGhpcyBpbnN0YW5jZW9mIFByb2plY3Rpb24pKXJldHVybiBuZXcgUHJvamVjdGlvbihhKTtiPWJ8fGZ1bmN0aW9uKGEpe2lmKGEpdGhyb3cgYX07dmFyIGM9ZChhKTtpZigib2JqZWN0IiE9dHlwZW9mIGMpcmV0dXJuIHZvaWQgYihhKTt2YXIgZj1nKGMpLGg9UHJvamVjdGlvbi5wcm9qZWN0aW9ucy5nZXQoZi5wcm9qTmFtZSk7aD8oZSh0aGlzLGYpLGUodGhpcyxoKSx0aGlzLmluaXQoKSxiKG51bGwsdGhpcykpOmIoYSl9dmFyIGQ9YSgiLi9wYXJzZUNvZGUiKSxlPWEoIi4vZXh0ZW5kIiksZj1hKCIuL3Byb2plY3Rpb25zIiksZz1hKCIuL2Rlcml2ZUNvbnN0YW50cyIpO1Byb2plY3Rpb24ucHJvamVjdGlvbnM9ZixQcm9qZWN0aW9uLnByb2plY3Rpb25zLnN0YXJ0KCksYi5leHBvcnRzPVByb2plY3Rpb259LHsiLi9kZXJpdmVDb25zdGFudHMiOjMzLCIuL2V4dGVuZCI6MzQsIi4vcGFyc2VDb2RlIjozNywiLi9wcm9qZWN0aW9ucyI6Mzl9XSwzOltmdW5jdGlvbihhLGIsYyl7Yi5leHBvcnRzPWZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGYsZz1jLngsaD1jLnksaT1jLnp8fDA7Zm9yKGY9MDszPmY7ZisrKWlmKCFifHwyIT09Znx8dm9pZCAwIT09Yy56KXN3aXRjaCgwPT09Zj8oZD1nLGU9IngiKToxPT09Zj8oZD1oLGU9InkiKTooZD1pLGU9InoiKSxhLmF4aXNbZl0pe2Nhc2UiZSI6Y1tlXT1kO2JyZWFrO2Nhc2UidyI6Y1tlXT0tZDticmVhaztjYXNlIm4iOmNbZV09ZDticmVhaztjYXNlInMiOmNbZV09LWQ7YnJlYWs7Y2FzZSJ1Ijp2b2lkIDAhPT1jW2VdJiYoYy56PWQpO2JyZWFrO2Nhc2UiZCI6dm9pZCAwIT09Y1tlXSYmKGMuej0tZCk7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gbnVsbH1yZXR1cm4gY319LHt9XSw0OltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9TWF0aC5QSS8yLGU9YSgiLi9zaWduIik7Yi5leHBvcnRzPWZ1bmN0aW9uKGEpe3JldHVybiBNYXRoLmFicyhhKTxkP2E6YS1lKGEpKk1hdGguUEl9fSx7Ii4vc2lnbiI6MjF9XSw1OltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9MipNYXRoLlBJLGU9My4xNDE1OTI2NTM1OSxmPWEoIi4vc2lnbiIpO2IuZXhwb3J0cz1mdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5hYnMoYSk8PWU/YTphLWYoYSkqZH19LHsiLi9zaWduIjoyMX1dLDY6W2Z1bmN0aW9uKGEsYixjKXtiLmV4cG9ydHM9ZnVuY3Rpb24oYSl7cmV0dXJuIE1hdGguYWJzKGEpPjEmJihhPWE+MT8xOi0xKSxNYXRoLmFzaW4oYSl9fSx7fV0sNzpbZnVuY3Rpb24oYSxiLGMpe2IuZXhwb3J0cz1mdW5jdGlvbihhKXtyZXR1cm4gMS0uMjUqYSooMSthLzE2KigzKzEuMjUqYSkpfX0se31dLDg6W2Z1bmN0aW9uKGEsYixjKXtiLmV4cG9ydHM9ZnVuY3Rpb24oYSl7cmV0dXJuLjM3NSphKigxKy4yNSphKigxKy40Njg3NSphKSl9fSx7fV0sOTpbZnVuY3Rpb24oYSxiLGMpe2IuZXhwb3J0cz1mdW5jdGlvbihhKXtyZXR1cm4uMDU4NTkzNzUqYSphKigxKy43NSphKX19LHt9XSwxMDpbZnVuY3Rpb24oYSxiLGMpe2IuZXhwb3J0cz1mdW5jdGlvbihhKXtyZXR1cm4gYSphKmEqKDM1LzMwNzIpfX0se31dLDExOltmdW5jdGlvbihhLGIsYyl7Yi5leHBvcnRzPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1iKmM7cmV0dXJuIGEvTWF0aC5zcXJ0KDEtZCpkKX19LHt9XSwxMjpbZnVuY3Rpb24oYSxiLGMpe2IuZXhwb3J0cz1mdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmLGc7Zj1hL2I7Zm9yKHZhciBoPTA7MTU+aDtoKyspaWYoZz0oYS0oYipmLWMqTWF0aC5zaW4oMipmKStkKk1hdGguc2luKDQqZiktZSpNYXRoLnNpbig2KmYpKSkvKGItMipjKk1hdGguY29zKDIqZikrNCpkKk1hdGguY29zKDQqZiktNiplKk1hdGguY29zKDYqZikpLGYrPWcsTWF0aC5hYnMoZyk8PTFlLTEwKXJldHVybiBmO3JldHVybiBOYU59fSx7fV0sMTM6W2Z1bmN0aW9uKGEsYixjKXt2YXIgZD1NYXRoLlBJLzI7Yi5leHBvcnRzPWZ1bmN0aW9uKGEsYil7dmFyIGM9MS0oMS1hKmEpLygyKmEpKk1hdGgubG9nKCgxLWEpLygxK2EpKTtpZihNYXRoLmFicyhNYXRoLmFicyhiKS1jKTwxZS02KXJldHVybiAwPmI/LTEqZDpkO2Zvcih2YXIgZSxmLGcsaCxpPU1hdGguYXNpbiguNSpiKSxqPTA7MzA+ajtqKyspaWYoZj1NYXRoLnNpbihpKSxnPU1hdGguY29zKGkpLGg9YSpmLGU9TWF0aC5wb3coMS1oKmgsMikvKDIqZykqKGIvKDEtYSphKS1mLygxLWgqaCkrLjUvYSpNYXRoLmxvZygoMS1oKS8oMStoKSkpLGkrPWUsTWF0aC5hYnMoZSk8PTFlLTEwKXJldHVybiBpO3JldHVybiBOYU59fSx7fV0sMTQ6W2Z1bmN0aW9uKGEsYixjKXtiLmV4cG9ydHM9ZnVuY3Rpb24oYSxiLGMsZCxlKXtyZXR1cm4gYSplLWIqTWF0aC5zaW4oMiplKStjKk1hdGguc2luKDQqZSktZCpNYXRoLnNpbig2KmUpfX0se31dLDE1OltmdW5jdGlvbihhLGIsYyl7Yi5leHBvcnRzPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hKmI7cmV0dXJuIGMvTWF0aC5zcXJ0KDEtZCpkKX19LHt9XSwxNjpbZnVuY3Rpb24oYSxiLGMpe3ZhciBkPU1hdGguUEkvMjtiLmV4cG9ydHM9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGMsZSxmPS41KmEsZz1kLTIqTWF0aC5hdGFuKGIpLGg9MDsxNT49aDtoKyspaWYoYz1hKk1hdGguc2luKGcpLGU9ZC0yKk1hdGguYXRhbihiKk1hdGgucG93KCgxLWMpLygxK2MpLGYpKS1nLGcrPWUsTWF0aC5hYnMoZSk8PTFlLTEwKXJldHVybiBnO3JldHVybi05OTk5fX0se31dLDE3OltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9MSxlPS4yNSxmPS4wNDY4NzUsZz0uMDE5NTMxMjUsaD0uMDEwNjgxMTUyMzQzNzUsaT0uNzUsaj0uNDY4NzUsaz0uMDEzMDIwODMzMzMzMzMzMzM0LGw9LjAwNzEyMDc2ODIyOTE2NjY2NyxtPS4zNjQ1ODMzMzMzMzMzMzMzLG49LjAwNTY5NjYxNDU4MzMzMzMzMyxvPS4zMDc2MTcxODc1O2IuZXhwb3J0cz1mdW5jdGlvbihhKXt2YXIgYj1bXTtiWzBdPWQtYSooZSthKihmK2EqKGcrYSpoKSkpLGJbMV09YSooaS1hKihmK2EqKGcrYSpoKSkpO3ZhciBjPWEqYTtyZXR1cm4gYlsyXT1jKihqLWEqKGsrYSpsKSksYyo9YSxiWzNdPWMqKG0tYSpuKSxiWzRdPWMqYSpvLGJ9fSx7fV0sMTg6W2Z1bmN0aW9uKGEsYixjKXt2YXIgZD1hKCIuL3BqX21sZm4iKSxlPTFlLTEwLGY9MjA7Yi5leHBvcnRzPWZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGc9MS8oMS1iKSxoPWEsaT1mO2k7LS1pKXt2YXIgaj1NYXRoLnNpbihoKSxrPTEtYipqKmo7aWYoaz0oZChoLGosTWF0aC5jb3MoaCksYyktYSkqKGsqTWF0aC5zcXJ0KGspKSpnLGgtPWssTWF0aC5hYnMoayk8ZSlyZXR1cm4gaH1yZXR1cm4gaH19LHsiLi9wal9tbGZuIjoxOX1dLDE5OltmdW5jdGlvbihhLGIsYyl7Yi5leHBvcnRzPWZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiBjKj1iLGIqPWIsZFswXSphLWMqKGRbMV0rYiooZFsyXStiKihkWzNdK2IqZFs0XSkpKX19LHt9XSwyMDpbZnVuY3Rpb24oYSxiLGMpe2IuZXhwb3J0cz1mdW5jdGlvbihhLGIpe3ZhciBjO3JldHVybiBhPjFlLTc/KGM9YSpiLCgxLWEqYSkqKGIvKDEtYypjKS0uNS9hKk1hdGgubG9nKCgxLWMpLygxK2MpKSkpOjIqYn19LHt9XSwyMTpbZnVuY3Rpb24oYSxiLGMpe2IuZXhwb3J0cz1mdW5jdGlvbihhKXtyZXR1cm4gMD5hPy0xOjF9fSx7fV0sMjI6W2Z1bmN0aW9uKGEsYixjKXtiLmV4cG9ydHM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gTWF0aC5wb3coKDEtYSkvKDErYSksYil9fSx7fV0sMjM6W2Z1bmN0aW9uKGEsYixjKXtiLmV4cG9ydHM9ZnVuY3Rpb24oYSl7dmFyIGI9e3g6YVswXSx5OmFbMV19O3JldHVybiBhLmxlbmd0aD4yJiYoYi56PWFbMl0pLGEubGVuZ3RoPjMmJihiLm09YVszXSksYn19LHt9XSwyNDpbZnVuY3Rpb24oYSxiLGMpe3ZhciBkPU1hdGguUEkvMjtiLmV4cG9ydHM9ZnVuY3Rpb24oYSxiLGMpe3ZhciBlPWEqYyxmPS41KmE7cmV0dXJuIGU9TWF0aC5wb3coKDEtZSkvKDErZSksZiksTWF0aC50YW4oLjUqKGQtYikpL2V9fSx7fV0sMjU6W2Z1bmN0aW9uKGEsYixjKXtjLndnczg0PXt0b3dnczg0OiIwLDAsMCIsZWxsaXBzZToiV0dTODQiLGRhdHVtTmFtZToiV0dTODQifSxjLmNoMTkwMz17dG93Z3M4NDoiNjc0LjM3NCwxNS4wNTYsNDA1LjM0NiIsZWxsaXBzZToiYmVzc2VsIixkYXR1bU5hbWU6InN3aXNzIn0sYy5nZ3JzODc9e3Rvd2dzODQ6Ii0xOTkuODcsNzQuNzksMjQ2LjYyIixlbGxpcHNlOiJHUlM4MCIsZGF0dW1OYW1lOiJHcmVla19HZW9kZXRpY19SZWZlcmVuY2VfU3lzdGVtXzE5ODcifSxjLm5hZDgzPXt0b3dnczg0OiIwLDAsMCIsZWxsaXBzZToiR1JTODAiLGRhdHVtTmFtZToiTm9ydGhfQW1lcmljYW5fRGF0dW1fMTk4MyJ9LGMubmFkMjc9e25hZGdyaWRzOiJAY29udXMsQGFsYXNrYSxAbnR2Ml8wLmdzYixAbnR2MV9jYW4uZGF0IixlbGxpcHNlOiJjbHJrNjYiLGRhdHVtTmFtZToiTm9ydGhfQW1lcmljYW5fRGF0dW1fMTkyNyJ9LGMucG90c2RhbT17dG93Z3M4NDoiNjA2LjAsMjMuMCw0MTMuMCIsZWxsaXBzZToiYmVzc2VsIixkYXR1bU5hbWU6IlBvdHNkYW0gUmF1ZW5iZXJnIDE5NTAgREhETiJ9LGMuY2FydGhhZ2U9e3Rvd2dzODQ6Ii0yNjMuMCw2LjAsNDMxLjAiLGVsbGlwc2U6ImNsYXJrODAiLGRhdHVtTmFtZToiQ2FydGhhZ2UgMTkzNCBUdW5pc2lhIn0sYy5oZXJtYW5uc2tvZ2VsPXt0b3dnczg0OiI2NTMuMCwtMjEyLjAsNDQ5LjAiLGVsbGlwc2U6ImJlc3NlbCIsZGF0dW1OYW1lOiJIZXJtYW5uc2tvZ2VsIn0sYy5pcmU2NT17dG93Z3M4NDoiNDgyLjUzMCwtMTMwLjU5Niw1NjQuNTU3LC0xLjA0MiwtMC4yMTQsLTAuNjMxLDguMTUiLGVsbGlwc2U6Im1vZF9haXJ5IixkYXR1bU5hbWU6IklyZWxhbmQgMTk2NSJ9LGMucmFzc2FkaXJhbj17dG93Z3M4NDoiLTEzMy42MywtMTU3LjUsLTE1OC42MiIsZWxsaXBzZToiaW50bCIsZGF0dW1OYW1lOiJSYXNzYWRpcmFuIn0sYy5uemdkNDk9e3Rvd2dzODQ6IjU5LjQ3LC01LjA0LDE4Ny40NCwwLjQ3LC0wLjEsMS4wMjQsLTQuNTk5MyIsZWxsaXBzZToiaW50bCIsZGF0dW1OYW1lOiJOZXcgWmVhbGFuZCBHZW9kZXRpYyBEYXR1bSAxOTQ5In0sYy5vc2diMzY9e3Rvd2dzODQ6IjQ0Ni40NDgsLTEyNS4xNTcsNTQyLjA2MCwwLjE1MDIsMC4yNDcwLDAuODQyMSwtMjAuNDg5NCIsZWxsaXBzZToiYWlyeSIsZGF0dW1OYW1lOiJBaXJ5IDE4MzAifSxjLnNfanRzaz17dG93Z3M4NDoiNTg5LDc2LDQ4MCIsZWxsaXBzZToiYmVzc2VsIixkYXR1bU5hbWU6IlMtSlRTSyAoRmVycm8pIn0sYy5iZWR1YXJhbT17dG93Z3M4NDoiLTEwNiwtODcsMTg4IixlbGxpcHNlOiJjbHJrODAiLGRhdHVtTmFtZToiQmVkdWFyYW0ifSxjLmd1bnVuZ19zZWdhcmE9e3Rvd2dzODQ6Ii00MDMsNjg0LDQxIixlbGxpcHNlOiJiZXNzZWwiLGRhdHVtTmFtZToiR3VudW5nIFNlZ2FyYSBKYWthcnRhIn0sYy5ybmI3Mj17dG93Z3M4NDoiMTA2Ljg2OSwtNTIuMjk3OCwxMDMuNzI0LC0wLjMzNjU3LDAuNDU2OTU1LC0xLjg0MjE4LDEiLGVsbGlwc2U6ImludGwiLGRhdHVtTmFtZToiUmVzZWF1IE5hdGlvbmFsIEJlbGdlIDE5NzIifX0se31dLDI2OltmdW5jdGlvbihhLGIsYyl7Yy5NRVJJVD17YTo2Mzc4MTM3LHJmOjI5OC4yNTcsZWxsaXBzZU5hbWU6Ik1FUklUIDE5ODMifSxjLlNHUzg1PXthOjYzNzgxMzYscmY6Mjk4LjI1NyxlbGxpcHNlTmFtZToiU292aWV0IEdlb2RldGljIFN5c3RlbSA4NSJ9LGMuR1JTODA9e2E6NjM3ODEzNyxyZjoyOTguMjU3MjIyMTAxLGVsbGlwc2VOYW1lOiJHUlMgMTk4MChJVUdHLCAxOTgwKSJ9LGMuSUFVNzY9e2E6NjM3ODE0MCxyZjoyOTguMjU3LGVsbGlwc2VOYW1lOiJJQVUgMTk3NiJ9LGMuYWlyeT17YTo2Mzc3NTYzLjM5NixiOjYzNTYyNTYuOTEsZWxsaXBzZU5hbWU6IkFpcnkgMTgzMCJ9LGMuQVBMND17YTo2Mzc4MTM3LHJmOjI5OC4yNSxlbGxpcHNlTmFtZToiQXBwbC4gUGh5c2ljcy4gMTk2NSJ9LGMuTldMOUQ9e2E6NjM3ODE0NSxyZjoyOTguMjUsZWxsaXBzZU5hbWU6Ik5hdmFsIFdlYXBvbnMgTGFiLiwgMTk2NSJ9LGMubW9kX2Fpcnk9e2E6NjM3NzM0MC4xODksYjo2MzU2MDM0LjQ0NixlbGxpcHNlTmFtZToiTW9kaWZpZWQgQWlyeSJ9LGMuYW5kcmFlPXthOjYzNzcxMDQuNDMscmY6MzAwLGVsbGlwc2VOYW1lOiJBbmRyYWUgMTg3NiAoRGVuLiwgSWNsbmQuKSJ9LGMuYXVzdF9TQT17YTo2Mzc4MTYwLHJmOjI5OC4yNSxlbGxpcHNlTmFtZToiQXVzdHJhbGlhbiBOYXRsICYgUy4gQW1lci4gMTk2OSJ9LGMuR1JTNjc9e2E6NjM3ODE2MCxyZjoyOTguMjQ3MTY3NDI3LGVsbGlwc2VOYW1lOiJHUlMgNjcoSVVHRyAxOTY3KSJ9LGMuYmVzc2VsPXthOjYzNzczOTcuMTU1LHJmOjI5OS4xNTI4MTI4LGVsbGlwc2VOYW1lOiJCZXNzZWwgMTg0MSJ9LGMuYmVzc19uYW09e2E6NjM3NzQ4My44NjUscmY6Mjk5LjE1MjgxMjgsZWxsaXBzZU5hbWU6IkJlc3NlbCAxODQxIChOYW1pYmlhKSJ9LGMuY2xyazY2PXthOjYzNzgyMDYuNCxiOjYzNTY1ODMuOCxlbGxpcHNlTmFtZToiQ2xhcmtlIDE4NjYifSxjLmNscms4MD17YTo2Mzc4MjQ5LjE0NSxyZjoyOTMuNDY2MyxlbGxpcHNlTmFtZToiQ2xhcmtlIDE4ODAgbW9kLiJ9LGMuY2xyazU4PXthOjYzNzgyOTMuNjQ1MjA4NzU5LHJmOjI5NC4yNjA2NzYzNjkyNjU0LGVsbGlwc2VOYW1lOiJDbGFya2UgMTg1OCJ9LGMuQ1BNPXthOjYzNzU3MzguNyxyZjozMzQuMjksZWxsaXBzZU5hbWU6IkNvbW0uIGRlcyBQb2lkcyBldCBNZXN1cmVzIDE3OTkifSxjLmRlbG1icj17YTo2Mzc2NDI4LHJmOjMxMS41LGVsbGlwc2VOYW1lOiJEZWxhbWJyZSAxODEwIChCZWxnaXVtKSJ9LGMuZW5nZWxpcz17YTo2Mzc4MTM2LjA1LHJmOjI5OC4yNTY2LGVsbGlwc2VOYW1lOiJFbmdlbGlzIDE5ODUifSxjLmV2cnN0MzA9e2E6NjM3NzI3Ni4zNDUscmY6MzAwLjgwMTcsZWxsaXBzZU5hbWU6IkV2ZXJlc3QgMTgzMCJ9LGMuZXZyc3Q0OD17YTo2Mzc3MzA0LjA2MyxyZjozMDAuODAxNyxlbGxpcHNlTmFtZToiRXZlcmVzdCAxOTQ4In0sYy5ldnJzdDU2PXthOjYzNzczMDEuMjQzLHJmOjMwMC44MDE3LGVsbGlwc2VOYW1lOiJFdmVyZXN0IDE5NTYifSxjLmV2cnN0Njk9e2E6NjM3NzI5NS42NjQscmY6MzAwLjgwMTcsZWxsaXBzZU5hbWU6IkV2ZXJlc3QgMTk2OSJ9LGMuZXZyc3RTUz17YTo2Mzc3Mjk4LjU1NixyZjozMDAuODAxNyxlbGxpcHNlTmFtZToiRXZlcmVzdCAoU2FiYWggJiBTYXJhd2FrKSJ9LGMuZnNjaHI2MD17YTo2Mzc4MTY2LHJmOjI5OC4zLGVsbGlwc2VOYW1lOiJGaXNjaGVyIChNZXJjdXJ5IERhdHVtKSAxOTYwIn0sYy5mc2NocjYwbT17YTo2Mzc4MTU1LHJmOjI5OC4zLGVsbGlwc2VOYW1lOiJGaXNjaGVyIDE5NjAifSxjLmZzY2hyNjg9e2E6NjM3ODE1MCxyZjoyOTguMyxlbGxpcHNlTmFtZToiRmlzY2hlciAxOTY4In0sYy5oZWxtZXJ0PXthOjYzNzgyMDAscmY6Mjk4LjMsZWxsaXBzZU5hbWU6IkhlbG1lcnQgMTkwNiJ9LGMuaG91Z2g9e2E6NjM3ODI3MCxyZjoyOTcsZWxsaXBzZU5hbWU6IkhvdWdoIn0sYy5pbnRsPXthOjYzNzgzODgscmY6Mjk3LGVsbGlwc2VOYW1lOiJJbnRlcm5hdGlvbmFsIDE5MDkgKEhheWZvcmQpIn0sYy5rYXVsYT17YTo2Mzc4MTYzLHJmOjI5OC4yNCxlbGxpcHNlTmFtZToiS2F1bGEgMTk2MSJ9LGMubGVyY2g9e2E6NjM3ODEzOSxyZjoyOTguMjU3LGVsbGlwc2VOYW1lOiJMZXJjaCAxOTc5In0sYy5tcHJ0cz17YTo2Mzk3MzAwLHJmOjE5MSxlbGxpcHNlTmFtZToiTWF1cGVydGl1cyAxNzM4In0sYy5uZXdfaW50bD17YTo2Mzc4MTU3LjUsYjo2MzU2NzcyLjIsZWxsaXBzZU5hbWU6Ik5ldyBJbnRlcm5hdGlvbmFsIDE5NjcifSxjLnBsZXNzaXM9e2E6NjM3NjUyMyxyZjo2MzU1ODYzLGVsbGlwc2VOYW1lOiJQbGVzc2lzIDE4MTcgKEZyYW5jZSkifSxjLmtyYXNzPXthOjYzNzgyNDUscmY6Mjk4LjMsZWxsaXBzZU5hbWU6IktyYXNzb3Zza3ksIDE5NDIifSxjLlNFYXNpYT17YTo2Mzc4MTU1LGI6NjM1Njc3My4zMjA1LGVsbGlwc2VOYW1lOiJTb3V0aGVhc3QgQXNpYSJ9LGMud2FsYmVjaz17YTo2Mzc2ODk2LGI6NjM1NTgzNC44NDY3LGVsbGlwc2VOYW1lOiJXYWxiZWNrIn0sYy5XR1M2MD17YTo2Mzc4MTY1LHJmOjI5OC4zLGVsbGlwc2VOYW1lOiJXR1MgNjAifSxjLldHUzY2PXthOjYzNzgxNDUscmY6Mjk4LjI1LGVsbGlwc2VOYW1lOiJXR1MgNjYifSxjLldHUzc9e2E6NjM3ODEzNSxyZjoyOTguMjYsZWxsaXBzZU5hbWU6IldHUyA3MiJ9LGMuV0dTODQ9e2E6NjM3ODEzNyxyZjoyOTguMjU3MjIzNTYzLGVsbGlwc2VOYW1lOiJXR1MgODQifSxjLnNwaGVyZT17YTo2MzcwOTk3LGI6NjM3MDk5NyxlbGxpcHNlTmFtZToiTm9ybWFsIFNwaGVyZSAocj02MzcwOTk3KSJ9fSx7fV0sMjc6W2Z1bmN0aW9uKGEsYixjKXtjLmdyZWVud2ljaD0wLGMubGlzYm9uPS05LjEzMTkwNjExMTExMSxjLnBhcmlzPTIuMzM3MjI5MTY2NjY3LGMuYm9nb3RhPS03NC4wODA5MTY2NjY2NjcsYy5tYWRyaWQ9LTMuNjg3OTM4ODg4ODg5LGMucm9tZT0xMi40NTIzMzMzMzMzMzMsYy5iZXJuPTcuNDM5NTgzMzMzMzMzLGMuamFrYXJ0YT0xMDYuODA3NzE5NDQ0NDQ0LGMuZmVycm89LTE3LjY2NjY2NjY2NjY2NyxjLmJydXNzZWxzPTQuMzY3OTc1LGMuc3RvY2tob2xtPTE4LjA1ODI3Nzc3Nzc3OCxjLmF0aGVucz0yMy43MTYzMzc1LGMub3Nsbz0xMC43MjI5MTY2NjY2Njd9LHt9XSwyODpbZnVuY3Rpb24oYSxiLGMpe2MuZnQ9e3RvX21ldGVyOi4zMDQ4fSxjWyJ1cy1mdCJdPXt0b19tZXRlcjoxMjAwLzM5Mzd9fSx7fV0sMjk6W2Z1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEsYixjKXt2YXIgZDtyZXR1cm4gQXJyYXkuaXNBcnJheShjKT8oZD1nKGEsYixjKSwzPT09Yy5sZW5ndGg/W2QueCxkLnksZC56XTpbZC54LGQueV0pOmcoYSxiLGMpfWZ1bmN0aW9uIGUoYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBmP2E6YS5vUHJvaj9hLm9Qcm9qOmYoYSl9ZnVuY3Rpb24gcHJvajQoYSxiLGMpe2E9ZShhKTt2YXIgZixnPSExO3JldHVybiJ1bmRlZmluZWQiPT10eXBlb2YgYj8oYj1hLGE9aCxnPSEwKTooInVuZGVmaW5lZCIhPXR5cGVvZiBiLnh8fEFycmF5LmlzQXJyYXkoYikpJiYoYz1iLGI9YSxhPWgsZz0hMCksYj1lKGIpLGM/ZChhLGIsYyk6KGY9e2ZvcndhcmQ6ZnVuY3Rpb24oYyl7cmV0dXJuIGQoYSxiLGMpfSxpbnZlcnNlOmZ1bmN0aW9uKGMpe3JldHVybiBkKGIsYSxjKX19LGcmJihmLm9Qcm9qPWIpLGYpfXZhciBmPWEoIi4vUHJvaiIpLGc9YSgiLi90cmFuc2Zvcm0iKSxoPWYoIldHUzg0Iik7Yi5leHBvcnRzPXByb2o0fSx7Ii4vUHJvaiI6MiwiLi90cmFuc2Zvcm0iOjY2fV0sMzA6W2Z1bmN0aW9uKGEsYixjKXt2YXIgZD1NYXRoLlBJLzIsZT0xLGY9MixnPTMsaD00LGk9NSxqPTQ4NDgxMzY4MTEwOTUzNmUtMjAsaz0xLjAwMjYsbD0uMzgyNjgzNDMyMzY1MDg5OCxtPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgbT8odGhpcy5kYXR1bV90eXBlPWgsdm9pZChhJiYoYS5kYXR1bUNvZGUmJiJub25lIj09PWEuZGF0dW1Db2RlJiYodGhpcy5kYXR1bV90eXBlPWkpLGEuZGF0dW1fcGFyYW1zJiYodGhpcy5kYXR1bV9wYXJhbXM9YS5kYXR1bV9wYXJhbXMubWFwKHBhcnNlRmxvYXQpLDA9PT10aGlzLmRhdHVtX3BhcmFtc1swXSYmMD09PXRoaXMuZGF0dW1fcGFyYW1zWzFdJiYwPT09dGhpcy5kYXR1bV9wYXJhbXNbMl18fCh0aGlzLmRhdHVtX3R5cGU9ZSksdGhpcy5kYXR1bV9wYXJhbXMubGVuZ3RoPjMmJigwPT09dGhpcy5kYXR1bV9wYXJhbXNbM10mJjA9PT10aGlzLmRhdHVtX3BhcmFtc1s0XSYmMD09PXRoaXMuZGF0dW1fcGFyYW1zWzVdJiYwPT09dGhpcy5kYXR1bV9wYXJhbXNbNl18fCh0aGlzLmRhdHVtX3R5cGU9Zix0aGlzLmRhdHVtX3BhcmFtc1szXSo9aix0aGlzLmRhdHVtX3BhcmFtc1s0XSo9aix0aGlzLmRhdHVtX3BhcmFtc1s1XSo9aix0aGlzLmRhdHVtX3BhcmFtc1s2XT10aGlzLmRhdHVtX3BhcmFtc1s2XS8xZTYrMSkpKSx0aGlzLmRhdHVtX3R5cGU9YS5ncmlkcz9nOnRoaXMuZGF0dW1fdHlwZSx0aGlzLmE9YS5hLHRoaXMuYj1hLmIsdGhpcy5lcz1hLmVzLHRoaXMuZXAyPWEuZXAyLHRoaXMuZGF0dW1fdHlwZT09PWcmJih0aGlzLmdyaWRzPWEuZ3JpZHMpKSkpOm5ldyBtKGEpfTttLnByb3RvdHlwZT17Y29tcGFyZV9kYXR1bXM6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZGF0dW1fdHlwZSE9PWEuZGF0dW1fdHlwZT8hMTp0aGlzLmEhPT1hLmF8fE1hdGguYWJzKHRoaXMuZXMtYS5lcyk+NWUtMTE/ITE6dGhpcy5kYXR1bV90eXBlPT09ZT90aGlzLmRhdHVtX3BhcmFtc1swXT09PWEuZGF0dW1fcGFyYW1zWzBdJiZ0aGlzLmRhdHVtX3BhcmFtc1sxXT09PWEuZGF0dW1fcGFyYW1zWzFdJiZ0aGlzLmRhdHVtX3BhcmFtc1syXT09PWEuZGF0dW1fcGFyYW1zWzJdOnRoaXMuZGF0dW1fdHlwZT09PWY/dGhpcy5kYXR1bV9wYXJhbXNbMF09PT1hLmRhdHVtX3BhcmFtc1swXSYmdGhpcy5kYXR1bV9wYXJhbXNbMV09PT1hLmRhdHVtX3BhcmFtc1sxXSYmdGhpcy5kYXR1bV9wYXJhbXNbMl09PT1hLmRhdHVtX3BhcmFtc1syXSYmdGhpcy5kYXR1bV9wYXJhbXNbM109PT1hLmRhdHVtX3BhcmFtc1szXSYmdGhpcy5kYXR1bV9wYXJhbXNbNF09PT1hLmRhdHVtX3BhcmFtc1s0XSYmdGhpcy5kYXR1bV9wYXJhbXNbNV09PT1hLmRhdHVtX3BhcmFtc1s1XSYmdGhpcy5kYXR1bV9wYXJhbXNbNl09PT1hLmRhdHVtX3BhcmFtc1s2XTp0aGlzLmRhdHVtX3R5cGU9PT1nfHxhLmRhdHVtX3R5cGU9PT1nP3RoaXMubmFkZ3JpZHM9PT1hLm5hZGdyaWRzOiEwfSxnZW9kZXRpY190b19nZW9jZW50cmljOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZSxmLGcsaCxpLGo9YS54LGs9YS55LGw9YS56P2EuejowLG09MDtpZigtZD5rJiZrPi0xLjAwMSpkKWs9LWQ7ZWxzZSBpZihrPmQmJjEuMDAxKmQ+aylrPWQ7ZWxzZSBpZigtZD5rfHxrPmQpcmV0dXJuIG51bGw7cmV0dXJuIGo+TWF0aC5QSSYmKGotPTIqTWF0aC5QSSksZz1NYXRoLnNpbihrKSxpPU1hdGguY29zKGspLGg9ZypnLGY9dGhpcy5hL01hdGguc3FydCgxLXRoaXMuZXMqaCksYj0oZitsKSppKk1hdGguY29zKGopLGM9KGYrbCkqaSpNYXRoLnNpbihqKSxlPShmKigxLXRoaXMuZXMpK2wpKmcsYS54PWIsYS55PWMsYS56PWUsbX0sZ2VvY2VudHJpY190b19nZW9kZXRpYzpmdW5jdGlvbihhKXt2YXIgYixjLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQ9MWUtMTIsdT10KnQsdj0zMCx3PWEueCx4PWEueSx5PWEuej9hLno6MDtpZihvPSExLGI9TWF0aC5zcXJ0KHcqdyt4KngpLGM9TWF0aC5zcXJ0KHcqdyt4KngreSp5KSxiL3RoaXMuYTx0KXtpZihvPSEwLHE9MCxjL3RoaXMuYTx0KXJldHVybiByPWQsdm9pZChzPS10aGlzLmIpfWVsc2UgcT1NYXRoLmF0YW4yKHgsdyk7ZT15L2MsZj1iL2MsZz0xL01hdGguc3FydCgxLXRoaXMuZXMqKDItdGhpcy5lcykqZipmKSxqPWYqKDEtdGhpcy5lcykqZyxrPWUqZyxwPTA7ZG8gcCsrLGk9dGhpcy5hL01hdGguc3FydCgxLXRoaXMuZXMqayprKSxzPWIqait5KmstaSooMS10aGlzLmVzKmsqayksaD10aGlzLmVzKmkvKGkrcyksZz0xL01hdGguc3FydCgxLWgqKDItaCkqZipmKSxsPWYqKDEtaCkqZyxtPWUqZyxuPW0qai1sKmssaj1sLGs9bTt3aGlsZShuKm4+dSYmdj5wKTtyZXR1cm4gcj1NYXRoLmF0YW4obS9NYXRoLmFicyhsKSksYS54PXEsYS55PXIsYS56PXMsYX0sZ2VvY2VudHJpY190b19nZW9kZXRpY19ub25pdGVyOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZSxmLGcsaCxpLGosbSxuLG8scCxxLHIscyx0LHUsdj1hLngsdz1hLnkseD1hLno/YS56OjA7aWYodj1wYXJzZUZsb2F0KHYpLHc9cGFyc2VGbG9hdCh3KSx4PXBhcnNlRmxvYXQoeCksdT0hMSwwIT09diliPU1hdGguYXRhbjIodyx2KTtlbHNlIGlmKHc+MCliPWQ7ZWxzZSBpZigwPncpYj0tZDtlbHNlIGlmKHU9ITAsYj0wLHg+MCljPWQ7ZWxzZXtpZighKDA+eCkpcmV0dXJuIGM9ZCx2b2lkKGU9LXRoaXMuYik7Yz0tZH1yZXR1cm4gZz12KnYrdyp3LGY9TWF0aC5zcXJ0KGcpLGg9eCprLGo9TWF0aC5zcXJ0KGgqaCtnKSxuPWgvaixwPWYvaixvPW4qbipuLGk9eCt0aGlzLmIqdGhpcy5lcDIqbyx0PWYtdGhpcy5hKnRoaXMuZXMqcCpwKnAsbT1NYXRoLnNxcnQoaSppK3QqdCkscT1pL20scj10L20scz10aGlzLmEvTWF0aC5zcXJ0KDEtdGhpcy5lcypxKnEpLGU9cj49bD9mL3ItczotbD49cj9mLy1yLXM6eC9xK3MqKHRoaXMuZXMtMSksdT09PSExJiYoYz1NYXRoLmF0YW4ocS9yKSksYS54PWIsYS55PWMsYS56PWUsYX0sZ2VvY2VudHJpY190b193Z3M4NDpmdW5jdGlvbihhKXtpZih0aGlzLmRhdHVtX3R5cGU9PT1lKWEueCs9dGhpcy5kYXR1bV9wYXJhbXNbMF0sYS55Kz10aGlzLmRhdHVtX3BhcmFtc1sxXSxhLnorPXRoaXMuZGF0dW1fcGFyYW1zWzJdO2Vsc2UgaWYodGhpcy5kYXR1bV90eXBlPT09Zil7dmFyIGI9dGhpcy5kYXR1bV9wYXJhbXNbMF0sYz10aGlzLmRhdHVtX3BhcmFtc1sxXSxkPXRoaXMuZGF0dW1fcGFyYW1zWzJdLGc9dGhpcy5kYXR1bV9wYXJhbXNbM10saD10aGlzLmRhdHVtX3BhcmFtc1s0XSxpPXRoaXMuZGF0dW1fcGFyYW1zWzVdLGo9dGhpcy5kYXR1bV9wYXJhbXNbNl0saz1qKihhLngtaSphLnkraCphLnopK2IsbD1qKihpKmEueCthLnktZyphLnopK2MsbT1qKigtaCphLngrZyphLnkrYS56KStkO2EueD1rLGEueT1sLGEuej1tfX0sZ2VvY2VudHJpY19mcm9tX3dnczg0OmZ1bmN0aW9uKGEpe2lmKHRoaXMuZGF0dW1fdHlwZT09PWUpYS54LT10aGlzLmRhdHVtX3BhcmFtc1swXSxhLnktPXRoaXMuZGF0dW1fcGFyYW1zWzFdLGEuei09dGhpcy5kYXR1bV9wYXJhbXNbMl07ZWxzZSBpZih0aGlzLmRhdHVtX3R5cGU9PT1mKXt2YXIgYj10aGlzLmRhdHVtX3BhcmFtc1swXSxjPXRoaXMuZGF0dW1fcGFyYW1zWzFdLGQ9dGhpcy5kYXR1bV9wYXJhbXNbMl0sZz10aGlzLmRhdHVtX3BhcmFtc1szXSxoPXRoaXMuZGF0dW1fcGFyYW1zWzRdLGk9dGhpcy5kYXR1bV9wYXJhbXNbNV0saj10aGlzLmRhdHVtX3BhcmFtc1s2XSxrPShhLngtYikvaixsPShhLnktYykvaixtPShhLnotZCkvajthLng9aytpKmwtaCptLGEueT0taSprK2wrZyptLGEuej1oKmstZypsK219fX0sYi5leHBvcnRzPW19LHt9XSwzMTpbZnVuY3Rpb24oYSxiLGMpe3ZhciBkPTEsZT0yLGY9MyxnPTUsaD02Mzc4MTM3LGk9LjAwNjY5NDM3OTk5MDE0MTMxNjtiLmV4cG9ydHM9ZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGooYSl7cmV0dXJuIGE9PT1kfHxhPT09ZX12YXIgayxsLG07aWYoYS5jb21wYXJlX2RhdHVtcyhiKSlyZXR1cm4gYztpZihhLmRhdHVtX3R5cGU9PT1nfHxiLmRhdHVtX3R5cGU9PT1nKXJldHVybiBjO3ZhciBuPWEuYSxvPWEuZXMscD1iLmEscT1iLmVzLHI9YS5kYXR1bV90eXBlO2lmKHI9PT1mKWlmKDA9PT10aGlzLmFwcGx5X2dyaWRzaGlmdChhLDAsYykpYS5hPWgsYS5lcz1pO2Vsc2V7aWYoIWEuZGF0dW1fcGFyYW1zKXJldHVybiBhLmE9bixhLmVzPWEuZXMsYztmb3Ioaz0xLGw9MCxtPWEuZGF0dW1fcGFyYW1zLmxlbmd0aDttPmw7bCsrKWsqPWEuZGF0dW1fcGFyYW1zW2xdO2lmKDA9PT1rKXJldHVybiBhLmE9bixhLmVzPWEuZXMsYztyPWEuZGF0dW1fcGFyYW1zLmxlbmd0aD4zP2U6ZH1yZXR1cm4gYi5kYXR1bV90eXBlPT09ZiYmKGIuYT1oLGIuZXM9aSksKGEuZXMhPT1iLmVzfHxhLmEhPT1iLmF8fGoocil8fGooYi5kYXR1bV90eXBlKSkmJihhLmdlb2RldGljX3RvX2dlb2NlbnRyaWMoYyksaihhLmRhdHVtX3R5cGUpJiZhLmdlb2NlbnRyaWNfdG9fd2dzODQoYyksaihiLmRhdHVtX3R5cGUpJiZiLmdlb2NlbnRyaWNfZnJvbV93Z3M4NChjKSxiLmdlb2NlbnRyaWNfdG9fZ2VvZGV0aWMoYykpLGIuZGF0dW1fdHlwZT09PWYmJnRoaXMuYXBwbHlfZ3JpZHNoaWZ0KGIsMSxjKSxhLmE9bixhLmVzPW8sYi5hPXAsYi5lcz1xLGN9fSx7fV0sMzI6W2Z1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe3ZhciBiPXRoaXM7aWYoMj09PWFyZ3VtZW50cy5sZW5ndGgpe3ZhciBjPWFyZ3VtZW50c1sxXTsic3RyaW5nIj09dHlwZW9mIGM/IisiPT09Yy5jaGFyQXQoMCk/ZFthXT1mKGFyZ3VtZW50c1sxXSk6ZFthXT1nKGFyZ3VtZW50c1sxXSk6ZFthXT1jfWVsc2UgaWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpe2lmKEFycmF5LmlzQXJyYXkoYSkpcmV0dXJuIGEubWFwKGZ1bmN0aW9uKGEpe0FycmF5LmlzQXJyYXkoYSk/ZC5hcHBseShiLGEpOmQoYSl9KTtpZigic3RyaW5nIj09dHlwZW9mIGEpe2lmKGEgaW4gZClyZXR1cm4gZFthXX1lbHNlIkVQU0ciaW4gYT9kWyJFUFNHOiIrYS5FUFNHXT1hOiJFU1JJImluIGE/ZFsiRVNSSToiK2EuRVNSSV09YToiSUFVMjAwMCJpbiBhP2RbIklBVTIwMDA6IithLklBVTIwMDBdPWE6Y29uc29sZS5sb2coYSk7cmV0dXJufX12YXIgZT1hKCIuL2dsb2JhbCIpLGY9YSgiLi9wcm9qU3RyaW5nIiksZz1hKCIuL3drdCIpO2UoZCksYi5leHBvcnRzPWR9LHsiLi9nbG9iYWwiOjM1LCIuL3Byb2pTdHJpbmciOjM4LCIuL3drdCI6Njd9XSwzMzpbZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEoIi4vY29uc3RhbnRzL0RhdHVtIiksZT1hKCIuL2NvbnN0YW50cy9FbGxpcHNvaWQiKSxmPWEoIi4vZXh0ZW5kIiksZz1hKCIuL2RhdHVtIiksaD0xZS0xMCxpPS4xNjY2NjY2NjY2NjY2NjY2NixqPS4wNDcyMjIyMjIyMjIyMjIyMixrPS4wMjIxNTYwODQ2NTYwODQ2NTU7Yi5leHBvcnRzPWZ1bmN0aW9uKGEpe2lmKGEuZGF0dW1Db2RlJiYibm9uZSIhPT1hLmRhdHVtQ29kZSl7dmFyIGI9ZFthLmRhdHVtQ29kZV07YiYmKGEuZGF0dW1fcGFyYW1zPWIudG93Z3M4ND9iLnRvd2dzODQuc3BsaXQoIiwiKTpudWxsLGEuZWxscHM9Yi5lbGxpcHNlLGEuZGF0dW1OYW1lPWIuZGF0dW1OYW1lP2IuZGF0dW1OYW1lOmEuZGF0dW1Db2RlKX1pZighYS5hKXt2YXIgYz1lW2EuZWxscHNdP2VbYS5lbGxwc106ZS5XR1M4NDtmKGEsYyl9cmV0dXJuIGEucmYmJiFhLmImJihhLmI9KDEtMS9hLnJmKSphLmEpLCgwPT09YS5yZnx8TWF0aC5hYnMoYS5hLWEuYik8aCkmJihhLnNwaGVyZT0hMCxhLmI9YS5hKSxhLmEyPWEuYSphLmEsYS5iMj1hLmIqYS5iLGEuZXM9KGEuYTItYS5iMikvYS5hMixhLmU9TWF0aC5zcXJ0KGEuZXMpLGEuUl9BJiYoYS5hKj0xLWEuZXMqKGkrYS5lcyooaithLmVzKmspKSxhLmEyPWEuYSphLmEsYS5iMj1hLmIqYS5iLGEuZXM9MCksYS5lcDI9KGEuYTItYS5iMikvYS5iMixhLmswfHwoYS5rMD0xKSxhLmF4aXN8fChhLmF4aXM9ImVudSIpLGEuZGF0dW18fChhLmRhdHVtPWcoYSkpLGF9fSx7Ii4vY29uc3RhbnRzL0RhdHVtIjoyNSwiLi9jb25zdGFudHMvRWxsaXBzb2lkIjoyNiwiLi9kYXR1bSI6MzAsIi4vZXh0ZW5kIjozNH1dLDM0OltmdW5jdGlvbihhLGIsYyl7Yi5leHBvcnRzPWZ1bmN0aW9uKGEsYil7YT1hfHx7fTt2YXIgYyxkO2lmKCFiKXJldHVybiBhO2ZvcihkIGluIGIpYz1iW2RdLHZvaWQgMCE9PWMmJihhW2RdPWMpO3JldHVybiBhfX0se31dLDM1OltmdW5jdGlvbihhLGIsYyl7Yi5leHBvcnRzPWZ1bmN0aW9uKGEpe2EoIkVQU0c6NDMyNiIsIit0aXRsZT1XR1MgODQgKGxvbmcvbGF0KSArcHJvaj1sb25nbGF0ICtlbGxwcz1XR1M4NCArZGF0dW09V0dTODQgK3VuaXRzPWRlZ3JlZXMiKSxhKCJFUFNHOjQyNjkiLCIrdGl0bGU9TkFEODMgKGxvbmcvbGF0KSArcHJvaj1sb25nbGF0ICthPTYzNzgxMzcuMCArYj02MzU2NzUyLjMxNDE0MDM2ICtlbGxwcz1HUlM4MCArZGF0dW09TkFEODMgK3VuaXRzPWRlZ3JlZXMiKSxhKCJFUFNHOjM4NTciLCIrdGl0bGU9V0dTIDg0IC8gUHNldWRvLU1lcmNhdG9yICtwcm9qPW1lcmMgK2E9NjM3ODEzNyArYj02Mzc4MTM3ICtsYXRfdHM9MC4wICtsb25fMD0wLjAgK3hfMD0wLjAgK3lfMD0wICtrPTEuMCArdW5pdHM9bSArbmFkZ3JpZHM9QG51bGwgK25vX2RlZnMiKSxhLldHUzg0PWFbIkVQU0c6NDMyNiJdLGFbIkVQU0c6Mzc4NSJdPWFbIkVQU0c6Mzg1NyJdLGEuR09PR0xFPWFbIkVQU0c6Mzg1NyJdLGFbIkVQU0c6OTAwOTEzIl09YVsiRVBTRzozODU3Il0sYVsiRVBTRzoxMDIxMTMiXT1hWyJFUFNHOjM4NTciXX19LHt9XSwzNjpbZnVuY3Rpb24oYSxiLGMpe3ZhciBwcm9qND1hKCIuL2NvcmUiKTtwcm9qNC5kZWZhdWx0RGF0dW09IldHUzg0Iixwcm9qNC5Qcm9qPWEoIi4vUHJvaiIpLHByb2o0LldHUzg0PW5ldyBwcm9qNC5Qcm9qKCJXR1M4NCIpLHByb2o0LlBvaW50PWEoIi4vUG9pbnQiKSxwcm9qNC50b1BvaW50PWEoIi4vY29tbW9uL3RvUG9pbnQiKSxwcm9qNC5kZWZzPWEoIi4vZGVmcyIpLHByb2o0LnRyYW5zZm9ybT1hKCIuL3RyYW5zZm9ybSIpLHByb2o0Lm1ncnM9YSgibWdycyIpLHByb2o0LnZlcnNpb249YSgiLi4vcGFja2FnZS5qc29uIikudmVyc2lvbixhKCIuL2luY2x1ZGVkUHJvamVjdGlvbnMiKShwcm9qNCksYi5leHBvcnRzPXByb2o0fSx7Ii4uL3BhY2thZ2UuanNvbiI6NjksIi4vUG9pbnQiOjEsIi4vUHJvaiI6MiwiLi9jb21tb24vdG9Qb2ludCI6MjMsIi4vY29yZSI6MjksIi4vZGVmcyI6MzIsIi4vaW5jbHVkZWRQcm9qZWN0aW9ucyI6Ii4vaW5jbHVkZWRQcm9qZWN0aW9ucyIsIi4vdHJhbnNmb3JtIjo2NixtZ3JzOjY4fV0sMzc6W2Z1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe3JldHVybiJzdHJpbmciPT10eXBlb2YgYX1mdW5jdGlvbiBlKGEpe3JldHVybiBhIGluIGl9ZnVuY3Rpb24gZihhKXt2YXIgYj1bIkdFT0dDUyIsIkdFT0NDUyIsIlBST0pDUyIsIkxPQ0FMX0NTIl07cmV0dXJuIGIucmVkdWNlKGZ1bmN0aW9uKGIsYyl7cmV0dXJuIGIrMSthLmluZGV4T2YoYyl9LDApfWZ1bmN0aW9uIGcoYSl7cmV0dXJuIisiPT09YVswXX1mdW5jdGlvbiBoKGEpe3JldHVybiBkKGEpP2UoYSk/aVthXTpmKGEpP2ooYSk6ZyhhKT9rKGEpOnZvaWQgMDphfXZhciBpPWEoIi4vZGVmcyIpLGo9YSgiLi93a3QiKSxrPWEoIi4vcHJvalN0cmluZyIpO2IuZXhwb3J0cz1ofSx7Ii4vZGVmcyI6MzIsIi4vcHJvalN0cmluZyI6MzgsIi4vd2t0Ijo2N31dLDM4OltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9LjAxNzQ1MzI5MjUxOTk0MzI5NSxlPWEoIi4vY29uc3RhbnRzL1ByaW1lTWVyaWRpYW4iKSxmPWEoIi4vY29uc3RhbnRzL3VuaXRzIik7Yi5leHBvcnRzPWZ1bmN0aW9uKGEpe3ZhciBiPXt9LGM9e307YS5zcGxpdCgiKyIpLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS50cmltKCl9KS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGF9KS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiPWEuc3BsaXQoIj0iKTtiLnB1c2goITApLGNbYlswXS50b0xvd2VyQ2FzZSgpXT1iWzFdfSk7dmFyIGcsaCxpLGo9e3Byb2o6InByb2pOYW1lIixkYXR1bToiZGF0dW1Db2RlIixyZjpmdW5jdGlvbihhKXtiLnJmPXBhcnNlRmxvYXQoYSl9LGxhdF8wOmZ1bmN0aW9uKGEpe2IubGF0MD1hKmR9LGxhdF8xOmZ1bmN0aW9uKGEpe2IubGF0MT1hKmR9LGxhdF8yOmZ1bmN0aW9uKGEpe2IubGF0Mj1hKmR9LGxhdF90czpmdW5jdGlvbihhKXtiLmxhdF90cz1hKmR9LGxvbl8wOmZ1bmN0aW9uKGEpe2IubG9uZzA9YSpkfSxsb25fMTpmdW5jdGlvbihhKXtiLmxvbmcxPWEqZH0sbG9uXzI6ZnVuY3Rpb24oYSl7Yi5sb25nMj1hKmR9LGFscGhhOmZ1bmN0aW9uKGEpe2IuYWxwaGE9cGFyc2VGbG9hdChhKSpkfSxsb25jOmZ1bmN0aW9uKGEpe2IubG9uZ2M9YSpkfSx4XzA6ZnVuY3Rpb24oYSl7Yi54MD1wYXJzZUZsb2F0KGEpfSx5XzA6ZnVuY3Rpb24oYSl7Yi55MD1wYXJzZUZsb2F0KGEpfSxrXzA6ZnVuY3Rpb24oYSl7Yi5rMD1wYXJzZUZsb2F0KGEpfSxrOmZ1bmN0aW9uKGEpe2IuazA9cGFyc2VGbG9hdChhKX0sYTpmdW5jdGlvbihhKXtiLmE9cGFyc2VGbG9hdChhKX0sYjpmdW5jdGlvbihhKXtiLmI9cGFyc2VGbG9hdChhKX0scl9hOmZ1bmN0aW9uKCl7Yi5SX0E9ITB9LHpvbmU6ZnVuY3Rpb24oYSl7Yi56b25lPXBhcnNlSW50KGEsMTApfSxzb3V0aDpmdW5jdGlvbigpe2IudXRtU291dGg9ITB9LHRvd2dzODQ6ZnVuY3Rpb24oYSl7Yi5kYXR1bV9wYXJhbXM9YS5zcGxpdCgiLCIpLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gcGFyc2VGbG9hdChhKX0pfSx0b19tZXRlcjpmdW5jdGlvbihhKXtiLnRvX21ldGVyPXBhcnNlRmxvYXQoYSl9LHVuaXRzOmZ1bmN0aW9uKGEpe2IudW5pdHM9YSxmW2FdJiYoYi50b19tZXRlcj1mW2FdLnRvX21ldGVyKX0sZnJvbV9ncmVlbndpY2g6ZnVuY3Rpb24oYSl7Yi5mcm9tX2dyZWVud2ljaD1hKmR9LHBtOmZ1bmN0aW9uKGEpe2IuZnJvbV9ncmVlbndpY2g9KGVbYV0/ZVthXTpwYXJzZUZsb2F0KGEpKSpkfSxuYWRncmlkczpmdW5jdGlvbihhKXsiQG51bGwiPT09YT9iLmRhdHVtQ29kZT0ibm9uZSI6Yi5uYWRncmlkcz1hfSxheGlzOmZ1bmN0aW9uKGEpe3ZhciBjPSJld25zdWQiOzM9PT1hLmxlbmd0aCYmLTEhPT1jLmluZGV4T2YoYS5zdWJzdHIoMCwxKSkmJi0xIT09Yy5pbmRleE9mKGEuc3Vic3RyKDEsMSkpJiYtMSE9PWMuaW5kZXhPZihhLnN1YnN0cigyLDEpKSYmKGIuYXhpcz1hKX19O2ZvcihnIGluIGMpaD1jW2ddLGcgaW4gaj8oaT1qW2ddLCJmdW5jdGlvbiI9PXR5cGVvZiBpP2koaCk6YltpXT1oKTpiW2ddPWg7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBiLmRhdHVtQ29kZSYmIldHUzg0IiE9PWIuZGF0dW1Db2RlJiYoYi5kYXR1bUNvZGU9Yi5kYXR1bUNvZGUudG9Mb3dlckNhc2UoKSksYn19LHsiLi9jb25zdGFudHMvUHJpbWVNZXJpZGlhbiI6MjcsIi4vY29uc3RhbnRzL3VuaXRzIjoyOH1dLDM5OltmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChhLGIpe3ZhciBjPWcubGVuZ3RoO3JldHVybiBhLm5hbWVzPyhnW2NdPWEsYS5uYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2ZbYS50b0xvd2VyQ2FzZSgpXT1jfSksdGhpcyk6KGNvbnNvbGUubG9nKGIpLCEwKX12YXIgZT1bYSgiLi9wcm9qZWN0aW9ucy9tZXJjIiksYSgiLi9wcm9qZWN0aW9ucy9sb25nbGF0IildLGY9e30sZz1bXTtjLmFkZD1kLGMuZ2V0PWZ1bmN0aW9uKGEpe2lmKCFhKXJldHVybiExO3ZhciBiPWEudG9Mb3dlckNhc2UoKTtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIGZbYl0mJmdbZltiXV0/Z1tmW2JdXTp2b2lkIDB9LGMuc3RhcnQ9ZnVuY3Rpb24oKXtlLmZvckVhY2goZCl9fSx7Ii4vcHJvamVjdGlvbnMvbG9uZ2xhdCI6NTEsIi4vcHJvamVjdGlvbnMvbWVyYyI6NTJ9XSw0MDpbZnVuY3Rpb24oYSxiLGMpe3ZhciBkPTFlLTEwLGU9YSgiLi4vY29tbW9uL21zZm56IiksZj1hKCIuLi9jb21tb24vcXNmbnoiKSxnPWEoIi4uL2NvbW1vbi9hZGp1c3RfbG9uIiksaD1hKCIuLi9jb21tb24vYXNpbnoiKTtjLmluaXQ9ZnVuY3Rpb24oKXtNYXRoLmFicyh0aGlzLmxhdDErdGhpcy5sYXQyKTxkfHwodGhpcy50ZW1wPXRoaXMuYi90aGlzLmEsdGhpcy5lcz0xLU1hdGgucG93KHRoaXMudGVtcCwyKSx0aGlzLmUzPU1hdGguc3FydCh0aGlzLmVzKSx0aGlzLnNpbl9wbz1NYXRoLnNpbih0aGlzLmxhdDEpLHRoaXMuY29zX3BvPU1hdGguY29zKHRoaXMubGF0MSksdGhpcy50MT10aGlzLnNpbl9wbyx0aGlzLmNvbj10aGlzLnNpbl9wbyx0aGlzLm1zMT1lKHRoaXMuZTMsdGhpcy5zaW5fcG8sdGhpcy5jb3NfcG8pLHRoaXMucXMxPWYodGhpcy5lMyx0aGlzLnNpbl9wbyx0aGlzLmNvc19wbyksdGhpcy5zaW5fcG89TWF0aC5zaW4odGhpcy5sYXQyKSx0aGlzLmNvc19wbz1NYXRoLmNvcyh0aGlzLmxhdDIpLHRoaXMudDI9dGhpcy5zaW5fcG8sdGhpcy5tczI9ZSh0aGlzLmUzLHRoaXMuc2luX3BvLHRoaXMuY29zX3BvKSx0aGlzLnFzMj1mKHRoaXMuZTMsdGhpcy5zaW5fcG8sdGhpcy5jb3NfcG8pLHRoaXMuc2luX3BvPU1hdGguc2luKHRoaXMubGF0MCksdGhpcy5jb3NfcG89TWF0aC5jb3ModGhpcy5sYXQwKSx0aGlzLnQzPXRoaXMuc2luX3BvLHRoaXMucXMwPWYodGhpcy5lMyx0aGlzLnNpbl9wbyx0aGlzLmNvc19wbyksTWF0aC5hYnModGhpcy5sYXQxLXRoaXMubGF0Mik+ZD90aGlzLm5zMD0odGhpcy5tczEqdGhpcy5tczEtdGhpcy5tczIqdGhpcy5tczIpLyh0aGlzLnFzMi10aGlzLnFzMSk6dGhpcy5uczA9dGhpcy5jb24sdGhpcy5jPXRoaXMubXMxKnRoaXMubXMxK3RoaXMubnMwKnRoaXMucXMxLHRoaXMucmg9dGhpcy5hKk1hdGguc3FydCh0aGlzLmMtdGhpcy5uczAqdGhpcy5xczApL3RoaXMubnMwKX0sYy5mb3J3YXJkPWZ1bmN0aW9uKGEpe3ZhciBiPWEueCxjPWEueTt0aGlzLnNpbl9waGk9TWF0aC5zaW4oYyksdGhpcy5jb3NfcGhpPU1hdGguY29zKGMpO3ZhciBkPWYodGhpcy5lMyx0aGlzLnNpbl9waGksdGhpcy5jb3NfcGhpKSxlPXRoaXMuYSpNYXRoLnNxcnQodGhpcy5jLXRoaXMubnMwKmQpL3RoaXMubnMwLGg9dGhpcy5uczAqZyhiLXRoaXMubG9uZzApLGk9ZSpNYXRoLnNpbihoKSt0aGlzLngwLGo9dGhpcy5yaC1lKk1hdGguY29zKGgpK3RoaXMueTA7cmV0dXJuIGEueD1pLGEueT1qLGF9LGMuaW52ZXJzZT1mdW5jdGlvbihhKXt2YXIgYixjLGQsZSxmLGg7cmV0dXJuIGEueC09dGhpcy54MCxhLnk9dGhpcy5yaC1hLnkrdGhpcy55MCx0aGlzLm5zMD49MD8oYj1NYXRoLnNxcnQoYS54KmEueCthLnkqYS55KSxkPTEpOihiPS1NYXRoLnNxcnQoYS54KmEueCthLnkqYS55KSxkPS0xKSxlPTAsMCE9PWImJihlPU1hdGguYXRhbjIoZCphLngsZCphLnkpKSxkPWIqdGhpcy5uczAvdGhpcy5hLHRoaXMuc3BoZXJlP2g9TWF0aC5hc2luKCh0aGlzLmMtZCpkKS8oMip0aGlzLm5zMCkpOihjPSh0aGlzLmMtZCpkKS90aGlzLm5zMCxoPXRoaXMucGhpMXoodGhpcy5lMyxjKSksZj1nKGUvdGhpcy5uczArdGhpcy5sb25nMCksYS54PWYsYS55PWgsYX0sYy5waGkxej1mdW5jdGlvbihhLGIpe3ZhciBjLGUsZixnLGksaj1oKC41KmIpO2lmKGQ+YSlyZXR1cm4gajtmb3IodmFyIGs9YSphLGw9MTsyNT49bDtsKyspaWYoYz1NYXRoLnNpbihqKSxlPU1hdGguY29zKGopLGY9YSpjLGc9MS1mKmYsaT0uNSpnKmcvZSooYi8oMS1rKS1jL2crLjUvYSpNYXRoLmxvZygoMS1mKS8oMStmKSkpLGorPWksTWF0aC5hYnMoaSk8PTFlLTcpcmV0dXJuIGo7cmV0dXJuIG51bGx9LGMubmFtZXM9WyJBbGJlcnNfQ29uaWNfRXF1YWxfQXJlYSIsIkFsYmVycyIsImFlYSJdfSx7Ii4uL2NvbW1vbi9hZGp1c3RfbG9uIjo1LCIuLi9jb21tb24vYXNpbnoiOjYsIi4uL2NvbW1vbi9tc2ZueiI6MTUsIi4uL2NvbW1vbi9xc2ZueiI6MjB9XSw0MTpbZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEoIi4uL2NvbW1vbi9hZGp1c3RfbG9uIiksZT1NYXRoLlBJLzIsZj0xZS0xMCxnPWEoIi4uL2NvbW1vbi9tbGZuIiksaD1hKCIuLi9jb21tb24vZTBmbiIpLGk9YSgiLi4vY29tbW9uL2UxZm4iKSxqPWEoIi4uL2NvbW1vbi9lMmZuIiksaz1hKCIuLi9jb21tb24vZTNmbiIpLGw9YSgiLi4vY29tbW9uL2dOIiksbT1hKCIuLi9jb21tb24vYXNpbnoiKSxuPWEoIi4uL2NvbW1vbi9pbWxmbiIpO2MuaW5pdD1mdW5jdGlvbigpe3RoaXMuc2luX3AxMj1NYXRoLnNpbih0aGlzLmxhdDApLHRoaXMuY29zX3AxMj1NYXRoLmNvcyh0aGlzLmxhdDApfSxjLmZvcndhcmQ9ZnVuY3Rpb24oYSl7dmFyIGIsYyxtLG4sbyxwLHEscixzLHQsdSx2LHcseCx5LHosQSxCLEMsRCxFLEYsRyxIPWEueCxJPWEueSxKPU1hdGguc2luKGEueSksSz1NYXRoLmNvcyhhLnkpLEw9ZChILXRoaXMubG9uZzApO3JldHVybiB0aGlzLnNwaGVyZT9NYXRoLmFicyh0aGlzLnNpbl9wMTItMSk8PWY/KGEueD10aGlzLngwK3RoaXMuYSooZS1JKSpNYXRoLnNpbihMKSxhLnk9dGhpcy55MC10aGlzLmEqKGUtSSkqTWF0aC5jb3MoTCksYSk6TWF0aC5hYnModGhpcy5zaW5fcDEyKzEpPD1mPyhhLng9dGhpcy54MCt0aGlzLmEqKGUrSSkqTWF0aC5zaW4oTCksYS55PXRoaXMueTArdGhpcy5hKihlK0kpKk1hdGguY29zKEwpLGEpOihCPXRoaXMuc2luX3AxMipKK3RoaXMuY29zX3AxMipLKk1hdGguY29zKEwpLHo9TWF0aC5hY29zKEIpLEE9ei9NYXRoLnNpbih6KSxhLng9dGhpcy54MCt0aGlzLmEqQSpLKk1hdGguc2luKEwpLGEueT10aGlzLnkwK3RoaXMuYSpBKih0aGlzLmNvc19wMTIqSi10aGlzLnNpbl9wMTIqSypNYXRoLmNvcyhMKSksYSk6KGI9aCh0aGlzLmVzKSxjPWkodGhpcy5lcyksbT1qKHRoaXMuZXMpLG49ayh0aGlzLmVzKSxNYXRoLmFicyh0aGlzLnNpbl9wMTItMSk8PWY/KG89dGhpcy5hKmcoYixjLG0sbixlKSxwPXRoaXMuYSpnKGIsYyxtLG4sSSksYS54PXRoaXMueDArKG8tcCkqTWF0aC5zaW4oTCksYS55PXRoaXMueTAtKG8tcCkqTWF0aC5jb3MoTCksYSk6TWF0aC5hYnModGhpcy5zaW5fcDEyKzEpPD1mPyhvPXRoaXMuYSpnKGIsYyxtLG4sZSkscD10aGlzLmEqZyhiLGMsbSxuLEkpLGEueD10aGlzLngwKyhvK3ApKk1hdGguc2luKEwpLGEueT10aGlzLnkwKyhvK3ApKk1hdGguY29zKEwpLGEpOihxPUovSyxyPWwodGhpcy5hLHRoaXMuZSx0aGlzLnNpbl9wMTIpLHM9bCh0aGlzLmEsdGhpcy5lLEopLHQ9TWF0aC5hdGFuKCgxLXRoaXMuZXMpKnErdGhpcy5lcypyKnRoaXMuc2luX3AxMi8ocypLKSksdT1NYXRoLmF0YW4yKE1hdGguc2luKEwpLHRoaXMuY29zX3AxMipNYXRoLnRhbih0KS10aGlzLnNpbl9wMTIqTWF0aC5jb3MoTCkpLEM9MD09PXU/TWF0aC5hc2luKHRoaXMuY29zX3AxMipNYXRoLnNpbih0KS10aGlzLnNpbl9wMTIqTWF0aC5jb3ModCkpOk1hdGguYWJzKE1hdGguYWJzKHUpLU1hdGguUEkpPD1mPy1NYXRoLmFzaW4odGhpcy5jb3NfcDEyKk1hdGguc2luKHQpLXRoaXMuc2luX3AxMipNYXRoLmNvcyh0KSk6TWF0aC5hc2luKE1hdGguc2luKEwpKk1hdGguY29zKHQpL01hdGguc2luKHUpKSx2PXRoaXMuZSp0aGlzLnNpbl9wMTIvTWF0aC5zcXJ0KDEtdGhpcy5lcyksdz10aGlzLmUqdGhpcy5jb3NfcDEyKk1hdGguY29zKHUpL01hdGguc3FydCgxLXRoaXMuZXMpLHg9dip3LHk9dyp3LEQ9QypDLEU9RCpDLEY9RSpDLEc9RipDLHo9cipDKigxLUQqeSooMS15KS82K0UvOCp4KigxLTIqeSkrRi8xMjAqKHkqKDQtNyp5KS0zKnYqdiooMS03KnkpKS1HLzQ4KngpLGEueD10aGlzLngwK3oqTWF0aC5zaW4odSksYS55PXRoaXMueTAreipNYXRoLmNvcyh1KSxhKSl9LGMuaW52ZXJzZT1mdW5jdGlvbihhKXthLngtPXRoaXMueDAsYS55LT10aGlzLnkwO3ZhciBiLGMsbyxwLHEscixzLHQsdSx2LHcseCx5LHosQSxCLEMsRCxFLEYsRyxILEk7aWYodGhpcy5zcGhlcmUpe2lmKGI9TWF0aC5zcXJ0KGEueCphLngrYS55KmEueSksYj4yKmUqdGhpcy5hKXJldHVybjtyZXR1cm4gYz1iL3RoaXMuYSxvPU1hdGguc2luKGMpLHA9TWF0aC5jb3MoYykscT10aGlzLmxvbmcwLE1hdGguYWJzKGIpPD1mP3I9dGhpcy5sYXQwOihyPW0ocCp0aGlzLnNpbl9wMTIrYS55Km8qdGhpcy5jb3NfcDEyL2IpLHM9TWF0aC5hYnModGhpcy5sYXQwKS1lLHE9ZChNYXRoLmFicyhzKTw9Zj90aGlzLmxhdDA+PTA/dGhpcy5sb25nMCtNYXRoLmF0YW4yKGEueCwtYS55KTp0aGlzLmxvbmcwLU1hdGguYXRhbjIoLWEueCxhLnkpOnRoaXMubG9uZzArTWF0aC5hdGFuMihhLngqbyxiKnRoaXMuY29zX3AxMipwLWEueSp0aGlzLnNpbl9wMTIqbykpKSxhLng9cSxhLnk9cixhfXJldHVybiB0PWgodGhpcy5lcyksdT1pKHRoaXMuZXMpLHY9aih0aGlzLmVzKSx3PWsodGhpcy5lcyksTWF0aC5hYnModGhpcy5zaW5fcDEyLTEpPD1mPyh4PXRoaXMuYSpnKHQsdSx2LHcsZSksYj1NYXRoLnNxcnQoYS54KmEueCthLnkqYS55KSx5PXgtYixyPW4oeS90aGlzLmEsdCx1LHYsdykscT1kKHRoaXMubG9uZzArTWF0aC5hdGFuMihhLngsLTEqYS55KSksYS54PXEsYS55PXIsYSk6TWF0aC5hYnModGhpcy5zaW5fcDEyKzEpPD1mPyh4PXRoaXMuYSpnKHQsdSx2LHcsZSksYj1NYXRoLnNxcnQoYS54KmEueCthLnkqYS55KSx5PWIteCxyPW4oeS90aGlzLmEsdCx1LHYsdykscT1kKHRoaXMubG9uZzArTWF0aC5hdGFuMihhLngsYS55KSksYS54PXEsYS55PXIsYSk6KGI9TWF0aC5zcXJ0KGEueCphLngrYS55KmEueSksQj1NYXRoLmF0YW4yKGEueCxhLnkpLHo9bCh0aGlzLmEsdGhpcy5lLHRoaXMuc2luX3AxMiksQz1NYXRoLmNvcyhCKSxEPXRoaXMuZSp0aGlzLmNvc19wMTIqQyxFPS1EKkQvKDEtdGhpcy5lcyksRj0zKnRoaXMuZXMqKDEtRSkqdGhpcy5zaW5fcDEyKnRoaXMuY29zX3AxMipDLygxLXRoaXMuZXMpLEc9Yi96LEg9Ry1FKigxK0UpKk1hdGgucG93KEcsMykvNi1GKigxKzMqRSkqTWF0aC5wb3coRyw0KS8yNCxJPTEtRSpIKkgvMi1HKkgqSCpILzYsQT1NYXRoLmFzaW4odGhpcy5zaW5fcDEyKk1hdGguY29zKEgpK3RoaXMuY29zX3AxMipNYXRoLnNpbihIKSpDKSxxPWQodGhpcy5sb25nMCtNYXRoLmFzaW4oTWF0aC5zaW4oQikqTWF0aC5zaW4oSCkvTWF0aC5jb3MoQSkpKSxyPU1hdGguYXRhbigoMS10aGlzLmVzKkkqdGhpcy5zaW5fcDEyL01hdGguc2luKEEpKSpNYXRoLnRhbihBKS8oMS10aGlzLmVzKSksYS54PXEsYS55PXIsYSl9LGMubmFtZXM9WyJBemltdXRoYWxfRXF1aWRpc3RhbnQiLCJhZXFkIl19LHsiLi4vY29tbW9uL2FkanVzdF9sb24iOjUsIi4uL2NvbW1vbi9hc2lueiI6NiwiLi4vY29tbW9uL2UwZm4iOjcsIi4uL2NvbW1vbi9lMWZuIjo4LCIuLi9jb21tb24vZTJmbiI6OSwiLi4vY29tbW9uL2UzZm4iOjEwLCIuLi9jb21tb24vZ04iOjExLCIuLi9jb21tb24vaW1sZm4iOjEyLCIuLi9jb21tb24vbWxmbiI6MTR9XSw0MjpbZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEoIi4uL2NvbW1vbi9tbGZuIiksZT1hKCIuLi9jb21tb24vZTBmbiIpLGY9YSgiLi4vY29tbW9uL2UxZm4iKSxnPWEoIi4uL2NvbW1vbi9lMmZuIiksaD1hKCIuLi9jb21tb24vZTNmbiIpLGk9YSgiLi4vY29tbW9uL2dOIiksaj1hKCIuLi9jb21tb24vYWRqdXN0X2xvbiIpLGs9YSgiLi4vY29tbW9uL2FkanVzdF9sYXQiKSxsPWEoIi4uL2NvbW1vbi9pbWxmbiIpLG09TWF0aC5QSS8yLG49MWUtMTA7Yy5pbml0PWZ1bmN0aW9uKCl7dGhpcy5zcGhlcmV8fCh0aGlzLmUwPWUodGhpcy5lcyksdGhpcy5lMT1mKHRoaXMuZXMpLHRoaXMuZTI9Zyh0aGlzLmVzKSx0aGlzLmUzPWgodGhpcy5lcyksdGhpcy5tbDA9dGhpcy5hKmQodGhpcy5lMCx0aGlzLmUxLHRoaXMuZTIsdGhpcy5lMyx0aGlzLmxhdDApKX0sYy5mb3J3YXJkPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZT1hLngsZj1hLnk7aWYoZT1qKGUtdGhpcy5sb25nMCksdGhpcy5zcGhlcmUpYj10aGlzLmEqTWF0aC5hc2luKE1hdGguY29zKGYpKk1hdGguc2luKGUpKSxjPXRoaXMuYSooTWF0aC5hdGFuMihNYXRoLnRhbihmKSxNYXRoLmNvcyhlKSktdGhpcy5sYXQwKTtlbHNle3ZhciBnPU1hdGguc2luKGYpLGg9TWF0aC5jb3MoZiksaz1pKHRoaXMuYSx0aGlzLmUsZyksbD1NYXRoLnRhbihmKSpNYXRoLnRhbihmKSxtPWUqTWF0aC5jb3MoZiksbj1tKm0sbz10aGlzLmVzKmgqaC8oMS10aGlzLmVzKSxwPXRoaXMuYSpkKHRoaXMuZTAsdGhpcy5lMSx0aGlzLmUyLHRoaXMuZTMsZik7Yj1rKm0qKDEtbipsKigxLzYtKDgtbCs4Km8pKm4vMTIwKSksYz1wLXRoaXMubWwwK2sqZy9oKm4qKC41Kyg1LWwrNipvKSpuLzI0KX1yZXR1cm4gYS54PWIrdGhpcy54MCxhLnk9Yyt0aGlzLnkwLGF9LGMuaW52ZXJzZT1mdW5jdGlvbihhKXthLngtPXRoaXMueDAsYS55LT10aGlzLnkwO3ZhciBiLGMsZD1hLngvdGhpcy5hLGU9YS55L3RoaXMuYTtpZih0aGlzLnNwaGVyZSl7dmFyIGY9ZSt0aGlzLmxhdDA7Yj1NYXRoLmFzaW4oTWF0aC5zaW4oZikqTWF0aC5jb3MoZCkpLGM9TWF0aC5hdGFuMihNYXRoLnRhbihkKSxNYXRoLmNvcyhmKSl9ZWxzZXt2YXIgZz10aGlzLm1sMC90aGlzLmErZSxoPWwoZyx0aGlzLmUwLHRoaXMuZTEsdGhpcy5lMix0aGlzLmUzKTtpZihNYXRoLmFicyhNYXRoLmFicyhoKS1tKTw9bilyZXR1cm4gYS54PXRoaXMubG9uZzAsYS55PW0sMD5lJiYoYS55Kj0tMSksYTt2YXIgbz1pKHRoaXMuYSx0aGlzLmUsTWF0aC5zaW4oaCkpLHA9bypvKm8vdGhpcy5hL3RoaXMuYSooMS10aGlzLmVzKSxxPU1hdGgucG93KE1hdGgudGFuKGgpLDIpLHI9ZCp0aGlzLmEvbyxzPXIqcjtiPWgtbypNYXRoLnRhbihoKS9wKnIqciooLjUtKDErMypxKSpyKnIvMjQpLGM9ciooMS1zKihxLzMrKDErMypxKSpxKnMvMTUpKS9NYXRoLmNvcyhoKX1yZXR1cm4gYS54PWooYyt0aGlzLmxvbmcwKSxhLnk9ayhiKSxhfSxjLm5hbWVzPVsiQ2Fzc2luaSIsIkNhc3NpbmlfU29sZG5lciIsImNhc3MiXX0seyIuLi9jb21tb24vYWRqdXN0X2xhdCI6NCwiLi4vY29tbW9uL2FkanVzdF9sb24iOjUsIi4uL2NvbW1vbi9lMGZuIjo3LCIuLi9jb21tb24vZTFmbiI6OCwiLi4vY29tbW9uL2UyZm4iOjksIi4uL2NvbW1vbi9lM2ZuIjoxMCwiLi4vY29tbW9uL2dOIjoxMSwiLi4vY29tbW9uL2ltbGZuIjoxMiwiLi4vY29tbW9uL21sZm4iOjE0fV0sNDM6W2Z1bmN0aW9uKGEsYixjKXt2YXIgZD1hKCIuLi9jb21tb24vYWRqdXN0X2xvbiIpLGU9YSgiLi4vY29tbW9uL3FzZm56IiksZj1hKCIuLi9jb21tb24vbXNmbnoiKSxnPWEoIi4uL2NvbW1vbi9pcXNmbnoiKTtjLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLnNwaGVyZXx8KHRoaXMuazA9Zih0aGlzLmUsTWF0aC5zaW4odGhpcy5sYXRfdHMpLE1hdGguY29zKHRoaXMubGF0X3RzKSkpfSxjLmZvcndhcmQ9ZnVuY3Rpb24oYSl7dmFyIGIsYyxmPWEueCxnPWEueSxoPWQoZi10aGlzLmxvbmcwKTtpZih0aGlzLnNwaGVyZSliPXRoaXMueDArdGhpcy5hKmgqTWF0aC5jb3ModGhpcy5sYXRfdHMpLGM9dGhpcy55MCt0aGlzLmEqTWF0aC5zaW4oZykvTWF0aC5jb3ModGhpcy5sYXRfdHMpO2Vsc2V7dmFyIGk9ZSh0aGlzLmUsTWF0aC5zaW4oZykpO2I9dGhpcy54MCt0aGlzLmEqdGhpcy5rMCpoLGM9dGhpcy55MCt0aGlzLmEqaSouNS90aGlzLmswfXJldHVybiBhLng9YixhLnk9YyxhfSxjLmludmVyc2U9ZnVuY3Rpb24oYSl7YS54LT10aGlzLngwLGEueS09dGhpcy55MDt2YXIgYixjO3JldHVybiB0aGlzLnNwaGVyZT8oYj1kKHRoaXMubG9uZzArYS54L3RoaXMuYS9NYXRoLmNvcyh0aGlzLmxhdF90cykpLGM9TWF0aC5hc2luKGEueS90aGlzLmEqTWF0aC5jb3ModGhpcy5sYXRfdHMpKSk6KGM9Zyh0aGlzLmUsMiphLnkqdGhpcy5rMC90aGlzLmEpLGI9ZCh0aGlzLmxvbmcwK2EueC8odGhpcy5hKnRoaXMuazApKSksYS54PWIsYS55PWMsYX0sYy5uYW1lcz1bImNlYSJdfSx7Ii4uL2NvbW1vbi9hZGp1c3RfbG9uIjo1LCIuLi9jb21tb24vaXFzZm56IjoxMywiLi4vY29tbW9uL21zZm56IjoxNSwiLi4vY29tbW9uL3FzZm56IjoyMH1dLDQ0OltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSgiLi4vY29tbW9uL2FkanVzdF9sb24iKSxlPWEoIi4uL2NvbW1vbi9hZGp1c3RfbGF0Iik7Yy5pbml0PWZ1bmN0aW9uKCl7dGhpcy54MD10aGlzLngwfHwwLHRoaXMueTA9dGhpcy55MHx8MCx0aGlzLmxhdDA9dGhpcy5sYXQwfHwwLHRoaXMubG9uZzA9dGhpcy5sb25nMHx8MCx0aGlzLmxhdF90cz10aGlzLmxhdF90c3x8MCx0aGlzLnRpdGxlPXRoaXMudGl0bGV8fCJFcXVpZGlzdGFudCBDeWxpbmRyaWNhbCAoUGxhdGUgQ2FycmUpIix0aGlzLnJjPU1hdGguY29zKHRoaXMubGF0X3RzKX0sYy5mb3J3YXJkPWZ1bmN0aW9uKGEpe3ZhciBiPWEueCxjPWEueSxmPWQoYi10aGlzLmxvbmcwKSxnPWUoYy10aGlzLmxhdDApO3JldHVybiBhLng9dGhpcy54MCt0aGlzLmEqZip0aGlzLnJjLGEueT10aGlzLnkwK3RoaXMuYSpnLGF9LGMuaW52ZXJzZT1mdW5jdGlvbihhKXt2YXIgYj1hLngsYz1hLnk7cmV0dXJuIGEueD1kKHRoaXMubG9uZzArKGItdGhpcy54MCkvKHRoaXMuYSp0aGlzLnJjKSksYS55PWUodGhpcy5sYXQwKyhjLXRoaXMueTApL3RoaXMuYSksYX0sYy5uYW1lcz1bIkVxdWlyZWN0YW5ndWxhciIsIkVxdWlkaXN0YW50X0N5bGluZHJpY2FsIiwiZXFjIl19LHsiLi4vY29tbW9uL2FkanVzdF9sYXQiOjQsIi4uL2NvbW1vbi9hZGp1c3RfbG9uIjo1fV0sNDU6W2Z1bmN0aW9uKGEsYixjKXt2YXIgZD1hKCIuLi9jb21tb24vZTBmbiIpLGU9YSgiLi4vY29tbW9uL2UxZm4iKSxmPWEoIi4uL2NvbW1vbi9lMmZuIiksZz1hKCIuLi9jb21tb24vZTNmbiIpLGg9YSgiLi4vY29tbW9uL21zZm56IiksaT1hKCIuLi9jb21tb24vbWxmbiIpLGo9YSgiLi4vY29tbW9uL2FkanVzdF9sb24iKSxrPWEoIi4uL2NvbW1vbi9hZGp1c3RfbGF0IiksbD1hKCIuLi9jb21tb24vaW1sZm4iKSxtPTFlLTEwO2MuaW5pdD1mdW5jdGlvbigpe01hdGguYWJzKHRoaXMubGF0MSt0aGlzLmxhdDIpPG18fCh0aGlzLmxhdDI9dGhpcy5sYXQyfHx0aGlzLmxhdDEsdGhpcy50ZW1wPXRoaXMuYi90aGlzLmEsdGhpcy5lcz0xLU1hdGgucG93KHRoaXMudGVtcCwyKSx0aGlzLmU9TWF0aC5zcXJ0KHRoaXMuZXMpLHRoaXMuZTA9ZCh0aGlzLmVzKSx0aGlzLmUxPWUodGhpcy5lcyksdGhpcy5lMj1mKHRoaXMuZXMpLHRoaXMuZTM9Zyh0aGlzLmVzKSx0aGlzLnNpbnBoaT1NYXRoLnNpbih0aGlzLmxhdDEpLHRoaXMuY29zcGhpPU1hdGguY29zKHRoaXMubGF0MSksdGhpcy5tczE9aCh0aGlzLmUsdGhpcy5zaW5waGksdGhpcy5jb3NwaGkpLHRoaXMubWwxPWkodGhpcy5lMCx0aGlzLmUxLHRoaXMuZTIsdGhpcy5lMyx0aGlzLmxhdDEpLE1hdGguYWJzKHRoaXMubGF0MS10aGlzLmxhdDIpPG0/dGhpcy5ucz10aGlzLnNpbnBoaToodGhpcy5zaW5waGk9TWF0aC5zaW4odGhpcy5sYXQyKSx0aGlzLmNvc3BoaT1NYXRoLmNvcyh0aGlzLmxhdDIpLHRoaXMubXMyPWgodGhpcy5lLHRoaXMuc2lucGhpLHRoaXMuY29zcGhpKSx0aGlzLm1sMj1pKHRoaXMuZTAsdGhpcy5lMSx0aGlzLmUyLHRoaXMuZTMsdGhpcy5sYXQyKSx0aGlzLm5zPSh0aGlzLm1zMS10aGlzLm1zMikvKHRoaXMubWwyLXRoaXMubWwxKSksdGhpcy5nPXRoaXMubWwxK3RoaXMubXMxL3RoaXMubnMsdGhpcy5tbDA9aSh0aGlzLmUwLHRoaXMuZTEsdGhpcy5lMix0aGlzLmUzLHRoaXMubGF0MCksdGhpcy5yaD10aGlzLmEqKHRoaXMuZy10aGlzLm1sMCkpfSxjLmZvcndhcmQ9ZnVuY3Rpb24oYSl7dmFyIGIsYz1hLngsZD1hLnk7aWYodGhpcy5zcGhlcmUpYj10aGlzLmEqKHRoaXMuZy1kKTtlbHNle3ZhciBlPWkodGhpcy5lMCx0aGlzLmUxLHRoaXMuZTIsdGhpcy5lMyxkKTtiPXRoaXMuYSoodGhpcy5nLWUpfXZhciBmPXRoaXMubnMqaihjLXRoaXMubG9uZzApLGc9dGhpcy54MCtiKk1hdGguc2luKGYpLGg9dGhpcy55MCt0aGlzLnJoLWIqTWF0aC5jb3MoZik7cmV0dXJuIGEueD1nLGEueT1oLGF9LGMuaW52ZXJzZT1mdW5jdGlvbihhKXthLngtPXRoaXMueDAsYS55PXRoaXMucmgtYS55K3RoaXMueTA7dmFyIGIsYyxkLGU7dGhpcy5ucz49MD8oYz1NYXRoLnNxcnQoYS54KmEueCthLnkqYS55KSwKYj0xKTooYz0tTWF0aC5zcXJ0KGEueCphLngrYS55KmEueSksYj0tMSk7dmFyIGY9MDtpZigwIT09YyYmKGY9TWF0aC5hdGFuMihiKmEueCxiKmEueSkpLHRoaXMuc3BoZXJlKXJldHVybiBlPWoodGhpcy5sb25nMCtmL3RoaXMubnMpLGQ9ayh0aGlzLmctYy90aGlzLmEpLGEueD1lLGEueT1kLGE7dmFyIGc9dGhpcy5nLWMvdGhpcy5hO3JldHVybiBkPWwoZyx0aGlzLmUwLHRoaXMuZTEsdGhpcy5lMix0aGlzLmUzKSxlPWoodGhpcy5sb25nMCtmL3RoaXMubnMpLGEueD1lLGEueT1kLGF9LGMubmFtZXM9WyJFcXVpZGlzdGFudF9Db25pYyIsImVxZGMiXX0seyIuLi9jb21tb24vYWRqdXN0X2xhdCI6NCwiLi4vY29tbW9uL2FkanVzdF9sb24iOjUsIi4uL2NvbW1vbi9lMGZuIjo3LCIuLi9jb21tb24vZTFmbiI6OCwiLi4vY29tbW9uL2UyZm4iOjksIi4uL2NvbW1vbi9lM2ZuIjoxMCwiLi4vY29tbW9uL2ltbGZuIjoxMiwiLi4vY29tbW9uL21sZm4iOjE0LCIuLi9jb21tb24vbXNmbnoiOjE1fV0sNDY6W2Z1bmN0aW9uKGEsYixjKXt2YXIgZD1NYXRoLlBJLzQsZT1hKCIuLi9jb21tb24vc3JhdCIpLGY9TWF0aC5QSS8yLGc9MjA7Yy5pbml0PWZ1bmN0aW9uKCl7dmFyIGE9TWF0aC5zaW4odGhpcy5sYXQwKSxiPU1hdGguY29zKHRoaXMubGF0MCk7Yio9Yix0aGlzLnJjPU1hdGguc3FydCgxLXRoaXMuZXMpLygxLXRoaXMuZXMqYSphKSx0aGlzLkM9TWF0aC5zcXJ0KDErdGhpcy5lcypiKmIvKDEtdGhpcy5lcykpLHRoaXMucGhpYzA9TWF0aC5hc2luKGEvdGhpcy5DKSx0aGlzLnJhdGV4cD0uNSp0aGlzLkMqdGhpcy5lLHRoaXMuSz1NYXRoLnRhbiguNSp0aGlzLnBoaWMwK2QpLyhNYXRoLnBvdyhNYXRoLnRhbiguNSp0aGlzLmxhdDArZCksdGhpcy5DKSplKHRoaXMuZSphLHRoaXMucmF0ZXhwKSl9LGMuZm9yd2FyZD1mdW5jdGlvbihhKXt2YXIgYj1hLngsYz1hLnk7cmV0dXJuIGEueT0yKk1hdGguYXRhbih0aGlzLksqTWF0aC5wb3coTWF0aC50YW4oLjUqYytkKSx0aGlzLkMpKmUodGhpcy5lKk1hdGguc2luKGMpLHRoaXMucmF0ZXhwKSktZixhLng9dGhpcy5DKmIsYX0sYy5pbnZlcnNlPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0xZS0xNCxjPWEueC90aGlzLkMsaD1hLnksaT1NYXRoLnBvdyhNYXRoLnRhbiguNSpoK2QpL3RoaXMuSywxL3RoaXMuQyksaj1nO2o+MCYmKGg9MipNYXRoLmF0YW4oaSplKHRoaXMuZSpNYXRoLnNpbihhLnkpLC0uNSp0aGlzLmUpKS1mLCEoTWF0aC5hYnMoaC1hLnkpPGIpKTstLWopYS55PWg7cmV0dXJuIGo/KGEueD1jLGEueT1oLGEpOm51bGx9LGMubmFtZXM9WyJnYXVzcyJdfSx7Ii4uL2NvbW1vbi9zcmF0IjoyMn1dLDQ3OltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSgiLi4vY29tbW9uL2FkanVzdF9sb24iKSxlPTFlLTEwLGY9YSgiLi4vY29tbW9uL2FzaW56Iik7Yy5pbml0PWZ1bmN0aW9uKCl7dGhpcy5zaW5fcDE0PU1hdGguc2luKHRoaXMubGF0MCksdGhpcy5jb3NfcDE0PU1hdGguY29zKHRoaXMubGF0MCksdGhpcy5pbmZpbml0eV9kaXN0PTFlMyp0aGlzLmEsdGhpcy5yYz0xfSxjLmZvcndhcmQ9ZnVuY3Rpb24oYSl7dmFyIGIsYyxmLGcsaCxpLGosayxsPWEueCxtPWEueTtyZXR1cm4gZj1kKGwtdGhpcy5sb25nMCksYj1NYXRoLnNpbihtKSxjPU1hdGguY29zKG0pLGc9TWF0aC5jb3MoZiksaT10aGlzLnNpbl9wMTQqYit0aGlzLmNvc19wMTQqYypnLGg9MSxpPjB8fE1hdGguYWJzKGkpPD1lPyhqPXRoaXMueDArdGhpcy5hKmgqYypNYXRoLnNpbihmKS9pLGs9dGhpcy55MCt0aGlzLmEqaCoodGhpcy5jb3NfcDE0KmItdGhpcy5zaW5fcDE0KmMqZykvaSk6KGo9dGhpcy54MCt0aGlzLmluZmluaXR5X2Rpc3QqYypNYXRoLnNpbihmKSxrPXRoaXMueTArdGhpcy5pbmZpbml0eV9kaXN0Kih0aGlzLmNvc19wMTQqYi10aGlzLnNpbl9wMTQqYypnKSksYS54PWosYS55PWssYX0sYy5pbnZlcnNlPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZSxnLGgsaTtyZXR1cm4gYS54PShhLngtdGhpcy54MCkvdGhpcy5hLGEueT0oYS55LXRoaXMueTApL3RoaXMuYSxhLngvPXRoaXMuazAsYS55Lz10aGlzLmswLChiPU1hdGguc3FydChhLngqYS54K2EueSphLnkpKT8oZz1NYXRoLmF0YW4yKGIsdGhpcy5yYyksYz1NYXRoLnNpbihnKSxlPU1hdGguY29zKGcpLGk9ZihlKnRoaXMuc2luX3AxNCthLnkqYyp0aGlzLmNvc19wMTQvYiksaD1NYXRoLmF0YW4yKGEueCpjLGIqdGhpcy5jb3NfcDE0KmUtYS55KnRoaXMuc2luX3AxNCpjKSxoPWQodGhpcy5sb25nMCtoKSk6KGk9dGhpcy5waGljMCxoPTApLGEueD1oLGEueT1pLGF9LGMubmFtZXM9WyJnbm9tIl19LHsiLi4vY29tbW9uL2FkanVzdF9sb24iOjUsIi4uL2NvbW1vbi9hc2lueiI6Nn1dLDQ4OltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSgiLi4vY29tbW9uL2FkanVzdF9sb24iKTtjLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLmE9NjM3NzM5Ny4xNTUsdGhpcy5lcz0uMDA2Njc0MzcyMjMwNjE0LHRoaXMuZT1NYXRoLnNxcnQodGhpcy5lcyksdGhpcy5sYXQwfHwodGhpcy5sYXQwPS44NjM5Mzc5Nzk3MzcxOTMpLHRoaXMubG9uZzB8fCh0aGlzLmxvbmcwPS40MzM0MjM0MzA5MTE5MjUxKSx0aGlzLmswfHwodGhpcy5rMD0uOTk5OSksdGhpcy5zNDU9Ljc4NTM5ODE2MzM5NzQ0OCx0aGlzLnM5MD0yKnRoaXMuczQ1LHRoaXMuZmkwPXRoaXMubGF0MCx0aGlzLmUyPXRoaXMuZXMsdGhpcy5lPU1hdGguc3FydCh0aGlzLmUyKSx0aGlzLmFsZmE9TWF0aC5zcXJ0KDErdGhpcy5lMipNYXRoLnBvdyhNYXRoLmNvcyh0aGlzLmZpMCksNCkvKDEtdGhpcy5lMikpLHRoaXMudXE9MS4wNDIxNjg1NjM4MDQ3NCx0aGlzLnUwPU1hdGguYXNpbihNYXRoLnNpbih0aGlzLmZpMCkvdGhpcy5hbGZhKSx0aGlzLmc9TWF0aC5wb3coKDErdGhpcy5lKk1hdGguc2luKHRoaXMuZmkwKSkvKDEtdGhpcy5lKk1hdGguc2luKHRoaXMuZmkwKSksdGhpcy5hbGZhKnRoaXMuZS8yKSx0aGlzLms9TWF0aC50YW4odGhpcy51MC8yK3RoaXMuczQ1KS9NYXRoLnBvdyhNYXRoLnRhbih0aGlzLmZpMC8yK3RoaXMuczQ1KSx0aGlzLmFsZmEpKnRoaXMuZyx0aGlzLmsxPXRoaXMuazAsdGhpcy5uMD10aGlzLmEqTWF0aC5zcXJ0KDEtdGhpcy5lMikvKDEtdGhpcy5lMipNYXRoLnBvdyhNYXRoLnNpbih0aGlzLmZpMCksMikpLHRoaXMuczA9MS4zNzAwODM0NjI4MTU1NSx0aGlzLm49TWF0aC5zaW4odGhpcy5zMCksdGhpcy5ybzA9dGhpcy5rMSp0aGlzLm4wL01hdGgudGFuKHRoaXMuczApLHRoaXMuYWQ9dGhpcy5zOTAtdGhpcy51cX0sYy5mb3J3YXJkPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZSxmLGcsaCxpLGo9YS54LGs9YS55LGw9ZChqLXRoaXMubG9uZzApO3JldHVybiBiPU1hdGgucG93KCgxK3RoaXMuZSpNYXRoLnNpbihrKSkvKDEtdGhpcy5lKk1hdGguc2luKGspKSx0aGlzLmFsZmEqdGhpcy5lLzIpLGM9MiooTWF0aC5hdGFuKHRoaXMuaypNYXRoLnBvdyhNYXRoLnRhbihrLzIrdGhpcy5zNDUpLHRoaXMuYWxmYSkvYiktdGhpcy5zNDUpLGU9LWwqdGhpcy5hbGZhLGY9TWF0aC5hc2luKE1hdGguY29zKHRoaXMuYWQpKk1hdGguc2luKGMpK01hdGguc2luKHRoaXMuYWQpKk1hdGguY29zKGMpKk1hdGguY29zKGUpKSxnPU1hdGguYXNpbihNYXRoLmNvcyhjKSpNYXRoLnNpbihlKS9NYXRoLmNvcyhmKSksaD10aGlzLm4qZyxpPXRoaXMucm8wKk1hdGgucG93KE1hdGgudGFuKHRoaXMuczAvMit0aGlzLnM0NSksdGhpcy5uKS9NYXRoLnBvdyhNYXRoLnRhbihmLzIrdGhpcy5zNDUpLHRoaXMubiksYS55PWkqTWF0aC5jb3MoaCkvMSxhLng9aSpNYXRoLnNpbihoKS8xLHRoaXMuY3plY2h8fChhLnkqPS0xLGEueCo9LTEpLGF9LGMuaW52ZXJzZT1mdW5jdGlvbihhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGo9YS54O2EueD1hLnksYS55PWosdGhpcy5jemVjaHx8KGEueSo9LTEsYS54Kj0tMSksZz1NYXRoLnNxcnQoYS54KmEueCthLnkqYS55KSxmPU1hdGguYXRhbjIoYS55LGEueCksZT1mL01hdGguc2luKHRoaXMuczApLGQ9MiooTWF0aC5hdGFuKE1hdGgucG93KHRoaXMucm8wL2csMS90aGlzLm4pKk1hdGgudGFuKHRoaXMuczAvMit0aGlzLnM0NSkpLXRoaXMuczQ1KSxiPU1hdGguYXNpbihNYXRoLmNvcyh0aGlzLmFkKSpNYXRoLnNpbihkKS1NYXRoLnNpbih0aGlzLmFkKSpNYXRoLmNvcyhkKSpNYXRoLmNvcyhlKSksYz1NYXRoLmFzaW4oTWF0aC5jb3MoZCkqTWF0aC5zaW4oZSkvTWF0aC5jb3MoYikpLGEueD10aGlzLmxvbmcwLWMvdGhpcy5hbGZhLGg9YixpPTA7dmFyIGs9MDtkbyBhLnk9MiooTWF0aC5hdGFuKE1hdGgucG93KHRoaXMuaywtMS90aGlzLmFsZmEpKk1hdGgucG93KE1hdGgudGFuKGIvMit0aGlzLnM0NSksMS90aGlzLmFsZmEpKk1hdGgucG93KCgxK3RoaXMuZSpNYXRoLnNpbihoKSkvKDEtdGhpcy5lKk1hdGguc2luKGgpKSx0aGlzLmUvMikpLXRoaXMuczQ1KSxNYXRoLmFicyhoLWEueSk8MWUtMTAmJihpPTEpLGg9YS55LGsrPTE7d2hpbGUoMD09PWkmJjE1PmspO3JldHVybiBrPj0xNT9udWxsOmF9LGMubmFtZXM9WyJLcm92YWsiLCJrcm92YWsiXX0seyIuLi9jb21tb24vYWRqdXN0X2xvbiI6NX1dLDQ5OltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9TWF0aC5QSS8yLGU9TWF0aC5QSS80LGY9MWUtMTAsZz1hKCIuLi9jb21tb24vcXNmbnoiKSxoPWEoIi4uL2NvbW1vbi9hZGp1c3RfbG9uIik7Yy5TX1BPTEU9MSxjLk5fUE9MRT0yLGMuRVFVSVQ9MyxjLk9CTElRPTQsYy5pbml0PWZ1bmN0aW9uKCl7dmFyIGE9TWF0aC5hYnModGhpcy5sYXQwKTtpZihNYXRoLmFicyhhLWQpPGY/dGhpcy5tb2RlPXRoaXMubGF0MDwwP3RoaXMuU19QT0xFOnRoaXMuTl9QT0xFOk1hdGguYWJzKGEpPGY/dGhpcy5tb2RlPXRoaXMuRVFVSVQ6dGhpcy5tb2RlPXRoaXMuT0JMSVEsdGhpcy5lcz4wKXt2YXIgYjtzd2l0Y2godGhpcy5xcD1nKHRoaXMuZSwxKSx0aGlzLm1tZj0uNS8oMS10aGlzLmVzKSx0aGlzLmFwYT10aGlzLmF1dGhzZXQodGhpcy5lcyksdGhpcy5tb2RlKXtjYXNlIHRoaXMuTl9QT0xFOnRoaXMuZGQ9MTticmVhaztjYXNlIHRoaXMuU19QT0xFOnRoaXMuZGQ9MTticmVhaztjYXNlIHRoaXMuRVFVSVQ6dGhpcy5ycT1NYXRoLnNxcnQoLjUqdGhpcy5xcCksdGhpcy5kZD0xL3RoaXMucnEsdGhpcy54bWY9MSx0aGlzLnltZj0uNSp0aGlzLnFwO2JyZWFrO2Nhc2UgdGhpcy5PQkxJUTp0aGlzLnJxPU1hdGguc3FydCguNSp0aGlzLnFwKSxiPU1hdGguc2luKHRoaXMubGF0MCksdGhpcy5zaW5iMT1nKHRoaXMuZSxiKS90aGlzLnFwLHRoaXMuY29zYjE9TWF0aC5zcXJ0KDEtdGhpcy5zaW5iMSp0aGlzLnNpbmIxKSx0aGlzLmRkPU1hdGguY29zKHRoaXMubGF0MCkvKE1hdGguc3FydCgxLXRoaXMuZXMqYipiKSp0aGlzLnJxKnRoaXMuY29zYjEpLHRoaXMueW1mPSh0aGlzLnhtZj10aGlzLnJxKS90aGlzLmRkLHRoaXMueG1mKj10aGlzLmRkfX1lbHNlIHRoaXMubW9kZT09PXRoaXMuT0JMSVEmJih0aGlzLnNpbnBoMD1NYXRoLnNpbih0aGlzLmxhdDApLHRoaXMuY29zcGgwPU1hdGguY29zKHRoaXMubGF0MCkpfSxjLmZvcndhcmQ9ZnVuY3Rpb24oYSl7dmFyIGIsYyxpLGosayxsLG0sbixvLHAscT1hLngscj1hLnk7aWYocT1oKHEtdGhpcy5sb25nMCksdGhpcy5zcGhlcmUpe2lmKGs9TWF0aC5zaW4ocikscD1NYXRoLmNvcyhyKSxpPU1hdGguY29zKHEpLHRoaXMubW9kZT09PXRoaXMuT0JMSVF8fHRoaXMubW9kZT09PXRoaXMuRVFVSVQpe2lmKGM9dGhpcy5tb2RlPT09dGhpcy5FUVVJVD8xK3AqaToxK3RoaXMuc2lucGgwKmsrdGhpcy5jb3NwaDAqcCppLGY+PWMpcmV0dXJuIG51bGw7Yz1NYXRoLnNxcnQoMi9jKSxiPWMqcCpNYXRoLnNpbihxKSxjKj10aGlzLm1vZGU9PT10aGlzLkVRVUlUP2s6dGhpcy5jb3NwaDAqay10aGlzLnNpbnBoMCpwKml9ZWxzZSBpZih0aGlzLm1vZGU9PT10aGlzLk5fUE9MRXx8dGhpcy5tb2RlPT09dGhpcy5TX1BPTEUpe2lmKHRoaXMubW9kZT09PXRoaXMuTl9QT0xFJiYoaT0taSksTWF0aC5hYnMocit0aGlzLnBoaTApPGYpcmV0dXJuIG51bGw7Yz1lLS41KnIsYz0yKih0aGlzLm1vZGU9PT10aGlzLlNfUE9MRT9NYXRoLmNvcyhjKTpNYXRoLnNpbihjKSksYj1jKk1hdGguc2luKHEpLGMqPWl9fWVsc2V7c3dpdGNoKG09MCxuPTAsbz0wLGk9TWF0aC5jb3MocSksaj1NYXRoLnNpbihxKSxrPU1hdGguc2luKHIpLGw9Zyh0aGlzLmUsayksdGhpcy5tb2RlIT09dGhpcy5PQkxJUSYmdGhpcy5tb2RlIT09dGhpcy5FUVVJVHx8KG09bC90aGlzLnFwLG49TWF0aC5zcXJ0KDEtbSptKSksdGhpcy5tb2RlKXtjYXNlIHRoaXMuT0JMSVE6bz0xK3RoaXMuc2luYjEqbSt0aGlzLmNvc2IxKm4qaTticmVhaztjYXNlIHRoaXMuRVFVSVQ6bz0xK24qaTticmVhaztjYXNlIHRoaXMuTl9QT0xFOm89ZCtyLGw9dGhpcy5xcC1sO2JyZWFrO2Nhc2UgdGhpcy5TX1BPTEU6bz1yLWQsbD10aGlzLnFwK2x9aWYoTWF0aC5hYnMobyk8ZilyZXR1cm4gbnVsbDtzd2l0Y2godGhpcy5tb2RlKXtjYXNlIHRoaXMuT0JMSVE6Y2FzZSB0aGlzLkVRVUlUOm89TWF0aC5zcXJ0KDIvbyksYz10aGlzLm1vZGU9PT10aGlzLk9CTElRP3RoaXMueW1mKm8qKHRoaXMuY29zYjEqbS10aGlzLnNpbmIxKm4qaSk6KG89TWF0aC5zcXJ0KDIvKDErbippKSkpKm0qdGhpcy55bWYsYj10aGlzLnhtZipvKm4qajticmVhaztjYXNlIHRoaXMuTl9QT0xFOmNhc2UgdGhpcy5TX1BPTEU6bD49MD8oYj0obz1NYXRoLnNxcnQobCkpKmosYz1pKih0aGlzLm1vZGU9PT10aGlzLlNfUE9MRT9vOi1vKSk6Yj1jPTB9fXJldHVybiBhLng9dGhpcy5hKmIrdGhpcy54MCxhLnk9dGhpcy5hKmMrdGhpcy55MCxhfSxjLmludmVyc2U9ZnVuY3Rpb24oYSl7YS54LT10aGlzLngwLGEueS09dGhpcy55MDt2YXIgYixjLGUsZyxpLGosayxsPWEueC90aGlzLmEsbT1hLnkvdGhpcy5hO2lmKHRoaXMuc3BoZXJlKXt2YXIgbixvPTAscD0wO2lmKG49TWF0aC5zcXJ0KGwqbCttKm0pLGM9LjUqbixjPjEpcmV0dXJuIG51bGw7c3dpdGNoKGM9MipNYXRoLmFzaW4oYyksdGhpcy5tb2RlIT09dGhpcy5PQkxJUSYmdGhpcy5tb2RlIT09dGhpcy5FUVVJVHx8KHA9TWF0aC5zaW4oYyksbz1NYXRoLmNvcyhjKSksdGhpcy5tb2RlKXtjYXNlIHRoaXMuRVFVSVQ6Yz1NYXRoLmFicyhuKTw9Zj8wOk1hdGguYXNpbihtKnAvbiksbCo9cCxtPW8qbjticmVhaztjYXNlIHRoaXMuT0JMSVE6Yz1NYXRoLmFicyhuKTw9Zj90aGlzLnBoaTA6TWF0aC5hc2luKG8qdGhpcy5zaW5waDArbSpwKnRoaXMuY29zcGgwL24pLGwqPXAqdGhpcy5jb3NwaDAsbT0oby1NYXRoLnNpbihjKSp0aGlzLnNpbnBoMCkqbjticmVhaztjYXNlIHRoaXMuTl9QT0xFOm09LW0sYz1kLWM7YnJlYWs7Y2FzZSB0aGlzLlNfUE9MRTpjLT1kfWI9MCE9PW18fHRoaXMubW9kZSE9PXRoaXMuRVFVSVQmJnRoaXMubW9kZSE9PXRoaXMuT0JMSVE/TWF0aC5hdGFuMihsLG0pOjB9ZWxzZXtpZihrPTAsdGhpcy5tb2RlPT09dGhpcy5PQkxJUXx8dGhpcy5tb2RlPT09dGhpcy5FUVVJVCl7aWYobC89dGhpcy5kZCxtKj10aGlzLmRkLGo9TWF0aC5zcXJ0KGwqbCttKm0pLGY+ailyZXR1cm4gYS54PTAsYS55PXRoaXMucGhpMCxhO2c9MipNYXRoLmFzaW4oLjUqai90aGlzLnJxKSxlPU1hdGguY29zKGcpLGwqPWc9TWF0aC5zaW4oZyksdGhpcy5tb2RlPT09dGhpcy5PQkxJUT8oaz1lKnRoaXMuc2luYjErbSpnKnRoaXMuY29zYjEvaixpPXRoaXMucXAqayxtPWoqdGhpcy5jb3NiMSplLW0qdGhpcy5zaW5iMSpnKTooaz1tKmcvaixpPXRoaXMucXAqayxtPWoqZSl9ZWxzZSBpZih0aGlzLm1vZGU9PT10aGlzLk5fUE9MRXx8dGhpcy5tb2RlPT09dGhpcy5TX1BPTEUpe2lmKHRoaXMubW9kZT09PXRoaXMuTl9QT0xFJiYobT0tbSksaT1sKmwrbSptLCFpKXJldHVybiBhLng9MCxhLnk9dGhpcy5waGkwLGE7az0xLWkvdGhpcy5xcCx0aGlzLm1vZGU9PT10aGlzLlNfUE9MRSYmKGs9LWspfWI9TWF0aC5hdGFuMihsLG0pLGM9dGhpcy5hdXRobGF0KE1hdGguYXNpbihrKSx0aGlzLmFwYSl9cmV0dXJuIGEueD1oKHRoaXMubG9uZzArYiksYS55PWMsYX0sYy5QMDA9LjMzMzMzMzMzMzMzMzMzMzMsYy5QMDE9LjE3MjIyMjIyMjIyMjIyMjIyLGMuUDAyPS4xMDI1NzkzNjUwNzkzNjUwOCxjLlAxMD0uMDYzODg4ODg4ODg4ODg4ODgsYy5QMTE9LjA2NjQwMjExNjQwMjExNjQsYy5QMjA9LjAxNjQxNTAxMjk0MjE5MTU0MyxjLmF1dGhzZXQ9ZnVuY3Rpb24oYSl7dmFyIGIsYz1bXTtyZXR1cm4gY1swXT1hKnRoaXMuUDAwLGI9YSphLGNbMF0rPWIqdGhpcy5QMDEsY1sxXT1iKnRoaXMuUDEwLGIqPWEsY1swXSs9Yip0aGlzLlAwMixjWzFdKz1iKnRoaXMuUDExLGNbMl09Yip0aGlzLlAyMCxjfSxjLmF1dGhsYXQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hK2E7cmV0dXJuIGErYlswXSpNYXRoLnNpbihjKStiWzFdKk1hdGguc2luKGMrYykrYlsyXSpNYXRoLnNpbihjK2MrYyl9LGMubmFtZXM9WyJMYW1iZXJ0IEF6aW11dGhhbCBFcXVhbCBBcmVhIiwiTGFtYmVydF9BemltdXRoYWxfRXF1YWxfQXJlYSIsImxhZWEiXX0seyIuLi9jb21tb24vYWRqdXN0X2xvbiI6NSwiLi4vY29tbW9uL3FzZm56IjoyMH1dLDUwOltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9MWUtMTAsZT1hKCIuLi9jb21tb24vbXNmbnoiKSxmPWEoIi4uL2NvbW1vbi90c2ZueiIpLGc9TWF0aC5QSS8yLGg9YSgiLi4vY29tbW9uL3NpZ24iKSxpPWEoIi4uL2NvbW1vbi9hZGp1c3RfbG9uIiksaj1hKCIuLi9jb21tb24vcGhpMnoiKTtjLmluaXQ9ZnVuY3Rpb24oKXtpZih0aGlzLmxhdDJ8fCh0aGlzLmxhdDI9dGhpcy5sYXQxKSx0aGlzLmswfHwodGhpcy5rMD0xKSx0aGlzLngwPXRoaXMueDB8fDAsdGhpcy55MD10aGlzLnkwfHwwLCEoTWF0aC5hYnModGhpcy5sYXQxK3RoaXMubGF0Mik8ZCkpe3ZhciBhPXRoaXMuYi90aGlzLmE7dGhpcy5lPU1hdGguc3FydCgxLWEqYSk7dmFyIGI9TWF0aC5zaW4odGhpcy5sYXQxKSxjPU1hdGguY29zKHRoaXMubGF0MSksZz1lKHRoaXMuZSxiLGMpLGg9Zih0aGlzLmUsdGhpcy5sYXQxLGIpLGk9TWF0aC5zaW4odGhpcy5sYXQyKSxqPU1hdGguY29zKHRoaXMubGF0Miksaz1lKHRoaXMuZSxpLGopLGw9Zih0aGlzLmUsdGhpcy5sYXQyLGkpLG09Zih0aGlzLmUsdGhpcy5sYXQwLE1hdGguc2luKHRoaXMubGF0MCkpO01hdGguYWJzKHRoaXMubGF0MS10aGlzLmxhdDIpPmQ/dGhpcy5ucz1NYXRoLmxvZyhnL2spL01hdGgubG9nKGgvbCk6dGhpcy5ucz1iLGlzTmFOKHRoaXMubnMpJiYodGhpcy5ucz1iKSx0aGlzLmYwPWcvKHRoaXMubnMqTWF0aC5wb3coaCx0aGlzLm5zKSksdGhpcy5yaD10aGlzLmEqdGhpcy5mMCpNYXRoLnBvdyhtLHRoaXMubnMpLHRoaXMudGl0bGV8fCh0aGlzLnRpdGxlPSJMYW1iZXJ0IENvbmZvcm1hbCBDb25pYyIpfX0sYy5mb3J3YXJkPWZ1bmN0aW9uKGEpe3ZhciBiPWEueCxjPWEueTtNYXRoLmFicygyKk1hdGguYWJzKGMpLU1hdGguUEkpPD1kJiYoYz1oKGMpKihnLTIqZCkpO3ZhciBlLGosaz1NYXRoLmFicyhNYXRoLmFicyhjKS1nKTtpZihrPmQpZT1mKHRoaXMuZSxjLE1hdGguc2luKGMpKSxqPXRoaXMuYSp0aGlzLmYwKk1hdGgucG93KGUsdGhpcy5ucyk7ZWxzZXtpZihrPWMqdGhpcy5ucywwPj1rKXJldHVybiBudWxsO2o9MH12YXIgbD10aGlzLm5zKmkoYi10aGlzLmxvbmcwKTtyZXR1cm4gYS54PXRoaXMuazAqKGoqTWF0aC5zaW4obCkpK3RoaXMueDAsYS55PXRoaXMuazAqKHRoaXMucmgtaipNYXRoLmNvcyhsKSkrdGhpcy55MCxhfSxjLmludmVyc2U9ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZixoPShhLngtdGhpcy54MCkvdGhpcy5rMCxrPXRoaXMucmgtKGEueS10aGlzLnkwKS90aGlzLmswO3RoaXMubnM+MD8oYj1NYXRoLnNxcnQoaCpoK2sqayksYz0xKTooYj0tTWF0aC5zcXJ0KGgqaCtrKmspLGM9LTEpO3ZhciBsPTA7aWYoMCE9PWImJihsPU1hdGguYXRhbjIoYypoLGMqaykpLDAhPT1ifHx0aGlzLm5zPjApe2lmKGM9MS90aGlzLm5zLGQ9TWF0aC5wb3coYi8odGhpcy5hKnRoaXMuZjApLGMpLGU9aih0aGlzLmUsZCksLTk5OTk9PT1lKXJldHVybiBudWxsfWVsc2UgZT0tZztyZXR1cm4gZj1pKGwvdGhpcy5ucyt0aGlzLmxvbmcwKSxhLng9ZixhLnk9ZSxhfSxjLm5hbWVzPVsiTGFtYmVydCBUYW5nZW50aWFsIENvbmZvcm1hbCBDb25pYyBQcm9qZWN0aW9uIiwiTGFtYmVydF9Db25mb3JtYWxfQ29uaWMiLCJMYW1iZXJ0X0NvbmZvcm1hbF9Db25pY18yU1AiLCJsY2MiXX0seyIuLi9jb21tb24vYWRqdXN0X2xvbiI6NSwiLi4vY29tbW9uL21zZm56IjoxNSwiLi4vY29tbW9uL3BoaTJ6IjoxNiwiLi4vY29tbW9uL3NpZ24iOjIxLCIuLi9jb21tb24vdHNmbnoiOjI0fV0sNTE6W2Z1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe3JldHVybiBhfWMuaW5pdD1mdW5jdGlvbigpe30sYy5mb3J3YXJkPWQsYy5pbnZlcnNlPWQsYy5uYW1lcz1bImxvbmdsYXQiLCJpZGVudGl0eSJdfSx7fV0sNTI6W2Z1bmN0aW9uKGEsYixjKXt2YXIgZD1hKCIuLi9jb21tb24vbXNmbnoiKSxlPU1hdGguUEkvMixmPTFlLTEwLGc9NTcuMjk1Nzc5NTEzMDgyMzIsaD1hKCIuLi9jb21tb24vYWRqdXN0X2xvbiIpLGk9TWF0aC5QSS80LGo9YSgiLi4vY29tbW9uL3RzZm56Iiksaz1hKCIuLi9jb21tb24vcGhpMnoiKTtjLmluaXQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmIvdGhpcy5hO3RoaXMuZXM9MS1hKmEsIngwImluIHRoaXN8fCh0aGlzLngwPTApLCJ5MCJpbiB0aGlzfHwodGhpcy55MD0wKSx0aGlzLmU9TWF0aC5zcXJ0KHRoaXMuZXMpLHRoaXMubGF0X3RzP3RoaXMuc3BoZXJlP3RoaXMuazA9TWF0aC5jb3ModGhpcy5sYXRfdHMpOnRoaXMuazA9ZCh0aGlzLmUsTWF0aC5zaW4odGhpcy5sYXRfdHMpLE1hdGguY29zKHRoaXMubGF0X3RzKSk6dGhpcy5rMHx8KHRoaXMuaz90aGlzLmswPXRoaXMuazp0aGlzLmswPTEpfSxjLmZvcndhcmQ9ZnVuY3Rpb24oYSl7dmFyIGI9YS54LGM9YS55O2lmKGMqZz45MCYmLTkwPmMqZyYmYipnPjE4MCYmLTE4MD5iKmcpcmV0dXJuIG51bGw7dmFyIGQsaztpZihNYXRoLmFicyhNYXRoLmFicyhjKS1lKTw9ZilyZXR1cm4gbnVsbDtpZih0aGlzLnNwaGVyZSlkPXRoaXMueDArdGhpcy5hKnRoaXMuazAqaChiLXRoaXMubG9uZzApLGs9dGhpcy55MCt0aGlzLmEqdGhpcy5rMCpNYXRoLmxvZyhNYXRoLnRhbihpKy41KmMpKTtlbHNle3ZhciBsPU1hdGguc2luKGMpLG09aih0aGlzLmUsYyxsKTtkPXRoaXMueDArdGhpcy5hKnRoaXMuazAqaChiLXRoaXMubG9uZzApLGs9dGhpcy55MC10aGlzLmEqdGhpcy5rMCpNYXRoLmxvZyhtKX1yZXR1cm4gYS54PWQsYS55PWssYX0sYy5pbnZlcnNlPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZD1hLngtdGhpcy54MCxmPWEueS10aGlzLnkwO2lmKHRoaXMuc3BoZXJlKWM9ZS0yKk1hdGguYXRhbihNYXRoLmV4cCgtZi8odGhpcy5hKnRoaXMuazApKSk7ZWxzZXt2YXIgZz1NYXRoLmV4cCgtZi8odGhpcy5hKnRoaXMuazApKTtpZihjPWsodGhpcy5lLGcpLC05OTk5PT09YylyZXR1cm4gbnVsbH1yZXR1cm4gYj1oKHRoaXMubG9uZzArZC8odGhpcy5hKnRoaXMuazApKSxhLng9YixhLnk9YyxhfSxjLm5hbWVzPVsiTWVyY2F0b3IiLCJQb3B1bGFyIFZpc3VhbGlzYXRpb24gUHNldWRvIE1lcmNhdG9yIiwiTWVyY2F0b3JfMVNQIiwiTWVyY2F0b3JfQXV4aWxpYXJ5X1NwaGVyZSIsIm1lcmMiXX0seyIuLi9jb21tb24vYWRqdXN0X2xvbiI6NSwiLi4vY29tbW9uL21zZm56IjoxNSwiLi4vY29tbW9uL3BoaTJ6IjoxNiwiLi4vY29tbW9uL3RzZm56IjoyNH1dLDUzOltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSgiLi4vY29tbW9uL2FkanVzdF9sb24iKTtjLmluaXQ9ZnVuY3Rpb24oKXt9LGMuZm9yd2FyZD1mdW5jdGlvbihhKXt2YXIgYj1hLngsYz1hLnksZT1kKGItdGhpcy5sb25nMCksZj10aGlzLngwK3RoaXMuYSplLGc9dGhpcy55MCt0aGlzLmEqTWF0aC5sb2coTWF0aC50YW4oTWF0aC5QSS80K2MvMi41KSkqMS4yNTtyZXR1cm4gYS54PWYsYS55PWcsYX0sYy5pbnZlcnNlPWZ1bmN0aW9uKGEpe2EueC09dGhpcy54MCxhLnktPXRoaXMueTA7dmFyIGI9ZCh0aGlzLmxvbmcwK2EueC90aGlzLmEpLGM9Mi41KihNYXRoLmF0YW4oTWF0aC5leHAoLjgqYS55L3RoaXMuYSkpLU1hdGguUEkvNCk7cmV0dXJuIGEueD1iLGEueT1jLGF9LGMubmFtZXM9WyJNaWxsZXJfQ3lsaW5kcmljYWwiLCJtaWxsIl19LHsiLi4vY29tbW9uL2FkanVzdF9sb24iOjV9XSw1NDpbZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEoIi4uL2NvbW1vbi9hZGp1c3RfbG9uIiksZT0xZS0xMDtjLmluaXQ9ZnVuY3Rpb24oKXt9LGMuZm9yd2FyZD1mdW5jdGlvbihhKXtmb3IodmFyIGI9YS54LGM9YS55LGY9ZChiLXRoaXMubG9uZzApLGc9YyxoPU1hdGguUEkqTWF0aC5zaW4oYyksaT0wOyEwO2krKyl7dmFyIGo9LShnK01hdGguc2luKGcpLWgpLygxK01hdGguY29zKGcpKTtpZihnKz1qLE1hdGguYWJzKGopPGUpYnJlYWt9Zy89MixNYXRoLlBJLzItTWF0aC5hYnMoYyk8ZSYmKGY9MCk7dmFyIGs9LjkwMDMxNjMxNjE1OCp0aGlzLmEqZipNYXRoLmNvcyhnKSt0aGlzLngwLGw9MS40MTQyMTM1NjIzNzMxKnRoaXMuYSpNYXRoLnNpbihnKSt0aGlzLnkwO3JldHVybiBhLng9ayxhLnk9bCxhfSxjLmludmVyc2U9ZnVuY3Rpb24oYSl7dmFyIGIsYzthLngtPXRoaXMueDAsYS55LT10aGlzLnkwLGM9YS55LygxLjQxNDIxMzU2MjM3MzEqdGhpcy5hKSxNYXRoLmFicyhjKT4uOTk5OTk5OTk5OTk5JiYoYz0uOTk5OTk5OTk5OTk5KSxiPU1hdGguYXNpbihjKTt2YXIgZT1kKHRoaXMubG9uZzArYS54LyguOTAwMzE2MzE2MTU4KnRoaXMuYSpNYXRoLmNvcyhiKSkpO2U8LU1hdGguUEkmJihlPS1NYXRoLlBJKSxlPk1hdGguUEkmJihlPU1hdGguUEkpLGM9KDIqYitNYXRoLnNpbigyKmIpKS9NYXRoLlBJLE1hdGguYWJzKGMpPjEmJihjPTEpO3ZhciBmPU1hdGguYXNpbihjKTtyZXR1cm4gYS54PWUsYS55PWYsYX0sYy5uYW1lcz1bIk1vbGx3ZWlkZSIsIm1vbGwiXX0seyIuLi9jb21tb24vYWRqdXN0X2xvbiI6NX1dLDU1OltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9NDg0ODEzNjgxMTA5NTM2ZS0yMDtjLml0ZXJhdGlvbnM9MSxjLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLkE9W10sdGhpcy5BWzFdPS42Mzk5MTc1MDczLHRoaXMuQVsyXT0tLjEzNTg3OTc2MTMsdGhpcy5BWzNdPS4wNjMyOTQ0MDksdGhpcy5BWzRdPS0uMDI1MjY4NTMsdGhpcy5BWzVdPS4wMTE3ODc5LHRoaXMuQVs2XT0tLjAwNTUxNjEsdGhpcy5BWzddPS4wMDI2OTA2LHRoaXMuQVs4XT0tLjAwMTMzMyx0aGlzLkFbOV09NjdlLTUsdGhpcy5BWzEwXT0tMzRlLTUsdGhpcy5CX3JlPVtdLHRoaXMuQl9pbT1bXSx0aGlzLkJfcmVbMV09Ljc1NTc4NTMyMjgsdGhpcy5CX2ltWzFdPTAsdGhpcy5CX3JlWzJdPS4yNDkyMDQ2NDYsdGhpcy5CX2ltWzJdPS4wMDMzNzE1MDcsdGhpcy5CX3JlWzNdPS0uMDAxNTQxNzM5LHRoaXMuQl9pbVszXT0uMDQxMDU4NTYsdGhpcy5CX3JlWzRdPS0uMTAxNjI5MDcsdGhpcy5CX2ltWzRdPS4wMTcyNzYwOSx0aGlzLkJfcmVbNV09LS4yNjYyMzQ4OSx0aGlzLkJfaW1bNV09LS4zNjI0OTIxOCx0aGlzLkJfcmVbNl09LS42ODcwOTgzLHRoaXMuQl9pbVs2XT0tMS4xNjUxOTY3LHRoaXMuQ19yZT1bXSx0aGlzLkNfaW09W10sdGhpcy5DX3JlWzFdPTEuMzIzMTI3MDQzOSx0aGlzLkNfaW1bMV09MCx0aGlzLkNfcmVbMl09LS41NzcyNDU3ODksdGhpcy5DX2ltWzJdPS0uMDA3ODA5NTk4LHRoaXMuQ19yZVszXT0uNTA4MzA3NTEzLHRoaXMuQ19pbVszXT0tLjExMjIwODk1Mix0aGlzLkNfcmVbNF09LS4xNTA5NDc2Mix0aGlzLkNfaW1bNF09LjE4MjAwNjAyLHRoaXMuQ19yZVs1XT0xLjAxNDE4MTc5LHRoaXMuQ19pbVs1XT0xLjY0NDk3Njk2LHRoaXMuQ19yZVs2XT0xLjk2NjA1NDksdGhpcy5DX2ltWzZdPTIuNTEyNzY0NSx0aGlzLkQ9W10sdGhpcy5EWzFdPTEuNTYyNzAxNDI0Myx0aGlzLkRbMl09LjUxODU0MDYzOTgsdGhpcy5EWzNdPS0uMDMzMzMwOTgsdGhpcy5EWzRdPS0uMTA1MjkwNix0aGlzLkRbNV09LS4wMzY4NTk0LHRoaXMuRFs2XT0uMDA3MzE3LHRoaXMuRFs3XT0uMDEyMix0aGlzLkRbOF09LjAwMzk0LHRoaXMuRFs5XT0tLjAwMTN9LGMuZm9yd2FyZD1mdW5jdGlvbihhKXt2YXIgYixjPWEueCxlPWEueSxmPWUtdGhpcy5sYXQwLGc9Yy10aGlzLmxvbmcwLGg9Zi9kKjFlLTUsaT1nLGo9MSxrPTA7Zm9yKGI9MTsxMD49YjtiKyspaio9aCxrKz10aGlzLkFbYl0qajt2YXIgbCxtLG49ayxvPWkscD0xLHE9MCxyPTAscz0wO2ZvcihiPTE7Nj49YjtiKyspbD1wKm4tcSpvLG09cSpuK3AqbyxwPWwscT1tLHI9cit0aGlzLkJfcmVbYl0qcC10aGlzLkJfaW1bYl0qcSxzPXMrdGhpcy5CX2ltW2JdKnArdGhpcy5CX3JlW2JdKnE7cmV0dXJuIGEueD1zKnRoaXMuYSt0aGlzLngwLGEueT1yKnRoaXMuYSt0aGlzLnkwLGF9LGMuaW52ZXJzZT1mdW5jdGlvbihhKXt2YXIgYixjLGUsZj1hLngsZz1hLnksaD1mLXRoaXMueDAsaT1nLXRoaXMueTAsaj1pL3RoaXMuYSxrPWgvdGhpcy5hLGw9MSxtPTAsbj0wLG89MDtmb3IoYj0xOzY+PWI7YisrKWM9bCpqLW0qayxlPW0qaitsKmssbD1jLG09ZSxuPW4rdGhpcy5DX3JlW2JdKmwtdGhpcy5DX2ltW2JdKm0sbz1vK3RoaXMuQ19pbVtiXSpsK3RoaXMuQ19yZVtiXSptO2Zvcih2YXIgcD0wO3A8dGhpcy5pdGVyYXRpb25zO3ArKyl7dmFyIHEscixzPW4sdD1vLHU9aix2PWs7Zm9yKGI9Mjs2Pj1iO2IrKylxPXMqbi10Km8scj10Km4rcypvLHM9cSx0PXIsdSs9KGItMSkqKHRoaXMuQl9yZVtiXSpzLXRoaXMuQl9pbVtiXSp0KSx2Kz0oYi0xKSoodGhpcy5CX2ltW2JdKnMrdGhpcy5CX3JlW2JdKnQpO3M9MSx0PTA7dmFyIHc9dGhpcy5CX3JlWzFdLHg9dGhpcy5CX2ltWzFdO2ZvcihiPTI7Nj49YjtiKyspcT1zKm4tdCpvLHI9dCpuK3MqbyxzPXEsdD1yLHcrPWIqKHRoaXMuQl9yZVtiXSpzLXRoaXMuQl9pbVtiXSp0KSx4Kz1iKih0aGlzLkJfaW1bYl0qcyt0aGlzLkJfcmVbYl0qdCk7dmFyIHk9dyp3K3gqeDtuPSh1Kncrdip4KS95LG89KHYqdy11KngpL3l9dmFyIHo9bixBPW8sQj0xLEM9MDtmb3IoYj0xOzk+PWI7YisrKUIqPXosQys9dGhpcy5EW2JdKkI7dmFyIEQ9dGhpcy5sYXQwK0MqZCoxZTUsRT10aGlzLmxvbmcwK0E7cmV0dXJuIGEueD1FLGEueT1ELGF9LGMubmFtZXM9WyJOZXdfWmVhbGFuZF9NYXBfR3JpZCIsIm56bWciXX0se31dLDU2OltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSgiLi4vY29tbW9uL3RzZm56IiksZT1hKCIuLi9jb21tb24vYWRqdXN0X2xvbiIpLGY9YSgiLi4vY29tbW9uL3BoaTJ6IiksZz1NYXRoLlBJLzIsaD1NYXRoLlBJLzQsaT0xZS0xMDtjLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLm5vX29mZj10aGlzLm5vX29mZnx8ITEsdGhpcy5ub19yb3Q9dGhpcy5ub19yb3R8fCExLGlzTmFOKHRoaXMuazApJiYodGhpcy5rMD0xKTt2YXIgYT1NYXRoLnNpbih0aGlzLmxhdDApLGI9TWF0aC5jb3ModGhpcy5sYXQwKSxjPXRoaXMuZSphO3RoaXMuYmw9TWF0aC5zcXJ0KDErdGhpcy5lcy8oMS10aGlzLmVzKSpNYXRoLnBvdyhiLDQpKSx0aGlzLmFsPXRoaXMuYSp0aGlzLmJsKnRoaXMuazAqTWF0aC5zcXJ0KDEtdGhpcy5lcykvKDEtYypjKTt2YXIgZj1kKHRoaXMuZSx0aGlzLmxhdDAsYSksZz10aGlzLmJsL2IqTWF0aC5zcXJ0KCgxLXRoaXMuZXMpLygxLWMqYykpOzE+ZypnJiYoZz0xKTt2YXIgaCxpO2lmKGlzTmFOKHRoaXMubG9uZ2MpKXt2YXIgaj1kKHRoaXMuZSx0aGlzLmxhdDEsTWF0aC5zaW4odGhpcy5sYXQxKSksaz1kKHRoaXMuZSx0aGlzLmxhdDIsTWF0aC5zaW4odGhpcy5sYXQyKSk7dGhpcy5sYXQwPj0wP3RoaXMuZWw9KGcrTWF0aC5zcXJ0KGcqZy0xKSkqTWF0aC5wb3coZix0aGlzLmJsKTp0aGlzLmVsPShnLU1hdGguc3FydChnKmctMSkpKk1hdGgucG93KGYsdGhpcy5ibCk7dmFyIGw9TWF0aC5wb3coaix0aGlzLmJsKSxtPU1hdGgucG93KGssdGhpcy5ibCk7aD10aGlzLmVsL2wsaT0uNSooaC0xL2gpO3ZhciBuPSh0aGlzLmVsKnRoaXMuZWwtbSpsKS8odGhpcy5lbCp0aGlzLmVsK20qbCksbz0obS1sKS8obStsKSxwPWUodGhpcy5sb25nMS10aGlzLmxvbmcyKTt0aGlzLmxvbmcwPS41Kih0aGlzLmxvbmcxK3RoaXMubG9uZzIpLU1hdGguYXRhbihuKk1hdGgudGFuKC41KnRoaXMuYmwqcCkvbykvdGhpcy5ibCx0aGlzLmxvbmcwPWUodGhpcy5sb25nMCk7dmFyIHE9ZSh0aGlzLmxvbmcxLXRoaXMubG9uZzApO3RoaXMuZ2FtbWEwPU1hdGguYXRhbihNYXRoLnNpbih0aGlzLmJsKnEpL2kpLHRoaXMuYWxwaGE9TWF0aC5hc2luKGcqTWF0aC5zaW4odGhpcy5nYW1tYTApKX1lbHNlIGg9dGhpcy5sYXQwPj0wP2crTWF0aC5zcXJ0KGcqZy0xKTpnLU1hdGguc3FydChnKmctMSksdGhpcy5lbD1oKk1hdGgucG93KGYsdGhpcy5ibCksaT0uNSooaC0xL2gpLHRoaXMuZ2FtbWEwPU1hdGguYXNpbihNYXRoLnNpbih0aGlzLmFscGhhKS9nKSx0aGlzLmxvbmcwPXRoaXMubG9uZ2MtTWF0aC5hc2luKGkqTWF0aC50YW4odGhpcy5nYW1tYTApKS90aGlzLmJsO3RoaXMubm9fb2ZmP3RoaXMudWM9MDp0aGlzLmxhdDA+PTA/dGhpcy51Yz10aGlzLmFsL3RoaXMuYmwqTWF0aC5hdGFuMihNYXRoLnNxcnQoZypnLTEpLE1hdGguY29zKHRoaXMuYWxwaGEpKTp0aGlzLnVjPS0xKnRoaXMuYWwvdGhpcy5ibCpNYXRoLmF0YW4yKE1hdGguc3FydChnKmctMSksTWF0aC5jb3ModGhpcy5hbHBoYSkpfSxjLmZvcndhcmQ9ZnVuY3Rpb24oYSl7dmFyIGIsYyxmLGo9YS54LGs9YS55LGw9ZShqLXRoaXMubG9uZzApO2lmKE1hdGguYWJzKE1hdGguYWJzKGspLWcpPD1pKWY9az4wPy0xOjEsYz10aGlzLmFsL3RoaXMuYmwqTWF0aC5sb2coTWF0aC50YW4oaCtmKnRoaXMuZ2FtbWEwKi41KSksYj0tMSpmKmcqdGhpcy5hbC90aGlzLmJsO2Vsc2V7dmFyIG09ZCh0aGlzLmUsayxNYXRoLnNpbihrKSksbj10aGlzLmVsL01hdGgucG93KG0sdGhpcy5ibCksbz0uNSoobi0xL24pLHA9LjUqKG4rMS9uKSxxPU1hdGguc2luKHRoaXMuYmwqbCkscj0obypNYXRoLnNpbih0aGlzLmdhbW1hMCktcSpNYXRoLmNvcyh0aGlzLmdhbW1hMCkpL3A7Yz1NYXRoLmFicyhNYXRoLmFicyhyKS0xKTw9aT9OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk6LjUqdGhpcy5hbCpNYXRoLmxvZygoMS1yKS8oMStyKSkvdGhpcy5ibCxiPU1hdGguYWJzKE1hdGguY29zKHRoaXMuYmwqbCkpPD1pP3RoaXMuYWwqdGhpcy5ibCpsOnRoaXMuYWwqTWF0aC5hdGFuMihvKk1hdGguY29zKHRoaXMuZ2FtbWEwKStxKk1hdGguc2luKHRoaXMuZ2FtbWEwKSxNYXRoLmNvcyh0aGlzLmJsKmwpKS90aGlzLmJsfXJldHVybiB0aGlzLm5vX3JvdD8oYS54PXRoaXMueDArYixhLnk9dGhpcy55MCtjKTooYi09dGhpcy51YyxhLng9dGhpcy54MCtjKk1hdGguY29zKHRoaXMuYWxwaGEpK2IqTWF0aC5zaW4odGhpcy5hbHBoYSksYS55PXRoaXMueTArYipNYXRoLmNvcyh0aGlzLmFscGhhKS1jKk1hdGguc2luKHRoaXMuYWxwaGEpKSxhfSxjLmludmVyc2U9ZnVuY3Rpb24oYSl7dmFyIGIsYzt0aGlzLm5vX3JvdD8oYz1hLnktdGhpcy55MCxiPWEueC10aGlzLngwKTooYz0oYS54LXRoaXMueDApKk1hdGguY29zKHRoaXMuYWxwaGEpLShhLnktdGhpcy55MCkqTWF0aC5zaW4odGhpcy5hbHBoYSksYj0oYS55LXRoaXMueTApKk1hdGguY29zKHRoaXMuYWxwaGEpKyhhLngtdGhpcy54MCkqTWF0aC5zaW4odGhpcy5hbHBoYSksYis9dGhpcy51Yyk7dmFyIGQ9TWF0aC5leHAoLTEqdGhpcy5ibCpjL3RoaXMuYWwpLGg9LjUqKGQtMS9kKSxqPS41KihkKzEvZCksaz1NYXRoLnNpbih0aGlzLmJsKmIvdGhpcy5hbCksbD0oaypNYXRoLmNvcyh0aGlzLmdhbW1hMCkraCpNYXRoLnNpbih0aGlzLmdhbW1hMCkpL2osbT1NYXRoLnBvdyh0aGlzLmVsL01hdGguc3FydCgoMStsKS8oMS1sKSksMS90aGlzLmJsKTtyZXR1cm4gTWF0aC5hYnMobC0xKTxpPyhhLng9dGhpcy5sb25nMCxhLnk9Zyk6TWF0aC5hYnMobCsxKTxpPyhhLng9dGhpcy5sb25nMCxhLnk9LTEqZyk6KGEueT1mKHRoaXMuZSxtKSxhLng9ZSh0aGlzLmxvbmcwLU1hdGguYXRhbjIoaCpNYXRoLmNvcyh0aGlzLmdhbW1hMCktaypNYXRoLnNpbih0aGlzLmdhbW1hMCksTWF0aC5jb3ModGhpcy5ibCpiL3RoaXMuYWwpKS90aGlzLmJsKSksYX0sYy5uYW1lcz1bIkhvdGluZV9PYmxpcXVlX01lcmNhdG9yIiwiSG90aW5lIE9ibGlxdWUgTWVyY2F0b3IiLCJIb3RpbmVfT2JsaXF1ZV9NZXJjYXRvcl9BemltdXRoX05hdHVyYWxfT3JpZ2luIiwiSG90aW5lX09ibGlxdWVfTWVyY2F0b3JfQXppbXV0aF9DZW50ZXIiLCJvbWVyYyJdfSx7Ii4uL2NvbW1vbi9hZGp1c3RfbG9uIjo1LCIuLi9jb21tb24vcGhpMnoiOjE2LCIuLi9jb21tb24vdHNmbnoiOjI0fV0sNTc6W2Z1bmN0aW9uKGEsYixjKXt2YXIgZD1hKCIuLi9jb21tb24vYWRqdXN0X2xvbiIpLGU9MWUtMTAsZj1hKCIuLi9jb21tb24vYXNpbnoiKSxnPU1hdGguUEkvMjtjLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLnNpbl9wMTQ9TWF0aC5zaW4odGhpcy5sYXQwKSx0aGlzLmNvc19wMTQ9TWF0aC5jb3ModGhpcy5sYXQwKX0sYy5mb3J3YXJkPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZixnLGgsaSxqLGssbD1hLngsbT1hLnk7cmV0dXJuIGY9ZChsLXRoaXMubG9uZzApLGI9TWF0aC5zaW4obSksYz1NYXRoLmNvcyhtKSxnPU1hdGguY29zKGYpLGk9dGhpcy5zaW5fcDE0KmIrdGhpcy5jb3NfcDE0KmMqZyxoPTEsKGk+MHx8TWF0aC5hYnMoaSk8PWUpJiYoaj10aGlzLmEqaCpjKk1hdGguc2luKGYpLGs9dGhpcy55MCt0aGlzLmEqaCoodGhpcy5jb3NfcDE0KmItdGhpcy5zaW5fcDE0KmMqZykpLGEueD1qLGEueT1rLGF9LGMuaW52ZXJzZT1mdW5jdGlvbihhKXt2YXIgYixjLGgsaSxqLGssbDtyZXR1cm4gYS54LT10aGlzLngwLGEueS09dGhpcy55MCxiPU1hdGguc3FydChhLngqYS54K2EueSphLnkpLGM9ZihiL3RoaXMuYSksaD1NYXRoLnNpbihjKSxpPU1hdGguY29zKGMpLGs9dGhpcy5sb25nMCxNYXRoLmFicyhiKTw9ZT8obD10aGlzLmxhdDAsYS54PWssYS55PWwsYSk6KGw9ZihpKnRoaXMuc2luX3AxNCthLnkqaCp0aGlzLmNvc19wMTQvYiksaj1NYXRoLmFicyh0aGlzLmxhdDApLWcsTWF0aC5hYnMoaik8PWU/KGs9ZCh0aGlzLmxhdDA+PTA/dGhpcy5sb25nMCtNYXRoLmF0YW4yKGEueCwtYS55KTp0aGlzLmxvbmcwLU1hdGguYXRhbjIoLWEueCxhLnkpKSxhLng9ayxhLnk9bCxhKTooaz1kKHRoaXMubG9uZzArTWF0aC5hdGFuMihhLngqaCxiKnRoaXMuY29zX3AxNCppLWEueSp0aGlzLnNpbl9wMTQqaCkpLGEueD1rLGEueT1sLGEpKX0sYy5uYW1lcz1bIm9ydGhvIl19LHsiLi4vY29tbW9uL2FkanVzdF9sb24iOjUsIi4uL2NvbW1vbi9hc2lueiI6Nn1dLDU4OltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSgiLi4vY29tbW9uL2UwZm4iKSxlPWEoIi4uL2NvbW1vbi9lMWZuIiksZj1hKCIuLi9jb21tb24vZTJmbiIpLGc9YSgiLi4vY29tbW9uL2UzZm4iKSxoPWEoIi4uL2NvbW1vbi9hZGp1c3RfbG9uIiksaT1hKCIuLi9jb21tb24vYWRqdXN0X2xhdCIpLGo9YSgiLi4vY29tbW9uL21sZm4iKSxrPTFlLTEwLGw9YSgiLi4vY29tbW9uL2dOIiksbT0yMDtjLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLnRlbXA9dGhpcy5iL3RoaXMuYSx0aGlzLmVzPTEtTWF0aC5wb3codGhpcy50ZW1wLDIpLHRoaXMuZT1NYXRoLnNxcnQodGhpcy5lcyksdGhpcy5lMD1kKHRoaXMuZXMpLHRoaXMuZTE9ZSh0aGlzLmVzKSx0aGlzLmUyPWYodGhpcy5lcyksdGhpcy5lMz1nKHRoaXMuZXMpLHRoaXMubWwwPXRoaXMuYSpqKHRoaXMuZTAsdGhpcy5lMSx0aGlzLmUyLHRoaXMuZTMsdGhpcy5sYXQwKX0sYy5mb3J3YXJkPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlPWEueCxmPWEueSxnPWgoZS10aGlzLmxvbmcwKTtpZihkPWcqTWF0aC5zaW4oZiksdGhpcy5zcGhlcmUpTWF0aC5hYnMoZik8PWs/KGI9dGhpcy5hKmcsYz0tMSp0aGlzLmEqdGhpcy5sYXQwKTooYj10aGlzLmEqTWF0aC5zaW4oZCkvTWF0aC50YW4oZiksYz10aGlzLmEqKGkoZi10aGlzLmxhdDApKygxLU1hdGguY29zKGQpKS9NYXRoLnRhbihmKSkpO2Vsc2UgaWYoTWF0aC5hYnMoZik8PWspYj10aGlzLmEqZyxjPS0xKnRoaXMubWwwO2Vsc2V7dmFyIG09bCh0aGlzLmEsdGhpcy5lLE1hdGguc2luKGYpKS9NYXRoLnRhbihmKTtiPW0qTWF0aC5zaW4oZCksYz10aGlzLmEqaih0aGlzLmUwLHRoaXMuZTEsdGhpcy5lMix0aGlzLmUzLGYpLXRoaXMubWwwK20qKDEtTWF0aC5jb3MoZCkpfXJldHVybiBhLng9Yit0aGlzLngwLGEueT1jK3RoaXMueTAsYX0sYy5pbnZlcnNlPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGYsZyxpLGwsbjtpZihkPWEueC10aGlzLngwLGU9YS55LXRoaXMueTAsdGhpcy5zcGhlcmUpaWYoTWF0aC5hYnMoZSt0aGlzLmEqdGhpcy5sYXQwKTw9ayliPWgoZC90aGlzLmErdGhpcy5sb25nMCksYz0wO2Vsc2V7Zz10aGlzLmxhdDArZS90aGlzLmEsaT1kKmQvdGhpcy5hL3RoaXMuYStnKmcsbD1nO3ZhciBvO2ZvcihmPW07ZjstLWYpaWYobz1NYXRoLnRhbihsKSxuPS0xKihnKihsKm8rMSktbC0uNSoobCpsK2kpKm8pLygobC1nKS9vLTEpLGwrPW4sTWF0aC5hYnMobik8PWspe2M9bDticmVha31iPWgodGhpcy5sb25nMCtNYXRoLmFzaW4oZCpNYXRoLnRhbihsKS90aGlzLmEpL01hdGguc2luKGMpKX1lbHNlIGlmKE1hdGguYWJzKGUrdGhpcy5tbDApPD1rKWM9MCxiPWgodGhpcy5sb25nMCtkL3RoaXMuYSk7ZWxzZXtnPSh0aGlzLm1sMCtlKS90aGlzLmEsaT1kKmQvdGhpcy5hL3RoaXMuYStnKmcsbD1nO3ZhciBwLHEscixzLHQ7Zm9yKGY9bTtmOy0tZilpZih0PXRoaXMuZSpNYXRoLnNpbihsKSxwPU1hdGguc3FydCgxLXQqdCkqTWF0aC50YW4obCkscT10aGlzLmEqaih0aGlzLmUwLHRoaXMuZTEsdGhpcy5lMix0aGlzLmUzLGwpLHI9dGhpcy5lMC0yKnRoaXMuZTEqTWF0aC5jb3MoMipsKSs0KnRoaXMuZTIqTWF0aC5jb3MoNCpsKS02KnRoaXMuZTMqTWF0aC5jb3MoNipsKSxzPXEvdGhpcy5hLG49KGcqKHAqcysxKS1zLS41KnAqKHMqcytpKSkvKHRoaXMuZXMqTWF0aC5zaW4oMipsKSoocypzK2ktMipnKnMpLyg0KnApKyhnLXMpKihwKnItMi9NYXRoLnNpbigyKmwpKS1yKSxsLT1uLE1hdGguYWJzKG4pPD1rKXtjPWw7YnJlYWt9cD1NYXRoLnNxcnQoMS10aGlzLmVzKk1hdGgucG93KE1hdGguc2luKGMpLDIpKSpNYXRoLnRhbihjKSxiPWgodGhpcy5sb25nMCtNYXRoLmFzaW4oZCpwL3RoaXMuYSkvTWF0aC5zaW4oYykpfXJldHVybiBhLng9YixhLnk9YyxhfSxjLm5hbWVzPVsiUG9seWNvbmljIiwicG9seSJdfSx7Ii4uL2NvbW1vbi9hZGp1c3RfbGF0Ijo0LCIuLi9jb21tb24vYWRqdXN0X2xvbiI6NSwiLi4vY29tbW9uL2UwZm4iOjcsIi4uL2NvbW1vbi9lMWZuIjo4LCIuLi9jb21tb24vZTJmbiI6OSwiLi4vY29tbW9uL2UzZm4iOjEwLCIuLi9jb21tb24vZ04iOjExLCIuLi9jb21tb24vbWxmbiI6MTR9XSw1OTpbZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEoIi4uL2NvbW1vbi9hZGp1c3RfbG9uIiksZT1hKCIuLi9jb21tb24vYWRqdXN0X2xhdCIpLGY9YSgiLi4vY29tbW9uL3BqX2VuZm4iKSxnPTIwLGg9YSgiLi4vY29tbW9uL3BqX21sZm4iKSxpPWEoIi4uL2NvbW1vbi9wal9pbnZfbWxmbiIpLGo9TWF0aC5QSS8yLGs9MWUtMTAsbD1hKCIuLi9jb21tb24vYXNpbnoiKTtjLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLnNwaGVyZT8odGhpcy5uPTEsdGhpcy5tPTAsdGhpcy5lcz0wLHRoaXMuQ195PU1hdGguc3FydCgodGhpcy5tKzEpL3RoaXMubiksdGhpcy5DX3g9dGhpcy5DX3kvKHRoaXMubSsxKSk6dGhpcy5lbj1mKHRoaXMuZXMpfSxjLmZvcndhcmQ9ZnVuY3Rpb24oYSl7dmFyIGIsYyxlPWEueCxmPWEueTtpZihlPWQoZS10aGlzLmxvbmcwKSx0aGlzLnNwaGVyZSl7aWYodGhpcy5tKWZvcih2YXIgaT10aGlzLm4qTWF0aC5zaW4oZiksaj1nO2o7LS1qKXt2YXIgbD0odGhpcy5tKmYrTWF0aC5zaW4oZiktaSkvKHRoaXMubStNYXRoLmNvcyhmKSk7aWYoZi09bCxNYXRoLmFicyhsKTxrKWJyZWFrfWVsc2UgZj0xIT09dGhpcy5uP01hdGguYXNpbih0aGlzLm4qTWF0aC5zaW4oZikpOmY7Yj10aGlzLmEqdGhpcy5DX3gqZSoodGhpcy5tK01hdGguY29zKGYpKSxjPXRoaXMuYSp0aGlzLkNfeSpmfWVsc2V7dmFyIG09TWF0aC5zaW4oZiksbj1NYXRoLmNvcyhmKTtjPXRoaXMuYSpoKGYsbSxuLHRoaXMuZW4pLGI9dGhpcy5hKmUqbi9NYXRoLnNxcnQoMS10aGlzLmVzKm0qbSl9cmV0dXJuIGEueD1iLGEueT1jLGF9LGMuaW52ZXJzZT1mdW5jdGlvbihhKXt2YXIgYixjLGYsZztyZXR1cm4gYS54LT10aGlzLngwLGY9YS54L3RoaXMuYSxhLnktPXRoaXMueTAsYj1hLnkvdGhpcy5hLHRoaXMuc3BoZXJlPyhiLz10aGlzLkNfeSxmLz10aGlzLkNfeCoodGhpcy5tK01hdGguY29zKGIpKSx0aGlzLm0/Yj1sKCh0aGlzLm0qYitNYXRoLnNpbihiKSkvdGhpcy5uKToxIT09dGhpcy5uJiYoYj1sKE1hdGguc2luKGIpL3RoaXMubikpLGY9ZChmK3RoaXMubG9uZzApLGI9ZShiKSk6KGI9aShhLnkvdGhpcy5hLHRoaXMuZXMsdGhpcy5lbiksZz1NYXRoLmFicyhiKSxqPmc/KGc9TWF0aC5zaW4oYiksYz10aGlzLmxvbmcwK2EueCpNYXRoLnNxcnQoMS10aGlzLmVzKmcqZykvKHRoaXMuYSpNYXRoLmNvcyhiKSksZj1kKGMpKTpqPmctayYmKGY9dGhpcy5sb25nMCkpLGEueD1mLGEueT1iLGF9LGMubmFtZXM9WyJTaW51c29pZGFsIiwic2ludSJdfSx7Ii4uL2NvbW1vbi9hZGp1c3RfbGF0Ijo0LCIuLi9jb21tb24vYWRqdXN0X2xvbiI6NSwiLi4vY29tbW9uL2FzaW56Ijo2LCIuLi9jb21tb24vcGpfZW5mbiI6MTcsIi4uL2NvbW1vbi9wal9pbnZfbWxmbiI6MTgsIi4uL2NvbW1vbi9wal9tbGZuIjoxOX1dLDYwOltmdW5jdGlvbihhLGIsYyl7Yy5pbml0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5sYXQwO3RoaXMubGFtYmRhMD10aGlzLmxvbmcwO3ZhciBiPU1hdGguc2luKGEpLGM9dGhpcy5hLGQ9dGhpcy5yZixlPTEvZCxmPTIqZS1NYXRoLnBvdyhlLDIpLGc9dGhpcy5lPU1hdGguc3FydChmKTt0aGlzLlI9dGhpcy5rMCpjKk1hdGguc3FydCgxLWYpLygxLWYqTWF0aC5wb3coYiwyKSksdGhpcy5hbHBoYT1NYXRoLnNxcnQoMStmLygxLWYpKk1hdGgucG93KE1hdGguY29zKGEpLDQpKSx0aGlzLmIwPU1hdGguYXNpbihiL3RoaXMuYWxwaGEpO3ZhciBoPU1hdGgubG9nKE1hdGgudGFuKE1hdGguUEkvNCt0aGlzLmIwLzIpKSxpPU1hdGgubG9nKE1hdGgudGFuKE1hdGguUEkvNCthLzIpKSxqPU1hdGgubG9nKCgxK2cqYikvKDEtZypiKSk7dGhpcy5LPWgtdGhpcy5hbHBoYSppK3RoaXMuYWxwaGEqZy8yKmp9LGMuZm9yd2FyZD1mdW5jdGlvbihhKXt2YXIgYj1NYXRoLmxvZyhNYXRoLnRhbihNYXRoLlBJLzQtYS55LzIpKSxjPXRoaXMuZS8yKk1hdGgubG9nKCgxK3RoaXMuZSpNYXRoLnNpbihhLnkpKS8oMS10aGlzLmUqTWF0aC5zaW4oYS55KSkpLGQ9LXRoaXMuYWxwaGEqKGIrYykrdGhpcy5LLGU9MiooTWF0aC5hdGFuKE1hdGguZXhwKGQpKS1NYXRoLlBJLzQpLGY9dGhpcy5hbHBoYSooYS54LXRoaXMubGFtYmRhMCksZz1NYXRoLmF0YW4oTWF0aC5zaW4oZikvKE1hdGguc2luKHRoaXMuYjApKk1hdGgudGFuKGUpK01hdGguY29zKHRoaXMuYjApKk1hdGguY29zKGYpKSksaD1NYXRoLmFzaW4oTWF0aC5jb3ModGhpcy5iMCkqTWF0aC5zaW4oZSktTWF0aC5zaW4odGhpcy5iMCkqTWF0aC5jb3MoZSkqTWF0aC5jb3MoZikpO3JldHVybiBhLnk9dGhpcy5SLzIqTWF0aC5sb2coKDErTWF0aC5zaW4oaCkpLygxLU1hdGguc2luKGgpKSkrdGhpcy55MCxhLng9dGhpcy5SKmcrdGhpcy54MCxhfSxjLmludmVyc2U9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPWEueC10aGlzLngwLGM9YS55LXRoaXMueTAsZD1iL3RoaXMuUixlPTIqKE1hdGguYXRhbihNYXRoLmV4cChjL3RoaXMuUikpLU1hdGguUEkvNCksZj1NYXRoLmFzaW4oTWF0aC5jb3ModGhpcy5iMCkqTWF0aC5zaW4oZSkrTWF0aC5zaW4odGhpcy5iMCkqTWF0aC5jb3MoZSkqTWF0aC5jb3MoZCkpLGc9TWF0aC5hdGFuKE1hdGguc2luKGQpLyhNYXRoLmNvcyh0aGlzLmIwKSpNYXRoLmNvcyhkKS1NYXRoLnNpbih0aGlzLmIwKSpNYXRoLnRhbihlKSkpLGg9dGhpcy5sYW1iZGEwK2cvdGhpcy5hbHBoYSxpPTAsaj1mLGs9LTFlMyxsPTA7TWF0aC5hYnMoai1rKT4xZS03Oyl7aWYoKytsPjIwKXJldHVybjtpPTEvdGhpcy5hbHBoYSooTWF0aC5sb2coTWF0aC50YW4oTWF0aC5QSS80K2YvMikpLXRoaXMuSykrdGhpcy5lKk1hdGgubG9nKE1hdGgudGFuKE1hdGguUEkvNCtNYXRoLmFzaW4odGhpcy5lKk1hdGguc2luKGopKS8yKSksaz1qLGo9MipNYXRoLmF0YW4oTWF0aC5leHAoaSkpLU1hdGguUEkvMn1yZXR1cm4gYS54PWgsYS55PWosYX0sYy5uYW1lcz1bInNvbWVyYyJdfSx7fV0sNjE6W2Z1bmN0aW9uKGEsYixjKXt2YXIgZD1NYXRoLlBJLzIsZT0xZS0xMCxmPWEoIi4uL2NvbW1vbi9zaWduIiksZz1hKCIuLi9jb21tb24vbXNmbnoiKSxoPWEoIi4uL2NvbW1vbi90c2ZueiIpLGk9YSgiLi4vY29tbW9uL3BoaTJ6Iiksaj1hKCIuLi9jb21tb24vYWRqdXN0X2xvbiIpO2Muc3Nmbl89ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBiKj1jLE1hdGgudGFuKC41KihkK2EpKSpNYXRoLnBvdygoMS1iKS8oMStiKSwuNSpjKX0sYy5pbml0PWZ1bmN0aW9uKCl7dGhpcy5jb3NsYXQwPU1hdGguY29zKHRoaXMubGF0MCksdGhpcy5zaW5sYXQwPU1hdGguc2luKHRoaXMubGF0MCksdGhpcy5zcGhlcmU/MT09PXRoaXMuazAmJiFpc05hTih0aGlzLmxhdF90cykmJk1hdGguYWJzKHRoaXMuY29zbGF0MCk8PWUmJih0aGlzLmswPS41KigxK2YodGhpcy5sYXQwKSpNYXRoLnNpbih0aGlzLmxhdF90cykpKTooTWF0aC5hYnModGhpcy5jb3NsYXQwKTw9ZSYmKHRoaXMubGF0MD4wP3RoaXMuY29uPTE6dGhpcy5jb249LTEpLHRoaXMuY29ucz1NYXRoLnNxcnQoTWF0aC5wb3coMSt0aGlzLmUsMSt0aGlzLmUpKk1hdGgucG93KDEtdGhpcy5lLDEtdGhpcy5lKSksMT09PXRoaXMuazAmJiFpc05hTih0aGlzLmxhdF90cykmJk1hdGguYWJzKHRoaXMuY29zbGF0MCk8PWUmJih0aGlzLmswPS41KnRoaXMuY29ucypnKHRoaXMuZSxNYXRoLnNpbih0aGlzLmxhdF90cyksTWF0aC5jb3ModGhpcy5sYXRfdHMpKS9oKHRoaXMuZSx0aGlzLmNvbip0aGlzLmxhdF90cyx0aGlzLmNvbipNYXRoLnNpbih0aGlzLmxhdF90cykpKSx0aGlzLm1zMT1nKHRoaXMuZSx0aGlzLnNpbmxhdDAsdGhpcy5jb3NsYXQwKSx0aGlzLlgwPTIqTWF0aC5hdGFuKHRoaXMuc3Nmbl8odGhpcy5sYXQwLHRoaXMuc2lubGF0MCx0aGlzLmUpKS1kLHRoaXMuY29zWDA9TWF0aC5jb3ModGhpcy5YMCksdGhpcy5zaW5YMD1NYXRoLnNpbih0aGlzLlgwKSl9LGMuZm9yd2FyZD1mdW5jdGlvbihhKXt2YXIgYixjLGYsZyxpLGssbD1hLngsbT1hLnksbj1NYXRoLnNpbihtKSxvPU1hdGguY29zKG0pLHA9aihsLXRoaXMubG9uZzApO3JldHVybiBNYXRoLmFicyhNYXRoLmFicyhsLXRoaXMubG9uZzApLU1hdGguUEkpPD1lJiZNYXRoLmFicyhtK3RoaXMubGF0MCk8PWU/KGEueD1OYU4sYS55PU5hTixhKTp0aGlzLnNwaGVyZT8oYj0yKnRoaXMuazAvKDErdGhpcy5zaW5sYXQwKm4rdGhpcy5jb3NsYXQwKm8qTWF0aC5jb3MocCkpLGEueD10aGlzLmEqYipvKk1hdGguc2luKHApK3RoaXMueDAsYS55PXRoaXMuYSpiKih0aGlzLmNvc2xhdDAqbi10aGlzLnNpbmxhdDAqbypNYXRoLmNvcyhwKSkrdGhpcy55MCxhKTooYz0yKk1hdGguYXRhbih0aGlzLnNzZm5fKG0sbix0aGlzLmUpKS1kLGc9TWF0aC5jb3MoYyksZj1NYXRoLnNpbihjKSxNYXRoLmFicyh0aGlzLmNvc2xhdDApPD1lPyhpPWgodGhpcy5lLG0qdGhpcy5jb24sdGhpcy5jb24qbiksaz0yKnRoaXMuYSp0aGlzLmswKmkvdGhpcy5jb25zLGEueD10aGlzLngwK2sqTWF0aC5zaW4obC10aGlzLmxvbmcwKSxhLnk9dGhpcy55MC10aGlzLmNvbiprKk1hdGguY29zKGwtdGhpcy5sb25nMCksYSk6KE1hdGguYWJzKHRoaXMuc2lubGF0MCk8ZT8oYj0yKnRoaXMuYSp0aGlzLmswLygxK2cqTWF0aC5jb3MocCkpLGEueT1iKmYpOihiPTIqdGhpcy5hKnRoaXMuazAqdGhpcy5tczEvKHRoaXMuY29zWDAqKDErdGhpcy5zaW5YMCpmK3RoaXMuY29zWDAqZypNYXRoLmNvcyhwKSkpLGEueT1iKih0aGlzLmNvc1gwKmYtdGhpcy5zaW5YMCpnKk1hdGguY29zKHApKSt0aGlzLnkwKSxhLng9YipnKk1hdGguc2luKHApK3RoaXMueDAsYSkpfSxjLmludmVyc2U9ZnVuY3Rpb24oYSl7YS54LT10aGlzLngwLGEueS09dGhpcy55MDt2YXIgYixjLGYsZyxoLGs9TWF0aC5zcXJ0KGEueCphLngrYS55KmEueSk7aWYodGhpcy5zcGhlcmUpe3ZhciBsPTIqTWF0aC5hdGFuKGsvKC41KnRoaXMuYSp0aGlzLmswKSk7cmV0dXJuIGI9dGhpcy5sb25nMCxjPXRoaXMubGF0MCxlPj1rPyhhLng9YixhLnk9YyxhKTooYz1NYXRoLmFzaW4oTWF0aC5jb3MobCkqdGhpcy5zaW5sYXQwK2EueSpNYXRoLnNpbihsKSp0aGlzLmNvc2xhdDAvayksYj1qKE1hdGguYWJzKHRoaXMuY29zbGF0MCk8ZT90aGlzLmxhdDA+MD90aGlzLmxvbmcwK01hdGguYXRhbjIoYS54LC0xKmEueSk6dGhpcy5sb25nMCtNYXRoLmF0YW4yKGEueCxhLnkpOnRoaXMubG9uZzArTWF0aC5hdGFuMihhLngqTWF0aC5zaW4obCksayp0aGlzLmNvc2xhdDAqTWF0aC5jb3MobCktYS55KnRoaXMuc2lubGF0MCpNYXRoLnNpbihsKSkpLGEueD1iLGEueT1jLGEpfWlmKE1hdGguYWJzKHRoaXMuY29zbGF0MCk8PWUpe2lmKGU+PWspcmV0dXJuIGM9dGhpcy5sYXQwLGI9dGhpcy5sb25nMCxhLng9YixhLnk9YyxhO2EueCo9dGhpcy5jb24sYS55Kj10aGlzLmNvbixmPWsqdGhpcy5jb25zLygyKnRoaXMuYSp0aGlzLmswKSxjPXRoaXMuY29uKmkodGhpcy5lLGYpLGI9dGhpcy5jb24qaih0aGlzLmNvbip0aGlzLmxvbmcwK01hdGguYXRhbjIoYS54LC0xKmEueSkpfWVsc2UgZz0yKk1hdGguYXRhbihrKnRoaXMuY29zWDAvKDIqdGhpcy5hKnRoaXMuazAqdGhpcy5tczEpKSxiPXRoaXMubG9uZzAsZT49az9oPXRoaXMuWDA6KGg9TWF0aC5hc2luKE1hdGguY29zKGcpKnRoaXMuc2luWDArYS55Kk1hdGguc2luKGcpKnRoaXMuY29zWDAvayksYj1qKHRoaXMubG9uZzArTWF0aC5hdGFuMihhLngqTWF0aC5zaW4oZyksayp0aGlzLmNvc1gwKk1hdGguY29zKGcpLWEueSp0aGlzLnNpblgwKk1hdGguc2luKGcpKSkpLGM9LTEqaSh0aGlzLmUsTWF0aC50YW4oLjUqKGQraCkpKTtyZXR1cm4gYS54PWIsYS55PWMsYX0sYy5uYW1lcz1bInN0ZXJlIiwiU3RlcmVvZ3JhcGhpY19Tb3V0aF9Qb2xlIiwiUG9sYXIgU3RlcmVvZ3JhcGhpYyAodmFyaWFudCBCKSJdfSx7Ii4uL2NvbW1vbi9hZGp1c3RfbG9uIjo1LCIuLi9jb21tb24vbXNmbnoiOjE1LCIuLi9jb21tb24vcGhpMnoiOjE2LCIuLi9jb21tb24vc2lnbiI6MjEsIi4uL2NvbW1vbi90c2ZueiI6MjR9XSw2MjpbZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEoIi4vZ2F1c3MiKSxlPWEoIi4uL2NvbW1vbi9hZGp1c3RfbG9uIik7Yy5pbml0PWZ1bmN0aW9uKCl7ZC5pbml0LmFwcGx5KHRoaXMpLHRoaXMucmMmJih0aGlzLnNpbmMwPU1hdGguc2luKHRoaXMucGhpYzApLHRoaXMuY29zYzA9TWF0aC5jb3ModGhpcy5waGljMCksdGhpcy5SMj0yKnRoaXMucmMsdGhpcy50aXRsZXx8KHRoaXMudGl0bGU9Ik9ibGlxdWUgU3RlcmVvZ3JhcGhpYyBBbHRlcm5hdGl2ZSIpKX0sYy5mb3J3YXJkPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZixnO3JldHVybiBhLng9ZShhLngtdGhpcy5sb25nMCksZC5mb3J3YXJkLmFwcGx5KHRoaXMsW2FdKSxiPU1hdGguc2luKGEueSksYz1NYXRoLmNvcyhhLnkpLGY9TWF0aC5jb3MoYS54KSxnPXRoaXMuazAqdGhpcy5SMi8oMSt0aGlzLnNpbmMwKmIrdGhpcy5jb3NjMCpjKmYpLGEueD1nKmMqTWF0aC5zaW4oYS54KSxhLnk9ZyoodGhpcy5jb3NjMCpiLXRoaXMuc2luYzAqYypmKSxhLng9dGhpcy5hKmEueCt0aGlzLngwLGEueT10aGlzLmEqYS55K3RoaXMueTAsYX0sYy5pbnZlcnNlPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZixnLGg7aWYoYS54PShhLngtdGhpcy54MCkvdGhpcy5hLGEueT0oYS55LXRoaXMueTApL3RoaXMuYSxhLngvPXRoaXMuazAsYS55Lz10aGlzLmswLGg9TWF0aC5zcXJ0KGEueCphLngrYS55KmEueSkpe3ZhciBpPTIqTWF0aC5hdGFuMihoLHRoaXMuUjIpO2I9TWF0aC5zaW4oaSksYz1NYXRoLmNvcyhpKSxnPU1hdGguYXNpbihjKnRoaXMuc2luYzArYS55KmIqdGhpcy5jb3NjMC9oKSxmPU1hdGguYXRhbjIoYS54KmIsaCp0aGlzLmNvc2MwKmMtYS55KnRoaXMuc2luYzAqYil9ZWxzZSBnPXRoaXMucGhpYzAsZj0wO3JldHVybiBhLng9ZixhLnk9ZyxkLmludmVyc2UuYXBwbHkodGhpcyxbYV0pLGEueD1lKGEueCt0aGlzLmxvbmcwKSxhfSxjLm5hbWVzPVsiU3RlcmVvZ3JhcGhpY19Ob3J0aF9Qb2xlIiwiT2JsaXF1ZV9TdGVyZW9ncmFwaGljIiwiUG9sYXJfU3RlcmVvZ3JhcGhpYyIsInN0ZXJlYSIsIk9ibGlxdWUgU3RlcmVvZ3JhcGhpYyBBbHRlcm5hdGl2ZSJdfSx7Ii4uL2NvbW1vbi9hZGp1c3RfbG9uIjo1LCIuL2dhdXNzIjo0Nn1dLDYzOltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSgiLi4vY29tbW9uL2UwZm4iKSxlPWEoIi4uL2NvbW1vbi9lMWZuIiksZj1hKCIuLi9jb21tb24vZTJmbiIpLGc9YSgiLi4vY29tbW9uL2UzZm4iKSxoPWEoIi4uL2NvbW1vbi9tbGZuIiksaT1hKCIuLi9jb21tb24vYWRqdXN0X2xvbiIpLGo9TWF0aC5QSS8yLGs9MWUtMTAsbD1hKCIuLi9jb21tb24vc2lnbiIpLG09YSgiLi4vY29tbW9uL2FzaW56Iik7Yy5pbml0PWZ1bmN0aW9uKCl7dGhpcy5lMD1kKHRoaXMuZXMpLHRoaXMuZTE9ZSh0aGlzLmVzKSx0aGlzLmUyPWYodGhpcy5lcyksdGhpcy5lMz1nKHRoaXMuZXMpLHRoaXMubWwwPXRoaXMuYSpoKHRoaXMuZTAsdGhpcy5lMSx0aGlzLmUyLHRoaXMuZTMsdGhpcy5sYXQwKX0sYy5mb3J3YXJkPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlPWEueCxmPWEueSxnPWkoZS10aGlzLmxvbmcwKSxqPU1hdGguc2luKGYpLGs9TWF0aC5jb3MoZik7aWYodGhpcy5zcGhlcmUpe3ZhciBsPWsqTWF0aC5zaW4oZyk7aWYoTWF0aC5hYnMoTWF0aC5hYnMobCktMSk8MWUtMTApcmV0dXJuIDkzO2M9LjUqdGhpcy5hKnRoaXMuazAqTWF0aC5sb2coKDErbCkvKDEtbCkpLGI9TWF0aC5hY29zKGsqTWF0aC5jb3MoZykvTWF0aC5zcXJ0KDEtbCpsKSksMD5mJiYoYj0tYiksZD10aGlzLmEqdGhpcy5rMCooYi10aGlzLmxhdDApfWVsc2V7dmFyIG09aypnLG49TWF0aC5wb3cobSwyKSxvPXRoaXMuZXAyKk1hdGgucG93KGssMikscD1NYXRoLnRhbihmKSxxPU1hdGgucG93KHAsMik7Yj0xLXRoaXMuZXMqTWF0aC5wb3coaiwyKTt2YXIgcj10aGlzLmEvTWF0aC5zcXJ0KGIpLHM9dGhpcy5hKmgodGhpcy5lMCx0aGlzLmUxLHRoaXMuZTIsdGhpcy5lMyxmKTtjPXRoaXMuazAqciptKigxK24vNiooMS1xK28rbi8yMCooNS0xOCpxK01hdGgucG93KHEsMikrNzIqby01OCp0aGlzLmVwMikpKSt0aGlzLngwLGQ9dGhpcy5rMCoocy10aGlzLm1sMCtyKnAqKG4qKC41K24vMjQqKDUtcSs5Km8rNCpNYXRoLnBvdyhvLDIpK24vMzAqKDYxLTU4KnErTWF0aC5wb3cocSwyKSs2MDAqby0zMzAqdGhpcy5lcDIpKSkpKSt0aGlzLnkwfXJldHVybiBhLng9YyxhLnk9ZCxhfSxjLmludmVyc2U9ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZixnLGg9NjtpZih0aGlzLnNwaGVyZSl7dmFyIG49TWF0aC5leHAoYS54Lyh0aGlzLmEqdGhpcy5rMCkpLG89LjUqKG4tMS9uKSxwPXRoaXMubGF0MCthLnkvKHRoaXMuYSp0aGlzLmswKSxxPU1hdGguY29zKHApO2I9TWF0aC5zcXJ0KCgxLXEqcSkvKDErbypvKSksZj1tKGIpLDA+cCYmKGY9LWYpLGc9MD09PW8mJjA9PT1xP3RoaXMubG9uZzA6aShNYXRoLmF0YW4yKG8scSkrdGhpcy5sb25nMCl9ZWxzZXt2YXIgcj1hLngtdGhpcy54MCxzPWEueS10aGlzLnkwO2ZvcihiPSh0aGlzLm1sMCtzL3RoaXMuazApL3RoaXMuYSxjPWIsZT0wOyEwJiYoZD0oYit0aGlzLmUxKk1hdGguc2luKDIqYyktdGhpcy5lMipNYXRoLnNpbig0KmMpK3RoaXMuZTMqTWF0aC5zaW4oNipjKSkvdGhpcy5lMC1jLGMrPWQsIShNYXRoLmFicyhkKTw9aykpO2UrKylpZihlPj1oKXJldHVybiA5NTtpZihNYXRoLmFicyhjKTxqKXt2YXIgdD1NYXRoLnNpbihjKSx1PU1hdGguY29zKGMpLHY9TWF0aC50YW4oYyksdz10aGlzLmVwMipNYXRoLnBvdyh1LDIpLHg9TWF0aC5wb3codywyKSx5PU1hdGgucG93KHYsMiksej1NYXRoLnBvdyh5LDIpO2I9MS10aGlzLmVzKk1hdGgucG93KHQsMik7dmFyIEE9dGhpcy5hL01hdGguc3FydChiKSxCPUEqKDEtdGhpcy5lcykvYixDPXIvKEEqdGhpcy5rMCksRD1NYXRoLnBvdyhDLDIpO2Y9Yy1BKnYqRC9CKiguNS1ELzI0Kig1KzMqeSsxMCp3LTQqeC05KnRoaXMuZXAyLUQvMzAqKDYxKzkwKnkrMjk4KncrNDUqei0yNTIqdGhpcy5lcDItMyp4KSkpLGc9aSh0aGlzLmxvbmcwK0MqKDEtRC82KigxKzIqeSt3LUQvMjAqKDUtMip3KzI4KnktMyp4KzgqdGhpcy5lcDIrMjQqeikpKS91KX1lbHNlIGY9aipsKHMpLGc9dGhpcy5sb25nMH1yZXR1cm4gYS54PWcsYS55PWYsYX0sYy5uYW1lcz1bIlRyYW5zdmVyc2VfTWVyY2F0b3IiLCJUcmFuc3ZlcnNlIE1lcmNhdG9yIiwidG1lcmMiXX0seyIuLi9jb21tb24vYWRqdXN0X2xvbiI6NSwiLi4vY29tbW9uL2FzaW56Ijo2LCIuLi9jb21tb24vZTBmbiI6NywiLi4vY29tbW9uL2UxZm4iOjgsIi4uL2NvbW1vbi9lMmZuIjo5LCIuLi9jb21tb24vZTNmbiI6MTAsIi4uL2NvbW1vbi9tbGZuIjoxNCwiLi4vY29tbW9uL3NpZ24iOjIxfV0sNjQ6W2Z1bmN0aW9uKGEsYixjKXt2YXIgZD0uMDE3NDUzMjkyNTE5OTQzMjk1LGU9YSgiLi90bWVyYyIpO2MuZGVwZW5kc09uPSJ0bWVyYyIsYy5pbml0PWZ1bmN0aW9uKCl7dGhpcy56b25lJiYodGhpcy5sYXQwPTAsdGhpcy5sb25nMD0oNipNYXRoLmFicyh0aGlzLnpvbmUpLTE4MykqZCx0aGlzLngwPTVlNSx0aGlzLnkwPXRoaXMudXRtU291dGg/MWU3OjAsdGhpcy5rMD0uOTk5NixlLmluaXQuYXBwbHkodGhpcyksdGhpcy5mb3J3YXJkPWUuZm9yd2FyZCx0aGlzLmludmVyc2U9ZS5pbnZlcnNlKX0sYy5uYW1lcz1bIlVuaXZlcnNhbCBUcmFuc3ZlcnNlIE1lcmNhdG9yIFN5c3RlbSIsInV0bSJdfSx7Ii4vdG1lcmMiOjYzfV0sNjU6W2Z1bmN0aW9uKGEsYixjKXt2YXIgZD1hKCIuLi9jb21tb24vYWRqdXN0X2xvbiIpLGU9TWF0aC5QSS8yLGY9MWUtMTAsZz1hKCIuLi9jb21tb24vYXNpbnoiKTtjLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLlI9dGhpcy5hfSxjLmZvcndhcmQ9ZnVuY3Rpb24oYSl7dmFyIGIsYyxoPWEueCxpPWEueSxqPWQoaC10aGlzLmxvbmcwKTtNYXRoLmFicyhpKTw9ZiYmKGI9dGhpcy54MCt0aGlzLlIqaixjPXRoaXMueTApO3ZhciBrPWcoMipNYXRoLmFicyhpL01hdGguUEkpKTsoTWF0aC5hYnMoaik8PWZ8fE1hdGguYWJzKE1hdGguYWJzKGkpLWUpPD1mKSYmKGI9dGhpcy54MCxjPWk+PTA/dGhpcy55MCtNYXRoLlBJKnRoaXMuUipNYXRoLnRhbiguNSprKTp0aGlzLnkwK01hdGguUEkqdGhpcy5SKi1NYXRoLnRhbiguNSprKSk7dmFyIGw9LjUqTWF0aC5hYnMoTWF0aC5QSS9qLWovTWF0aC5QSSksbT1sKmwsbj1NYXRoLnNpbihrKSxvPU1hdGguY29zKGspLHA9by8obitvLTEpLHE9cCpwLHI9cCooMi9uLTEpLHM9cipyLHQ9TWF0aC5QSSp0aGlzLlIqKGwqKHAtcykrTWF0aC5zcXJ0KG0qKHAtcykqKHAtcyktKHMrbSkqKHEtcykpKS8ocyttKTswPmomJih0PS10KSxiPXRoaXMueDArdDt2YXIgdT1tK3A7cmV0dXJuIHQ9TWF0aC5QSSp0aGlzLlIqKHIqdS1sKk1hdGguc3FydCgocyttKSoobSsxKS11KnUpKS8ocyttKSxjPWk+PTA/dGhpcy55MCt0OnRoaXMueTAtdCxhLng9YixhLnk9YyxhfSxjLmludmVyc2U9ZnVuY3Rpb24oYSl7dmFyIGIsYyxlLGcsaCxpLGosayxsLG0sbixvLHA7cmV0dXJuIGEueC09dGhpcy54MCxhLnktPXRoaXMueTAsbj1NYXRoLlBJKnRoaXMuUixlPWEueC9uLGc9YS55L24saD1lKmUrZypnLGk9LU1hdGguYWJzKGcpKigxK2gpLApqPWktMipnKmcrZSplLGs9LTIqaSsxKzIqZypnK2gqaCxwPWcqZy9rKygyKmoqaipqL2svay9rLTkqaSpqL2svaykvMjcsbD0oaS1qKmovMy9rKS9rLG09MipNYXRoLnNxcnQoLWwvMyksbj0zKnAvbC9tLE1hdGguYWJzKG4pPjEmJihuPW4+PTA/MTotMSksbz1NYXRoLmFjb3MobikvMyxjPWEueT49MD8oLW0qTWF0aC5jb3MobytNYXRoLlBJLzMpLWovMy9rKSpNYXRoLlBJOi0oLW0qTWF0aC5jb3MobytNYXRoLlBJLzMpLWovMy9rKSpNYXRoLlBJLGI9TWF0aC5hYnMoZSk8Zj90aGlzLmxvbmcwOmQodGhpcy5sb25nMCtNYXRoLlBJKihoLTErTWF0aC5zcXJ0KDErMiooZSplLWcqZykraCpoKSkvMi9lKSxhLng9YixhLnk9YyxhfSxjLm5hbWVzPVsiVmFuX2Rlcl9HcmludGVuX0kiLCJWYW5EZXJHcmludGVuIiwidmFuZGciXX0seyIuLi9jb21tb24vYWRqdXN0X2xvbiI6NSwiLi4vY29tbW9uL2FzaW56Ijo2fV0sNjY6W2Z1bmN0aW9uKGEsYixjKXt2YXIgZD0uMDE3NDUzMjkyNTE5OTQzMjk1LGU9NTcuMjk1Nzc5NTEzMDgyMzIsZj0xLGc9MixoPWEoIi4vZGF0dW1fdHJhbnNmb3JtIiksaT1hKCIuL2FkanVzdF9heGlzIiksaj1hKCIuL1Byb2oiKSxrPWEoIi4vY29tbW9uL3RvUG9pbnQiKTtiLmV4cG9ydHM9ZnVuY3Rpb24gbChhLGIsYyl7ZnVuY3Rpb24gbShhLGIpe3JldHVybihhLmRhdHVtLmRhdHVtX3R5cGU9PT1mfHxhLmRhdHVtLmRhdHVtX3R5cGU9PT1nKSYmIldHUzg0IiE9PWIuZGF0dW1Db2RlfXZhciBuO3JldHVybiBBcnJheS5pc0FycmF5KGMpJiYoYz1rKGMpKSxhLmRhdHVtJiZiLmRhdHVtJiYobShhLGIpfHxtKGIsYSkpJiYobj1uZXcgaigiV0dTODQiKSxsKGEsbixjKSxhPW4pLCJlbnUiIT09YS5heGlzJiZpKGEsITEsYyksImxvbmdsYXQiPT09YS5wcm9qTmFtZT8oYy54Kj1kLGMueSo9ZCk6KGEudG9fbWV0ZXImJihjLngqPWEudG9fbWV0ZXIsYy55Kj1hLnRvX21ldGVyKSxhLmludmVyc2UoYykpLGEuZnJvbV9ncmVlbndpY2gmJihjLngrPWEuZnJvbV9ncmVlbndpY2gpLGM9aChhLmRhdHVtLGIuZGF0dW0sYyksYi5mcm9tX2dyZWVud2ljaCYmKGMueC09Yi5mcm9tX2dyZWVud2ljaCksImxvbmdsYXQiPT09Yi5wcm9qTmFtZT8oYy54Kj1lLGMueSo9ZSk6KGIuZm9yd2FyZChjKSxiLnRvX21ldGVyJiYoYy54Lz1iLnRvX21ldGVyLGMueS89Yi50b19tZXRlcikpLCJlbnUiIT09Yi5heGlzJiZpKGIsITAsYyksY319LHsiLi9Qcm9qIjoyLCIuL2FkanVzdF9heGlzIjozLCIuL2NvbW1vbi90b1BvaW50IjoyMywiLi9kYXR1bV90cmFuc2Zvcm0iOjMxfV0sNjc6W2Z1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEsYixjKXthW2JdPWMubWFwKGZ1bmN0aW9uKGEpe3ZhciBiPXt9O3JldHVybiBlKGEsYiksYn0pLnJlZHVjZShmdW5jdGlvbihhLGIpe3JldHVybiBqKGEsYil9LHt9KX1mdW5jdGlvbiBlKGEsYil7dmFyIGM7cmV0dXJuIEFycmF5LmlzQXJyYXkoYSk/KGM9YS5zaGlmdCgpLCJQQVJBTUVURVIiPT09YyYmKGM9YS5zaGlmdCgpKSwxPT09YS5sZW5ndGg/QXJyYXkuaXNBcnJheShhWzBdKT8oYltjXT17fSxlKGFbMF0sYltjXSkpOmJbY109YVswXTphLmxlbmd0aD8iVE9XR1M4NCI9PT1jP2JbY109YTooYltjXT17fSxbIlVOSVQiLCJQUklNRU0iLCJWRVJUX0RBVFVNIl0uaW5kZXhPZihjKT4tMT8oYltjXT17bmFtZTphWzBdLnRvTG93ZXJDYXNlKCksY29udmVydDphWzFdfSwzPT09YS5sZW5ndGgmJihiW2NdLmF1dGg9YVsyXSkpOiJTUEhFUk9JRCI9PT1jPyhiW2NdPXtuYW1lOmFbMF0sYTphWzFdLHJmOmFbMl19LDQ9PT1hLmxlbmd0aCYmKGJbY10uYXV0aD1hWzNdKSk6WyJHRU9HQ1MiLCJHRU9DQ1MiLCJEQVRVTSIsIlZFUlRfQ1MiLCJDT01QRF9DUyIsIkxPQ0FMX0NTIiwiRklUVEVEX0NTIiwiTE9DQUxfREFUVU0iXS5pbmRleE9mKGMpPi0xPyhhWzBdPVsibmFtZSIsYVswXV0sZChiLGMsYSkpOmEuZXZlcnkoZnVuY3Rpb24oYSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoYSl9KT9kKGIsYyxhKTplKGEsYltjXSkpOmJbY109ITAsdm9pZCAwKTp2b2lkKGJbYV09ITApfWZ1bmN0aW9uIGYoYSxiKXt2YXIgYz1iWzBdLGQ9YlsxXTshKGMgaW4gYSkmJmQgaW4gYSYmKGFbY109YVtkXSwzPT09Yi5sZW5ndGgmJihhW2NdPWJbMl0oYVtjXSkpKX1mdW5jdGlvbiBnKGEpe3JldHVybiBhKml9ZnVuY3Rpb24gaChhKXtmdW5jdGlvbiBiKGIpe3ZhciBjPWEudG9fbWV0ZXJ8fDE7cmV0dXJuIHBhcnNlRmxvYXQoYiwxMCkqY30iR0VPR0NTIj09PWEudHlwZT9hLnByb2pOYW1lPSJsb25nbGF0IjoiTE9DQUxfQ1MiPT09YS50eXBlPyhhLnByb2pOYW1lPSJpZGVudGl0eSIsYS5sb2NhbD0hMCk6Im9iamVjdCI9PXR5cGVvZiBhLlBST0pFQ1RJT04/YS5wcm9qTmFtZT1PYmplY3Qua2V5cyhhLlBST0pFQ1RJT04pWzBdOmEucHJvak5hbWU9YS5QUk9KRUNUSU9OLGEuVU5JVCYmKGEudW5pdHM9YS5VTklULm5hbWUudG9Mb3dlckNhc2UoKSwibWV0cmUiPT09YS51bml0cyYmKGEudW5pdHM9Im1ldGVyIiksYS5VTklULmNvbnZlcnQmJigiR0VPR0NTIj09PWEudHlwZT9hLkRBVFVNJiZhLkRBVFVNLlNQSEVST0lEJiYoYS50b19tZXRlcj1wYXJzZUZsb2F0KGEuVU5JVC5jb252ZXJ0LDEwKSphLkRBVFVNLlNQSEVST0lELmEpOmEudG9fbWV0ZXI9cGFyc2VGbG9hdChhLlVOSVQuY29udmVydCwxMCkpKSxhLkdFT0dDUyYmKGEuR0VPR0NTLkRBVFVNP2EuZGF0dW1Db2RlPWEuR0VPR0NTLkRBVFVNLm5hbWUudG9Mb3dlckNhc2UoKTphLmRhdHVtQ29kZT1hLkdFT0dDUy5uYW1lLnRvTG93ZXJDYXNlKCksImRfIj09PWEuZGF0dW1Db2RlLnNsaWNlKDAsMikmJihhLmRhdHVtQ29kZT1hLmRhdHVtQ29kZS5zbGljZSgyKSksIm5ld196ZWFsYW5kX2dlb2RldGljX2RhdHVtXzE5NDkiIT09YS5kYXR1bUNvZGUmJiJuZXdfemVhbGFuZF8xOTQ5IiE9PWEuZGF0dW1Db2RlfHwoYS5kYXR1bUNvZGU9Im56Z2Q0OSIpLCJ3Z3NfMTk4NCI9PT1hLmRhdHVtQ29kZSYmKCJNZXJjYXRvcl9BdXhpbGlhcnlfU3BoZXJlIj09PWEuUFJPSkVDVElPTiYmKGEuc3BoZXJlPSEwKSxhLmRhdHVtQ29kZT0id2dzODQiKSwiX2ZlcnJvIj09PWEuZGF0dW1Db2RlLnNsaWNlKC02KSYmKGEuZGF0dW1Db2RlPWEuZGF0dW1Db2RlLnNsaWNlKDAsLTYpKSwiX2pha2FydGEiPT09YS5kYXR1bUNvZGUuc2xpY2UoLTgpJiYoYS5kYXR1bUNvZGU9YS5kYXR1bUNvZGUuc2xpY2UoMCwtOCkpLH5hLmRhdHVtQ29kZS5pbmRleE9mKCJiZWxnZSIpJiYoYS5kYXR1bUNvZGU9InJuYjcyIiksYS5HRU9HQ1MuREFUVU0mJmEuR0VPR0NTLkRBVFVNLlNQSEVST0lEJiYoYS5lbGxwcz1hLkdFT0dDUy5EQVRVTS5TUEhFUk9JRC5uYW1lLnJlcGxhY2UoIl8xOSIsIiIpLnJlcGxhY2UoL1tDY11sYXJrZVxfMTgvLCJjbHJrIiksImludGVybmF0aW9uYWwiPT09YS5lbGxwcy50b0xvd2VyQ2FzZSgpLnNsaWNlKDAsMTMpJiYoYS5lbGxwcz0iaW50bCIpLGEuYT1hLkdFT0dDUy5EQVRVTS5TUEhFUk9JRC5hLGEucmY9cGFyc2VGbG9hdChhLkdFT0dDUy5EQVRVTS5TUEhFUk9JRC5yZiwxMCkpLH5hLmRhdHVtQ29kZS5pbmRleE9mKCJvc2diXzE5MzYiKSYmKGEuZGF0dW1Db2RlPSJvc2diMzYiKSksYS5iJiYhaXNGaW5pdGUoYS5iKSYmKGEuYj1hLmEpO3ZhciBjPWZ1bmN0aW9uKGIpe3JldHVybiBmKGEsYil9LGQ9W1sic3RhbmRhcmRfcGFyYWxsZWxfMSIsIlN0YW5kYXJkX1BhcmFsbGVsXzEiXSxbInN0YW5kYXJkX3BhcmFsbGVsXzIiLCJTdGFuZGFyZF9QYXJhbGxlbF8yIl0sWyJmYWxzZV9lYXN0aW5nIiwiRmFsc2VfRWFzdGluZyJdLFsiZmFsc2Vfbm9ydGhpbmciLCJGYWxzZV9Ob3J0aGluZyJdLFsiY2VudHJhbF9tZXJpZGlhbiIsIkNlbnRyYWxfTWVyaWRpYW4iXSxbImxhdGl0dWRlX29mX29yaWdpbiIsIkxhdGl0dWRlX09mX09yaWdpbiJdLFsibGF0aXR1ZGVfb2Zfb3JpZ2luIiwiQ2VudHJhbF9QYXJhbGxlbCJdLFsic2NhbGVfZmFjdG9yIiwiU2NhbGVfRmFjdG9yIl0sWyJrMCIsInNjYWxlX2ZhY3RvciJdLFsibGF0aXR1ZGVfb2ZfY2VudGVyIiwiTGF0aXR1ZGVfb2ZfY2VudGVyIl0sWyJsYXQwIiwibGF0aXR1ZGVfb2ZfY2VudGVyIixnXSxbImxvbmdpdHVkZV9vZl9jZW50ZXIiLCJMb25naXR1ZGVfT2ZfQ2VudGVyIl0sWyJsb25nYyIsImxvbmdpdHVkZV9vZl9jZW50ZXIiLGddLFsieDAiLCJmYWxzZV9lYXN0aW5nIixiXSxbInkwIiwiZmFsc2Vfbm9ydGhpbmciLGJdLFsibG9uZzAiLCJjZW50cmFsX21lcmlkaWFuIixnXSxbImxhdDAiLCJsYXRpdHVkZV9vZl9vcmlnaW4iLGddLFsibGF0MCIsInN0YW5kYXJkX3BhcmFsbGVsXzEiLGddLFsibGF0MSIsInN0YW5kYXJkX3BhcmFsbGVsXzEiLGddLFsibGF0MiIsInN0YW5kYXJkX3BhcmFsbGVsXzIiLGddLFsiYWxwaGEiLCJhemltdXRoIixnXSxbInNyc0NvZGUiLCJuYW1lIl1dO2QuZm9yRWFjaChjKSxhLmxvbmcwfHwhYS5sb25nY3x8IkFsYmVyc19Db25pY19FcXVhbF9BcmVhIiE9PWEucHJvak5hbWUmJiJMYW1iZXJ0X0F6aW11dGhhbF9FcXVhbF9BcmVhIiE9PWEucHJvak5hbWV8fChhLmxvbmcwPWEubG9uZ2MpLGEubGF0X3RzfHwhYS5sYXQxfHwiU3RlcmVvZ3JhcGhpY19Tb3V0aF9Qb2xlIiE9PWEucHJvak5hbWUmJiJQb2xhciBTdGVyZW9ncmFwaGljICh2YXJpYW50IEIpIiE9PWEucHJvak5hbWV8fChhLmxhdDA9ZyhhLmxhdDE+MD85MDotOTApLGEubGF0X3RzPWEubGF0MSl9dmFyIGk9LjAxNzQ1MzI5MjUxOTk0MzI5NSxqPWEoIi4vZXh0ZW5kIik7Yi5leHBvcnRzPWZ1bmN0aW9uKGEsYil7dmFyIGM9SlNPTi5wYXJzZSgoIiwiK2EpLnJlcGxhY2UoL1xzKlwsXHMqKFtBLVpfMC05XSs/KShcWykvZywnLFsiJDEiLCcpLnNsaWNlKDEpLnJlcGxhY2UoL1xzKlwsXHMqKFtBLVpfMC05XSs/KVxdL2csJywiJDEiXScpLnJlcGxhY2UoLyxcWyJWRVJUQ1MiLisvLCIiKSksZD1jLnNoaWZ0KCksZj1jLnNoaWZ0KCk7Yy51bnNoaWZ0KFsibmFtZSIsZl0pLGMudW5zaGlmdChbInR5cGUiLGRdKSxjLnVuc2hpZnQoIm91dHB1dCIpO3ZhciBnPXt9O3JldHVybiBlKGMsZyksaChnLm91dHB1dCksaihiLGcub3V0cHV0KX19LHsiLi9leHRlbmQiOjM0fV0sNjg6W2Z1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe3JldHVybiBhKihNYXRoLlBJLzE4MCl9ZnVuY3Rpb24gZShhKXtyZXR1cm4gMTgwKihhL01hdGguUEkpfWZ1bmN0aW9uIGYoYSl7dmFyIGIsYyxlLGYsZyxpLGosayxsLG09YS5sYXQsbj1hLmxvbixvPTYzNzgxMzcscD0uMDA2Njk0MzgscT0uOTk5NixyPWQobSkscz1kKG4pO2w9TWF0aC5mbG9vcigobisxODApLzYpKzEsMTgwPT09biYmKGw9NjApLG0+PTU2JiY2ND5tJiZuPj0zJiYxMj5uJiYobD0zMiksbT49NzImJjg0Pm0mJihuPj0wJiY5Pm4/bD0zMTpuPj05JiYyMT5uP2w9MzM6bj49MjEmJjMzPm4/bD0zNTpuPj0zMyYmNDI+biYmKGw9MzcpKSxiPTYqKGwtMSktMTgwKzMsaz1kKGIpLGM9cC8oMS1wKSxlPW8vTWF0aC5zcXJ0KDEtcCpNYXRoLnNpbihyKSpNYXRoLnNpbihyKSksZj1NYXRoLnRhbihyKSpNYXRoLnRhbihyKSxnPWMqTWF0aC5jb3MocikqTWF0aC5jb3MociksaT1NYXRoLmNvcyhyKSoocy1rKSxqPW8qKCgxLXAvNC0zKnAqcC82NC01KnAqcCpwLzI1Nikqci0oMypwLzgrMypwKnAvMzIrNDUqcCpwKnAvMTAyNCkqTWF0aC5zaW4oMipyKSsoMTUqcCpwLzI1Nis0NSpwKnAqcC8xMDI0KSpNYXRoLnNpbig0KnIpLTM1KnAqcCpwLzMwNzIqTWF0aC5zaW4oNipyKSk7dmFyIHQ9cSplKihpKygxLWYrZykqaSppKmkvNisoNS0xOCpmK2YqZis3MipnLTU4KmMpKmkqaSppKmkqaS8xMjApKzVlNSx1PXEqKGorZSpNYXRoLnRhbihyKSooaSppLzIrKDUtZis5KmcrNCpnKmcpKmkqaSppKmkvMjQrKDYxLTU4KmYrZipmKzYwMCpnLTMzMCpjKSppKmkqaSppKmkqaS83MjApKTtyZXR1cm4gMD5tJiYodSs9MWU3KSx7bm9ydGhpbmc6TWF0aC5yb3VuZCh1KSxlYXN0aW5nOk1hdGgucm91bmQodCksem9uZU51bWJlcjpsLHpvbmVMZXR0ZXI6aChtKX19ZnVuY3Rpb24gZyhhKXt2YXIgYj1hLm5vcnRoaW5nLGM9YS5lYXN0aW5nLGQ9YS56b25lTGV0dGVyLGY9YS56b25lTnVtYmVyO2lmKDA+Znx8Zj42MClyZXR1cm4gbnVsbDt2YXIgaCxpLGosayxsLG0sbixvLHAscSxyPS45OTk2LHM9NjM3ODEzNyx0PS4wMDY2OTQzOCx1PSgxLU1hdGguc3FydCgxLXQpKS8oMStNYXRoLnNxcnQoMS10KSksdj1jLTVlNSx3PWI7Ik4iPmQmJih3LT0xZTcpLG89NiooZi0xKS0xODArMyxoPXQvKDEtdCksbj13L3IscD1uLyhzKigxLXQvNC0zKnQqdC82NC01KnQqdCp0LzI1NikpLHE9cCsoMyp1LzItMjcqdSp1KnUvMzIpKk1hdGguc2luKDIqcCkrKDIxKnUqdS8xNi01NSp1KnUqdSp1LzMyKSpNYXRoLnNpbig0KnApKzE1MSp1KnUqdS85NipNYXRoLnNpbig2KnApLGk9cy9NYXRoLnNxcnQoMS10Kk1hdGguc2luKHEpKk1hdGguc2luKHEpKSxqPU1hdGgudGFuKHEpKk1hdGgudGFuKHEpLGs9aCpNYXRoLmNvcyhxKSpNYXRoLmNvcyhxKSxsPXMqKDEtdCkvTWF0aC5wb3coMS10Kk1hdGguc2luKHEpKk1hdGguc2luKHEpLDEuNSksbT12LyhpKnIpO3ZhciB4PXEtaSpNYXRoLnRhbihxKS9sKihtKm0vMi0oNSszKmorMTAqay00Kmsqay05KmgpKm0qbSptKm0vMjQrKDYxKzkwKmorMjk4KmsrNDUqaipqLTI1MipoLTMqayprKSptKm0qbSptKm0qbS83MjApO3g9ZSh4KTt2YXIgeT0obS0oMSsyKmoraykqbSptKm0vNisoNS0yKmsrMjgqai0zKmsqays4KmgrMjQqaipqKSptKm0qbSptKm0vMTIwKS9NYXRoLmNvcyhxKTt5PW8rZSh5KTt2YXIgejtpZihhLmFjY3VyYWN5KXt2YXIgQT1nKHtub3J0aGluZzphLm5vcnRoaW5nK2EuYWNjdXJhY3ksZWFzdGluZzphLmVhc3RpbmcrYS5hY2N1cmFjeSx6b25lTGV0dGVyOmEuem9uZUxldHRlcix6b25lTnVtYmVyOmEuem9uZU51bWJlcn0pO3o9e3RvcDpBLmxhdCxyaWdodDpBLmxvbixib3R0b206eCxsZWZ0Onl9fWVsc2Ugej17bGF0OngsbG9uOnl9O3JldHVybiB6fWZ1bmN0aW9uIGgoYSl7dmFyIGI9IloiO3JldHVybiA4ND49YSYmYT49NzI/Yj0iWCI6NzI+YSYmYT49NjQ/Yj0iVyI6NjQ+YSYmYT49NTY/Yj0iViI6NTY+YSYmYT49NDg/Yj0iVSI6NDg+YSYmYT49NDA/Yj0iVCI6NDA+YSYmYT49MzI/Yj0iUyI6MzI+YSYmYT49MjQ/Yj0iUiI6MjQ+YSYmYT49MTY/Yj0iUSI6MTY+YSYmYT49OD9iPSJQIjo4PmEmJmE+PTA/Yj0iTiI6MD5hJiZhPj0tOD9iPSJNIjotOD5hJiZhPj0tMTY/Yj0iTCI6LTE2PmEmJmE+PS0yND9iPSJLIjotMjQ+YSYmYT49LTMyP2I9IkoiOi0zMj5hJiZhPj0tNDA/Yj0iSCI6LTQwPmEmJmE+PS00OD9iPSJHIjotNDg+YSYmYT49LTU2P2I9IkYiOi01Nj5hJiZhPj0tNjQ/Yj0iRSI6LTY0PmEmJmE+PS03Mj9iPSJEIjotNzI+YSYmYT49LTgwJiYoYj0iQyIpLGJ9ZnVuY3Rpb24gaShhLGIpe3ZhciBjPSIwMDAwMCIrYS5lYXN0aW5nLGQ9IjAwMDAwIithLm5vcnRoaW5nO3JldHVybiBhLnpvbmVOdW1iZXIrYS56b25lTGV0dGVyK2ooYS5lYXN0aW5nLGEubm9ydGhpbmcsYS56b25lTnVtYmVyKStjLnN1YnN0cihjLmxlbmd0aC01LGIpK2Quc3Vic3RyKGQubGVuZ3RoLTUsYil9ZnVuY3Rpb24gaihhLGIsYyl7dmFyIGQ9ayhjKSxlPU1hdGguZmxvb3IoYS8xZTUpLGY9TWF0aC5mbG9vcihiLzFlNSklMjA7cmV0dXJuIGwoZSxmLGQpfWZ1bmN0aW9uIGsoYSl7dmFyIGI9YSVxO3JldHVybiAwPT09YiYmKGI9cSksYn1mdW5jdGlvbiBsKGEsYixjKXt2YXIgZD1jLTEsZT1yLmNoYXJDb2RlQXQoZCksZj1zLmNoYXJDb2RlQXQoZCksZz1lK2EtMSxoPWYrYixpPSExO2c+eCYmKGc9Zy14K3QtMSxpPSEwKSwoZz09PXV8fHU+ZSYmZz51fHwoZz51fHx1PmUpJiZpKSYmZysrLChnPT09dnx8dj5lJiZnPnZ8fChnPnZ8fHY+ZSkmJmkpJiYoZysrLGc9PT11JiZnKyspLGc+eCYmKGc9Zy14K3QtMSksaD53PyhoPWgtdyt0LTEsaT0hMCk6aT0hMSwoaD09PXV8fHU+ZiYmaD51fHwoaD51fHx1PmYpJiZpKSYmaCsrLChoPT09dnx8dj5mJiZoPnZ8fChoPnZ8fHY+ZikmJmkpJiYoaCsrLGg9PT11JiZoKyspLGg+dyYmKGg9aC13K3QtMSk7dmFyIGo9U3RyaW5nLmZyb21DaGFyQ29kZShnKStTdHJpbmcuZnJvbUNoYXJDb2RlKGgpO3JldHVybiBqfWZ1bmN0aW9uIG0oYSl7aWYoYSYmMD09PWEubGVuZ3RoKXRocm93Ik1HUlNQb2ludCBjb3ZlcnRpbmcgZnJvbSBub3RoaW5nIjtmb3IodmFyIGIsYz1hLmxlbmd0aCxkPW51bGwsZT0iIixmPTA7IS9bQS1aXS8udGVzdChiPWEuY2hhckF0KGYpKTspe2lmKGY+PTIpdGhyb3ciTUdSU1BvaW50IGJhZCBjb252ZXJzaW9uIGZyb206ICIrYTtlKz1iLGYrK312YXIgZz1wYXJzZUludChlLDEwKTtpZigwPT09Znx8ZiszPmMpdGhyb3ciTUdSU1BvaW50IGJhZCBjb252ZXJzaW9uIGZyb206ICIrYTt2YXIgaD1hLmNoYXJBdChmKyspO2lmKCJBIj49aHx8IkIiPT09aHx8IlkiPT09aHx8aD49IloifHwiSSI9PT1ofHwiTyI9PT1oKXRocm93Ik1HUlNQb2ludCB6b25lIGxldHRlciAiK2grIiBub3QgaGFuZGxlZDogIithO2Q9YS5zdWJzdHJpbmcoZixmKz0yKTtmb3IodmFyIGk9ayhnKSxqPW4oZC5jaGFyQXQoMCksaSksbD1vKGQuY2hhckF0KDEpLGkpO2w8cChoKTspbCs9MmU2O3ZhciBtPWMtZjtpZihtJTIhPT0wKXRocm93Ik1HUlNQb2ludCBoYXMgdG8gaGF2ZSBhbiBldmVuIG51bWJlciBcbm9mIGRpZ2l0cyBhZnRlciB0aGUgem9uZSBsZXR0ZXIgYW5kIHR3byAxMDBrbSBsZXR0ZXJzIC0gZnJvbnQgXG5oYWxmIGZvciBlYXN0aW5nIG1ldGVycywgc2Vjb25kIGhhbGYgZm9yIFxubm9ydGhpbmcgbWV0ZXJzIithO3ZhciBxLHIscyx0LHUsdj1tLzIsdz0wLHg9MDtyZXR1cm4gdj4wJiYocT0xZTUvTWF0aC5wb3coMTAsdikscj1hLnN1YnN0cmluZyhmLGYrdiksdz1wYXJzZUZsb2F0KHIpKnEscz1hLnN1YnN0cmluZyhmK3YpLHg9cGFyc2VGbG9hdChzKSpxKSx0PXcraix1PXgrbCx7ZWFzdGluZzp0LG5vcnRoaW5nOnUsem9uZUxldHRlcjpoLHpvbmVOdW1iZXI6ZyxhY2N1cmFjeTpxfX1mdW5jdGlvbiBuKGEsYil7Zm9yKHZhciBjPXIuY2hhckNvZGVBdChiLTEpLGQ9MWU1LGU9ITE7YyE9PWEuY2hhckNvZGVBdCgwKTspe2lmKGMrKyxjPT09dSYmYysrLGM9PT12JiZjKyssYz54KXtpZihlKXRocm93IkJhZCBjaGFyYWN0ZXI6ICIrYTtjPXQsZT0hMH1kKz0xZTV9cmV0dXJuIGR9ZnVuY3Rpb24gbyhhLGIpe2lmKGE+IlYiKXRocm93Ik1HUlNQb2ludCBnaXZlbiBpbnZhbGlkIE5vcnRoaW5nICIrYTtmb3IodmFyIGM9cy5jaGFyQ29kZUF0KGItMSksZD0wLGU9ITE7YyE9PWEuY2hhckNvZGVBdCgwKTspe2lmKGMrKyxjPT09dSYmYysrLGM9PT12JiZjKyssYz53KXtpZihlKXRocm93IkJhZCBjaGFyYWN0ZXI6ICIrYTtjPXQsZT0hMH1kKz0xZTV9cmV0dXJuIGR9ZnVuY3Rpb24gcChhKXt2YXIgYjtzd2l0Y2goYSl7Y2FzZSJDIjpiPTExZTU7YnJlYWs7Y2FzZSJEIjpiPTJlNjticmVhaztjYXNlIkUiOmI9MjhlNTticmVhaztjYXNlIkYiOmI9MzdlNTticmVhaztjYXNlIkciOmI9NDZlNTticmVhaztjYXNlIkgiOmI9NTVlNTticmVhaztjYXNlIkoiOmI9NjRlNTticmVhaztjYXNlIksiOmI9NzNlNTticmVhaztjYXNlIkwiOmI9ODJlNTticmVhaztjYXNlIk0iOmI9OTFlNTticmVhaztjYXNlIk4iOmI9MDticmVhaztjYXNlIlAiOmI9OGU1O2JyZWFrO2Nhc2UiUSI6Yj0xN2U1O2JyZWFrO2Nhc2UiUiI6Yj0yNmU1O2JyZWFrO2Nhc2UiUyI6Yj0zNWU1O2JyZWFrO2Nhc2UiVCI6Yj00NGU1O2JyZWFrO2Nhc2UiVSI6Yj01M2U1O2JyZWFrO2Nhc2UiViI6Yj02MmU1O2JyZWFrO2Nhc2UiVyI6Yj03ZTY7YnJlYWs7Y2FzZSJYIjpiPTc5ZTU7YnJlYWs7ZGVmYXVsdDpiPS0xfWlmKGI+PTApcmV0dXJuIGI7dGhyb3ciSW52YWxpZCB6b25lIGxldHRlcjogIithfXZhciBxPTYscj0iQUpTQUpTIixzPSJBRkFGQUYiLHQ9NjUsdT03Myx2PTc5LHc9ODYseD05MDtjLmZvcndhcmQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYj1ifHw1LGkoZih7bGF0OmFbMV0sbG9uOmFbMF19KSxiKX0sYy5pbnZlcnNlPWZ1bmN0aW9uKGEpe3ZhciBiPWcobShhLnRvVXBwZXJDYXNlKCkpKTtyZXR1cm4gYi5sYXQmJmIubG9uP1tiLmxvbixiLmxhdCxiLmxvbixiLmxhdF06W2IubGVmdCxiLmJvdHRvbSxiLnJpZ2h0LGIudG9wXX0sYy50b1BvaW50PWZ1bmN0aW9uKGEpe3ZhciBiPWcobShhLnRvVXBwZXJDYXNlKCkpKTtyZXR1cm4gYi5sYXQmJmIubG9uP1tiLmxvbixiLmxhdF06WyhiLmxlZnQrYi5yaWdodCkvMiwoYi50b3ArYi5ib3R0b20pLzJdfX0se31dLDY5OltmdW5jdGlvbihhLGIsYyl7Yi5leHBvcnRzPXtuYW1lOiJwcm9qNCIsdmVyc2lvbjoiMi4zLjE1IixkZXNjcmlwdGlvbjoiUHJvajRqcyBpcyBhIEphdmFTY3JpcHQgbGlicmFyeSB0byB0cmFuc2Zvcm0gcG9pbnQgY29vcmRpbmF0ZXMgZnJvbSBvbmUgY29vcmRpbmF0ZSBzeXN0ZW0gdG8gYW5vdGhlciwgaW5jbHVkaW5nIGRhdHVtIHRyYW5zZm9ybWF0aW9ucy4iLG1haW46ImxpYi9pbmRleC5qcyIsZGlyZWN0b3JpZXM6e3Rlc3Q6InRlc3QiLGRvYzoiZG9jcyJ9LHNjcmlwdHM6e3Rlc3Q6Ii4vbm9kZV9tb2R1bGVzL2lzdGFuYnVsL2xpYi9jbGkuanMgdGVzdCAuL25vZGVfbW9kdWxlcy9tb2NoYS9iaW4vX21vY2hhIHRlc3QvdGVzdC5qcyJ9LHJlcG9zaXRvcnk6e3R5cGU6ImdpdCIsdXJsOiJnaXQ6Ly9naXRodWIuY29tL3Byb2o0anMvcHJvajRqcy5naXQifSxhdXRob3I6IiIsbGljZW5zZToiTUlUIixqYW06e21haW46ImRpc3QvcHJvajQuanMiLGluY2x1ZGU6WyJkaXN0L3Byb2o0LmpzIiwiUkVBRE1FLm1kIiwiQVVUSE9SUyIsIkxJQ0VOU0UubWQiXX0sZGV2RGVwZW5kZW5jaWVzOnsiZ3J1bnQtY2xpIjoifjAuMS4xMyIsZ3J1bnQ6In4wLjQuMiIsImdydW50LWNvbnRyaWItY29ubmVjdCI6In4wLjYuMCIsImdydW50LWNvbnRyaWItanNoaW50IjoifjAuOC4wIixjaGFpOiJ+MS44LjEiLG1vY2hhOiJ+MS4xNy4xIiwiZ3J1bnQtbW9jaGEtcGhhbnRvbWpzIjoifjAuNC4wIixicm93c2VyaWZ5OiJ+MTIuMC4xIiwiZ3J1bnQtYnJvd3NlcmlmeSI6In40LjAuMSIsImdydW50LWNvbnRyaWItdWdsaWZ5IjoifjAuMTEuMSIsY3VybDoiZ2l0Oi8vZ2l0aHViLmNvbS9jdWpvanMvY3VybC5naXQiLGlzdGFuYnVsOiJ+MC4yLjQiLHRpbjoifjAuNC4wIn0sZGVwZW5kZW5jaWVzOnttZ3JzOiJ+MC4wLjIifX19LHt9XX0se30sWzM2XSkoMzYpfSk7"></script> <script src="data:application/x-javascript;base64,KGZ1bmN0aW9uIChmYWN0b3J5KSB7DQoJdmFyIEwsIHByb2o0Ow0KCWlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHsNCgkJLy8gQU1EDQoJCWRlZmluZShbJ2xlYWZsZXQnLCAncHJvajQnXSwgZmFjdG9yeSk7DQoJfSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlLmV4cG9ydHMgPT09ICJvYmplY3QiKSB7DQoJCS8vIE5vZGUvQ29tbW9uSlMNCgkJTCA9IHJlcXVpcmUoJ2xlYWZsZXQnKTsNCgkJcHJvajQgPSByZXF1aXJlKCdwcm9qNCcpOw0KCQltb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoTCwgcHJvajQpOw0KCX0gZWxzZSB7DQoJCS8vIEJyb3dzZXIgZ2xvYmFscw0KCQlpZiAodHlwZW9mIHdpbmRvdy5MID09PSAndW5kZWZpbmVkJyB8fCB0eXBlb2Ygd2luZG93LnByb2o0ID09PSAndW5kZWZpbmVkJykNCgkJCXRocm93ICdMZWFmbGV0IGFuZCBwcm9qNCBtdXN0IGJlIGxvYWRlZCBmaXJzdCc7DQoJCWZhY3Rvcnkod2luZG93LkwsIHdpbmRvdy5wcm9qNCk7DQoJfQ0KfShmdW5jdGlvbiAoTCwgcHJvajQpIHsNCg0KCUwuUHJvaiA9IHt9Ow0KDQoJTC5Qcm9qLl9pc1Byb2o0T2JqID0gZnVuY3Rpb24oYSkgew0KCQlyZXR1cm4gKHR5cGVvZiBhLmludmVyc2UgIT09ICd1bmRlZmluZWQnICYmDQoJCQl0eXBlb2YgYS5mb3J3YXJkICE9PSAndW5kZWZpbmVkJyk7DQoJfTsNCg0KCUwuUHJvai5TY2FsZURlcGVuZGFudFRyYW5zZm9ybWF0aW9uID0gZnVuY3Rpb24oc2NhbGVUcmFuc2Zvcm1zKSB7DQoJCXRoaXMuc2NhbGVUcmFuc2Zvcm1zID0gc2NhbGVUcmFuc2Zvcm1zOw0KCX07DQoNCglMLlByb2ouU2NhbGVEZXBlbmRhbnRUcmFuc2Zvcm1hdGlvbi5wcm90b3R5cGUudHJhbnNmb3JtID0gZnVuY3Rpb24ocG9pbnQsIHNjYWxlKSB7DQoJCXJldHVybiB0aGlzLnNjYWxlVHJhbnNmb3Jtc1tzY2FsZV0udHJhbnNmb3JtKHBvaW50LCBzY2FsZSk7DQoJfTsNCg0KCUwuUHJvai5TY2FsZURlcGVuZGFudFRyYW5zZm9ybWF0aW9uLnByb3RvdHlwZS51bnRyYW5zZm9ybSA9IGZ1bmN0aW9uKHBvaW50LCBzY2FsZSkgew0KCQlyZXR1cm4gdGhpcy5zY2FsZVRyYW5zZm9ybXNbc2NhbGVdLnVudHJhbnNmb3JtKHBvaW50LCBzY2FsZSk7DQoJfTsNCg0KCUwuUHJvai5Qcm9qZWN0aW9uID0gTC5DbGFzcy5leHRlbmQoew0KCQlpbml0aWFsaXplOiBmdW5jdGlvbihhLCBkZWYpIHsNCgkJCWlmIChMLlByb2ouX2lzUHJvajRPYmooYSkpIHsNCgkJCQl0aGlzLl9wcm9qID0gYTsNCgkJCX0gZWxzZSB7DQoJCQkJdmFyIGNvZGUgPSBhOw0KCQkJCWlmIChkZWYpIHsNCgkJCQkJcHJvajQuZGVmcyhjb2RlLCBkZWYpOw0KCQkJCX0gZWxzZSBpZiAocHJvajQuZGVmc1tjb2RlXSA9PT0gdW5kZWZpbmVkKSB7DQoJCQkJCXZhciB1cm4gPSBjb2RlLnNwbGl0KCc6Jyk7DQoJCQkJCWlmICh1cm4ubGVuZ3RoID4gMykgew0KCQkJCQkJY29kZSA9IHVyblt1cm4ubGVuZ3RoIC0gM10gKyAnOicgKyB1cm5bdXJuLmxlbmd0aCAtIDFdOw0KCQkJCQl9DQoJCQkJCWlmIChwcm9qNC5kZWZzW2NvZGVdID09PSB1bmRlZmluZWQpIHsNCgkJCQkJCXRocm93ICdObyBwcm9qZWN0aW9uIGRlZmluaXRpb24gZm9yIGNvZGUgJyArIGNvZGU7DQoJCQkJCX0NCgkJCQl9DQoJCQkJdGhpcy5fcHJvaiA9IHByb2o0KGNvZGUpOw0KCQkJfQ0KCQl9LA0KDQoJCXByb2plY3Q6IGZ1bmN0aW9uIChsYXRsbmcpIHsNCgkJCXZhciBwb2ludCA9IHRoaXMuX3Byb2ouZm9yd2FyZChbbGF0bG5nLmxuZywgbGF0bG5nLmxhdF0pOw0KCQkJcmV0dXJuIG5ldyBMLlBvaW50KHBvaW50WzBdLCBwb2ludFsxXSk7DQoJCX0sDQoNCgkJdW5wcm9qZWN0OiBmdW5jdGlvbiAocG9pbnQsIHVuYm91bmRlZCkgew0KCQkJdmFyIHBvaW50MiA9IHRoaXMuX3Byb2ouaW52ZXJzZShbcG9pbnQueCwgcG9pbnQueV0pOw0KCQkJcmV0dXJuIG5ldyBMLkxhdExuZyhwb2ludDJbMV0sIHBvaW50MlswXSwgdW5ib3VuZGVkKTsNCgkJfQ0KCX0pOw0KDQoJTC5Qcm9qLkNSUyA9IEwuQ2xhc3MuZXh0ZW5kKHsNCgkJaW5jbHVkZXM6IEwuQ1JTLA0KDQoJCW9wdGlvbnM6IHsNCgkJCXRyYW5zZm9ybWF0aW9uOiBuZXcgTC5UcmFuc2Zvcm1hdGlvbigxLCAwLCAtMSwgMCkNCgkJfSwNCg0KCQlpbml0aWFsaXplOiBmdW5jdGlvbihhLCBiLCBjKSB7DQoJCQl2YXIgY29kZSwgcHJvaiwgZGVmLCBvcHRpb25zOw0KDQoJCQlpZiAoTC5Qcm9qLl9pc1Byb2o0T2JqKGEpKSB7DQoJCQkJcHJvaiA9IGE7DQoJCQkJY29kZSA9IHByb2ouc3JzQ29kZTsNCgkJCQlvcHRpb25zID0gYiB8fCB7fTsNCg0KCQkJCXRoaXMucHJvamVjdGlvbiA9IG5ldyBMLlByb2ouUHJvamVjdGlvbihwcm9qKTsNCgkJCX0gZWxzZSB7DQoJCQkJY29kZSA9IGE7DQoJCQkJZGVmID0gYjsNCgkJCQlvcHRpb25zID0gYyB8fCB7fTsNCgkJCQl0aGlzLnByb2plY3Rpb24gPSBuZXcgTC5Qcm9qLlByb2plY3Rpb24oY29kZSwgZGVmKTsNCgkJCX0NCg0KCQkJTC5VdGlsLnNldE9wdGlvbnModGhpcywgb3B0aW9ucyk7DQoJCQl0aGlzLmNvZGUgPSBjb2RlOw0KCQkJdGhpcy50cmFuc2Zvcm1hdGlvbiA9IHRoaXMub3B0aW9ucy50cmFuc2Zvcm1hdGlvbjsNCg0KCQkJaWYgKHRoaXMub3B0aW9ucy5vcmlnaW4pIHsNCgkJCQl0aGlzLnRyYW5zZm9ybWF0aW9uID0NCgkJCQkJbmV3IEwuVHJhbnNmb3JtYXRpb24oMSwgLXRoaXMub3B0aW9ucy5vcmlnaW5bMF0sDQoJCQkJCQktMSwgdGhpcy5vcHRpb25zLm9yaWdpblsxXSk7DQoJCQl9DQoNCgkJCWlmICh0aGlzLm9wdGlvbnMuc2NhbGVzKSB7DQoJCQkJdGhpcy5fc2NhbGVzID0gdGhpcy5vcHRpb25zLnNjYWxlczsNCgkJCX0gZWxzZSBpZiAodGhpcy5vcHRpb25zLnJlc29sdXRpb25zKSB7DQoJCQkJdGhpcy5fc2NhbGVzID0gW107DQoJCQkJZm9yICh2YXIgaSA9IHRoaXMub3B0aW9ucy5yZXNvbHV0aW9ucy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgew0KCQkJCQlpZiAodGhpcy5vcHRpb25zLnJlc29sdXRpb25zW2ldKSB7DQoJCQkJCQl0aGlzLl9zY2FsZXNbaV0gPSAxIC8gdGhpcy5vcHRpb25zLnJlc29sdXRpb25zW2ldOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9LA0KDQoJCXNjYWxlOiBmdW5jdGlvbih6b29tKSB7DQoJCQl2YXIgaVpvb20gPSBNYXRoLmZsb29yKHpvb20pLA0KCQkJCWJhc2VTY2FsZSwNCgkJCQluZXh0U2NhbGUsDQoJCQkJc2NhbGVEaWZmLA0KCQkJCXpEaWZmOw0KCQkJaWYgKHpvb20gPT09IGlab29tKSB7DQoJCQkJcmV0dXJuIHRoaXMuX3NjYWxlc1t6b29tXTsNCgkJCX0gZWxzZSB7DQoJCQkJLy8gTm9uLWludGVnZXIgem9vbSwgaW50ZXJwb2xhdGUNCgkJCQliYXNlU2NhbGUgPSB0aGlzLl9zY2FsZXNbaVpvb21dOw0KCQkJCW5leHRTY2FsZSA9IHRoaXMuX3NjYWxlc1tpWm9vbSArIDFdOw0KCQkJCXNjYWxlRGlmZiA9IG5leHRTY2FsZSAtIGJhc2VTY2FsZTsNCgkJCQl6RGlmZiA9ICh6b29tIC0gaVpvb20pOw0KCQkJCXJldHVybiBiYXNlU2NhbGUgKyBzY2FsZURpZmYgKiB6RGlmZjsNCgkJCX0NCgkJfSwNCg0KCQlnZXRTaXplOiBmdW5jdGlvbih6b29tKSB7DQoJCQl2YXIgYiA9IHRoaXMub3B0aW9ucy5ib3VuZHMsDQoJCQkgICAgcywNCgkJCSAgICBtaW4sDQoJCQkgICAgbWF4Ow0KDQoJCQlpZiAoYikgew0KCQkJCXMgPSB0aGlzLnNjYWxlKHpvb20pOw0KCQkJCW1pbiA9IHRoaXMudHJhbnNmb3JtYXRpb24udHJhbnNmb3JtKGIubWluLCBzKTsNCgkJCQltYXggPSB0aGlzLnRyYW5zZm9ybWF0aW9uLnRyYW5zZm9ybShiLm1heCwgcyk7DQoJCQkJcmV0dXJuIEwucG9pbnQoTWF0aC5hYnMobWF4LnggLSBtaW4ueCksIE1hdGguYWJzKG1heC55IC0gbWluLnkpKTsNCgkJCX0gZWxzZSB7DQoJCQkJLy8gQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBMZWFmbGV0IDwgMC43DQoJCQkJcyA9IDI1NiAqIE1hdGgucG93KDIsIHpvb20pOw0KCQkJCXJldHVybiBMLnBvaW50KHMsIHMpOw0KCQkJfQ0KCQl9DQoJfSk7DQoNCglMLlByb2ouQ1JTLlRNUyA9IEwuUHJvai5DUlMuZXh0ZW5kKHsNCgkJb3B0aW9uczogew0KCQkJdGlsZVNpemU6IDI1Ng0KCQl9LA0KDQoJCWluaXRpYWxpemU6IGZ1bmN0aW9uKGEsIGIsIGMsIGQpIHsNCgkJCXZhciBjb2RlLA0KCQkJCWRlZiwNCgkJCQlwcm9qLA0KCQkJCXByb2plY3RlZEJvdW5kcywNCgkJCQlvcHRpb25zOw0KDQoJCQlpZiAoTC5Qcm9qLl9pc1Byb2o0T2JqKGEpKSB7DQoJCQkJcHJvaiA9IGE7DQoJCQkJcHJvamVjdGVkQm91bmRzID0gYjsNCgkJCQlvcHRpb25zID0gYyB8fCB7fTsNCgkJCQlvcHRpb25zLm9yaWdpbiA9IFtwcm9qZWN0ZWRCb3VuZHNbMF0sIHByb2plY3RlZEJvdW5kc1szXV07DQoJCQkJTC5Qcm9qLkNSUy5wcm90b3R5cGUuaW5pdGlhbGl6ZS5jYWxsKHRoaXMsIHByb2osIG9wdGlvbnMpOw0KCQkJfSBlbHNlIHsNCgkJCQljb2RlID0gYTsNCgkJCQlkZWYgPSBiOw0KCQkJCXByb2plY3RlZEJvdW5kcyA9IGM7DQoJCQkJb3B0aW9ucyA9IGQgfHwge307DQoJCQkJb3B0aW9ucy5vcmlnaW4gPSBbcHJvamVjdGVkQm91bmRzWzBdLCBwcm9qZWN0ZWRCb3VuZHNbM11dOw0KCQkJCUwuUHJvai5DUlMucHJvdG90eXBlLmluaXRpYWxpemUuY2FsbCh0aGlzLCBjb2RlLCBkZWYsIG9wdGlvbnMpOw0KCQkJfQ0KDQoJCQl0aGlzLnByb2plY3RlZEJvdW5kcyA9IHByb2plY3RlZEJvdW5kczsNCg0KCQkJdGhpcy5fc2l6ZXMgPSB0aGlzLl9jYWxjdWxhdGVTaXplcygpOw0KCQl9LA0KDQoJCV9jYWxjdWxhdGVTaXplczogZnVuY3Rpb24oKSB7DQoJCQl2YXIgc2l6ZXMgPSBbXSwNCgkJCSAgICBjcnNCb3VuZHMgPSB0aGlzLnByb2plY3RlZEJvdW5kcywNCgkJCSAgICBwcm9qZWN0ZWRUaWxlU2l6ZSwNCgkJCSAgICBpLA0KCQkJICAgIHgsDQoJCQkgICAgeTsNCgkJCWZvciAoaSA9IHRoaXMuX3NjYWxlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgew0KCQkJCWlmICh0aGlzLl9zY2FsZXNbaV0pIHsNCgkJCQkJcHJvamVjdGVkVGlsZVNpemUgPSB0aGlzLm9wdGlvbnMudGlsZVNpemUgLyB0aGlzLl9zY2FsZXNbaV07DQoJCQkJCS8vIHRvIHByZXZlbnQgdmVyeSBzbWFsbCByb3VuZGluZyBlcnJvcnMgZnJvbSBjYXVzaW5nIHVzIHRvIHJvdW5kIHVwLA0KCQkJCQkvLyBjdXQgYW55IGRlY2ltYWxzIGFmdGVyIDNyZCBiZWZvcmUgcm91bmRpbmcgdXAuDQoJCQkJCXggPSBNYXRoLmNlaWwocGFyc2VGbG9hdCgoY3JzQm91bmRzWzJdIC0gY3JzQm91bmRzWzBdKSAvIHByb2plY3RlZFRpbGVTaXplKS50b1ByZWNpc2lvbigzKSkgKg0KCQkJCQkgICAgcHJvamVjdGVkVGlsZVNpemUgKiB0aGlzLl9zY2FsZXNbaV07DQoJCQkJCXkgPSBNYXRoLmNlaWwocGFyc2VGbG9hdCgoY3JzQm91bmRzWzNdIC0gY3JzQm91bmRzWzFdKSAvIHByb2plY3RlZFRpbGVTaXplKS50b1ByZWNpc2lvbigzKSkgKg0KCQkJCQkgICAgcHJvamVjdGVkVGlsZVNpemUgKiB0aGlzLl9zY2FsZXNbaV07DQoJCQkJCXNpemVzW2ldID0gTC5wb2ludCh4LCB5KTsNCgkJCQl9DQoJCQl9DQoNCgkJCXJldHVybiBzaXplczsNCgkJfSwNCg0KCQlnZXRTaXplOiBmdW5jdGlvbih6b29tKSB7DQoJCQlyZXR1cm4gdGhpcy5fc2l6ZXNbem9vbV07DQoJCX0NCgl9KTsNCg0KCUwuUHJvai5UaWxlTGF5ZXIgPSB7fTsNCg0KCS8vIE5vdGU6IGRlcHJlY2F0ZWQgYW5kIG5vdCBuZWNlc3Nhcnkgc2luY2UgMC43LCB3aWxsIGJlIHJlbW92ZWQNCglMLlByb2ouVGlsZUxheWVyLlRNUyA9IEwuVGlsZUxheWVyLmV4dGVuZCh7DQoJCW9wdGlvbnM6IHsNCgkJCWNvbnRpbnVvdXNXb3JsZDogdHJ1ZQ0KCQl9LA0KDQoJCWluaXRpYWxpemU6IGZ1bmN0aW9uKHVybFRlbXBsYXRlLCBjcnMsIG9wdGlvbnMpIHsNCgkJCXZhciBib3VuZHNNYXRjaGVzR3JpZCA9IHRydWUsDQoJCQkJc2NhbGVUcmFuc2Zvcm1zLA0KCQkJCXVwcGVyWSwNCgkJCQljcnNCb3VuZHMsDQoJCQkJaTsNCg0KCQkJaWYgKCEoY3JzIGluc3RhbmNlb2YgTC5Qcm9qLkNSUy5UTVMpKSB7DQoJCQkJdGhyb3cgJ0NSUyBpcyBub3QgTC5Qcm9qLkNSUy5UTVMuJzsNCgkJCX0NCg0KCQkJTC5UaWxlTGF5ZXIucHJvdG90eXBlLmluaXRpYWxpemUuY2FsbCh0aGlzLCB1cmxUZW1wbGF0ZSwgb3B0aW9ucyk7DQoJCQkvLyBFbmFibGluZyB0bXMgd2lsbCBjYXVzZSBMZWFmbGV0IHRvIGFsc28gdHJ5IHRvIGRvIFRNUywgd2hpY2ggd2lsbA0KCQkJLy8gYnJlYWsgKGF0IGxlYXN0IHByaW9yIHRvIDAuNy4wKS4gQWN0aXZlbHkgZGlzYWJsZSBpdCwgdG8gcHJldmVudA0KCQkJLy8gd2VsbC1tZWFuaW5nIHVzZXJzIGZyb20gc2hvb3RpbmcgdGhlbXNlbHZlcyBpbiB0aGUgZm9vdC4NCgkJCXRoaXMub3B0aW9ucy50bXMgPSBmYWxzZTsNCgkJCXRoaXMuY3JzID0gY3JzOw0KCQkJY3JzQm91bmRzID0gdGhpcy5jcnMucHJvamVjdGVkQm91bmRzOw0KDQoJCQkvLyBWZXJpZnkgZ3JpZCBhbGlnbm1lbnQNCgkJCWZvciAoaSA9IHRoaXMub3B0aW9ucy5taW5ab29tOyBpIDwgdGhpcy5vcHRpb25zLm1heFpvb20gJiYgYm91bmRzTWF0Y2hlc0dyaWQ7IGkrKykgew0KCQkJCXZhciBncmlkSGVpZ2h0ID0gKGNyc0JvdW5kc1szXSAtIGNyc0JvdW5kc1sxXSkgLw0KCQkJCQl0aGlzLl9wcm9qZWN0ZWRUaWxlU2l6ZShpKTsNCgkJCQlib3VuZHNNYXRjaGVzR3JpZCA9IE1hdGguYWJzKGdyaWRIZWlnaHQgLSBNYXRoLnJvdW5kKGdyaWRIZWlnaHQpKSA+IDFlLTM7DQoJCQl9DQoNCgkJCWlmICghYm91bmRzTWF0Y2hlc0dyaWQpIHsNCgkJCQlzY2FsZVRyYW5zZm9ybXMgPSB7fTsNCgkJCQlmb3IgKGkgPSB0aGlzLm9wdGlvbnMubWluWm9vbTsgaSA8IHRoaXMub3B0aW9ucy5tYXhab29tOyBpKyspIHsNCgkJCQkJdXBwZXJZID0gY3JzQm91bmRzWzFdICsgTWF0aC5jZWlsKChjcnNCb3VuZHNbM10gLSBjcnNCb3VuZHNbMV0pIC8NCgkJCQkJCXRoaXMuX3Byb2plY3RlZFRpbGVTaXplKGkpKSAqIHRoaXMuX3Byb2plY3RlZFRpbGVTaXplKGkpOw0KCQkJCQlzY2FsZVRyYW5zZm9ybXNbdGhpcy5jcnMuc2NhbGUoaSldID0gbmV3IEwuVHJhbnNmb3JtYXRpb24oMSwgLWNyc0JvdW5kc1swXSwgLTEsIHVwcGVyWSk7DQoJCQkJfQ0KDQoJCQkJdGhpcy5jcnMgPSBuZXcgTC5Qcm9qLkNSUy5UTVModGhpcy5jcnMucHJvamVjdGlvbi5fcHJvaiwgY3JzQm91bmRzLCB0aGlzLmNycy5vcHRpb25zKTsNCgkJCQl0aGlzLmNycy50cmFuc2Zvcm1hdGlvbiA9IG5ldyBMLlByb2ouU2NhbGVEZXBlbmRhbnRUcmFuc2Zvcm1hdGlvbihzY2FsZVRyYW5zZm9ybXMpOw0KCQkJfQ0KCQl9LA0KDQoJCWdldFRpbGVVcmw6IGZ1bmN0aW9uKHRpbGVQb2ludCkgew0KCQkJdmFyIHpvb20gPSB0aGlzLl9tYXAuZ2V0Wm9vbSgpLA0KCQkJCWdyaWRIZWlnaHQgPSBNYXRoLmNlaWwoDQoJCQkJKHRoaXMuY3JzLnByb2plY3RlZEJvdW5kc1szXSAtIHRoaXMuY3JzLnByb2plY3RlZEJvdW5kc1sxXSkgLw0KCQkJCXRoaXMuX3Byb2plY3RlZFRpbGVTaXplKHpvb20pKTsNCg0KCQkJcmV0dXJuIEwuVXRpbC50ZW1wbGF0ZSh0aGlzLl91cmwsIEwuVXRpbC5leHRlbmQoew0KCQkJCXM6IHRoaXMuX2dldFN1YmRvbWFpbih0aWxlUG9pbnQpLA0KCQkJCXo6IHRoaXMuX2dldFpvb21Gb3JVcmwoKSwNCgkJCQl4OiB0aWxlUG9pbnQueCwNCgkJCQl5OiBncmlkSGVpZ2h0IC0gdGlsZVBvaW50LnkgLSAxDQoJCQl9LCB0aGlzLm9wdGlvbnMpKTsNCgkJfSwNCg0KCQlfcHJvamVjdGVkVGlsZVNpemU6IGZ1bmN0aW9uKHpvb20pIHsNCgkJCXJldHVybiAodGhpcy5vcHRpb25zLnRpbGVTaXplIC8gdGhpcy5jcnMuc2NhbGUoem9vbSkpOw0KCQl9DQoJfSk7DQoNCglMLlByb2ouR2VvSlNPTiA9IEwuR2VvSlNPTi5leHRlbmQoew0KCQlpbml0aWFsaXplOiBmdW5jdGlvbihnZW9qc29uLCBvcHRpb25zKSB7DQoJCQl0aGlzLl9jYWxsTGV2ZWwgPSAwOw0KCQkJTC5HZW9KU09OLnByb3RvdHlwZS5pbml0aWFsaXplLmNhbGwodGhpcywgbnVsbCwgb3B0aW9ucyk7DQoJCQlpZiAoZ2VvanNvbikgew0KCQkJCXRoaXMuYWRkRGF0YShnZW9qc29uKTsNCgkJCX0NCgkJfSwNCg0KCQlhZGREYXRhOiBmdW5jdGlvbihnZW9qc29uKSB7DQoJCQl2YXIgY3JzOw0KDQoJCQlpZiAoZ2VvanNvbikgew0KCQkJCWlmIChnZW9qc29uLmNycyAmJiBnZW9qc29uLmNycy50eXBlID09PSAnbmFtZScpIHsNCgkJCQkJY3JzID0gbmV3IEwuUHJvai5DUlMoZ2VvanNvbi5jcnMucHJvcGVydGllcy5uYW1lKTsNCgkJCQl9IGVsc2UgaWYgKGdlb2pzb24uY3JzICYmIGdlb2pzb24uY3JzLnR5cGUpIHsNCgkJCQkJY3JzID0gbmV3IEwuUHJvai5DUlMoZ2VvanNvbi5jcnMudHlwZSArICc6JyArIGdlb2pzb24uY3JzLnByb3BlcnRpZXMuY29kZSk7DQoJCQkJfQ0KDQoJCQkJaWYgKGNycyAhPT0gdW5kZWZpbmVkKSB7DQoJCQkJCXRoaXMub3B0aW9ucy5jb29yZHNUb0xhdExuZyA9IGZ1bmN0aW9uKGNvb3Jkcykgew0KCQkJCQkJdmFyIHBvaW50ID0gTC5wb2ludChjb29yZHNbMF0sIGNvb3Jkc1sxXSk7DQoJCQkJCQlyZXR1cm4gY3JzLnByb2plY3Rpb24udW5wcm9qZWN0KHBvaW50KTsNCgkJCQkJfTsNCgkJCQl9DQoJCQl9DQoNCgkJCS8vIEJhc2UgY2xhc3MnIGFkZERhdGEgbWlnaHQgY2FsbCB1cyByZWN1cnNpdmVseSwgYnV0DQoJCQkvLyBDUlMgc2hvdWxkbid0IGJlIGNsZWFyZWQgaW4gdGhhdCBjYXNlLCBzaW5jZSBDUlMgYXBwbGllcw0KCQkJLy8gdG8gdGhlIHdob2xlIEdlb0pTT04sIGlubHVkaW5nIHN1Yi1mZWF0dXJlcy4NCgkJCXRoaXMuX2NhbGxMZXZlbCsrOw0KCQkJdHJ5IHsNCgkJCQlMLkdlb0pTT04ucHJvdG90eXBlLmFkZERhdGEuY2FsbCh0aGlzLCBnZW9qc29uKTsNCgkJCX0gZmluYWxseSB7DQoJCQkJdGhpcy5fY2FsbExldmVsLS07DQoJCQkJaWYgKHRoaXMuX2NhbGxMZXZlbCA9PT0gMCkgew0KCQkJCQlkZWxldGUgdGhpcy5vcHRpb25zLmNvb3Jkc1RvTGF0TG5nOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0pOw0KDQoJTC5Qcm9qLmdlb0pzb24gPSBmdW5jdGlvbihnZW9qc29uLCBvcHRpb25zKSB7DQoJCXJldHVybiBuZXcgTC5Qcm9qLkdlb0pTT04oZ2VvanNvbiwgb3B0aW9ucyk7DQoJfTsNCg0KCUwuUHJvai5JbWFnZU92ZXJsYXkgPSBMLkltYWdlT3ZlcmxheS5leHRlbmQoew0KCQlpbml0aWFsaXplOiBmdW5jdGlvbih1cmwsIGJvdW5kcywgb3B0aW9ucykgew0KCQkJTC5JbWFnZU92ZXJsYXkucHJvdG90eXBlLmluaXRpYWxpemUuY2FsbCh0aGlzLCB1cmwsIG51bGwsIG9wdGlvbnMpOw0KCQkJdGhpcy5fcHJvakJvdW5kcyA9IGJvdW5kczsNCgkJfSwNCg0KCQkvKiBEYW5nZXIgYWhlYWQ6IG92ZXJyaWRpbmcgaW50ZXJuYWwgbWV0aG9kcyBpbiBMZWFmbGV0Lg0KCQkgICBJJ3ZlIGRlY2lkZWQgdG8gZG8gdGhpcyByYXRoZXIgdGhhbiBtYWtpbmcgYSBjb3B5IG9mIEwuSW1hZ2VPdmVybGF5DQoJCSAgIGFuZCBtYWtpbmcgdmVyeSB0aW55IG1vZGlmaWNhdGlvbnMgdG8gaXQuIEZ1dHVyZSB3aWxsIHRlbGwgaWYgdGhpcw0KCQkgICB3YXMgd2lzZSBvciBub3QuICovDQoJCV9hbmltYXRlWm9vbTogZnVuY3Rpb24gKGUpIHsNCgkJCXZhciBub3J0aHdlc3QgPSBMLnBvaW50KHRoaXMuX3Byb2pCb3VuZHMubWluLngsIHRoaXMuX3Byb2pCb3VuZHMubWF4LnkpLA0KCQkJCXNvdXRoZWFzdCA9ICBMLnBvaW50KHRoaXMuX3Byb2pCb3VuZHMubWF4LngsIHRoaXMuX3Byb2pCb3VuZHMubWluLnkpLA0KCQkJCXRvcExlZnQgPSB0aGlzLl9wcm9qZWN0ZWRUb05ld0xheWVyUG9pbnQobm9ydGh3ZXN0LCBlLnpvb20sIGUuY2VudGVyKSwNCgkJCSAgICBzaXplID0gdGhpcy5fcHJvamVjdGVkVG9OZXdMYXllclBvaW50KHNvdXRoZWFzdCwgZS56b29tLCBlLmNlbnRlcikuc3VidHJhY3QodG9wTGVmdCksDQoJCQkgICAgb3JpZ2luID0gdG9wTGVmdC5hZGQoc2l6ZS5fbXVsdGlwbHlCeSgoMSAtIDEgLyBlLnNjYWxlKSAvIDIpKTsNCg0KCQkJdGhpcy5faW1hZ2Uuc3R5bGVbTC5Eb21VdGlsLlRSQU5TRk9STV0gPQ0KCQkgICAgICAgIEwuRG9tVXRpbC5nZXRUcmFuc2xhdGVTdHJpbmcob3JpZ2luKSArICcgc2NhbGUoJyArIHRoaXMuX21hcC5nZXRab29tU2NhbGUoZS56b29tKSArICcpICc7DQoJCX0sDQoNCgkJX3Jlc2V0OiBmdW5jdGlvbigpIHsNCgkJCXZhciB6b29tID0gdGhpcy5fbWFwLmdldFpvb20oKSwNCgkJCQlwaXhlbE9yaWdpbiA9IHRoaXMuX21hcC5nZXRQaXhlbE9yaWdpbigpLA0KCQkJCWJvdW5kcyA9IEwuYm91bmRzKHRoaXMuX3RyYW5zZm9ybSh0aGlzLl9wcm9qQm91bmRzLm1pbiwgem9vbSkuX3N1YnRyYWN0KHBpeGVsT3JpZ2luKSwNCgkJCQkJdGhpcy5fdHJhbnNmb3JtKHRoaXMuX3Byb2pCb3VuZHMubWF4LCB6b29tKS5fc3VidHJhY3QocGl4ZWxPcmlnaW4pKSwNCgkJCQlzaXplID0gYm91bmRzLmdldFNpemUoKSwNCgkJCQlpbWFnZSA9IHRoaXMuX2ltYWdlOw0KDQoJCQlMLkRvbVV0aWwuc2V0UG9zaXRpb24oaW1hZ2UsIGJvdW5kcy5taW4pOw0KCQkJaW1hZ2Uuc3R5bGUud2lkdGggID0gc2l6ZS54ICsgJ3B4JzsNCgkJCWltYWdlLnN0eWxlLmhlaWdodCA9IHNpemUueSArICdweCc7DQoJCX0sDQoNCgkJX3Byb2plY3RlZFRvTmV3TGF5ZXJQb2ludDogZnVuY3Rpb24gKHBvaW50LCBuZXdab29tLCBuZXdDZW50ZXIpIHsNCgkJCXZhciB0b3BMZWZ0ID0gdGhpcy5fbWFwLl9nZXROZXdUb3BMZWZ0UG9pbnQobmV3Q2VudGVyLCBuZXdab29tKS5hZGQodGhpcy5fbWFwLl9nZXRNYXBQYW5lUG9zKCkpOw0KCQkJcmV0dXJuIHRoaXMuX3RyYW5zZm9ybShwb2ludCwgbmV3Wm9vbSkuX3N1YnRyYWN0KHRvcExlZnQpOw0KCQl9LA0KDQoJCV90cmFuc2Zvcm06IGZ1bmN0aW9uKHAsIHpvb20pIHsNCgkJCXZhciBjcnMgPSB0aGlzLl9tYXAub3B0aW9ucy5jcnMsDQoJCQkJdHJhbnNmb3JtYXRpb24gPSBjcnMudHJhbnNmb3JtYXRpb24sDQoJCQkJc2NhbGUgPSBjcnMuc2NhbGUoem9vbSk7DQoJCQlyZXR1cm4gdHJhbnNmb3JtYXRpb24udHJhbnNmb3JtKHAsIHNjYWxlKTsNCgkJfQ0KCX0pOw0KDQoJTC5Qcm9qLmltYWdlT3ZlcmxheSA9IGZ1bmN0aW9uKHVybCwgYm91bmRzLCBvcHRpb25zKSB7DQoJCXJldHVybiBuZXcgTC5Qcm9qLkltYWdlT3ZlcmxheSh1cmwsIGJvdW5kcywgb3B0aW9ucyk7DQoJfTsNCg0KCWlmICh0eXBlb2YgTC5DUlMgIT09ICd1bmRlZmluZWQnKSB7DQoJCS8vIFRoaXMgaXMgbGVmdCBoZXJlIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQ0KCQlMLkNSUy5wcm9qNGpzID0gKGZ1bmN0aW9uICgpIHsNCgkJCXJldHVybiBmdW5jdGlvbiAoY29kZSwgZGVmLCB0cmFuc2Zvcm1hdGlvbiwgb3B0aW9ucykgew0KCQkJCW9wdGlvbnMgPSBvcHRpb25zIHx8IHt9Ow0KCQkJCWlmICh0cmFuc2Zvcm1hdGlvbikgew0KCQkJCQlvcHRpb25zLnRyYW5zZm9ybWF0aW9uID0gdHJhbnNmb3JtYXRpb247DQoJCQkJfQ0KDQoJCQkJcmV0dXJuIG5ldyBMLlByb2ouQ1JTKGNvZGUsIGRlZiwgb3B0aW9ucyk7DQoJCQl9Ow0KCQl9KCkpOw0KCX0NCg0KCXJldHVybiBMLlByb2o7DQp9KSk7DQo="></script> <script src="data:application/x-javascript;base64,KGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT0iZnVuY3Rpb24iJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGY9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIrbysiJyIpO3Rocm93IGYuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsZn12YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT0iZnVuY3Rpb24iJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSh7MTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CiJ1c2Ugc3RyaWN0IjsKCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiX19lc01vZHVsZSIsIHsKICB2YWx1ZTogdHJ1ZQp9KTsKCnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoInZhbHVlIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpOwoKdmFyIF91dGlsID0gcmVxdWlyZSgiLi91dGlsIik7CgpmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpOyB9IH0KCnZhciBDbHVzdGVyTGF5ZXJTdG9yZSA9IGZ1bmN0aW9uICgpIHsKICBmdW5jdGlvbiBDbHVzdGVyTGF5ZXJTdG9yZShncm91cCkgewogICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENsdXN0ZXJMYXllclN0b3JlKTsKCiAgICB0aGlzLl9sYXllcnMgPSB7fTsKICAgIHRoaXMuX2dyb3VwID0gZ3JvdXA7CiAgfQoKICBfY3JlYXRlQ2xhc3MoQ2x1c3RlckxheWVyU3RvcmUsIFt7CiAgICBrZXk6ICJhZGQiLAogICAgdmFsdWU6IGZ1bmN0aW9uIGFkZChsYXllciwgaWQpIHsKICAgICAgaWYgKHR5cGVvZiBpZCAhPT0gInVuZGVmaW5lZCIgJiYgaWQgIT09IG51bGwpIHsKICAgICAgICBpZiAodGhpcy5fbGF5ZXJzW2lkXSkgewogICAgICAgICAgdGhpcy5fZ3JvdXAucmVtb3ZlTGF5ZXIodGhpcy5fbGF5ZXJzW2lkXSk7CiAgICAgICAgfQogICAgICAgIHRoaXMuX2xheWVyc1tpZF0gPSBsYXllcjsKICAgICAgfQogICAgICB0aGlzLl9ncm91cC5hZGRMYXllcihsYXllcik7CiAgICB9CiAgfSwgewogICAga2V5OiAicmVtb3ZlIiwKICAgIHZhbHVlOiBmdW5jdGlvbiByZW1vdmUoaWQpIHsKICAgICAgaWYgKHR5cGVvZiBpZCA9PT0gInVuZGVmaW5lZCIgfHwgaWQgPT09IG51bGwpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIGlkID0gKDAsIF91dGlsLmFzQXJyYXkpKGlkKTsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpZC5sZW5ndGg7IGkrKykgewogICAgICAgIGlmICh0aGlzLl9sYXllcnNbaWRbaV1dKSB7CiAgICAgICAgICB0aGlzLl9ncm91cC5yZW1vdmVMYXllcih0aGlzLl9sYXllcnNbaWRbaV1dKTsKICAgICAgICAgIGRlbGV0ZSB0aGlzLl9sYXllcnNbaWRbaV1dOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0sIHsKICAgIGtleTogImNsZWFyIiwKICAgIHZhbHVlOiBmdW5jdGlvbiBjbGVhcigpIHsKICAgICAgdGhpcy5fbGF5ZXJzID0ge307CiAgICAgIHRoaXMuX2dyb3VwLmNsZWFyTGF5ZXJzKCk7CiAgICB9CiAgfV0pOwoKICByZXR1cm4gQ2x1c3RlckxheWVyU3RvcmU7Cn0oKTsKCmV4cG9ydHMuZGVmYXVsdCA9IENsdXN0ZXJMYXllclN0b3JlOwoKCn0seyIuL3V0aWwiOjE1fV0sMjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CiJ1c2Ugc3RyaWN0IjsKCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiX19lc01vZHVsZSIsIHsKICB2YWx1ZTogdHJ1ZQp9KTsKCnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoInZhbHVlIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpOwoKZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKTsgfSB9Cgp2YXIgQ29udHJvbFN0b3JlID0gZnVuY3Rpb24gKCkgewogIGZ1bmN0aW9uIENvbnRyb2xTdG9yZShtYXApIHsKICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBDb250cm9sU3RvcmUpOwoKICAgIHRoaXMuX2NvbnRyb2xzTm9JZCA9IFtdOwogICAgdGhpcy5fY29udHJvbHNCeUlkID0ge307CiAgICB0aGlzLl9tYXAgPSBtYXA7CiAgfQoKICBfY3JlYXRlQ2xhc3MoQ29udHJvbFN0b3JlLCBbewogICAga2V5OiAiYWRkIiwKICAgIHZhbHVlOiBmdW5jdGlvbiBhZGQoY29udHJvbCwgaWQsIGh0bWwpIHsKICAgICAgaWYgKHR5cGVvZiBpZCAhPT0gInVuZGVmaW5lZCIgJiYgaWQgIT09IG51bGwpIHsKICAgICAgICBpZiAodGhpcy5fY29udHJvbHNCeUlkW2lkXSkgewogICAgICAgICAgdGhpcy5fbWFwLnJlbW92ZUNvbnRyb2wodGhpcy5fY29udHJvbHNCeUlkW2lkXSk7CiAgICAgICAgfQogICAgICAgIHRoaXMuX2NvbnRyb2xzQnlJZFtpZF0gPSBjb250cm9sOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuX2NvbnRyb2xzTm9JZC5wdXNoKGNvbnRyb2wpOwogICAgICB9CiAgICAgIHRoaXMuX21hcC5hZGRDb250cm9sKGNvbnRyb2wpOwogICAgfQogIH0sIHsKICAgIGtleTogInJlbW92ZSIsCiAgICB2YWx1ZTogZnVuY3Rpb24gcmVtb3ZlKGlkKSB7CiAgICAgIGlmICh0aGlzLl9jb250cm9sc0J5SWRbaWRdKSB7CiAgICAgICAgdmFyIGNvbnRyb2wgPSB0aGlzLl9jb250cm9sc0J5SWRbaWRdOwogICAgICAgIHRoaXMuX21hcC5yZW1vdmVDb250cm9sKGNvbnRyb2wpOwogICAgICAgIGRlbGV0ZSB0aGlzLl9jb250cm9sc0J5SWRbaWRdOwogICAgICB9CiAgICB9CiAgfSwgewogICAga2V5OiAiY2xlYXIiLAogICAgdmFsdWU6IGZ1bmN0aW9uIGNsZWFyKCkgewogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2NvbnRyb2xzTm9JZC5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciBjb250cm9sID0gdGhpcy5fY29udHJvbHNOb0lkW2ldOwogICAgICAgIHRoaXMuX21hcC5yZW1vdmVDb250cm9sKGNvbnRyb2wpOwogICAgICB9CiAgICAgIHRoaXMuX2NvbnRyb2xzTm9JZCA9IFtdOwoKICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMuX2NvbnRyb2xzQnlJZCkgewogICAgICAgIHZhciBfY29udHJvbCA9IHRoaXMuX2NvbnRyb2xzQnlJZFtrZXldOwogICAgICAgIHRoaXMuX21hcC5yZW1vdmVDb250cm9sKF9jb250cm9sKTsKICAgICAgfQogICAgICB0aGlzLl9jb250cm9sc0J5SWQgPSB7fTsKICAgIH0KICB9XSk7CgogIHJldHVybiBDb250cm9sU3RvcmU7Cn0oKTsKCmV4cG9ydHMuZGVmYXVsdCA9IENvbnRyb2xTdG9yZTsKCgp9LHt9XSwzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKInVzZSBzdHJpY3QiOwoKT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICJfX2VzTW9kdWxlIiwgewogIHZhbHVlOiB0cnVlCn0pOwpleHBvcnRzLmdldENSUyA9IGdldENSUzsKCnZhciBfbGVhZmxldCA9IHJlcXVpcmUoIi4vZ2xvYmFsL2xlYWZsZXQiKTsKCnZhciBfbGVhZmxldDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9sZWFmbGV0KTsKCnZhciBfcHJvajRsZWFmbGV0ID0gcmVxdWlyZSgiLi9nbG9iYWwvcHJvajRsZWFmbGV0Iik7Cgp2YXIgX3Byb2o0bGVhZmxldDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9wcm9qNGxlYWZsZXQpOwoKZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH0KCi8vIEhlbHBlciBmdW5jdGlvbiB0byBpbnN0YW5jaWF0ZSBhIElDUlMgaW5zdGFuY2UuCmZ1bmN0aW9uIGdldENSUyhjcnNPcHRpb25zKSB7CiAgdmFyIGNycyA9IF9sZWFmbGV0Mi5kZWZhdWx0LkNSUy5FUFNHMzg1NzsgLy8gRGVmYXVsdCBTcGhlcmljYWwgTWVyY2F0b3IKCiAgc3dpdGNoIChjcnNPcHRpb25zLmNyc0NsYXNzKSB7CiAgICBjYXNlICJMLkNSUy5FUFNHMzg1NyI6CiAgICAgIGNycyA9IF9sZWFmbGV0Mi5kZWZhdWx0LkNSUy5FUFNHMzg1NzsKICAgICAgYnJlYWs7CiAgICBjYXNlICJMLkNSUy5FUFNHNDMyNiI6CiAgICAgIGNycyA9IF9sZWFmbGV0Mi5kZWZhdWx0LkNSUy5FUFNHNDMyNjsKICAgICAgYnJlYWs7CiAgICBjYXNlICJMLkNSUy5FUFNHMzM5NSI6CiAgICAgIGNycyA9IF9sZWFmbGV0Mi5kZWZhdWx0LkNSUy5FUFNHMzM5NTsKICAgICAgYnJlYWs7CiAgICBjYXNlICJMLkNSUy5TaW1wbGUiOgogICAgICBjcnMgPSBfbGVhZmxldDIuZGVmYXVsdC5DUlMuU2ltcGxlOwogICAgICBicmVhazsKICAgIGNhc2UgIkwuUHJvai5DUlMiOgogICAgICBpZiAoY3JzT3B0aW9ucy5vcHRpb25zICYmIGNyc09wdGlvbnMub3B0aW9ucy5ib3VuZHMpIHsKICAgICAgICBjcnNPcHRpb25zLm9wdGlvbnMuYm91bmRzID0gX2xlYWZsZXQyLmRlZmF1bHQuYm91bmRzKGNyc09wdGlvbnMub3B0aW9ucy5ib3VuZHMpOwogICAgICB9CiAgICAgIGlmIChjcnNPcHRpb25zLm9wdGlvbnMgJiYgY3JzT3B0aW9ucy5vcHRpb25zLnRyYW5zZm9ybWF0aW9uKSB7CiAgICAgICAgY3JzT3B0aW9ucy5vcHRpb25zLnRyYW5zZm9ybWF0aW9uID0gX2xlYWZsZXQyLmRlZmF1bHQuVHJhbnNmb3JtYXRpb24oY3JzT3B0aW9ucy5vcHRpb25zLnRyYW5zZm9ybWF0aW9uWzBdLCBjcnNPcHRpb25zLm9wdGlvbnMudHJhbnNmb3JtYXRpb25bMV0sIGNyc09wdGlvbnMub3B0aW9ucy50cmFuc2Zvcm1hdGlvblsyXSwgY3JzT3B0aW9ucy5vcHRpb25zLnRyYW5zZm9ybWF0aW9uWzNdKTsKICAgICAgfQogICAgICBjcnMgPSBuZXcgX3Byb2o0bGVhZmxldDIuZGVmYXVsdC5DUlMoY3JzT3B0aW9ucy5jb2RlLCBjcnNPcHRpb25zLnByb2o0ZGVmLCBjcnNPcHRpb25zLm9wdGlvbnMpOwogICAgICBicmVhazsKICAgIGNhc2UgIkwuUHJvai5DUlMuVE1TIjoKICAgICAgaWYgKGNyc09wdGlvbnMub3B0aW9ucyAmJiBjcnNPcHRpb25zLm9wdGlvbnMuYm91bmRzKSB7CiAgICAgICAgY3JzT3B0aW9ucy5vcHRpb25zLmJvdW5kcyA9IF9sZWFmbGV0Mi5kZWZhdWx0LmJvdW5kcyhjcnNPcHRpb25zLm9wdGlvbnMuYm91bmRzKTsKICAgICAgfQogICAgICBpZiAoY3JzT3B0aW9ucy5vcHRpb25zICYmIGNyc09wdGlvbnMub3B0aW9ucy50cmFuc2Zvcm1hdGlvbikgewogICAgICAgIGNyc09wdGlvbnMub3B0aW9ucy50cmFuc2Zvcm1hdGlvbiA9IF9sZWFmbGV0Mi5kZWZhdWx0LlRyYW5zZm9ybWF0aW9uKGNyc09wdGlvbnMub3B0aW9ucy50cmFuc2Zvcm1hdGlvblswXSwgY3JzT3B0aW9ucy5vcHRpb25zLnRyYW5zZm9ybWF0aW9uWzFdLCBjcnNPcHRpb25zLm9wdGlvbnMudHJhbnNmb3JtYXRpb25bMl0sIGNyc09wdGlvbnMub3B0aW9ucy50cmFuc2Zvcm1hdGlvblszXSk7CiAgICAgIH0KICAgICAgY3JzID0gbmV3IF9wcm9qNGxlYWZsZXQyLmRlZmF1bHQuQ1JTLlRNUyhjcnNPcHRpb25zLmNvZGUsIGNyc09wdGlvbnMucHJvajRkZWYsIGNyc09wdGlvbnMucHJvamVjdGVkQm91bmRzLCBjcnNPcHRpb25zLm9wdGlvbnMpOwogICAgICBicmVhazsKICB9CiAgcmV0dXJuIGNyczsKfQoKCn0seyIuL2dsb2JhbC9sZWFmbGV0Ijo4LCIuL2dsb2JhbC9wcm9qNGxlYWZsZXQiOjl9XSw0OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKInVzZSBzdHJpY3QiOwoKT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICJfX2VzTW9kdWxlIiwgewogIHZhbHVlOiB0cnVlCn0pOwoKdmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICJzeW1ib2wiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sID8gInN5bWJvbCIgOiB0eXBlb2Ygb2JqOyB9OwoKdmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmICgidmFsdWUiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7Cgp2YXIgX3V0aWwgPSByZXF1aXJlKCIuL3V0aWwiKTsKCmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIik7IH0gfQoKdmFyIERhdGFGcmFtZSA9IGZ1bmN0aW9uICgpIHsKICBmdW5jdGlvbiBEYXRhRnJhbWUoKSB7CiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRGF0YUZyYW1lKTsKCiAgICB0aGlzLmNvbHVtbnMgPSBbXTsKICAgIHRoaXMuY29sbmFtZXMgPSBbXTsKICAgIHRoaXMuY29sc3RyaWN0ID0gW107CgogICAgdGhpcy5lZmZlY3RpdmVMZW5ndGggPSAwOwogICAgdGhpcy5jb2xpbmRpY2VzID0ge307CiAgfQoKICBfY3JlYXRlQ2xhc3MoRGF0YUZyYW1lLCBbewogICAga2V5OiAiX3VwZGF0ZUNhY2hlZFByb3BlcnRpZXMiLAogICAgdmFsdWU6IGZ1bmN0aW9uIF91cGRhdGVDYWNoZWRQcm9wZXJ0aWVzKCkgewogICAgICB2YXIgX3RoaXMgPSB0aGlzOwoKICAgICAgdGhpcy5lZmZlY3RpdmVMZW5ndGggPSAwOwogICAgICB0aGlzLmNvbGluZGljZXMgPSB7fTsKCiAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uIChjb2x1bW4sIGkpIHsKICAgICAgICBfdGhpcy5lZmZlY3RpdmVMZW5ndGggPSBNYXRoLm1heChfdGhpcy5lZmZlY3RpdmVMZW5ndGgsIGNvbHVtbi5sZW5ndGgpOwogICAgICAgIF90aGlzLmNvbGluZGljZXNbX3RoaXMuY29sbmFtZXNbaV1dID0gaTsKICAgICAgfSk7CiAgICB9CiAgfSwgewogICAga2V5OiAiX2NvbEluZGV4IiwKICAgIHZhbHVlOiBmdW5jdGlvbiBfY29sSW5kZXgoY29sbmFtZSkgewogICAgICB2YXIgaW5kZXggPSB0aGlzLmNvbGluZGljZXNbY29sbmFtZV07CiAgICAgIGlmICh0eXBlb2YgaW5kZXggPT09ICJ1bmRlZmluZWQiKSByZXR1cm4gLTE7CiAgICAgIHJldHVybiBpbmRleDsKICAgIH0KICB9LCB7CiAgICBrZXk6ICJjb2wiLAogICAgdmFsdWU6IGZ1bmN0aW9uIGNvbChuYW1lLCB2YWx1ZXMsIHN0cmljdCkgewogICAgICBpZiAodHlwZW9mIG5hbWUgIT09ICJzdHJpbmciKSB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29sdW1uIG5hbWUgXCIiICsgbmFtZSArICJcIiIpOwoKICAgICAgdmFyIGluZGV4ID0gdGhpcy5fY29sSW5kZXgobmFtZSk7CgogICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkgewogICAgICAgIGlmIChpbmRleCA8IDApIHJldHVybiBudWxsO2Vsc2UgcmV0dXJuICgwLCBfdXRpbC5yZWN5Y2xlKSh0aGlzLmNvbHVtbnNbaW5kZXhdLCB0aGlzLmVmZmVjdGl2ZUxlbmd0aCk7CiAgICAgIH0KCiAgICAgIGlmIChpbmRleCA8IDApIHsKICAgICAgICBpbmRleCA9IHRoaXMuY29sbmFtZXMubGVuZ3RoOwogICAgICAgIHRoaXMuY29sbmFtZXMucHVzaChuYW1lKTsKICAgICAgfQogICAgICB0aGlzLmNvbHVtbnNbaW5kZXhdID0gKDAsIF91dGlsLmFzQXJyYXkpKHZhbHVlcyk7CiAgICAgIHRoaXMuY29sc3RyaWN0W2luZGV4XSA9ICEhc3RyaWN0OwoKICAgICAgLy8gVE9ETzogVmFsaWRhdGUgc3RyaWN0bmVzcyAoZW5zdXJlIGxlbmd0aHMgbWF0Y2ggdXAgd2l0aCBvdGhlciBzdHJpY3RzKQoKICAgICAgdGhpcy5fdXBkYXRlQ2FjaGVkUHJvcGVydGllcygpOwoKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CiAgfSwgewogICAga2V5OiAiY2JpbmQiLAogICAgdmFsdWU6IGZ1bmN0aW9uIGNiaW5kKG9iaiwgc3RyaWN0KSB7CiAgICAgIHZhciBfdGhpczIgPSB0aGlzOwoKICAgICAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7CiAgICAgICAgdmFyIGNvbGRhdGEgPSBvYmpbbmFtZV07CiAgICAgICAgX3RoaXMyLmNvbChuYW1lLCBjb2xkYXRhKTsKICAgICAgfSk7CiAgICAgIHJldHVybiB0aGlzOwogICAgfQogIH0sIHsKICAgIGtleTogImdldCIsCiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0KHJvdywgY29sLCBtaXNzaW5nT0spIHsKICAgICAgdmFyIF90aGlzMyA9IHRoaXM7CgogICAgICBpZiAocm93ID4gdGhpcy5lZmZlY3RpdmVMZW5ndGgpIHRocm93IG5ldyBFcnJvcigiUm93IGFyZ3VtZW50IHdhcyBvdXQgb2YgYm91bmRzOiAiICsgcm93ICsgIiA+ICIgKyB0aGlzLmVmZmVjdGl2ZUxlbmd0aCk7CgogICAgICB2YXIgY29sSW5kZXggPSAtMTsKICAgICAgaWYgKHR5cGVvZiBjb2wgPT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgdmFyIF9yZXQgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB2YXIgcm93RGF0YSA9IHt9OwogICAgICAgICAgX3RoaXMzLmNvbG5hbWVzLmZvckVhY2goZnVuY3Rpb24gKG5hbWUsIGkpIHsKICAgICAgICAgICAgcm93RGF0YVtuYW1lXSA9IF90aGlzMy5jb2x1bW5zW2ldW3JvdyAlIF90aGlzMy5jb2x1bW5zW2ldLmxlbmd0aF07CiAgICAgICAgICB9KTsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHY6IHJvd0RhdGEKICAgICAgICAgIH07CiAgICAgICAgfSgpOwoKICAgICAgICBpZiAoKHR5cGVvZiBfcmV0ID09PSAidW5kZWZpbmVkIiA/ICJ1bmRlZmluZWQiIDogX3R5cGVvZihfcmV0KSkgPT09ICJvYmplY3QiKSByZXR1cm4gX3JldC52OwogICAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb2wgPT09ICJzdHJpbmciKSB7CiAgICAgICAgY29sSW5kZXggPSB0aGlzLl9jb2xJbmRleChjb2wpOwogICAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb2wgPT09ICJudW1iZXIiKSB7CiAgICAgICAgY29sSW5kZXggPSBjb2w7CiAgICAgIH0KICAgICAgaWYgKGNvbEluZGV4IDwgMCB8fCBjb2xJbmRleCA+IHRoaXMuY29sdW1ucy5sZW5ndGgpIHsKICAgICAgICBpZiAobWlzc2luZ09LKSByZXR1cm4gdm9pZCAwO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGNvbHVtbiBpbmRleDogIiArIGNvbCk7CiAgICAgIH0KCiAgICAgIHJldHVybiB0aGlzLmNvbHVtbnNbY29sSW5kZXhdW3JvdyAlIHRoaXMuY29sdW1uc1tjb2xJbmRleF0ubGVuZ3RoXTsKICAgIH0KICB9LCB7CiAgICBrZXk6ICJucm93IiwKICAgIHZhbHVlOiBmdW5jdGlvbiBucm93KCkgewogICAgICByZXR1cm4gdGhpcy5lZmZlY3RpdmVMZW5ndGg7CiAgICB9CiAgfV0pOwoKICByZXR1cm4gRGF0YUZyYW1lOwp9KCk7CgpleHBvcnRzLmRlZmF1bHQgPSBEYXRhRnJhbWU7CgoKfSx7Ii4vdXRpbCI6MTV9XSw1OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKInVzZSBzdHJpY3QiOwoKdmFyIF9sZWFmbGV0ID0gcmVxdWlyZSgiLi9nbG9iYWwvbGVhZmxldCIpOwoKdmFyIF9sZWFmbGV0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2xlYWZsZXQpOwoKZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH0KCi8vIEluIFJNYXJrZG93bidzIHNlbGYtY29udGFpbmVkIG1vZGUsIHdlIGRvbid0IGhhdmUgYSB3YXkgdG8gY2FycnkgYXJvdW5kIHRoZQovLyBpbWFnZXMgdGhhdCBMZWFmbGV0IG5lZWRzIGJ1dCBkb2Vzbid0IGxvYWQgaW50byB0aGUgcGFnZS4gSW5zdGVhZCwgd2UnbGwgc2V0Ci8vIGRhdGEgVVJJcyBmb3IgdGhlIGRlZmF1bHQgbWFya2VyLCBhbmQgbGV0IGFueSBvdGhlcnMgYmUgbG9hZGVkIHZpYSBDRE4uCmlmICh0eXBlb2YgX2xlYWZsZXQyLmRlZmF1bHQuSWNvbi5EZWZhdWx0LmltYWdlUGF0aCA9PT0gInVuZGVmaW5lZCIpIHsKICBfbGVhZmxldDIuZGVmYXVsdC5JY29uLkRlZmF1bHQuaW1hZ2VQYXRoID0gImh0dHA6Ly9jZG4ubGVhZmxldGpzLmNvbS9sZWFmbGV0LTAuNy4zL2ltYWdlcyI7CgogIGlmIChfbGVhZmxldDIuZGVmYXVsdC5Ccm93c2VyLnJldGluYSkgewogICAgX2xlYWZsZXQyLmRlZmF1bHQuSWNvbi5EZWZhdWx0LnByb3RvdHlwZS5vcHRpb25zLmljb25VcmwgPSAiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFESUFBQUJTQ0FZQUFBQVd5NGZyQUFBUGlFbEVRVlI0MnQxYkNWQ1U1eGttYmFidFpKSk9PK2wwbWhnVDB5UWUwV1haZ3oyNTcwTkI4STZKNlV6YVRCb09SUkZFcnVWR0RoV1VQUkFRUkZGUkVEblZ4Q3RFQlJiMjREQk5FM1dhYWF0cGttbHVvNG0rZmQ5djk5OW9sR1ZCRHUzT1BMaisvL3MrNy9XOTMvZjkvLzYvRXdBNC9UOWczQWxGT1VlZVVHUjJ1TXF6T3lKazJSMngwcXlPQW1ubWtTM1NyQ1ByWkpsSGxzcXpqeXBjczQ5T1gxSmYvL1A3S2hEODg1QTB1MTBteTJvdlFzY3Z5Ykk2d0VGOGl2STdwRm50QVY2cWt3OVBXU0JLMWJFblpSbHRtMldaN1I4aDRGYkkwVkczM0dQZ1hYZ0NBcmErQTRFSW44S1Q0SkgvRmlnb2lKL0lJejZUWmJWVktMTGFuNXUwUUVTcWxrY2tXVzNwMHN5MmJ4REFnWndPMTNURHl0b0IrTlBlOSt6aWxkMkRFRkd1QjcvTnB6RG9kcmlGNTVvMG83WElSWFhvTnhNYWlDU2o5VlUwOUM4RUVOeHlqMEM0dGh0ZXJoMkVWK3ZldXdPcjZzN0R5M3Nzb085M2szbGx6eEJFNlBUZ2tYY01PRjdFSjlLTXRxalI5SkZEUW5OVjliK1FxbHFxRUVDUVo3VEJndTFuWWRYdUlYZ1ZuZVN3WXRjZ1JGYjFRMWlGR1VMTHpSQ3NNOTBHT3JaZ2h4a2lLdnRoZWMwZ3JMcEZseEN1NmNLaDF3NmNIVVNiY3RQaHg4WWxFRWx1NCtOU1ZmTnBCQkFDdHB5R2xic0dtQk9FbFJoTUJEb2ZnazRHb2JPalFYQzVDUlppVUMvVkR0bjRxTHJCSlozQTJjTmcrbkU0UDMxUGdTREJiSW1xNVVOSmVqTVFGcWk3Y0NpY1ozaVpCVEFBUVZvVEJJNERLS0NWR0JESEg2bnJCUmxXeFdyN3NsalZJaGxUSURMVm9Sa1MxZUgvU05JUGd6eXpGUlpWOU5uRysrTHFRY3lvR1FMUWdmRkVJRllwY3VlQXpjNlNTaU1PdFRZZ0g5Q1hyK1dwVGJ4UkJlS2xxbjlVa3Raa1JvQUNaNVBsTzgxWWdmTU00Ulg5RUtBeFRTakNkdlRqRUxQWVcxN2REOHJzZGlCZkVCY2xTWTJQT3hRSUhubElrbnJvRUFKazZVMndwTUxJU0YvYU5RU2hXQVYvdFdsU0VJSzJWcUJOc3IyMDBnUnlHbUxva3lTMThjVGRGdEE3QW5GTmJjeEFBQ0dNclF0RExBanFCVCsxY1ZKQk5zazIrYkJRMXdPY1g1SzB4czEyQThHeXpYUk5hZmdlQVlGYjNtRWtyQkk0SS9tV0dVZU5RSTFseXAyUG9POWo0YURLY0g0RWJlMEU4ZzN4Z3l5bGNjNndnYmltTmpTU29GdFdLMXNUcUxSaDJCTStTT2dJZkRHTEpMOElHM1paalVYL1ZpeXZHWUxGT3dkWm4vbGpZSTd5enNlZTRUamNzVi9JUjNGcVErdGRBeEVuTlNqRnlRZUJFSzdwZ1JWb2RFblZJUGhzTnpxRVlLMFpsdUZzUm5xM1lqSDIyS0p5QTZ6NHlUbVNwWjV6bEg4UlR2V2t0MUNyQjg1UFlVcWp6eDJCdUc2c1B5ZmVlQUE4c2p0d3BoaGlDRlNid1h1YjBTN0lTUGlPQVp2TzRoMDQ4eFNmQk0rY0RwRGllQ1pPZ2dTejZKSGRCdjVGSjNDTjZMUEpSMVFNZ085MjA0aDJhQUxnZER4empscDRrdzhZYUhLeUJTSkpQaWdXYjZ3SFFpUm1ieGtLTDBRRFhraGdEOTRZeEdLc0dza1RRa3ZmeFZubElIQmNCTmZrZWd6aXdCM0hBbkhEdUd5blJYY3AvdXRYWmhyUkhpV001Q1BMamJkd0hWRFlBaEZ0M0o4clR0b1BicGt0U0RyRTRJTlo4aXcxMmtVWUVwUHM0a296ZU9XMEEzRVFJb3ZiWWNmeElUajc5OHZ3eGJmWDRPcjFIOEI0NlJPbzdmd2J2S1k5YnBOenkyaG1pU09PeU1yQkVlMlJUNXgvN3RqSHhDRksybC80WXlCSis5NUhRQUJtaWJLekVKdlJzOVJnRjRGcUU1TWxlR1MzQXVtTE4rNkQ0bFlqZkllT0QvZTVlUk9nN3N6N29FZzd3SFJrNlkzWWkvMk1Kd1Q3YkNTNzVCdkpCdUdzU3ZxSUQxZ2dhSHllYUFNZVFFUmd5YWpCZzNCRzhTZ3hEQXN2SkZ4VU9jQmtnN2QwTWwzWGpmdWhDeXZnNk9maXgxK0FsNnFCNmZwdWVvdHhzY2tGaDVBOTIrUWJ5ZEh3NHZ5bUdKeEVHK3JXaVJMM2dvSldjU3d2d2JQRUNPNWJEY01pUkdObWNoUzRhMUk5a1A2MkRoT005dFBhZDRucEVoYVVkVFBPc1BKK3U3YkpOODVQcGFxSjZZb1Q2eEtjUklsMXBRand4SXVreFhoeUlZNTdOMVN3aDdEeUFTYnJtMzhNU0hkUlVTdGMrLzRHak9VVFYzMmFjYmhsTmpOTzZwV1I3RlBUazZ4WDNsR21LMHlzMHpyaG4wWmh3aDd3SzNpYm5WeWc2d2UzTFFhN1dGUXh5R1NwaXFSYmUvbzhqUFhUZStFSzR4RGpFQ0hPeGRZUlljOCsrVWh5ZmdYSG1hNXcvWjVtSitINjNUM0NoTjNZNk8vZ3VNY3hqOE5HaWNMRGdZeVEzQ0tjbnNVYk1CdW9hN2o0OFpnRCtlcnFkY3pxYnNZVHB1bGozTFN1MlBPQmZDUTU4cG4wRUgxT3dvVGFmd3ZYMStKVjJWbUl4RXdIbEpsQnNka3dMSHkybVpqY2dqSTlrSjRZbmJoNi9YdTRsMDlZZmhQakNzU0pnN2hwSWJibmcvOTJNNU1qbjBrUGNkbEpHRi83SlFKQ1Nyc2dBc2VlSHpvcUwrNGJGblNlNUVKS3pnSHBlYVRzZzN2OXJDcnRZRnoraFNjWmR6QUdZczhIWDg0SDlKbjBLQVluUWZ5dUlRVDRZNW1vMGFraU1oUWVEaDQ0dEVndVhHY0UwaVA4NDVNdnh4ekVqUnMzUVo1VXgzaEN0blV4YnFxNlBSLzhjUmRBY3VTejFZZnpHRWhObTJCZERmamt2dzBMY1RZS29rQ0srb2FGQW9sSWppREZCWWwwMi9vdWpEbVFDMWMrWnh6QytCb0lwMnQzNUhYSFByRG5BL2xJY3VRejZTS09PQW5XVnFzUmJIc2NqaWRETmYwZ1JXRjdDTlgyTTFsM1ZUT1FibXBkNTVnRHFUMDF4RGhrbUJUaUpNaEdzQitpc2RyUGJHZTZ3clUxNVJqSXprUUV5SEIzR3FZYllDQWlTZUh3Q01CbUk3bUFZaXd0NmdyWDdRVDloNWRISGNRL1Avc0tsRW03R1lkMzdsSEdHYUx1dDJ0YmlyRDVpVDZUcmlDdUtzVkpzTHJDd3lXdWloMllqL3VuTUMyVkZsZnNncjVob2R4c1pISUVaVm9Ua1A3ODdBUHc3VFhIWnkvYWMvMjVySjNwU3BQMjR0UnJabnllVzAxMmJidFpiUzlBZWZLWitiNm1NdGpKUzZWNkdQL3pPUjN3Sytwa1FuN2J6SGJKQ0NSRHNxRmxCcHorZGpIQ1Y3YTJ3TVVyL3gweGlNKyt1Z3BycTQ1Ym5GaGJoZE5vRitNS0xPdDMyQzc1U3ZxSWI3eFVPMy9GZHIvOHVNcURMbXNxd1UzVmlwSDJRekEyazNoVHIxMUlDbnFaSE1uN0YrSENGSWZaUVE1SmZEVlV2VzFtenY3MDgvVjMxNkZWL3dGNEplOWhzZ1N2M0dPTVl6NzFKZzZia2V6UzBDTjVOMVdMaFNPdXNzVzJqUmVzcm56TlpYVUZtNVBuVzBubDJDY2lWTFFIZWJIQkpoOVUwZzFTM0dZUUQ0ZVFqSDJRV0gwQzB1dHcxNURYQUVJeWJEMG54b1VzWVBNWm16NE41OUhZRStLMFN6eUMyTW8zYklIdzR6VFQrS3QzM0VTQVgvRlpDTVdvdlV0TUlNenZIUkZLSkE5RytWQUd2SjdJUHNLR0MzSGREWUk0cW53emhKUVptUTVsMkFPRGNNU1diNm1KNmZnV24rSDRic3hiV3pYOXRtdDJsOVhsN2Z6WWNwd0pHaGw1TUk1WEVTb0w4a2FHS0I5WFd3dzh4T29ZSVhCckQzaHZPZ25LOUJiRVlkeXBIc2N0U0JjR1lMYkorRk12YnVwejJBYW5KMDF1QVBMVkphYjg4QjAzSDF4aWRLSDhXQjBUQ0NxMUtORU00WWdSRG03RlJseXMrbThMNkc2Z0pMbVBrcHVxeGhKVTBzdDhKRjhGTWVWK2R3VGlwRkw5ekRsR2V3bUIxd1lkekpoL3FSbGNjbnRIRGNxZXZCQ3Y2TkJaM3hJeitDR1A1eFlUS0lvTUlNWnpvK1VUSUFLM1dSS2dVTFVCK2VnY3JUcy83QTA2WHBRMjBUbGFpK080bW0wREtMdVNBZ1B3a1dncUljT2trQytCT0JSZFZsY0MrY2lMMGtVTkc0am9kZDN2bktNMTN5SEFLLzhVQkc2blRCckJPVWMvcGZEQlJaSjg4Y2c5RHVRYkwxcnp4ZHczeXg2MWV4UGJPVWF6aTRSZDhWcVlNaEJJd3l1bkY1eXo5Vk1DVVY2dnhRK0VDSmNIOHMwNVNsTXk0dDE0NXhpMWpBa2pmSXU3R0lFU3h6WVBTYWNDMUdma2czZmhHYkQ2ZGRNbFZ2dUNRei8wb0hBZktjbFNtaUFBSzBKTjc1emRDL095OUpNS2FuS3lUeEJ2T0dBSkpFYmQ0ZkF2VnJ4bzlVdWt4TWZad2J1NGh3V2lLRExDWENTZlROQVVUYmE5Q3M1eDFTRDRPQndJbTRxak5RT2tLRTF1QkgrYVFrc3NWWm1icVo4VUNMQXZ5UzVCbkxEZjJodmFFNlArTVpRZnBZbmdzdUJkMkExK1c3RXFCVVo0TVVNL0tYQXZNakdiSHZtMjNnQ1hhSTF5VEQ5UG83S2V6V0JKQjhFWHAwQUNEMHMrSjZOblFrR3pKR2RQbEZESEJkSSs1dC9aK2RHYVFDNGJIcHZPZ2crdXpuSmNJR2VyZWlZVXlrSWpzK1dXMjJtckJpOVdMYnFuSng5d2x1Z2tJbEhpZnZCR2NnTE5LTFBRNEVTQStwQ3pJNGpmd3kyQWpmZjhDQWR1V3p5NHJMam5uV0VHcUZkbXBmZE1DS2dhWkVPWmM1cXJ4ZzNuV00yOGNYbW9oaGV0UGNxcXNuNHZlRzAyTWN6RG1XVm1Xcys0d2ptcjE4WXZXRmZMQlZJM2JrOEh1YnhaNXNwVlJaSFR5UXpKc1Nvdm9QSHhoQUtyUWR5S3JGTmNFRC93bzhwbmp1dnpXcmdIYXlKeUlZNWJ6MklUdzF5Y0pwOVA3UjRYOExEQ0hLL0wybDBzRUg2MHRtcmNIenpqUmV0NHRNOWhWY2sreFF6S054bkdMUkRxTytLVVpaN2dxbkhkWlkxbXhvUThRVWZqbFl3STF0YUNCeTVZQktyS2N5bmQ5d1RxTnd1ZkVmaHJxcTE3S28xNndoNEZwUEZLNDVadEtETk9nbnNoWmpEZkFIOU03cjRueVBPTmpFdWEvaFpYamF2OE56VFRKdlRoVEY2VXBwSnRGK0pxd0EyTkUxNVU2ZUZaZEdnc21KdlJ5emlVZUJYSVg3UFQyaHVhelJQK2xLa2dhdnN6ZU0xOGpXMG9WY2ZCcllDcVlvUm5OM2FQR2x3MWlNTTE3YWkxR3Rxdm5kL1EvSDVTbnZ2RjdmMTJsamtjejBwc1VtV0JwU296MExuUmdLcEJ1Z3E2TDhDdXhTa1FkZTZrUGNBc1dxTjdBbzEreXphVWFjZEFzY2tJMGp3RFBKUFU1VEJtYk94aS9VVzY0cFFPcmpjKzUvMVYvZHRKZlJJYnJ3MEtXRlZXVitIdzZHTkRaRTZhSHA3ZTBPVVE1cVRybVk0OHJ3LzRzUldXM29qU3BrMzZJK1d6bzdZLzdoeWwrWkp0WFZJN1dKKzQ1aHJnYWN6MjlBMzJRVElTckNEcGlKTGJ1V3A4T2l1aDhqR1lpb2Y4ZVRIcURFdFZLa0NHbVpWWnF6STlzY3N1U0laa1pYVGZLbllIdDhOTm1MSzNGYVF4cGI5R0p6NWpWY0hNY2xXaHJEK1ZlSGZRc0pMa1dxb2hUR3JscW5GWjlMcnVrU2w5N1lJWHBVNWtWY0hNU3ZES1RwcG5oTm1ZOFdrSlhYY0ZuU01aU1k2ZTNjTzFydUt4VS83K0NHVVNuYm5DdGk0YldqSGJPQXZsR09BcGRQcko5YmVEanRFNWtoRnNhT2FxOGRIek1hVy92Qy9lNktHTVdtNGZsWU1rdTRjTm5WbXBQZWo4dWR0QTFhQnpybGw0N1JHanMvYUcrdlg3NXRVa3lpaGwxbEtWWm5ERnJJdXkrMkFhT3Y5RXZBWDBuWTdST1plRUpxNGFGK2czelB2cUhTdGVqT1l2bHZHdUExRm1OeHRDTTFQMThBY01nakFMdjlNeFlXYVg5V2NCa3RXdXV1OWVGcVBNNG1idkF6YkVFZzVoOXRIcExJT3RQK2c3SGVNbk5ITFZlRy9Ka3ZGN1lXeGMzM2pEcXF5MFpob0VLb3Z6TTFQMERQU2RqdEZ2RzVaVlhMUDB2bjE5ejNLclZUdklIRjNmWUhIZUN2cnVITi9BYmROTjNQTzY5KzE3aUxnempyUnV4OEVsL1N3SU1nME05UDNIRzlIcXNQditoVXJySlhFdmN6aitBQWJSeCtBY1g4OEYwdjFBdkJuS0FubFRHOFJsbjUvNkx1TEhXNS96b3JUK0Qwd2cxcXE4eTV4ZnU4OENTeUNuSDVoM2RXL1pHWHZlOHVPTVpSV1Awbm84Y0lGWTcrWWZzd1VSclQzNlFMMDlmZnNNcHBIWWVnVy9QN0NCV0h2bE1PR0JlNS85anRkalk3Ujh3a1RiK1I5bWVaQTZuMm9KV0FBQUFBQkpSVTVFcmtKZ2dnPT0iOwogIH0gZWxzZSB7CiAgICBfbGVhZmxldDIuZGVmYXVsdC5JY29uLkRlZmF1bHQucHJvdG90eXBlLm9wdGlvbnMuaWNvblVybCA9ICJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJrQUFBQXBDQVlBQUFEQWs0TE9BQUFHbWtsRVFWUll3N1ZYZVV5VFp4anZObmZFTEZ1eUl6T2FiZXJtTVpFZVFDL09jbGtPNDlDcE9IWE9MSmwvQ0FVUnVZYlFpM0tMZ0VoYnJoWjFhRHdtYW9HcUtJSTZvZEFUbUgvc2NERmJkQzdMdkZxT0NjK2U5NXMyVkc1MFgvTExtL2Y0L1o3bmVZL25lMThhQU5DbUFyNUUveFpmMXVET2tUY0djV1I2aGw5MjQ3dFQ1VTdZNlNOdldzS1Q2M1A1OHFiZmVMSkc4TTVxY2dUa25ydnZyZERic1Q3TWwrdHY4Mlg2dlZ4SkUzM2FSbWdTeVl0Y1dWTXFYOTdZdjJKdlczOVVoUkUySHV5QkwrdCtnSzExMTZseTA2RWVXRk5sQW1IeGxRRTBPTWlWNm1RQ1NjdXNLUmxoUzNRTGVWSmRsMSsyM2g1ZFk0Rk5CM3RocmJZYm9xcHRFRmxwaFRDMWhTcEpuYlJ2eFA0Tldnc0U1Snl6ODZRTk5pLzVxU1VUR3VGazFndTU0dE45d3VLMndjM28rV2MxM1JDbXNvQndFcXpHY1pzeHN2Q1N5Lzl3SktmN1VXZjFtRVk4SldmZXdjNjdVVW9EYkRqUUMrRnFLNFFxTFZNR0dSOWQyd3VyS3pxQmszbnFJVC85ekx4UlJqZ1o5YnFRZ3ViK0Rkb2VDQzAzUThqKzBRaEZoQkhSL2VQM1UvekNsbjdVdStoaWhKMStiQk5mZkxJdm1reVAwZ3BCWldZWGhLdXNzSzZtQno1SFQ2TTFOcXBjcCttQkNQWG9zWVFmcmVrR3ZyamV3ZDU5L0d2S0NFN1RiSy8wNC9aVjVRWllWV21Ed0gxbUYzeGEyUTNyYTNEQkM1dkJUMW9QN1BUajRDMCtDY0w4YzdDMkN0ZWpxaHVDbnVJUUhhS0h6dmNSZlpwbnlsRmZYc1lKeDNwTkx3aEt6UkF3QWhFcUcwU3B1c0JIZkFLa3h3M3c0NjI3TVBob0NINzk4ejdzMFpuQkovTUVKYlpTYlhQaEVSMmloN3Ayb2svelNqMmNFSkRkNENBZSs1V1luQkNnUjJ1cnV5RXc2elJvVzYvRFdKL09lQVA4cGQvQkd0ek9aS3BHOG9rZTBTWDZHTW1SazZHRmx5QWM1OUszMk9URWluSUxSSlJjaGFoOEhRd05EOE40MzVaOVowRlkxRXF0eFVnKzBTTzZSSi9tbVh6NFZ1UytEcHhYQzNnWG1ad0lMN2RCU0g0ektFNTB3RVNmOHF3VmdyUDFFSWxUTzVKUDlJZ3UwYWV4ZGgyOEYxbG1BRUdKR2ZoN2pFNkVseU01UncvRkRjWUpqV2hiZWlCWW9ZTklwYzJGVC9TSUxpdnAwRjFpcERXazRCSUVvMlZ1b2RFSlVpZmhiaWx0bk5CSVhQVUZDTXB0aHRBeXF3cy9CUGxFRi9WYmFJeEVyZHhQcGhzVTdyY0NwOERvaEMrR3ZCSVBKUy90VzJqdHZUbW1BZXVOTzhCTk9ZUWVHOEcvMk96Q0ozcStzb1lCNWk2TmhNYUtyMTdGU2FsN0dJSGhldVYzdVNDWThxWVZ1RW0xY096cWRXcjdrdS9SMEJEb1RUK0RUK29oQ002L0NDdktMS080UkkrZFhQZUF1YU1xa3NhS3JaN0wzRkU1RklGYmtJY2VlT1oyT2NITzZ3SWhUa05vMGZmZ2pSR3hFcW9nWEhZVVBIZldBQy9sQURwd0djTFJZM2FlSzQvb1JHQ0tZY1pYUFZvZVgva2VsVllZOGRVR2Y4VjVFQlJiZ0pYVDVRSVBoUDllUEppNDI4SktPaUVZaFlYRkJxb3UyR3VoK3AvbUVCMS9SZk13NnJZN2N4Y2pUcm5lSTFGckR5dXpVU1JtOW1pd0VKeDhFL2dVbXFseXZIR2tuZWl3RXJSMjFGM3ROT0s1VGYweVhhVCtPN0RnQ3ZBTFRVQlhkTTRZaEMvSWF3UFUrMlBkdXFNdnVhUjZlb3hTd1VrNzVnZ3FzWUo3Vmljc253R0lrWkJTWEtPVXd3NzNXR1h5cVArSjIvYjljK2dpMVlBZy94cHdjazNnSnV1Y05yaDVKdkRQdlFyMFdGWGYwcGl5dDhmOC9XSTBoVjRwUnh4a1FaZEpEZkRKTk9BbU0wQWc4anlUNmh6MFdHWFd1UDk0WWgyamNmam1YQUd2SENNc2xSaW1ESFl1SHVEc3kyUXRIdUlhdnpuaGJZVVJxNVI1N0twekJCUlpLUEppOGVRZzQ4aDRqOFNEZG93aWZkSXJFVmRVK2diTzZRTnZSUnQ0WkJ0aFVhWmhVbmpsWU9iTmFnVjNrZW9lcnUzclU3cmN1Y2VxVTFtSkJ4eStCV1pZbE5FQkgrMGVINHZSaUIrT1l5YlUyaG5ibFlsVHZrSGluTTRtNTRZbnhTeWFaWVNGNlIzandnUDd1ZEtMR0lYNnIvbGJOYTlONnk1TUZ5bmpXRHRySGQ3NVp2VFlBUE8vNlJnRjBrNzZtUWxhM0ZHcTdkTytjSDhzS24wVm83bkRsbHdBaHF3TFBreHJId1dtSEpPbytBS0o0cmFiNU9nck03clZ1OGVXYjJQdTBEaDRlRGdYb09mdnA3WTdRZXFrblJtdmNUQkV5cTltL0hRUVNDU3o2TEhxM3oweXpzTnlTUmZNUzI1M3dsMkt5UkRiY1pQY2ZKS2pabVNFT2pjeHlpK1k4ZFVPdHNJRUg2UjJ3TnlrZHFya1lKMFJWOTJIMFc1OHBrZlFrN2NLZXZzTEsxMFB5OFNkTUdmWE5YQVRZK3BQYnlKUi9FVDZuOW5JZnp0TnRaWVJWOVhuaVF1OUlBMnZPVmd5NGlyN0dDTFZtbWQremprSDBlQUY5UG82SzYxcG1DWEh4VTVySE1ZZDFmdGMzb3dqd1JTVlJ6TGpLdnFaRXR5NmNSVUQ3akdxaU9kdTVIRzZNZEhqTmNOWUdxZkRtNVlSekxCQkNDRGwvMmJrOGE4Z2RicWNmd0VDdTYyRmcvSHJnZ0FBQUFCSlJVNUVya0pnZ2c9PSI7CiAgfQp9CgoKfSx7Ii4vZ2xvYmFsL2xlYWZsZXQiOjh9XSw2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKGZ1bmN0aW9uIChnbG9iYWwpewoidXNlIHN0cmljdCI7CgpPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgIl9fZXNNb2R1bGUiLCB7CiAgdmFsdWU6IHRydWUKfSk7CmV4cG9ydHMuZGVmYXVsdCA9IGdsb2JhbC5IVE1MV2lkZ2V0czsKCgp9KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbCAhPT0gInVuZGVmaW5lZCIgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gInVuZGVmaW5lZCIgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgPyB3aW5kb3cgOiB7fSkKfSx7fV0sNzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CihmdW5jdGlvbiAoZ2xvYmFsKXsKInVzZSBzdHJpY3QiOwoKT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICJfX2VzTW9kdWxlIiwgewogIHZhbHVlOiB0cnVlCn0pOwpleHBvcnRzLmRlZmF1bHQgPSBnbG9iYWwualF1ZXJ5OwoKCn0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsICE9PSAidW5kZWZpbmVkIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSAidW5kZWZpbmVkIiA/IHNlbGYgOiB0eXBlb2Ygd2luZG93ICE9PSAidW5kZWZpbmVkIiA/IHdpbmRvdyA6IHt9KQp9LHt9XSw4OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKGZ1bmN0aW9uIChnbG9iYWwpewoidXNlIHN0cmljdCI7CgpPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgIl9fZXNNb2R1bGUiLCB7CiAgdmFsdWU6IHRydWUKfSk7CmV4cG9ydHMuZGVmYXVsdCA9IGdsb2JhbC5MOwoKCn0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsICE9PSAidW5kZWZpbmVkIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSAidW5kZWZpbmVkIiA/IHNlbGYgOiB0eXBlb2Ygd2luZG93ICE9PSAidW5kZWZpbmVkIiA/IHdpbmRvdyA6IHt9KQp9LHt9XSw5OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKGZ1bmN0aW9uIChnbG9iYWwpewoidXNlIHN0cmljdCI7CgpPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgIl9fZXNNb2R1bGUiLCB7CiAgdmFsdWU6IHRydWUKfSk7CmV4cG9ydHMuZGVmYXVsdCA9IGdsb2JhbC5MLlByb2o7CgoKfSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWwgIT09ICJ1bmRlZmluZWQiID8gZ2xvYmFsIDogdHlwZW9mIHNlbGYgIT09ICJ1bmRlZmluZWQiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgIT09ICJ1bmRlZmluZWQiID8gd2luZG93IDoge30pCn0se31dLDEwOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKGZ1bmN0aW9uIChnbG9iYWwpewoidXNlIHN0cmljdCI7CgpPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgIl9fZXNNb2R1bGUiLCB7CiAgdmFsdWU6IHRydWUKfSk7CmV4cG9ydHMuZGVmYXVsdCA9IGdsb2JhbC5TaGlueTsKCgp9KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbCAhPT0gInVuZGVmaW5lZCIgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gInVuZGVmaW5lZCIgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgPyB3aW5kb3cgOiB7fSkKfSx7fV0sMTE6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewoidXNlIHN0cmljdCI7Cgp2YXIgX2pxdWVyeSA9IHJlcXVpcmUoIi4vZ2xvYmFsL2pxdWVyeSIpOwoKdmFyIF9qcXVlcnkyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfanF1ZXJ5KTsKCnZhciBfbGVhZmxldCA9IHJlcXVpcmUoIi4vZ2xvYmFsL2xlYWZsZXQiKTsKCnZhciBfbGVhZmxldDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9sZWFmbGV0KTsKCnZhciBfc2hpbnkgPSByZXF1aXJlKCIuL2dsb2JhbC9zaGlueSIpOwoKdmFyIF9zaGlueTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zaGlueSk7Cgp2YXIgX2h0bWx3aWRnZXRzID0gcmVxdWlyZSgiLi9nbG9iYWwvaHRtbHdpZGdldHMiKTsKCnZhciBfaHRtbHdpZGdldHMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaHRtbHdpZGdldHMpOwoKdmFyIF91dGlsID0gcmVxdWlyZSgiLi91dGlsIik7Cgp2YXIgX2Nyc191dGlscyA9IHJlcXVpcmUoIi4vY3JzX3V0aWxzIik7Cgp2YXIgX2NvbnRyb2xTdG9yZSA9IHJlcXVpcmUoIi4vY29udHJvbC1zdG9yZSIpOwoKdmFyIF9jb250cm9sU3RvcmUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY29udHJvbFN0b3JlKTsKCnZhciBfbGF5ZXJNYW5hZ2VyID0gcmVxdWlyZSgiLi9sYXllci1tYW5hZ2VyIik7Cgp2YXIgX2xheWVyTWFuYWdlcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9sYXllck1hbmFnZXIpOwoKdmFyIF9tZXRob2RzID0gcmVxdWlyZSgiLi9tZXRob2RzIik7Cgp2YXIgX21ldGhvZHMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfbWV0aG9kcyk7CgpyZXF1aXJlKCIuL2ZpeHVwLWRlZmF1bHQtaWNvbiIpOwoKdmFyIF9kYXRhZnJhbWUgPSByZXF1aXJlKCIuL2RhdGFmcmFtZSIpOwoKdmFyIF9kYXRhZnJhbWUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZGF0YWZyYW1lKTsKCnZhciBfY2x1c3RlckxheWVyU3RvcmUgPSByZXF1aXJlKCIuL2NsdXN0ZXItbGF5ZXItc3RvcmUiKTsKCnZhciBfY2x1c3RlckxheWVyU3RvcmUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2x1c3RlckxheWVyU3RvcmUpOwoKZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH0KCndpbmRvdy5MZWFmbGV0V2lkZ2V0ID0ge307CndpbmRvdy5MZWFmbGV0V2lkZ2V0LnV0aWxzID0ge307CnZhciBtZXRob2RzID0gd2luZG93LkxlYWZsZXRXaWRnZXQubWV0aG9kcyA9IF9qcXVlcnkyLmRlZmF1bHQuZXh0ZW5kKHt9LCBfbWV0aG9kczIuZGVmYXVsdCk7CndpbmRvdy5MZWFmbGV0V2lkZ2V0LkRhdGFGcmFtZSA9IF9kYXRhZnJhbWUyLmRlZmF1bHQ7CndpbmRvdy5MZWFmbGV0V2lkZ2V0LkNsdXN0ZXJMYXllclN0b3JlID0gX2NsdXN0ZXJMYXllclN0b3JlMi5kZWZhdWx0Owp3aW5kb3cuTGVhZmxldFdpZGdldC51dGlscy5nZXRDUlMgPSBfY3JzX3V0aWxzLmdldENSUzsKCi8vIFNlbmQgdXBkYXRlZCBib3VuZHMgYmFjayB0byBhcHAuIFRha2VzIGEgbGVhZmxldCBldmVudCBvYmplY3QgYXMgaW5wdXQuCmZ1bmN0aW9uIHVwZGF0ZUJvdW5kcyhtYXApIHsKICB2YXIgaWQgPSBtYXAuZ2V0Q29udGFpbmVyKCkuaWQ7CiAgdmFyIGJvdW5kcyA9IG1hcC5nZXRCb3VuZHMoKTsKCiAgX3NoaW55Mi5kZWZhdWx0Lm9uSW5wdXRDaGFuZ2UoaWQgKyAiX2JvdW5kcyIsIHsKICAgIG5vcnRoOiBib3VuZHMuZ2V0Tm9ydGhFYXN0KCkubGF0LAogICAgZWFzdDogYm91bmRzLmdldE5vcnRoRWFzdCgpLmxuZywKICAgIHNvdXRoOiBib3VuZHMuZ2V0U291dGhXZXN0KCkubGF0LAogICAgd2VzdDogYm91bmRzLmdldFNvdXRoV2VzdCgpLmxuZwogIH0pOwogIF9zaGlueTIuZGVmYXVsdC5vbklucHV0Q2hhbmdlKGlkICsgIl9jZW50ZXIiLCB7CiAgICBsbmc6IG1hcC5nZXRDZW50ZXIoKS5sbmcsCiAgICBsYXQ6IG1hcC5nZXRDZW50ZXIoKS5sYXQKICB9KTsKICBfc2hpbnkyLmRlZmF1bHQub25JbnB1dENoYW5nZShpZCArICJfem9vbSIsIG1hcC5nZXRab29tKCkpOwp9CgpmdW5jdGlvbiBwcmV2ZW50VW5pbnRlbmRlZFpvb21PblNjcm9sbChtYXApIHsKICAvLyBQcmV2ZW50IHVud2FudGVkIHNjcm9sbCBjYXB0dXJpbmcuIFNpbWlsYXIgaW4gcHVycG9zZSB0bwogIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9DbGlmZkNsb3VkL0xlYWZsZXQuU2xlZXAgYnV0IHdpdGggYQogIC8vIGRpZmZlcmVudCBzZXQgb2YgaGV1cmlzdGljcy4KCiAgLy8gVGhlIGJhc2ljIGlkZWEgaXMgdGhhdCB3aGVuIGEgbW91c2V3aGVlbC9ET01Nb3VzZVNjcm9sbAogIC8vIGV2ZW50IGlzIHNlZW4sIHdlIGRpc2FibGUgc2Nyb2xsIHdoZWVsIHpvb21pbmcgdW50aWwgdGhlCiAgLy8gdXNlciBtb3ZlcyB0aGVpciBtb3VzZSBjdXJzb3Igb3IgY2xpY2tzIG9uIHRoZSBtYXAuIFRoaXMKICAvLyBpcyBzbGlnaHRseSB0cmlja2llciB0aGFuIGp1c3QgbGlzdGVuaW5nIGZvciBtb3VzZW1vdmUsCiAgLy8gYmVjYXVzZSBtb3VzZW1vdmUgaXMgZmlyZWQgd2hlbiB0aGUgcGFnZSBpcyBzY3JvbGxlZCwKICAvLyBldmVuIGlmIHRoZSB1c2VyIGRpZCBub3QgcGh5c2ljYWxseSBtb3ZlIHRoZSBtb3VzZS4gV2UKICAvLyBoYW5kbGUgdGhpcyBieSBleGFtaW5pbmcgdGhlIG1vdXNlbW92ZSBldmVudCdzIHNjcmVlblgKICAvLyBhbmQgc2NyZWVuWSBwcm9wZXJ0aWVzOyBpZiB0aGV5IGNoYW5nZSwgd2Uga25vdyBpdCdzIGEKICAvLyAidHJ1ZSIgbW92ZS4KCiAgLy8gbGFzdFNjcmVlbiBjYW4gbmV2ZXIgYmUgbnVsbCwgYnV0IGl0cyB4IGFuZCB5IGNhbi4KICB2YXIgbGFzdFNjcmVlbiA9IHsgeDogbnVsbCwgeTogbnVsbCB9OwogICgwLCBfanF1ZXJ5Mi5kZWZhdWx0KShkb2N1bWVudCkub24oIm1vdXNld2hlZWwgRE9NTW91c2VTY3JvbGwiLCAiKiIsIGZ1bmN0aW9uIChlKSB7CiAgICAvLyBEaXNhYmxlIHpvb21pbmcgKHVudGlsIHRoZSBtb3VzZSBtb3ZlcyBvciBjbGljaykKICAgIG1hcC5zY3JvbGxXaGVlbFpvb20uZGlzYWJsZSgpOwogICAgLy8gQW55IG1vdXNlbW92ZSBldmVudHMgYXQgdGhpcyBzY3JlZW4gcG9zaXRpb24gd2lsbCBiZSBpZ25vcmVkLgogICAgbGFzdFNjcmVlbiA9IHsgeDogZS5vcmlnaW5hbEV2ZW50LnNjcmVlblgsIHk6IGUub3JpZ2luYWxFdmVudC5zY3JlZW5ZIH07CiAgfSk7CiAgKDAsIF9qcXVlcnkyLmRlZmF1bHQpKGRvY3VtZW50KS5vbigibW91c2Vtb3ZlIiwgIioiLCBmdW5jdGlvbiAoZSkgewogICAgLy8gRGlkIHRoZSBtb3VzZSByZWFsbHkgbW92ZT8KICAgIGlmIChsYXN0U2NyZWVuLnggIT09IG51bGwgJiYgZS5zY3JlZW5YICE9PSBsYXN0U2NyZWVuLnggfHwgZS5zY3JlZW5ZICE9PSBsYXN0U2NyZWVuLnkpIHsKICAgICAgLy8gSXQgcmVhbGx5IG1vdmVkLiBFbmFibGUgem9vbWluZy4KICAgICAgbWFwLnNjcm9sbFdoZWVsWm9vbS5lbmFibGUoKTsKICAgICAgbGFzdFNjcmVlbiA9IHsgeDogbnVsbCwgeTogbnVsbCB9OwogICAgfQogIH0pOwogICgwLCBfanF1ZXJ5Mi5kZWZhdWx0KShkb2N1bWVudCkub24oIm1vdXNlZG93biIsICIubGVhZmxldCIsIGZ1bmN0aW9uIChlKSB7CiAgICAvLyBDbGlja2luZyBhbHdheXMgZW5hYmxlcyB6b29taW5nLgogICAgbWFwLnNjcm9sbFdoZWVsWm9vbS5lbmFibGUoKTsKICAgIGxhc3RTY3JlZW4gPSB7IHg6IG51bGwsIHk6IG51bGwgfTsKICB9KTsKfQoKX2h0bWx3aWRnZXRzMi5kZWZhdWx0LndpZGdldCh7CgogIG5hbWU6ICJsZWFmbGV0IiwKICB0eXBlOiAib3V0cHV0IiwKICBmYWN0b3J5OiBmdW5jdGlvbiBmYWN0b3J5KGVsLCB3aWR0aCwgaGVpZ2h0KSB7CgogICAgdmFyIG1hcCA9IG51bGw7CgogICAgcmV0dXJuIHsKCiAgICAgIC8vIHdlIG5lZWQgdG8gc3RvcmUgb3VyIG1hcCBpbiBvdXIgcmV0dXJuZWQgb2JqZWN0LgogICAgICBnZXRNYXA6IGZ1bmN0aW9uIGdldE1hcCgpIHsKICAgICAgICByZXR1cm4gbWFwOwogICAgICB9LAoKICAgICAgcmVuZGVyVmFsdWU6IGZ1bmN0aW9uIHJlbmRlclZhbHVlKGRhdGEpIHsKCiAgICAgICAgLy8gQ3JlYXRlIGFuIGFwcHJvcHJpYXRlIENSUyBPYmplY3QgaWYgc3BlY2lmaWVkCgogICAgICAgIGlmIChkYXRhICYmIGRhdGEub3B0aW9ucyAmJiBkYXRhLm9wdGlvbnMuY3JzKSB7CiAgICAgICAgICBkYXRhLm9wdGlvbnMuY3JzID0gKDAsIF9jcnNfdXRpbHMuZ2V0Q1JTKShkYXRhLm9wdGlvbnMuY3JzKTsKICAgICAgICB9CgogICAgICAgIC8vIEFzIHBlciBodHRwczovL2dpdGh1Yi5jb20vcnN0dWRpby9sZWFmbGV0L3B1bGwvMjk0I2Rpc2N1c3Npb25fcjc5NTg0ODEwCiAgICAgICAgaWYgKG1hcCkgewogICAgICAgICAgbWFwLnJlbW92ZSgpOwogICAgICAgICAgbWFwID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9KCk7IC8vIHVuZGVmaW5lIG1hcAogICAgICAgIH0KCiAgICAgICAgaWYgKGRhdGEub3B0aW9ucy5tYXBGYWN0b3J5ICYmIHR5cGVvZiBkYXRhLm9wdGlvbnMubWFwRmFjdG9yeSA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgbWFwID0gZGF0YS5vcHRpb25zLm1hcEZhY3RvcnkoZWwsIGRhdGEub3B0aW9ucyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG1hcCA9IF9sZWFmbGV0Mi5kZWZhdWx0Lm1hcChlbCwgZGF0YS5vcHRpb25zKTsKICAgICAgICB9CgogICAgICAgIHByZXZlbnRVbmludGVuZGVkWm9vbU9uU2Nyb2xsKG1hcCk7CgogICAgICAgIC8vIFN0b3JlIHNvbWUgc3RhdGUgaW4gdGhlIG1hcCBvYmplY3QKICAgICAgICBtYXAubGVhZmxldHIgPSB7CiAgICAgICAgICAvLyBIYXMgdGhlIG1hcCBldmVyIHJlbmRlcmVkIHN1Y2Nlc3NmdWxseT8KICAgICAgICAgIGhhc1JlbmRlcmVkOiBmYWxzZSwKICAgICAgICAgIC8vIERhdGEgdG8gYmUgcmVuZGVyZWQgd2hlbiByZXNpemUgaXMgY2FsbGVkIHdpdGggYXJlYSAhPSAwCiAgICAgICAgICBwZW5kaW5nUmVuZGVyRGF0YTogbnVsbAogICAgICAgIH07CgogICAgICAgIC8vIENoZWNrIGlmIHRoZSBtYXAgaXMgcmVuZGVyZWQgc3RhdGljYWxseSAobm8gb3V0cHV0IGJpbmRpbmcpCiAgICAgICAgaWYgKF9odG1sd2lkZ2V0czIuZGVmYXVsdC5zaGlueU1vZGUgJiYgL1xic2hpbnktYm91bmQtb3V0cHV0XGIvLnRlc3QoZWwuY2xhc3NOYW1lKSkgewogICAgICAgICAgKGZ1bmN0aW9uICgpIHsKCiAgICAgICAgICAgIG1hcC5pZCA9IGVsLmlkOwoKICAgICAgICAgICAgLy8gU3RvcmUgdGhlIG1hcCBvbiB0aGUgZWxlbWVudCBzbyB3ZSBjYW4gZmluZCBpdCBsYXRlciBieSBJRAogICAgICAgICAgICAoMCwgX2pxdWVyeTIuZGVmYXVsdCkoZWwpLmRhdGEoImxlYWZsZXQtbWFwIiwgbWFwKTsKCiAgICAgICAgICAgIC8vIFdoZW4gdGhlIG1hcCBpcyBjbGlja2VkLCBzZW5kIHRoZSBjb29yZGluYXRlcyBiYWNrIHRvIHRoZSBhcHAKICAgICAgICAgICAgbWFwLm9uKCJjbGljayIsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgX3NoaW55Mi5kZWZhdWx0Lm9uSW5wdXRDaGFuZ2UobWFwLmlkICsgIl9jbGljayIsIHsKICAgICAgICAgICAgICAgIGxhdDogZS5sYXRsbmcubGF0LAogICAgICAgICAgICAgICAgbG5nOiBlLmxhdGxuZy5sbmcsCiAgICAgICAgICAgICAgICAiLm5vbmNlIjogTWF0aC5yYW5kb20oKSAvLyBGb3JjZSByZWFjdGl2aXR5IGlmIGxhdC9sbmcgaGFzbid0IGNoYW5nZWQKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICB2YXIgZ3JvdXBUaW1lcklkID0gbnVsbDsKCiAgICAgICAgICAgIG1hcC5vbigibW92ZWVuZCIsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgdXBkYXRlQm91bmRzKGUudGFyZ2V0KTsKICAgICAgICAgICAgfSkub24oImxheWVyYWRkIGxheWVycmVtb3ZlIiwgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAvLyBJZiB0aGUgbGF5ZXIgdGhhdCdzIGNvbWluZyBvciBnb2luZyBpcyBhIGdyb3VwIHdlIGNyZWF0ZWQsIHRlbGwKICAgICAgICAgICAgICAvLyB0aGUgc2VydmVyLgogICAgICAgICAgICAgIGlmIChtYXAubGF5ZXJNYW5hZ2VyLmdldEdyb3VwTmFtZUZyb21MYXllckdyb3VwKGUubGF5ZXIpKSB7CiAgICAgICAgICAgICAgICAvLyBCdXQgdG8gYXZvaWQgY2hhdHRpbmVzcywgY29hbGVzY2UgZXZlbnRzCiAgICAgICAgICAgICAgICBpZiAoZ3JvdXBUaW1lcklkKSB7CiAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChncm91cFRpbWVySWQpOwogICAgICAgICAgICAgICAgICBncm91cFRpbWVySWQgPSBudWxsOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZ3JvdXBUaW1lcklkID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgIGdyb3VwVGltZXJJZCA9IG51bGw7CiAgICAgICAgICAgICAgICAgIF9zaGlueTIuZGVmYXVsdC5vbklucHV0Q2hhbmdlKG1hcC5pZCArICJfZ3JvdXBzIiwgbWFwLmxheWVyTWFuYWdlci5nZXRWaXNpYmxlR3JvdXBzKCkpOwogICAgICAgICAgICAgICAgfSwgMTAwKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSkoKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5kb1JlbmRlclZhbHVlKGRhdGEsIG1hcCk7CiAgICAgIH0sCiAgICAgIGRvUmVuZGVyVmFsdWU6IGZ1bmN0aW9uIGRvUmVuZGVyVmFsdWUoZGF0YSwgbWFwKSB7CiAgICAgICAgLy8gTGVhZmxldCBkb2VzIG5vdCBiZWhhdmUgd2VsbCB3aGVuIHlvdSBzZXQgdXAgYSBidW5jaCBvZiBsYXllcnMgd2hlbgogICAgICAgIC8vIHRoZSBtYXAgaXMgbm90IHZpc2libGUgKHdpZHRoL2hlaWdodCA9PSAwKS4gUG9wdXBzIGdldCBtaXNhbGlnbmVkCiAgICAgICAgLy8gcmVsYXRpdmUgdG8gdGhlaXIgb3duaW5nIG1hcmtlcnMsIGFuZCB0aGUgZml0Qm91bmRzIGNhbGN1bGF0aW9ucwogICAgICAgIC8vIGFyZSBvZmYuIFRoZXJlZm9yZSB3ZSB3YWl0IHVudGlsIHRoZSBtYXAgaXMgYWN0dWFsbHkgc2hvd2luZyB0bwogICAgICAgIC8vIHJlbmRlciB0aGUgdmFsdWUgKHdlIHJlbHkgb24gdGhlIHJlc2l6ZSgpIGNhbGxiYWNrIGJlaW5nIGludm9rZWQKICAgICAgICAvLyBhdCB0aGUgYXBwcm9wcmlhdGUgdGltZSkuCiAgICAgICAgLy8KICAgICAgICAvLyBUaGVyZSBtYXkgYmUgYW4gaXNzdWUgd2l0aCBsZWFmbGV0UHJveHkoKSBjYWxscyBiZWluZyBtYWRlIHdoaWxlCiAgICAgICAgLy8gdGhlIG1hcCBpcyBub3QgYmVpbmcgdmlld2VkLS1ub3Qgc3VyZSB3aGF0IHRoZSByaWdodCBzb2x1dGlvbiBpcwogICAgICAgIC8vIHRoZXJlLgogICAgICAgIGlmIChlbC5vZmZzZXRXaWR0aCA9PT0gMCB8fCBlbC5vZmZzZXRIZWlnaHQgPT09IDApIHsKICAgICAgICAgIG1hcC5sZWFmbGV0ci5wZW5kaW5nUmVuZGVyRGF0YSA9IGRhdGE7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIG1hcC5sZWFmbGV0ci5wZW5kaW5nUmVuZGVyRGF0YSA9IG51bGw7CgogICAgICAgIC8vIE1lcmdlIGRhdGEgb3B0aW9ucyBpbnRvIGRlZmF1bHRzCiAgICAgICAgdmFyIG9wdGlvbnMgPSBfanF1ZXJ5Mi5kZWZhdWx0LmV4dGVuZCh7IHpvb21Ub0xpbWl0czogImFsd2F5cyIgfSwgZGF0YS5vcHRpb25zKTsKCiAgICAgICAgaWYgKCFtYXAubGF5ZXJNYW5hZ2VyKSB7CiAgICAgICAgICBtYXAuY29udHJvbHMgPSBuZXcgX2NvbnRyb2xTdG9yZTIuZGVmYXVsdChtYXApOwogICAgICAgICAgbWFwLmxheWVyTWFuYWdlciA9IG5ldyBfbGF5ZXJNYW5hZ2VyMi5kZWZhdWx0KG1hcCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG1hcC5jb250cm9scy5jbGVhcigpOwogICAgICAgICAgbWFwLmxheWVyTWFuYWdlci5jbGVhcigpOwogICAgICAgIH0KCiAgICAgICAgdmFyIGV4cGxpY2l0VmlldyA9IGZhbHNlOwogICAgICAgIGlmIChkYXRhLnNldFZpZXcpIHsKICAgICAgICAgIGV4cGxpY2l0VmlldyA9IHRydWU7CiAgICAgICAgICBtYXAuc2V0Vmlldy5hcHBseShtYXAsIGRhdGEuc2V0Vmlldyk7CiAgICAgICAgfQogICAgICAgIGlmIChkYXRhLmZpdEJvdW5kcykgewogICAgICAgICAgZXhwbGljaXRWaWV3ID0gdHJ1ZTsKICAgICAgICAgIG1ldGhvZHMuZml0Qm91bmRzLmFwcGx5KG1hcCwgZGF0YS5maXRCb3VuZHMpOwogICAgICAgIH0KICAgICAgICBpZiAoZGF0YS5vcHRpb25zLmNlbnRlcikgewogICAgICAgICAgZXhwbGljaXRWaWV3ID0gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgem9vbVRvTGltaXRzIG9wdGlvbiBzYXlzIHRoYXQgdGhlIG1hcCBzaG91bGQgYmUKICAgICAgICAvLyB6b29tZWQgdG8gbWFwIGVsZW1lbnRzLgogICAgICAgIGZ1bmN0aW9uIG5lZWRzWm9vbSgpIHsKICAgICAgICAgIHJldHVybiBvcHRpb25zLnpvb21Ub0xpbWl0cyA9PT0gImFsd2F5cyIgfHwgb3B0aW9ucy56b29tVG9MaW1pdHMgPT09ICJmaXJzdCIgJiYgIW1hcC5sZWFmbGV0ci5oYXNSZW5kZXJlZDsKICAgICAgICB9CgogICAgICAgIGlmICghZXhwbGljaXRWaWV3ICYmIG5lZWRzWm9vbSgpICYmICFtYXAuZ2V0Wm9vbSgpKSB7CiAgICAgICAgICBpZiAoZGF0YS5saW1pdHMgJiYgIV9qcXVlcnkyLmRlZmF1bHQuaXNFbXB0eU9iamVjdChkYXRhLmxpbWl0cykpIHsKICAgICAgICAgICAgLy8gVXNlIHRoZSBuYXR1cmFsIGxpbWl0cyBvZiB3aGF0J3MgYmVpbmcgZHJhd24gb24gdGhlIG1hcAogICAgICAgICAgICAvLyBJZiB0aGUgc2l6ZSBvZiB0aGUgYm91bmRpbmcgYm94IGlzIDAsIGxlYWZsZXQgZ2V0cyBhbGwgd2VpcmQKICAgICAgICAgICAgdmFyIHBhZCA9IDAuMDA2OwogICAgICAgICAgICBpZiAoZGF0YS5saW1pdHMubGF0WzBdID09PSBkYXRhLmxpbWl0cy5sYXRbMV0pIHsKICAgICAgICAgICAgICBkYXRhLmxpbWl0cy5sYXRbMF0gPSBkYXRhLmxpbWl0cy5sYXRbMF0gLSBwYWQ7CiAgICAgICAgICAgICAgZGF0YS5saW1pdHMubGF0WzFdID0gZGF0YS5saW1pdHMubGF0WzFdICsgcGFkOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChkYXRhLmxpbWl0cy5sbmdbMF0gPT09IGRhdGEubGltaXRzLmxuZ1sxXSkgewogICAgICAgICAgICAgIGRhdGEubGltaXRzLmxuZ1swXSA9IGRhdGEubGltaXRzLmxuZ1swXSAtIHBhZDsKICAgICAgICAgICAgICBkYXRhLmxpbWl0cy5sbmdbMV0gPSBkYXRhLmxpbWl0cy5sbmdbMV0gKyBwYWQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbWFwLmZpdEJvdW5kcyhbW2RhdGEubGltaXRzLmxhdFswXSwgZGF0YS5saW1pdHMubG5nWzBdXSwgW2RhdGEubGltaXRzLmxhdFsxXSwgZGF0YS5saW1pdHMubG5nWzFdXV0pOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbWFwLmZpdFdvcmxkKCk7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmb3IgKHZhciBpID0gMDsgZGF0YS5jYWxscyAmJiBpIDwgZGF0YS5jYWxscy5sZW5ndGg7IGkrKykgewogICAgICAgICAgdmFyIGNhbGwgPSBkYXRhLmNhbGxzW2ldOwogICAgICAgICAgaWYgKG1ldGhvZHNbY2FsbC5tZXRob2RdKSBtZXRob2RzW2NhbGwubWV0aG9kXS5hcHBseShtYXAsIGNhbGwuYXJncyk7ZWxzZSAoMCwgX3V0aWwubG9nKSgiVW5rbm93biBtZXRob2QgIiArIGNhbGwubWV0aG9kKTsKICAgICAgICB9CgogICAgICAgIG1hcC5sZWFmbGV0ci5oYXNSZW5kZXJlZCA9IHRydWU7CgogICAgICAgIGlmIChfaHRtbHdpZGdldHMyLmRlZmF1bHQuc2hpbnlNb2RlKSB7CiAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdXBkYXRlQm91bmRzKG1hcCk7CiAgICAgICAgICB9LCAxKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHJlc2l6ZTogZnVuY3Rpb24gcmVzaXplKHdpZHRoLCBoZWlnaHQpIHsKICAgICAgICBpZiAobWFwKSB7CiAgICAgICAgICBtYXAuaW52YWxpZGF0ZVNpemUoKTsKICAgICAgICAgIGlmIChtYXAubGVhZmxldHIucGVuZGluZ1JlbmRlckRhdGEpIHsKICAgICAgICAgICAgdGhpcy5kb1JlbmRlclZhbHVlKG1hcC5sZWFmbGV0ci5wZW5kaW5nUmVuZGVyRGF0YSwgbWFwKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCmlmIChfaHRtbHdpZGdldHMyLmRlZmF1bHQuc2hpbnlNb2RlKSB7CiAgX3NoaW55Mi5kZWZhdWx0LmFkZEN1c3RvbU1lc3NhZ2VIYW5kbGVyKCJsZWFmbGV0LWNhbGxzIiwgZnVuY3Rpb24gKGRhdGEpIHsKICAgIHZhciBpZCA9IGRhdGEuaWQ7CiAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CiAgICB2YXIgbWFwID0gZWwgPyAoMCwgX2pxdWVyeTIuZGVmYXVsdCkoZWwpLmRhdGEoImxlYWZsZXQtbWFwIikgOiBudWxsOwogICAgaWYgKCFtYXApIHsKICAgICAgKDAsIF91dGlsLmxvZykoIkNvdWxkbid0IGZpbmQgbWFwIHdpdGggaWQgIiArIGlkKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YS5jYWxscy5sZW5ndGg7IGkrKykgewogICAgICB2YXIgY2FsbCA9IGRhdGEuY2FsbHNbaV07CiAgICAgIGlmIChjYWxsLmRlcGVuZGVuY2llcykgewogICAgICAgIF9zaGlueTIuZGVmYXVsdC5yZW5kZXJEZXBlbmRlbmNpZXMoY2FsbC5kZXBlbmRlbmNpZXMpOwogICAgICB9CiAgICAgIGlmIChtZXRob2RzW2NhbGwubWV0aG9kXSkgbWV0aG9kc1tjYWxsLm1ldGhvZF0uYXBwbHkobWFwLCBjYWxsLmFyZ3MpO2Vsc2UgKDAsIF91dGlsLmxvZykoIlVua25vd24gbWV0aG9kICIgKyBjYWxsLm1ldGhvZCk7CiAgICB9CiAgfSk7Cn0KCgp9LHsiLi9jbHVzdGVyLWxheWVyLXN0b3JlIjoxLCIuL2NvbnRyb2wtc3RvcmUiOjIsIi4vY3JzX3V0aWxzIjozLCIuL2RhdGFmcmFtZSI6NCwiLi9maXh1cC1kZWZhdWx0LWljb24iOjUsIi4vZ2xvYmFsL2h0bWx3aWRnZXRzIjo2LCIuL2dsb2JhbC9qcXVlcnkiOjcsIi4vZ2xvYmFsL2xlYWZsZXQiOjgsIi4vZ2xvYmFsL3NoaW55IjoxMCwiLi9sYXllci1tYW5hZ2VyIjoxMiwiLi9tZXRob2RzIjoxMywiLi91dGlsIjoxNX1dLDEyOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKGZ1bmN0aW9uIChnbG9iYWwpewoidXNlIHN0cmljdCI7CgpPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgIl9fZXNNb2R1bGUiLCB7CiAgdmFsdWU6IHRydWUKfSk7Cgp2YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKCJ2YWx1ZSIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTsKCnZhciBfanF1ZXJ5ID0gcmVxdWlyZSgiLi9nbG9iYWwvanF1ZXJ5Iik7Cgp2YXIgX2pxdWVyeTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9qcXVlcnkpOwoKdmFyIF9sZWFmbGV0ID0gcmVxdWlyZSgiLi9nbG9iYWwvbGVhZmxldCIpOwoKdmFyIF9sZWFmbGV0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2xlYWZsZXQpOwoKdmFyIF91dGlsID0gcmVxdWlyZSgiLi91dGlsIik7CgpmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfQoKZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKTsgfSB9Cgp2YXIgTGF5ZXJNYW5hZ2VyID0gZnVuY3Rpb24gKCkgewogIGZ1bmN0aW9uIExheWVyTWFuYWdlcihtYXApIHsKICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBMYXllck1hbmFnZXIpOwoKICAgIHRoaXMuX21hcCA9IG1hcDsKCiAgICAvLyBCRUdJTiBsYXllciBpbmRpY2VzCgogICAgLy8gezxncm91cG5hbWU+OiB7PHN0YW1wPjogbGF5ZXJ9fQogICAgdGhpcy5fYnlHcm91cCA9IHt9OwogICAgLy8gezxjYXRlZ29yeU5hbWU+OiB7PHN0YW1wPjogbGF5ZXJ9fQogICAgdGhpcy5fYnlDYXRlZ29yeSA9IHt9OwogICAgLy8gezxjYXRlZ29yeU5hbWVfbGF5ZXJJZD46IGxheWVyfQogICAgdGhpcy5fYnlMYXllcklkID0ge307CiAgICAvLyB7PHN0YW1wPjogewogICAgLy8gICAgICAgICAgICAgImdyb3VwIjogPGdyb3VwbmFtZT4sCiAgICAvLyAgICAgICAgICAgICAibGF5ZXJJZCI6IDxsYXllcklkPiwKICAgIC8vICAgICAgICAgICAgICJjYXRlZ29yeSI6IDxjYXRlZ29yeT4sCiAgICAvLyAgICAgICAgICAgICAiY29udGFpbmVyIjogPGNvbnRhaW5lcj4KICAgIC8vICAgICAgICAgICB9CiAgICAvLyB9CiAgICB0aGlzLl9ieVN0YW1wID0ge307CiAgICAvLyB7PGNyb3NzdGFsa0dyb3VwTmFtZT46IHs8a2V5PjogWzxzdGFtcD4sIDxzdGFtcD4sIC4uLl0sIC4uLn19CiAgICB0aGlzLl9ieUNyb3NzdGFsa0dyb3VwID0ge307CgogICAgLy8gRU5EIGxheWVyIGluZGljZXMKCiAgICAvLyB7PGNhdGVnb3J5TmFtZT46IEwubGF5ZXJHcm91cH0KICAgIHRoaXMuX2NhdGVnb3J5Q29udGFpbmVycyA9IHt9OwogICAgLy8gezxncm91cE5hbWU+OiBMLmxheWVyR3JvdXB9CiAgICB0aGlzLl9ncm91cENvbnRhaW5lcnMgPSB7fTsKICB9CgogIF9jcmVhdGVDbGFzcyhMYXllck1hbmFnZXIsIFt7CiAgICBrZXk6ICJhZGRMYXllciIsCiAgICB2YWx1ZTogZnVuY3Rpb24gYWRkTGF5ZXIobGF5ZXIsIGNhdGVnb3J5LCBsYXllcklkLCBncm91cCwgY3RHcm91cCwgY3RLZXkpIHsKICAgICAgdmFyIF90aGlzID0gdGhpczsKCiAgICAgIC8vIFdhcyBhIGdyb3VwIHByb3ZpZGVkPwogICAgICB2YXIgaGFzSWQgPSB0eXBlb2YgbGF5ZXJJZCA9PT0gInN0cmluZyI7CiAgICAgIHZhciBncm91cGVkID0gdHlwZW9mIGdyb3VwID09PSAic3RyaW5nIjsKCiAgICAgIHZhciBzdGFtcCA9IF9sZWFmbGV0Mi5kZWZhdWx0LlV0aWwuc3RhbXAobGF5ZXIpOwoKICAgICAgLy8gVGhpcyB3aWxsIGJlIHRoZSBkZWZhdWx0IGxheWVyIGdyb3VwIHRvIGFkZCB0aGUgbGF5ZXIgdG8uCiAgICAgIC8vIFdlIG1heSBvdmVyd3JpdGUgdGhpcyBsZXQgYmVmb3JlIHVzaW5nIGl0IChpLmUuIGlmIGEgZ3JvdXAgaXMgYXNzaWduZWQpLgogICAgICAvLyBUaGlzIG9uZSBsaW5lciBjcmVhdGVzIHRoZSBfY2F0ZWdvcnlDb250YWluZXJzW2NhdGVnb3J5XSBlbnRyeSBpZiBpdAogICAgICAvLyBkb2Vzbid0IGFscmVhZHkgZXhpc3QuCiAgICAgIHZhciBjb250YWluZXIgPSB0aGlzLl9jYXRlZ29yeUNvbnRhaW5lcnNbY2F0ZWdvcnldID0gdGhpcy5fY2F0ZWdvcnlDb250YWluZXJzW2NhdGVnb3J5XSB8fCBfbGVhZmxldDIuZGVmYXVsdC5sYXllckdyb3VwKCkuYWRkVG8odGhpcy5fbWFwKTsKCiAgICAgIHZhciBvbGRMYXllciA9IG51bGw7CiAgICAgIGlmIChoYXNJZCkgewogICAgICAgIC8vIEZpcnN0LCByZW1vdmUgYW55IGxheWVyIHdpdGggdGhlIHNhbWUgY2F0ZWdvcnkgYW5kIGxheWVySWQKICAgICAgICB2YXIgcHJlZml4ZWRMYXllcklkID0gdGhpcy5fbGF5ZXJJZEtleShjYXRlZ29yeSwgbGF5ZXJJZCk7CiAgICAgICAgb2xkTGF5ZXIgPSB0aGlzLl9ieUxheWVySWRbcHJlZml4ZWRMYXllcklkXTsKICAgICAgICBpZiAob2xkTGF5ZXIpIHsKICAgICAgICAgIHRoaXMuX3JlbW92ZUxheWVyKG9sZExheWVyKTsKICAgICAgICB9CgogICAgICAgIC8vIFVwZGF0ZSBsYXllcklkIGluZGV4CiAgICAgICAgdGhpcy5fYnlMYXllcklkW3ByZWZpeGVkTGF5ZXJJZF0gPSBsYXllcjsKICAgICAgfQoKICAgICAgLy8gVXBkYXRlIGdyb3VwIGluZGV4CiAgICAgIGlmIChncm91cGVkKSB7CiAgICAgICAgdGhpcy5fYnlHcm91cFtncm91cF0gPSB0aGlzLl9ieUdyb3VwW2dyb3VwXSB8fCB7fTsKICAgICAgICB0aGlzLl9ieUdyb3VwW2dyb3VwXVtzdGFtcF0gPSBsYXllcjsKCiAgICAgICAgLy8gU2luY2UgYSBncm91cCBpcyBhc3NpZ25lZCwgZG9uJ3QgYWRkIHRoZSBsYXllciB0byB0aGUgY2F0ZWdvcnkncyBsYXllcgogICAgICAgIC8vIGdyb3VwOyBpbnN0ZWFkLCB1c2UgdGhlIGdyb3VwJ3MgbGF5ZXIgZ3JvdXAuCiAgICAgICAgLy8gVGhpcyBvbmUgbGluZXIgY3JlYXRlcyB0aGUgX2dyb3VwQ29udGFpbmVyc1tncm91cF0gZW50cnkgaWYgaXQgZG9lc24ndAogICAgICAgIC8vIGFscmVhZHkgZXhpc3QuCiAgICAgICAgY29udGFpbmVyID0gdGhpcy5nZXRMYXllckdyb3VwKGdyb3VwLCB0cnVlKTsKICAgICAgfQoKICAgICAgLy8gVXBkYXRlIGNhdGVnb3J5IGluZGV4CiAgICAgIHRoaXMuX2J5Q2F0ZWdvcnlbY2F0ZWdvcnldID0gdGhpcy5fYnlDYXRlZ29yeVtjYXRlZ29yeV0gfHwge307CiAgICAgIHRoaXMuX2J5Q2F0ZWdvcnlbY2F0ZWdvcnldW3N0YW1wXSA9IGxheWVyOwoKICAgICAgLy8gVXBkYXRlIHN0YW1wIGluZGV4CiAgICAgIHZhciBsYXllckluZm8gPSB0aGlzLl9ieVN0YW1wW3N0YW1wXSA9IHsKICAgICAgICBsYXllcjogbGF5ZXIsCiAgICAgICAgZ3JvdXA6IGdyb3VwLAogICAgICAgIGN0R3JvdXA6IGN0R3JvdXAsCiAgICAgICAgY3RLZXk6IGN0S2V5LAogICAgICAgIGxheWVySWQ6IGxheWVySWQsCiAgICAgICAgY2F0ZWdvcnk6IGNhdGVnb3J5LAogICAgICAgIGNvbnRhaW5lcjogY29udGFpbmVyLAogICAgICAgIGhpZGRlbjogZmFsc2UKICAgICAgfTsKCiAgICAgIC8vIFVwZGF0ZSBjcm9zc3RhbGsgZ3JvdXAgaW5kZXgKICAgICAgaWYgKGN0R3JvdXApIHsKICAgICAgICAoZnVuY3Rpb24gKCkgewogICAgICAgICAgaWYgKGxheWVyLnNldFN0eWxlKSB7CiAgICAgICAgICAgIC8vIE5lZWQgdG8gc2F2ZSB0aGlzIGluZm8gc28gd2Uga25vdyB3aGF0IHRvIHNldCBvcGFjaXR5IHRvIGxhdGVyCiAgICAgICAgICAgIGxheWVyLm9wdGlvbnMub3JpZ09wYWNpdHkgPSB0eXBlb2YgbGF5ZXIub3B0aW9ucy5vcGFjaXR5ICE9PSAidW5kZWZpbmVkIiA/IGxheWVyLm9wdGlvbnMub3BhY2l0eSA6IDAuNTsKICAgICAgICAgICAgbGF5ZXIub3B0aW9ucy5vcmlnRmlsbE9wYWNpdHkgPSB0eXBlb2YgbGF5ZXIub3B0aW9ucy5maWxsT3BhY2l0eSAhPT0gInVuZGVmaW5lZCIgPyBsYXllci5vcHRpb25zLmZpbGxPcGFjaXR5IDogMC4yOwogICAgICAgICAgfQoKICAgICAgICAgIHZhciBjdGcgPSBfdGhpcy5fYnlDcm9zc3RhbGtHcm91cFtjdEdyb3VwXTsKICAgICAgICAgIGlmICghY3RnKSB7CiAgICAgICAgICAgIChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgY3RnID0gX3RoaXMuX2J5Q3Jvc3N0YWxrR3JvdXBbY3RHcm91cF0gPSB7fTsKICAgICAgICAgICAgICB2YXIgY3Jvc3N0YWxrID0gZ2xvYmFsLmNyb3NzdGFsazsKCiAgICAgICAgICAgICAgdmFyIGhhbmRsZUZpbHRlciA9IGZ1bmN0aW9uIGhhbmRsZUZpbHRlcihlKSB7CiAgICAgICAgICAgICAgICBpZiAoIWUudmFsdWUpIHsKICAgICAgICAgICAgICAgICAgdmFyIGdyb3VwS2V5cyA9IE9iamVjdC5rZXlzKGN0Zyk7CiAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JvdXBLZXlzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGtleSA9IGdyb3VwS2V5c1tpXTsKICAgICAgICAgICAgICAgICAgICB2YXIgX2xheWVySW5mbyA9IF90aGlzLl9ieVN0YW1wW2N0Z1trZXldXTsKICAgICAgICAgICAgICAgICAgICBfdGhpcy5fc2V0VmlzaWJpbGl0eShfbGF5ZXJJbmZvLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgdmFyIHNlbGVjdGVkS2V5cyA9IHt9OwogICAgICAgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgZS52YWx1ZS5sZW5ndGg7IF9pKyspIHsKICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEtleXNbZS52YWx1ZVtfaV1dID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB2YXIgX2dyb3VwS2V5cyA9IE9iamVjdC5rZXlzKGN0Zyk7CiAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IF9ncm91cEtleXMubGVuZ3RoOyBfaTIrKykgewogICAgICAgICAgICAgICAgICAgIHZhciBfa2V5ID0gX2dyb3VwS2V5c1tfaTJdOwogICAgICAgICAgICAgICAgICAgIHZhciBfbGF5ZXJJbmZvMiA9IF90aGlzLl9ieVN0YW1wW2N0Z1tfa2V5XV07CiAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3NldFZpc2liaWxpdHkoX2xheWVySW5mbzIsIHNlbGVjdGVkS2V5c1tfZ3JvdXBLZXlzW19pMl1dKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgdmFyIGZpbHRlckhhbmRsZSA9IG5ldyBjcm9zc3RhbGsuRmlsdGVySGFuZGxlKGN0R3JvdXApOwogICAgICAgICAgICAgIGZpbHRlckhhbmRsZS5vbigiY2hhbmdlIiwgaGFuZGxlRmlsdGVyKTsKCiAgICAgICAgICAgICAgdmFyIGhhbmRsZVNlbGVjdGlvbiA9IGZ1bmN0aW9uIGhhbmRsZVNlbGVjdGlvbihlKSB7CiAgICAgICAgICAgICAgICBpZiAoIWUudmFsdWUgfHwgIWUudmFsdWUubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgIHZhciBncm91cEtleXMgPSBPYmplY3Qua2V5cyhjdGcpOwogICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyb3VwS2V5cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBncm91cEtleXNbaV07CiAgICAgICAgICAgICAgICAgICAgdmFyIF9sYXllckluZm8zID0gX3RoaXMuX2J5U3RhbXBbY3RnW2tleV1dOwogICAgICAgICAgICAgICAgICAgIF90aGlzLl9zZXRPcGFjaXR5KF9sYXllckluZm8zLCAxLjApOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICB2YXIgc2VsZWN0ZWRLZXlzID0ge307CiAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9pMyA9IDA7IF9pMyA8IGUudmFsdWUubGVuZ3RoOyBfaTMrKykgewogICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkS2V5c1tlLnZhbHVlW19pM11dID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB2YXIgX2dyb3VwS2V5czIgPSBPYmplY3Qua2V5cyhjdGcpOwogICAgICAgICAgICAgICAgICBmb3IgKHZhciBfaTQgPSAwOyBfaTQgPCBfZ3JvdXBLZXlzMi5sZW5ndGg7IF9pNCsrKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIF9rZXkyID0gX2dyb3VwS2V5czJbX2k0XTsKICAgICAgICAgICAgICAgICAgICB2YXIgX2xheWVySW5mbzQgPSBfdGhpcy5fYnlTdGFtcFtjdGdbX2tleTJdXTsKICAgICAgICAgICAgICAgICAgICBfdGhpcy5fc2V0T3BhY2l0eShfbGF5ZXJJbmZvNCwgc2VsZWN0ZWRLZXlzW19ncm91cEtleXMyW19pNF1dID8gMS4wIDogMC4yKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgdmFyIHNlbEhhbmRsZSA9IG5ldyBjcm9zc3RhbGsuU2VsZWN0aW9uSGFuZGxlKGN0R3JvdXApOwogICAgICAgICAgICAgIHNlbEhhbmRsZS5vbigiY2hhbmdlIiwgaGFuZGxlU2VsZWN0aW9uKTsKCiAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICBoYW5kbGVGaWx0ZXIoeyB2YWx1ZTogZmlsdGVySGFuZGxlLmZpbHRlcmVkS2V5cyB9KTsKICAgICAgICAgICAgICAgIGhhbmRsZVNlbGVjdGlvbih7IHZhbHVlOiBzZWxIYW5kbGUudmFsdWUgfSk7CiAgICAgICAgICAgICAgfSwgMTAwKTsKICAgICAgICAgICAgfSkoKTsKICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoIWN0Z1tjdEtleV0pIGN0Z1tjdEtleV0gPSBbXTsKICAgICAgICAgIGN0Z1tjdEtleV0ucHVzaChzdGFtcCk7CiAgICAgICAgfSkoKTsKICAgICAgfQoKICAgICAgLy8gQWRkIHRvIGNvbnRhaW5lcgogICAgICBpZiAoIWxheWVySW5mby5oaWRkZW4pIGNvbnRhaW5lci5hZGRMYXllcihsYXllcik7CgogICAgICByZXR1cm4gb2xkTGF5ZXI7CiAgICB9CiAgfSwgewogICAga2V5OiAiYnJ1c2giLAogICAgdmFsdWU6IGZ1bmN0aW9uIGJydXNoKGJvdW5kcywgZXh0cmFJbmZvKSB7CiAgICAgIHZhciBfdGhpczIgPSB0aGlzOwoKICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqLwoKICAgICAgLy8gRm9yIGVhY2ggQ3Jvc3N0YWxrIGdyb3VwLi4uCiAgICAgIE9iamVjdC5rZXlzKHRoaXMuX2J5Q3Jvc3N0YWxrR3JvdXApLmZvckVhY2goZnVuY3Rpb24gKGN0R3JvdXBOYW1lKSB7CiAgICAgICAgdmFyIGN0ZyA9IF90aGlzMi5fYnlDcm9zc3RhbGtHcm91cFtjdEdyb3VwTmFtZV07CiAgICAgICAgdmFyIHNlbGVjdGlvbiA9IFtdOwogICAgICAgIC8vIC4uLml0ZXJhdGUgb3ZlciBlYWNoIENyb3NzdGFsayBrZXkgKGVhY2ggb2Ygd2hpY2ggbWF5IGhhdmUgbXVsdGlwbGUKICAgICAgICAvLyBsYXllcnMpLi4uCiAgICAgICAgT2JqZWN0LmtleXMoY3RnKS5mb3JFYWNoKGZ1bmN0aW9uIChjdEtleSkgewogICAgICAgICAgLy8gLi4uYW5kIGZvciBlYWNoIGxheWVyLi4uCiAgICAgICAgICBjdGdbY3RLZXldLmZvckVhY2goZnVuY3Rpb24gKHN0YW1wKSB7CiAgICAgICAgICAgIHZhciBsYXllckluZm8gPSBfdGhpczIuX2J5U3RhbXBbc3RhbXBdOwogICAgICAgICAgICAvLyAuLi5pZiBpdCdzIHNvbWV0aGluZyB3aXRoIGEgcG9pbnQuLi4KICAgICAgICAgICAgaWYgKGxheWVySW5mby5sYXllci5nZXRMYXRMbmcpIHsKICAgICAgICAgICAgICAvLyAuLi4gYW5kIGl0J3MgaW5zaWRlIHRoZSBzZWxlY3Rpb24gYm91bmRzLi4uCiAgICAgICAgICAgICAgLy8gVE9ETzogVXNlIHBpeGVsIGNvbnRhaW5tZW50LCBub3QgbGF0L2xuZyBjb250YWlubWVudAogICAgICAgICAgICAgIGlmIChib3VuZHMuY29udGFpbnMobGF5ZXJJbmZvLmxheWVyLmdldExhdExuZygpKSkgewogICAgICAgICAgICAgICAgLy8gLi4uYWRkIHRoZSBrZXkgdG8gdGhlIHNlbGVjdGlvbi4KICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5wdXNoKGN0S2V5KTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgICAgIG5ldyBnbG9iYWwuY3Jvc3N0YWxrLlNlbGVjdGlvbkhhbmRsZShjdEdyb3VwTmFtZSkuc2V0KHNlbGVjdGlvbiwgZXh0cmFJbmZvKTsKICAgICAgfSk7CiAgICB9CiAgfSwgewogICAga2V5OiAidW5icnVzaCIsCiAgICB2YWx1ZTogZnVuY3Rpb24gdW5icnVzaChleHRyYUluZm8pIHsKICAgICAgT2JqZWN0LmtleXModGhpcy5fYnlDcm9zc3RhbGtHcm91cCkuZm9yRWFjaChmdW5jdGlvbiAoY3RHcm91cE5hbWUpIHsKICAgICAgICBuZXcgZ2xvYmFsLmNyb3NzdGFsay5TZWxlY3Rpb25IYW5kbGUoY3RHcm91cE5hbWUpLmNsZWFyKGV4dHJhSW5mbyk7CiAgICAgIH0pOwogICAgfQogIH0sIHsKICAgIGtleTogIl9zZXRWaXNpYmlsaXR5IiwKICAgIHZhbHVlOiBmdW5jdGlvbiBfc2V0VmlzaWJpbGl0eShsYXllckluZm8sIHZpc2libGUpIHsKICAgICAgaWYgKGxheWVySW5mby5oaWRkZW4gXiB2aXNpYmxlKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9IGVsc2UgaWYgKHZpc2libGUpIHsKICAgICAgICBsYXllckluZm8uY29udGFpbmVyLmFkZExheWVyKGxheWVySW5mby5sYXllcik7CiAgICAgICAgbGF5ZXJJbmZvLmhpZGRlbiA9IGZhbHNlOwogICAgICB9IGVsc2UgewogICAgICAgIGxheWVySW5mby5jb250YWluZXIucmVtb3ZlTGF5ZXIobGF5ZXJJbmZvLmxheWVyKTsKICAgICAgICBsYXllckluZm8uaGlkZGVuID0gdHJ1ZTsKICAgICAgfQogICAgfQogIH0sIHsKICAgIGtleTogIl9zZXRPcGFjaXR5IiwKICAgIHZhbHVlOiBmdW5jdGlvbiBfc2V0T3BhY2l0eShsYXllckluZm8sIG9wYWNpdHkpIHsKICAgICAgaWYgKGxheWVySW5mby5sYXllci5zZXRPcGFjaXR5KSB7CiAgICAgICAgbGF5ZXJJbmZvLmxheWVyLnNldE9wYWNpdHkob3BhY2l0eSk7CiAgICAgIH0gZWxzZSBpZiAobGF5ZXJJbmZvLmxheWVyLnNldFN0eWxlKSB7CiAgICAgICAgbGF5ZXJJbmZvLmxheWVyLnNldFN0eWxlKHsKICAgICAgICAgIG9wYWNpdHk6IG9wYWNpdHkgKiBsYXllckluZm8ubGF5ZXIub3B0aW9ucy5vcmlnT3BhY2l0eSwKICAgICAgICAgIGZpbGxPcGFjaXR5OiBvcGFjaXR5ICogbGF5ZXJJbmZvLmxheWVyLm9wdGlvbnMub3JpZ0ZpbGxPcGFjaXR5CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICB9LCB7CiAgICBrZXk6ICJnZXRMYXllciIsCiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0TGF5ZXIoY2F0ZWdvcnksIGxheWVySWQpIHsKICAgICAgcmV0dXJuIHRoaXMuX2J5TGF5ZXJJZFt0aGlzLl9sYXllcklkS2V5KGNhdGVnb3J5LCBsYXllcklkKV07CiAgICB9CiAgfSwgewogICAga2V5OiAicmVtb3ZlTGF5ZXIiLAogICAgdmFsdWU6IGZ1bmN0aW9uIHJlbW92ZUxheWVyKGNhdGVnb3J5LCBsYXllcklkcykgewogICAgICB2YXIgX3RoaXMzID0gdGhpczsKCiAgICAgIC8vIEZpbmQgbGF5ZXIgaW5mbwogICAgICBfanF1ZXJ5Mi5kZWZhdWx0LmVhY2goKDAsIF91dGlsLmFzQXJyYXkpKGxheWVySWRzKSwgZnVuY3Rpb24gKGksIGxheWVySWQpIHsKICAgICAgICB2YXIgbGF5ZXIgPSBfdGhpczMuX2J5TGF5ZXJJZFtfdGhpczMuX2xheWVySWRLZXkoY2F0ZWdvcnksIGxheWVySWQpXTsKICAgICAgICBpZiAobGF5ZXIpIHsKICAgICAgICAgIF90aGlzMy5fcmVtb3ZlTGF5ZXIobGF5ZXIpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgfSwgewogICAga2V5OiAiY2xlYXJMYXllcnMiLAogICAgdmFsdWU6IGZ1bmN0aW9uIGNsZWFyTGF5ZXJzKGNhdGVnb3J5KSB7CiAgICAgIHZhciBfdGhpczQgPSB0aGlzOwoKICAgICAgLy8gRmluZCBhbGwgbGF5ZXJzIGluIF9ieUNhdGVnb3J5W2NhdGVnb3J5XQogICAgICB2YXIgY2F0VGFibGUgPSB0aGlzLl9ieUNhdGVnb3J5W2NhdGVnb3J5XTsKICAgICAgaWYgKCFjYXRUYWJsZSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQoKICAgICAgLy8gUmVtb3ZlIGFsbCBsYXllcnMuIE1ha2UgY29weSBvZiBrZXlzIHRvIGF2b2lkIG11dGF0aW5nIHRoZSBjb2xsZWN0aW9uCiAgICAgIC8vIGJlaGluZCB0aGUgaXRlcmF0b3IgeW91J3JlIGFjY2Vzc2luZy4KICAgICAgdmFyIHN0YW1wcyA9IFtdOwogICAgICBfanF1ZXJ5Mi5kZWZhdWx0LmVhY2goY2F0VGFibGUsIGZ1bmN0aW9uIChrLCB2KSB7CiAgICAgICAgc3RhbXBzLnB1c2goayk7CiAgICAgIH0pOwogICAgICBfanF1ZXJ5Mi5kZWZhdWx0LmVhY2goc3RhbXBzLCBmdW5jdGlvbiAoaSwgc3RhbXApIHsKICAgICAgICBfdGhpczQuX3JlbW92ZUxheWVyKHN0YW1wKTsKICAgICAgfSk7CiAgICB9CiAgfSwgewogICAga2V5OiAiZ2V0TGF5ZXJHcm91cCIsCiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0TGF5ZXJHcm91cChncm91cCwgZW5zdXJlRXhpc3RzKSB7CiAgICAgIHZhciBnID0gdGhpcy5fZ3JvdXBDb250YWluZXJzW2dyb3VwXTsKICAgICAgaWYgKGVuc3VyZUV4aXN0cyAmJiAhZykgewogICAgICAgIHRoaXMuX2J5R3JvdXBbZ3JvdXBdID0gdGhpcy5fYnlHcm91cFtncm91cF0gfHwge307CiAgICAgICAgZyA9IHRoaXMuX2dyb3VwQ29udGFpbmVyc1tncm91cF0gPSBfbGVhZmxldDIuZGVmYXVsdC5mZWF0dXJlR3JvdXAoKTsKICAgICAgICBnLmdyb3VwbmFtZSA9IGdyb3VwOwogICAgICAgIGcuYWRkVG8odGhpcy5fbWFwKTsKICAgICAgfQogICAgICByZXR1cm4gZzsKICAgIH0KICB9LCB7CiAgICBrZXk6ICJnZXRHcm91cE5hbWVGcm9tTGF5ZXJHcm91cCIsCiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0R3JvdXBOYW1lRnJvbUxheWVyR3JvdXAobGF5ZXJHcm91cCkgewogICAgICByZXR1cm4gbGF5ZXJHcm91cC5ncm91cG5hbWU7CiAgICB9CiAgfSwgewogICAga2V5OiAiZ2V0VmlzaWJsZUdyb3VwcyIsCiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VmlzaWJsZUdyb3VwcygpIHsKICAgICAgdmFyIF90aGlzNSA9IHRoaXM7CgogICAgICB2YXIgcmVzdWx0ID0gW107CiAgICAgIF9qcXVlcnkyLmRlZmF1bHQuZWFjaCh0aGlzLl9ncm91cENvbnRhaW5lcnMsIGZ1bmN0aW9uIChrLCB2KSB7CiAgICAgICAgaWYgKF90aGlzNS5fbWFwLmhhc0xheWVyKHYpKSB7CiAgICAgICAgICByZXN1bHQucHVzaChrKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogIH0sIHsKICAgIGtleTogImNsZWFyR3JvdXAiLAogICAgdmFsdWU6IGZ1bmN0aW9uIGNsZWFyR3JvdXAoZ3JvdXApIHsKICAgICAgdmFyIF90aGlzNiA9IHRoaXM7CgogICAgICAvLyBGaW5kIGFsbCBsYXllcnMgaW4gX2J5R3JvdXBbZ3JvdXBdCiAgICAgIHZhciBncm91cFRhYmxlID0gdGhpcy5fYnlHcm91cFtncm91cF07CiAgICAgIGlmICghZ3JvdXBUYWJsZSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQoKICAgICAgLy8gUmVtb3ZlIGFsbCBsYXllcnMuIE1ha2UgY29weSBvZiBrZXlzIHRvIGF2b2lkIG11dGF0aW5nIHRoZSBjb2xsZWN0aW9uCiAgICAgIC8vIGJlaGluZCB0aGUgaXRlcmF0b3IgeW91J3JlIGFjY2Vzc2luZy4KICAgICAgdmFyIHN0YW1wcyA9IFtdOwogICAgICBfanF1ZXJ5Mi5kZWZhdWx0LmVhY2goZ3JvdXBUYWJsZSwgZnVuY3Rpb24gKGssIHYpIHsKICAgICAgICBzdGFtcHMucHVzaChrKTsKICAgICAgfSk7CiAgICAgIF9qcXVlcnkyLmRlZmF1bHQuZWFjaChzdGFtcHMsIGZ1bmN0aW9uIChpLCBzdGFtcCkgewogICAgICAgIF90aGlzNi5fcmVtb3ZlTGF5ZXIoc3RhbXApOwogICAgICB9KTsKICAgIH0KICB9LCB7CiAgICBrZXk6ICJjbGVhciIsCiAgICB2YWx1ZTogZnVuY3Rpb24gY2xlYXIoKSB7CiAgICAgIGZ1bmN0aW9uIGNsZWFyTGF5ZXJHcm91cChrZXksIGxheWVyR3JvdXApIHsKICAgICAgICBsYXllckdyb3VwLmNsZWFyTGF5ZXJzKCk7CiAgICAgIH0KICAgICAgLy8gQ2xlYXIgYWxsIGluZGljZXMgYW5kIGxheWVyR3JvdXBzCiAgICAgIHRoaXMuX2J5R3JvdXAgPSB7fTsKICAgICAgdGhpcy5fYnlDYXRlZ29yeSA9IHt9OwogICAgICB0aGlzLl9ieUxheWVySWQgPSB7fTsKICAgICAgdGhpcy5fYnlTdGFtcCA9IHt9OwogICAgICB0aGlzLl9ieUNyb3NzdGFsa0dyb3VwID0ge307CiAgICAgIF9qcXVlcnkyLmRlZmF1bHQuZWFjaCh0aGlzLl9jYXRlZ29yeUNvbnRhaW5lcnMsIGNsZWFyTGF5ZXJHcm91cCk7CiAgICAgIHRoaXMuX2NhdGVnb3J5Q29udGFpbmVycyA9IHt9OwogICAgICBfanF1ZXJ5Mi5kZWZhdWx0LmVhY2godGhpcy5fZ3JvdXBDb250YWluZXJzLCBjbGVhckxheWVyR3JvdXApOwogICAgICB0aGlzLl9ncm91cENvbnRhaW5lcnMgPSB7fTsKICAgIH0KICB9LCB7CiAgICBrZXk6ICJfcmVtb3ZlTGF5ZXIiLAogICAgdmFsdWU6IGZ1bmN0aW9uIF9yZW1vdmVMYXllcihsYXllcikgewogICAgICB2YXIgc3RhbXAgPSB2b2lkIDA7CiAgICAgIGlmICh0eXBlb2YgbGF5ZXIgPT09ICJzdHJpbmciKSB7CiAgICAgICAgc3RhbXAgPSBsYXllcjsKICAgICAgfSBlbHNlIHsKICAgICAgICBzdGFtcCA9IF9sZWFmbGV0Mi5kZWZhdWx0LlV0aWwuc3RhbXAobGF5ZXIpOwogICAgICB9CgogICAgICB2YXIgbGF5ZXJJbmZvID0gdGhpcy5fYnlTdGFtcFtzdGFtcF07CiAgICAgIGlmICghbGF5ZXJJbmZvKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CgogICAgICBsYXllckluZm8uY29udGFpbmVyLnJlbW92ZUxheWVyKHN0YW1wKTsKICAgICAgaWYgKHR5cGVvZiBsYXllckluZm8uZ3JvdXAgPT09ICJzdHJpbmciKSB7CiAgICAgICAgZGVsZXRlIHRoaXMuX2J5R3JvdXBbbGF5ZXJJbmZvLmdyb3VwXVtzdGFtcF07CiAgICAgIH0KICAgICAgaWYgKHR5cGVvZiBsYXllckluZm8ubGF5ZXJJZCA9PT0gInN0cmluZyIpIHsKICAgICAgICBkZWxldGUgdGhpcy5fYnlMYXllcklkW3RoaXMuX2xheWVySWRLZXkobGF5ZXJJbmZvLmNhdGVnb3J5LCBsYXllckluZm8ubGF5ZXJJZCldOwogICAgICB9CiAgICAgIGRlbGV0ZSB0aGlzLl9ieUNhdGVnb3J5W2xheWVySW5mby5jYXRlZ29yeV1bc3RhbXBdOwogICAgICBkZWxldGUgdGhpcy5fYnlTdGFtcFtzdGFtcF07CiAgICAgIGlmIChsYXllckluZm8uY3RHcm91cCkgewogICAgICAgIHZhciBjdEdyb3VwID0gdGhpcy5fYnlDcm9zc3RhbGtHcm91cFtsYXllckluZm8uY3RHcm91cF07CiAgICAgICAgdmFyIGxheWVyc0ZvcktleSA9IGN0R3JvdXBbbGF5ZXJJbmZvLmN0S2V5XTsKICAgICAgICB2YXIgaWR4ID0gbGF5ZXJzRm9yS2V5ID8gbGF5ZXJzRm9yS2V5LmluZGV4T2Yoc3RhbXApIDogLTE7CiAgICAgICAgaWYgKGlkeCA+PSAwKSB7CiAgICAgICAgICBpZiAobGF5ZXJzRm9yS2V5Lmxlbmd0aCA9PT0gMSkgewogICAgICAgICAgICBkZWxldGUgY3RHcm91cFtsYXllckluZm8uY3RLZXldOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbGF5ZXJzRm9yS2V5LnNwbGljZShpZHgsIDEpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogIH0sIHsKICAgIGtleTogIl9sYXllcklkS2V5IiwKICAgIHZhbHVlOiBmdW5jdGlvbiBfbGF5ZXJJZEtleShjYXRlZ29yeSwgbGF5ZXJJZCkgewogICAgICByZXR1cm4gY2F0ZWdvcnkgKyAiXG4iICsgbGF5ZXJJZDsKICAgIH0KICB9XSk7CgogIHJldHVybiBMYXllck1hbmFnZXI7Cn0oKTsKCmV4cG9ydHMuZGVmYXVsdCA9IExheWVyTWFuYWdlcjsKCgp9KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbCAhPT0gInVuZGVmaW5lZCIgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gInVuZGVmaW5lZCIgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgPyB3aW5kb3cgOiB7fSkKfSx7Ii4vZ2xvYmFsL2pxdWVyeSI6NywiLi9nbG9iYWwvbGVhZmxldCI6OCwiLi91dGlsIjoxNX1dLDEzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKGZ1bmN0aW9uIChnbG9iYWwpewoidXNlIHN0cmljdCI7CgpPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgIl9fZXNNb2R1bGUiLCB7CiAgdmFsdWU6IHRydWUKfSk7Cgp2YXIgX3R5cGVvZiA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gInN5bWJvbCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgPyAic3ltYm9sIiA6IHR5cGVvZiBvYmo7IH07Cgp2YXIgX2pxdWVyeSA9IHJlcXVpcmUoIi4vZ2xvYmFsL2pxdWVyeSIpOwoKdmFyIF9qcXVlcnkyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfanF1ZXJ5KTsKCnZhciBfbGVhZmxldCA9IHJlcXVpcmUoIi4vZ2xvYmFsL2xlYWZsZXQiKTsKCnZhciBfbGVhZmxldDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9sZWFmbGV0KTsKCnZhciBfc2hpbnkgPSByZXF1aXJlKCIuL2dsb2JhbC9zaGlueSIpOwoKdmFyIF9zaGlueTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zaGlueSk7Cgp2YXIgX2h0bWx3aWRnZXRzID0gcmVxdWlyZSgiLi9nbG9iYWwvaHRtbHdpZGdldHMiKTsKCnZhciBfaHRtbHdpZGdldHMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaHRtbHdpZGdldHMpOwoKdmFyIF91dGlsID0gcmVxdWlyZSgiLi91dGlsIik7Cgp2YXIgX2Nyc191dGlscyA9IHJlcXVpcmUoIi4vY3JzX3V0aWxzIik7Cgp2YXIgX2RhdGFmcmFtZSA9IHJlcXVpcmUoIi4vZGF0YWZyYW1lIik7Cgp2YXIgX2RhdGFmcmFtZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9kYXRhZnJhbWUpOwoKdmFyIF9jbHVzdGVyTGF5ZXJTdG9yZSA9IHJlcXVpcmUoIi4vY2x1c3Rlci1sYXllci1zdG9yZSIpOwoKdmFyIF9jbHVzdGVyTGF5ZXJTdG9yZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jbHVzdGVyTGF5ZXJTdG9yZSk7Cgp2YXIgX21pcG1hcHBlciA9IHJlcXVpcmUoIi4vbWlwbWFwcGVyIik7Cgp2YXIgX21pcG1hcHBlcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9taXBtYXBwZXIpOwoKZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH0KCnZhciBtZXRob2RzID0ge307CmV4cG9ydHMuZGVmYXVsdCA9IG1ldGhvZHM7CgoKZnVuY3Rpb24gbW91c2VIYW5kbGVyKG1hcElkLCBsYXllcklkLCBncm91cCwgZXZlbnROYW1lLCBleHRyYUluZm8pIHsKICByZXR1cm4gZnVuY3Rpb24gKGUpIHsKICAgIGlmICghX2h0bWx3aWRnZXRzMi5kZWZhdWx0LnNoaW55TW9kZSkgcmV0dXJuOwoKICAgIHZhciBldmVudEluZm8gPSBfanF1ZXJ5Mi5kZWZhdWx0LmV4dGVuZCh7CiAgICAgIGlkOiBsYXllcklkLAogICAgICAiLm5vbmNlIjogTWF0aC5yYW5kb20oKSAvLyBmb3JjZSByZWFjdGl2aXR5CiAgICB9LCBncm91cCAhPT0gbnVsbCA/IHsgZ3JvdXA6IGdyb3VwIH0gOiBudWxsLCBlLnRhcmdldC5nZXRMYXRMbmcgPyBlLnRhcmdldC5nZXRMYXRMbmcoKSA6IGUubGF0bG5nLCBleHRyYUluZm8pOwoKICAgIF9zaGlueTIuZGVmYXVsdC5vbklucHV0Q2hhbmdlKG1hcElkICsgIl8iICsgZXZlbnROYW1lLCBldmVudEluZm8pOwogIH07Cn0KCm1ldGhvZHMubW91c2VIYW5kbGVyID0gbW91c2VIYW5kbGVyOwoKbWV0aG9kcy5jbGVhckdyb3VwID0gZnVuY3Rpb24gKGdyb3VwKSB7CiAgdmFyIF90aGlzID0gdGhpczsKCiAgX2pxdWVyeTIuZGVmYXVsdC5lYWNoKCgwLCBfdXRpbC5hc0FycmF5KShncm91cCksIGZ1bmN0aW9uIChpLCB2KSB7CiAgICBfdGhpcy5sYXllck1hbmFnZXIuY2xlYXJHcm91cCh2KTsKICB9KTsKfTsKCm1ldGhvZHMuc2V0VmlldyA9IGZ1bmN0aW9uIChjZW50ZXIsIHpvb20sIG9wdGlvbnMpIHsKICB0aGlzLnNldFZpZXcoY2VudGVyLCB6b29tLCBvcHRpb25zKTsKfTsKCm1ldGhvZHMuZml0Qm91bmRzID0gZnVuY3Rpb24gKGxhdDEsIGxuZzEsIGxhdDIsIGxuZzIpIHsKICB0aGlzLmZpdEJvdW5kcyhbW2xhdDEsIGxuZzFdLCBbbGF0MiwgbG5nMl1dKTsKfTsKCm1ldGhvZHMuc2V0TWF4Qm91bmRzID0gZnVuY3Rpb24gKGxhdDEsIGxuZzEsIGxhdDIsIGxuZzIpIHsKICB0aGlzLnNldE1heEJvdW5kcyhbW2xhdDEsIGxuZzFdLCBbbGF0MiwgbG5nMl1dKTsKfTsKCm1ldGhvZHMuYWRkUG9wdXBzID0gZnVuY3Rpb24gKGxhdCwgbG5nLCBwb3B1cCwgbGF5ZXJJZCwgZ3JvdXAsIG9wdGlvbnMpIHsKICB2YXIgX3RoaXMyID0gdGhpczsKCiAgdmFyIGRmID0gbmV3IF9kYXRhZnJhbWUyLmRlZmF1bHQoKS5jb2woImxhdCIsIGxhdCkuY29sKCJsbmciLCBsbmcpLmNvbCgicG9wdXAiLCBwb3B1cCkuY29sKCJsYXllcklkIiwgbGF5ZXJJZCkuY29sKCJncm91cCIsIGdyb3VwKS5jYmluZChvcHRpb25zKTsKCiAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoaSkgewogICAgaWYgKF9qcXVlcnkyLmRlZmF1bHQuaXNOdW1lcmljKGRmLmdldChpLCAibGF0IikpICYmIF9qcXVlcnkyLmRlZmF1bHQuaXNOdW1lcmljKGRmLmdldChpLCAibG5nIikpKSB7CiAgICAgIChmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIHBvcHVwID0gX2xlYWZsZXQyLmRlZmF1bHQucG9wdXAoZGYuZ2V0KGkpKS5zZXRMYXRMbmcoW2RmLmdldChpLCAibGF0IiksIGRmLmdldChpLCAibG5nIildKS5zZXRDb250ZW50KGRmLmdldChpLCAicG9wdXAiKSk7CiAgICAgICAgdmFyIHRoaXNJZCA9IGRmLmdldChpLCAibGF5ZXJJZCIpOwogICAgICAgIHZhciB0aGlzR3JvdXAgPSBkZi5nZXQoaSwgImdyb3VwIik7CiAgICAgICAgdGhpcy5sYXllck1hbmFnZXIuYWRkTGF5ZXIocG9wdXAsICJwb3B1cCIsIHRoaXNJZCwgdGhpc0dyb3VwKTsKICAgICAgfSkuY2FsbChfdGhpczIpOwogICAgfQogIH07CgogIGZvciAodmFyIGkgPSAwOyBpIDwgZGYubnJvdygpOyBpKyspIHsKICAgIF9sb29wKGkpOwogIH0KfTsKCm1ldGhvZHMucmVtb3ZlUG9wdXAgPSBmdW5jdGlvbiAobGF5ZXJJZCkgewogIHRoaXMubGF5ZXJNYW5hZ2VyLnJlbW92ZUxheWVyKCJwb3B1cCIsIGxheWVySWQpOwp9OwoKbWV0aG9kcy5jbGVhclBvcHVwcyA9IGZ1bmN0aW9uICgpIHsKICB0aGlzLmxheWVyTWFuYWdlci5jbGVhckxheWVycygicG9wdXAiKTsKfTsKCm1ldGhvZHMuYWRkVGlsZXMgPSBmdW5jdGlvbiAodXJsVGVtcGxhdGUsIGxheWVySWQsIGdyb3VwLCBvcHRpb25zKSB7CiAgdGhpcy5sYXllck1hbmFnZXIuYWRkTGF5ZXIoX2xlYWZsZXQyLmRlZmF1bHQudGlsZUxheWVyKHVybFRlbXBsYXRlLCBvcHRpb25zKSwgInRpbGUiLCBsYXllcklkLCBncm91cCk7Cn07CgptZXRob2RzLnJlbW92ZVRpbGVzID0gZnVuY3Rpb24gKGxheWVySWQpIHsKICB0aGlzLmxheWVyTWFuYWdlci5yZW1vdmVMYXllcigidGlsZSIsIGxheWVySWQpOwp9OwoKbWV0aG9kcy5jbGVhclRpbGVzID0gZnVuY3Rpb24gKCkgewogIHRoaXMubGF5ZXJNYW5hZ2VyLmNsZWFyTGF5ZXJzKCJ0aWxlIik7Cn07CgptZXRob2RzLmFkZFdNU1RpbGVzID0gZnVuY3Rpb24gKGJhc2VVcmwsIGxheWVySWQsIGdyb3VwLCBvcHRpb25zKSB7CiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5jcnMpIHsKICAgIG9wdGlvbnMuY3JzID0gKDAsIF9jcnNfdXRpbHMuZ2V0Q1JTKShvcHRpb25zLmNycyk7CiAgfQogIHRoaXMubGF5ZXJNYW5hZ2VyLmFkZExheWVyKF9sZWFmbGV0Mi5kZWZhdWx0LnRpbGVMYXllci53bXMoYmFzZVVybCwgb3B0aW9ucyksICJ0aWxlIiwgbGF5ZXJJZCwgZ3JvdXApOwp9OwoKLy8gR2l2ZW46Ci8vICAge2RhdGE6IFsiYSIsICJiIiwgImMiXSwgaW5kZXg6IFswLCAxLCAwLCAyXX0KLy8gcmV0dXJuczoKLy8gICBbImEiLCAiYiIsICJhIiwgImMiXQpmdW5jdGlvbiB1bnBhY2tTdHJpbmdzKGljb25zZXQpIHsKICBpZiAoIWljb25zZXQpIHsKICAgIHJldHVybiBpY29uc2V0OwogIH0KICBpZiAodHlwZW9mIGljb25zZXQuaW5kZXggPT09ICJ1bmRlZmluZWQiKSB7CiAgICByZXR1cm4gaWNvbnNldDsKICB9CgogIGljb25zZXQuZGF0YSA9ICgwLCBfdXRpbC5hc0FycmF5KShpY29uc2V0LmRhdGEpOwogIGljb25zZXQuaW5kZXggPSAoMCwgX3V0aWwuYXNBcnJheSkoaWNvbnNldC5pbmRleCk7CgogIHJldHVybiBfanF1ZXJ5Mi5kZWZhdWx0Lm1hcChpY29uc2V0LmluZGV4LCBmdW5jdGlvbiAoZSwgaSkgewogICAgcmV0dXJuIGljb25zZXQuZGF0YVtlXTsKICB9KTsKfQoKZnVuY3Rpb24gYWRkTWFya2VycyhtYXAsIGRmLCBncm91cCwgY2x1c3Rlck9wdGlvbnMsIGNsdXN0ZXJJZCwgbWFya2VyRnVuYykgewogIChmdW5jdGlvbiAoKSB7CiAgICB2YXIgX3RoaXMzID0gdGhpczsKCiAgICB2YXIgY2x1c3Rlckdyb3VwID0gdGhpcy5sYXllck1hbmFnZXIuZ2V0TGF5ZXIoImNsdXN0ZXIiLCBjbHVzdGVySWQpLAogICAgICAgIGNsdXN0ZXIgPSBjbHVzdGVyT3B0aW9ucyAhPT0gbnVsbDsKICAgIGlmIChjbHVzdGVyICYmICFjbHVzdGVyR3JvdXApIHsKICAgICAgY2x1c3Rlckdyb3VwID0gX2xlYWZsZXQyLmRlZmF1bHQubWFya2VyQ2x1c3Rlckdyb3VwLmxheWVyU3VwcG9ydChjbHVzdGVyT3B0aW9ucyk7CiAgICAgIGlmIChjbHVzdGVyT3B0aW9ucy5mcmVlemVBdFpvb20pIHsKICAgICAgICB2YXIgZnJlZXplQXRab29tID0gY2x1c3Rlck9wdGlvbnMuZnJlZXplQXRab29tOwogICAgICAgIGRlbGV0ZSBjbHVzdGVyT3B0aW9ucy5mcmVlemVBdFpvb207CiAgICAgICAgY2x1c3Rlckdyb3VwLmZyZWV6ZUF0Wm9vbShmcmVlemVBdFpvb20pOwogICAgICB9CiAgICAgIGNsdXN0ZXJHcm91cC5jbHVzdGVyTGF5ZXJTdG9yZSA9IG5ldyBfY2x1c3RlckxheWVyU3RvcmUyLmRlZmF1bHQoY2x1c3Rlckdyb3VwKTsKICAgIH0KICAgIHZhciBleHRyYUluZm8gPSBjbHVzdGVyID8geyBjbHVzdGVySWQ6IGNsdXN0ZXJJZCB9IDoge307CgogICAgdmFyIF9sb29wMiA9IGZ1bmN0aW9uIF9sb29wMihpKSB7CiAgICAgIGlmIChfanF1ZXJ5Mi5kZWZhdWx0LmlzTnVtZXJpYyhkZi5nZXQoaSwgImxhdCIpKSAmJiBfanF1ZXJ5Mi5kZWZhdWx0LmlzTnVtZXJpYyhkZi5nZXQoaSwgImxuZyIpKSkgewogICAgICAgIChmdW5jdGlvbiAoKSB7CiAgICAgICAgICB2YXIgbWFya2VyID0gbWFya2VyRnVuYyhkZiwgaSk7CiAgICAgICAgICB2YXIgdGhpc0lkID0gZGYuZ2V0KGksICJsYXllcklkIik7CiAgICAgICAgICB2YXIgdGhpc0dyb3VwID0gY2x1c3RlciA/IG51bGwgOiBkZi5nZXQoaSwgImdyb3VwIik7CiAgICAgICAgICBpZiAoY2x1c3RlcikgewogICAgICAgICAgICBjbHVzdGVyR3JvdXAuY2x1c3RlckxheWVyU3RvcmUuYWRkKG1hcmtlciwgdGhpc0lkKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMubGF5ZXJNYW5hZ2VyLmFkZExheWVyKG1hcmtlciwgIm1hcmtlciIsIHRoaXNJZCwgdGhpc0dyb3VwLCBkZi5nZXQoaSwgImN0R3JvdXAiLCB0cnVlKSwgZGYuZ2V0KGksICJjdEtleSIsIHRydWUpKTsKICAgICAgICAgIH0KICAgICAgICAgIHZhciBwb3B1cCA9IGRmLmdldChpLCAicG9wdXAiKTsKICAgICAgICAgIHZhciBwb3B1cE9wdGlvbnMgPSBkZi5nZXQoaSwgInBvcHVwT3B0aW9ucyIpOwogICAgICAgICAgaWYgKHBvcHVwICE9PSBudWxsKSB7CiAgICAgICAgICAgIGlmIChwb3B1cE9wdGlvbnMgIT09IG51bGwpIHsKICAgICAgICAgICAgICBtYXJrZXIuYmluZFBvcHVwKHBvcHVwLCBwb3B1cE9wdGlvbnMpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIG1hcmtlci5iaW5kUG9wdXAocG9wdXApOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgbGFiZWwgPSBkZi5nZXQoaSwgImxhYmVsIik7CiAgICAgICAgICB2YXIgbGFiZWxPcHRpb25zID0gZGYuZ2V0KGksICJsYWJlbE9wdGlvbnMiKTsKICAgICAgICAgIGlmIChsYWJlbCAhPT0gbnVsbCkgewogICAgICAgICAgICBpZiAobGFiZWxPcHRpb25zICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgaWYgKGxhYmVsT3B0aW9ucy5ub0hpZGUpIHsKICAgICAgICAgICAgICAgIG1hcmtlci5iaW5kTGFiZWwobGFiZWwsIGxhYmVsT3B0aW9ucykuc2hvd0xhYmVsKCk7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIG1hcmtlci5iaW5kTGFiZWwobGFiZWwsIGxhYmVsT3B0aW9ucyk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIG1hcmtlci5iaW5kTGFiZWwobGFiZWwpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBtYXJrZXIub24oImNsaWNrIiwgbW91c2VIYW5kbGVyKHRoaXMuaWQsIHRoaXNJZCwgdGhpc0dyb3VwLCAibWFya2VyX2NsaWNrIiwgZXh0cmFJbmZvKSwgdGhpcyk7CiAgICAgICAgICBtYXJrZXIub24oIm1vdXNlb3ZlciIsIG1vdXNlSGFuZGxlcih0aGlzLmlkLCB0aGlzSWQsIHRoaXNHcm91cCwgIm1hcmtlcl9tb3VzZW92ZXIiLCBleHRyYUluZm8pLCB0aGlzKTsKICAgICAgICAgIG1hcmtlci5vbigibW91c2VvdXQiLCBtb3VzZUhhbmRsZXIodGhpcy5pZCwgdGhpc0lkLCB0aGlzR3JvdXAsICJtYXJrZXJfbW91c2VvdXQiLCBleHRyYUluZm8pLCB0aGlzKTsKICAgICAgICB9KS5jYWxsKF90aGlzMyk7CiAgICAgIH0KICAgIH07CgogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZi5ucm93KCk7IGkrKykgewogICAgICBfbG9vcDIoaSk7CiAgICB9CgogICAgaWYgKGNsdXN0ZXIpIHsKICAgICAgdGhpcy5sYXllck1hbmFnZXIuYWRkTGF5ZXIoY2x1c3Rlckdyb3VwLCAiY2x1c3RlciIsIGNsdXN0ZXJJZCwgZ3JvdXApOwogICAgfQogIH0pLmNhbGwobWFwKTsKfQoKbWV0aG9kcy5hZGRHZW5lcmljTWFya2VycyA9IGFkZE1hcmtlcnM7CgptZXRob2RzLmFkZE1hcmtlcnMgPSBmdW5jdGlvbiAobGF0LCBsbmcsIGljb24sIGxheWVySWQsIGdyb3VwLCBvcHRpb25zLCBwb3B1cCwgcG9wdXBPcHRpb25zLCBjbHVzdGVyT3B0aW9ucywgY2x1c3RlcklkLCBsYWJlbCwgbGFiZWxPcHRpb25zLCBjcm9zc3RhbGtPcHRpb25zKSB7CiAgdmFyIGljb25kZiA9IHZvaWQgMDsKICB2YXIgZ2V0SWNvbiA9IHZvaWQgMDsKCiAgaWYgKGljb24pIHsKICAgIC8vIFVucGFjayBpY29ucwogICAgaWNvbi5pY29uVXJsID0gdW5wYWNrU3RyaW5ncyhpY29uLmljb25VcmwpOwogICAgaWNvbi5pY29uUmV0aW5hVXJsID0gdW5wYWNrU3RyaW5ncyhpY29uLmljb25SZXRpbmFVcmwpOwogICAgaWNvbi5zaGFkb3dVcmwgPSB1bnBhY2tTdHJpbmdzKGljb24uc2hhZG93VXJsKTsKICAgIGljb24uc2hhZG93UmV0aW5hVXJsID0gdW5wYWNrU3RyaW5ncyhpY29uLnNoYWRvd1JldGluYVVybCk7CgogICAgLy8gVGhpcyBjYmluZHMgdGhlIGljb24gVVJMcyBhbmQgYW55IG90aGVyIGljb24gb3B0aW9uczsgdGhleSdyZSBhbGwKICAgIC8vIHByZXNlbnQgb24gdGhlIGljb24gb2JqZWN0LgogICAgaWNvbmRmID0gbmV3IF9kYXRhZnJhbWUyLmRlZmF1bHQoKS5jYmluZChpY29uKTsKCiAgICAvLyBDb25zdHJ1Y3RzIGFuIGljb24gZnJvbSBhIHNwZWNpZmllZCByb3cgb2YgdGhlIGljb24gZGF0YWZyYW1lLgogICAgZ2V0SWNvbiA9IGZ1bmN0aW9uIGdldEljb24oaSkgewogICAgICB2YXIgb3B0cyA9IGljb25kZi5nZXQoaSk7CiAgICAgIGlmICghb3B0cy5pY29uVXJsKSB7CiAgICAgICAgcmV0dXJuIG5ldyBfbGVhZmxldDIuZGVmYXVsdC5JY29uLkRlZmF1bHQoKTsKICAgICAgfQoKICAgICAgLy8gQ29tcG9zaXRlIG9wdGlvbnMgKGxpa2UgcG9pbnRzIG9yIHNpemVzKSBhcmUgcGFzc2VkIGZyb20gUiB3aXRoIGVhY2gKICAgICAgLy8gaW5kaXZpZHVhbCBjb21wb25lbnQgYXMgaXRzIG93biBvcHRpb24uIFdlIG5lZWQgdG8gY29tYmluZSB0aGVtIG5vdwogICAgICAvLyBpbnRvIHRoZWlyIGNvbXBvc2l0ZSBmb3JtLgogICAgICBpZiAob3B0cy5pY29uV2lkdGgpIHsKICAgICAgICBvcHRzLmljb25TaXplID0gW29wdHMuaWNvbldpZHRoLCBvcHRzLmljb25IZWlnaHRdOwogICAgICB9CiAgICAgIGlmIChvcHRzLnNoYWRvd1dpZHRoKSB7CiAgICAgICAgb3B0cy5zaGFkb3dTaXplID0gW29wdHMuc2hhZG93V2lkdGgsIG9wdHMuc2hhZG93SGVpZ2h0XTsKICAgICAgfQogICAgICBpZiAob3B0cy5pY29uQW5jaG9yWCkgewogICAgICAgIG9wdHMuaWNvbkFuY2hvciA9IFtvcHRzLmljb25BbmNob3JYLCBvcHRzLmljb25BbmNob3JZXTsKICAgICAgfQogICAgICBpZiAob3B0cy5zaGFkb3dBbmNob3JYKSB7CiAgICAgICAgb3B0cy5zaGFkb3dBbmNob3IgPSBbb3B0cy5zaGFkb3dBbmNob3JYLCBvcHRzLnNoYWRvd0FuY2hvclldOwogICAgICB9CiAgICAgIGlmIChvcHRzLnBvcHVwQW5jaG9yWCkgewogICAgICAgIG9wdHMucG9wdXBBbmNob3IgPSBbb3B0cy5wb3B1cEFuY2hvclgsIG9wdHMucG9wdXBBbmNob3JZXTsKICAgICAgfQoKICAgICAgcmV0dXJuIG5ldyBfbGVhZmxldDIuZGVmYXVsdC5JY29uKG9wdHMpOwogICAgfTsKICB9CgogIGlmICghKF9qcXVlcnkyLmRlZmF1bHQuaXNFbXB0eU9iamVjdChsYXQpIHx8IF9qcXVlcnkyLmRlZmF1bHQuaXNFbXB0eU9iamVjdChsbmcpKSB8fCBfanF1ZXJ5Mi5kZWZhdWx0LmlzTnVtZXJpYyhsYXQpICYmIF9qcXVlcnkyLmRlZmF1bHQuaXNOdW1lcmljKGxuZykpIHsKCiAgICB2YXIgZGYgPSBuZXcgX2RhdGFmcmFtZTIuZGVmYXVsdCgpLmNvbCgibGF0IiwgbGF0KS5jb2woImxuZyIsIGxuZykuY29sKCJsYXllcklkIiwgbGF5ZXJJZCkuY29sKCJncm91cCIsIGdyb3VwKS5jb2woInBvcHVwIiwgcG9wdXApLmNvbCgicG9wdXBPcHRpb25zIiwgcG9wdXBPcHRpb25zKS5jb2woImxhYmVsIiwgbGFiZWwpLmNvbCgibGFiZWxPcHRpb25zIiwgbGFiZWxPcHRpb25zKS5jYmluZChvcHRpb25zKS5jYmluZChjcm9zc3RhbGtPcHRpb25zIHx8IHt9KTsKCiAgICBpZiAoaWNvbikgaWNvbmRmLmVmZmVjdGl2ZUxlbmd0aCA9IGRmLm5yb3coKTsKCiAgICBhZGRNYXJrZXJzKHRoaXMsIGRmLCBncm91cCwgY2x1c3Rlck9wdGlvbnMsIGNsdXN0ZXJJZCwgZnVuY3Rpb24gKGRmLCBpKSB7CiAgICAgIHZhciBvcHRpb25zID0gZGYuZ2V0KGkpOwogICAgICBpZiAoaWNvbikgb3B0aW9ucy5pY29uID0gZ2V0SWNvbihpKTsKICAgICAgcmV0dXJuIF9sZWFmbGV0Mi5kZWZhdWx0Lm1hcmtlcihbZGYuZ2V0KGksICJsYXQiKSwgZGYuZ2V0KGksICJsbmciKV0sIG9wdGlvbnMpOwogICAgfSk7CiAgfQp9OwoKbWV0aG9kcy5hZGRBd2Vzb21lTWFya2VycyA9IGZ1bmN0aW9uIChsYXQsIGxuZywgaWNvbiwgbGF5ZXJJZCwgZ3JvdXAsIG9wdGlvbnMsIHBvcHVwLCBwb3B1cE9wdGlvbnMsIGNsdXN0ZXJPcHRpb25zLCBjbHVzdGVySWQsIGxhYmVsLCBsYWJlbE9wdGlvbnMsIGNyb3NzdGFsa09wdGlvbnMpIHsKICB2YXIgaWNvbmRmID0gdm9pZCAwOwogIHZhciBnZXRJY29uID0gdm9pZCAwOwogIGlmIChpY29uKSB7CgogICAgLy8gVGhpcyBjYmluZHMgdGhlIGljb24gVVJMcyBhbmQgYW55IG90aGVyIGljb24gb3B0aW9uczsgdGhleSdyZSBhbGwKICAgIC8vIHByZXNlbnQgb24gdGhlIGljb24gb2JqZWN0LgogICAgaWNvbmRmID0gbmV3IF9kYXRhZnJhbWUyLmRlZmF1bHQoKS5jYmluZChpY29uKTsKCiAgICAvLyBDb25zdHJ1Y3RzIGFuIGljb24gZnJvbSBhIHNwZWNpZmllZCByb3cgb2YgdGhlIGljb24gZGF0YWZyYW1lLgogICAgZ2V0SWNvbiA9IGZ1bmN0aW9uIGdldEljb24oaSkgewogICAgICB2YXIgb3B0cyA9IGljb25kZi5nZXQoaSk7CiAgICAgIGlmICghb3B0cykgewogICAgICAgIHJldHVybiBuZXcgX2xlYWZsZXQyLmRlZmF1bHQuQXdlc29tZU1hcmtlcnMuaWNvbigpOwogICAgICB9CgogICAgICBpZiAob3B0cy5zcXVhcmVNYXJrZXIpIHsKICAgICAgICBvcHRzLmNsYXNzTmFtZSA9ICJhd2Vzb21lLW1hcmtlciBhd2Vzb21lLW1hcmtlci1zcXVhcmUiOwogICAgICB9CiAgICAgIHJldHVybiBuZXcgX2xlYWZsZXQyLmRlZmF1bHQuQXdlc29tZU1hcmtlcnMuaWNvbihvcHRzKTsKICAgIH07CiAgfQoKICBpZiAoIShfanF1ZXJ5Mi5kZWZhdWx0LmlzRW1wdHlPYmplY3QobGF0KSB8fCBfanF1ZXJ5Mi5kZWZhdWx0LmlzRW1wdHlPYmplY3QobG5nKSkgfHwgX2pxdWVyeTIuZGVmYXVsdC5pc051bWVyaWMobGF0KSAmJiBfanF1ZXJ5Mi5kZWZhdWx0LmlzTnVtZXJpYyhsbmcpKSB7CgogICAgdmFyIGRmID0gbmV3IF9kYXRhZnJhbWUyLmRlZmF1bHQoKS5jb2woImxhdCIsIGxhdCkuY29sKCJsbmciLCBsbmcpLmNvbCgibGF5ZXJJZCIsIGxheWVySWQpLmNvbCgiZ3JvdXAiLCBncm91cCkuY29sKCJwb3B1cCIsIHBvcHVwKS5jb2woInBvcHVwT3B0aW9ucyIsIHBvcHVwT3B0aW9ucykuY29sKCJsYWJlbCIsIGxhYmVsKS5jb2woImxhYmVsT3B0aW9ucyIsIGxhYmVsT3B0aW9ucykuY2JpbmQob3B0aW9ucykuY2JpbmQoY3Jvc3N0YWxrT3B0aW9ucyB8fCB7fSk7CgogICAgaWYgKGljb24pIGljb25kZi5lZmZlY3RpdmVMZW5ndGggPSBkZi5ucm93KCk7CgogICAgYWRkTWFya2Vycyh0aGlzLCBkZiwgZ3JvdXAsIGNsdXN0ZXJPcHRpb25zLCBjbHVzdGVySWQsIGZ1bmN0aW9uIChkZiwgaSkgewogICAgICB2YXIgb3B0aW9ucyA9IGRmLmdldChpKTsKICAgICAgaWYgKGljb24pIG9wdGlvbnMuaWNvbiA9IGdldEljb24oaSk7CiAgICAgIHJldHVybiBfbGVhZmxldDIuZGVmYXVsdC5tYXJrZXIoW2RmLmdldChpLCAibGF0IiksIGRmLmdldChpLCAibG5nIildLCBvcHRpb25zKTsKICAgIH0pOwogIH0KfTsKCmZ1bmN0aW9uIGFkZExheWVycyhtYXAsIGNhdGVnb3J5LCBkZiwgbGF5ZXJGdW5jKSB7CiAgdmFyIF9sb29wMyA9IGZ1bmN0aW9uIF9sb29wMyhpKSB7CiAgICAoZnVuY3Rpb24gKCkgewogICAgICB2YXIgX3RoaXM0ID0gdGhpczsKCiAgICAgIHZhciBsYXllciA9IGxheWVyRnVuYyhkZiwgaSk7CiAgICAgIGlmICghX2pxdWVyeTIuZGVmYXVsdC5pc0VtcHR5T2JqZWN0KGxheWVyKSkgewogICAgICAgIChmdW5jdGlvbiAoKSB7CiAgICAgICAgICB2YXIgdGhpc0lkID0gZGYuZ2V0KGksICJsYXllcklkIik7CiAgICAgICAgICB2YXIgdGhpc0dyb3VwID0gZGYuZ2V0KGksICJncm91cCIpOwogICAgICAgICAgX3RoaXM0LmxheWVyTWFuYWdlci5hZGRMYXllcihsYXllciwgY2F0ZWdvcnksIHRoaXNJZCwgdGhpc0dyb3VwLCBkZi5nZXQoaSwgImN0R3JvdXAiLCB0cnVlKSwgZGYuZ2V0KGksICJjdEtleSIsIHRydWUpKTsKICAgICAgICAgIGlmIChsYXllci5iaW5kUG9wdXApIHsKICAgICAgICAgICAgdmFyIHBvcHVwID0gZGYuZ2V0KGksICJwb3B1cCIpOwogICAgICAgICAgICB2YXIgcG9wdXBPcHRpb25zID0gZGYuZ2V0KGksICJwb3B1cE9wdGlvbnMiKTsKICAgICAgICAgICAgaWYgKHBvcHVwICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgaWYgKHBvcHVwT3B0aW9ucyAhPT0gbnVsbCkgewogICAgICAgICAgICAgICAgbGF5ZXIuYmluZFBvcHVwKHBvcHVwLCBwb3B1cE9wdGlvbnMpOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBsYXllci5iaW5kUG9wdXAocG9wdXApOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKGxheWVyLmJpbmRMYWJlbCkgewogICAgICAgICAgICB2YXIgbGFiZWwgPSBkZi5nZXQoaSwgImxhYmVsIik7CiAgICAgICAgICAgIHZhciBsYWJlbE9wdGlvbnMgPSBkZi5nZXQoaSwgImxhYmVsT3B0aW9ucyIpOwogICAgICAgICAgICBpZiAobGFiZWwgIT09IG51bGwpIHsKICAgICAgICAgICAgICBpZiAobGFiZWxPcHRpb25zICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICBsYXllci5iaW5kTGFiZWwobGFiZWwsIGxhYmVsT3B0aW9ucyk7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGxheWVyLmJpbmRMYWJlbChsYWJlbCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBsYXllci5vbigiY2xpY2siLCBtb3VzZUhhbmRsZXIoX3RoaXM0LmlkLCB0aGlzSWQsIHRoaXNHcm91cCwgY2F0ZWdvcnkgKyAiX2NsaWNrIiksIF90aGlzNCk7CiAgICAgICAgICBsYXllci5vbigibW91c2VvdmVyIiwgbW91c2VIYW5kbGVyKF90aGlzNC5pZCwgdGhpc0lkLCB0aGlzR3JvdXAsIGNhdGVnb3J5ICsgIl9tb3VzZW92ZXIiKSwgX3RoaXM0KTsKICAgICAgICAgIGxheWVyLm9uKCJtb3VzZW91dCIsIG1vdXNlSGFuZGxlcihfdGhpczQuaWQsIHRoaXNJZCwgdGhpc0dyb3VwLCBjYXRlZ29yeSArICJfbW91c2VvdXQiKSwgX3RoaXM0KTsKICAgICAgICAgIHZhciBoaWdobGlnaHRTdHlsZSA9IGRmLmdldChpLCAiaGlnaGxpZ2h0T3B0aW9ucyIpOwoKICAgICAgICAgIGlmICghX2pxdWVyeTIuZGVmYXVsdC5pc0VtcHR5T2JqZWN0KGhpZ2hsaWdodFN0eWxlKSkgewogICAgICAgICAgICAoZnVuY3Rpb24gKCkgewoKICAgICAgICAgICAgICB2YXIgZGVmYXVsdFN0eWxlID0ge307CiAgICAgICAgICAgICAgX2pxdWVyeTIuZGVmYXVsdC5lYWNoKGhpZ2hsaWdodFN0eWxlLCBmdW5jdGlvbiAoaywgdikgewogICAgICAgICAgICAgICAgaWYgKGsgIT0gImJyaW5nVG9Gcm9udCIgJiYgayAhPSAic2VuZFRvQmFjayIpIHsKICAgICAgICAgICAgICAgICAgaWYgKGRmLmdldChpLCBrKSkgewogICAgICAgICAgICAgICAgICAgIGRlZmF1bHRTdHlsZVtrXSA9IGRmLmdldChpLCBrKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICBsYXllci5vbigibW91c2VvdmVyIiwgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgIHRoaXMuc2V0U3R5bGUoaGlnaGxpZ2h0U3R5bGUpOwogICAgICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFN0eWxlLmJyaW5nVG9Gcm9udCkgewogICAgICAgICAgICAgICAgICB0aGlzLmJyaW5nVG9Gcm9udCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIGxheWVyLm9uKCJtb3VzZW91dCIsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICB0aGlzLnNldFN0eWxlKGRlZmF1bHRTdHlsZSk7CiAgICAgICAgICAgICAgICBpZiAoaGlnaGxpZ2h0U3R5bGUuc2VuZFRvQmFjaykgewogICAgICAgICAgICAgICAgICB0aGlzLmJyaW5nVG9CYWNrKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICB9CiAgICAgICAgfSkoKTsKICAgICAgfQogICAgfSkuY2FsbChtYXApOwogIH07CgogIGZvciAodmFyIGkgPSAwOyBpIDwgZGYubnJvdygpOyBpKyspIHsKICAgIF9sb29wMyhpKTsKICB9Cn0KCm1ldGhvZHMuYWRkR2VuZXJpY0xheWVycyA9IGFkZExheWVyczsKCm1ldGhvZHMuYWRkQ2lyY2xlcyA9IGZ1bmN0aW9uIChsYXQsIGxuZywgcmFkaXVzLCBsYXllcklkLCBncm91cCwgb3B0aW9ucywgcG9wdXAsIHBvcHVwT3B0aW9ucywgbGFiZWwsIGxhYmVsT3B0aW9ucywgaGlnaGxpZ2h0T3B0aW9ucywgY3Jvc3N0YWxrT3B0aW9ucykgewogIGlmICghKF9qcXVlcnkyLmRlZmF1bHQuaXNFbXB0eU9iamVjdChsYXQpIHx8IF9qcXVlcnkyLmRlZmF1bHQuaXNFbXB0eU9iamVjdChsbmcpKSB8fCBfanF1ZXJ5Mi5kZWZhdWx0LmlzTnVtZXJpYyhsYXQpICYmIF9qcXVlcnkyLmRlZmF1bHQuaXNOdW1lcmljKGxuZykpIHsKICAgIHZhciBkZiA9IG5ldyBfZGF0YWZyYW1lMi5kZWZhdWx0KCkuY29sKCJsYXQiLCBsYXQpLmNvbCgibG5nIiwgbG5nKS5jb2woInJhZGl1cyIsIHJhZGl1cykuY29sKCJsYXllcklkIiwgbGF5ZXJJZCkuY29sKCJncm91cCIsIGdyb3VwKS5jb2woInBvcHVwIiwgcG9wdXApLmNvbCgicG9wdXBPcHRpb25zIiwgcG9wdXBPcHRpb25zKS5jb2woImxhYmVsIiwgbGFiZWwpLmNvbCgibGFiZWxPcHRpb25zIiwgbGFiZWxPcHRpb25zKS5jb2woImhpZ2hsaWdodE9wdGlvbnMiLCBoaWdobGlnaHRPcHRpb25zKS5jYmluZChvcHRpb25zKS5jYmluZChjcm9zc3RhbGtPcHRpb25zIHx8IHt9KTsKCiAgICBhZGRMYXllcnModGhpcywgInNoYXBlIiwgZGYsIGZ1bmN0aW9uIChkZiwgaSkgewogICAgICBpZiAoX2pxdWVyeTIuZGVmYXVsdC5pc051bWVyaWMoZGYuZ2V0KGksICJsYXQiKSkgJiYgX2pxdWVyeTIuZGVmYXVsdC5pc051bWVyaWMoZGYuZ2V0KGksICJsbmciKSkgJiYgX2pxdWVyeTIuZGVmYXVsdC5pc051bWVyaWMoZGYuZ2V0KGksICJyYWRpdXMiKSkpIHsKICAgICAgICByZXR1cm4gX2xlYWZsZXQyLmRlZmF1bHQuY2lyY2xlKFtkZi5nZXQoaSwgImxhdCIpLCBkZi5nZXQoaSwgImxuZyIpXSwgZGYuZ2V0KGksICJyYWRpdXMiKSwgZGYuZ2V0KGkpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgfSk7CiAgfQp9OwoKbWV0aG9kcy5hZGRDaXJjbGVNYXJrZXJzID0gZnVuY3Rpb24gKGxhdCwgbG5nLCByYWRpdXMsIGxheWVySWQsIGdyb3VwLCBvcHRpb25zLCBjbHVzdGVyT3B0aW9ucywgY2x1c3RlcklkLCBwb3B1cCwgcG9wdXBPcHRpb25zLCBsYWJlbCwgbGFiZWxPcHRpb25zLCBjcm9zc3RhbGtPcHRpb25zKSB7CiAgaWYgKCEoX2pxdWVyeTIuZGVmYXVsdC5pc0VtcHR5T2JqZWN0KGxhdCkgfHwgX2pxdWVyeTIuZGVmYXVsdC5pc0VtcHR5T2JqZWN0KGxuZykpIHx8IF9qcXVlcnkyLmRlZmF1bHQuaXNOdW1lcmljKGxhdCkgJiYgX2pxdWVyeTIuZGVmYXVsdC5pc051bWVyaWMobG5nKSkgewogICAgdmFyIGRmID0gbmV3IF9kYXRhZnJhbWUyLmRlZmF1bHQoKS5jb2woImxhdCIsIGxhdCkuY29sKCJsbmciLCBsbmcpLmNvbCgicmFkaXVzIiwgcmFkaXVzKS5jb2woImxheWVySWQiLCBsYXllcklkKS5jb2woImdyb3VwIiwgZ3JvdXApLmNvbCgicG9wdXAiLCBwb3B1cCkuY29sKCJwb3B1cE9wdGlvbnMiLCBwb3B1cE9wdGlvbnMpLmNvbCgibGFiZWwiLCBsYWJlbCkuY29sKCJsYWJlbE9wdGlvbnMiLCBsYWJlbE9wdGlvbnMpLmNiaW5kKGNyb3NzdGFsa09wdGlvbnMgfHwge30pLmNiaW5kKG9wdGlvbnMpOwoKICAgIGFkZE1hcmtlcnModGhpcywgZGYsIGdyb3VwLCBjbHVzdGVyT3B0aW9ucywgY2x1c3RlcklkLCBmdW5jdGlvbiAoZGYsIGkpIHsKICAgICAgcmV0dXJuIF9sZWFmbGV0Mi5kZWZhdWx0LmNpcmNsZU1hcmtlcihbZGYuZ2V0KGksICJsYXQiKSwgZGYuZ2V0KGksICJsbmciKV0sIGRmLmdldChpKSk7CiAgICB9KTsKICB9Cn07CgovKgogKiBAcGFyYW0gbGF0IEFycmF5IG9mIGFycmF5cyBvZiBsYXRpdHVkZSBjb29yZGluYXRlcyBmb3IgcG9seWxpbmVzCiAqIEBwYXJhbSBsbmcgQXJyYXkgb2YgYXJyYXlzIG9mIGxvbmdpdHVkZSBjb29yZGluYXRlcyBmb3IgcG9seWxpbmVzCiAqLwptZXRob2RzLmFkZFBvbHlsaW5lcyA9IGZ1bmN0aW9uIChwb2x5Z29ucywgbGF5ZXJJZCwgZ3JvdXAsIG9wdGlvbnMsIHBvcHVwLCBwb3B1cE9wdGlvbnMsIGxhYmVsLCBsYWJlbE9wdGlvbnMsIGhpZ2hsaWdodE9wdGlvbnMpIHsKICBpZiAocG9seWdvbnMubGVuZ3RoID4gMCkgewogICAgdmFyIGRmID0gbmV3IF9kYXRhZnJhbWUyLmRlZmF1bHQoKS5jb2woInNoYXBlcyIsIHBvbHlnb25zKS5jb2woImxheWVySWQiLCBsYXllcklkKS5jb2woImdyb3VwIiwgZ3JvdXApLmNvbCgicG9wdXAiLCBwb3B1cCkuY29sKCJwb3B1cE9wdGlvbnMiLCBwb3B1cE9wdGlvbnMpLmNvbCgibGFiZWwiLCBsYWJlbCkuY29sKCJsYWJlbE9wdGlvbnMiLCBsYWJlbE9wdGlvbnMpLmNvbCgiaGlnaGxpZ2h0T3B0aW9ucyIsIGhpZ2hsaWdodE9wdGlvbnMpLmNiaW5kKG9wdGlvbnMpOwoKICAgIGFkZExheWVycyh0aGlzLCAic2hhcGUiLCBkZiwgZnVuY3Rpb24gKGRmLCBpKSB7CiAgICAgIHZhciBzaGFwZXMgPSBkZi5nZXQoaSwgInNoYXBlcyIpOwogICAgICBzaGFwZXMgPSBzaGFwZXMubWFwKGZ1bmN0aW9uIChzaGFwZSkgewogICAgICAgIHJldHVybiBfaHRtbHdpZGdldHMyLmRlZmF1bHQuZGF0YWZyYW1lVG9EMyhzaGFwZVswXSk7CiAgICAgIH0pOwogICAgICBpZiAoc2hhcGVzLmxlbmd0aCA+IDEpIHsKICAgICAgICByZXR1cm4gX2xlYWZsZXQyLmRlZmF1bHQubXVsdGlQb2x5bGluZShzaGFwZXMsIGRmLmdldChpKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIF9sZWFmbGV0Mi5kZWZhdWx0LnBvbHlsaW5lKHNoYXBlc1swXSwgZGYuZ2V0KGkpKTsKICAgICAgfQogICAgfSk7CiAgfQp9OwoKbWV0aG9kcy5yZW1vdmVNYXJrZXIgPSBmdW5jdGlvbiAobGF5ZXJJZCkgewogIHRoaXMubGF5ZXJNYW5hZ2VyLnJlbW92ZUxheWVyKCJtYXJrZXIiLCBsYXllcklkKTsKfTsKCm1ldGhvZHMuY2xlYXJNYXJrZXJzID0gZnVuY3Rpb24gKCkgewogIHRoaXMubGF5ZXJNYW5hZ2VyLmNsZWFyTGF5ZXJzKCJtYXJrZXIiKTsKfTsKCm1ldGhvZHMucmVtb3ZlTWFya2VyQ2x1c3RlciA9IGZ1bmN0aW9uIChsYXllcklkKSB7CiAgdGhpcy5sYXllck1hbmFnZXIucmVtb3ZlTGF5ZXIoImNsdXN0ZXIiLCBsYXllcklkKTsKfTsKCm1ldGhvZHMucmVtb3ZlTWFya2VyRnJvbUNsdXN0ZXIgPSBmdW5jdGlvbiAobGF5ZXJJZCwgY2x1c3RlcklkKSB7CiAgdmFyIGNsdXN0ZXIgPSB0aGlzLmxheWVyTWFuYWdlci5nZXRMYXllcigiY2x1c3RlciIsIGNsdXN0ZXJJZCk7CiAgaWYgKCFjbHVzdGVyKSByZXR1cm47CiAgY2x1c3Rlci5jbHVzdGVyTGF5ZXJTdG9yZS5yZW1vdmUobGF5ZXJJZCk7Cn07CgptZXRob2RzLmNsZWFyTWFya2VyQ2x1c3RlcnMgPSBmdW5jdGlvbiAoKSB7CiAgdGhpcy5sYXllck1hbmFnZXIuY2xlYXJMYXllcnMoImNsdXN0ZXIiKTsKfTsKCm1ldGhvZHMucmVtb3ZlU2hhcGUgPSBmdW5jdGlvbiAobGF5ZXJJZCkgewogIHRoaXMubGF5ZXJNYW5hZ2VyLnJlbW92ZUxheWVyKCJzaGFwZSIsIGxheWVySWQpOwp9OwoKbWV0aG9kcy5jbGVhclNoYXBlcyA9IGZ1bmN0aW9uICgpIHsKICB0aGlzLmxheWVyTWFuYWdlci5jbGVhckxheWVycygic2hhcGUiKTsKfTsKCm1ldGhvZHMuYWRkUmVjdGFuZ2xlcyA9IGZ1bmN0aW9uIChsYXQxLCBsbmcxLCBsYXQyLCBsbmcyLCBsYXllcklkLCBncm91cCwgb3B0aW9ucywgcG9wdXAsIHBvcHVwT3B0aW9ucywgbGFiZWwsIGxhYmVsT3B0aW9ucywgaGlnaGxpZ2h0T3B0aW9ucykgewogIHZhciBkZiA9IG5ldyBfZGF0YWZyYW1lMi5kZWZhdWx0KCkuY29sKCJsYXQxIiwgbGF0MSkuY29sKCJsbmcxIiwgbG5nMSkuY29sKCJsYXQyIiwgbGF0MikuY29sKCJsbmcyIiwgbG5nMikuY29sKCJsYXllcklkIiwgbGF5ZXJJZCkuY29sKCJncm91cCIsIGdyb3VwKS5jb2woInBvcHVwIiwgcG9wdXApLmNvbCgicG9wdXBPcHRpb25zIiwgcG9wdXBPcHRpb25zKS5jb2woImxhYmVsIiwgbGFiZWwpLmNvbCgibGFiZWxPcHRpb25zIiwgbGFiZWxPcHRpb25zKS5jb2woImhpZ2hsaWdodE9wdGlvbnMiLCBoaWdobGlnaHRPcHRpb25zKS5jYmluZChvcHRpb25zKTsKCiAgYWRkTGF5ZXJzKHRoaXMsICJzaGFwZSIsIGRmLCBmdW5jdGlvbiAoZGYsIGkpIHsKICAgIGlmIChfanF1ZXJ5Mi5kZWZhdWx0LmlzTnVtZXJpYyhkZi5nZXQoaSwgImxhdDEiKSkgJiYgX2pxdWVyeTIuZGVmYXVsdC5pc051bWVyaWMoZGYuZ2V0KGksICJsbmcxIikpICYmIF9qcXVlcnkyLmRlZmF1bHQuaXNOdW1lcmljKGRmLmdldChpLCAibGF0MiIpKSAmJiBfanF1ZXJ5Mi5kZWZhdWx0LmlzTnVtZXJpYyhkZi5nZXQoaSwgImxuZzIiKSkpIHsKICAgICAgcmV0dXJuIF9sZWFmbGV0Mi5kZWZhdWx0LnJlY3RhbmdsZShbW2RmLmdldChpLCAibGF0MSIpLCBkZi5nZXQoaSwgImxuZzEiKV0sIFtkZi5nZXQoaSwgImxhdDIiKSwgZGYuZ2V0KGksICJsbmcyIildXSwgZGYuZ2V0KGkpKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0pOwp9OwoKLyoKICogQHBhcmFtIGxhdCBBcnJheSBvZiBhcnJheXMgb2YgbGF0aXR1ZGUgY29vcmRpbmF0ZXMgZm9yIHBvbHlnb25zCiAqIEBwYXJhbSBsbmcgQXJyYXkgb2YgYXJyYXlzIG9mIGxvbmdpdHVkZSBjb29yZGluYXRlcyBmb3IgcG9seWdvbnMKICovCm1ldGhvZHMuYWRkUG9seWdvbnMgPSBmdW5jdGlvbiAocG9seWdvbnMsIGxheWVySWQsIGdyb3VwLCBvcHRpb25zLCBwb3B1cCwgcG9wdXBPcHRpb25zLCBsYWJlbCwgbGFiZWxPcHRpb25zLCBoaWdobGlnaHRPcHRpb25zKSB7CiAgaWYgKHBvbHlnb25zLmxlbmd0aCA+IDApIHsKICAgIHZhciBkZiA9IG5ldyBfZGF0YWZyYW1lMi5kZWZhdWx0KCkuY29sKCJzaGFwZXMiLCBwb2x5Z29ucykuY29sKCJsYXllcklkIiwgbGF5ZXJJZCkuY29sKCJncm91cCIsIGdyb3VwKS5jb2woInBvcHVwIiwgcG9wdXApLmNvbCgicG9wdXBPcHRpb25zIiwgcG9wdXBPcHRpb25zKS5jb2woImxhYmVsIiwgbGFiZWwpLmNvbCgibGFiZWxPcHRpb25zIiwgbGFiZWxPcHRpb25zKS5jb2woImhpZ2hsaWdodE9wdGlvbnMiLCBoaWdobGlnaHRPcHRpb25zKS5jYmluZChvcHRpb25zKTsKCiAgICBhZGRMYXllcnModGhpcywgInNoYXBlIiwgZGYsIGZ1bmN0aW9uIChkZiwgaSkgewogICAgICAvLyBUaGlzIGNvZGUgdXNlZCB0byB1c2UgTC5tdWx0aVBvbHlnb24sIGJ1dCB0aGF0IGNhdXNlZAogICAgICAvLyBkb3VibGUtY2xpY2sgb24gYSBtdWx0aXBvbHlnb24gdG8gZmFpbCB0byB6b29tIGluIG9uIHRoZQogICAgICAvLyBtYXAuIFN1cnByaXNpbmdseSwgcHV0dGluZyBhbGwgdGhlIHJpbmdzIGluIGEgc2luZ2xlCiAgICAgIC8vIHBvbHlnb24gc2VlbXMgdG8gc3RpbGwgd29yazsgY29tcGxpY2F0ZWQgbXVsdGlwb2x5Z29ucwogICAgICAvLyBhcmUgc3RpbGwgcmVuZGVyZWQgY29ycmVjdGx5LgogICAgICB2YXIgc2hhcGVzID0gZGYuZ2V0KGksICJzaGFwZXMiKS5tYXAoZnVuY3Rpb24gKHBvbHlnb24pIHsKICAgICAgICByZXR1cm4gcG9seWdvbi5tYXAoX2h0bWx3aWRnZXRzMi5kZWZhdWx0LmRhdGFmcmFtZVRvRDMpOwogICAgICB9KS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgdmFsKSB7CiAgICAgICAgcmV0dXJuIGFjYy5jb25jYXQodmFsKTsKICAgICAgfSwgW10pOwogICAgICByZXR1cm4gX2xlYWZsZXQyLmRlZmF1bHQucG9seWdvbihzaGFwZXMsIGRmLmdldChpKSk7CiAgICB9KTsKICB9Cn07CgptZXRob2RzLmFkZEdlb0pTT04gPSBmdW5jdGlvbiAoZGF0YSwgbGF5ZXJJZCwgZ3JvdXAsIHN0eWxlKSB7CiAgLy8gVGhpcyB0aW1lLCBzZWxmIGlzIGFjdHVhbGx5IG5lZWRlZCBiZWNhdXNlIHRoZSBjYWxsYmFja3MgYmVsb3cgbmVlZAogIC8vIHRvIGFjY2VzcyBib3RoIHRoZSBpbm5lciBhbmQgb3V0ZXIgc2Vuc2VzIG9mICJ0aGlzIgogIHZhciBzZWxmID0gdGhpczsKICBpZiAodHlwZW9mIGRhdGEgPT09ICJzdHJpbmciKSB7CiAgICBkYXRhID0gSlNPTi5wYXJzZShkYXRhKTsKICB9CgogIHZhciBnbG9iYWxTdHlsZSA9IF9qcXVlcnkyLmRlZmF1bHQuZXh0ZW5kKHt9LCBzdHlsZSwgZGF0YS5zdHlsZSB8fCB7fSk7CgogIHZhciBnamxheWVyID0gX2xlYWZsZXQyLmRlZmF1bHQuZ2VvSnNvbihkYXRhLCB7CiAgICBzdHlsZTogZnVuY3Rpb24gc3R5bGUoZmVhdHVyZSkgewogICAgICBpZiAoZmVhdHVyZS5zdHlsZSB8fCBmZWF0dXJlLnByb3BlcnRpZXMuc3R5bGUpIHsKICAgICAgICByZXR1cm4gX2pxdWVyeTIuZGVmYXVsdC5leHRlbmQoe30sIGdsb2JhbFN0eWxlLCBmZWF0dXJlLnN0eWxlLCBmZWF0dXJlLnByb3BlcnRpZXMuc3R5bGUpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBnbG9iYWxTdHlsZTsKICAgICAgfQogICAgfSwKICAgIG9uRWFjaEZlYXR1cmU6IGZ1bmN0aW9uIG9uRWFjaEZlYXR1cmUoZmVhdHVyZSwgbGF5ZXIpIHsKICAgICAgdmFyIGV4dHJhSW5mbyA9IHsKICAgICAgICBmZWF0dXJlSWQ6IGZlYXR1cmUuaWQsCiAgICAgICAgcHJvcGVydGllczogZmVhdHVyZS5wcm9wZXJ0aWVzCiAgICAgIH07CiAgICAgIHZhciBwb3B1cCA9IGZlYXR1cmUucHJvcGVydGllcy5wb3B1cDsKICAgICAgaWYgKHR5cGVvZiBwb3B1cCAhPT0gInVuZGVmaW5lZCIgJiYgcG9wdXAgIT09IG51bGwpIGxheWVyLmJpbmRQb3B1cChwb3B1cCk7CiAgICAgIGxheWVyLm9uKCJjbGljayIsIG1vdXNlSGFuZGxlcihzZWxmLmlkLCBsYXllcklkLCBncm91cCwgImdlb2pzb25fY2xpY2siLCBleHRyYUluZm8pLCB0aGlzKTsKICAgICAgbGF5ZXIub24oIm1vdXNlb3ZlciIsIG1vdXNlSGFuZGxlcihzZWxmLmlkLCBsYXllcklkLCBncm91cCwgImdlb2pzb25fbW91c2VvdmVyIiwgZXh0cmFJbmZvKSwgdGhpcyk7CiAgICAgIGxheWVyLm9uKCJtb3VzZW91dCIsIG1vdXNlSGFuZGxlcihzZWxmLmlkLCBsYXllcklkLCBncm91cCwgImdlb2pzb25fbW91c2VvdXQiLCBleHRyYUluZm8pLCB0aGlzKTsKICAgIH0KICB9KTsKICB0aGlzLmxheWVyTWFuYWdlci5hZGRMYXllcihnamxheWVyLCAiZ2VvanNvbiIsIGxheWVySWQsIGdyb3VwKTsKfTsKCm1ldGhvZHMucmVtb3ZlR2VvSlNPTiA9IGZ1bmN0aW9uIChsYXllcklkKSB7CiAgdGhpcy5sYXllck1hbmFnZXIucmVtb3ZlTGF5ZXIoImdlb2pzb24iLCBsYXllcklkKTsKfTsKCm1ldGhvZHMuY2xlYXJHZW9KU09OID0gZnVuY3Rpb24gKCkgewogIHRoaXMubGF5ZXJNYW5hZ2VyLmNsZWFyTGF5ZXJzKCJnZW9qc29uIik7Cn07CgptZXRob2RzLmFkZFRvcG9KU09OID0gZnVuY3Rpb24gKGRhdGEsIGxheWVySWQsIGdyb3VwLCBzdHlsZSkgewogIC8vIFRoaXMgdGltZSwgc2VsZiBpcyBhY3R1YWxseSBuZWVkZWQgYmVjYXVzZSB0aGUgY2FsbGJhY2tzIGJlbG93IG5lZWQKICAvLyB0byBhY2Nlc3MgYm90aCB0aGUgaW5uZXIgYW5kIG91dGVyIHNlbnNlcyBvZiAidGhpcyIKICB2YXIgc2VsZiA9IHRoaXM7CiAgaWYgKHR5cGVvZiBkYXRhID09PSAic3RyaW5nIikgewogICAgZGF0YSA9IEpTT04ucGFyc2UoZGF0YSk7CiAgfQoKICB2YXIgZ2xvYmFsU3R5bGUgPSBfanF1ZXJ5Mi5kZWZhdWx0LmV4dGVuZCh7fSwgc3R5bGUsIGRhdGEuc3R5bGUgfHwge30pOwoKICB2YXIgZ2psYXllciA9IF9sZWFmbGV0Mi5kZWZhdWx0Lmdlb0pzb24obnVsbCwgewogICAgc3R5bGU6IGZ1bmN0aW9uIHN0eWxlKGZlYXR1cmUpIHsKICAgICAgaWYgKGZlYXR1cmUuc3R5bGUgfHwgZmVhdHVyZS5wcm9wZXJ0aWVzLnN0eWxlKSB7CiAgICAgICAgcmV0dXJuIF9qcXVlcnkyLmRlZmF1bHQuZXh0ZW5kKHt9LCBnbG9iYWxTdHlsZSwgZmVhdHVyZS5zdHlsZSwgZmVhdHVyZS5wcm9wZXJ0aWVzLnN0eWxlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gZ2xvYmFsU3R5bGU7CiAgICAgIH0KICAgIH0sCiAgICBvbkVhY2hGZWF0dXJlOiBmdW5jdGlvbiBvbkVhY2hGZWF0dXJlKGZlYXR1cmUsIGxheWVyKSB7CiAgICAgIHZhciBleHRyYUluZm8gPSB7CiAgICAgICAgZmVhdHVyZUlkOiBmZWF0dXJlLmlkLAogICAgICAgIHByb3BlcnRpZXM6IGZlYXR1cmUucHJvcGVydGllcwogICAgICB9OwogICAgICB2YXIgcG9wdXAgPSBmZWF0dXJlLnByb3BlcnRpZXMucG9wdXA7CiAgICAgIGlmICh0eXBlb2YgcG9wdXAgIT09ICJ1bmRlZmluZWQiICYmIHBvcHVwICE9PSBudWxsKSBsYXllci5iaW5kUG9wdXAocG9wdXApOwogICAgICBsYXllci5vbigiY2xpY2siLCBtb3VzZUhhbmRsZXIoc2VsZi5pZCwgbGF5ZXJJZCwgZ3JvdXAsICJ0b3BvanNvbl9jbGljayIsIGV4dHJhSW5mbyksIHRoaXMpOwogICAgICBsYXllci5vbigibW91c2VvdmVyIiwgbW91c2VIYW5kbGVyKHNlbGYuaWQsIGxheWVySWQsIGdyb3VwLCAidG9wb2pzb25fbW91c2VvdmVyIiwgZXh0cmFJbmZvKSwgdGhpcyk7CiAgICAgIGxheWVyLm9uKCJtb3VzZW91dCIsIG1vdXNlSGFuZGxlcihzZWxmLmlkLCBsYXllcklkLCBncm91cCwgInRvcG9qc29uX21vdXNlb3V0IiwgZXh0cmFJbmZvKSwgdGhpcyk7CiAgICB9CiAgfSk7CiAgZ2xvYmFsLm9tbml2b3JlLnRvcG9qc29uLnBhcnNlKGRhdGEsIG51bGwsIGdqbGF5ZXIpOwogIHRoaXMubGF5ZXJNYW5hZ2VyLmFkZExheWVyKGdqbGF5ZXIsICJ0b3BvanNvbiIsIGxheWVySWQsIGdyb3VwKTsKfTsKCm1ldGhvZHMucmVtb3ZlVG9wb0pTT04gPSBmdW5jdGlvbiAobGF5ZXJJZCkgewogIHRoaXMubGF5ZXJNYW5hZ2VyLnJlbW92ZUxheWVyKCJ0b3BvanNvbiIsIGxheWVySWQpOwp9OwoKbWV0aG9kcy5jbGVhclRvcG9KU09OID0gZnVuY3Rpb24gKCkgewogIHRoaXMubGF5ZXJNYW5hZ2VyLmNsZWFyTGF5ZXJzKCJ0b3BvanNvbiIpOwp9OwoKbWV0aG9kcy5hZGRDb250cm9sID0gZnVuY3Rpb24gKGh0bWwsIHBvc2l0aW9uLCBsYXllcklkLCBjbGFzc2VzKSB7CiAgZnVuY3Rpb24gb25BZGQobWFwKSB7CiAgICB2YXIgZGl2ID0gX2xlYWZsZXQyLmRlZmF1bHQuRG9tVXRpbC5jcmVhdGUoImRpdiIsIGNsYXNzZXMpOwogICAgaWYgKHR5cGVvZiBsYXllcklkICE9PSAidW5kZWZpbmVkIiAmJiBsYXllcklkICE9PSBudWxsKSB7CiAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoImlkIiwgbGF5ZXJJZCk7CiAgICB9CiAgICB0aGlzLl9kaXYgPSBkaXY7CgogICAgLy8gSXQncyBwb3NzaWJsZSBmb3Igd2luZG93LlNoaW55IHRvIGJlIHRydWUgYnV0IFNoaW55LmluaXRpYWxpemVJbnB1dHMgdG8KICAgIC8vIG5vdCBiZSwgd2hlbiBhIHN0YXRpYyBsZWFmbGV0IHdpZGdldCBpcyBpbmNsdWRlZCBhcyBwYXJ0IG9mIHRoZSBzaGlueQogICAgLy8gVUkgZGlyZWN0bHkgKG5vdCB0aHJvdWdoIGxlYWZsZXRPdXRwdXQgb3IgdWlPdXRwdXQpLiBJbiB0aGlzIGNhc2Ugd2UKICAgIC8vIGRvbid0IGRvIHRoZSBub3JtYWwgU2hpbnkgc3R1ZmYgYXMgdGhhdCB3aWxsIGFsbCBoYXBwZW4gd2hlbiBTaGlueQogICAgLy8gaXRzZWxmIGxvYWRzIGFuZCBiaW5kcyB0aGUgZW50aXJlIGRvYy4KCiAgICBpZiAod2luZG93LlNoaW55ICYmIF9zaGlueTIuZGVmYXVsdC5pbml0aWFsaXplSW5wdXRzKSB7CiAgICAgIF9zaGlueTIuZGVmYXVsdC5yZW5kZXJIdG1sKGh0bWwsIHRoaXMuX2Rpdik7CiAgICAgIF9zaGlueTIuZGVmYXVsdC5pbml0aWFsaXplSW5wdXRzKHRoaXMuX2Rpdik7CiAgICAgIF9zaGlueTIuZGVmYXVsdC5iaW5kQWxsKHRoaXMuX2Rpdik7CiAgICB9IGVsc2UgewogICAgICB0aGlzLl9kaXYuaW5uZXJIVE1MID0gaHRtbDsKICAgIH0KCiAgICByZXR1cm4gdGhpcy5fZGl2OwogIH0KICBmdW5jdGlvbiBvblJlbW92ZShtYXApIHsKICAgIGlmICh3aW5kb3cuU2hpbnkgJiYgX3NoaW55Mi5kZWZhdWx0LnVuYmluZEFsbCkgewogICAgICBfc2hpbnkyLmRlZmF1bHQudW5iaW5kQWxsKHRoaXMuX2Rpdik7CiAgICB9CiAgfQogIHZhciBDb250cm9sID0gX2xlYWZsZXQyLmRlZmF1bHQuQ29udHJvbC5leHRlbmQoewogICAgb3B0aW9uczogeyBwb3NpdGlvbjogcG9zaXRpb24gfSwKICAgIG9uQWRkOiBvbkFkZCwKICAgIG9uUmVtb3ZlOiBvblJlbW92ZQogIH0pOwogIHRoaXMuY29udHJvbHMuYWRkKG5ldyBDb250cm9sKCksIGxheWVySWQsIGh0bWwpOwp9OwoKbWV0aG9kcy5hZGRDdXN0b21Db250cm9sID0gZnVuY3Rpb24gKGNvbnRyb2wsIGxheWVySWQpIHsKICB0aGlzLmNvbnRyb2xzLmFkZChjb250cm9sLCBsYXllcklkKTsKfTsKCm1ldGhvZHMucmVtb3ZlQ29udHJvbCA9IGZ1bmN0aW9uIChsYXllcklkKSB7CiAgdGhpcy5jb250cm9scy5yZW1vdmUobGF5ZXJJZCk7Cn07CgptZXRob2RzLmNsZWFyQ29udHJvbHMgPSBmdW5jdGlvbiAoKSB7CiAgdGhpcy5jb250cm9scy5jbGVhcigpOwp9OwoKbWV0aG9kcy5hZGRMZWdlbmQgPSBmdW5jdGlvbiAob3B0aW9ucykgewogIHZhciBsZWdlbmQgPSBfbGVhZmxldDIuZGVmYXVsdC5jb250cm9sKHsgcG9zaXRpb246IG9wdGlvbnMucG9zaXRpb24gfSk7CiAgdmFyIGdyYWRTcGFuID0gdm9pZCAwOwoKICBsZWdlbmQub25BZGQgPSBmdW5jdGlvbiAobWFwKSB7CiAgICB2YXIgZGl2ID0gX2xlYWZsZXQyLmRlZmF1bHQuRG9tVXRpbC5jcmVhdGUoImRpdiIsIG9wdGlvbnMuY2xhc3NOYW1lKSwKICAgICAgICBjb2xvcnMgPSBvcHRpb25zLmNvbG9ycywKICAgICAgICBsYWJlbHMgPSBvcHRpb25zLmxhYmVscywKICAgICAgICBsZWdlbmRIVE1MID0gIiI7CiAgICBpZiAob3B0aW9ucy50eXBlID09PSAibnVtZXJpYyIpIHsKICAgICAgKGZ1bmN0aW9uICgpIHsKICAgICAgICAvLyAjIEZvcm1hdHRpbmcgY29uc3RhbnRzLgogICAgICAgIHZhciBzaW5nbGVCaW5IZWlnaHQgPSAyMDsgLy8gVGhlIGRpc3RhbmNlIGJldHdlZW4gdGljayBtYXJrcywgaW4gcHgKICAgICAgICB2YXIgdk1hcmdpbiA9IDg7IC8vIElmIDFzdCB0aWNrIG1hcmsgc3RhcnRzIGF0IHRvcCBvZiBncmFkaWVudCwgaG93CiAgICAgICAgLy8gbWFueSBleHRyYSBweCBhcmUgbmVlZGVkIGZvciB0aGUgdG9wIGhhbGYgb2YgdGhlCiAgICAgICAgLy8gMXN0IGxhYmVsPyAoZGl0dG8gZm9yIGxhc3QgdGljayBtYXJrL2xhYmVsKQogICAgICAgIHZhciB0aWNrV2lkdGggPSA0OyAvLyBIb3cgd2lkZSBzaG91bGQgdGljayBtYXJrcyBiZSwgaW4gcHg/CiAgICAgICAgdmFyIGxhYmVsUGFkZGluZyA9IDY7IC8vIEhvdyBtdWNoIGRpc3RhbmNlIHRvIHJlc2VydmUgZm9yIHRpY2sgbWFyaz8KICAgICAgICAvLyAoTXVzdCBiZSA+PSB0aWNrV2lkdGgpCgogICAgICAgIC8vICMgRGVyaXZlZCBmb3JtYXR0aW5nIHBhcmFtZXRlcnMuCgogICAgICAgIC8vIFdoYXQncyB0aGUgaGVpZ2h0IG9mIGEgc2luZ2xlIGJpbiwgaW4gcGVyY2VudGFnZSAob2YgZ3JhZGllbnQgaGVpZ2h0KT8KICAgICAgICAvLyBJdCBtaWdodCBub3QganVzdCBiZSAxLyhuLTEpLCBpZiB0aGUgZ3JhZGllbnQgZXh0ZW5kcyBwYXN0IHRoZSB0aWNrCiAgICAgICAgLy8gbWFya3MgKHdoaWNoIGNhbiBiZSB0aGUgY2FzZSBmb3IgcHJldHR5IGN1dCBwb2ludHMpLgogICAgICAgIHZhciBzaW5nbGVCaW5QY3QgPSAob3B0aW9ucy5leHRyYS5wX24gLSBvcHRpb25zLmV4dHJhLnBfMSkgLyAobGFiZWxzLmxlbmd0aCAtIDEpOwogICAgICAgIC8vIEVhY2ggYmluIGlzIGBzaW5nbGVCaW5IZWlnaHRgIGhpZ2guIEhvdyB0YWxsIGlzIHRoZSBncmFkaWVudD8KICAgICAgICB2YXIgdG90YWxIZWlnaHQgPSAxIC8gc2luZ2xlQmluUGN0ICogc2luZ2xlQmluSGVpZ2h0ICsgMTsKICAgICAgICAvLyBIb3cgZmFyIHNob3VsZCB0aGUgZmlyc3QgdGljayBiZSBzaGlmdGVkIGRvd24sIHJlbGF0aXZlIHRvIHRoZSB0b3AKICAgICAgICAvLyBvZiB0aGUgZ3JhZGllbnQ/CiAgICAgICAgdmFyIHRpY2tPZmZzZXQgPSBzaW5nbGVCaW5IZWlnaHQgLyBzaW5nbGVCaW5QY3QgKiBvcHRpb25zLmV4dHJhLnBfMTsKCiAgICAgICAgZ3JhZFNwYW4gPSAoMCwgX2pxdWVyeTIuZGVmYXVsdCkoIjxzcGFuLz4iKS5jc3MoewogICAgICAgICAgImJhY2tncm91bmQiOiAibGluZWFyLWdyYWRpZW50KCIgKyBjb2xvcnMgKyAiKSIsCiAgICAgICAgICAib3BhY2l0eSI6IG9wdGlvbnMub3BhY2l0eSwKICAgICAgICAgICJoZWlnaHQiOiB0b3RhbEhlaWdodCArICJweCIsCiAgICAgICAgICAid2lkdGgiOiAiMThweCIsCiAgICAgICAgICAiZGlzcGxheSI6ICJibG9jayIsCiAgICAgICAgICAibWFyZ2luLXRvcCI6IHZNYXJnaW4gKyAicHgiCiAgICAgICAgfSk7CiAgICAgICAgdmFyIGxlZnREaXYgPSAoMCwgX2pxdWVyeTIuZGVmYXVsdCkoIjxkaXYvPiIpLmNzcygiZmxvYXQiLCAibGVmdCIpLAogICAgICAgICAgICByaWdodERpdiA9ICgwLCBfanF1ZXJ5Mi5kZWZhdWx0KSgiPGRpdi8+IikuY3NzKCJmbG9hdCIsICJsZWZ0Iik7CiAgICAgICAgbGVmdERpdi5hcHBlbmQoZ3JhZFNwYW4pOwogICAgICAgICgwLCBfanF1ZXJ5Mi5kZWZhdWx0KShkaXYpLmFwcGVuZChsZWZ0RGl2KS5hcHBlbmQocmlnaHREaXYpLmFwcGVuZCgoMCwgX2pxdWVyeTIuZGVmYXVsdCkoIjxiciBjbGVhcj1cImJvdGhcIi8+IikpOwoKICAgICAgICAvLyBIYXZlIHRvIGF0dGFjaCB0aGUgZGl2IHRvIHRoZSBib2R5IGF0IHRoaXMgZWFybHkgcG9pbnQsIHNvIHRoYXQgdGhlCiAgICAgICAgLy8gc3ZnIHRleHQgZ2V0Q29tcHV0ZWRUZXh0TGVuZ3RoKCkgYWN0dWFsbHkgd29ya3MsIGJlbG93LgogICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGl2KTsKCiAgICAgICAgdmFyIG5zID0gImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjsKICAgICAgICB2YXIgc3ZnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG5zLCAic3ZnIik7CiAgICAgICAgcmlnaHREaXYuYXBwZW5kKHN2Zyk7CiAgICAgICAgdmFyIGcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobnMsICJnIik7CiAgICAgICAgKDAsIF9qcXVlcnkyLmRlZmF1bHQpKGcpLmF0dHIoInRyYW5zZm9ybSIsICJ0cmFuc2xhdGUoMCwgIiArIHZNYXJnaW4gKyAiKSIpOwogICAgICAgIHN2Zy5hcHBlbmRDaGlsZChnKTsKCiAgICAgICAgLy8gbWF4IGxhYmVsIHdpZHRoIG5lZWRlZCB0byBzZXQgd2lkdGggb2Ygc3ZnLCBhbmQgcmlnaHQtanVzdGlmeSB0ZXh0CiAgICAgICAgdmFyIG1heExibFdpZHRoID0gMDsKCiAgICAgICAgLy8gQ3JlYXRlIHRpY2sgbWFya3MgYW5kIGxhYmVscwogICAgICAgIF9qcXVlcnkyLmRlZmF1bHQuZWFjaChsYWJlbHMsIGZ1bmN0aW9uIChpLCBsYWJlbCkgewogICAgICAgICAgdmFyIHkgPSB0aWNrT2Zmc2V0ICsgaSAqIHNpbmdsZUJpbkhlaWdodCArIDAuNTsKCiAgICAgICAgICB2YXIgdGhpc0xhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG5zLCAidGV4dCIpOwogICAgICAgICAgKDAsIF9qcXVlcnkyLmRlZmF1bHQpKHRoaXNMYWJlbCkudGV4dChsYWJlbHNbaV0pLmF0dHIoInkiLCB5KS5hdHRyKCJkeCIsIGxhYmVsUGFkZGluZykuYXR0cigiZHkiLCAiMC41ZXgiKTsKICAgICAgICAgIGcuYXBwZW5kQ2hpbGQodGhpc0xhYmVsKTsKICAgICAgICAgIG1heExibFdpZHRoID0gTWF0aC5tYXgobWF4TGJsV2lkdGgsIHRoaXNMYWJlbC5nZXRDb21wdXRlZFRleHRMZW5ndGgoKSk7CgogICAgICAgICAgdmFyIHRoaXNUaWNrID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG5zLCAibGluZSIpOwogICAgICAgICAgKDAsIF9qcXVlcnkyLmRlZmF1bHQpKHRoaXNUaWNrKS5hdHRyKCJ4MSIsIDApLmF0dHIoIngyIiwgdGlja1dpZHRoKS5hdHRyKCJ5MSIsIHkpLmF0dHIoInkyIiwgeSkuYXR0cigic3Ryb2tlLXdpZHRoIiwgMSk7CiAgICAgICAgICBnLmFwcGVuZENoaWxkKHRoaXNUaWNrKTsKICAgICAgICB9KTsKCiAgICAgICAgLy8gTm93IHRoYXQgd2Uga25vdyB0aGUgbWF4IGxhYmVsIHdpZHRoLCB3ZSBjYW4gcmlnaHQtanVzdGlmeQogICAgICAgICgwLCBfanF1ZXJ5Mi5kZWZhdWx0KShzdmcpLmZpbmQoInRleHQiKS5hdHRyKCJkeCIsIGxhYmVsUGFkZGluZyArIG1heExibFdpZHRoKS5hdHRyKCJ0ZXh0LWFuY2hvciIsICJlbmQiKTsKICAgICAgICAvLyBGaW5hbCBzaXplIGZvciA8c3ZnPgogICAgICAgICgwLCBfanF1ZXJ5Mi5kZWZhdWx0KShzdmcpLmNzcyh7CiAgICAgICAgICB3aWR0aDogbWF4TGJsV2lkdGggKyBsYWJlbFBhZGRpbmcgKyAicHgiLAogICAgICAgICAgaGVpZ2h0OiB0b3RhbEhlaWdodCArIHZNYXJnaW4gKiAyICsgInB4IgogICAgICAgIH0pOwoKICAgICAgICBpZiAob3B0aW9ucy5uYV9jb2xvcikgewogICAgICAgICAgKDAsIF9qcXVlcnkyLmRlZmF1bHQpKGRpdikuYXBwZW5kKCI8ZGl2PjxpIHN0eWxlPVwiYmFja2dyb3VuZDoiICsgb3B0aW9ucy5uYV9jb2xvciArICJcIj48L2k+ICIgKyBvcHRpb25zLm5hX2xhYmVsICsgIjwvZGl2PiIpOwogICAgICAgIH0KICAgICAgfSkoKTsKICAgIH0gZWxzZSB7CiAgICAgIGlmIChvcHRpb25zLm5hX2NvbG9yKSB7CiAgICAgICAgY29sb3JzLnB1c2gob3B0aW9ucy5uYV9jb2xvcik7CiAgICAgICAgbGFiZWxzLnB1c2gob3B0aW9ucy5uYV9sYWJlbCk7CiAgICAgIH0KICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2xvcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICBsZWdlbmRIVE1MICs9ICI8aSBzdHlsZT1cImJhY2tncm91bmQ6IiArIGNvbG9yc1tpXSArICI7b3BhY2l0eToiICsgb3B0aW9ucy5vcGFjaXR5ICsgIlwiPjwvaT4gIiArIGxhYmVsc1tpXSArICI8YnIvPiI7CiAgICAgIH0KICAgICAgZGl2LmlubmVySFRNTCA9IGxlZ2VuZEhUTUw7CiAgICB9CiAgICBpZiAob3B0aW9ucy50aXRsZSkgKDAsIF9qcXVlcnkyLmRlZmF1bHQpKGRpdikucHJlcGVuZCgiPGRpdiBzdHlsZT1cIm1hcmdpbi1ib3R0b206M3B4XCI+PHN0cm9uZz4iICsgb3B0aW9ucy50aXRsZSArICI8L3N0cm9uZz48L2Rpdj4iKTsKICAgIHJldHVybiBkaXY7CiAgfTsKCiAgdGhpcy5jb250cm9scy5hZGQobGVnZW5kLCBvcHRpb25zLmxheWVySWQpOwp9OwoKbWV0aG9kcy5hZGRMYXllcnNDb250cm9sID0gZnVuY3Rpb24gKGJhc2VHcm91cHMsIG92ZXJsYXlHcm91cHMsIG9wdGlvbnMpIHsKICB2YXIgX3RoaXM1ID0gdGhpczsKCiAgLy8gT25seSBhbGxvdyBvbmUgbGF5ZXJzIGNvbnRyb2wgYXQgYSB0aW1lCiAgbWV0aG9kcy5yZW1vdmVMYXllcnNDb250cm9sLmNhbGwodGhpcyk7CgogIHZhciBmaXJzdExheWVyID0gdHJ1ZTsKICB2YXIgYmFzZSA9IHt9OwogIF9qcXVlcnkyLmRlZmF1bHQuZWFjaCgoMCwgX3V0aWwuYXNBcnJheSkoYmFzZUdyb3VwcyksIGZ1bmN0aW9uIChpLCBnKSB7CiAgICB2YXIgbGF5ZXIgPSBfdGhpczUubGF5ZXJNYW5hZ2VyLmdldExheWVyR3JvdXAoZywgdHJ1ZSk7CiAgICBpZiAobGF5ZXIpIHsKICAgICAgYmFzZVtnXSA9IGxheWVyOwoKICAgICAgLy8gQ2hlY2sgaWYgPjEgYmFzZSBsYXllcnMgYXJlIHZpc2libGU7IGlmIHNvLCBoaWRlIGFsbCBidXQgdGhlIGZpcnN0IG9uZQogICAgICBpZiAoX3RoaXM1Lmhhc0xheWVyKGxheWVyKSkgewogICAgICAgIGlmIChmaXJzdExheWVyKSB7CiAgICAgICAgICBmaXJzdExheWVyID0gZmFsc2U7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIF90aGlzNS5yZW1vdmVMYXllcihsYXllcik7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfSk7CiAgdmFyIG92ZXJsYXkgPSB7fTsKICBfanF1ZXJ5Mi5kZWZhdWx0LmVhY2goKDAsIF91dGlsLmFzQXJyYXkpKG92ZXJsYXlHcm91cHMpLCBmdW5jdGlvbiAoaSwgZykgewogICAgdmFyIGxheWVyID0gX3RoaXM1LmxheWVyTWFuYWdlci5nZXRMYXllckdyb3VwKGcsIHRydWUpOwogICAgaWYgKGxheWVyKSB7CiAgICAgIG92ZXJsYXlbZ10gPSBsYXllcjsKICAgIH0KICB9KTsKCiAgdmFyIGxheWVyc0NvbnRyb2wgPSBfbGVhZmxldDIuZGVmYXVsdC5jb250cm9sLmxheWVycyhiYXNlLCBvdmVybGF5LCBvcHRpb25zKS5hZGRUbyh0aGlzKTsKICB0aGlzLmN1cnJlbnRMYXllcnNDb250cm9sID0gbGF5ZXJzQ29udHJvbDsKfTsKCm1ldGhvZHMucmVtb3ZlTGF5ZXJzQ29udHJvbCA9IGZ1bmN0aW9uICgpIHsKICBpZiAodGhpcy5jdXJyZW50TGF5ZXJzQ29udHJvbCkgewogICAgdGhpcy5jdXJyZW50TGF5ZXJzQ29udHJvbC5yZW1vdmVGcm9tKHRoaXMpOwogICAgdGhpcy5jdXJyZW50TGF5ZXJzQ29udHJvbCA9IG51bGw7CiAgfQp9OwoKbWV0aG9kcy5hZGRTY2FsZUJhciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7CgogIC8vIE9ubHkgYWxsb3cgb25lIHNjYWxlIGJhciBhdCBhIHRpbWUKICBtZXRob2RzLnJlbW92ZVNjYWxlQmFyLmNhbGwodGhpcyk7CgogIHZhciBzY2FsZUJhciA9IF9sZWFmbGV0Mi5kZWZhdWx0LmNvbnRyb2wuc2NhbGUob3B0aW9ucykuYWRkVG8odGhpcyk7CiAgdGhpcy5jdXJyZW50U2NhbGVCYXIgPSBzY2FsZUJhcjsKfTsKCm1ldGhvZHMucmVtb3ZlU2NhbGVCYXIgPSBmdW5jdGlvbiAoKSB7CiAgaWYgKHRoaXMuY3VycmVudFNjYWxlQmFyKSB7CiAgICB0aGlzLmN1cnJlbnRTY2FsZUJhci5yZW1vdmVGcm9tKHRoaXMpOwogICAgdGhpcy5jdXJyZW50U2NhbGVCYXIgPSBudWxsOwogIH0KfTsKCm1ldGhvZHMuaGlkZUdyb3VwID0gZnVuY3Rpb24gKGdyb3VwKSB7CiAgdmFyIF90aGlzNiA9IHRoaXM7CgogIF9qcXVlcnkyLmRlZmF1bHQuZWFjaCgoMCwgX3V0aWwuYXNBcnJheSkoZ3JvdXApLCBmdW5jdGlvbiAoaSwgZykgewogICAgdmFyIGxheWVyID0gX3RoaXM2LmxheWVyTWFuYWdlci5nZXRMYXllckdyb3VwKGcsIHRydWUpOwogICAgaWYgKGxheWVyKSB7CiAgICAgIF90aGlzNi5yZW1vdmVMYXllcihsYXllcik7CiAgICB9CiAgfSk7Cn07CgptZXRob2RzLnNob3dHcm91cCA9IGZ1bmN0aW9uIChncm91cCkgewogIHZhciBfdGhpczcgPSB0aGlzOwoKICBfanF1ZXJ5Mi5kZWZhdWx0LmVhY2goKDAsIF91dGlsLmFzQXJyYXkpKGdyb3VwKSwgZnVuY3Rpb24gKGksIGcpIHsKICAgIHZhciBsYXllciA9IF90aGlzNy5sYXllck1hbmFnZXIuZ2V0TGF5ZXJHcm91cChnLCB0cnVlKTsKICAgIGlmIChsYXllcikgewogICAgICBfdGhpczcuYWRkTGF5ZXIobGF5ZXIpOwogICAgfQogIH0pOwp9OwoKbWV0aG9kcy5hZGRSYXN0ZXJJbWFnZSA9IGZ1bmN0aW9uICh1cmksIGJvdW5kcywgb3BhY2l0eSwgYXR0cmlidXRpb24sIGxheWVySWQsIGdyb3VwKSB7CiAgLy8gdXJpIGlzIGEgZGF0YSBVUkkgY29udGFpbmluZyBhbiBpbWFnZS4gV2Ugd2FudCB0byBwYWludCB0aGlzIGltYWdlIGFzIGEKICAvLyBsYXllciBhdCAodG9wLWxlZnQpIGJvdW5kc1swXSB0byAoYm90dG9tLXJpZ2h0KSBib3VuZHNbMV0uCgogIC8vIFdlIGNhbid0IHNpbXBseSB1c2UgSW1hZ2VPdmVybGF5LCBhcyBpdCB1c2VzIGJpbGluZWFyIHNjYWxpbmcgd2hpY2ggbG9va3MKICAvLyBhd2Z1bCBhcyB5b3Ugem9vbSBpbiAoYW5kIHNvbWV0aW1lcyBzaGlmdHMgcG9zaXRpb25zIG9yIGRpc2FwcGVhcnMpLgogIC8vIEluc3RlYWQsIHdlJ2xsIHVzZSBhIFRpbGVMYXllci5DYW52YXMgdG8gZHJhdyBwaWVjZXMgb2YgdGhlIGltYWdlLgoKICAvLyBGaXJzdCwgc29tZSBoZWxwZXIgZnVuY3Rpb25zLgoKICAvLyBkZWdyZWUydGlsZSBjb252ZXJ0cyBsYXRpdHVkZSwgbG9uZ2l0dWRlLCBhbmQgem9vbSB0byB4IGFuZCB5IHRpbGUKICAvLyBudW1iZXJzLiBUaGUgdGlsZSBudW1iZXJzIHJldHVybmVkIGNhbiBiZSBub24taW50ZWdyYWwsIGFzIHRoZXJlJ3Mgbm8KICAvLyByZWFzb24gdG8gZXhwZWN0IHRoYXQgdGhlIGxhdC9sbmcgaW5wdXRzIGFyZSBleGFjdGx5IG9uIHRoZSBib3JkZXIgb2YgdHdvCiAgLy8gdGlsZXMuCiAgLy8KICAvLyBXZSdsbCB1c2UgdGhpcyB0byBjb252ZXJ0IHRoZSBib3VuZHMgd2UgZ290IGZyb20gdGhlIHNlcnZlciwgaW50byBjb29yZHMKICAvLyBpbiB0aWxlLXNwYWNlIGF0IGEgZ2l2ZW4gem9vbSBsZXZlbC4gTm90ZSB0aGF0IG9uY2Ugd2UgZG8gdGhlIGNvbnZlcnNpb24sCiAgLy8gd2UgZG9uJ3QgdG8gZG8gYW55IG1vcmUgdHJpZ29ub21ldHJ5IHRvIGNvbnZlcnQgYmV0d2VlbiBwaXhlbCBjb29yZGluYXRlcwogIC8vIGFuZCB0aWxlIGNvb3JkaW5hdGVzOyB0aGUgc291cmNlIGltYWdlIHBpeGVsIGNvb3JkcywgZGVzdGluYXRpb24gY2FudmFzCiAgLy8gcGl4ZWwgY29vcmRzLCBhbmQgdGlsZSBjb29yZHMgYWxsIGNhbiBiZSBzY2FsZWQgbGluZWFybHkuCiAgZnVuY3Rpb24gZGVncmVlMnRpbGUobGF0LCBsbmcsIHpvb20pIHsKICAgIC8vIFNlZSBodHRwOi8vd2lraS5vcGVuc3RyZWV0bWFwLm9yZy93aWtpL1NsaXBweV9tYXBfdGlsZW5hbWVzCiAgICB2YXIgbGF0UmFkID0gbGF0ICogTWF0aC5QSSAvIDE4MDsKICAgIHZhciBuID0gTWF0aC5wb3coMiwgem9vbSk7CiAgICB2YXIgeCA9IChsbmcgKyAxODApIC8gMzYwICogbjsKICAgIHZhciB5ID0gKDEgLSBNYXRoLmxvZyhNYXRoLnRhbihsYXRSYWQpICsgMSAvIE1hdGguY29zKGxhdFJhZCkpIC8gTWF0aC5QSSkgLyAyICogbjsKICAgIHJldHVybiB7IHg6IHgsIHk6IHkgfTsKICB9CgogIC8vIEdpdmVuIGEgcmFuZ2UgW2Zyb20sdG8pIGFuZCBlaXRoZXIgb25lIG9yIHR3byBudW1iZXJzLCByZXR1cm5zIHRydWUgaWYKICAvLyB0aGVyZSBpcyBhbnkgb3ZlcmxhcCBiZXR3ZWVuIFt4LHgxKSBhbmQgdGhlIHJhbmdlLS1vciBpZiB4MSBpcyBvbWl0dGVkLAogIC8vIHRoZW4gcmV0dXJucyB0cnVlIGlmIHggaXMgd2l0aGluIFtmcm9tLHRvKS4KICBmdW5jdGlvbiBvdmVybGFwKGZyb20sIHRvLCB4LCAvKiBvcHRpb25hbCAqL3gxKSB7CiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAzKSB4MSA9IHg7CiAgICByZXR1cm4geCA8IHRvICYmIHgxID49IGZyb207CiAgfQoKICBmdW5jdGlvbiBnZXRDYW52YXNTbW9vdGhpbmdQcm9wZXJ0eShjdHgpIHsKICAgIHZhciBjYW5kaWRhdGVzID0gWyJpbWFnZVNtb290aGluZ0VuYWJsZWQiLCAibW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkIiwgIndlYmtpdEltYWdlU21vb3RoaW5nRW5hYmxlZCIsICJtc0ltYWdlU21vb3RoaW5nRW5hYmxlZCJdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYW5kaWRhdGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmICh0eXBlb2YgY3R4W2NhbmRpZGF0ZXNbaV1dICE9PSAidW5kZWZpbmVkIikgewogICAgICAgIHJldHVybiBjYW5kaWRhdGVzW2ldOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIC8vIE91ciBnZW5lcmFsIHN0cmF0ZWd5IGlzIHRvOgogIC8vIDEuIExvYWQgdGhlIGRhdGEgVVJJIGluIGFuIEltYWdlKCkgb2JqZWN0LCBzbyB3ZSBjYW4gZ2V0IGl0cyBwaXhlbAogIC8vICAgIGRpbWVuc2lvbnMgYW5kIHRoZSB1bmRlcmx5aW5nIGltYWdlIGRhdGEuIChXZSBjb3VsZCBoYXZlIGRvbmUgdGhpcwogIC8vICAgIGJ5IG5vdCBlbmNvZGluZyBhcyBQTkcgYXQgYWxsIGJ1dCBqdXN0IHNlbmQgYW4gYXJyYXkgb2YgUkdCQSB2YWx1ZXMKICAvLyAgICBmcm9tIHRoZSBzZXJ2ZXIsIGJ1dCB0aGF0IHdvdWxkIGluZmxhdGUgdGhlIEpTT04gdG9vIG11Y2guKQogIC8vIDIuIENyZWF0ZSBhIGhpZGRlbiBjYW52YXMgdGhhdCB3ZSB1c2UganVzdCB0byBleHRyYWN0IHRoZSBpbWFnZSBkYXRhCiAgLy8gICAgZnJvbSB0aGUgSW1hZ2UgKHVzaW5nIENvbnRleHQyRC5nZXRJbWFnZURhdGEoKSkuCiAgLy8gMy4gQ3JlYXRlIGEgVGlsZUxheWVyLkNhbnZhcyBhbmQgYWRkIGl0IHRvIHRoZSBtYXAuCgogIC8vIFdlIHdhbnQgdG8gc3luY2hyb25vdXNseSBjcmVhdGUgYW5kIGF0dGFjaCB0aGUgVGlsZUxheWVyLkNhbnZhcyAoc28gYW4KICAvLyBpbW1lZGlhdGUgY2FsbCB0byBjbGVhclJhc3RlcnMoKSB3aWxsIGJlIHJlc3BlY3RlZCwgZm9yIGV4YW1wbGUpLCBidXQKICAvLyBJbWFnZSBsb2FkcyBpdHMgZGF0YSBhc3luY2hyb25vdXNseS4gRm9ydHVuYXRlbHkgd2UgY2FuIHJlc29sdmUgdGhpcwogIC8vIGJ5IHB1dHRpbmcgVGlsZUxheWVyLkNhbnZhcyBpbnRvIGFzeW5jIG1vZGUsIHdoaWNoIHdpbGwgbGV0IHVzIGNyZWF0ZQogIC8vIGFuZCBhdHRhY2ggdGhlIGxheWVyIGJ1dCBoYXZlIGl0IHdhaXQgdW50aWwgdGhlIGltYWdlIGlzIGxvYWRlZCBiZWZvcmUKICAvLyBpdCBhY3R1YWxseSBkcmF3cyBhbnl0aGluZy4KCiAgLy8gVGhlc2UgYXJlIHRoZSB2YXJpYWJsZXMgdGhhdCB3ZSB3aWxsIHBvcHVsYXRlIG9uY2UgdGhlIGltYWdlIGlzIGxvYWRlZC4KICB2YXIgaW1nRGF0YSA9IG51bGw7IC8vIDFkIHJvdy1tYWpvciBhcnJheSwgZm91ciBbMC0yNTVdIGludGVnZXJzIHBlciBwaXhlbAogIHZhciBpbWdEYXRhTWlwTWFwcGVyID0gbnVsbDsKICB2YXIgdyA9IG51bGw7IC8vIGltYWdlIHdpZHRoIGluIHBpeGVscwogIHZhciBoID0gbnVsbDsgLy8gaW1hZ2UgaGVpZ2h0IGluIHBpeGVscwoKICAvLyBXZSdsbCB1c2UgdGhpcyBhcnJheSB0byBzdG9yZSBjYWxsYmFja3MgdGhhdCBuZWVkIHRvIGJlIGludm9rZWQgb25jZQogIC8vIGltZ0RhdGEsIHcsIGFuZCBoIGhhdmUgYmVlbiByZXNvbHZlZC4KICB2YXIgaW1nRGF0YUNhbGxiYWNrcyA9IFtdOwoKICAvLyBDb25zdW1lcnMgb2YgaW1nRGF0YSwgdywgYW5kIGggY2FuIGNhbGwgdGhpcyB0byBiZSBub3RpZmllZCB3aGVuIGRhdGEKICAvLyBpcyBhdmFpbGFibGUuIFVubGlrZSBtb3N0IGFzeW5jL3Byb21pc2UtYmFzZWQgQVBJcywgdGhlIGNhbGxiYWNrIHdpbGwKICAvLyBiZSBpbnZva2VkIGltbWVkaWF0ZWx5L3N5bmNocm9ub3VzbHkgaWYgdGhlIGRhdGEgaXMgYWxyZWFkeSBhdmFpbGFibGUuCiAgZnVuY3Rpb24gZ2V0SW1hZ2VEYXRhKGNhbGxiYWNrKSB7CiAgICBpZiAoaW1nRGF0YSAhPSBudWxsKSB7CiAgICAgIGNhbGxiYWNrKGltZ0RhdGEsIHcsIGgsIGltZ0RhdGFNaXBNYXBwZXIpOwogICAgfSBlbHNlIHsKICAgICAgaW1nRGF0YUNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTsKICAgIH0KICB9CgogIHZhciBpbWcgPSBuZXcgSW1hZ2UoKTsKICBpbWcub25sb2FkID0gZnVuY3Rpb24gKCkgewogICAgLy8gU2F2ZSBzaXplCiAgICB3ID0gaW1nLndpZHRoOwogICAgaCA9IGltZy5oZWlnaHQ7CgogICAgLy8gQ3JlYXRlIGEgZHVtbXkgY2FudmFzIHRvIGV4dHJhY3QgdGhlIGltYWdlIGRhdGEKICAgIHZhciBpbWdEYXRhQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7CiAgICBpbWdEYXRhQ2FudmFzLndpZHRoID0gdzsKICAgIGltZ0RhdGFDYW52YXMuaGVpZ2h0ID0gaDsKICAgIGltZ0RhdGFDYW52YXMuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaW1nRGF0YUNhbnZhcyk7CgogICAgdmFyIGltZ0RhdGFDdHggPSBpbWdEYXRhQ2FudmFzLmdldENvbnRleHQoIjJkIik7CiAgICBpbWdEYXRhQ3R4LmRyYXdJbWFnZShpbWcsIDAsIDApOwoKICAgIC8vIFNhdmUgdGhlIGltYWdlIGRhdGEuCiAgICBpbWdEYXRhID0gaW1nRGF0YUN0eC5nZXRJbWFnZURhdGEoMCwgMCwgdywgaCkuZGF0YTsKICAgIGltZ0RhdGFNaXBNYXBwZXIgPSBuZXcgX21pcG1hcHBlcjIuZGVmYXVsdChpbWcpOwoKICAgIC8vIERvbmUgd2l0aCB0aGUgY2FudmFzLCByZW1vdmUgaXQgZnJvbSB0aGUgcGFnZSBzbyBpdCBjYW4gYmUgZ2MnZC4KICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoaW1nRGF0YUNhbnZhcyk7CgogICAgLy8gQWxlcnQgYW55IGdldEltYWdlRGF0YSBjYWxsZXJzIHdobyBhcmUgd2FpdGluZy4KICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW1nRGF0YUNhbGxiYWNrcy5sZW5ndGg7IGkrKykgewogICAgICBpbWdEYXRhQ2FsbGJhY2tzW2ldKGltZ0RhdGEsIHcsIGgsIGltZ0RhdGFNaXBNYXBwZXIpOwogICAgfQogICAgaW1nRGF0YUNhbGxiYWNrcyA9IFtdOwogIH07CiAgaW1nLnNyYyA9IHVyaTsKCiAgdmFyIGNhbnZhc1RpbGVzID0gX2xlYWZsZXQyLmRlZmF1bHQudGlsZUxheWVyLmNhbnZhcyh7CiAgICBvcGFjaXR5OiBvcGFjaXR5LAogICAgYXR0cmlidXRpb246IGF0dHJpYnV0aW9uLAogICAgZGV0ZWN0UmV0aW5hOiB0cnVlLAogICAgYXN5bmM6IHRydWUKICB9KTsKCiAgY2FudmFzVGlsZXMuZHJhd1RpbGUgPSBmdW5jdGlvbiAoY2FudmFzLCB0aWxlUG9pbnQsIHpvb20pIHsKICAgIGdldEltYWdlRGF0YShmdW5jdGlvbiAoaW1nRGF0YSwgdywgaCwgbWlwbWFwcGVyKSB7CiAgICAgIHRyeSB7CiAgICAgICAgdmFyIF9yZXQ3ID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgLy8gVGhlIENvbnRleHQyRCB3ZSdsbCBiZWluZyBkcmF3aW5nIG9udG8uIEl0J3MgYWx3YXlzIDI1NngyNTYuCiAgICAgICAgICB2YXIgY3R4ID0gY2FudmFzLmdldENvbnRleHQoIjJkIik7CgogICAgICAgICAgLy8gQ29udmVydCBvdXIgaW1hZ2UgZGF0YSdzIHRvcC1sZWZ0IGFuZCBib3R0b20tcmlnaHQgbG9jYXRpb25zIGludG8KICAgICAgICAgIC8vIHgveSB0aWxlIGNvb3JkaW5hdGVzLiBUaGlzIGlzIGVzc2VudGlhbGx5IGRvaW5nIGEgc3BoZXJpY2FsIG1lcmNhdG9yCiAgICAgICAgICAvLyBwcm9qZWN0aW9uLCB0aGVuIG11bHRpcGx5aW5nIGJ5IDJeem9vbS4KICAgICAgICAgIHZhciB0b3BMZWZ0ID0gZGVncmVlMnRpbGUoYm91bmRzWzBdWzBdLCBib3VuZHNbMF1bMV0sIHpvb20pOwogICAgICAgICAgdmFyIGJvdHRvbVJpZ2h0ID0gZGVncmVlMnRpbGUoYm91bmRzWzFdWzBdLCBib3VuZHNbMV1bMV0sIHpvb20pOwogICAgICAgICAgLy8gVGhlIHNpemUgb2YgdGhlIGltYWdlIGluIHgveSB0aWxlIGNvb3JkaW5hdGVzLgogICAgICAgICAgdmFyIGV4dGVudCA9IHsgeDogYm90dG9tUmlnaHQueCAtIHRvcExlZnQueCwgeTogYm90dG9tUmlnaHQueSAtIHRvcExlZnQueSB9OwoKICAgICAgICAgIC8vIFNob3J0IGNpcmN1aXQgaWYgdGlsZSBpcyB0b3RhbGx5IGRpc2pvaW50IGZyb20gaW1hZ2UuCiAgICAgICAgICBpZiAoIW92ZXJsYXAodGlsZVBvaW50LngsIHRpbGVQb2ludC54ICsgMSwgdG9wTGVmdC54LCBib3R0b21SaWdodC54KSkgcmV0dXJuIHsKICAgICAgICAgICAgICB2OiB2b2lkIDAKICAgICAgICAgICAgfTsKICAgICAgICAgIGlmICghb3ZlcmxhcCh0aWxlUG9pbnQueSwgdGlsZVBvaW50LnkgKyAxLCB0b3BMZWZ0LnksIGJvdHRvbVJpZ2h0LnkpKSByZXR1cm4gewogICAgICAgICAgICAgIHY6IHZvaWQgMAogICAgICAgICAgICB9OwoKICAgICAgICAgIC8vIFRoZSBsaW5lYXIgcmVzb2x1dGlvbiBvZiB0aGUgdGlsZSB3ZSdyZSBkcmF3aW5nIGlzIGFsd2F5cyAyNTZweCBwZXIgdGlsZSB1bml0LgogICAgICAgICAgLy8gSWYgdGhlIGxpbmVhciByZXNvbHV0aW9uIChpbiBlaXRoZXIgZGlyZWN0aW9uKSBvZiB0aGUgaW1hZ2UgaXMgbGVzcyB0aGFuIDI1NnB4CiAgICAgICAgICAvLyBwZXIgdGlsZSB1bml0LCB0aGVuIHVzZSBuZWFyZXN0IG5laWdoYm9yOyBvdGhlcndpc2UsIHVzZSB0aGUgY2FudmFzJ3MgYnVpbHQtaW4KICAgICAgICAgIC8vIHNjYWxpbmcuCiAgICAgICAgICB2YXIgaW1nUmVzID0gewogICAgICAgICAgICB4OiB3IC8gZXh0ZW50LngsCiAgICAgICAgICAgIHk6IGggLyBleHRlbnQueQogICAgICAgICAgfTsKCiAgICAgICAgICAvLyBXZSBjYW4gZG8gdGhlIGFjdHVhbCBkcmF3aW5nIGluIG9uZSBvZiB0aHJlZSB3YXlzOgogICAgICAgICAgLy8gLSBDYWxsIGRyYXdJbWFnZSgpLiBUaGlzIGlzIGVhc3kgYW5kIGZhc3QsIGFuZCByZXN1bHRzIGluIHNtb290aAogICAgICAgICAgLy8gICBpbnRlcnBvbGF0aW9uIChiaWxpbmVhcj8pLiBUaGlzIGlzIHdoYXQgd2Ugd2FudCB3aGVuIHdlIGFyZQogICAgICAgICAgLy8gICByZWR1Y2luZyB0aGUgaW1hZ2UgZnJvbSBpdHMgbmF0aXZlIHNpemUuCiAgICAgICAgICAvLyAtIENhbGwgZHJhd0ltYWdlKCkgd2l0aCBpbWFnZVNtb290aGluZ0VuYWJsZWQ9ZmFsc2UuIFRoaXMgaXMgZWFzeQogICAgICAgICAgLy8gICBhbmQgZmFzdCBhbmQgZ2l2ZXMgdXMgbmVhcmVzdC1uZWlnaGJvciBpbnRlcnBvbGF0aW9uLCB3aGljaCBpcyB3aGF0CiAgICAgICAgICAvLyAgIHdlIHdhbnQgd2hlbiBlbmxhcmdpbmcgdGhlIGltYWdlLiBIb3dldmVyLCBpdCdzIHVuc3VwcG9ydGVkIG9uIG1hbnkKICAgICAgICAgIC8vICAgYnJvd3NlcnMgKGluY2x1ZGluZyBRdFdlYmtpdCkuCiAgICAgICAgICAvLyAtIERvIGEgbWFudWFsIG5lYXJlc3QtbmVpZ2hib3IgaW50ZXJwb2xhdGlvbi4gVGhpcyBpcyB3aGF0IHdlJ2xsIGZhbGwKICAgICAgICAgIC8vICAgYmFjayB0byB3aGVuIGVubGFyZ2luZywgYW5kIGltYWdlU21vb3RoaW5nRW5hYmxlZCBpc24ndCBzdXBwb3J0ZWQuCiAgICAgICAgICAvLyAgIEluIHRoZW9yeSBpdCdzIHNsb3dlciwgYnV0IHN0aWxsIHByZXR0eSBmYXN0IG9uIG15IG1hY2hpbmUsIGFuZCB0aGUKICAgICAgICAgIC8vICAgcmVzdWx0cyBsb29rIHRoZSBzYW1lIEFGQUlDVC4KCiAgICAgICAgICAvLyBJcyBpbWFnZVNtb290aGluZ0VuYWJsZWQgc3VwcG9ydGVkPyBJZiBzbywgd2UgY2FuIGxldCBjYW52YXMgZG8KICAgICAgICAgIC8vIG5lYXJlc3QtbmVpZ2hib3IgaW50ZXJwb2xhdGlvbiBmb3IgdXMuCiAgICAgICAgICB2YXIgc21vb3RoaW5nUHJvcGVydHkgPSBnZXRDYW52YXNTbW9vdGhpbmdQcm9wZXJ0eShjdHgpOwoKICAgICAgICAgIGlmIChzbW9vdGhpbmdQcm9wZXJ0eSB8fCBpbWdSZXMueCA+PSAyNTYgJiYgaW1nUmVzLnkgPj0gMjU2KSB7CiAgICAgICAgICAgIC8vIFVzZSBidWlsdC1pbiBzY2FsaW5nCgogICAgICAgICAgICAvLyBUdXJuIG9mZiBhbnRpLWFsaWFzaW5nIGlmIG5lY2Vzc2FyeQogICAgICAgICAgICBpZiAoc21vb3RoaW5nUHJvcGVydHkpIHsKICAgICAgICAgICAgICBjdHhbc21vb3RoaW5nUHJvcGVydHldID0gaW1nUmVzLnggPj0gMjU2ICYmIGltZ1Jlcy55ID49IDI1NjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gRG9uJ3QgbmVjZXNzYXJpbHkgZHJhdyB3aXRoIHRoZSBmdWxsLXNpemUgaW1hZ2U7IGlmIHdlJ3JlCiAgICAgICAgICAgIC8vIGRvd25zY2FsaW5nLCB1c2UgdGhlIG1pcG1hcHBlciB0byBnZXQgYSBwcmUtZG93bnNjYWxlZCBpbWFnZQogICAgICAgICAgICAvLyAoc2VlIGNvbW1lbnRzIG9uIE1pcG1hcHBlciBjbGFzcyBmb3Igd2h5IHRoaXMgbWF0dGVycykuCiAgICAgICAgICAgIG1pcG1hcHBlci5nZXRCeVNpemUoZXh0ZW50LnggKiAyNTYsIGV4dGVudC55ICogMjU2LCBmdW5jdGlvbiAobWlwKSB7CiAgICAgICAgICAgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHRoZSBpbWFnZSB3aWxsIGdvIG9mZiB0aGUgZWRnZSBvZiB0aGUgY2FudmFzLS0KICAgICAgICAgICAgICAvLyB0aGF0J3MgT0ssIHRoZSBjYW52YXMgc2hvdWxkIGNsaXAgYXBwcm9wcmlhdGVseS4KICAgICAgICAgICAgICBjdHguZHJhd0ltYWdlKG1pcCwKICAgICAgICAgICAgICAvLyBDb252ZXJ0IGFicyB0aWxlIGNvb3JkcyB0byByZWwgdGlsZSBjb29yZHMsIHRoZW4gKjI1NiB0byBjb252ZXJ0CiAgICAgICAgICAgICAgLy8gdG8gcmVsIHBpeGVsIGNvb3JkcwogICAgICAgICAgICAgICh0b3BMZWZ0LnggLSB0aWxlUG9pbnQueCkgKiAyNTYsICh0b3BMZWZ0LnkgLSB0aWxlUG9pbnQueSkgKiAyNTYsCiAgICAgICAgICAgICAgLy8gQWx3YXlzIGRyYXcgdGhlIHdob2xlIHRoaW5nIGFuZCBsZXQgY2FudmFzIGNsaXA7IHNvIHdlIGNhbiBqdXN0CiAgICAgICAgICAgICAgLy8gY29udmVydCBmcm9tIHNpemUgaW4gdGlsZSBjb29yZHMgc3RyYWlnaHQgdG8gcGl4ZWxzCiAgICAgICAgICAgICAgZXh0ZW50LnggKiAyNTYsIGV4dGVudC55ICogMjU2KTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBVc2UgbWFudWFsIG5lYXJlc3QtbmVpZ2hib3IgaW50ZXJwb2xhdGlvbgoKICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBzb3VyY2UgaW1hZ2UgcGl4ZWwgY29vcmRpbmF0ZXMgdGhhdCBjb3JyZXNwb25kIHdpdGgKICAgICAgICAgICAgLy8gdGhlIHRvcC1sZWZ0IGFuZCBib3R0b20tcmlnaHQgb2YgdGhpcyB0aWxlLiAoSWYgdGhlIHNvdXJjZSBpbWFnZQogICAgICAgICAgICAvLyBvbmx5IHBhcnRpYWxseSBvdmVybGFwcyB0aGUgdGlsZSwgd2UgdXNlIG1heC9taW4gdG8gbGltaXQgdGhlCiAgICAgICAgICAgIC8vIHNvdXJjZVN0YXJ0L0VuZCB0byBvbmx5IHJlZmxlY3QgdGhlIG92ZXJsYXBwaW5nIHBvcnRpb24uKQogICAgICAgICAgICB2YXIgc291cmNlU3RhcnQgPSB7CiAgICAgICAgICAgICAgeDogTWF0aC5tYXgoMCwgTWF0aC5mbG9vcigodGlsZVBvaW50LnggLSB0b3BMZWZ0LngpICogaW1nUmVzLngpKSwKICAgICAgICAgICAgICB5OiBNYXRoLm1heCgwLCBNYXRoLmZsb29yKCh0aWxlUG9pbnQueSAtIHRvcExlZnQueSkgKiBpbWdSZXMueSkpCiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHZhciBzb3VyY2VFbmQgPSB7CiAgICAgICAgICAgICAgeDogTWF0aC5taW4odywgTWF0aC5jZWlsKCh0aWxlUG9pbnQueCArIDEgLSB0b3BMZWZ0LngpICogaW1nUmVzLngpKSwKICAgICAgICAgICAgICB5OiBNYXRoLm1pbihoLCBNYXRoLmNlaWwoKHRpbGVQb2ludC55ICsgMSAtIHRvcExlZnQueSkgKiBpbWdSZXMueSkpCiAgICAgICAgICAgIH07CgogICAgICAgICAgICAvLyBUaGUgc2l6ZSwgaW4gZGVzdCBwaXhlbHMsIHRoYXQgZWFjaCBzb3VyY2UgcGl4ZWwgc2hvdWxkIG9jY3VweS4KICAgICAgICAgICAgLy8gVGhpcyBtaWdodCBiZSBncmVhdGVyIG9yIGxlc3MgdGhhbiAxIChlLmcuIGlmIHggYW5kIHkgcmVzb2x1dGlvbgogICAgICAgICAgICAvLyBhcmUgdmVyeSBkaWZmZXJlbnQpLgogICAgICAgICAgICB2YXIgcGl4ZWxTaXplID0gewogICAgICAgICAgICAgIHg6IDI1NiAvIGltZ1Jlcy54LAogICAgICAgICAgICAgIHk6IDI1NiAvIGltZ1Jlcy55CiAgICAgICAgICAgIH07CgogICAgICAgICAgICAvLyBGb3IgZWFjaCBwaXhlbCBpbiB0aGUgc291cmNlIGltYWdlIHRoYXQgb3ZlcmxhcHMgdGhlIHRpbGUuLi4KICAgICAgICAgICAgZm9yICh2YXIgcm93ID0gc291cmNlU3RhcnQueTsgcm93IDwgc291cmNlRW5kLnk7IHJvdysrKSB7CiAgICAgICAgICAgICAgZm9yICh2YXIgY29sID0gc291cmNlU3RhcnQueDsgY29sIDwgc291cmNlRW5kLng7IGNvbCsrKSB7CiAgICAgICAgICAgICAgICAvLyAuLi5leHRyYWN0IHRoZSBwaXhlbCBkYXRhLi4uCiAgICAgICAgICAgICAgICB2YXIgaSA9IChyb3cgKiB3ICsgY29sKSAqIDQ7CiAgICAgICAgICAgICAgICB2YXIgciA9IGltZ0RhdGFbaV07CiAgICAgICAgICAgICAgICB2YXIgZyA9IGltZ0RhdGFbaSArIDFdOwogICAgICAgICAgICAgICAgdmFyIGIgPSBpbWdEYXRhW2kgKyAyXTsKICAgICAgICAgICAgICAgIHZhciBhID0gaW1nRGF0YVtpICsgM107CiAgICAgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gInJnYmEoIiArIFtyLCBnLCBiLCBhIC8gMjU1XS5qb2luKCIsIikgKyAiKSI7CgogICAgICAgICAgICAgICAgLy8gLi4uY2FsY3VsYXRlIHRoZSBjb3JyZXNwb25kaW5nIHBpeGVsIGNvb3JkIGluIHRoZSBkZXN0IGltYWdlCiAgICAgICAgICAgICAgICAvLyB3aGVyZSBpdCBzaG91bGQgYmUgZHJhd24uLi4KICAgICAgICAgICAgICAgIHZhciBwaXhlbFBvcyA9IHsKICAgICAgICAgICAgICAgICAgeDogKGNvbCAvIGltZ1Jlcy54ICsgdG9wTGVmdC54IC0gdGlsZVBvaW50LngpICogMjU2LAogICAgICAgICAgICAgICAgICB5OiAocm93IC8gaW1nUmVzLnkgKyB0b3BMZWZ0LnkgLSB0aWxlUG9pbnQueSkgKiAyNTYKICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgLy8gLi4uYW5kIGRyYXcgYSByZWN0YW5nbGUgdGhlcmUuCiAgICAgICAgICAgICAgICBjdHguZmlsbFJlY3QoTWF0aC5yb3VuZChwaXhlbFBvcy54KSwgTWF0aC5yb3VuZChwaXhlbFBvcy55KSwKICAgICAgICAgICAgICAgIC8vIExvb2tzIGNyYXp5LCBidXQgdGhpcyBpcyBuZWNlc3NhcnkgdG8gcHJldmVudCByb3VuZGluZyBmcm9tCiAgICAgICAgICAgICAgICAvLyBjYXVzaW5nIG92ZXJsYXAgYmV0d2VlbiB0aGlzIHJlY3QgYW5kIGl0cyBuZWlnaGJvcnMuIFRoZQogICAgICAgICAgICAgICAgLy8gbWludWVuZCBpcyB0aGUgbG9jYXRpb24gb2YgdGhlIG5leHQgcGl4ZWwsIHdoaWxlIHRoZQogICAgICAgICAgICAgICAgLy8gc3VidHJhaGVuZCBpcyB0aGUgcG9zaXRpb24gb2YgdGhlIGN1cnJlbnQgcGl4ZWwgKHRvIHR1cm4gYW4KICAgICAgICAgICAgICAgIC8vIGFic29sdXRlIGNvb3JkaW5hdGUgdG8gYSB3aWR0aC9oZWlnaHQpLiBZZXMsIEkgaGFkIHRvIGxvb2sKICAgICAgICAgICAgICAgIC8vIHVwIG1pbnVlbmQgYW5kIHN1YnRyYWhlbmQuCiAgICAgICAgICAgICAgICBNYXRoLnJvdW5kKHBpeGVsUG9zLnggKyBwaXhlbFNpemUueCkgLSBNYXRoLnJvdW5kKHBpeGVsUG9zLngpLCBNYXRoLnJvdW5kKHBpeGVsUG9zLnkgKyBwaXhlbFNpemUueSkgLSBNYXRoLnJvdW5kKHBpeGVsUG9zLnkpKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9KCk7CgogICAgICAgIGlmICgodHlwZW9mIF9yZXQ3ID09PSAidW5kZWZpbmVkIiA/ICJ1bmRlZmluZWQiIDogX3R5cGVvZihfcmV0NykpID09PSAib2JqZWN0IikgcmV0dXJuIF9yZXQ3LnY7CiAgICAgIH0gZmluYWxseSB7CiAgICAgICAgY2FudmFzVGlsZXMudGlsZURyYXduKGNhbnZhcyk7CiAgICAgIH0KICAgIH0pOwogIH07CgogIHRoaXMubGF5ZXJNYW5hZ2VyLmFkZExheWVyKGNhbnZhc1RpbGVzLCAiaW1hZ2UiLCBsYXllcklkLCBncm91cCk7Cn07CgptZXRob2RzLnJlbW92ZUltYWdlID0gZnVuY3Rpb24gKGxheWVySWQpIHsKICB0aGlzLmxheWVyTWFuYWdlci5yZW1vdmVMYXllcigiaW1hZ2UiLCBsYXllcklkKTsKfTsKCm1ldGhvZHMuY2xlYXJJbWFnZXMgPSBmdW5jdGlvbiAoKSB7CiAgdGhpcy5sYXllck1hbmFnZXIuY2xlYXJMYXllcnMoImltYWdlIik7Cn07CgptZXRob2RzLmFkZE1lYXN1cmUgPSBmdW5jdGlvbiAob3B0aW9ucykgewogIC8vIGlmIGEgbWVhc3VyZUNvbnRyb2wgYWxyZWFkeSBleGlzdHMsIHRoZW4gcmVtb3ZlIGl0IGFuZAogIC8vICAgcmVwbGFjZSB3aXRoIGEgbmV3IG9uZQogIGlmICh0aGlzLm1lYXN1cmVDb250cm9sKSB7CiAgICB0aGlzLm1lYXN1cmVDb250cm9sLnJlbW92ZUZyb20odGhpcyk7CiAgfQogIHRoaXMubWVhc3VyZUNvbnRyb2wgPSBfbGVhZmxldDIuZGVmYXVsdC5jb250cm9sLm1lYXN1cmUob3B0aW9ucyk7CiAgdGhpcy5tZWFzdXJlQ29udHJvbC5hZGRUbyh0aGlzKTsKfTsKCm1ldGhvZHMucmVtb3ZlTWVhc3VyZSA9IGZ1bmN0aW9uICgpIHsKICB0aGlzLm1lYXN1cmVDb250cm9sLnJlbW92ZUZyb20odGhpcyk7CiAgZGVsZXRlIHRoaXMubWVhc3VyZUNvbnRyb2w7Cn07CgptZXRob2RzLmFkZFNlbGVjdCA9IGZ1bmN0aW9uIChjdEdyb3VwKSB7CiAgdmFyIF90aGlzOCA9IHRoaXM7CgogIG1ldGhvZHMucmVtb3ZlU2VsZWN0LmNhbGwodGhpcyk7CgogIHRoaXMuX3NlbGVjdEJ1dHRvbiA9IF9sZWFmbGV0Mi5kZWZhdWx0LmVhc3lCdXR0b24oewogICAgc3RhdGVzOiBbewogICAgICBzdGF0ZU5hbWU6ICJzZWxlY3QtaW5hY3RpdmUiLAogICAgICBpY29uOiAiaW9uLXFyLXNjYW5uZXIiLAogICAgICB0aXRsZTogIk1ha2UgYSBzZWxlY3Rpb24iLAogICAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKGJ0biwgbWFwKSB7CiAgICAgICAgYnRuLnN0YXRlKCJzZWxlY3QtYWN0aXZlIik7CiAgICAgICAgX3RoaXM4Ll9sb2NhdGlvbkZpbHRlciA9IG5ldyBfbGVhZmxldDIuZGVmYXVsdC5Mb2NhdGlvbkZpbHRlcjIoKTsKCiAgICAgICAgaWYgKGN0R3JvdXApIHsKICAgICAgICAgIChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBzZWxlY3Rpb25IYW5kbGUgPSBuZXcgZ2xvYmFsLmNyb3NzdGFsay5TZWxlY3Rpb25IYW5kbGUoY3RHcm91cCk7CiAgICAgICAgICAgIHNlbGVjdGlvbkhhbmRsZS5vbigiY2hhbmdlIiwgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICBpZiAoZS5zZW5kZXIgIT09IHNlbGVjdGlvbkhhbmRsZSkgewogICAgICAgICAgICAgICAgaWYgKF90aGlzOC5fbG9jYXRpb25GaWx0ZXIpIHsKICAgICAgICAgICAgICAgICAgX3RoaXM4Ll9sb2NhdGlvbkZpbHRlci5kaXNhYmxlKCk7CiAgICAgICAgICAgICAgICAgIGJ0bi5zdGF0ZSgic2VsZWN0LWluYWN0aXZlIik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdmFyIGhhbmRsZXIgPSBmdW5jdGlvbiBoYW5kbGVyKGUpIHsKICAgICAgICAgICAgICBfdGhpczgubGF5ZXJNYW5hZ2VyLmJydXNoKF90aGlzOC5fbG9jYXRpb25GaWx0ZXIuZ2V0Qm91bmRzKCksIHsgc2VuZGVyOiBzZWxlY3Rpb25IYW5kbGUgfSk7CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIF90aGlzOC5fbG9jYXRpb25GaWx0ZXIub24oImVuYWJsZWQiLCBoYW5kbGVyKTsKICAgICAgICAgICAgX3RoaXM4Ll9sb2NhdGlvbkZpbHRlci5vbigiY2hhbmdlIiwgaGFuZGxlcik7CiAgICAgICAgICAgIF90aGlzOC5fbG9jYXRpb25GaWx0ZXIub24oImRpc2FibGVkIiwgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgIHNlbGVjdGlvbkhhbmRsZS5jbG9zZSgpOwogICAgICAgICAgICAgIF90aGlzOC5fbG9jYXRpb25GaWx0ZXIgPSBudWxsOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0pKCk7CiAgICAgICAgfQoKICAgICAgICBfdGhpczguX2xvY2F0aW9uRmlsdGVyLmFkZFRvKG1hcCk7CiAgICAgIH0KICAgIH0sIHsKICAgICAgc3RhdGVOYW1lOiAic2VsZWN0LWFjdGl2ZSIsCiAgICAgIGljb246ICJpb24tY2xvc2Utcm91bmQiLAogICAgICB0aXRsZTogIkRpc21pc3Mgc2VsZWN0aW9uIiwKICAgICAgb25DbGljazogZnVuY3Rpb24gb25DbGljayhidG4sIG1hcCkgewogICAgICAgIGJ0bi5zdGF0ZSgic2VsZWN0LWluYWN0aXZlIik7CiAgICAgICAgX3RoaXM4Ll9sb2NhdGlvbkZpbHRlci5kaXNhYmxlKCk7CiAgICAgICAgLy8gSWYgZXhwbGljaXRseSBkaXNtaXNzZWQsIGNsZWFyIHRoZSBjcm9zc3RhbGsgc2VsZWN0aW9ucwogICAgICAgIF90aGlzOC5sYXllck1hbmFnZXIudW5icnVzaCgpOwogICAgICB9CiAgICB9XQogIH0pOwoKICB0aGlzLl9zZWxlY3RCdXR0b24uYWRkVG8odGhpcyk7Cn07CgptZXRob2RzLnJlbW92ZVNlbGVjdCA9IGZ1bmN0aW9uICgpIHsKICBpZiAodGhpcy5fbG9jYXRpb25GaWx0ZXIpIHsKICAgIHRoaXMuX2xvY2F0aW9uRmlsdGVyLmRpc2FibGUoKTsKICB9CgogIGlmICh0aGlzLl9zZWxlY3RCdXR0b24pIHsKICAgIHRoaXMucmVtb3ZlQ29udHJvbCh0aGlzLl9zZWxlY3RCdXR0b24pOwogICAgdGhpcy5fc2VsZWN0QnV0dG9uID0gbnVsbDsKICB9Cn07CgoKfSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWwgIT09ICJ1bmRlZmluZWQiID8gZ2xvYmFsIDogdHlwZW9mIHNlbGYgIT09ICJ1bmRlZmluZWQiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgIT09ICJ1bmRlZmluZWQiID8gd2luZG93IDoge30pCn0seyIuL2NsdXN0ZXItbGF5ZXItc3RvcmUiOjEsIi4vY3JzX3V0aWxzIjozLCIuL2RhdGFmcmFtZSI6NCwiLi9nbG9iYWwvaHRtbHdpZGdldHMiOjYsIi4vZ2xvYmFsL2pxdWVyeSI6NywiLi9nbG9iYWwvbGVhZmxldCI6OCwiLi9nbG9iYWwvc2hpbnkiOjEwLCIuL21pcG1hcHBlciI6MTQsIi4vdXRpbCI6MTV9XSwxNDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CiJ1c2Ugc3RyaWN0IjsKCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiX19lc01vZHVsZSIsIHsKICB2YWx1ZTogdHJ1ZQp9KTsKCnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoInZhbHVlIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpOwoKZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKTsgfSB9CgovLyBUaGlzIGNsYXNzIHNpbXVsYXRlcyBhIG1pcG1hcCwgd2hpY2ggc2hyaW5rcyBpbWFnZXMgYnkgcG93ZXJzIG9mIHR3by4gVGhpcwovLyBzdGVwd2lzZSByZWR1Y3Rpb24gcmVzdWx0cyBpbiAicGl4ZWwtcGVyZmVjdCBkb3duc2NhbGluZyIgKHdoZXJlIGV2ZXJ5Ci8vIHBpeGVsIG9mIHRoZSBvcmlnaW5hbCBpbWFnZSBoYXMgc29tZSBjb250cmlidXRpb24gdG8gdGhlIGRvd25zY2FsZWQgaW1hZ2UpCi8vIGFzIG9wcG9zZWQgdG8gYSBzaW5nbGUtc3RlcCBkb3duc2NhbGluZyB3aGljaCB3aWxsIGRpc2NhcmQgYSBsb3Qgb2YgZGF0YQovLyAoYW5kIHdpdGggc3BhcnNlIGltYWdlcyBhdCBzbWFsbCBzY2FsZXMgY2FuIGdpdmUgdmVyeSBzdXJwcmlzaW5nIHJlc3VsdHMpLgoKdmFyIE1pcG1hcHBlciA9IGZ1bmN0aW9uICgpIHsKICBmdW5jdGlvbiBNaXBtYXBwZXIoaW1nKSB7CiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTWlwbWFwcGVyKTsKCiAgICB0aGlzLl9sYXllcnMgPSBbaW1nXTsKICB9CgogIC8vIFRoZSB2YXJpb3VzIGZ1bmN0aW9ucyBvbiB0aGlzIGNsYXNzIHRha2UgYSBjYWxsYmFjayBmdW5jdGlvbiBCVVQgTUFZIE9SIE1BWQogIC8vIE5PVCBhY3R1YWxseSBiZWhhdmUgYXN5bmNocm9ub3VzbHkuCgoKICBfY3JlYXRlQ2xhc3MoTWlwbWFwcGVyLCBbewogICAga2V5OiAiZ2V0QnlTaXplIiwKICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRCeVNpemUoZGVzaXJlZFdpZHRoLCBkZXNpcmVkSGVpZ2h0LCBjYWxsYmFjaykgewogICAgICB2YXIgX3RoaXMgPSB0aGlzOwoKICAgICAgdmFyIGkgPSAwOwogICAgICB2YXIgbGFzdEltZyA9IHRoaXMuX2xheWVyc1swXTsKICAgICAgdmFyIHRlc3ROZXh0ID0gZnVuY3Rpb24gdGVzdE5leHQoKSB7CiAgICAgICAgX3RoaXMuZ2V0QnlJbmRleChpLCBmdW5jdGlvbiAoaW1nKSB7CiAgICAgICAgICAvLyBJZiBjdXJyZW50IGltYWdlIGlzIGludmFsaWQgKGkuZS4gdG9vIHNtYWxsIHRvIGJlIHJlbmRlcmVkKSBvcgogICAgICAgICAgLy8gaXQncyBzbWFsbGVyIHRoYW4gd2hhdCB3ZSB3YW50ZWQsIHJldHVybiB0aGUgbGFzdCBrbm93biBnb29kIGltYWdlLgogICAgICAgICAgaWYgKCFpbWcgfHwgaW1nLndpZHRoIDwgZGVzaXJlZFdpZHRoIHx8IGltZy5oZWlnaHQgPCBkZXNpcmVkSGVpZ2h0KSB7CiAgICAgICAgICAgIGNhbGxiYWNrKGxhc3RJbWcpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBsYXN0SW1nID0gaW1nOwogICAgICAgICAgICBpKys7CiAgICAgICAgICAgIHRlc3ROZXh0KCk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfTsKICAgICAgdGVzdE5leHQoKTsKICAgIH0KICB9LCB7CiAgICBrZXk6ICJnZXRCeUluZGV4IiwKICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRCeUluZGV4KGksIGNhbGxiYWNrKSB7CiAgICAgIHZhciBfdGhpczIgPSB0aGlzOwoKICAgICAgaWYgKHRoaXMuX2xheWVyc1tpXSkgewogICAgICAgIGNhbGxiYWNrKHRoaXMuX2xheWVyc1tpXSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICB0aGlzLmdldEJ5SW5kZXgoaSAtIDEsIGZ1bmN0aW9uIChwcmV2SW1nKSB7CiAgICAgICAgaWYgKCFwcmV2SW1nKSB7CiAgICAgICAgICAvLyBwcmV2SW1nIGNvdWxkIG5vdCBiZSBjYWxjdWxhdGVkICh0b28gc21hbGwsIHBvc3NpYmx5KQogICAgICAgICAgY2FsbGJhY2sobnVsbCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmIChwcmV2SW1nLndpZHRoIDwgMiB8fCBwcmV2SW1nLmhlaWdodCA8IDIpIHsKICAgICAgICAgIC8vIENhbid0IHJlZHVjZSB0aGlzIGltYWdlIGFueSBmdXJ0aGVyCiAgICAgICAgICBjYWxsYmFjayhudWxsKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgLy8gSWYgcmVkdWNlIGV2ZXIgYmVjb21lcyB0cnVseSBhc3luY2hyb25vdXMsIHdlIHNob3VsZCBzdHVmZiBhIHByb21pc2Ugb3IKICAgICAgICAvLyBzb21ldGhpbmcgaW50byB0aGlzLl9sYXllcnNbaV0gYmVmb3JlIGNhbGxpbmcgdGhpcy5yZWR1Y2UoKSwgdG8gcHJldmVudAogICAgICAgIC8vIHJlZHVuZGFudCByZWR1Y2Ugb3BlcmF0aW9ucyBmcm9tIGhhcHBlbmluZy4KICAgICAgICBfdGhpczIucmVkdWNlKHByZXZJbWcsIGZ1bmN0aW9uIChyZWR1Y2VkSW1nKSB7CiAgICAgICAgICBfdGhpczIuX2xheWVyc1tpXSA9IHJlZHVjZWRJbWc7CiAgICAgICAgICBjYWxsYmFjayhyZWR1Y2VkSW1nKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9CiAgfSwgewogICAga2V5OiAicmVkdWNlIiwKICAgIHZhbHVlOiBmdW5jdGlvbiByZWR1Y2UoaW1nLCBjYWxsYmFjaykgewogICAgICB2YXIgaW1nRGF0YUNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOwogICAgICBpbWdEYXRhQ2FudmFzLndpZHRoID0gTWF0aC5jZWlsKGltZy53aWR0aCAvIDIpOwogICAgICBpbWdEYXRhQ2FudmFzLmhlaWdodCA9IE1hdGguY2VpbChpbWcuaGVpZ2h0IC8gMik7CiAgICAgIGltZ0RhdGFDYW52YXMuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpbWdEYXRhQ2FudmFzKTsKICAgICAgdHJ5IHsKICAgICAgICB2YXIgaW1nRGF0YUN0eCA9IGltZ0RhdGFDYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKICAgICAgICBpbWdEYXRhQ3R4LmRyYXdJbWFnZShpbWcsIDAsIDAsIGltZy53aWR0aCAvIDIsIGltZy5oZWlnaHQgLyAyKTsKICAgICAgICBjYWxsYmFjayhpbWdEYXRhQ2FudmFzKTsKICAgICAgfSBmaW5hbGx5IHsKICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGltZ0RhdGFDYW52YXMpOwogICAgICB9CiAgICB9CiAgfV0pOwoKICByZXR1cm4gTWlwbWFwcGVyOwp9KCk7CgpleHBvcnRzLmRlZmF1bHQgPSBNaXBtYXBwZXI7CgoKfSx7fV0sMTU6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewoidXNlIHN0cmljdCI7CgpPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgIl9fZXNNb2R1bGUiLCB7CiAgdmFsdWU6IHRydWUKfSk7CmV4cG9ydHMubG9nID0gbG9nOwpleHBvcnRzLnJlY3ljbGUgPSByZWN5Y2xlOwpleHBvcnRzLmFzQXJyYXkgPSBhc0FycmF5OwpmdW5jdGlvbiBsb2cobWVzc2FnZSkgewogIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi8KICBpZiAoY29uc29sZSAmJiBjb25zb2xlLmxvZykgY29uc29sZS5sb2cobWVzc2FnZSk7CiAgLyogZXNsaW50LWVuYWJsZSBuby1jb25zb2xlICovCn0KCmZ1bmN0aW9uIHJlY3ljbGUodmFsdWVzLCBsZW5ndGgsIGluUGxhY2UpIHsKICBpZiAobGVuZ3RoID09PSAwICYmICFpblBsYWNlKSByZXR1cm4gW107CgogIGlmICghKHZhbHVlcyBpbnN0YW5jZW9mIEFycmF5KSkgewogICAgaWYgKGluUGxhY2UpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJDYW4ndCBkbyBpbi1wbGFjZSByZWN5Y2xpbmcgb2YgYSBub24tQXJyYXkgdmFsdWUiKTsKICAgIH0KICAgIHZhbHVlcyA9IFt2YWx1ZXNdOwogIH0KICBpZiAodHlwZW9mIGxlbmd0aCA9PT0gInVuZGVmaW5lZCIpIGxlbmd0aCA9IHZhbHVlcy5sZW5ndGg7CgogIHZhciBkZXN0ID0gaW5QbGFjZSA/IHZhbHVlcyA6IFtdOwogIHZhciBvcmlnTGVuZ3RoID0gdmFsdWVzLmxlbmd0aDsKICB3aGlsZSAoZGVzdC5sZW5ndGggPCBsZW5ndGgpIHsKICAgIGRlc3QucHVzaCh2YWx1ZXNbZGVzdC5sZW5ndGggJSBvcmlnTGVuZ3RoXSk7CiAgfQogIGlmIChkZXN0Lmxlbmd0aCA+IGxlbmd0aCkgewogICAgZGVzdC5zcGxpY2UobGVuZ3RoLCBkZXN0Lmxlbmd0aCAtIGxlbmd0aCk7CiAgfQogIHJldHVybiBkZXN0Owp9CgpmdW5jdGlvbiBhc0FycmF5KHZhbHVlKSB7CiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgQXJyYXkpIHJldHVybiB2YWx1ZTtlbHNlIHJldHVybiBbdmFsdWVdOwp9CgoKfSx7fV19LHt9LFsxMV0pOwo="></script> <script src="data:application/x-javascript;base64,KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7CglpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7CgkJLy8gQU1ELiBSZWdpc3RlciBhcyBhbiBhbm9ueW1vdXMgbW9kdWxlLgoJCWRlZmluZShbJ2xlYWZsZXQnXSwgZmFjdG9yeSk7Cgl9IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGVzID09PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cykgewoJCS8vIGRlZmluZSBhIENvbW1vbiBKUyBtb2R1bGUgdGhhdCByZWxpZXMgb24gJ2xlYWZsZXQnCgkJbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoJ2xlYWZsZXQnKSk7Cgl9IGVsc2UgewoJCS8vIEFzc3VtZSBMZWFmbGV0IGlzIGxvYWRlZCBpbnRvIGdsb2JhbCBvYmplY3QgTCBhbHJlYWR5CgkJZmFjdG9yeShMKTsKCX0KfSh0aGlzLCBmdW5jdGlvbiAoTCkgewoJJ3VzZSBzdHJpY3QnOwoKCUwuVGlsZUxheWVyLlByb3ZpZGVyID0gTC5UaWxlTGF5ZXIuZXh0ZW5kKHsKCQlpbml0aWFsaXplOiBmdW5jdGlvbiAoYXJnLCBvcHRpb25zKSB7CgkJCXZhciBwcm92aWRlcnMgPSBMLlRpbGVMYXllci5Qcm92aWRlci5wcm92aWRlcnM7CgoJCQl2YXIgcGFydHMgPSBhcmcuc3BsaXQoJy4nKTsKCgkJCXZhciBwcm92aWRlck5hbWUgPSBwYXJ0c1swXTsKCQkJdmFyIHZhcmlhbnROYW1lID0gcGFydHNbMV07CgoJCQlpZiAoIXByb3ZpZGVyc1twcm92aWRlck5hbWVdKSB7CgkJCQl0aHJvdyAnTm8gc3VjaCBwcm92aWRlciAoJyArIHByb3ZpZGVyTmFtZSArICcpJzsKCQkJfQoKCQkJdmFyIHByb3ZpZGVyID0gewoJCQkJdXJsOiBwcm92aWRlcnNbcHJvdmlkZXJOYW1lXS51cmwsCgkJCQlvcHRpb25zOiBwcm92aWRlcnNbcHJvdmlkZXJOYW1lXS5vcHRpb25zCgkJCX07CgoJCQkvLyBvdmVyd3JpdGUgdmFsdWVzIGluIHByb3ZpZGVyIGZyb20gdmFyaWFudC4KCQkJaWYgKHZhcmlhbnROYW1lICYmICd2YXJpYW50cycgaW4gcHJvdmlkZXJzW3Byb3ZpZGVyTmFtZV0pIHsKCQkJCWlmICghKHZhcmlhbnROYW1lIGluIHByb3ZpZGVyc1twcm92aWRlck5hbWVdLnZhcmlhbnRzKSkgewoJCQkJCXRocm93ICdObyBzdWNoIHZhcmlhbnQgb2YgJyArIHByb3ZpZGVyTmFtZSArICcgKCcgKyB2YXJpYW50TmFtZSArICcpJzsKCQkJCX0KCQkJCXZhciB2YXJpYW50ID0gcHJvdmlkZXJzW3Byb3ZpZGVyTmFtZV0udmFyaWFudHNbdmFyaWFudE5hbWVdOwoJCQkJdmFyIHZhcmlhbnRPcHRpb25zOwoJCQkJaWYgKHR5cGVvZiB2YXJpYW50ID09PSAnc3RyaW5nJykgewoJCQkJCXZhcmlhbnRPcHRpb25zID0gewoJCQkJCQl2YXJpYW50OiB2YXJpYW50CgkJCQkJfTsKCQkJCX0gZWxzZSB7CgkJCQkJdmFyaWFudE9wdGlvbnMgPSB2YXJpYW50Lm9wdGlvbnM7CgkJCQl9CgkJCQlwcm92aWRlciA9IHsKCQkJCQl1cmw6IHZhcmlhbnQudXJsIHx8IHByb3ZpZGVyLnVybCwKCQkJCQlvcHRpb25zOiBMLlV0aWwuZXh0ZW5kKHt9LCBwcm92aWRlci5vcHRpb25zLCB2YXJpYW50T3B0aW9ucykKCQkJCX07CgkJCX0KCgkJCXZhciBmb3JjZUhUVFAgPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgPT09ICdmaWxlOicgfHwgcHJvdmlkZXIub3B0aW9ucy5mb3JjZUhUVFA7CgkJCWlmIChwcm92aWRlci51cmwuaW5kZXhPZignLy8nKSA9PT0gMCAmJiBmb3JjZUhUVFApIHsKCQkJCXByb3ZpZGVyLnVybCA9ICdodHRwOicgKyBwcm92aWRlci51cmw7CgkJCX0KCgkJCS8vIElmIHJldGluYSBvcHRpb24gaXMgc2V0CgkJCWlmIChwcm92aWRlci5vcHRpb25zLnJldGluYSkgewoJCQkJLy8gQ2hlY2sgcmV0aW5hIHNjcmVlbgoJCQkJaWYgKG9wdGlvbnMuZGV0ZWN0UmV0aW5hICYmIEwuQnJvd3Nlci5yZXRpbmEpIHsKCQkJCQkvLyBUaGUgcmV0aW5hIG9wdGlvbiB3aWxsIGJlIGFjdGl2ZSBub3cKCQkJCQkvLyBCdXQgd2UgbmVlZCB0byBwcmV2ZW50IExlYWZsZXQgcmV0aW5hIG1vZGUKCQkJCQlvcHRpb25zLmRldGVjdFJldGluYSA9IGZhbHNlOwoJCQkJfSBlbHNlIHsKCQkJCQkvLyBObyByZXRpbmEsIHJlbW92ZSBvcHRpb24KCQkJCQlwcm92aWRlci5vcHRpb25zLnJldGluYSA9ICcnOwoJCQkJfQoJCQl9CgoJCQkvLyByZXBsYWNlIGF0dHJpYnV0aW9uIHBsYWNlaG9sZGVycyB3aXRoIHRoZWlyIHZhbHVlcyBmcm9tIHRvcGxldmVsIHByb3ZpZGVyIGF0dHJpYnV0aW9uLAoJCQkvLyByZWN1cnNpdmVseQoJCQl2YXIgYXR0cmlidXRpb25SZXBsYWNlciA9IGZ1bmN0aW9uIChhdHRyKSB7CgkJCQlpZiAoYXR0ci5pbmRleE9mKCd7YXR0cmlidXRpb24uJykgPT09IC0xKSB7CgkJCQkJcmV0dXJuIGF0dHI7CgkJCQl9CgkJCQlyZXR1cm4gYXR0ci5yZXBsYWNlKC9ce2F0dHJpYnV0aW9uLihcdyopXH0vLAoJCQkJCWZ1bmN0aW9uIChtYXRjaCwgYXR0cmlidXRpb25OYW1lKSB7CgkJCQkJCXJldHVybiBhdHRyaWJ1dGlvblJlcGxhY2VyKHByb3ZpZGVyc1thdHRyaWJ1dGlvbk5hbWVdLm9wdGlvbnMuYXR0cmlidXRpb24pOwoJCQkJCX0KCQkJCSk7CgkJCX07CgkJCXByb3ZpZGVyLm9wdGlvbnMuYXR0cmlidXRpb24gPSBhdHRyaWJ1dGlvblJlcGxhY2VyKHByb3ZpZGVyLm9wdGlvbnMuYXR0cmlidXRpb24pOwoKCQkJLy8gQ29tcHV0ZSBmaW5hbCBvcHRpb25zIGNvbWJpbmluZyBwcm92aWRlciBvcHRpb25zIHdpdGggYW55IHVzZXIgb3ZlcnJpZGVzCgkJCXZhciBsYXllck9wdHMgPSBMLlV0aWwuZXh0ZW5kKHt9LCBwcm92aWRlci5vcHRpb25zLCBvcHRpb25zKTsKCQkJTC5UaWxlTGF5ZXIucHJvdG90eXBlLmluaXRpYWxpemUuY2FsbCh0aGlzLCBwcm92aWRlci51cmwsIGxheWVyT3B0cyk7CgkJfQoJfSk7CgoJLyoqCgkgKiBEZWZpbml0aW9uIG9mIHByb3ZpZGVycy4KCSAqIHNlZSBodHRwOi8vbGVhZmxldGpzLmNvbS9yZWZlcmVuY2UuaHRtbCN0aWxlbGF5ZXIgZm9yIG9wdGlvbnMgaW4gdGhlIG9wdGlvbnMgbWFwLgoJICovCgoJTC5UaWxlTGF5ZXIuUHJvdmlkZXIucHJvdmlkZXJzID0gewoJCU9wZW5TdHJlZXRNYXA6IHsKCQkJdXJsOiAnLy97c30udGlsZS5vcGVuc3RyZWV0bWFwLm9yZy97en0ve3h9L3t5fS5wbmcnLAoJCQlvcHRpb25zOiB7CgkJCQltYXhab29tOiAxOSwKCQkJCWF0dHJpYnV0aW9uOgoJCQkJCScmY29weTsgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuc3RyZWV0bWFwLm9yZy9jb3B5cmlnaHQiPk9wZW5TdHJlZXRNYXA8L2E+JwoJCQl9LAoJCQl2YXJpYW50czogewoJCQkJTWFwbmlrOiB7fSwKCQkJCUJsYWNrQW5kV2hpdGU6IHsKCQkJCQl1cmw6ICdodHRwOi8ve3N9LnRpbGVzLndtZmxhYnMub3JnL2J3LW1hcG5pay97en0ve3h9L3t5fS5wbmcnLAoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJbWF4Wm9vbTogMTgKCQkJCQl9CgkJCQl9LAoJCQkJREU6IHsKCQkJCQl1cmw6ICdodHRwOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5kZS90aWxlcy9vc21kZS97en0ve3h9L3t5fS5wbmcnLAoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJbWF4Wm9vbTogMTgKCQkJCQl9CgkJCQl9LAoJCQkJRnJhbmNlOiB7CgkJCQkJdXJsOiAnLy97c30udGlsZS5vcGVuc3RyZWV0bWFwLmZyL29zbWZyL3t6fS97eH0ve3l9LnBuZycsCgkJCQkJb3B0aW9uczogewoJCQkJCQltYXhab29tOiAyMCwKCQkJCQkJYXR0cmlidXRpb246ICcmY29weTsgT3BlbnN0cmVldG1hcCBGcmFuY2UgfCB7YXR0cmlidXRpb24uT3BlblN0cmVldE1hcH0nCgkJCQkJfQoJCQkJfSwKCQkJCUhPVDogewoJCQkJCXVybDogJy8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5mci9ob3Qve3p9L3t4fS97eX0ucG5nJywKCQkJCQlvcHRpb25zOiB7CgkJCQkJCWF0dHJpYnV0aW9uOiAne2F0dHJpYnV0aW9uLk9wZW5TdHJlZXRNYXB9LCBUaWxlcyBjb3VydGVzeSBvZiA8YSBocmVmPSJodHRwOi8vaG90Lm9wZW5zdHJlZXRtYXAub3JnLyIgdGFyZ2V0PSJfYmxhbmsiPkh1bWFuaXRhcmlhbiBPcGVuU3RyZWV0TWFwIFRlYW08L2E+JwoJCQkJCX0KCQkJCX0KCQkJfQoJCX0sCgkJT3BlblNlYU1hcDogewoJCQl1cmw6ICdodHRwOi8vdGlsZXMub3BlbnNlYW1hcC5vcmcvc2VhbWFyay97en0ve3h9L3t5fS5wbmcnLAoJCQlvcHRpb25zOiB7CgkJCQlhdHRyaWJ1dGlvbjogJ01hcCBkYXRhOiAmY29weTsgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuc2VhbWFwLm9yZyI+T3BlblNlYU1hcDwvYT4gY29udHJpYnV0b3JzJwoJCQl9CgkJfSwKCQlPcGVuVG9wb01hcDogewoJCQl1cmw6ICcvL3tzfS50aWxlLm9wZW50b3BvbWFwLm9yZy97en0ve3h9L3t5fS5wbmcnLAoJCQlvcHRpb25zOiB7CgkJCQltYXhab29tOiAxNywKCQkJCWF0dHJpYnV0aW9uOiAnTWFwIGRhdGE6IHthdHRyaWJ1dGlvbi5PcGVuU3RyZWV0TWFwfSwgPGEgaHJlZj0iaHR0cDovL3ZpZXdmaW5kZXJwYW5vcmFtYXMub3JnIj5TUlRNPC9hPiB8IE1hcCBzdHlsZTogJmNvcHk7IDxhIGhyZWY9Imh0dHBzOi8vb3BlbnRvcG9tYXAub3JnIj5PcGVuVG9wb01hcDwvYT4gKDxhIGhyZWY9Imh0dHBzOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1zYS8zLjAvIj5DQy1CWS1TQTwvYT4pJwoJCQl9CgkJfSwKCQlUaHVuZGVyZm9yZXN0OiB7CgkJCXVybDogJy8ve3N9LnRpbGUudGh1bmRlcmZvcmVzdC5jb20ve3ZhcmlhbnR9L3t6fS97eH0ve3l9LnBuZycsCgkJCW9wdGlvbnM6IHsKCQkJCWF0dHJpYnV0aW9uOgoJCQkJCScmY29weTsgPGEgaHJlZj0iaHR0cDovL3d3dy50aHVuZGVyZm9yZXN0LmNvbS8iPlRodW5kZXJmb3Jlc3Q8L2E+LCB7YXR0cmlidXRpb24uT3BlblN0cmVldE1hcH0nLAoJCQkJdmFyaWFudDogJ2N5Y2xlJwoJCQl9LAoJCQl2YXJpYW50czogewoJCQkJT3BlbkN5Y2xlTWFwOiAnY3ljbGUnLAoJCQkJVHJhbnNwb3J0OiB7CgkJCQkJb3B0aW9uczogewoJCQkJCQl2YXJpYW50OiAndHJhbnNwb3J0JywKCQkJCQkJbWF4Wm9vbTogMTkKCQkJCQl9CgkJCQl9LAoJCQkJVHJhbnNwb3J0RGFyazogewoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJdmFyaWFudDogJ3RyYW5zcG9ydC1kYXJrJywKCQkJCQkJbWF4Wm9vbTogMTkKCQkJCQl9CgkJCQl9LAoJCQkJU3BpbmFsTWFwOiB7CgkJCQkJb3B0aW9uczogewoJCQkJCQl2YXJpYW50OiAnc3BpbmFsLW1hcCcsCgkJCQkJCW1heFpvb206IDExCgkJCQkJfQoJCQkJfSwKCQkJCUxhbmRzY2FwZTogJ2xhbmRzY2FwZScsCgkJCQlPdXRkb29yczogJ291dGRvb3JzJywKCQkJCVBpb25lZXI6ICdwaW9uZWVyJwoJCQl9CgkJfSwKCQlPcGVuTWFwU3VyZmVyOiB7CgkJCXVybDogJ2h0dHA6Ly9rb3JvbmEuZ2VvZy51bmktaGVpZGVsYmVyZy5kZS90aWxlcy97dmFyaWFudH0veD17eH0meT17eX0mej17en0nLAoJCQlvcHRpb25zOiB7CgkJCQltYXhab29tOiAyMCwKCQkJCXZhcmlhbnQ6ICdyb2FkcycsCgkJCQlhdHRyaWJ1dGlvbjogJ0ltYWdlcnkgZnJvbSA8YSBocmVmPSJodHRwOi8vZ2lzY2llbmNlLnVuaS1oZC5kZS8iPkdJU2NpZW5jZSBSZXNlYXJjaCBHcm91cCBAIFVuaXZlcnNpdHkgb2YgSGVpZGVsYmVyZzwvYT4gJm1kYXNoOyBNYXAgZGF0YSB7YXR0cmlidXRpb24uT3BlblN0cmVldE1hcH0nCgkJCX0sCgkJCXZhcmlhbnRzOiB7CgkJCQlSb2FkczogJ3JvYWRzJywKCQkJCUFkbWluQm91bmRzOiB7CgkJCQkJb3B0aW9uczogewoJCQkJCQl2YXJpYW50OiAnYWRtaW5iJywKCQkJCQkJbWF4Wm9vbTogMTkKCQkJCQl9CgkJCQl9LAoJCQkJR3JheXNjYWxlOiB7CgkJCQkJb3B0aW9uczogewoJCQkJCQl2YXJpYW50OiAncm9hZHNnJywKCQkJCQkJbWF4Wm9vbTogMTkKCQkJCQl9CgkJCQl9CgkJCX0KCQl9LAoJCUh5ZGRhOiB7CgkJCXVybDogJy8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5zZS9oeWRkYS97dmFyaWFudH0ve3p9L3t4fS97eX0ucG5nJywKCQkJb3B0aW9uczogewoJCQkJdmFyaWFudDogJ2Z1bGwnLAoJCQkJYXR0cmlidXRpb246ICdUaWxlcyBjb3VydGVzeSBvZiA8YSBocmVmPSJodHRwOi8vb3BlbnN0cmVldG1hcC5zZS8iIHRhcmdldD0iX2JsYW5rIj5PcGVuU3RyZWV0TWFwIFN3ZWRlbjwvYT4gJm1kYXNoOyBNYXAgZGF0YSB7YXR0cmlidXRpb24uT3BlblN0cmVldE1hcH0nCgkJCX0sCgkJCXZhcmlhbnRzOiB7CgkJCQlGdWxsOiAnZnVsbCcsCgkJCQlCYXNlOiAnYmFzZScsCgkJCQlSb2Fkc0FuZExhYmVsczogJ3JvYWRzX2FuZF9sYWJlbHMnCgkJCX0KCQl9LAoJCU1hcEJveDogewoJCQl1cmw6ICcvL2FwaS50aWxlcy5tYXBib3guY29tL3Y0L3tpZH0ve3p9L3t4fS97eX0ucG5nP2FjY2Vzc190b2tlbj17YWNjZXNzVG9rZW59JywKCQkJb3B0aW9uczogewoJCQkJYXR0cmlidXRpb246CgkJCQkJJ0ltYWdlcnkgZnJvbSA8YSBocmVmPSJodHRwOi8vbWFwYm94LmNvbS9hYm91dC9tYXBzLyI+TWFwQm94PC9hPiAmbWRhc2g7ICcgKwoJCQkJCSdNYXAgZGF0YSB7YXR0cmlidXRpb24uT3BlblN0cmVldE1hcH0nLAoJCQkJc3ViZG9tYWluczogJ2FiY2QnCgkJCX0KCQl9LAoJCVN0YW1lbjogewoJCQl1cmw6ICcvL3N0YW1lbi10aWxlcy17c30uYS5zc2wuZmFzdGx5Lm5ldC97dmFyaWFudH0ve3p9L3t4fS97eX0ue2V4dH0nLAoJCQlvcHRpb25zOiB7CgkJCQlhdHRyaWJ1dGlvbjoKCQkJCQknTWFwIHRpbGVzIGJ5IDxhIGhyZWY9Imh0dHA6Ly9zdGFtZW4uY29tIj5TdGFtZW4gRGVzaWduPC9hPiwgJyArCgkJCQkJJzxhIGhyZWY9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LzMuMCI+Q0MgQlkgMy4wPC9hPiAmbWRhc2g7ICcgKwoJCQkJCSdNYXAgZGF0YSB7YXR0cmlidXRpb24uT3BlblN0cmVldE1hcH0nLAoJCQkJc3ViZG9tYWluczogJ2FiY2QnLAoJCQkJbWluWm9vbTogMCwKCQkJCW1heFpvb206IDIwLAoJCQkJdmFyaWFudDogJ3RvbmVyJywKCQkJCWV4dDogJ3BuZycKCQkJfSwKCQkJdmFyaWFudHM6IHsKCQkJCVRvbmVyOiAndG9uZXInLAoJCQkJVG9uZXJCYWNrZ3JvdW5kOiAndG9uZXItYmFja2dyb3VuZCcsCgkJCQlUb25lckh5YnJpZDogJ3RvbmVyLWh5YnJpZCcsCgkJCQlUb25lckxpbmVzOiAndG9uZXItbGluZXMnLAoJCQkJVG9uZXJMYWJlbHM6ICd0b25lci1sYWJlbHMnLAoJCQkJVG9uZXJMaXRlOiAndG9uZXItbGl0ZScsCgkJCQlXYXRlcmNvbG9yOiB7CgkJCQkJb3B0aW9uczogewoJCQkJCQl2YXJpYW50OiAnd2F0ZXJjb2xvcicsCgkJCQkJCW1pblpvb206IDEsCgkJCQkJCW1heFpvb206IDE2CgkJCQkJfQoJCQkJfSwKCQkJCVRlcnJhaW46IHsKCQkJCQlvcHRpb25zOiB7CgkJCQkJCXZhcmlhbnQ6ICd0ZXJyYWluJywKCQkJCQkJbWluWm9vbTogMCwKCQkJCQkJbWF4Wm9vbTogMTgKCQkJCQl9CgkJCQl9LAoJCQkJVGVycmFpbkJhY2tncm91bmQ6IHsKCQkJCQlvcHRpb25zOiB7CgkJCQkJCXZhcmlhbnQ6ICd0ZXJyYWluLWJhY2tncm91bmQnLAoJCQkJCQltaW5ab29tOiAwLAoJCQkJCQltYXhab29tOiAxOAoJCQkJCX0KCQkJCX0sCgkJCQlUb3BPU01SZWxpZWY6IHsKCQkJCQlvcHRpb25zOiB7CgkJCQkJCXZhcmlhbnQ6ICd0b3Bvc20tY29sb3ItcmVsaWVmJywKCQkJCQkJZXh0OiAnanBnJywKCQkJCQkJYm91bmRzOiBbWzIyLCAtMTMyXSwgWzUxLCAtNTZdXQoJCQkJCX0KCQkJCX0sCgkJCQlUb3BPU01GZWF0dXJlczogewoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJdmFyaWFudDogJ3RvcG9zbS1mZWF0dXJlcycsCgkJCQkJCWJvdW5kczogW1syMiwgLTEzMl0sIFs1MSwgLTU2XV0sCgkJCQkJCW9wYWNpdHk6IDAuOQoJCQkJCX0KCQkJCX0KCQkJfQoJCX0sCgkJRXNyaTogewoJCQl1cmw6ICcvL3NlcnZlci5hcmNnaXNvbmxpbmUuY29tL0FyY0dJUy9yZXN0L3NlcnZpY2VzL3t2YXJpYW50fS9NYXBTZXJ2ZXIvdGlsZS97en0ve3l9L3t4fScsCgkJCW9wdGlvbnM6IHsKCQkJCXZhcmlhbnQ6ICdXb3JsZF9TdHJlZXRfTWFwJywKCQkJCWF0dHJpYnV0aW9uOiAnVGlsZXMgJmNvcHk7IEVzcmknCgkJCX0sCgkJCXZhcmlhbnRzOiB7CgkJCQlXb3JsZFN0cmVldE1hcDogewoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJYXR0cmlidXRpb246CgkJCQkJCQkne2F0dHJpYnV0aW9uLkVzcml9ICZtZGFzaDsgJyArCgkJCQkJCQknU291cmNlOiBFc3JpLCBEZUxvcm1lLCBOQVZURVEsIFVTR1MsIEludGVybWFwLCBpUEMsIE5SQ0FOLCBFc3JpIEphcGFuLCBNRVRJLCBFc3JpIENoaW5hIChIb25nIEtvbmcpLCBFc3JpIChUaGFpbGFuZCksIFRvbVRvbSwgMjAxMicKCQkJCQl9CgkJCQl9LAoJCQkJRGVMb3JtZTogewoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJdmFyaWFudDogJ1NwZWNpYWx0eS9EZUxvcm1lX1dvcmxkX0Jhc2VfTWFwJywKCQkJCQkJbWluWm9vbTogMSwKCQkJCQkJbWF4Wm9vbTogMTEsCgkJCQkJCWF0dHJpYnV0aW9uOiAne2F0dHJpYnV0aW9uLkVzcml9ICZtZGFzaDsgQ29weXJpZ2h0OiAmY29weTsyMDEyIERlTG9ybWUnCgkJCQkJfQoJCQkJfSwKCQkJCVdvcmxkVG9wb01hcDogewoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJdmFyaWFudDogJ1dvcmxkX1RvcG9fTWFwJywKCQkJCQkJYXR0cmlidXRpb246CgkJCQkJCQkne2F0dHJpYnV0aW9uLkVzcml9ICZtZGFzaDsgJyArCgkJCQkJCQknRXNyaSwgRGVMb3JtZSwgTkFWVEVRLCBUb21Ub20sIEludGVybWFwLCBpUEMsIFVTR1MsIEZBTywgTlBTLCBOUkNBTiwgR2VvQmFzZSwgS2FkYXN0ZXIgTkwsIE9yZG5hbmNlIFN1cnZleSwgRXNyaSBKYXBhbiwgTUVUSSwgRXNyaSBDaGluYSAoSG9uZyBLb25nKSwgYW5kIHRoZSBHSVMgVXNlciBDb21tdW5pdHknCgkJCQkJfQoJCQkJfSwKCQkJCVdvcmxkSW1hZ2VyeTogewoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJdmFyaWFudDogJ1dvcmxkX0ltYWdlcnknLAoJCQkJCQlhdHRyaWJ1dGlvbjoKCQkJCQkJCSd7YXR0cmlidXRpb24uRXNyaX0gJm1kYXNoOyAnICsKCQkJCQkJCSdTb3VyY2U6IEVzcmksIGktY3ViZWQsIFVTREEsIFVTR1MsIEFFWCwgR2VvRXllLCBHZXRtYXBwaW5nLCBBZXJvZ3JpZCwgSUdOLCBJR1AsIFVQUi1FR1AsIGFuZCB0aGUgR0lTIFVzZXIgQ29tbXVuaXR5JwoJCQkJCX0KCQkJCX0sCgkJCQlXb3JsZFRlcnJhaW46IHsKCQkJCQlvcHRpb25zOiB7CgkJCQkJCXZhcmlhbnQ6ICdXb3JsZF9UZXJyYWluX0Jhc2UnLAoJCQkJCQltYXhab29tOiAxMywKCQkJCQkJYXR0cmlidXRpb246CgkJCQkJCQkne2F0dHJpYnV0aW9uLkVzcml9ICZtZGFzaDsgJyArCgkJCQkJCQknU291cmNlOiBVU0dTLCBFc3JpLCBUQU5BLCBEZUxvcm1lLCBhbmQgTlBTJwoJCQkJCX0KCQkJCX0sCgkJCQlXb3JsZFNoYWRlZFJlbGllZjogewoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJdmFyaWFudDogJ1dvcmxkX1NoYWRlZF9SZWxpZWYnLAoJCQkJCQltYXhab29tOiAxMywKCQkJCQkJYXR0cmlidXRpb246ICd7YXR0cmlidXRpb24uRXNyaX0gJm1kYXNoOyBTb3VyY2U6IEVzcmknCgkJCQkJfQoJCQkJfSwKCQkJCVdvcmxkUGh5c2ljYWw6IHsKCQkJCQlvcHRpb25zOiB7CgkJCQkJCXZhcmlhbnQ6ICdXb3JsZF9QaHlzaWNhbF9NYXAnLAoJCQkJCQltYXhab29tOiA4LAoJCQkJCQlhdHRyaWJ1dGlvbjogJ3thdHRyaWJ1dGlvbi5Fc3JpfSAmbWRhc2g7IFNvdXJjZTogVVMgTmF0aW9uYWwgUGFyayBTZXJ2aWNlJwoJCQkJCX0KCQkJCX0sCgkJCQlPY2VhbkJhc2VtYXA6IHsKCQkJCQlvcHRpb25zOiB7CgkJCQkJCXZhcmlhbnQ6ICdPY2Vhbl9CYXNlbWFwJywKCQkJCQkJbWF4Wm9vbTogMTMsCgkJCQkJCWF0dHJpYnV0aW9uOiAne2F0dHJpYnV0aW9uLkVzcml9ICZtZGFzaDsgU291cmNlczogR0VCQ08sIE5PQUEsIENIUywgT1NVLCBVTkgsIENTVU1CLCBOYXRpb25hbCBHZW9ncmFwaGljLCBEZUxvcm1lLCBOQVZURVEsIGFuZCBFc3JpJwoJCQkJCX0KCQkJCX0sCgkJCQlOYXRHZW9Xb3JsZE1hcDogewoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJdmFyaWFudDogJ05hdEdlb19Xb3JsZF9NYXAnLAoJCQkJCQltYXhab29tOiAxNiwKCQkJCQkJYXR0cmlidXRpb246ICd7YXR0cmlidXRpb24uRXNyaX0gJm1kYXNoOyBOYXRpb25hbCBHZW9ncmFwaGljLCBFc3JpLCBEZUxvcm1lLCBOQVZURVEsIFVORVAtV0NNQywgVVNHUywgTkFTQSwgRVNBLCBNRVRJLCBOUkNBTiwgR0VCQ08sIE5PQUEsIGlQQycKCQkJCQl9CgkJCQl9LAoJCQkJV29ybGRHcmF5Q2FudmFzOiB7CgkJCQkJb3B0aW9uczogewoJCQkJCQl2YXJpYW50OiAnQ2FudmFzL1dvcmxkX0xpZ2h0X0dyYXlfQmFzZScsCgkJCQkJCW1heFpvb206IDE2LAoJCQkJCQlhdHRyaWJ1dGlvbjogJ3thdHRyaWJ1dGlvbi5Fc3JpfSAmbWRhc2g7IEVzcmksIERlTG9ybWUsIE5BVlRFUScKCQkJCQl9CgkJCQl9CgkJCX0KCQl9LAoJCU9wZW5XZWF0aGVyTWFwOiB7CgkJCXVybDogJ2h0dHA6Ly97c30udGlsZS5vcGVud2VhdGhlcm1hcC5vcmcvbWFwL3t2YXJpYW50fS97en0ve3h9L3t5fS5wbmcnLAoJCQlvcHRpb25zOiB7CgkJCQltYXhab29tOiAxOSwKCQkJCWF0dHJpYnV0aW9uOiAnTWFwIGRhdGEgJmNvcHk7IDxhIGhyZWY9Imh0dHA6Ly9vcGVud2VhdGhlcm1hcC5vcmciPk9wZW5XZWF0aGVyTWFwPC9hPicsCgkJCQlvcGFjaXR5OiAwLjUKCQkJfSwKCQkJdmFyaWFudHM6IHsKCQkJCUNsb3VkczogJ2Nsb3VkcycsCgkJCQlDbG91ZHNDbGFzc2ljOiAnY2xvdWRzX2NscycsCgkJCQlQcmVjaXBpdGF0aW9uOiAncHJlY2lwaXRhdGlvbicsCgkJCQlQcmVjaXBpdGF0aW9uQ2xhc3NpYzogJ3ByZWNpcGl0YXRpb25fY2xzJywKCQkJCVJhaW46ICdyYWluJywKCQkJCVJhaW5DbGFzc2ljOiAncmFpbl9jbHMnLAoJCQkJUHJlc3N1cmU6ICdwcmVzc3VyZScsCgkJCQlQcmVzc3VyZUNvbnRvdXI6ICdwcmVzc3VyZV9jbnRyJywKCQkJCVdpbmQ6ICd3aW5kJywKCQkJCVRlbXBlcmF0dXJlOiAndGVtcCcsCgkJCQlTbm93OiAnc25vdycKCQkJfQoJCX0sCgkJSEVSRTogewoJCQkvKgoJCQkgKiBIRVJFIG1hcHMsIGZvcm1lcmx5IE5va2lhIG1hcHMuCgkJCSAqIFRoZXNlIGJhc2VtYXBzIGFyZSBmcmVlLCBidXQgeW91IG5lZWQgYW4gQVBJIGtleS4gUGxlYXNlIHNpZ24gdXAgYXQKCQkJICogaHR0cDovL2RldmVsb3Blci5oZXJlLmNvbS9nZXR0aW5nLXN0YXJ0ZWQKCQkJICoKCQkJICogTm90ZSB0aGF0IHRoZSBiYXNlIHVybHMgY29udGFpbiAnLmNpdCcgd2hpY2hzIGlzIEhFUkUncwoJCQkgKiAnQ3VzdG9tZXIgSW50ZWdyYXRpb24gVGVzdGluZycgZW52aXJvbm1lbnQuIFBsZWFzZSByZW1vdmUgZm9yIHByb2R1Y3Rpb24KCQkJICogZW52aXJpb25tZW50cy4KCQkJICovCgkJCXVybDoKCQkJCScvL3tzfS57YmFzZX0ubWFwcy5jaXQuYXBpLmhlcmUuY29tL21hcHRpbGUvMi4xLycgKwoJCQkJJ3t0eXBlfS97bWFwSUR9L3t2YXJpYW50fS97en0ve3h9L3t5fS97c2l6ZX0ve2Zvcm1hdH0/JyArCgkJCQknYXBwX2lkPXthcHBfaWR9JmFwcF9jb2RlPXthcHBfY29kZX0mbGc9e2xhbmd1YWdlfScsCgkJCW9wdGlvbnM6IHsKCQkJCWF0dHJpYnV0aW9uOgoJCQkJCSdNYXAgJmNvcHk7IDE5ODctMjAxNCA8YSBocmVmPSJodHRwOi8vZGV2ZWxvcGVyLmhlcmUuY29tIj5IRVJFPC9hPicsCgkJCQlzdWJkb21haW5zOiAnMTIzNCcsCgkJCQltYXBJRDogJ25ld2VzdCcsCgkJCQknYXBwX2lkJzogJzxpbnNlcnQgeW91ciBhcHBfaWQgaGVyZT4nLAoJCQkJJ2FwcF9jb2RlJzogJzxpbnNlcnQgeW91ciBhcHBfY29kZSBoZXJlPicsCgkJCQliYXNlOiAnYmFzZScsCgkJCQl2YXJpYW50OiAnbm9ybWFsLmRheScsCgkJCQltYXhab29tOiAyMCwKCQkJCXR5cGU6ICdtYXB0aWxlJywKCQkJCWxhbmd1YWdlOiAnZW5nJywKCQkJCWZvcm1hdDogJ3BuZzgnLAoJCQkJc2l6ZTogJzI1NicKCQkJfSwKCQkJdmFyaWFudHM6IHsKCQkJCW5vcm1hbERheTogJ25vcm1hbC5kYXknLAoJCQkJbm9ybWFsRGF5Q3VzdG9tOiAnbm9ybWFsLmRheS5jdXN0b20nLAoJCQkJbm9ybWFsRGF5R3JleTogJ25vcm1hbC5kYXkuZ3JleScsCgkJCQlub3JtYWxEYXlNb2JpbGU6ICdub3JtYWwuZGF5Lm1vYmlsZScsCgkJCQlub3JtYWxEYXlHcmV5TW9iaWxlOiAnbm9ybWFsLmRheS5ncmV5Lm1vYmlsZScsCgkJCQlub3JtYWxEYXlUcmFuc2l0OiAnbm9ybWFsLmRheS50cmFuc2l0JywKCQkJCW5vcm1hbERheVRyYW5zaXRNb2JpbGU6ICdub3JtYWwuZGF5LnRyYW5zaXQubW9iaWxlJywKCQkJCW5vcm1hbE5pZ2h0OiAnbm9ybWFsLm5pZ2h0JywKCQkJCW5vcm1hbE5pZ2h0TW9iaWxlOiAnbm9ybWFsLm5pZ2h0Lm1vYmlsZScsCgkJCQlub3JtYWxOaWdodEdyZXk6ICdub3JtYWwubmlnaHQuZ3JleScsCgkJCQlub3JtYWxOaWdodEdyZXlNb2JpbGU6ICdub3JtYWwubmlnaHQuZ3JleS5tb2JpbGUnLAoKCQkJCWJhc2ljTWFwOiB7CgkJCQkJb3B0aW9uczogewoJCQkJCQl0eXBlOiAnYmFzZXRpbGUnCgkJCQkJfQoJCQkJfSwKCQkJCW1hcExhYmVsczogewoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJdHlwZTogJ2xhYmVsdGlsZScsCgkJCQkJCWZvcm1hdDogJ3BuZycKCQkJCQl9CgkJCQl9LAoJCQkJdHJhZmZpY0Zsb3c6IHsKCQkJCQlvcHRpb25zOiB7CgkJCQkJCWJhc2U6ICd0cmFmZmljJywKCQkJCQkJdHlwZTogJ2Zsb3d0aWxlJwoJCQkJCX0KCQkJCX0sCgkJCQljYXJuYXZEYXlHcmV5OiAnY2FybmF2LmRheS5ncmV5JywKCQkJCWh5YnJpZERheTogewoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJYmFzZTogJ2FlcmlhbCcsCgkJCQkJCXZhcmlhbnQ6ICdoeWJyaWQuZGF5JwoJCQkJCX0KCQkJCX0sCgkJCQloeWJyaWREYXlNb2JpbGU6IHsKCQkJCQlvcHRpb25zOiB7CgkJCQkJCWJhc2U6ICdhZXJpYWwnLAoJCQkJCQl2YXJpYW50OiAnaHlicmlkLmRheS5tb2JpbGUnCgkJCQkJfQoJCQkJfSwKCQkJCXBlZGVzdHJpYW5EYXk6ICdwZWRlc3RyaWFuLmRheScsCgkJCQlwZWRlc3RyaWFuTmlnaHQ6ICdwZWRlc3RyaWFuLm5pZ2h0JywKCQkJCXNhdGVsbGl0ZURheTogewoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJYmFzZTogJ2FlcmlhbCcsCgkJCQkJCXZhcmlhbnQ6ICdzYXRlbGxpdGUuZGF5JwoJCQkJCX0KCQkJCX0sCgkJCQl0ZXJyYWluRGF5OiB7CgkJCQkJb3B0aW9uczogewoJCQkJCQliYXNlOiAnYWVyaWFsJywKCQkJCQkJdmFyaWFudDogJ3RlcnJhaW4uZGF5JwoJCQkJCX0KCQkJCX0sCgkJCQl0ZXJyYWluRGF5TW9iaWxlOiB7CgkJCQkJb3B0aW9uczogewoJCQkJCQliYXNlOiAnYWVyaWFsJywKCQkJCQkJdmFyaWFudDogJ3RlcnJhaW4uZGF5Lm1vYmlsZScKCQkJCQl9CgkJCQl9CgkJCX0KCQl9LAoJCUZyZWVNYXBTSzogewoJCQl1cmw6ICdodHRwOi8vdHtzfS5mcmVlbWFwLnNrL1Qve3p9L3t4fS97eX0uanBlZycsCgkJCW9wdGlvbnM6IHsKCQkJCW1pblpvb206IDgsCgkJCQltYXhab29tOiAxNiwKCQkJCXN1YmRvbWFpbnM6ICcxMjM0JywKCQkJCWJvdW5kczogW1s0Ny4yMDQ2NDIsIDE1Ljk5NjA5M10sIFs0OS44MzA4OTYsIDIyLjU3NjkwNF1dLAoJCQkJYXR0cmlidXRpb246CgkJCQkJJ3thdHRyaWJ1dGlvbi5PcGVuU3RyZWV0TWFwfSwgdml6dWFsaXphdGlvbiBDQy1CeS1TQSAyLjAgPGEgaHJlZj0iaHR0cDovL2ZyZWVtYXAuc2siPkZyZWVtYXAuc2s8L2E+JwoJCQl9CgkJfSwKCQlNdGJNYXA6IHsKCQkJdXJsOiAnaHR0cDovL3RpbGUubXRibWFwLmN6L210Ym1hcF90aWxlcy97en0ve3h9L3t5fS5wbmcnLAoJCQlvcHRpb25zOiB7CgkJCQlhdHRyaWJ1dGlvbjoKCQkJCQkne2F0dHJpYnV0aW9uLk9wZW5TdHJlZXRNYXB9ICZhbXA7IFVTR1MnCgkJCX0KCQl9LAoJCUNhcnRvREI6IHsKCQkJdXJsOiAnaHR0cDovL3tzfS5iYXNlbWFwcy5jYXJ0b2Nkbi5jb20ve3ZhcmlhbnR9L3t6fS97eH0ve3l9LnBuZycsCgkJCW9wdGlvbnM6IHsKCQkJCWF0dHJpYnV0aW9uOiAne2F0dHJpYnV0aW9uLk9wZW5TdHJlZXRNYXB9ICZjb3B5OyA8YSBocmVmPSJodHRwOi8vY2FydG9kYi5jb20vYXR0cmlidXRpb25zIj5DYXJ0b0RCPC9hPicsCgkJCQlzdWJkb21haW5zOiAnYWJjZCcsCgkJCQltYXhab29tOiAxOSwKCQkJCXZhcmlhbnQ6ICdsaWdodF9hbGwnCgkJCX0sCgkJCXZhcmlhbnRzOiB7CgkJCQlQb3NpdHJvbjogJ2xpZ2h0X2FsbCcsCgkJCQlQb3NpdHJvbk5vTGFiZWxzOiAnbGlnaHRfbm9sYWJlbHMnLAoJCQkJUG9zaXRyb25Pbmx5TGFiZWxzOiAnbGlnaHRfb25seV9sYWJlbHMnLAoJCQkJRGFya01hdHRlcjogJ2RhcmtfYWxsJywKCQkJCURhcmtNYXR0ZXJOb0xhYmVsczogJ2Rhcmtfbm9sYWJlbHMnLAoJCQkJRGFya01hdHRlck9ubHlMYWJlbHM6ICdkYXJrX29ubHlfbGFiZWxzJwoJCQl9CgkJfSwKCQlIaWtlQmlrZTogewoJCQl1cmw6ICdodHRwOi8ve3N9LnRpbGVzLndtZmxhYnMub3JnL3t2YXJpYW50fS97en0ve3h9L3t5fS5wbmcnLAoJCQlvcHRpb25zOiB7CgkJCQltYXhab29tOiAxOSwKCQkJCWF0dHJpYnV0aW9uOiAne2F0dHJpYnV0aW9uLk9wZW5TdHJlZXRNYXB9JywKCQkJCXZhcmlhbnQ6ICdoaWtlYmlrZScKCQkJfSwKCQkJdmFyaWFudHM6IHsKCQkJCUhpa2VCaWtlOiB7fSwKCQkJCUhpbGxTaGFkaW5nOiB7CgkJCQkJb3B0aW9uczogewoJCQkJCQltYXhab29tOiAxNSwKCQkJCQkJdmFyaWFudDogJ2hpbGxzaGFkaW5nJwoJCQkJCX0KCQkJCX0KCQkJfQoJCX0sCgkJQmFzZW1hcEFUOiB7CgkJCXVybDogJy8vbWFwc3tzfS53aWVuLmd2LmF0L2Jhc2VtYXAve3ZhcmlhbnR9L25vcm1hbC9nb29nbGUzODU3L3t6fS97eX0ve3h9Lntmb3JtYXR9JywKCQkJb3B0aW9uczogewoJCQkJbWF4Wm9vbTogMTksCgkJCQlhdHRyaWJ1dGlvbjogJ0RhdGVucXVlbGxlOiA8YSBocmVmPSJ3d3cuYmFzZW1hcC5hdCI+YmFzZW1hcC5hdDwvYT4nLAoJCQkJc3ViZG9tYWluczogWycnLCAnMScsICcyJywgJzMnLCAnNCddLAoJCQkJZm9ybWF0OiAncG5nJywKCQkJCWJvdW5kczogW1s0Ni4zNTg3NzAsIDguNzgyMzc5XSwgWzQ5LjAzNzg3MiwgMTcuMTg5NTMyXV0sCgkJCQl2YXJpYW50OiAnZ2VvbGFuZGJhc2VtYXAnCgkJCX0sCgkJCXZhcmlhbnRzOiB7CgkJCQliYXNlbWFwOiAnZ2VvbGFuZGJhc2VtYXAnLAoJCQkJZ3JhdTogJ2JtYXBncmF1JywKCQkJCW92ZXJsYXk6ICdibWFwb3ZlcmxheScsCgkJCQloaWdoZHBpOiB7CgkJCQkJb3B0aW9uczogewoJCQkJCQl2YXJpYW50OiAnYm1hcGhpZHBpJywKCQkJCQkJZm9ybWF0OiAnanBlZycKCQkJCQl9CgkJCQl9LAoJCQkJb3J0aG9mb3RvOiB7CgkJCQkJb3B0aW9uczogewoJCQkJCQl2YXJpYW50OiAnYm1hcG9ydGhvZm90bzMwY20nLAoJCQkJCQlmb3JtYXQ6ICdqcGVnJwoJCQkJCX0KCQkJCX0KCQkJfQoJCX0sCgkJTkFTQUdJQlM6IHsKCQkJdXJsOiAnLy9tYXAxLnZpcy5lYXJ0aGRhdGEubmFzYS5nb3Yvd210cy13ZWJtZXJjL3t2YXJpYW50fS9kZWZhdWx0L3t0aW1lfS97dGlsZW1hdHJpeHNldH17bWF4Wm9vbX0ve3p9L3t5fS97eH0ue2Zvcm1hdH0nLAoJCQlvcHRpb25zOiB7CgkJCQlhdHRyaWJ1dGlvbjoKCQkJCQknSW1hZ2VyeSBwcm92aWRlZCBieSBzZXJ2aWNlcyBmcm9tIHRoZSBHbG9iYWwgSW1hZ2VyeSBCcm93c2UgU2VydmljZXMgKEdJQlMpLCBvcGVyYXRlZCBieSB0aGUgTkFTQS9HU0ZDL0VhcnRoIFNjaWVuY2UgRGF0YSBhbmQgSW5mb3JtYXRpb24gU3lzdGVtICcgKwoJCQkJCScoPGEgaHJlZj0iaHR0cHM6Ly9lYXJ0aGRhdGEubmFzYS5nb3YiPkVTRElTPC9hPikgd2l0aCBmdW5kaW5nIHByb3ZpZGVkIGJ5IE5BU0EvSFEuJywKCQkJCWJvdW5kczogW1stODUuMDUxMTI4Nzc3NiwgLTE3OS45OTk5OTk5NzVdLCBbODUuMDUxMTI4Nzc3NiwgMTc5Ljk5OTk5OTk3NV1dLAoJCQkJbWluWm9vbTogMSwKCQkJCW1heFpvb206IDksCgkJCQlmb3JtYXQ6ICdqcGcnLAoJCQkJdGltZTogJycsCgkJCQl0aWxlbWF0cml4c2V0OiAnR29vZ2xlTWFwc0NvbXBhdGlibGVfTGV2ZWwnCgkJCX0sCgkJCXZhcmlhbnRzOiB7CgkJCQlNb2Rpc1RlcnJhVHJ1ZUNvbG9yQ1I6ICdNT0RJU19UZXJyYV9Db3JyZWN0ZWRSZWZsZWN0YW5jZV9UcnVlQ29sb3InLAoJCQkJTW9kaXNUZXJyYUJhbmRzMzY3Q1I6ICdNT0RJU19UZXJyYV9Db3JyZWN0ZWRSZWZsZWN0YW5jZV9CYW5kczM2NycsCgkJCQlWaWlyc0VhcnRoQXROaWdodDIwMTI6IHsKCQkJCQlvcHRpb25zOiB7CgkJCQkJCXZhcmlhbnQ6ICdWSUlSU19DaXR5TGlnaHRzXzIwMTInLAoJCQkJCQltYXhab29tOiA4CgkJCQkJfQoJCQkJfSwKCQkJCU1vZGlzVGVycmFMU1REYXk6IHsKCQkJCQlvcHRpb25zOiB7CgkJCQkJCXZhcmlhbnQ6ICdNT0RJU19UZXJyYV9MYW5kX1N1cmZhY2VfVGVtcF9EYXknLAoJCQkJCQlmb3JtYXQ6ICdwbmcnLAoJCQkJCQltYXhab29tOiA3LAoJCQkJCQlvcGFjaXR5OiAwLjc1CgkJCQkJfQoJCQkJfSwKCQkJCU1vZGlzVGVycmFTbm93Q292ZXI6IHsKCQkJCQlvcHRpb25zOiB7CgkJCQkJCXZhcmlhbnQ6ICdNT0RJU19UZXJyYV9Tbm93X0NvdmVyJywKCQkJCQkJZm9ybWF0OiAncG5nJywKCQkJCQkJbWF4Wm9vbTogOCwKCQkJCQkJb3BhY2l0eTogMC43NQoJCQkJCX0KCQkJCX0sCgkJCQlNb2Rpc1RlcnJhQU9EOiB7CgkJCQkJb3B0aW9uczogewoJCQkJCQl2YXJpYW50OiAnTU9ESVNfVGVycmFfQWVyb3NvbCcsCgkJCQkJCWZvcm1hdDogJ3BuZycsCgkJCQkJCW1heFpvb206IDYsCgkJCQkJCW9wYWNpdHk6IDAuNzUKCQkJCQl9CgkJCQl9LAoJCQkJTW9kaXNUZXJyYUNobG9yb3BoeWxsOiB7CgkJCQkJb3B0aW9uczogewoJCQkJCQl2YXJpYW50OiAnTU9ESVNfVGVycmFfQ2hsb3JvcGh5bGxfQScsCgkJCQkJCWZvcm1hdDogJ3BuZycsCgkJCQkJCW1heFpvb206IDcsCgkJCQkJCW9wYWNpdHk6IDAuNzUKCQkJCQl9CgkJCQl9CgkJCX0KCQl9LAoJCU5MUzogewoJCQkvLyBOTFMgbWFwcyBhcmUgY29weXJpZ2h0IE5hdGlvbmFsIGxpYnJhcnkgb2YgU2NvdGxhbmQuCgkJCS8vIGh0dHA6Ly9tYXBzLm5scy51ay9wcm9qZWN0cy9hcGkvaW5kZXguaHRtbAoJCQkvLyBQbGVhc2UgY29udGFjdCBOTFMgZm9yIGFueXRoaW5nIG90aGVyIHRoYW4gbm9uLWNvbW1lcmNpYWwgbG93IHZvbHVtZSB1c2FnZQoJCQkvLwoJCQkvLyBNYXAgc291cmNlczogT3JkbmFuY2UgU3VydmV5IDE6MW0gdG8gMTo2M0ssIDE5MjBzLTE5NDBzCgkJCS8vICAgejAtOSAgLSAxOjFtCgkJCS8vICB6MTAtMTEgLSBxdWFydGVyIGluY2ggKDE6MjUzNDQwKQoJCQkvLyAgejEyLTE4IC0gb25lIGluY2ggKDE6NjMzNjApCgkJCXVybDogJy8vbmxzLXtzfS50aWxlc2VydmVyLmNvbS9ubHMve3p9L3t4fS97eX0uanBnJywKCQkJb3B0aW9uczogewoJCQkJYXR0cmlidXRpb246ICc8YSBocmVmPSJodHRwOi8vZ2VvLm5scy51ay9tYXBzLyI+TmF0aW9uYWwgTGlicmFyeSBvZiBTY290bGFuZCBIaXN0b3JpYyBNYXBzPC9hPicsCgkJCQlib3VuZHM6IFtbNDkuNiwgLTEyXSwgWzYxLjcsIDNdXSwKCQkJCW1pblpvb206IDEsCgkJCQltYXhab29tOiAxOCwKCQkJCXN1YmRvbWFpbnM6ICcwMTIzJywKCQkJfQoJCX0KCX07CgoJTC50aWxlTGF5ZXIucHJvdmlkZXIgPSBmdW5jdGlvbiAocHJvdmlkZXIsIG9wdGlvbnMpIHsKCQlyZXR1cm4gbmV3IEwuVGlsZUxheWVyLlByb3ZpZGVyKHByb3ZpZGVyLCBvcHRpb25zKTsKCX07CgoJcmV0dXJuIEw7Cn0pKTsK"></script> <script src="data:application/x-javascript;base64,TGVhZmxldFdpZGdldC5tZXRob2RzLmFkZFByb3ZpZGVyVGlsZXMgPSBmdW5jdGlvbihwcm92aWRlciwgbGF5ZXJJZCwgZ3JvdXAsIG9wdGlvbnMpIHsKICB0aGlzLmxheWVyTWFuYWdlci5hZGRMYXllcihMLnRpbGVMYXllci5wcm92aWRlcihwcm92aWRlciwgb3B0aW9ucyksICJ0aWxlIiwgbGF5ZXJJZCwgZ3JvdXApOwp9Owo="></script> <style>.leaflet-container {background:#FFFFFF;}</style> </head> <body style="background-color:white;"> <div id="htmlwidget_container"> <div id="htmlwidget-b215f8ff8aac29899629" class="leaflet html-widget" style="width:100%;height:400px;"> </div> </div> <script type="application/json" data-for="htmlwidget-b215f8ff8aac29899629">{"x":{"options":{"crs":{"crsClass":"L.CRS.EPSG3857","code":null,"proj4def":null,"projectedBounds":null,"options":{}}},"calls":[{"method":"addProviderTiles","args":["CartoDB.Positron",null,"CartoDB.Positron",{"minZoom":0,"maxZoom":18,"maxNativeZoom":null,"tileSize":256,"subdomains":"abc","errorTileUrl":"","tms":false,"continuousWorld":false,"noWrap":false,"zoomOffset":0,"zoomReverse":false,"opacity":1,"zIndex":null,"unloadInvisibleTiles":null,"updateWhenIdle":null,"detectRetina":false,"reuseTiles":false}]},{"method":"addProviderTiles","args":["OpenStreetMap",null,"OpenStreetMap",{"minZoom":0,"maxZoom":18,"maxNativeZoom":null,"tileSize":256,"subdomains":"abc","errorTileUrl":"","tms":false,"continuousWorld":false,"noWrap":false,"zoomOffset":0,"zoomReverse":false,"opacity":1,"zIndex":null,"unloadInvisibleTiles":null,"updateWhenIdle":null,"detectRetina":false,"reuseTiles":false}]},{"method":"addProviderTiles","args":["Esri.WorldTopoMap",null,"Esri.WorldTopoMap",{"minZoom":0,"maxZoom":18,"maxNativeZoom":null,"tileSize":256,"subdomains":"abc","errorTileUrl":"","tms":false,"continuousWorld":false,"noWrap":false,"zoomOffset":0,"zoomReverse":false,"opacity":1,"zIndex":null,"unloadInvisibleTiles":null,"updateWhenIdle":null,"detectRetina":false,"reuseTiles":false}]},{"method":"addPolygons","args":[[[[{"lng":[-82.54250773,-83.27589,-83.22116142,-83.22039893,-83.21872104,-83.21620856,-83.21251942,-83.20976799,-83.20784961,-83.20590197,-83.20339784,-83.20144502,-83.19685103,-83.19327278,-83.18858846,-83.18642715,-83.18441542,-83.18333628,-83.18217417,-83.17749761,-83.17451721,-83.17277049,-83.17191255,-83.1709111,-83.16855571,-83.16568688,-83.16383683,-83.16235043,-83.15974473,-83.15856005,-83.15684865,-83.15448287,-83.15357478,-83.15277513,-83.15238148,-83.151054,-83.14949611,-83.14849637,-83.1482321,-83.14715671,-83.14265346,-83.13781079,-83.13475358,-83.13273322,-83.1323655,-83.13021678,-83.12913417,-83.12816148,-83.12669317,-83.12582698,-83.12467618,-83.12462258,-83.124187,-83.12362744,-83.12354933,-83.12334101,-83.12248322,-83.12227077,-83.12238803,-83.1226175,-83.12262643,-83.12217099,-83.12059711,-83.12012064,-83.11975656,-83.11764594,-83.11595897,-83.11454031,-83.11205768,-83.11005681,-83.10866505,-83.10714102,-83.10638061,-83.10595549,-83.1047544,-83.101671,-83.09970864,-83.09527633,-83.08456936,-83.08229617,-83.07988066,-83.07825621,-83.07278281,-83.07103712,-83.06827784,-83.0678646,-83.06729208,-83.0667937,-83.06642469,-83.06613753,-83.06581544,-83.06545768,-83.06507145,-83.06475599,-83.06439155,-83.06406316,-83.06342579,-83.06257889,-83.0622857,-83.06206095,-83.06174678,-83.06141829,-83.06082514,-83.06032295,-83.05989721,-83.05945832,-83.05898365,-83.05866957,-83.05835547,-83.05787251,-83.05748776,-83.05699826,-83.05632002,-83.05568225,-83.05512311,-83.05450816,-83.05401845,-83.05366968,-83.05292148,-83.05268389,-83.05219664,-83.05190521,-83.0516136,-83.05150778,-83.05119704,-83.05082096,-83.0503888,-83.05012425,-83.04976254,-83.04940684,-83.04913489,-83.0488157,-83.04854321,-83.04820237,-83.04797805,-83.04777687,-83.0473166,-83.04686899,-83.04648542,-83.04628346,-83.04603967,-83.04569221,-83.04528211,-83.04495362,-83.04448798,-83.04407554,-83.04358898,-83.04307341,-83.0425439,-83.0423631,-83.04200311,-83.04170518,-83.04149068,-83.04135204,-83.04108217,-83.04080511,-83.04058434,-83.04014074,-83.03997416,-83.03978775,-83.03956782,-83.03940116,-83.03897828,-83.03861629,-83.03809007,-83.03782092,-83.03762585,-83.03728546,-83.03683912,-83.03651085,-83.03612901,-83.03591409,-83.03564263,-83.0354327,-83.03505569,-83.03464615,-83.03428196,-83.0339077,-83.03383006,-83.03364353,-83.03345669,-83.03318415,-83.03301717,-83.03264174,-83.0321521,-83.03179011,-83.03141154,-83.03103556,-83.0308584,-83.03053116,-83.0302027,-83.02981902,-83.02932096,-83.02885139,-83.02834679,-83.02780221,-83.02727002,-83.02697649,-83.02671712,-83.02624651,-83.02545337,-83.02490748,-83.02323786,-83.02278082,-83.02216347,-83.02175043,-83.02151185,-83.02120873,-83.02067468,-83.02042832,-83.02016618,-83.01987734,-83.01958907,-83.01925778,-83.01880876,-83.01839479,-83.01778485,-83.01705532,-83.01668451,-83.01631242,-83.01569519,-83.01506471,-83.01451675,-83.01423027,-83.01396368,-83.01382404,-83.01365184,-83.0136391,-83.01373822,-83.01378823,-83.01379577,-83.01376938,-83.01365593,-83.01342549,-83.01298799,-83.01259471,-83.01252432,-83.0124531,-83.01254386,-83.01271924,-83.01293586,-83.01315091,-83.01328289,-83.01335326,-83.01336045,-83.01328836,-83.01302155,-83.01277478,-83.01250189,-83.01224224,-83.01211064,-83.0119569,-83.011888,-83.01176229,-83.01155219,-83.01059659,-83.0097391,-83.0090378,-83.00843348,-83.00794861,-83.00728023,-83.00637449,-83.0063451,-83.00567901,-83.00466716,-83.00386564,-83.0035634,-83.00328894,-83.00299397,-83.00260716,-83.00255845,-83.00220578,-83.00151802,-83.00077209,-83.00040623,-82.99989449,-82.99927754,-82.99880085,-82.99822782,-82.99791514,-82.99757253,-82.99729339,-82.99697916,-82.99649628,-82.99569875,-82.99539141,-82.99492854,-82.99447984,-82.99404764,-82.99367002,-82.9929437,-82.99226721,-82.99197385,-82.99155017,-82.99093552,-82.99058016,-82.99023266,-82.98963154,-82.98899101,-82.98844039,-82.9879722,-82.98760304,-82.98738023,-82.98709301,-82.98672376,-82.98641074,-82.98604193,-82.98540482,-82.9844322,-82.98375823,-82.98346353,-82.98253173,-82.98190135,-82.98152292,-82.98108878,-82.98029394,-82.97983741,-82.97953502,-82.97917627,-82.9788102,-82.97844311,-82.97789858,-82.97737076,-82.97691669,-82.97646772,-82.97623936,-82.97600547,-82.97544477,-82.97497345,-82.97460414,-82.97409928,-82.97360082,-82.97318761,-82.97249517,-82.97199532,-82.97177273,-82.97135094,-82.97123754,-82.97106769,-82.97099,-82.97081156,-82.97081209,-82.97077314,-82.97081365,-82.97100377,-82.97135375,-82.9715668,-82.97162639,-82.97168634,-82.97165953,-82.97161803,-82.9714412,-82.97127518,-82.97102161,-82.97071279,-82.97030484,-82.97001115,-82.96930167,-82.96884907,-82.96836359,-82.96789856,-82.96749638,-82.9669811,-82.96681633,-82.96657746,-82.96639581,-82.96629985,-82.96622206,-82.96614249,-82.9660699,-82.96587719,-82.96570768,-82.96552913,-82.96524143,-82.96492595,-82.96470759,-82.96447128,-82.96392282,-82.96359441,-82.9631439,-82.96280084,-82.96237468,-82.962195,-82.96182469,-82.96162105,-82.96149274,-82.961095,-82.96075242,-82.96052333,-82.96005887,-82.95978224,-82.95953996,-82.95922437,-82.95893837,-82.95851493,-82.95786259,-82.95746873,-82.95741182,-82.95716115,-82.95656945,-82.95608283,-82.95559547,-82.95537948,-82.95502352,-82.95480282,-82.95440178,-82.95376521,-82.95339321,-82.95302872,-82.95273501,-82.95247063,-82.95230573,-82.95209877,-82.95184041,-82.95158377,-82.95110342,-82.95097286,-82.95067104,-82.95047073,-82.95028447,-82.95006491,-82.94984415,-82.94959309,-82.94935678,-82.94912146,-82.94876461,-82.94840102,-82.94789222,-82.9473864,-82.94690686,-82.94632176,-82.94572136,-82.94506359,-82.94471495,-82.94436691,-82.9437653,-82.94348879,-82.94302188,-82.94265663,-82.94227757,-82.94209966,-82.94164229,-82.9411638,-82.94078575,-82.9403797,-82.94007975,-82.93968508,-82.93938476,-82.93887875,-82.93833942,-82.93789729,-82.93761061,-82.93723374,-82.93633923,-82.93577818,-82.93493916,-82.93419998,-82.93333418,-82.93265858,-82.93188525,-82.93138084,-82.93078313,-82.93030013,-82.92987421,-82.9293546,-82.92872226,-82.92800559,-82.92751643,-82.92707566,-82.92674117,-82.92625046,-82.92574009,-82.92554677,-82.92505603,-82.92448734,-82.92407736,-82.92387156,-82.92375332,-82.92332548,-82.92286452,-82.92265378,-82.92238761,-82.92205201,-82.92178056,-82.92123393,-82.92095492,-82.92061166,-82.92020499,-82.91984134,-82.91942957,-82.91909193,-82.91877841,-82.91847766,-82.9181626,-82.91779112,-82.91763749,-82.91727965,-82.91689523,-82.9166987,-82.91603382,-82.91550189,-82.91483648,-82.91415077,-82.91328164,-82.91244095,-82.91200743,-82.9113982,-82.9110684,-82.91076101,-82.91042436,-82.90993622,-82.9096416,-82.90941755,-82.90913033,-82.90870904,-82.90802068,-82.90765547,-82.90733945,-82.90701191,-82.90658435,-82.90620114,-82.90563503,-82.90531374,-82.90489426,-82.90434195,-82.90398599,-82.90352375,-82.90297202,-82.90250939,-82.90208798,-82.90157489,-82.90124488,-82.90089547,-82.90044067,-82.89995268,-82.89952478,-82.89909925,-82.89838615,-82.89771365,-82.89718902,-82.89648922,-82.89608318,-82.89563389,-82.89500237,-82.89446238,-82.89381005,-82.89315053,-82.89243355,-82.89169647,-82.8910083,-82.89043231,-82.88970894,-82.88915895,-82.88887884,-82.88833077,-82.88774002,-82.88740248,-82.88718355,-82.88699963,-82.88678894,-82.88648642,-82.88623544,-82.88601,-82.88580404,-82.88540843,-82.88518988,-82.88499728,-82.88489151,-82.8848695,-82.88488721,-82.88510903,-82.88535204,-82.88554674,-82.88557984,-82.88558005,-82.88554348,-82.88540389,-82.88519075,-82.88487342,-82.88433873,-82.88400738,-82.8835988,-82.88340176,-82.88283099,-82.882163,-82.88187315,-82.88149501,-82.88118497,-82.88091156,-82.88072289,-82.880591,-82.88033838,-82.88017864,-82.87995455,-82.879857,-82.87978642,-82.87964391,-82.87954325,-82.87943699,-82.87919643,-82.87897683,-82.87875733,-82.87868502,-82.87844091,-82.87815429,-82.87770256,-82.87719878,-82.87691763,-82.87626001,-82.8759558,-82.87556744,-82.87517444,-82.87480402,-82.87455449,-82.87430546,-82.87424837,-82.87398949,-82.87388488,-82.87350805,-82.87332557,-82.87303262,-82.87281691,-82.8726157,-82.87247599,-82.87230267,-82.87198217,-82.87186414,-82.87169017,-82.87161364,-82.87155094,-82.87142586,-82.87127277,-82.87111246,-82.8709587,-82.87085409,-82.87077916,-82.87071555,-82.87069535,-82.87066908,-82.87060565,-82.87046712,-82.87029895,-82.87025754,-82.87020762,-82.87016661,-82.87015967,-82.87022458,-82.8703088,-82.87035881,-82.87031705,-82.87025606,-82.87021413,-82.87012557,-82.87007127,-82.86999407,-82.86994673,-82.86989054,-82.86988439,-82.86996333,-82.8700193,-82.87018293,-82.87042371,-82.87051509,-82.87057192,-82.87062195,-82.87067126,-82.87074164,-82.87086865,-82.87092583,-82.87098254,-82.87111594,-82.87122932,-82.8713994,-82.87151324,-82.8716681,-82.8718937,-82.87202027,-82.87219735,-82.87233075,-82.87247912,-82.87262657,-82.87275351,-82.87292944,-82.87303568,-82.87308411,-82.8731843,-82.87333268,-82.87341733,-82.8735436,-82.8736139,-82.87368527,-82.87381834,-82.87395268,-82.87405244,-82.87414365,-82.87421431,-82.87429309,-82.87434923,-82.87440534,-82.8744762,-82.87456685,-82.87473687,-82.87484201,-82.87491759,-82.87504305,-82.87518257,-82.87525095,-82.87537303,-82.87545107,-82.87558562,-82.87574915,-82.87582317,-82.87591018,-82.87596406,-82.87614464,-82.87620621,-82.87622027,-82.87622364,-82.87638898,-82.87659946,-82.87677767,-82.87698573,-82.87707931,-82.87720588,-82.87728742,-82.87736019,-82.87735627,-82.8773954,-82.87744688,-82.87744789,-82.87752492,-82.87749962,-82.87748301,-82.87754422,-82.87749576,-82.87752595,-82.87744807,-82.87742976,-82.87735693,-82.87726307,-82.8771981,-82.87711676,-82.87697027,-82.87685399,-82.87671499,-82.87662724,-82.87648813,-82.87640127,-82.87626324,-82.87603792,-82.87584468,-82.87570128,-82.87554437,-82.87533172,-82.87510925,-82.8748528,-82.87459428,-82.87423812,-82.87369908,-82.87316831,-82.87278371,-82.87220564,-82.87190483,-82.87154159,-82.8712733,-82.87071014,-82.87000672,-82.86952997,-82.86857318,-82.86808247,-82.86770245,-82.86703514,-82.86678967,-82.86655463,-82.86612272,-82.86584421,-82.86548789,-82.8652917,-82.86506186,-82.86467825,-82.86446327,-82.86426729,-82.86390335,-82.86373034,-82.86340329,-82.86294947,-82.86242716,-82.86191169,-82.86143816,-82.86113161,-82.86085208,-82.86076102,-82.86068524,-82.86028153,-82.86010847,-82.85970482,-82.85927418,-82.85906472,-82.85898949,-82.85887892,-82.85864899,-82.858401,-82.85830285,-82.85816398,-82.85803217,-82.85793669,-82.85783869,-82.8576464,-82.85752863,-82.85743787,-82.85734213,-82.857169,-82.85696268,-82.85688566,-82.8568318,-82.8568194,-82.85682739,-82.8568415,-82.85689083,-82.85702408,-82.8570858,-82.85722536,-82.85734494,-82.85742743,-82.85751927,-82.85763104,-82.85768003,-82.85768686,-82.85763815,-82.85745039,-82.85718617,-82.85706845,-82.8569578,-82.85685427,-82.85684912,-82.85680047,-82.85680198,-82.85676911,-82.85677725,-82.85677078,-82.85680016,-82.85680038,-82.85685035,-82.85690135,-82.85685374,-82.85680093,-82.85671093,-82.85669809,-82.85675398,-82.85676941,-82.85684729,-82.8570152,-82.85720495,-82.85730384,-82.85734716,-82.85730016,-82.85717396,-82.85669525,-82.85654971,-82.85643082,-82.85637436,-82.85634209,-82.85628064,-82.85619853,-82.85617076,-82.85617077,-82.85617173,-82.85621566,-82.85626594,-82.85621361,-82.85614751,-82.85602364,-82.85595029,-82.8558881,-82.85580013,-82.85577193,-82.85567894,-82.8556236,-82.85562698,-82.85561682,-82.85570541,-82.85581432,-82.85584718,-82.85579667,-82.85573023,-82.85568313,-82.85553372,-82.85533694,-82.85517519,-82.85505446,-82.85505412,-82.85484145,-82.85467502,-82.85458151,-82.85448735,-82.85439207,-82.85427579,-82.85411916,-82.85391963,-82.85367073,-82.85346557,-82.85325309,-82.85310257,-82.8528,-82.85265291,-82.85244718,-82.85223452,-82.85188833,-82.85164557,-82.85135617,-82.85098066,-82.85061084,-82.8502655,-82.84985321,-82.84944666,-82.84910822,-82.84856949,-82.84824399,-82.84807332,-82.84796434,-82.8478362,-82.8476182,-82.84747106,-82.84734735,-82.84715093,-82.84674044,-82.84617338,-82.84568854,-82.84540154,-82.84507456,-82.84475367,-82.84437027,-82.84421422,-82.84401362,-82.84369765,-82.84328524,-82.84307424,-82.84288989,-82.84245197,-82.84220442,-82.84196273,-82.8415617,-82.84070726,-82.84011433,-82.83962415,-82.83923788,-82.83878174,-82.83827879,-82.83728988,-82.83691106,-82.83627401,-82.83565673,-82.83481053,-82.83443609,-82.83410517,-82.83355243,-82.83265812,-82.8316869,-82.83096682,-82.83023771,-82.82966348,-82.82914344,-82.82886434,-82.82847001,-82.82827556,-82.82809374,-82.82783797,-82.82770774,-82.82770313,-82.82774706,-82.82797679,-82.82817893,-82.8283192,-82.82839677,-82.82845475,-82.82840662,-82.82822135,-82.82788097,-82.8276463,-82.8273834,-82.82704184,-82.82670212,-82.82638625,-82.82614283,-82.82585852,-82.82538665,-82.82515554,-82.82468916,-82.82428643,-82.82398209,-82.82361487,-82.823173,-82.82244752,-82.82184177,-82.82161394,-82.82120519,-82.82066371,-82.81988696,-82.81918605,-82.81845647,-82.81776858,-82.81678784,-82.8160153,-82.81515256,-82.81464494,-82.81396334,-82.81340018,-82.81275538,-82.81227873,-82.81180715,-82.81136509,-82.81092847,-82.8105268,-82.81006218,-82.80971576,-82.80923685,-82.80867947,-82.80815679,-82.80762065,-82.80707821,-82.80656126,-82.80594867,-82.80528042,-82.80459932,-82.80396782,-82.80342513,-82.80289929,-82.80228008,-82.80158648,-82.80110717,-82.80064726,-82.80016152,-82.79952709,-82.79882381,-82.79766911,-82.79700712,-82.79643763,-82.79578889,-82.7952168,-82.79455552,-82.79363405,-82.79295719,-82.79189716,-82.79075698,-82.78995199,-82.78886106,-82.78831306,-82.78768831,-82.78719676,-82.78633902,-82.78528483,-82.78419059,-82.78361798,-82.7829853,-82.78207727,-82.78137566,-82.78105323,-82.78040612,-82.77980382,-82.77929173,-82.77875939,-82.77792512,-82.77727827,-82.7768078,-82.7758172,-82.77538213,-82.77431403,-82.77394556,-82.77339599,-82.77292356,-82.77211192,-82.77139535,-82.77052601,-82.76990157,-82.76912483,-82.76843516,-82.76773927,-82.76713429,-82.7662645,-82.76561969,-82.76489741,-82.76424497,-82.76327097,-82.76160455,-82.76025205,-82.75844412,-82.75718314,-82.75568261,-82.75479365,-82.75374223,-82.75257764,-82.75138811,-82.75093902,-82.75041357,-82.7501749,-82.74986634,-82.7496782,-82.74916403,-82.7484943,-82.74721602,-82.74629913,-82.74537544,-82.74461745,-82.74397936,-82.74336315,-82.74284015,-82.74214063,-82.74120876,-82.74021675,-82.739537,-82.73888675,-82.73824143,-82.73794795,-82.73740074,-82.73694518,-82.73627937,-82.73571653,-82.73534205,-82.73480076,-82.73461889,-82.73425571,-82.73385389,-82.73332953,-82.73296041,-82.73268121,-82.73244418,-82.73219688,-82.73160587,-82.73130897,-82.73091641,-82.73029552,-82.72994818,-82.72936623,-82.72871025,-82.72812396,-82.72782217,-82.72731513,-82.72686781,-82.72629753,-82.72600539,-82.72555444,-82.72499564,-82.72393442,-82.72289401,-82.72227912,-82.72196123,-82.72155078,-82.72126592,-82.72108301,-82.72088292,-82.72072178,-82.72049662,-82.72016616,-82.71976312,-82.71868554,-82.71819773,-82.71778306,-82.71775063,-82.71749193,-82.71738036,-82.71705395,-82.71675711,-82.71621295,-82.71543439,-82.71498828,-82.7146503,-82.71361039,-82.71336964,-82.71273211,-82.71247591,-82.71200328,-82.71159727,-82.71050308,-82.7101195,-82.70980023,-82.70899575,-82.70777572,-82.70747724,-82.70569916,-82.70469349,-82.70385469,-82.70325992,-82.70283677,-82.70227177,-82.70141664,-82.70072457,-82.70018594,-82.69925964,-82.69866484,-82.69828481,-82.69778776,-82.69738567,-82.69685092,-82.69595349,-82.69575569,-82.69536022,-82.69501603,-82.69482092,-82.69457874,-82.69437038,-82.69420304,-82.69390892,-82.69336419,-82.69266458,-82.69179778,-82.69123268,-82.69091837,-82.6907282,-82.69036465,-82.69004186,-82.68969887,-82.68923915,-82.68892033,-82.68848368,-82.68811366,-82.6877509,-82.68708945,-82.68673423,-82.68632576,-82.68606908,-82.68572573,-82.68534106,-82.6850049,-82.68470599,-82.68451959,-82.68432819,-82.68389757,-82.68367929,-82.68327614,-82.6828173,-82.68250881,-82.68225969,-82.68201782,-82.68158563,-82.68118381,-82.68065879,-82.68013161,-82.67969626,-82.67918366,-82.67904453,-82.67849836,-82.67815325,-82.6776422,-82.67720607,-82.67673416,-82.67651931,-82.67608196,-82.67565464,-82.67527419,-82.6749874,-82.67464399,-82.67413664,-82.67385802,-82.67355235,-82.67327716,-82.67289738,-82.67235254,-82.67186187,-82.6712748,-82.67039957,-82.67004603,-82.66950604,-82.66894959,-82.66853046,-82.66827463,-82.66802773,-82.6670012,-82.66667485,-82.66629381,-82.66590263,-82.66541092,-82.66510045,-82.66421915,-82.66400887,-82.66380983,-82.66341504,-82.66317633,-82.66276514,-82.66234445,-82.66212933,-82.6618999,-82.66162852,-82.66127166,-82.66096817,-82.66073533,-82.66052111,-82.66027731,-82.66012821,-82.66003484,-82.65956555,-82.65912961,-82.65870072,-82.65854873,-82.6583763,-82.65808813,-82.65790248,-82.65769385,-82.65722309,-82.65664029,-82.65619782,-82.65547636,-82.65517927,-82.65497134,-82.65454095,-82.65414811,-82.653974,-82.65372597,-82.65345662,-82.6532271,-82.65283075,-82.65246084,-82.65208703,-82.65153797,-82.65089312,-82.65037976,-82.64995662,-82.64955401,-82.64912504,-82.64865233,-82.64801333,-82.6476096,-82.647236,-82.64685441,-82.64613242,-82.6456593,-82.64532701,-82.64481898,-82.64400716,-82.6433477,-82.64241591,-82.641944,-82.64128317,-82.64070769,-82.64015919,-82.63918687,-82.63856062,-82.63796306,-82.63731138,-82.63654515,-82.63604441,-82.63544616,-82.63474495,-82.63379746,-82.63302427,-82.632461,-82.63158468,-82.63037451,-82.62964308,-82.62911367,-82.62837661,-82.62762487,-82.62665808,-82.62609458,-82.62542738,-82.62510723,-82.62489077,-82.6240291,-82.62349509,-82.62322768,-82.62249063,-82.62135146,-82.62033987,-82.6196322,-82.61897797,-82.61866854,-82.61843601,-82.61803698,-82.61754457,-82.61711551,-82.61658028,-82.61621485,-82.61594264,-82.61572294,-82.61530837,-82.61488164,-82.61459174,-82.61388866,-82.61332757,-82.61260413,-82.61194179,-82.6117378,-82.61156805,-82.61144922,-82.61120279,-82.61080819,-82.61054774,-82.61018874,-82.60982726,-82.60947607,-82.6087281,-82.60833272,-82.60800907,-82.60759817,-82.60736676,-82.60697815,-82.6067227,-82.6060651,-82.60581768,-82.60535966,-82.60514692,-82.60482216,-82.60454653,-82.60447483,-82.60429857,-82.60412348,-82.60380654,-82.60366506,-82.60360867,-82.60361516,-82.60367775,-82.60369047,-82.60380265,-82.6039133,-82.60396847,-82.60390366,-82.60386689,-82.60378074,-82.60368799,-82.6035942,-82.60344269,-82.60329867,-82.60318378,-82.60290397,-82.60265395,-82.6025237,-82.60233823,-82.60208873,-82.60190713,-82.60177519,-82.60165125,-82.60149962,-82.60147705,-82.60131025,-82.60114946,-82.60099331,-82.60082435,-82.60072585,-82.60063355,-82.60045963,-82.60037976,-82.60010024,-82.59989591,-82.59954008,-82.59935358,-82.59916284,-82.59897673,-82.5987321,-82.59855725,-82.59827704,-82.59803841,-82.59772584,-82.59737736,-82.59709134,-82.59668094,-82.59634029,-82.5960797,-82.59572704,-82.59504834,-82.59437349,-82.59380978,-82.59348017,-82.59398401,-82.59460512,-82.59511471,-82.595785,-82.59597211,-82.59603904,-82.59603765,-82.59606458,-82.5961517,-82.59634691,-82.59651152,-82.59657326,-82.596651,-82.59668698,-82.59669852,-82.59681506,-82.59690602,-82.59699948,-82.59704767,-82.59706656,-82.59705652,-82.59701886,-82.59693146,-82.59678789,-82.59665862,-82.59651718,-82.59629709,-82.59618662,-82.59599149,-82.59580182,-82.5957198,-82.59553636,-82.59536644,-82.59510586,-82.59502288,-82.59490801,-82.59473562,-82.59459105,-82.59452845,-82.59452438,-82.59455396,-82.59473984,-82.5949607,-82.59516077,-82.59548415,-82.59568319,-82.59616027,-82.59716986,-82.59789145,-82.59807968,-82.59843338,-82.59873287,-82.59900409,-82.59919181,-82.599246,-82.59927347,-82.59930111,-82.59936107,-82.59940861,-82.59945779,-82.59946956,-82.59950315,-82.5994388,-82.59934678,-82.5992468,-82.59912766,-82.59893691,-82.59862687,-82.59828853,-82.59794965,-82.59745094,-82.59661341,-82.59619049,-82.59583087,-82.59518876,-82.59485259,-82.59412166,-82.59374714,-82.59346485,-82.59327485,-82.59301787,-82.59295421,-82.5928153,-82.59273797,-82.59274473,-82.59275669,-82.59284085,-82.59304261,-82.59316106,-82.5932175,-82.59333076,-82.59351965,-82.59375929,-82.59390114,-82.59405771,-82.59450904,-82.59471252,-82.59497089,-82.59514759,-82.59538449,-82.59573596,-82.5960652,-82.59642244,-82.59669554,-82.59706044,-82.59718835,-82.59738416,-82.59751127,-82.59759414,-82.59761635,-82.59766167,-82.59771851,-82.59779176,-82.59791088,-82.59798722,-82.59812255,-82.59818664,-82.59824916,-82.59826202,-82.59827403,-82.59827621,-82.59826034,-82.59825402,-82.59824708,-82.59826317,-82.59820769,-82.59812069,-82.59794622,-82.59771511,-82.59753783,-82.5972889,-82.59710759,-82.59689142,-82.59642574,-82.59592895,-82.59550714,-82.59521797,-82.59476054,-82.59436851,-82.59415196,-82.5934244,-82.59177219,-82.59103244,-82.59061811,-82.59007944,-82.59009065,-82.58996601,-82.58954494,-82.58916107,-82.58852018,-82.58828236,-82.58720209,-82.58681838,-82.58634378,-82.5852255,-82.58458779,-82.58404377,-82.58362428,-82.58174276,-82.58081201,-82.57949066,-82.57887182,-82.57801773,-82.57747453,-82.57705219,-82.57672024,-82.57649646,-82.57623977,-82.57600549,-82.57584429,-82.57575136,-82.57565553,-82.57550124,-82.57539492,-82.573991,-82.57350963,-82.57330638,-82.57304476,-82.57258138,-82.57246504,-82.57221728,-82.57193521,-82.57175617,-82.57165207,-82.57155053,-82.57155138,-82.57168371,-82.57184551,-82.57192258,-82.57212944,-82.57242717,-82.57270965,-82.57291082,-82.57358337,-82.57480541,-82.57615552,-82.57668074,-82.57741605,-82.57805348,-82.57900541,-82.57954511,-82.57990373,-82.58028114,-82.58060418,-82.58076453,-82.58113709,-82.58138176,-82.58166244,-82.58199802,-82.58220922,-82.5824587,-82.58265544,-82.58285293,-82.5829342,-82.5830346,-82.58296926,-82.58269061,-82.58237063,-82.58205408,-82.5815181,-82.58062956,-82.58028606,-82.5800256,-82.57966813,-82.57950091,-82.5793894,-82.57936669,-82.57940685,-82.57945299,-82.57949217,-82.57947219,-82.57944111,-82.57932041,-82.57906835,-82.57878582,-82.57830371,-82.5779952,-82.57727658,-82.5769327,-82.57677866,-82.57655308,-82.57589278,-82.57495797,-82.57452155,-82.57427162,-82.57416554,-82.57409754,-82.57417316,-82.57425212,-82.57433799,-82.57447122,-82.57455001,-82.57469147,-82.57477629,-82.57481315,-82.57478505,-82.57468274,-82.57459875,-82.57459442,-82.57455857,-82.57451783,-82.57451751,-82.57462392,-82.57484265,-82.57502445,-82.5756411,-82.5759913,-82.57637062,-82.57661663,-82.57684057,-82.57697336,-82.57739373,-82.57763307,-82.57785019,-82.5781719,-82.57860688,-82.57876928,-82.57892319,-82.57941228,-82.58057693,-82.58113324,-82.58111087,-82.58113073,-82.58137833,-82.58178889,-82.58331663,-82.58405898,-82.58488515,-82.58572658,-82.58731917,-82.58878886,-82.5900055,-82.59126147,-82.59213419,-82.59360308,-82.59450927,-82.59602612,-82.59689304,-82.59842346,-82.59961163,-82.60100021,-82.60171972,-82.60250997,-82.60310198,-82.6039052,-82.60462547,-82.60531396,-82.60597752,-82.60648252,-82.60689289,-82.60736434,-82.60812785,-82.60867157,-82.60897118,-82.60933832,-82.6096807,-82.61015672,-82.61050123,-82.61137285,-82.61221631,-82.61247855,-82.6123853,-82.61125731,-82.61062064,-82.61041576,-82.60996262,-82.60964958,-82.60942726,-82.60911557,-82.60861534,-82.60818969,-82.60785767,-82.60766805,-82.6065669,-82.60535482,-82.60356673,-82.60229895,-82.60142279,-82.60050701,-82.59934421,-82.59881311,-82.59848542,-82.59829484,-82.59833247,-82.59856556,-82.59866292,-82.59867488,-82.59854476,-82.59858236,-82.59866373,-82.59865092,-82.59854111,-82.59863618,-82.59866055,-82.59858082,-82.59849844,-82.59856513,-82.59865768,-82.59863595,-82.59876691,-82.59899648,-82.5990955,-82.59908485,-82.59901148,-82.59900758,-82.59913691,-82.59941973,-82.60002211,-82.60069732,-82.60105735,-82.60154871,-82.60260157,-82.60411112,-82.60477599,-82.60663433,-82.60733027,-82.60797769,-82.60871612,-82.61040634,-82.61078556,-82.61094914,-82.61160085,-82.61252635,-82.61370259,-82.61493884,-82.61644539,-82.61834099,-82.61936628,-82.62110076,-82.62489868,-82.62614864,-82.62764894,-82.62891469,-82.63237241,-82.63372905,-82.63506717,-82.63641912,-82.63721588,-82.63885497,-82.63947478,-82.64004359,-82.64103125,-82.64207617,-82.64295211,-82.64347034,-82.64444333,-82.6445911,-82.64453866,-82.64401399,-82.64297242,-82.64220619,-82.64207182,-82.6413116,-82.64086155,-82.64004229,-82.6391269,-82.6386284,-82.63855431,-82.63870911,-82.63871687,-82.6386484,-82.63858476,-82.63859163,-82.63855754,-82.63839296,-82.63830122,-82.63839102,-82.63840049,-82.63819315,-82.637977,-82.63773985,-82.63764852,-82.63698134,-82.63657307,-82.6361209,-82.63543311,-82.63470179,-82.63271465,-82.6316741,-82.63066367,-82.62955646,-82.62796179,-82.62701484,-82.62635021,-82.62601357,-82.62592494,-82.62576095,-82.62557958,-82.62487808,-82.62350407,-82.62238317,-82.62183493,-82.62140253,-82.62106754,-82.62095698,-82.62092951,-82.62124763,-82.6211706,-82.62109629,-82.62090171,-82.62068804,-82.62028688,-82.61982077,-82.61922841,-82.6187723,-82.61680869,-82.61532201,-82.61433676,-82.61183466,-82.6095449,-82.60785216,-82.60727939,-82.60688316,-82.60616079,-82.60526728,-82.60420216,-82.60325131,-82.60282927,-82.60217408,-82.60146483,-82.60031732,-82.59935573,-82.59869051,-82.59809165,-82.5972064,-82.59641143,-82.59564494,-82.59504807,-82.59409063,-82.59322614,-82.59241209,-82.59104422,-82.58946114,-82.58881222,-82.58819955,-82.58780492,-82.58700631,-82.58609085,-82.58561391,-82.58534248,-82.58530394,-82.58528236,-82.58535108,-82.58539143,-82.58527419,-82.58531448,-82.58528384,-82.58523027,-82.58510224,-82.58509546,-82.58523688,-82.58534968,-82.58542596,-82.58551334,-82.58560206,-82.58554576,-82.58517876,-82.58478638,-82.58451929,-82.58410585,-82.58335707,-82.58251172,-82.58183527,-82.58130459,-82.58034737,-82.57932158,-82.57837249,-82.57722127,-82.57669708,-82.57545812,-82.57459713,-82.57385327,-82.57313663,-82.57221478,-82.568818,-82.56800234,-82.56712929,-82.56657011,-82.56598944,-82.56489774,-82.5643292,-82.56393628,-82.56343462,-82.56251306,-82.5621796,-82.56170814,-82.56123678,-82.56024296,-82.55963195,-82.5586485,-82.55762582,-82.55602396,-82.55466811,-82.55322855,-82.55236393,-82.55123476,-82.55072193,-82.55036099,-82.5498489,-82.54938199,-82.54923964,-82.54922737,-82.54927928,-82.54947189,-82.54948315,-82.54951159,-82.54958876,-82.54950004,-82.54881126,-82.54824146,-82.54724354,-82.54666143,-82.54588043,-82.54519333,-82.54484272,-82.54458873,-82.54463835,-82.54486805,-82.5448873,-82.54499892,-82.54489898,-82.54450507,-82.54415486,-82.54365785,-82.54318716,-82.54257617,-82.54250773],"lat":[38.05007432,38.169264,38.62295978,38.62253357,38.6219478,38.62064109,38.61904005,38.61811744,38.61755523,38.61713178,38.61680281,38.61673005,38.61694603,38.61724821,38.6178925,38.61812404,38.61828322,38.61855454,38.61889476,38.61956143,38.61983342,38.61992057,38.6199734,38.62007528,38.6200475,38.62003463,38.61992439,38.61997516,38.61994796,38.62008009,38.62025771,38.62076988,38.62110032,38.62143441,38.62157485,38.62198123,38.6228124,38.62345527,38.62359992,38.62410444,38.62509562,38.62892144,38.63201316,38.63479727,38.63548344,38.63822693,38.64014577,38.64158634,38.64439286,38.64652174,38.65038383,38.65124172,38.65274081,38.65378942,38.65528196,38.65576631,38.65697175,38.65757273,38.657964,38.65835433,38.6588366,38.65986206,38.6624711,38.6630546,38.66368175,38.66625556,38.66786082,38.66940812,38.67184312,38.67330331,38.67409922,38.67521012,38.67535598,38.67558074,38.67638287,38.67749135,38.67797504,38.67873668,38.68080128,38.68177904,38.68267051,38.68325137,38.68572484,38.68621501,38.6873471,38.68748197,38.68775546,38.6880134,38.68828046,38.68846419,38.68850295,38.68855875,38.68862626,38.68867474,38.68881556,38.6889304,38.68915633,38.68945655,38.68961335,38.68976828,38.68997341,38.69023243,38.69068528,38.69109215,38.6915193,38.6918733,38.69234397,38.69263971,38.6928407,38.6931079,38.69332441,38.69352898,38.69391122,38.69424084,38.69452828,38.69480964,38.69506773,38.69535304,38.69587242,38.69608956,38.69661345,38.69705391,38.69740439,38.69761278,38.69810224,38.69855795,38.69910645,38.69939021,38.69978718,38.70021243,38.70050496,38.70089053,38.70119613,38.70159901,38.70183496,38.70206253,38.7024703,38.70281929,38.70314429,38.70343913,38.70372815,38.70416665,38.70463942,38.7050378,38.70558961,38.70603072,38.70662673,38.70715407,38.70782047,38.70811165,38.70879296,38.70935954,38.70989719,38.71018518,38.71070301,38.71127424,38.71164963,38.71250413,38.71293086,38.71332492,38.71396199,38.71424867,38.71506311,38.71565438,38.71665459,38.71729395,38.71754358,38.71802338,38.71857084,38.71896027,38.71951949,38.71978241,38.72010652,38.72032902,38.72075787,38.72125739,38.72162334,38.72216416,38.72231898,38.72266835,38.72297793,38.7233288,38.72353029,38.72391387,38.72439713,38.72474937,38.72502913,38.7253811,38.72552397,38.72574244,38.72594712,38.72612789,38.72636789,38.72659474,38.72682083,38.72713113,38.72739227,38.72755378,38.72764399,38.72775822,38.72791585,38.72807299,38.72836714,38.72844665,38.72859184,38.72871286,38.72876371,38.72875744,38.72864493,38.72843398,38.72831668,38.72816314,38.72808993,38.72799302,38.72795118,38.72804946,38.7282312,38.72842251,38.72854039,38.72864448,38.72878618,38.72895369,38.72911962,38.72923115,38.72942009,38.72959127,38.7298826,38.73012954,38.73029115,38.73045432,38.73058088,38.73062971,38.73066212,38.73063624,38.73056713,38.73048596,38.73044726,38.73038176,38.73029939,38.73011182,38.72989841,38.72968088,38.72952733,38.7293813,38.72928259,38.72919441,38.72910864,38.72909609,38.7291269,38.72927132,38.72946056,38.72968023,38.72988053,38.73000744,38.73004518,38.73009322,38.73009548,38.73009449,38.73007779,38.73005706,38.73006567,38.72999883,38.72998853,38.72998348,38.72994025,38.72989912,38.72987085,38.72980272,38.72976571,38.72974785,38.72973711,38.72969805,38.72961629,38.72949606,38.72943404,38.72938034,38.72932762,38.72927544,38.72917496,38.72909632,38.72902179,38.72898514,38.72890232,38.7288273,38.72872782,38.72864929,38.72860223,38.72855063,38.72848158,38.72840623,38.72823216,38.72808328,38.72800574,38.72789638,38.72773584,38.72762873,38.72754445,38.72739798,38.72722726,38.72709157,38.72699901,38.72688671,38.72684311,38.72678836,38.72667678,38.72656241,38.72648657,38.72636531,38.72626034,38.72623233,38.72619048,38.72611799,38.72605116,38.72599774,38.7259787,38.72599595,38.72596677,38.72594324,38.7259713,38.72600813,38.72607168,38.72614346,38.7261923,38.72633004,38.7265174,38.72662192,38.72668582,38.72681492,38.72685338,38.72697525,38.72715648,38.72735498,38.72752526,38.72784423,38.7280791,38.72821539,38.72847064,38.72850301,38.72854228,38.72855764,38.72859195,38.7285782,38.72849631,38.72835302,38.72810338,38.72770569,38.72745178,38.72731375,38.72721281,38.72717991,38.72716524,38.72720435,38.72732888,38.72754068,38.72777793,38.72799368,38.72815438,38.72836856,38.7286505,38.72887679,38.72916256,38.72941003,38.7296802,38.72981851,38.73001276,38.73017813,38.73035033,38.7305504,38.73065978,38.73072474,38.73081291,38.73084329,38.73092703,38.73111532,38.73134278,38.73155125,38.73167827,38.73189826,38.73204919,38.73227695,38.73249005,38.73281312,38.73297306,38.73330291,38.73349389,38.73359318,38.73390801,38.73410809,38.73423045,38.73445302,38.73453378,38.73463319,38.734816,38.73495901,38.73521004,38.73562461,38.73583583,38.73585648,38.73599204,38.73628654,38.73654016,38.73681166,38.73695698,38.73709353,38.73722571,38.73744084,38.73776173,38.73795143,38.7381276,38.73828826,38.73845922,38.73855288,38.73864483,38.73879809,38.73890605,38.73922304,38.73933535,38.73952327,38.73962432,38.7397257,38.73978095,38.73986781,38.74005759,38.74018458,38.74028413,38.7404433,38.74059682,38.74087668,38.74112506,38.7413287,38.74163293,38.74192298,38.74224674,38.74237382,38.74253318,38.74280949,38.74293071,38.74321567,38.74341035,38.74359985,38.74366573,38.7438843,38.74410584,38.74431392,38.74447532,38.74461315,38.74484281,38.74499025,38.74519737,38.74540371,38.74559103,38.7457031,38.74583358,38.74610914,38.74628749,38.74657806,38.74682702,38.74708535,38.74732278,38.7475476,38.74771077,38.74788342,38.74803748,38.74816682,38.74836055,38.74856805,38.74877702,38.74890894,38.7490599,38.74913849,38.74931019,38.74944574,38.74954692,38.74971933,38.74991116,38.74999141,38.75005175,38.75006957,38.75020361,38.75033142,38.75038273,38.75046361,38.75056895,38.75064975,38.75081529,38.75090894,38.75098664,38.75107172,38.75117639,38.75125659,38.75132547,38.75140454,38.75147088,38.7515451,38.75162692,38.7516528,38.7517439,38.7517979,38.75184541,38.75198412,38.75208684,38.75223924,38.75237335,38.75253186,38.75268218,38.75277963,38.75288463,38.7529317,38.75298824,38.75307568,38.75322545,38.75331384,38.75334697,38.75333671,38.75329916,38.75327519,38.75328504,38.75329193,38.75337063,38.75354034,38.75374271,38.75400184,38.75414384,38.754287,38.75446127,38.75459287,38.75475212,38.7549127,38.75494628,38.7549135,38.75489095,38.75489749,38.75495232,38.75514402,38.75537887,38.75551219,38.75567299,38.75587773,38.75607454,38.75621371,38.75634667,38.75641385,38.7564656,38.75651088,38.75650549,38.75650019,38.75649948,38.75644314,38.75640762,38.75633407,38.75625984,38.75614427,38.75598962,38.75593067,38.75581655,38.75567395,38.75555874,38.75546076,38.75536433,38.7553256,38.75530117,38.75526079,38.75519425,38.75507873,38.75479042,38.75459356,38.75436164,38.75424098,38.7540866,38.75390297,38.75361373,38.75336549,38.75309753,38.75301315,38.75296372,38.75286737,38.75275898,38.7526481,38.75246603,38.75223545,38.75205237,38.75187157,38.75179675,38.75159213,38.75140643,38.75132871,38.75126603,38.75125515,38.75124991,38.75127489,38.75132876,38.75146344,38.75155708,38.75163479,38.75161801,38.75158404,38.75137183,38.75121079,38.75110315,38.75088723,38.75067249,38.75036777,38.75028845,38.7500724,38.74986907,38.74944756,38.74896635,38.74871304,38.74799602,38.74766111,38.74727815,38.74683673,38.74630996,38.74578751,38.74543195,38.74532207,38.74494843,38.74471034,38.74403514,38.74363655,38.74314873,38.74261478,38.742112,38.74169727,38.74111004,38.73998637,38.73959963,38.73898559,38.73861361,38.73815679,38.73785914,38.73751618,38.7370014,38.73654166,38.73599249,38.73558,38.73532578,38.73499224,38.73463517,38.73433146,38.73401978,38.73374855,38.73364319,38.73352934,38.73332506,38.7331443,38.73296662,38.73265412,38.73236349,38.73182132,38.73114407,38.73056141,38.729694,38.72911512,38.7286717,38.72804836,38.72765003,38.72727152,38.72695889,38.72633944,38.72548082,38.72426427,38.72354675,38.72330573,38.72310504,38.72278688,38.7224246,38.72196067,38.72171072,38.72133854,38.72057807,38.72001425,38.71939001,38.71894842,38.71831005,38.71734514,38.7169355,38.71640136,38.71599597,38.71552361,38.714984,38.71461005,38.71410334,38.71371995,38.7134691,38.71297293,38.71232069,38.71172939,38.71123798,38.710921,38.71062194,38.71013551,38.70961822,38.70913098,38.7087287,38.70844747,38.70809429,38.70782646,38.7075126,38.7071373,38.70692864,38.70630439,38.70603769,38.70576552,38.70533796,38.70495536,38.70459784,38.70407959,38.70365429,38.70299691,38.70231411,38.70199241,38.70147331,38.70112847,38.70036918,38.70000668,38.69978175,38.69969598,38.69892328,38.6978948,38.69737376,38.69644892,38.6957184,38.69508347,38.69474825,38.69445812,38.69415656,38.69382921,38.69336691,38.69289445,38.69249597,38.69215744,38.69119769,38.69084408,38.69042814,38.6901047,38.68972374,38.68943073,38.68909933,38.68872212,38.68836893,38.68785259,38.68743288,38.68713617,38.68683818,38.68652907,38.68605597,38.68572422,38.68522368,38.68462561,38.68428101,38.68396094,38.68380675,38.68346577,38.68319669,38.68294463,38.68270147,38.68235567,38.68180494,38.68130933,38.68093051,38.6803026,38.68002133,38.6795895,38.67923826,38.67863263,38.67785128,38.67736585,38.6763462,38.67581513,38.67536504,38.67460305,38.67434167,38.67403653,38.67348076,38.67312378,38.67260696,38.67233917,38.67199294,38.67141226,38.67108909,38.67077119,38.67022739,38.66986055,38.66926821,38.66838296,38.66723437,38.66613542,38.66521737,38.66459459,38.66399925,38.66381985,38.66361062,38.66265449,38.66215788,38.66080129,38.65950729,38.65886902,38.65855606,38.65802941,38.65706647,38.65602686,38.65558632,38.65493326,38.65432501,38.65368195,38.65292619,38.65220796,38.65151006,38.65088155,38.65020207,38.64908804,38.64783791,38.64734911,38.64680662,38.64627957,38.64554562,38.64541067,38.64535901,38.6453547,38.64543311,38.64566794,38.64583428,38.64591805,38.64594361,38.64590718,38.6458191,38.64560293,38.64541701,38.64502714,38.64435593,38.64383387,38.64326667,38.64269618,38.6420292,38.64148688,38.6411401,38.64050885,38.64008118,38.63958106,38.63905984,38.63869926,38.63801236,38.63729797,38.63628727,38.63567338,38.63502631,38.63437699,38.63393745,38.63337057,38.63304007,38.63269045,38.63236402,38.63203403,38.63155849,38.63115146,38.63053439,38.62935592,38.62896299,38.62864829,38.62834886,38.62792435,38.62668874,38.62610915,38.62574794,38.62552746,38.6253249,38.62510069,38.62484647,38.62470918,38.62447685,38.62433301,38.62415062,38.62381945,38.62329811,38.62290596,38.62233505,38.62191892,38.62178851,38.62160352,38.62139896,38.62116877,38.62095804,38.62064159,38.62010773,38.61966015,38.61905559,38.61809897,38.61740825,38.61678717,38.6167508,38.61579788,38.61500402,38.6144468,38.61390746,38.61339488,38.61288179,38.61232717,38.61175226,38.61091931,38.61030858,38.60961663,38.60912949,38.60810568,38.60770857,38.60715621,38.606559,38.60566394,38.60511957,38.60451505,38.60365496,38.60287124,38.60222,38.60149363,38.60075436,38.60010737,38.59894869,38.59806374,38.59755753,38.59699512,38.59634229,38.59570376,38.5953973,38.59520814,38.59490803,38.59435753,38.59356282,38.59294658,38.5925495,38.59205592,38.59162982,38.5911033,38.59089075,38.59069831,38.59041244,38.58995663,38.58962936,38.5893797,38.58885939,38.58857173,38.58835568,38.58805329,38.58731606,38.58682215,38.58638574,38.58606586,38.58569823,38.58527521,38.58453259,38.58424448,38.58376256,38.58339852,38.58294027,38.58267492,38.58241544,38.58205778,38.58148983,38.5809193,38.58050193,38.58004858,38.57970347,38.57940566,38.57925181,38.57904843,38.57896467,38.578873,38.57866138,38.57854827,38.57844446,38.57839677,38.57842714,38.57849324,38.57852964,38.57851437,38.57842172,38.57831203,38.57817491,38.57797839,38.57780778,38.57755544,38.57721391,38.5769137,38.57667309,38.57650226,38.57634761,38.57611489,38.57603018,38.57587791,38.57571072,38.57553291,38.57526356,38.57489214,38.57430767,38.5737907,38.57362439,38.57334439,38.57305904,38.57261754,38.57225001,38.57189956,38.57160034,38.57114205,38.57081669,38.57047053,38.57025882,38.56997758,38.56971023,38.56933991,38.56905271,38.56877045,38.56840787,38.56812647,38.56784593,38.56760919,38.56743439,38.56720552,38.56696922,38.5667839,38.56658448,38.56641242,38.56625878,38.56604722,38.56578478,38.5654492,38.56514303,38.56488922,38.56460966,38.56430312,38.56393151,38.56371222,38.56353323,38.56334465,38.56311048,38.56285059,38.5624174,38.56217291,38.56193625,38.56175529,38.56158171,38.56136402,38.56109247,38.56091493,38.56060692,38.56033611,38.5601265,38.55984863,38.55972987,38.55964907,38.55960382,38.55957353,38.55951289,38.55949106,38.55946166,38.55940258,38.55927552,38.55919138,38.55916201,38.55915685,38.55917061,38.55920177,38.5592139,38.55925138,38.5592414,38.55923858,38.55929276,38.5593217,38.5594316,38.55954464,38.55972318,38.55985419,38.56002341,38.56009198,38.56013271,38.56017266,38.5602576,38.56035429,38.5604728,38.56055035,38.56055871,38.56054045,38.56049143,38.5604455,38.56039216,38.56028638,38.56020565,38.56009559,38.55999996,38.55994566,38.55990882,38.55986586,38.55981037,38.55972196,38.55970995,38.55968226,38.55970028,38.55971654,38.55969596,38.55965003,38.55959877,38.55945796,38.55933449,38.5592919,38.55925969,38.55924975,38.55925888,38.55925801,38.5592506,38.559194,38.5591531,38.55909259,38.55903701,38.55903162,38.55902076,38.5589698,38.55894382,38.55896883,38.55904315,38.55908791,38.55927542,38.55935868,38.55942638,38.55941209,38.55931633,38.55923072,38.55917077,38.55914893,38.55912206,38.55919906,38.5591881,38.55924614,38.55920083,38.55913842,38.55908173,38.55899429,38.55887361,38.55880894,38.55871845,38.55862049,38.55849198,38.55836434,38.55818528,38.55786336,38.55721204,38.55656601,38.55620556,38.5559825,38.5556705,38.55536723,38.55509469,38.55477227,38.55452295,38.55429883,38.55408367,38.55388931,38.55346692,38.55329165,38.55320829,38.55318962,38.55318436,38.55317603,38.55307361,38.55289158,38.55255695,38.55209608,38.55180036,38.55159875,38.55081733,38.5506333,38.55035736,38.55024917,38.55004685,38.54979813,38.54923098,38.54903227,38.54888538,38.5485859,38.54805879,38.54791724,38.54718139,38.54675724,38.54640197,38.54610989,38.54593694,38.54568618,38.54534417,38.5449947,38.54474047,38.54426064,38.54396854,38.54376993,38.54340001,38.54310189,38.54271244,38.5420451,38.54187998,38.54154975,38.54120438,38.54097613,38.54070203,38.54045558,38.54023285,38.53986198,38.53937816,38.53887525,38.53835634,38.53802519,38.53776158,38.53758289,38.5372006,38.5368056,38.53643273,38.53592496,38.53547653,38.53483471,38.53423108,38.53366332,38.53262632,38.53204572,38.53135931,38.53093099,38.53040081,38.52981463,38.52927982,38.52885863,38.5285908,38.52831798,38.52765846,38.52731698,38.52671247,38.52606049,38.52553533,38.52509411,38.52464826,38.52390287,38.52322628,38.522486,38.52179582,38.52125227,38.52054944,38.52032332,38.51958733,38.51910172,38.5183625,38.51767053,38.51704088,38.51674479,38.51612488,38.51560009,38.51520764,38.51495846,38.51468442,38.5142743,38.51399853,38.51365818,38.51338249,38.51301684,38.51250136,38.51202845,38.51147954,38.51071366,38.51038991,38.50984293,38.50927282,38.50872142,38.50836036,38.50816231,38.50729566,38.50695061,38.50661651,38.50627324,38.50578652,38.50547762,38.50465247,38.50441554,38.50416037,38.5036549,38.50330385,38.50268943,38.50201155,38.50176487,38.50152676,38.50128756,38.50104473,38.5008617,38.5007045,38.50056159,38.50033201,38.50017771,38.50007085,38.4996754,38.49923546,38.49875174,38.49858361,38.49832085,38.49789986,38.49761825,38.49742598,38.49706618,38.49658526,38.49621797,38.49562771,38.4953782,38.49516805,38.4948052,38.4944213,38.494199,38.49394595,38.49370197,38.49354971,38.4933319,38.49319247,38.49298006,38.49265392,38.49223798,38.49185371,38.49156789,38.49125106,38.49097885,38.49070891,38.49032062,38.49007105,38.48985454,38.48961997,38.48921026,38.48890874,38.48866651,38.48840458,38.48792862,38.4875707,38.48708129,38.486834,38.48646708,38.48614843,38.48585314,38.48533037,38.48501447,38.48468147,38.48434637,38.48399383,38.48380829,38.48357416,38.48333665,38.48301301,38.48274132,38.48254864,38.48223714,38.4818042,38.48153835,38.48136992,38.48111286,38.48083275,38.48051268,38.48032472,38.4800702,38.47995465,38.47986583,38.4795409,38.47927751,38.47915507,38.47881692,38.47827863,38.47786251,38.47761512,38.47734301,38.47722358,38.47706154,38.4768305,38.47645211,38.476188,38.47587096,38.47575347,38.47566248,38.47552824,38.47529202,38.47505543,38.47484584,38.47436912,38.47404657,38.47355555,38.47306687,38.47285198,38.47261188,38.47240887,38.47224644,38.47195301,38.47154633,38.47103338,38.47045716,38.46996635,38.46874521,38.46818525,38.46770478,38.46697749,38.466505,38.46574737,38.46514373,38.46385353,38.4633895,38.46253935,38.4621216,38.46138422,38.46072097,38.46051987,38.46018891,38.45999334,38.4597246,38.4596027,38.45953252,38.4593397,38.459103,38.45888764,38.45867564,38.45849929,38.45831257,38.45794954,38.45742173,38.45686443,38.45621699,38.45551117,38.45464513,38.4537257,38.45298286,38.45127886,38.44998159,38.44902678,38.44785351,38.44621827,38.44523876,38.44428395,38.44367138,38.4430128,38.44272367,38.44176726,38.44083362,38.43991318,38.43904734,38.43849383,38.43799961,38.43729094,38.43687325,38.43626408,38.43573389,38.43470717,38.43404694,38.43344567,38.4327765,38.43200619,38.43148226,38.43060658,38.42985909,38.42900525,38.428092,38.42739203,38.42657955,38.42593166,38.42549405,38.42496332,38.42401453,38.42309745,38.42231932,38.42182079,38.42102917,38.42002568,38.41926168,38.41808916,38.41787983,38.41754021,38.41728806,38.41698725,38.41674712,38.41639028,38.41589187,38.41539004,38.41479864,38.41432702,38.41353052,38.4129312,38.41235805,38.41172651,38.41121538,38.41081541,38.41048134,38.4101781,38.40961252,38.40909354,38.408566,38.40803881,38.40726915,38.40663016,38.40588863,38.40502155,38.40457285,38.40384539,38.40308663,38.40208166,38.40165565,38.40111954,38.40041983,38.39968031,38.39910576,38.39863307,38.39826913,38.39784411,38.3974969,38.39731057,38.39697576,38.396731,38.39643395,38.39560766,38.39494136,38.39474576,38.39419123,38.39376163,38.39317744,38.3927071,38.39246128,38.3921474,38.39186927,38.39136668,38.39103068,38.39078059,38.39042507,38.38996713,38.38955533,38.3891373,38.38878227,38.38850779,38.38819432,38.38777256,38.38727795,38.38683753,38.38617518,38.38499068,38.38439417,38.38394771,38.38292844,38.38246548,38.38144316,38.38081633,38.38027922,38.3797858,38.37894298,38.37847625,38.37760636,38.37680681,38.37612216,38.37555993,38.37506346,38.37467457,38.37447645,38.37401499,38.37353238,38.37299478,38.37241384,38.37211744,38.37176304,38.37096525,38.3706169,38.37020819,38.36999378,38.36963809,38.36909313,38.36853795,38.36789832,38.3673911,38.36645015,38.36599126,38.36545384,38.36505333,38.36491194,38.36459797,38.36350083,38.36282708,38.36205559,38.36115067,38.36034698,38.359064,38.35793647,38.3568851,38.35605706,38.35467944,38.35353098,38.35247685,38.35022504,38.34900422,38.3478163,38.34683255,38.34593316,38.34528284,38.34477388,38.34443392,38.34405567,38.34380979,38.34352238,38.34311363,38.34277964,38.34248881,38.34243786,38.34228555,38.34223455,38.34219924,38.34200061,38.34151967,38.3412396,38.34109803,38.34084809,38.34083049,38.34076742,38.3405398,38.34025964,38.33946562,38.33911445,38.33734431,38.33669521,38.33601073,38.33451843,38.33373342,38.33328476,38.33298092,38.33196001,38.33137938,38.33047439,38.33002299,38.32944579,38.32906034,38.32878386,38.32851461,38.32812328,38.32760465,38.3265687,38.32565762,38.32490231,38.32421417,38.32342489,38.32297965,38.3210441,38.32039989,38.32009978,38.31969776,38.31895993,38.31870747,38.31826603,38.31773294,38.31719512,38.31641679,38.31557946,38.31503473,38.31411232,38.31363651,38.31334667,38.31303895,38.31268566,38.31236284,38.31214565,38.31143213,38.31014602,38.30863872,38.30798305,38.3070246,38.30611231,38.30477908,38.30390809,38.30331323,38.30276967,38.30223221,38.30186902,38.30111304,38.30061336,38.30016886,38.29962351,38.29925272,38.29876279,38.29836483,38.29770585,38.29731716,38.29680741,38.29630078,38.2956868,38.29518365,38.29484338,38.29429596,38.29335309,38.29279023,38.29232167,38.29151526,38.29098665,38.2903792,38.2897748,38.28835807,38.28736873,38.28597468,38.28530714,38.28461251,38.28361254,38.28274785,38.28194411,38.28079572,38.28027087,38.27899183,38.27843856,38.27817134,38.27782527,38.27693104,38.2758962,38.27538917,38.27500126,38.2748349,38.27463454,38.2742952,38.27379792,38.2725768,38.27150946,38.27089609,38.26996016,38.26908525,38.26831209,38.26767112,38.26685229,38.26625518,38.26570963,38.26520859,38.26473902,38.26450478,38.26393679,38.26335051,38.26281274,38.26152548,38.26071882,38.25972057,38.25898665,38.25840055,38.25806751,38.25704769,38.25650732,38.25595745,38.25516374,38.25420753,38.25383544,38.25349882,38.25258048,38.25029608,38.24939391,38.24922638,38.2489666,38.24871903,38.24849098,38.24679261,38.24626223,38.24592853,38.24572643,38.24563779,38.24565234,38.24559489,38.24547521,38.24543603,38.24546907,38.24550282,38.24571776,38.24585354,38.24619933,38.24648306,38.24672405,38.24692664,38.24714548,38.24735703,38.24763943,38.247662,38.24736775,38.24692447,38.24647972,38.2460084,38.24561635,38.24483016,38.24396809,38.24278559,38.24197997,38.24122247,38.24027205,38.23946583,38.23798047,38.23629654,38.235293,38.23429452,38.2302358,38.22825771,38.22746644,38.22649477,38.22566762,38.22512388,38.2242652,38.22349904,38.22319028,38.22280843,38.22251764,38.22179663,38.22114344,38.22040072,38.21983048,38.21942865,38.21913774,38.21863897,38.21827243,38.21791337,38.21736145,38.2168899,38.21534978,38.21409258,38.21373224,38.21307003,38.21251804,38.21159288,38.21132256,38.2106746,38.20947089,38.20821102,38.20730764,38.20662881,38.20572178,38.20482026,38.20390534,38.20300075,38.2010546,38.20061277,38.20025187,38.19936238,38.19778578,38.19720534,38.19657675,38.19572109,38.1948729,38.19426974,38.1935677,38.19166137,38.18753941,38.18599297,38.18286945,38.18067533,38.17949316,38.17776869,38.17474302,38.17368558,38.17262447,38.17133868,38.17061176,38.17012506,38.16974293,38.16926357,38.16892501,38.16887733,38.16913619,38.17034953,38.17058526,38.17070457,38.17077371,38.1709433,38.17100314,38.17112911,38.17134196,38.17138975,38.1711485,38.17101853,38.17081918,38.17054979,38.17020151,38.16944559,38.16858678,38.16656053,38.16590428,38.16524893,38.16403163,38.16232265,38.16138888,38.16110921,38.16003205,38.15931678,38.15840359,38.15713133,38.15591542,38.15503415,38.15400444,38.15369825,38.15268253,38.15142861,38.15044234,38.14964391,38.14892652,38.14800914,38.14687255,38.14557658,38.14373153,38.14291728,38.14153029,38.1408918,38.13869185,38.13801956,38.13764697,38.13725172,38.13694119,38.13638112,38.13597721,38.13580899,38.13554276,38.13516334,38.13501534,38.1348556,38.13459115,38.1345469,38.13455901,38.13457004,38.13441823,38.13412766,38.13373462,38.13329145,38.132784,38.13198793,38.13070042,38.12880855,38.12528953,38.1243182,38.1238567,38.12278676,38.12220683,38.12157935,38.12108884,38.1205401,38.12038787,38.12022859,38.12022281,38.12032583,38.12068247,38.12078993,38.12092488,38.12093985,38.12093344,38.12078504,38.12045008,38.11981583,38.11899155,38.11861145,38.11823538,38.11794307,38.11757104,38.11712087,38.11669506,38.11618173,38.11504524,38.11391255,38.11301,38.11245138,38.11166326,38.11093743,38.11041624,38.10983351,38.10944495,38.10933069,38.10926276,38.10913957,38.10866407,38.10787292,38.10723775,38.10663354,38.10607328,38.10540158,38.10343667,38.10278033,38.10194735,38.10133225,38.10058814,38.10001377,38.09955421,38.09922569,38.09824025,38.09755565,38.0963871,38.09593125,38.09540332,38.09497315,38.09347808,38.09221114,38.09154863,38.09089316,38.09003227,38.08931575,38.08895684,38.08860395,38.08798265,38.08725919,38.08640866,38.08512678,38.08454388,38.08320054,38.08240661,38.08191945,38.08164946,38.08146112,38.08142801,38.08143763,38.08140928,38.08127537,38.08099659,38.08011323,38.07927218,38.07855055,38.07789195,38.07657348,38.07612417,38.07525065,38.07449462,38.07332192,38.07278124,38.07225315,38.07198917,38.07173496,38.07158009,38.07147101,38.07129026,38.07079665,38.07043996,38.07010591,38.06945177,38.06855638,38.0679521,38.06751416,38.06707935,38.0662856,38.06606542,38.06476919,38.06359243,38.06323353,38.06256771,38.0620418,38.06121165,38.06077065,38.06026786,38.05976487,38.05907593,38.05828247,38.05718122,38.05653277,38.05597069,38.05528122,38.05474131,38.05361016,38.0525922,38.05183471,38.05119123,38.0502177,38.05007432]}]],[[{"lng":[-82.51684696,-82.792715,-83.498003,-83.27589,-82.54250773,-82.54201567,-82.54162411,-82.5408587,-82.54002018,-82.53932283,-82.53774343,-82.53733413,-82.53709879,-82.5370826,-82.53739667,-82.53821492,-82.5388397,-82.53916235,-82.53905753,-82.53871751,-82.53781346,-82.53735203,-82.53670318,-82.53613347,-82.53484987,-82.53335625,-82.53247588,-82.53192082,-82.53132105,-82.52879606,-82.52763214,-82.52691673,-82.52631786,-82.52580204,-82.52581687,-82.52586419,-82.52606214,-82.52596206,-82.52582911,-82.52574262,-82.52545713,-82.52506938,-82.52450517,-82.52400836,-82.52385942,-82.52367587,-82.52299633,-82.52248593,-82.52186203,-82.52154231,-82.52072838,-82.52019367,-82.5197551,-82.51950203,-82.51911896,-82.51865072,-82.51800004,-82.516072,-82.51585387,-82.51554679,-82.51543254,-82.51536333,-82.51543752,-82.51558312,-82.51585401,-82.51653354,-82.51895602,-82.51930038,-82.51933343,-82.51919349,-82.51892769,-82.51835017,-82.51736042,-82.51441683,-82.51363618,-82.51299322,-82.51227697,-82.51132107,-82.50966024,-82.50898505,-82.5084237,-82.50695315,-82.50574796,-82.50221624,-82.50076771,-82.49986032,-82.49755625,-82.49665616,-82.49587624,-82.49482958,-82.49368892,-82.49297859,-82.49211307,-82.49126756,-82.4898798,-82.48923556,-82.48865517,-82.48822468,-82.48770935,-82.48708159,-82.48649071,-82.4860579,-82.48598109,-82.48596792,-82.48601065,-82.48612161,-82.48619886,-82.48614258,-82.4861148,-82.48607215,-82.4854071,-82.48505477,-82.48465185,-82.48434867,-82.48396818,-82.48359379,-82.48319163,-82.48265559,-82.48217341,-82.48134318,-82.48022944,-82.47860163,-82.47693398,-82.47529959,-82.47462299,-82.47385929,-82.47307428,-82.47255112,-82.47218965,-82.4718209,-82.47100891,-82.46992387,-82.46925031,-82.46858512,-82.46760613,-82.46675824,-82.46628022,-82.46553888,-82.46495085,-82.46456604,-82.46432563,-82.46424094,-82.46426526,-82.46428468,-82.46431052,-82.46424685,-82.46429261,-82.46436079,-82.46441494,-82.46455728,-82.4648619,-82.46512131,-82.46561894,-82.46596262,-82.46636301,-82.46669866,-82.46713694,-82.46741856,-82.46779336,-82.46825632,-82.46885143,-82.46966874,-82.47065915,-82.47143146,-82.47240344,-82.47406619,-82.47531927,-82.47714825,-82.47806085,-82.47880557,-82.48024184,-82.48122374,-82.48189352,-82.48205269,-82.48246539,-82.48280154,-82.48314661,-82.48369907,-82.48403576,-82.48425957,-82.48443096,-82.48452774,-82.48453878,-82.48463447,-82.48475067,-82.48478979,-82.48480374,-82.48481292,-82.48480389,-82.48494006,-82.48505201,-82.48505451,-82.48485081,-82.48445891,-82.48398681,-82.48343815,-82.48255636,-82.48184968,-82.48013408,-82.47942614,-82.47864194,-82.47810057,-82.47689016,-82.47614016,-82.4751528,-82.47454948,-82.47413941,-82.47299367,-82.47252872,-82.47221716,-82.47182979,-82.47162898,-82.47147827,-82.4714614,-82.47155489,-82.47177547,-82.47212707,-82.47272435,-82.47350716,-82.47393111,-82.47419185,-82.47474719,-82.47516257,-82.47565541,-82.4761306,-82.47732753,-82.47774242,-82.47800169,-82.47840281,-82.47865692,-82.47907683,-82.47947622,-82.48010138,-82.48055135,-82.48150744,-82.48187969,-82.48234951,-82.48276237,-82.48331544,-82.48351712,-82.48386183,-82.48437366,-82.48480896,-82.48515927,-82.48555858,-82.48622112,-82.48644461,-82.48751869,-82.48827684,-82.48854842,-82.4891188,-82.49023651,-82.49082681,-82.49151419,-82.49225808,-82.49301493,-82.49420005,-82.49497023,-82.4954996,-82.49615489,-82.49670619,-82.49721973,-82.49757097,-82.49771919,-82.49779616,-82.49781518,-82.49772057,-82.49774324,-82.49766446,-82.49736477,-82.49696856,-82.49614061,-82.49449742,-82.49373918,-82.49304158,-82.49224359,-82.49116506,-82.49032297,-82.48987301,-82.4895795,-82.48936193,-82.48923916,-82.48927694,-82.48976518,-82.49009204,-82.49031771,-82.49066595,-82.49133955,-82.49190169,-82.49217245,-82.49275667,-82.49441306,-82.49522869,-82.49608654,-82.49752842,-82.49810726,-82.49873993,-82.49932055,-82.49995413,-82.50049748,-82.50069931,-82.50139741,-82.50173935,-82.50191221,-82.50226289,-82.50243653,-82.50252295,-82.50243382,-82.50219819,-82.50137359,-82.50057051,-82.49994507,-82.49976668,-82.49921636,-82.49883865,-82.49838373,-82.49781562,-82.49727113,-82.49665484,-82.49594059,-82.49539155,-82.49466924,-82.49400744,-82.4930887,-82.49237913,-82.49180807,-82.4907647,-82.48972072,-82.48857346,-82.48699404,-82.48545624,-82.48429508,-82.48346065,-82.48252169,-82.48188873,-82.48146734,-82.48105822,-82.4806568,-82.48028737,-82.48026822,-82.48043266,-82.4807623,-82.48123692,-82.48204151,-82.482586,-82.48297792,-82.48338464,-82.48448424,-82.48516341,-82.48580114,-82.48620671,-82.48704081,-82.48771357,-82.48809337,-82.48836137,-82.48840273,-82.48834621,-82.48801768,-82.48775504,-82.48738984,-82.48655709,-82.48534757,-82.48438996,-82.48340207,-82.48220666,-82.48131935,-82.48055096,-82.4792893,-82.47851469,-82.47795584,-82.47716852,-82.47658737,-82.47594645,-82.47557435,-82.47526613,-82.47505602,-82.47476142,-82.4747287,-82.47472388,-82.47455254,-82.47440258,-82.47430454,-82.47423968,-82.47441331,-82.47469825,-82.4749962,-82.47521659,-82.4754295,-82.47572404,-82.47587171,-82.47611215,-82.47632382,-82.47643257,-82.47635164,-82.4761401,-82.47548023,-82.47505584,-82.47477361,-82.47440687,-82.4741164,-82.47365929,-82.47327792,-82.47298211,-82.47268365,-82.47239254,-82.47173907,-82.47139002,-82.47105513,-82.47064626,-82.47034264,-82.4702929,-82.4693749,-82.46894599,-82.46860062,-82.46838238,-82.46822599,-82.46822814,-82.46829293,-82.46846864,-82.46870737,-82.46880548,-82.46883756,-82.46860385,-82.46837682,-82.46834269,-82.46827275,-82.46835874,-82.46858174,-82.46869374,-82.4688502,-82.46891353,-82.46878012,-82.46838514,-82.46817146,-82.46796536,-82.46767904,-82.46737748,-82.46681176,-82.46593998,-82.4651727,-82.46448545,-82.46369261,-82.46299147,-82.46253578,-82.46211513,-82.46177866,-82.46147165,-82.46135057,-82.4612782,-82.46093655,-82.46073866,-82.46049164,-82.46008499,-82.45962203,-82.45884373,-82.45806568,-82.45700982,-82.45564762,-82.45483425,-82.45421515,-82.4534295,-82.4528669,-82.45232575,-82.45189556,-82.45129336,-82.45085941,-82.44992868,-82.44952905,-82.44908252,-82.44878014,-82.4484652,-82.44819077,-82.44778587,-82.44733097,-82.44679064,-82.44607603,-82.44448993,-82.44387359,-82.44334028,-82.44258531,-82.44160923,-82.44064548,-82.44007748,-82.43988414,-82.43953135,-82.43873271,-82.43811784,-82.43788952,-82.43756475,-82.43712368,-82.43680216,-82.43605999,-82.4357457,-82.43540319,-82.43531994,-82.43492461,-82.4345158,-82.43423923,-82.43402286,-82.43372433,-82.4333331,-82.43305678,-82.43290585,-82.43259109,-82.4320324,-82.43149961,-82.43085646,-82.43018532,-82.4293013,-82.4284003,-82.42740812,-82.42557418,-82.42493296,-82.42402889,-82.42338622,-82.42264272,-82.42147417,-82.4204837,-82.41992883,-82.4196297,-82.41937466,-82.41928949,-82.4192144,-82.41924925,-82.41926087,-82.41924106,-82.41927081,-82.41933575,-82.41937065,-82.41931303,-82.41936791,-82.41939222,-82.41931124,-82.41921742,-82.41913574,-82.41901874,-82.41895188,-82.41898062,-82.41904573,-82.41903908,-82.4184715,-82.41819685,-82.41786609,-82.41776376,-82.41755953,-82.41729087,-82.41704873,-82.41683499,-82.41642641,-82.41606577,-82.41556733,-82.41520563,-82.41487327,-82.41443573,-82.41408396,-82.41368099,-82.41311714,-82.41281344,-82.41238159,-82.41184647,-82.41145761,-82.41104744,-82.41063708,-82.4101867,-82.40990064,-82.40967299,-82.40907134,-82.40865628,-82.4084125,-82.40814372,-82.4079354,-82.40777774,-82.40757905,-82.40751258,-82.4075976,-82.40774681,-82.40798499,-82.40838217,-82.40864238,-82.40899076,-82.40929831,-82.4097082,-82.41054197,-82.41152864,-82.41309221,-82.41412105,-82.41478908,-82.41544194,-82.41618462,-82.41692743,-82.41781769,-82.41879207,-82.41909799,-82.41949401,-82.42009186,-82.42107993,-82.42179654,-82.42226177,-82.42244395,-82.42268092,-82.42302141,-82.42362012,-82.42401175,-82.42419353,-82.42440341,-82.42454503,-82.42465889,-82.424674,-82.42462305,-82.42448764,-82.4242069,-82.42390962,-82.42344654,-82.42287407,-82.42227184,-82.42195908,-82.42131018,-82.42094894,-82.42047946,-82.41964182,-82.41926819,-82.41900628,-82.41825836,-82.41767003,-82.41687426,-82.41640298,-82.41584165,-82.41550799,-82.41518347,-82.41490674,-82.41470874,-82.4146618,-82.41479058,-82.41500737,-82.41545709,-82.41620148,-82.41643454,-82.4168337,-82.41734071,-82.41776885,-82.41816157,-82.41879249,-82.41942176,-82.41994782,-82.42035309,-82.42059197,-82.42064358,-82.42068948,-82.42061613,-82.42049307,-82.42022441,-82.41999738,-82.41954613,-82.4189791,-82.41646847,-82.41560157,-82.41516242,-82.41448415,-82.4138177,-82.41373428,-82.41340839,-82.41318045,-82.41293722,-82.41262046,-82.41211886,-82.4118669,-82.4115264,-82.41132354,-82.41110493,-82.4109561,-82.41083507,-82.41072789,-82.41055138,-82.41040349,-82.41023263,-82.41008949,-82.40984363,-82.40951395,-82.40947265,-82.40925292,-82.40909552,-82.40886916,-82.40865668,-82.40840203,-82.40810444,-82.40761568,-82.40698021,-82.40630422,-82.40562848,-82.40528902,-82.4047295,-82.4040745,-82.4035154,-82.40294864,-82.40222419,-82.40152614,-82.40113999,-82.40039227,-82.39998631,-82.39964207,-82.39934615,-82.39920995,-82.39907435,-82.39903137,-82.39898618,-82.3989675,-82.39900518,-82.39892621,-82.39892908,-82.39885601,-82.39868842,-82.39845283,-82.39831253,-82.39821804,-82.39818799,-82.39822697,-82.39840379,-82.39858119,-82.39883414,-82.39915896,-82.39950905,-82.39986006,-82.40010075,-82.40039654,-82.40072817,-82.40112994,-82.40122998,-82.40152108,-82.40169286,-82.40193366,-82.40205372,-82.40220319,-82.40229575,-82.40228038,-82.40220984,-82.40214335,-82.40198665,-82.40167911,-82.40145923,-82.40132248,-82.40063214,-82.400419,-82.4002037,-82.39963561,-82.39923281,-82.39879007,-82.39837483,-82.39776988,-82.39734749,-82.3969008,-82.39662228,-82.39618223,-82.39590357,-82.39546277,-82.39505778,-82.3948064,-82.39453253,-82.39420403,-82.3931932,-82.39247145,-82.39149048,-82.39097009,-82.39053687,-82.39038081,-82.39007926,-82.389869,-82.38972168,-82.38928142,-82.38902547,-82.38857487,-82.38818254,-82.38770411,-82.38722441,-82.38672456,-82.38612361,-82.38553124,-82.38541148,-82.38486862,-82.3842805,-82.38399611,-82.38331547,-82.38309462,-82.38270952,-82.38215106,-82.38157281,-82.38110335,-82.38062727,-82.380243,-82.37998307,-82.37961328,-82.37952056,-82.37934314,-82.37904455,-82.37892595,-82.37862208,-82.37845852,-82.37817867,-82.37813013,-82.37812037,-82.37817121,-82.37810699,-82.37786629,-82.37752464,-82.3773302,-82.37711591,-82.37664095,-82.37616932,-82.37571121,-82.37510079,-82.37478147,-82.37380945,-82.3724242,-82.37043181,-82.36903671,-82.36850007,-82.36788901,-82.36705228,-82.36637412,-82.36575735,-82.36528551,-82.36474097,-82.36388866,-82.36327128,-82.36243439,-82.36193203,-82.36110483,-82.36060103,-82.3599347,-82.35884248,-82.35756628,-82.35565627,-82.35505331,-82.35442106,-82.35359351,-82.35299193,-82.35252554,-82.35172256,-82.35123593,-82.3502529,-82.34944014,-82.34902624,-82.34849516,-82.34805113,-82.34740092,-82.34618766,-82.34504896,-82.34368336,-82.34174075,-82.34121746,-82.34059601,-82.3400865,-82.33975596,-82.3394006,-82.33905935,-82.33890441,-82.33895302,-82.33894022,-82.33910256,-82.33943016,-82.33962147,-82.33954792,-82.33892042,-82.33746537,-82.33651209,-82.33529026,-82.3347348,-82.3344074,-82.33373072,-82.33292006,-82.33239505,-82.33179858,-82.3315394,-82.33126585,-82.33029924,-82.32972029,-82.32891036,-82.32756855,-82.32691341,-82.32623959,-82.32536274,-82.32481555,-82.3242487,-82.32388578,-82.32354573,-82.32298793,-82.3228904,-82.32305816,-82.32352821,-82.3245295,-82.32763651,-82.32913759,-82.32982354,-82.33174268,-82.33230293,-82.33286281,-82.33360478,-82.3340573,-82.33431278,-82.33435282,-82.33398316,-82.33337962,-82.3325416,-82.3316668,-82.33012539,-82.3291184,-82.32851966,-82.32702228,-82.32562323,-82.32366587,-82.32223324,-82.32161881,-82.32109011,-82.32073638,-82.32051048,-82.32034187,-82.32007024,-82.31965393,-82.31840212,-82.31682517,-82.31519661,-82.31372754,-82.31297667,-82.31236319,-82.31198618,-82.31133093,-82.31101436,-82.31079366,-82.31090781,-82.31126819,-82.3118086,-82.31358363,-82.31654194,-82.31730432,-82.31835266,-82.31920363,-82.31995053,-82.32063048,-82.3210045,-82.32117438,-82.321247,-82.32119141,-82.32122173,-82.3211772,-82.32122455,-82.32129448,-82.32163437,-82.32223552,-82.32338403,-82.32481322,-82.32593016,-82.32715433,-82.32774506,-82.32855308,-82.32963064,-82.33077869,-82.3322898,-82.33378287,-82.33403501,-82.33417372,-82.33411982,-82.33379033,-82.33313594,-82.33289647,-82.33249356,-82.33184463,-82.33165921,-82.33142843,-82.33120922,-82.33101745,-82.33082039,-82.33064962,-82.33048601,-82.33030164,-82.33008955,-82.32987188,-82.32965272,-82.32948997,-82.32928494,-82.32904,-82.32888257,-82.32873891,-82.32847124,-82.32830776,-82.32810978,-82.32788903,-82.32762391,-82.32734351,-82.3269995,-82.32670595,-82.32647832,-82.32625302,-82.32607296,-82.32574294,-82.32546046,-82.32514444,-82.32484858,-82.32468379,-82.32438619,-82.32404106,-82.32368276,-82.32335284,-82.3231128,-82.32272843,-82.32232715,-82.32176462,-82.3213596,-82.32107788,-82.32080889,-82.32047801,-82.32021086,-82.31988085,-82.31956606,-82.3193181,-82.31909897,-82.31885414,-82.31867782,-82.31847587,-82.31835079,-82.31834434,-82.31840139,-82.31839958,-82.31826643,-82.31804776,-82.31775227,-82.31731153,-82.3170357,-82.316875,-82.31676719,-82.31661779,-82.31637287,-82.31610471,-82.3157103,-82.31552036,-82.31504097,-82.31476514,-82.3144425,-82.3141745,-82.31381595,-82.31352707,-82.31327225,-82.31303173,-82.31279232,-82.31257443,-82.3124172,-82.31230051,-82.31194063,-82.31166168,-82.31142341,-82.31126926,-82.31114748,-82.3110361,-82.31105381,-82.31104332,-82.31105436,-82.31103818,-82.31107562,-82.31107378,-82.31100347,-82.31093893,-82.31089389,-82.31089159,-82.3108349,-82.31086463,-82.31081953,-82.3108572,-82.31090978,-82.31086395,-82.31079725,-82.31064171,-82.31031435,-82.3100606,-82.30988299,-82.30965788,-82.30933215,-82.30919192,-82.30902254,-82.30892517,-82.30885043,-82.30875744,-82.3086277,-82.30851335,-82.30820812,-82.30789121,-82.30767842,-82.30710144,-82.30659242,-82.30594269,-82.30533826,-82.30454381,-82.30284849,-82.30213281,-82.30155323,-82.3003447,-82.29926839,-82.29813594,-82.29747452,-82.29733863,-82.29716243,-82.29692394,-82.29680219,-82.296375,-82.29630134,-82.29623764,-82.2962428,-82.29623954,-82.29621444,-82.29627202,-82.29639319,-82.29657564,-82.29668921,-82.29692076,-82.29715828,-82.29767994,-82.29803644,-82.29905787,-82.29928701,-82.29950911,-82.29969728,-82.29978897,-82.2999367,-82.30009018,-82.30025657,-82.30046539,-82.30076516,-82.30095843,-82.30128605,-82.30148143,-82.3018147,-82.30196999,-82.30213763,-82.30221585,-82.30231542,-82.30235847,-82.30243838,-82.30251953,-82.30252151,-82.30255263,-82.30257851,-82.30256769,-82.30251124,-82.30240315,-82.3023176,-82.30221389,-82.30214231,-82.30197324,-82.30190052,-82.30171793,-82.30167051,-82.30160455,-82.3015601,-82.30155522,-82.30151949,-82.30129204,-82.30110741,-82.30091014,-82.30059066,-82.29986807,-82.29956685,-82.2993686,-82.29915775,-82.29891292,-82.29873493,-82.2986208,-82.29843028,-82.29827326,-82.29808293,-82.29791453,-82.29774382,-82.29758693,-82.2973415,-82.29711332,-82.29679064,-82.2966122,-82.29629609,-82.2960922,-82.29598289,-82.29588089,-82.29584839,-82.29587186,-82.29592401,-82.29605885,-82.29619994,-82.29628553,-82.29633538,-82.2964278,-82.29654144,-82.29668102,-82.29682835,-82.29698328,-82.29710337,-82.29725768,-82.2974957,-82.29792092,-82.29899544,-82.29933162,-82.29954713,-82.29977007,-82.29993771,-82.30020248,-82.30041882,-82.30060787,-82.30080991,-82.301144,-82.30128475,-82.30147517,-82.30168489,-82.30183096,-82.30193842,-82.30202909,-82.30217737,-82.30240709,-82.30263238,-82.30275879,-82.30291359,-82.30305998,-82.30348795,-82.30392093,-82.30406769,-82.30415211,-82.30423031,-82.30433007,-82.3044365,-82.30449478,-82.3045465,-82.30455654,-82.30454623,-82.30452696,-82.3045297,-82.30447801,-82.30431408,-82.30409658,-82.30385012,-82.30376758,-82.30360404,-82.30324522,-82.30299075,-82.30276385,-82.30241147,-82.30134243,-82.30009419,-82.29985733,-82.29957322,-82.29932263,-82.2990514,-82.29877258,-82.29827269,-82.29784222,-82.29763948,-82.29718042,-82.29693111,-82.29662772,-82.29630107,-82.29600233,-82.29577436,-82.29548454,-82.29526466,-82.29503201,-82.29479996,-82.29462514,-82.29449761,-82.29447067,-82.2944958,-82.29454156,-82.29451914,-82.29453053,-82.2945613,-82.29458076,-82.29460449,-82.29460662,-82.29458354,-82.29455837,-82.29450072,-82.29442082,-82.29436967,-82.29433115,-82.29427078,-82.29424588,-82.29424778,-82.2942716,-82.29430209,-82.29431074,-82.2943119,-82.29443704,-82.29454929,-82.29475992,-82.2948797,-82.29494522,-82.29496693,-82.29499222,-82.29493358,-82.29488785,-82.29479604,-82.29470208,-82.29456071,-82.29442611,-82.29426981,-82.29398233,-82.29373007,-82.29296515,-82.29162219,-82.29125869,-82.2908668,-82.29061858,-82.29038367,-82.29023185,-82.29009333,-82.28999747,-82.28982492,-82.28962535,-82.28939963,-82.28899011,-82.28879052,-82.2885925,-82.28828407,-82.28811898,-82.28788295,-82.28756252,-82.28726542,-82.28713173,-82.28694184,-82.28675122,-82.28654717,-82.28603871,-82.28567228,-82.28553939,-82.28542333,-82.28535186,-82.28495576,-82.28480196,-82.28467959,-82.28450132,-82.28420113,-82.28391583,-82.28345632,-82.28313252,-82.28293312,-82.28274637,-82.28248605,-82.2823151,-82.28218473,-82.28202236,-82.28170263,-82.28125065,-82.2806358,-82.28040273,-82.28019473,-82.27990664,-82.27973889,-82.27967742,-82.27962564,-82.27954651,-82.27941903,-82.27934574,-82.27922378,-82.27900809,-82.27890179,-82.27870482,-82.27853452,-82.27836608,-82.27816097,-82.27803857,-82.27782008,-82.27769556,-82.27724888,-82.27704343,-82.27679,-82.2765767,-82.27618461,-82.27588245,-82.2756921,-82.27547334,-82.27515852,-82.27504331,-82.27476489,-82.27462972,-82.27446735,-82.27431903,-82.27411568,-82.27396732,-82.27382686,-82.27370018,-82.273579,-82.27345176,-82.27333792,-82.2732429,-82.273183,-82.27293508,-82.27291998,-82.27257099,-82.27203017,-82.27185177,-82.27131222,-82.2711281,-82.27090147,-82.27069509,-82.27043604,-82.27020895,-82.26983231,-82.26950997,-82.2692966,-82.26888377,-82.26860948,-82.26833391,-82.26778613,-82.26747752,-82.26712708,-82.26679113,-82.26648138,-82.26625572,-82.26599602,-82.26576838,-82.26554202,-82.26524807,-82.26502298,-82.2647907,-82.26455112,-82.26435236,-82.26414748,-82.26394959,-82.26374471,-82.26350544,-82.26334204,-82.26309004,-82.26288544,-82.26258554,-82.26235262,-82.26199087,-82.26180746,-82.2615895,-82.26135808,-82.26104995,-82.26082407,-82.26064,-82.26039994,-82.26024309,-82.26005949,-82.25994293,-82.25978577,-82.25964354,-82.25945123,-82.25923179,-82.25880827,-82.25849881,-82.25837551,-82.25806823,-82.25787555,-82.25757193,-82.25709925,-82.25683564,-82.2565137,-82.25621584,-82.25596131,-82.2554845,-82.25516838,-82.25488499,-82.2545403,-82.25417427,-82.25387808,-82.25351972,-82.25323484,-82.25290109,-82.25263856,-82.25226062,-82.25190107,-82.251647,-82.25134773,-82.25104934,-82.25074037,-82.25041967,-82.24998232,-82.2498637,-82.24862616,-82.2480524,-82.24773473,-82.2473042,-82.2469116,-82.24610154,-82.24534553,-82.24444246,-82.24372202,-82.24089371,-82.24040969,-82.23997347,-82.23957644,-82.237542,-82.2372286,-82.2367364,-82.23642716,-82.23606574,-82.23438401,-82.23417244,-82.23415826,-82.23418296,-82.2342271,-82.2342726,-82.23430849,-82.2343108,-82.23427057,-82.23417033,-82.23402677,-82.23378859,-82.23363886,-82.23344233,-82.23319015,-82.2329907,-82.23279162,-82.23261433,-82.23242069,-82.23217324,-82.23198695,-82.23183364,-82.23164721,-82.23147518,-82.23125324,-82.23102441,-82.23071575,-82.23046161,-82.23008452,-82.22980982,-82.22974847,-82.22933655,-82.22889786,-82.22868663,-82.22852157,-82.22822787,-82.22794897,-82.22764916,-82.22738235,-82.22709698,-82.22686333,-82.22663852,-82.22640582,-82.22615555,-82.22601222,-82.22592652,-82.22584619,-82.22576253,-82.22567587,-82.22561752,-82.22560794,-82.22561512,-82.22559894,-82.22563158,-82.22566555,-82.22567437,-82.22567315,-82.22561478,-82.22564405,-82.22560111,-82.22559883,-82.2255334,-82.22546767,-82.22540247,-82.22533781,-82.2252319,-82.22512063,-82.22499426,-82.22486844,-82.22480378,-82.22471948,-82.22461463,-82.22451554,-82.22436266,-82.22424174,-82.22415501,-82.22397708,-82.22355434,-82.22332318,-82.22302819,-82.2227742,-82.22247271,-82.22213481,-82.22177139,-82.22144147,-82.22102318,-82.22065851,-82.22034234,-82.22000701,-82.21972453,-82.21938732,-82.2192036,-82.21892854,-82.2186756,-82.21838719,-82.21807919,-82.21773095,-82.21751214,-82.21729379,-82.21702851,-82.21684788,-82.21672744,-82.2166843,-82.21666733,-82.21669127,-82.21676525,-82.21684444,-82.21694395,-82.21705226,-82.21718736,-82.21735065,-82.21743679,-82.21760976,-82.21780269,-82.2180133,-82.21829855,-82.21838403,-82.21844839,-82.21859815,-82.21870471,-82.21881045,-82.2189017,-82.21902885,-82.21914167,-82.21928776,-82.21935965,-82.2195556,-82.21972459,-82.21985935,-82.22006199,-82.22022431,-82.22037269,-82.22047929,-82.22050295,-82.2204312,-82.22030401,-82.22017857,-82.21972291,-82.21934556,-82.21879258,-82.21859701,-82.21840021,-82.2181591,-82.21790158,-82.21671166,-82.21505604,-82.21470816,-82.2145955,-82.21458603,-82.21468193,-82.21541894,-82.21569235,-82.21595081,-82.21595315,-82.21536337,-82.21449892,-82.21344319,-82.21272391,-82.21227195,-82.21125515,-82.21056271,-82.20972354,-82.20925208,-82.20872117,-82.20771174,-82.20716238,-82.20688902,-82.20663186,-82.20638881,-82.20606831,-82.20586227,-82.20563285,-82.20485377,-82.20376827,-82.20289109,-82.20269762,-82.20263989,-82.2027376,-82.20268298,-82.20254599,-82.20233417,-82.20197682,-82.20139733,-82.20088979,-82.20046844,-82.19968349,-82.1991145,-82.19787469,-82.19743906,-82.19691512,-82.19602775,-82.19456888,-82.19361832,-82.19303189,-82.19267967,-82.19225543,-82.1914311,-82.18853125,-82.18809163,-82.18722765,-82.18652967,-82.18617816,-82.18601577,-82.18592911,-82.18592918,-82.18622429,-82.18640202,-82.18670037,-82.18668148,-82.18669932,-82.18682887,-82.18766338,-82.18768237,-82.18782124,-82.18821056,-82.18847282,-82.18930722,-82.18980902,-82.19014138,-82.1902887,-82.19026666,-82.19074847,-82.19116923,-82.19120672,-82.19111578,-82.1907558,-82.1899663,-82.18874353,-82.18686957,-82.18580579,-82.18441049,-82.1826625,-82.17962455,-82.17871377,-82.17766305,-82.17691981,-82.17645219,-82.17612022,-82.17583973,-82.17545378,-82.17507511,-82.17487655,-82.17464998,-82.17474939,-82.17520246,-82.17638089,-82.17702316,-82.17741612,-82.17765233,-82.17763575,-82.17746731,-82.1763144,-82.17472418,-82.17449284,-82.17248418,-82.17233221,-82.17225489,-82.172412,-82.17257967,-82.17310678,-82.1750423,-82.17607237,-82.17679773,-82.17749373,-82.17840936,-82.17968387,-82.18024379,-82.18085732,-82.18169077,-82.18186626,-82.18227915,-82.1826209,-82.18271581,-82.18253204,-82.18217945,-82.18157675,-82.18130284,-82.18119825,-82.18105513,-82.18077845,-82.18008186,-82.17899374,-82.17847226,-82.17818394,-82.17730572,-82.17698564,-82.17672623,-82.17603274,-82.17516217,-82.1745286,-82.1732814,-82.17260259,-82.17226681,-82.17152623,-82.17030798,-82.16962669,-82.16897454,-82.16752945,-82.16668902,-82.16610929,-82.16583414,-82.16533901,-82.16491905,-82.16424619,-82.16412977,-82.16415618,-82.16434966,-82.16484758,-82.16565969,-82.16632992,-82.16692797,-82.16755676,-82.16818893,-82.16882128,-82.16919799,-82.16943031,-82.16949403,-82.16961385,-82.16933858,-82.16893812,-82.16878942,-82.16875045,-82.16882578,-82.16877478,-82.16853438,-82.16798767,-82.16727641,-82.1664772,-82.16581532,-82.16522785,-82.16432828,-82.16367164,-82.1622073,-82.15974854,-82.15878812,-82.15788578,-82.15733661,-82.15705681,-82.15668302,-82.15628785,-82.15611286,-82.15626003,-82.15675345,-82.1568499,-82.15710019,-82.15716509,-82.15701939,-82.15689698,-82.15703317,-82.15728659,-82.15747912,-82.1576297,-82.15770046,-82.15763571,-82.15757327,-82.15748281,-82.15717486,-82.15685122,-82.1562969,-82.15521885,-82.1532988,-82.15089118,-82.15048654,-82.14881797,-82.14838223,-82.14806508,-82.14752886,-82.14706445,-82.1467875,-82.14646172,-82.14612853,-82.14585112,-82.14559591,-82.14522026,-82.14492847,-82.14387798,-82.14313327,-82.14247774,-82.14222307,-82.14174066,-82.14114309,-82.14055158,-82.13986546,-82.13882684,-82.13793546,-82.1372049,-82.13615603,-82.13411838,-82.13372771,-82.13338124,-82.13265215,-82.13228378,-82.13128813,-82.13038747,-82.12985939,-82.12931628,-82.12906581,-82.12860588,-82.1276664,-82.12734032,-82.12710262,-82.1267971,-82.12664647,-82.12646144,-82.12654323,-82.12650242,-82.12648452,-82.12649131,-82.12634358,-82.12580362,-82.12568219,-82.12486819,-82.12468478,-82.12442156,-82.12445407,-82.12501089,-82.12624029,-82.1268527,-82.12817521,-82.1291207,-82.1300277,-82.13097637,-82.13198688,-82.1328515,-82.1340958,-82.1354611,-82.13715738,-82.13849987,-82.13992141,-82.14070527,-82.14176382,-82.14282357,-82.14357248,-82.1441783,-82.14446079,-82.14472092,-82.14491392,-82.14480151,-82.14481252,-82.14463506,-82.14438352,-82.14371174,-82.14237049,-82.13946349,-82.13861884,-82.13775189,-82.13611035,-82.1351301,-82.13473962,-82.13442436,-82.13406843,-82.13387916,-82.13374512,-82.13355917,-82.13352643,-82.13368439,-82.13393997,-82.13461714,-82.13490368,-82.135205,-82.13532426,-82.13426967,-82.13423094,-82.13419053,-82.13411082,-82.13382846,-82.13324677,-82.13208536,-82.13142385,-82.13047244,-82.12787043,-82.12713886,-82.12636354,-82.12548205,-82.12485749,-82.12458624,-82.12439352,-82.12419422,-82.12393899,-82.12370395,-82.1234144,-82.12312562,-82.12294781,-82.12276256,-82.12260634,-82.12242117,-82.12221577,-82.1221825,-82.12204679,-82.12188908,-82.12183668,-82.12173457,-82.12164548,-82.12147439,-82.12124948,-82.12114711,-82.12112771,-82.12106046,-82.12105371,-82.12104339,-82.12099618,-82.12099764,-82.1209449,-82.12089163,-82.12083011,-82.12072158,-82.12055619,-82.1204069,-82.12018,-82.11996165,-82.11973557,-82.11959945,-82.11943453,-82.11938794,-82.11851922,-82.11799732,-82.11730374,-82.11637413,-82.11431937,-82.11188316,-82.11066729,-82.10996039,-82.10841182,-82.10741917,-82.10633914,-82.1059143,-82.10544977,-82.104808,-82.10386242,-82.10312779,-82.10249052,-82.1020783,-82.10196021,-82.10217701,-82.10272875,-82.1041333,-82.10497916,-82.10535456,-82.10531631,-82.10478,-82.10402629,-82.10314372,-82.10103983,-82.1000284,-82.09942329,-82.09830482,-82.09721116,-82.09603571,-82.09481231,-82.09343986,-82.09218766,-82.0913703,-82.09079698,-82.09018963,-82.08963887,-82.08903209,-82.08859228,-82.08836675,-82.08813619,-82.08756916,-82.08692985,-82.08469105,-82.08352191,-82.08207755,-82.08109035,-82.08031013,-82.07700352,-82.0756511,-82.07517949,-82.07467294,-82.07443318,-82.07410578,-82.07392318,-82.07377418,-82.07334396,-82.07320604,-82.07279685,-82.07265818,-82.0726039,-82.07253961,-82.07254715,-82.07254762,-82.07253685,-82.07249554,-82.07243617,-82.0723223,-82.07220398,-82.07202936,-82.07187062,-82.07170237,-82.07144542,-82.07116255,-82.07077454,-82.0700462,-82.06947963,-82.06905009,-82.06893114,-82.06877893,-82.06861802,-82.06848552,-82.06829806,-82.06785236,-82.06756684,-82.06738705,-82.06719107,-82.06701687,-82.06684204,-82.06657709,-82.06639007,-82.06603523,-82.06574386,-82.06554173,-82.06528453,-82.06507579,-82.06492256,-82.06465764,-82.06444749,-82.06428704,-82.06402193,-82.06392466,-82.06391048,-82.06380562,-82.06374911,-82.06376215,-82.06375827,-82.06377109,-82.06389909,-82.06404825,-82.06414265,-82.06425933,-82.06440875,-82.06457117,-82.06480293,-82.06495981,-82.06511544,-82.06513406,-82.06518717,-82.06514933,-82.06483468,-82.06399865,-82.06285698,-82.06170437,-82.06096209,-82.06065805,-82.06061776,-82.06055285,-82.06008743,-82.05950122,-82.05903968,-82.05870298,-82.05822003,-82.05778606,-82.05733802,-82.05683353,-82.05635271,-82.05593053,-82.05548268,-82.05501911,-82.05461928,-82.05426543,-82.05396291,-82.05355427,-82.05326381,-82.05297927,-82.05272482,-82.05242056,-82.0519453,-82.05170203,-82.05119174,-82.0506997,-82.05029941,-82.04999247,-82.04955837,-82.04935634,-82.0491834,-82.04898788,-82.04884299,-82.04872312,-82.04863344,-82.04852051,-82.04853138,-82.0485234,-82.04852865,-82.04856809,-82.04862221,-82.04866065,-82.04872776,-82.04880132,-82.04886178,-82.04887249,-82.04885846,-82.04885602,-82.04887362,-82.04888519,-82.0487935,-82.04871664,-82.04849532,-82.04822949,-82.04802182,-82.0478282,-82.04760546,-82.04733658,-82.04694934,-82.04664589,-82.04630035,-82.04615503,-82.04597526,-82.04568645,-82.04543022,-82.04506646,-82.04488786,-82.04465523,-82.04442766,-82.04429097,-82.0441405,-82.04406548,-82.04395019,-82.0437791,-82.04358787,-82.04345881,-82.04334248,-82.04330243,-82.04320724,-82.04316674,-82.04307761,-82.04301161,-82.0429374,-82.04284962,-82.04274702,-82.04251435,-82.0424458,-82.04229539,-82.04217435,-82.04205031,-82.04199816,-82.04197822,-82.04201368,-82.0420446,-82.04201139,-82.04196315,-82.04192483,-82.04193228,-82.04195963,-82.04205811,-82.04212944,-82.04224086,-82.04234595,-82.04254285,-82.04280175,-82.0429205,-82.04298461,-82.04312434,-82.04329334,-82.04348877,-82.04364248,-82.04386635,-82.04434943,-82.04453952,-82.04457463,-82.0446682,-82.04475536,-82.044792,-82.04481355,-82.04485195,-82.04495892,-82.04502284,-82.04498317,-82.04495869,-82.04500097,-82.04505135,-82.04499635,-82.04488265,-82.04477489,-82.04470053,-82.04456335,-82.04441287,-82.04416707,-82.04387724,-82.04363025,-82.04330776,-82.0429834,-82.04262532,-82.04232114,-82.04205982,-82.04170055,-82.04137667,-82.04096377,-82.04050043,-82.04018956,-82.03969845,-82.03949104,-82.03924071,-82.03910861,-82.03892994,-82.0387059,-82.03857399,-82.03832134,-82.03830549,-82.03818689,-82.03817027,-82.03810071,-82.0380842,-82.03801346,-82.03794031,-82.03793258,-82.03788977,-82.03778421,-82.03762364,-82.03750522,-82.03737928,-82.03715688,-82.03701684,-82.03679542,-82.03654645,-82.03621321,-82.03590326,-82.03551477,-82.03514932,-82.03487218,-82.03460992,-82.03430572,-82.03400114,-82.03369844,-82.03350358,-82.0332823,-82.03306715,-82.03289422,-82.03267154,-82.03249112,-82.03227463,-82.03206009,-82.03187961,-82.03169296,-82.0313859,-82.03123374,-82.03091404,-82.03059519,-82.03022099,-82.0300412,-82.02989521,-82.02978304,-82.02963802,-82.02947198,-82.02929945,-82.02911849,-82.02888448,-82.02866326,-82.02848365,-82.02840051,-82.02830348,-82.02821306,-82.02800786,-82.02762797,-82.02736601,-82.02721435,-82.02693853,-82.02660055,-82.02631091,-82.02611163,-82.02588435,-82.02558113,-82.02514962,-82.02488105,-82.02470927,-82.02457135,-82.02431785,-82.02419289,-82.02393195,-82.023747,-82.0236032,-82.02341633,-82.02327287,-82.02314809,-82.02288051,-82.02270034,-82.02254234,-82.02242697,-82.02227619,-82.0220139,-82.0216563,-82.02137471,-82.02116916,-82.02070084,-82.02039801,-82.02011452,-82.01997711,-82.01978305,-82.01961701,-82.01945824,-82.01925783,-82.01907072,-82.01889161,-82.01873335,-82.01854578,-82.01842916,-82.01820603,-82.01804779,-82.01789343,-82.01778975,-82.01753294,-82.01743456,-82.0173447,-82.01732223,-82.01725954,-82.01722415,-82.01716761,-82.01704152,-82.01696559,-82.01687472,-82.01681586,-82.01673178,-82.01670139,-82.01667255,-82.0166914,-82.01669718,-82.01670349,-82.01661176,-82.01657696,-82.01656819,-82.01660128,-82.0165594,-82.01646768,-82.01638973,-82.01618754,-82.01600611,-82.01583969,-82.01565329,-82.01545935,-82.01526735,-82.01507384,-82.01485282,-82.01473547,-82.01440327,-82.01403692,-82.01384316,-82.01351247,-82.01322141,-82.01306891,-82.01284807,-82.01266884,-82.01249564,-82.01231696,-82.0121659,-82.01201998,-82.01184822,-82.01168156,-82.01151562,-82.01139094,-82.01116927,-82.01094899,-82.0107904,-82.01050067,-82.01012279,-82.00996494,-82.00983295,-82.00968071,-82.00946003,-82.00922639,-82.00905373,-82.00882469,-82.00865891,-82.00850815,-82.00831462,-82.00810198,-82.00797173,-82.00777202,-82.00747038,-82.00721516,-82.00698921,-82.00681607,-82.00666493,-82.00643913,-82.0061302,-82.00595158,-82.00575226,-82.00557329,-82.0054028,-82.00524533,-82.00504815,-82.00496508,-82.00477416,-82.00476193,-82.00472025,-82.00458476,-82.00452975,-82.00443382,-82.00435264,-82.00423574,-82.00415241,-82.00404344,-82.00394889,-82.00385235,-82.00369517,-82.0035317,-82.00341479,-82.00329232,-82.00312127,-82.00296896,-82.00279071,-82.00264629,-82.00252419,-82.00242132,-82.00234701,-82.00224404,-82.00214922,-82.00207437,-82.00202595,-82.00187632,-82.00178761,-82.00165654,-82.00158851,-82.00150139,-82.00133627,-82.00113807,-82.00101522,-82.00072017,-82.00058371,-82.00041249,-82.000268,-82.00010999,-81.99996017,-81.99981862,-81.99948082,-81.99883302,-81.99842563,-81.99821314,-81.99795792,-81.99773663,-81.99755613,-81.99719733,-81.9970865,-81.99696919,-81.99693284,-81.996871,-81.99681469,-81.99677957,-81.99676543,-81.99673791,-81.99672943,-81.99663218,-81.99651418,-81.99645149,-81.99648541,-81.99652648,-81.99658693,-81.99669126,-81.99685532,-81.99686865,-81.9968878,-81.99694213,-81.996976,-81.99696134,-81.99697451,-81.99700952,-81.9969668,-81.99692501,-81.99686805,-81.99678443,-81.99671436,-81.99655582,-81.99639559,-81.99620897,-81.99595331,-81.99565658,-81.99536627,-81.99513048,-81.99495015,-81.99455635,-81.99436325,-81.99414885,-81.99397694,-81.99384561,-81.99368088,-81.99345893,-81.99325391,-81.99299117,-81.99283292,-81.9927368,-81.99248797,-81.99224058,-81.99206816,-81.99169786,-81.99096213,-81.99047139,-81.98992032,-81.98963115,-81.98910626,-81.98849476,-81.98750649,-81.98668267,-81.98547403,-81.98289326,-81.98242688,-81.9817305,-81.98124385,-81.98043959,-81.9796395,-81.9789605,-81.97845486,-81.97771157,-81.97700241,-81.97603713,-81.97555879,-81.97423713,-81.97393988,-81.97348209,-81.97323925,-81.97190744,-81.97068063,-81.97009196,-81.969647,-81.9688411,-81.96808658,-81.96758136,-81.96718039,-81.96664652,-81.96632869,-81.96609437,-81.96576779,-81.96530342,-81.96506001,-81.96487185,-81.96478819,-81.9648968,-81.96514431,-81.96561431,-81.96586499,-81.96623364,-81.96665561,-81.96743054,-81.96770888,-81.96798401,-81.97991514,-81.99982956,-82.02236741,-82.05106892,-82.06202007,-82.09226023,-82.10103595,-82.11005967,-82.11877262,-82.12340485,-82.14299451,-82.15165588,-82.16127298,-82.1734132,-82.17897352,-82.19306229,-82.21227364,-82.23180681,-82.26041176,-82.26720799,-82.27022247,-82.27507875,-82.28219643,-82.30100976,-82.31447027,-82.315604,-82.31575466,-82.31587869,-82.31600837,-82.31612357,-82.3162479,-82.31628053,-82.31627286,-82.31632002,-82.31642277,-82.316471,-82.31659995,-82.31676514,-82.31690254,-82.31708066,-82.31721183,-82.31728997,-82.3173415,-82.31738066,-82.3173727,-82.3173793,-82.31732955,-82.31728817,-82.31726056,-82.31728117,-82.31730739,-82.3173471,-82.31741575,-82.31742702,-82.31745825,-82.3174611,-82.31746659,-82.31748078,-82.31750216,-82.31750962,-82.31753575,-82.31762105,-82.31768966,-82.31775696,-82.31783875,-82.31794876,-82.31800907,-82.31812008,-82.31825645,-82.31838666,-82.31850912,-82.31867996,-82.3187826,-82.3188572,-82.31888459,-82.31888538,-82.3188971,-82.31886703,-82.31890101,-82.31890744,-82.31896123,-82.3190288,-82.31913796,-82.31918491,-82.31933616,-82.31943794,-82.31954845,-82.31965005,-82.31980007,-82.31993744,-82.32013688,-82.32031563,-82.32047927,-82.32061544,-82.32084268,-82.32104771,-82.32128762,-82.32148097,-82.32159668,-82.32182322,-82.32194045,-82.32216572,-82.32229632,-82.32246107,-82.32262473,-82.32278999,-82.3229203,-82.32302272,-82.32312474,-82.32325672,-82.32373624,-82.32380682,-82.32385583,-82.32389272,-82.3239714,-82.3241136,-82.32422969,-82.32434773,-82.32447117,-82.32457133,-82.324718,-82.32491672,-82.32496286,-82.32516402,-82.32537117,-82.32550926,-82.325756,-82.32590122,-82.32595971,-82.3262423,-82.32645332,-82.32668613,-82.3268151,-82.3270833,-82.3271952,-82.32734779,-82.32756498,-82.32784717,-82.3280807,-82.32828735,-82.32850733,-82.3288767,-82.32919423,-82.32956422,-82.32983172,-82.33006028,-82.33030564,-82.33068494,-82.33097967,-82.331096,-82.33131681,-82.3315227,-82.33168752,-82.33181709,-82.33194127,-82.33201471,-82.33208953,-82.33222084,-82.3323298,-82.33253571,-82.33274177,-82.33306521,-82.33333756,-82.33353338,-82.33364639,-82.33382905,-82.33401394,-82.33420244,-82.33453293,-82.3350021,-82.33551703,-82.33572798,-82.335807,-82.33590102,-82.33603122,-82.33621024,-82.33636633,-82.3365385,-82.3365851,-82.33663366,-82.33659019,-82.33644842,-82.33641873,-82.33639209,-82.33640727,-82.3364628,-82.33660274,-82.33674591,-82.3369138,-82.33730579,-82.33771924,-82.33800133,-82.33835274,-82.33871677,-82.33900602,-82.33926782,-82.33942335,-82.33964949,-82.33974692,-82.33980209,-82.33985086,-82.33988222,-82.33987271,-82.33992783,-82.3400942,-82.34028033,-82.34041128,-82.34061522,-82.34079192,-82.34097376,-82.34121995,-82.34148696,-82.34159621,-82.34174872,-82.34179578,-82.3419489,-82.34216516,-82.34233554,-82.34248108,-82.34257812,-82.34267386,-82.34279181,-82.34291461,-82.34338915,-82.34361044,-82.34380072,-82.34381226,-82.34383286,-82.34381641,-82.34380991,-82.34376669,-82.34376747,-82.34376282,-82.34376846,-82.34380449,-82.34377002,-82.3437279,-82.34358951,-82.34343599,-82.34338071,-82.34331817,-82.34324878,-82.34312511,-82.34298683,-82.34293068,-82.34287401,-82.34278917,-82.34279595,-82.34279963,-82.34284405,-82.34293753,-82.34293024,-82.34281944,-82.34278248,-82.34276273,-82.34267847,-82.34258067,-82.34249094,-82.34241418,-82.34237328,-82.34230883,-82.34224661,-82.34223982,-82.34227591,-82.34224711,-82.3420291,-82.34199076,-82.34198475,-82.34208928,-82.34244189,-82.34269048,-82.3431011,-82.3433277,-82.34385654,-82.34424879,-82.34475214,-82.34507435,-82.34525427,-82.34546393,-82.3456759,-82.34587496,-82.34630247,-82.34652877,-82.34683411,-82.34707149,-82.34724258,-82.34735984,-82.34766892,-82.34805398,-82.34830736,-82.3485133,-82.34867773,-82.34886239,-82.34897169,-82.34911593,-82.34923153,-82.3492518,-82.34922445,-82.34917546,-82.34907728,-82.34898721,-82.34886874,-82.3488489,-82.34881367,-82.34881993,-82.34888014,-82.34894088,-82.34901632,-82.34908425,-82.34916654,-82.34926955,-82.34928966,-82.34924888,-82.34911833,-82.34890269,-82.34884108,-82.34879902,-82.34878537,-82.3488108,-82.34888488,-82.34896125,-82.34899405,-82.34898675,-82.34892493,-82.34880684,-82.34867544,-82.34858632,-82.34857849,-82.34864061,-82.34875665,-82.34889405,-82.34909873,-82.34926414,-82.3494904,-82.34974501,-82.34999206,-82.35021203,-82.3504512,-82.35062955,-82.35086902,-82.35101938,-82.35119164,-82.35134181,-82.3514733,-82.3515881,-82.35176757,-82.35196597,-82.35215758,-82.3523571,-82.35341666,-82.3544706,-82.3548349,-82.35532956,-82.35553637,-82.35574731,-82.35595984,-82.35622789,-82.35659815,-82.35681137,-82.35701795,-82.35715484,-82.3574718,-82.35766408,-82.35797983,-82.35822015,-82.35874197,-82.3587764,-82.35915494,-82.35942314,-82.35975396,-82.35999362,-82.36032965,-82.36051763,-82.36098701,-82.36119042,-82.36137955,-82.36166395,-82.36227262,-82.36245444,-82.3627075,-82.36301018,-82.36321794,-82.36348378,-82.36369702,-82.36391095,-82.36403562,-82.36429544,-82.36450896,-82.36474103,-82.36497471,-82.36511901,-82.36526711,-82.3653863,-82.36546863,-82.36559225,-82.36581094,-82.36595568,-82.3661339,-82.36634443,-82.36656371,-82.36671455,-82.3668871,-82.36708492,-82.36725015,-82.36758797,-82.36780052,-82.36794279,-82.36814967,-82.36830054,-82.36846424,-82.36853296,-82.36898773,-82.36928997,-82.36950255,-82.36971968,-82.36992946,-82.37012264,-82.37027376,-82.37046584,-82.37058253,-82.37074601,-82.37090442,-82.37100132,-82.37109247,-82.37125226,-82.37149147,-82.37188608,-82.37209793,-82.37217409,-82.37239791,-82.37268821,-82.37284736,-82.37305741,-82.37324877,-82.37346096,-82.37358855,-82.37387348,-82.37438782,-82.37474486,-82.37486779,-82.37495843,-82.37605277,-82.37659665,-82.37680957,-82.3769405,-82.37707143,-82.37716692,-82.37733197,-82.37745624,-82.37757402,-82.37772564,-82.3778956,-82.37818639,-82.37836539,-82.37851027,-82.37873066,-82.37895709,-82.37924695,-82.37953787,-82.3796449,-82.37976269,-82.3800105,-82.38016327,-82.38108943,-82.38166749,-82.38196835,-82.38248919,-82.38261367,-82.38279859,-82.38310162,-82.38351381,-82.38366931,-82.38378488,-82.38391575,-82.38410753,-82.3842982,-82.38447519,-82.38459483,-82.38471316,-82.38484278,-82.38487689,-82.38500761,-82.38507263,-82.38513702,-82.38545236,-82.38562855,-82.38578373,-82.3867673,-82.38740178,-82.38825437,-82.38845153,-82.38852031,-82.38866879,-82.38888199,-82.38915626,-82.38956393,-82.38983116,-82.39014884,-82.39043677,-82.39058748,-82.3907806,-82.39114277,-82.39132493,-82.39139641,-82.39152409,-82.39161705,-82.39187063,-82.39195672,-82.39226424,-82.39246381,-82.39262133,-82.39268996,-82.39286044,-82.39296722,-82.39305959,-82.39320893,-82.39349047,-82.39357371,-82.3938281,-82.39416629,-82.39442895,-82.39463592,-82.39484349,-82.39503766,-82.39529927,-82.39543335,-82.39586914,-82.39603948,-82.39615932,-82.39629008,-82.39637153,-82.39660837,-82.39681108,-82.39695098,-82.39727584,-82.39741189,-82.39761837,-82.39818076,-82.39821686,-82.39826383,-82.39837841,-82.39862259,-82.39889071,-82.39914421,-82.39933891,-82.39956641,-82.39972162,-82.39986742,-82.40000596,-82.40014296,-82.40019181,-82.40031483,-82.40048775,-82.4006007,-82.40074193,-82.40081785,-82.40090295,-82.4010031,-82.40111412,-82.40130864,-82.40147831,-82.40162634,-82.40206695,-82.40264779,-82.40281513,-82.40344002,-82.40365035,-82.40385472,-82.4042737,-82.40448638,-82.4048351,-82.40506197,-82.40516587,-82.40536476,-82.40549631,-82.40566772,-82.40575391,-82.40629647,-82.40687618,-82.4072021,-82.40736835,-82.40754532,-82.40767288,-82.40778613,-82.40816618,-82.408563,-82.40992599,-82.41032683,-82.4104433,-82.41078439,-82.41098682,-82.41126665,-82.41153078,-82.41173392,-82.4119681,-82.412141,-82.41235691,-82.41250049,-82.41268802,-82.41273193,-82.41293,-82.41352537,-82.41409035,-82.41468362,-82.41523546,-82.41579291,-82.41663589,-82.41723162,-82.4175487,-82.41780206,-82.41820204,-82.41861438,-82.41877968,-82.41933383,-82.42041014,-82.42098913,-82.42239673,-82.42286536,-82.42326322,-82.42387786,-82.42540106,-82.42630304,-82.42650061,-82.42779772,-82.42837122,-82.42943307,-82.43033065,-82.43319177,-82.4336758,-82.43397674,-82.43459248,-82.43475177,-82.43495624,-82.4357026,-82.43599182,-82.43610094,-82.43619071,-82.43641292,-82.43654885,-82.43664456,-82.43685285,-82.43702852,-82.43732972,-82.43769424,-82.43788399,-82.43831483,-82.43852781,-82.43871262,-82.4388925,-82.43917444,-82.43935912,-82.43949449,-82.43964647,-82.4397666,-82.43989284,-82.43995982,-82.44003621,-82.44006352,-82.44008347,-82.44014784,-82.4402422,-82.44034009,-82.44055876,-82.4408771,-82.44119923,-82.44146713,-82.44171486,-82.44200423,-82.4423282,-82.4425231,-82.44264096,-82.44271127,-82.44272917,-82.44273653,-82.44275832,-82.44281189,-82.44293719,-82.44307336,-82.4431712,-82.44333834,-82.44354594,-82.44381408,-82.44393602,-82.44418631,-82.44446613,-82.44466598,-82.44478771,-82.44491703,-82.44505307,-82.44513284,-82.44521231,-82.44529925,-82.44536875,-82.44544629,-82.44559269,-82.44566196,-82.4457462,-82.4459112,-82.44603526,-82.44618793,-82.44652121,-82.44669559,-82.44675242,-82.44692621,-82.44705188,-82.44712327,-82.44715733,-82.44718473,-82.44725229,-82.44742762,-82.44770963,-82.4478797,-82.44799694,-82.44819981,-82.44830623,-82.44843065,-82.44853487,-82.44863652,-82.4487825,-82.44893527,-82.44907132,-82.44964215,-82.45020444,-82.45049411,-82.450644,-82.45079196,-82.45090306,-82.45107773,-82.45130588,-82.45143771,-82.45165112,-82.45184638,-82.45206815,-82.4522512,-82.45235688,-82.45239664,-82.45238404,-82.45235435,-82.45237174,-82.45241018,-82.45250211,-82.45265693,-82.45278474,-82.45291692,-82.45311689,-82.45331882,-82.45357979,-82.453741,-82.45385896,-82.45399056,-82.45421888,-82.45462699,-82.45470306,-82.45481974,-82.45502726,-82.45519455,-82.45528585,-82.45535739,-82.45538136,-82.45537369,-82.45543582,-82.45553663,-82.45573448,-82.4559682,-82.45620337,-82.45633249,-82.45650981,-82.45665106,-82.4567515,-82.45688952,-82.45705743,-82.45711329,-82.45721261,-82.45736118,-82.45767922,-82.45781391,-82.45804109,-82.45824221,-82.45847145,-82.45863201,-82.4587798,-82.45892747,-82.45908232,-82.4591771,-82.45922797,-82.45946927,-82.45966975,-82.4599553,-82.46022743,-82.4604881,-82.46120088,-82.46135208,-82.46181932,-82.46208059,-82.46245709,-82.46265825,-82.46285696,-82.46303138,-82.46316908,-82.46323671,-82.46349212,-82.46379236,-82.46400914,-82.46416387,-82.4643175,-82.46450861,-82.4646582,-82.46480762,-82.46505341,-82.46539934,-82.46576233,-82.46663192,-82.46713169,-82.46744997,-82.46759721,-82.46777181,-82.46797557,-82.46826325,-82.4684358,-82.4686538,-82.46879667,-82.46890056,-82.46909439,-82.46930097,-82.46954764,-82.46967052,-82.46992668,-82.4701449,-82.47019445,-82.47034344,-82.47044904,-82.47058421,-82.470749,-82.47090759,-82.47105674,-82.47123581,-82.47140684,-82.47153647,-82.47177925,-82.47200927,-82.47247286,-82.47282578,-82.47338285,-82.47381163,-82.47400076,-82.47423708,-82.47449121,-82.47476193,-82.47505365,-82.47529599,-82.47552282,-82.47583873,-82.47610319,-82.4763251,-82.47663148,-82.47702409,-82.4772963,-82.47751015,-82.4776758,-82.47796713,-82.47807306,-82.47835808,-82.47853906,-82.47870509,-82.47891365,-82.47921252,-82.47948115,-82.47966314,-82.4797936,-82.47997412,-82.48003089,-82.48022695,-82.48056161,-82.4806835,-82.48082137,-82.4810787,-82.48153076,-82.48188812,-82.48210518,-82.48233297,-82.48275864,-82.48306137,-82.48338288,-82.48361337,-82.48377402,-82.48400859,-82.48426922,-82.48454917,-82.48469353,-82.48485105,-82.48515333,-82.48538414,-82.48556982,-82.48579817,-82.48600453,-82.48617008,-82.48630061,-82.48643869,-82.48669387,-82.48683204,-82.48692216,-82.48713815,-82.48729263,-82.48736246,-82.48737418,-82.48733562,-82.48728562,-82.48724069,-82.48708926,-82.48693832,-82.48680258,-82.48666678,-82.48663796,-82.48658057,-82.48657659,-82.48666836,-82.48685767,-82.48696233,-82.48706777,-82.48713771,-82.48717421,-82.48723871,-82.48724476,-82.48725316,-82.48732419,-82.48743717,-82.48779576,-82.48829286,-82.48851927,-82.4887529,-82.48897105,-82.48932142,-82.48946301,-82.48959425,-82.48969305,-82.48983564,-82.48992725,-82.49037132,-82.49053363,-82.49066078,-82.49074697,-82.49087412,-82.49099962,-82.49111334,-82.4912654,-82.49144617,-82.4916153,-82.49237386,-82.49259397,-82.49301183,-82.49346728,-82.49388567,-82.49420555,-82.49439101,-82.49465399,-82.49478347,-82.49497395,-82.49516536,-82.49523148,-82.49533944,-82.4954368,-82.49579892,-82.49587023,-82.495913,-82.49606585,-82.49630891,-82.49665002,-82.49689127,-82.4969961,-82.49713067,-82.49734583,-82.4976757,-82.49798125,-82.49840853,-82.4986295,-82.49874657,-82.49891305,-82.49905348,-82.49922157,-82.49930658,-82.49953777,-82.49971257,-82.49980204,-82.49987926,-82.50022778,-82.50051398,-82.50118112,-82.50158039,-82.50209829,-82.50283157,-82.50319515,-82.50380949,-82.50411356,-82.50414334,-82.50435429,-82.50493753,-82.50596375,-82.50625406,-82.50668394,-82.50769564,-82.5080572,-82.50846698,-82.50850791,-82.50848427,-82.50831624,-82.50826726,-82.50836868,-82.50855242,-82.50898883,-82.50919813,-82.5093051,-82.50928982,-82.5093343,-82.50962357,-82.51007167,-82.51064953,-82.51120207,-82.51226819,-82.51260346,-82.51289858,-82.51352396,-82.51374407,-82.51394219,-82.5141201,-82.51414783,-82.51435543,-82.51455678,-82.51486881,-82.51496336,-82.51508869,-82.5151977,-82.51529814,-82.51532,-82.51543539,-82.51548792,-82.51558364,-82.51567162,-82.51582461,-82.51600796,-82.51627737,-82.51644156,-82.51657129,-82.51671223,-82.51678528,-82.51684696],"lat":[37.21466575,37.298604,37.920187,38.169264,38.05007432,38.04904352,38.04849774,38.04768069,38.04698673,38.04652326,38.04560782,38.04519134,38.04465119,38.04410527,38.04275772,38.04112235,38.04021881,38.03935241,38.03836718,38.03739956,38.03577982,38.03536606,38.03450818,38.03355016,38.0319928,38.03071144,38.02990769,38.02929212,38.02894465,38.02805614,38.02770146,38.02745796,38.02697096,38.02589755,38.02511961,38.02411726,38.02169282,38.02116177,38.02066625,38.01950565,38.0183286,38.01750323,38.01654525,38.0157918,38.01538585,38.0148965,38.0136372,38.01268069,38.01189628,38.0114245,38.0101821,38.00926546,38.00837546,38.00808621,38.00783318,38.00754078,38.00729071,38.00694657,38.00685264,38.00660722,38.00628255,38.00556413,38.00509905,38.00474856,38.00447088,38.00390212,38.00215286,38.00178376,38.00142469,38.00113094,38.00093611,38.00060361,38.000088,37.99922822,37.99909479,37.999264,37.99960156,38.00013657,38.00118533,38.00145664,38.00150717,38.00130666,38.00095476,37.99945466,37.99903005,37.99889649,37.9987766,37.99883211,37.99887862,37.99887031,37.99890751,37.99895178,37.99900893,37.99900823,37.99901797,37.99897956,37.99891197,37.99875164,37.99838977,37.99758648,37.99661793,37.99564693,37.99506703,37.99426497,37.99357362,37.99255585,37.99202693,37.99145312,37.99051113,37.98986558,37.9873946,37.98621489,37.98500145,37.98451698,37.98409286,37.98384409,37.9836351,37.98358724,37.98369483,37.98401869,37.98451131,37.98516483,37.98565917,37.98606925,37.9862545,37.9864861,37.98664975,37.98670184,37.98671036,37.98668702,37.98652019,37.98620835,37.98601163,37.98582342,37.98554679,37.98532943,37.98510865,37.98471978,37.98431864,37.98387649,37.98334906,37.98287265,37.98177963,37.98110967,37.98064663,37.98000938,37.97902069,37.97842421,37.97783148,37.97744112,37.9769934,37.97674237,37.97644158,37.97620727,37.97583093,37.97554213,37.97493811,37.9744987,37.97407155,37.97365297,37.97322989,37.97295997,37.97285841,37.97286132,37.97293922,37.97309741,37.97321812,37.9733067,37.97331487,37.97323527,37.97313773,37.97307153,37.97295751,37.97289187,37.97266492,37.97240289,37.97213696,37.9718115,37.97157695,37.97138257,37.97092082,37.97030314,37.96981708,37.96926259,37.96875398,37.96834082,37.96759373,37.96663972,37.96609883,37.96560863,37.965001,37.96459095,37.96405631,37.96357761,37.9633433,37.96319135,37.96295944,37.96281071,37.9623619,37.96216361,37.96196252,37.96184241,37.96162467,37.96151453,37.96135517,37.9612237,37.96111814,37.96081285,37.96061444,37.96051715,37.96029064,37.96008447,37.95980411,37.95940243,37.95905534,37.95873927,37.95828462,37.95757372,37.95663093,37.95599421,37.95563113,37.95488678,37.954403,37.95397151,37.95362541,37.95285143,37.95253459,37.95228347,37.95176701,37.95151575,37.95128006,37.95092155,37.95028351,37.94976084,37.9487795,37.94840652,37.94810076,37.94782849,37.94752503,37.94739807,37.94713623,37.94670595,37.94631748,37.94604689,37.94580584,37.94549785,37.94542577,37.94522809,37.94519,37.94520921,37.94529852,37.94552595,37.94567488,37.94578661,37.94595489,37.94618193,37.94657467,37.94677527,37.94677272,37.94666717,37.9464811,37.94624452,37.94595192,37.94565993,37.94548755,37.94501542,37.94416988,37.94357627,37.94315912,37.94255728,37.94202009,37.94139817,37.9405744,37.94026145,37.94006838,37.93983057,37.93958159,37.93936045,37.93921679,37.93906572,37.93884608,37.93856238,37.93821716,37.93733481,37.93668986,37.9362935,37.93595139,37.93574265,37.9357417,37.93573889,37.9359055,37.93634702,37.93645958,37.93651965,37.936791,37.93696156,37.93705322,37.93702599,37.93682086,37.9364587,37.93632686,37.93575943,37.9354391,37.93521581,37.93469783,37.93429939,37.93379404,37.93345292,37.93305209,37.93207922,37.93097228,37.93016496,37.93004053,37.92938025,37.92885732,37.92839409,37.92797994,37.92762138,37.92727805,37.92695396,37.92685637,37.92679243,37.92685246,37.92695687,37.92707812,37.92704721,37.92706573,37.92702101,37.92703596,37.9270561,37.92703754,37.92697513,37.92689772,37.92687095,37.92678814,37.9266679,37.9264271,37.92616861,37.92561838,37.92530732,37.92496221,37.9246464,37.9243085,37.92396122,37.92368987,37.92345686,37.92320227,37.92238021,37.92184805,37.92139032,37.92112261,37.92053777,37.91999166,37.91956046,37.91902993,37.91844646,37.91772353,37.91718885,37.91693086,37.9166782,37.91644833,37.91626643,37.91615332,37.91602079,37.91579459,37.91550409,37.91523132,37.91470091,37.91421635,37.91379412,37.91316495,37.9127778,37.91221245,37.91184279,37.91136223,37.91085899,37.90964099,37.90940101,37.90915766,37.908876,37.90842462,37.90785786,37.90736482,37.90669568,37.9059005,37.90528159,37.90480817,37.90442524,37.90415726,37.90395593,37.9035779,37.9031448,37.9027253,37.90243865,37.90212426,37.90116679,37.90056964,37.90024785,37.89995459,37.89981733,37.8996466,37.89948761,37.89919699,37.89904579,37.89896282,37.89899615,37.89908603,37.89936596,37.89978735,37.90033816,37.90040408,37.90178688,37.90238703,37.90290092,37.90320743,37.90356652,37.90402548,37.9045192,37.90505311,37.90557501,37.90613763,37.9064312,37.90689047,37.90727848,37.90734417,37.90798116,37.90846652,37.90914604,37.90974889,37.91016957,37.91085219,37.9117876,37.91298846,37.91354313,37.91392691,37.91420404,37.91439487,37.9145577,37.91481716,37.91494962,37.91499915,37.9150045,37.91482005,37.91453664,37.91412916,37.91354409,37.91296046,37.91256414,37.91212448,37.91087693,37.91049149,37.9100408,37.90959247,37.90931779,37.90919298,37.90914029,37.90897821,37.90895728,37.90895718,37.90887937,37.90888004,37.90881829,37.90870282,37.90855061,37.90817169,37.90783043,37.90692569,37.90655446,37.90614553,37.90573309,37.90525231,37.90479595,37.90427142,37.90385743,37.90364717,37.90341686,37.90278357,37.90248942,37.90223945,37.90194414,37.90159108,37.90123422,37.90102315,37.90092562,37.90074947,37.9004618,37.90021298,37.90004648,37.8997859,37.8994135,37.89900458,37.89799851,37.89754518,37.89694677,37.89683034,37.89601816,37.89523721,37.89440633,37.89381695,37.89301297,37.89180035,37.89104164,37.89073442,37.89033053,37.88987646,37.88954062,37.88919131,37.88876909,37.88837868,37.88809633,37.8878368,37.88740505,37.8873217,37.88714705,37.88694201,37.88666546,37.88601203,37.88544605,37.88487045,37.88431439,37.88347109,37.88278372,37.88121793,37.88025157,37.879378,37.87827889,37.87738798,37.87663889,37.87624827,37.87571902,37.87507748,37.87461444,37.87421987,37.87387848,37.87369069,37.87347851,37.87326915,37.87305422,37.87284037,37.87271854,37.87162043,37.8712135,37.87082215,37.87059321,37.87027891,37.86997112,37.86972792,37.86962496,37.86946019,37.86934692,37.8692153,37.86916453,37.86911595,37.86901766,37.8689768,37.8689571,37.86893014,37.86890021,37.86890582,37.86897104,37.86902323,37.86904729,37.86907688,37.86903181,37.86899415,37.86893067,37.86870473,37.8685308,37.86844006,37.8682902,37.86814277,37.86798784,37.8677053,37.86729737,37.86702635,37.86679357,37.86650972,37.86619671,37.86600005,37.86577018,37.86563808,37.86554185,37.86542535,37.86533792,37.86521878,37.86511949,37.86506423,37.8649996,37.86494298,37.86488228,37.86474126,37.86458125,37.86448483,37.864428,37.86435288,37.86415687,37.86406306,37.86396907,37.86392611,37.86385934,37.86368757,37.86344069,37.86317212,37.86302199,37.86278677,37.86249054,37.86219352,37.86189651,37.86144919,37.8610297,37.86052777,37.86024112,37.85993949,37.85956605,37.85927693,37.85917946,37.85896465,37.85878882,37.85855435,37.85814313,37.85793538,37.85778574,37.8574994,37.85728758,37.85698612,37.85686903,37.85671162,37.85665405,37.8565109,37.85630656,37.85596977,37.85574312,37.85542387,37.85503567,37.8544005,37.85338006,37.8530157,37.85246363,37.8516728,37.85105491,37.85057002,37.84987406,37.84921447,37.84861378,37.84815666,37.84785496,37.84763177,37.84695841,37.84666298,37.84643278,37.84616545,37.84601271,37.84579727,37.84565343,37.84530334,37.84523825,37.84521618,37.84519421,37.84514163,37.84514682,37.84503523,37.84494081,37.84480064,37.8444866,37.84389114,37.84340789,37.84254357,37.84193252,37.84147837,37.84101316,37.84050884,37.8400043,37.83938505,37.83893839,37.83846292,37.83814217,37.83775455,37.83738105,37.8372988,37.8369841,37.8367481,37.83635213,37.83606919,37.8358387,37.8355609,37.83518153,37.83467501,37.83422088,37.83376266,37.83356888,37.83314625,37.83268856,37.8323333,37.83195578,37.83154009,37.83111624,37.83092116,37.83052264,37.83019164,37.82991249,37.82952279,37.82912523,37.8287146,37.82809644,37.82756339,37.82667522,37.82622628,37.8256744,37.8253818,37.82496886,37.82434576,37.82339093,37.82277751,37.82226436,37.82181762,37.82137765,37.82099315,37.82051797,37.82001949,37.81946469,37.8190013,37.81855512,37.81806043,37.81741891,37.81678804,37.81602521,37.81565084,37.81495972,37.81434013,37.81368809,37.81333219,37.81293728,37.8125765,37.81203534,37.81129818,37.81089096,37.81056495,37.81001277,37.80966638,37.80951203,37.80907535,37.80896348,37.80893675,37.80886075,37.80876825,37.80863881,37.80851428,37.80852658,37.80855991,37.80878558,37.80893219,37.8092027,37.8093899,37.8097916,37.81016752,37.81047777,37.81067401,37.81104388,37.81232795,37.81323212,37.81446757,37.81509577,37.81559659,37.81582915,37.81621354,37.81645764,37.81664988,37.81711413,37.81741047,37.81772189,37.81800817,37.81828169,37.81831744,37.81822548,37.81791835,37.81749882,37.817314,37.81656744,37.81578802,37.8153759,37.81438559,37.81413811,37.81380832,37.81336703,37.81286748,37.81248854,37.81206471,37.81160368,37.81118816,37.81056124,37.81031469,37.80979847,37.8090534,37.80880538,37.80817626,37.80766111,37.80631474,37.80563112,37.80512379,37.8047295,37.80431545,37.80389629,37.80326127,37.80296782,37.80261471,37.80220672,37.80203036,37.8020124,37.80203131,37.80200703,37.80194202,37.80182457,37.80157701,37.80125865,37.80083716,37.80026375,37.79951211,37.79908038,37.79817768,37.7967948,37.79586602,37.7950019,37.79464403,37.79435268,37.79424269,37.79419411,37.79415418,37.79410951,37.79391104,37.79379796,37.79353534,37.79335443,37.79294387,37.79226106,37.79163563,37.79108349,37.79020559,37.78960339,37.78827437,37.78723334,37.78693349,37.78677314,37.78667647,37.78658346,37.78646109,37.78644731,37.78636174,37.78617214,37.78606834,37.7860276,37.78562466,37.78517052,37.78408909,37.78307817,37.7823447,37.78151615,37.77991493,37.77920987,37.77863746,37.77805488,37.7770957,37.77602354,37.77491426,37.77445102,37.7742183,37.77421178,37.77425519,37.77421286,37.77407246,37.77415752,37.774404,37.7745806,37.77484402,37.77545624,37.77569706,37.7757662,37.77569485,37.77578571,37.77590557,37.77581199,37.7757026,37.77534459,37.77499459,37.77418839,37.77344796,37.77308645,37.77267845,37.77220916,37.77163371,37.77040439,37.76976171,37.76941479,37.76834041,37.76797817,37.76773679,37.76714964,37.76657052,37.7660606,37.76564333,37.7650637,37.76441409,37.76389436,37.7635714,37.76265467,37.76219591,37.76211804,37.76227229,37.76261973,37.7633617,37.76391012,37.76432025,37.76448617,37.76449923,37.76459364,37.7647962,37.76483085,37.76481187,37.76519235,37.76545543,37.765524,37.76532577,37.76513135,37.76477399,37.7643198,37.76277396,37.76250909,37.76208146,37.76167393,37.76133062,37.76109772,37.76074291,37.76040134,37.76019761,37.75972392,37.75921284,37.75855788,37.75759181,37.75687789,37.75608723,37.75377116,37.75280286,37.75259694,37.75217654,37.75186323,37.75158701,37.75127195,37.75096037,37.7506366,37.7502317,37.74995439,37.74956615,37.74921579,37.7484327,37.74720812,37.74599315,37.74467262,37.74362913,37.74322694,37.74277064,37.74225104,37.741553,37.74084763,37.7405995,37.74029301,37.73976914,37.73962497,37.73945129,37.73928964,37.73913359,37.73901724,37.73885492,37.73868868,37.73852188,37.73835562,37.73819882,37.73803644,37.73788812,37.73768222,37.737515,37.73740254,37.73729115,37.73712947,37.7370354,37.73690111,37.73677309,37.73659431,37.73640955,37.7362518,37.73608932,37.73599887,37.73589337,37.7358593,37.73577409,37.73570883,37.73565771,37.73558311,37.73555425,37.73551742,37.73549701,37.73546255,37.73537526,37.73529132,37.73518392,37.73510691,37.73488643,37.73477774,37.7347331,37.7346751,37.734572,37.73447557,37.73435256,37.73423823,37.73410045,37.7339381,37.7336946,37.7335053,37.73319573,37.73268362,37.73192698,37.73054488,37.72909034,37.72826744,37.72764683,37.72726577,37.7267706,37.7260033,37.72510337,37.72377074,37.72262719,37.72178937,37.7210807,37.72078133,37.72062526,37.7204436,37.72034762,37.72021726,37.72013931,37.72007522,37.72000084,37.71993632,37.71986403,37.71972855,37.71961636,37.71949974,37.71940495,37.71907082,37.71874455,37.7184737,37.71821772,37.71800806,37.71765027,37.71738076,37.71712143,37.71680913,37.71659911,37.71631439,37.71605531,37.71566985,37.71538349,37.71508673,37.71480084,37.71453054,37.71429987,37.71408005,37.71382695,37.71366224,37.71345818,37.71325495,37.71302775,37.71281482,37.71265345,37.71256789,37.71242387,37.71224871,37.71213951,37.7119889,37.71184996,37.711709,37.71155033,37.71129092,37.71077295,37.70926346,37.70841523,37.70800634,37.70754424,37.70707171,37.70672353,37.70655533,37.70645576,37.70649876,37.70645436,37.70630954,37.70581576,37.70523241,37.70429561,37.70364336,37.70347793,37.7032886,37.70309884,37.70296539,37.70218534,37.70179981,37.70145919,37.70116255,37.70089862,37.70069516,37.70053542,37.70031086,37.7000318,37.69985855,37.6996407,37.69944294,37.6991216,37.69893076,37.69842485,37.69833266,37.69824232,37.69810148,37.69802589,37.69789896,37.69775921,37.69767754,37.6975758,37.69741422,37.69731202,37.69718282,37.69703535,37.6968239,37.69664503,37.69649882,37.69637813,37.6962086,37.69598996,37.6957587,37.69550071,37.69530974,37.69504957,37.69475354,37.69453953,37.69419224,37.69398779,37.69374545,37.69359541,37.69342359,37.6931919,37.69300836,37.69258456,37.69226573,37.69201098,37.69181316,37.69162132,37.69131178,37.6908475,37.69065379,37.69047005,37.69016455,37.68960189,37.68942332,37.68926222,37.68907394,37.68887297,37.68872141,37.68857307,37.68839434,37.68820077,37.6880179,37.6878467,37.68765065,37.68752993,37.6873784,37.6873037,37.68721448,37.68718449,37.68706596,37.68695208,37.68684854,37.68673631,37.68654365,37.68637396,37.68618244,37.68588615,37.68567796,37.68558636,37.68540647,37.68524082,37.68506555,37.684891,37.68473457,37.68452683,37.6843249,37.68416661,37.6839936,37.68366187,37.68290332,37.68266448,37.68252863,37.68238265,37.68223572,37.68200782,37.68185409,37.6816934,37.68155022,37.68131819,37.68115469,37.68096444,37.68076793,37.68060044,37.68040915,37.68028199,37.68014137,37.67992345,37.6796889,37.67953662,37.67936736,37.67923077,37.67880225,37.67841443,37.67830744,37.67820271,37.67808202,37.67783208,37.67766275,37.67737658,37.67715617,37.67701428,37.67682709,37.67664651,37.67647548,37.6762864,37.67609331,37.67593785,37.67580902,37.67576261,37.67567327,37.67558237,37.67555151,37.67556068,37.67559152,37.6759387,37.67645855,37.67653199,37.67665553,37.67676499,37.67690955,37.6770676,37.67725904,37.67748066,37.67763893,37.6778817,37.67796232,37.67801725,37.67812581,37.67819262,37.6782244,37.67821039,37.67814276,37.67805276,37.67787482,37.6776196,37.67742554,37.67729829,37.67705652,37.67670468,37.6763323,37.67605163,37.67583682,37.67556735,37.67535436,37.6751607,37.67491404,37.67463845,37.67439077,37.67417612,37.67397603,37.67380109,37.67361175,37.67344198,37.67332727,37.67311226,37.6729036,37.67286604,37.67276714,37.672641,37.67253296,37.67239077,37.67219504,37.67197504,37.67184307,37.67163426,37.67140922,37.6711667,37.67083627,37.67066379,37.67043289,37.67024276,37.67007258,37.66986072,37.6697468,37.6693924,37.66901615,37.66895255,37.6688668,37.66881411,37.66877355,37.668767,37.66880892,37.66882534,37.66881818,37.66876076,37.66867101,37.66840674,37.66831362,37.66822188,37.66812622,37.66810831,37.6681281,37.66836328,37.66869115,37.66896273,37.66932677,37.6696702,37.67000427,37.67093402,37.67189404,37.67211204,37.67237524,37.67257306,37.673761,37.67453632,37.67486044,37.67523579,37.67562886,37.67581353,37.67606514,37.67607482,37.67605108,37.67601462,37.67592518,37.67584593,37.6757507,37.67556175,37.67519093,37.67461483,37.67378865,37.67341211,37.67305484,37.67267187,37.67237695,37.67225079,37.67206376,37.67190749,37.67167559,37.67150578,37.67130498,37.67100113,37.67079666,37.67053662,37.6703701,37.67016519,37.67000384,37.66988613,37.66978968,37.66971728,37.66962024,37.66953997,37.66945139,37.66939286,37.66927405,37.66915587,37.66904924,37.66892112,37.66870363,37.66857997,37.6682873,37.66814654,37.66795965,37.66773127,37.66745934,37.66719453,37.66694578,37.66669744,37.66644306,37.66624417,37.66605525,37.665869,37.66570849,37.66528203,37.66530838,37.66486242,37.66423076,37.66405441,37.66361651,37.66348739,37.66338174,37.66328559,37.66313297,37.66307196,37.66295772,37.66282791,37.66277005,37.66269048,37.66260468,37.66254636,37.6623219,37.66223099,37.66211063,37.66197565,37.66187301,37.66178316,37.6616806,37.6615969,37.66148437,37.66137531,37.66123606,37.6611027,37.66097813,37.66086708,37.66073935,37.66060981,37.66048212,37.66031492,37.66018707,37.65995834,37.65986222,37.65962248,37.65946711,37.65918223,37.65900364,37.65885974,37.65870855,37.65853453,37.65841237,37.65828391,37.65813246,37.65804946,37.65794713,37.65785296,37.6577404,37.65763998,37.65754014,37.6574278,37.65720838,37.65706314,37.65700173,37.65688335,37.65686458,37.65677788,37.6566848,37.65666732,37.65664056,37.65661523,37.65662483,37.65661953,37.6566156,37.65661337,37.6565928,37.65658464,37.65659708,37.65660979,37.65663907,37.65667931,37.656712,37.65677287,37.65684669,37.65691948,37.65699717,37.65709336,37.65726763,37.65747104,37.65776446,37.65786053,37.65859178,37.65902813,37.65920419,37.65931568,37.65954032,37.65992909,37.6602356,37.66054392,37.66079176,37.66153101,37.6615674,37.66150695,37.66131299,37.65985111,37.65971666,37.65978027,37.65977649,37.65963377,37.65791716,37.65756658,37.65724669,37.65705365,37.65688867,37.65673066,37.65659292,37.65647139,37.6563726,37.6562631,37.65615573,37.65596583,37.65584316,37.65568613,37.65553633,37.65544104,37.65533816,37.65528612,37.65525077,37.65522069,37.65521303,37.65523866,37.65526949,37.65528907,37.65530305,37.65531818,37.65526561,37.65519409,37.6550914,37.65497873,37.65496039,37.65479068,37.65463801,37.65449906,37.65440893,37.65422352,37.65405438,37.65385367,37.65368489,37.6535066,37.65336697,37.65322486,37.65310243,37.65291283,37.65272851,37.65256791,37.65240266,37.65212668,37.65194955,37.65168602,37.65148782,37.65111905,37.65087744,37.65059052,37.65031254,37.64979957,37.64949787,37.64898013,37.6488367,37.64854067,37.64836949,37.64810989,37.64792925,37.6477019,37.64749867,37.64721721,37.64694041,37.64665419,37.64639206,37.64618878,37.64589079,37.64558738,37.64534462,37.64503427,37.64485129,37.64471265,37.64460216,37.64433317,37.64414346,37.64402329,37.64394968,37.64385679,37.64376622,37.64366873,37.64359216,37.64352116,37.64341192,37.64333783,37.64323021,37.64313716,37.64303356,37.6429724,37.64286861,37.64277303,37.64265993,37.64252352,37.6423605,37.64223712,37.64206838,37.64186868,37.641598,37.6413697,37.64114989,37.64096253,37.64074955,37.64050238,37.64032749,37.64012501,37.63988368,37.63973175,37.63945911,37.63928443,37.63891791,37.63849565,37.63802719,37.63748062,37.63735539,37.63720065,37.63699492,37.63682567,37.63671067,37.6366447,37.63651457,37.63639564,37.63626675,37.63617272,37.63593951,37.63580236,37.63565729,37.63553904,37.6353591,37.63514645,37.63493937,37.63476902,37.63457034,37.6343377,37.63410512,37.6333686,37.63287349,37.63218485,37.63197421,37.63175256,37.63140928,37.63111983,37.62980184,37.62795794,37.62760869,37.6274349,37.62727038,37.62714344,37.62686948,37.62653419,37.62633102,37.62620949,37.62578698,37.62540022,37.62521998,37.62523125,37.62532551,37.6253072,37.62519078,37.62521559,37.62535597,37.62532964,37.62548264,37.62530041,37.62512725,37.62504942,37.62503726,37.62505572,37.62506533,37.62512985,37.62523546,37.62564174,37.62606523,37.62627996,37.62643966,37.62678138,37.62702023,37.62710266,37.6274494,37.62773198,37.6279268,37.62798974,37.62787598,37.62749012,37.62728464,37.62701554,37.62684018,37.62659617,37.62640029,37.6262324,37.62605859,37.62589308,37.62570719,37.62565442,37.62569471,37.6265714,37.6266233,37.6269839,37.62748697,37.62797034,37.62836461,37.62891026,37.62955619,37.63082254,37.63212181,37.63371673,37.63457848,37.63514174,37.63571874,37.63831252,37.63867174,37.63941533,37.63983665,37.64009749,37.64049864,37.64088146,37.64126675,37.64165324,37.64207719,37.64291221,37.64401202,37.64427493,37.64458621,37.64513666,37.64581352,37.64676793,37.64803785,37.64859506,37.64882198,37.64887192,37.64875409,37.64875317,37.64878643,37.64871572,37.64852074,37.64812927,37.64803208,37.64797086,37.64783151,37.6476118,37.64696999,37.64648585,37.64558373,37.64404686,37.64305565,37.64228845,37.64136595,37.64084945,37.64007747,37.63850393,37.63600247,37.63578172,37.63407618,37.63385991,37.63338414,37.63263449,37.63213251,37.63159337,37.63033316,37.62979008,37.62954699,37.62919507,37.62883886,37.6283864,37.62809696,37.62777071,37.62714745,37.62669516,37.62612229,37.62533908,37.62437041,37.62366534,37.62284244,37.62218987,37.62184969,37.62150981,37.62135979,37.62107858,37.62065403,37.62014542,37.61988768,37.61959715,37.61846006,37.61818367,37.61815243,37.61827489,37.6186311,37.61897871,37.61947727,37.6197603,37.61998917,37.6206571,37.62148504,37.62178371,37.62190744,37.62177875,37.62143769,37.62109911,37.62060833,37.62041452,37.62034538,37.62029045,37.61998181,37.61968576,37.61925743,37.61860685,37.61760237,37.61685326,37.61634591,37.61573916,37.61495452,37.61416579,37.61376913,37.61342995,37.61332675,37.61302739,37.61207283,37.61113572,37.61053062,37.6097276,37.60931211,37.60908039,37.60869236,37.60828059,37.60794963,37.60775895,37.60769334,37.6077324,37.60790282,37.60801535,37.60850441,37.60926813,37.60955271,37.6096371,37.60952682,37.60938288,37.6089688,37.60788955,37.60536798,37.60482689,37.60394667,37.603525,37.60299261,37.60261531,37.60198556,37.6014108,37.60023932,37.59878623,37.59801983,37.59740671,37.59697945,37.59631916,37.59514641,37.5939831,37.59313741,37.59272347,37.59236496,37.59201724,37.59161615,37.5913347,37.59120274,37.59081686,37.59072032,37.59077929,37.59125894,37.59182525,37.59212255,37.59235921,37.59249805,37.59266271,37.59272632,37.59299233,37.59316892,37.59388898,37.59428593,37.59448423,37.59467841,37.594902,37.59504371,37.59506192,37.59496385,37.59465766,37.59448386,37.59423527,37.594104,37.59360138,37.59350209,37.59345362,37.59342357,37.59332698,37.59270738,37.59141387,37.59027344,37.58883909,37.58841496,37.58796578,37.58715275,37.58654485,37.58585932,37.58518474,37.58437957,37.58307514,37.5823198,37.58191725,37.58157657,37.58140152,37.58074899,37.5789705,37.57887536,37.57846608,37.5779787,37.57735763,37.57651487,37.57515369,37.57373843,37.57321936,37.57240747,37.5721378,37.57202016,37.57196905,37.57203119,37.57196785,37.57180289,37.57156258,37.57136889,37.57134983,37.57123074,37.57123154,37.57108619,37.57073812,37.57042654,37.56996762,37.56952007,37.56839361,37.56765472,37.56701909,37.56675625,37.56653506,37.56631087,37.56603116,37.56563599,37.56509709,37.56485736,37.56461485,37.56386474,37.56350261,37.56326107,37.5629284,37.56236704,37.56178745,37.56149126,37.56087808,37.56034527,37.55954824,37.55919195,37.55865011,37.55826108,37.55774474,37.55735122,37.5547612,37.55442195,37.55401046,37.55362664,37.5532572,37.55283247,37.55236577,37.55219622,37.55184869,37.55129759,37.5512564,37.55119257,37.55132266,37.55138717,37.55139182,37.55141473,37.55143122,37.55146182,37.55146759,37.55153009,37.55164622,37.55171766,37.55190571,37.55209942,37.55235759,37.55263982,37.55275558,37.55298843,37.55321376,37.55343889,37.55362124,37.55374836,37.55396433,37.55415115,37.55426819,37.55448818,37.55466338,37.55487207,37.55511909,37.55537874,37.555631,37.55586295,37.55603382,37.55619817,37.55636935,37.55654011,37.55673409,37.55696136,37.55715455,37.55733031,37.55750203,37.55766183,37.55769609,37.55844567,37.55898675,37.55922636,37.55924426,37.5591118,37.55876751,37.55874419,37.55886789,37.55929185,37.55953857,37.55970084,37.55991506,37.5601301,37.56019123,37.56011166,37.55995482,37.55953918,37.55893401,37.55842047,37.55783768,37.55714914,37.5559306,37.55512204,37.55426174,37.55342293,37.55306059,37.55287154,37.55277608,37.55280604,37.55280408,37.55296391,37.55345335,37.55382396,37.55424356,37.55451463,37.55455222,37.55477699,37.55493424,37.55514857,37.55545876,37.55584559,37.55610835,37.55613517,37.55608755,37.55596764,37.55559949,37.55540155,37.55518928,37.55519875,37.55522433,37.55528889,37.55553313,37.55589953,37.55591487,37.55585268,37.55569381,37.55558461,37.55543348,37.55535629,37.5552623,37.55488667,37.55474351,37.55415208,37.55374576,37.55355166,37.55335103,37.55309497,37.55266693,37.5526061,37.55225504,37.55198932,37.55174388,37.55148453,37.55121105,37.55103567,37.55087783,37.55069864,37.55055578,37.55037319,37.55002323,37.54978762,37.54950406,37.54936153,37.54915949,37.54895723,37.54877578,37.54855208,37.54803783,37.54770383,37.54750097,37.54727629,37.54703029,37.54676165,37.54636165,37.54613036,37.54583677,37.54562216,37.54538149,37.54506898,37.54482396,37.5445381,37.54424117,37.54391983,37.54364063,37.54327839,37.54315232,37.54312507,37.54287302,37.54269054,37.54242776,37.54215762,37.54186529,37.54154636,37.5411834,37.54088126,37.54061626,37.54031865,37.53996712,37.53950439,37.53919528,37.53887587,37.53850057,37.53816075,37.53777612,37.53719586,37.5367236,37.53618535,37.53590305,37.53587145,37.5359471,37.53595887,37.53598089,37.53614351,37.53630575,37.53639015,37.53649773,37.53652649,37.53661175,37.53666775,37.53674804,37.53680434,37.53679103,37.5367384,37.53665578,37.53657579,37.53650693,37.53641355,37.53630172,37.53620867,37.53610007,37.53604599,37.53598624,37.53600011,37.53592919,37.53584917,37.53561029,37.53543552,37.53525609,37.53503347,37.53489653,37.53476532,37.53456809,37.53439311,37.53420106,37.53402642,37.53369508,37.5334769,37.53322241,37.53294355,37.53270639,37.53248616,37.53212933,37.5317879,37.53148921,37.5312108,37.5308916,37.5306541,37.53028708,37.53003816,37.52973689,37.52946325,37.5292753,37.52904083,37.52876582,37.52857027,37.52843841,37.52830288,37.52822633,37.5281021,37.52799289,37.5279668,37.52794021,37.52794622,37.52795908,37.5280094,37.52817653,37.52829735,37.52846314,37.52866691,37.52881239,37.52902684,37.52914742,37.52934719,37.52959467,37.52986552,37.53003117,37.53021781,37.53039797,37.53057639,37.5307304,37.5309605,37.53117627,37.53141853,37.53172567,37.53201858,37.53311825,37.53331603,37.53349405,37.53374104,37.53397898,37.53419312,37.53438556,37.53464366,37.53506178,37.53524282,37.53541377,37.5356283,37.535755,37.53586444,37.53610461,37.53623127,37.53648831,37.53676927,37.53721458,37.53776773,37.53808622,37.53832256,37.53863483,37.53901809,37.53932115,37.53956168,37.54005529,37.54123464,37.54157598,37.54191035,37.54238742,37.54285472,37.54322763,37.54348736,37.54389402,37.54434471,37.5447233,37.54493095,37.5452834,37.54550804,37.54567455,37.5458769,37.54621893,37.5466148,37.54678974,37.54708362,37.5473317,37.54751907,37.54772295,37.54782991,37.54796263,37.54806368,37.54814787,37.54822482,37.54820485,37.54824363,37.54830002,37.5483076,37.54828811,37.54825695,37.54806757,37.5479689,37.54779812,37.54767781,37.54748798,37.54723968,37.54697785,37.54636854,37.54620316,37.54595065,37.54562784,37.54539541,37.54510422,37.54479279,37.54425379,37.54402886,37.54381513,37.54357886,37.54333807,37.54311718,37.54294278,37.54269728,37.5424592,37.54229688,37.54213302,37.54199738,37.5419147,37.54177937,37.54166677,37.54161679,37.54158094,37.54152115,37.54143381,37.54130881,37.54120161,37.54103651,37.54092183,37.5407906,37.54058353,37.54042939,37.54023767,37.54004188,37.53985405,37.53965298,37.53937389,37.53924191,37.53897411,37.53872413,37.53837278,37.53827501,37.53808895,37.53795141,37.53784853,37.53778758,37.5377512,37.53771177,37.53766381,37.53760043,37.53756792,37.53750618,37.53747904,37.53745764,37.5374195,37.53749333,37.5375544,37.53758394,37.53761295,37.53764138,37.53766995,37.53771996,37.53784744,37.5380082,37.53825079,37.53837488,37.5384622,37.53856224,37.5387294,37.538812,37.53895625,37.53906515,37.53914508,37.5391886,37.53922803,37.53927218,37.53941141,37.53949364,37.53961571,37.53974809,37.53986355,37.54003456,37.54024653,37.54042375,37.54049623,37.54064557,37.5406957,37.54070385,37.54072493,37.54067203,37.54064474,37.54057511,37.5405103,37.54042118,37.54037977,37.54036852,37.54035841,37.54030868,37.54014628,37.53996395,37.53977279,37.53960389,37.53935658,37.53921941,37.53904956,37.53891352,37.53875276,37.53863209,37.53845228,37.5382483,37.53811051,37.53789255,37.53762199,37.53723379,37.53694629,37.53666158,37.53642372,37.53620538,37.53604614,37.5358103,37.53561058,37.53544124,37.53529869,37.53510154,37.53483196,37.53439178,37.53415578,37.53395418,37.53383275,37.53372989,37.53370859,37.53368255,37.5336874,37.53368925,37.53368897,37.53360277,37.53351067,37.53348457,37.53340328,37.5333232,37.53326747,37.53319723,37.53319219,37.53317083,37.53318851,37.53317267,37.53315772,37.53314126,37.53309196,37.5329946,37.53293494,37.53288114,37.53286929,37.5328649,37.5328955,37.53306626,37.5331155,37.53313256,37.53314006,37.53310145,37.53308022,37.5330479,37.53303852,37.5330401,37.53305179,37.53309094,37.53316731,37.53325179,37.53334503,37.53354363,37.53371069,37.53381137,37.53392537,37.53408138,37.53424731,37.5344525,37.53457327,37.53476064,37.53492191,37.53511989,37.5353677,37.53561568,37.53582603,37.53615598,37.53626069,37.53636932,37.53655739,37.53665597,37.53681229,37.53691692,37.53701077,37.53708848,37.53722999,37.53735893,37.53752832,37.53780501,37.53806846,37.53819596,37.53840027,37.53857551,37.53868609,37.53879791,37.53892452,37.5390519,37.53924375,37.53934855,37.53954247,37.53971124,37.53989509,37.540033,37.54029622,37.54041225,37.54058193,37.54073231,37.54088621,37.54121693,37.54151912,37.54169594,37.54196755,37.54220919,37.54238649,37.54247946,37.54260082,37.54269637,37.54276465,37.54285831,37.54307396,37.54324576,37.54331725,37.5433469,37.54331989,37.54327147,37.54323389,37.54317259,37.54306854,37.54300207,37.5428599,37.54274472,37.54261924,37.54255829,37.54241997,37.54221218,37.54208673,37.54189469,37.54173464,37.54154192,37.54134396,37.54117274,37.54098575,37.54071131,37.54058391,37.54034126,37.54015474,37.53999638,37.53984268,37.53975307,37.53957208,37.53935911,37.53916123,37.53895598,37.53873202,37.5386164,37.53844091,37.53829905,37.53820096,37.53810205,37.53803137,37.53797125,37.53788948,37.53780328,37.53777487,37.53777143,37.53774463,37.53780028,37.53787095,37.53795431,37.5380434,37.53810487,37.53821531,37.53834147,37.53839816,37.53854071,37.53868942,37.53878837,37.5391482,37.54004474,37.54097594,37.54204193,37.54243531,37.54277992,37.54296092,37.54297937,37.54288828,37.54279381,37.54212121,37.54209457,37.54214363,37.54224477,37.54268551,37.54314626,37.54360132,37.544075,37.54470798,37.54524729,37.5458319,37.54600683,37.54613123,37.54620615,37.54651985,37.54657665,37.5467316,37.54672225,37.5467239,37.546581,37.54617085,37.54566548,37.54514684,37.54492017,37.54465898,37.54435943,37.54401171,37.54388297,37.54357936,37.54341138,37.54293733,37.54224263,37.54173625,37.54135049,37.54106879,37.54062061,37.54022846,37.53983938,37.53882336,37.53861039,37.53805438,37.52965827,37.51578386,37.49997788,37.48033734,37.47163792,37.4504464,37.4441946,37.4378462,37.43175954,37.42843873,37.41483389,37.40895157,37.40243974,37.39407077,37.39029528,37.38070729,37.36749099,37.35365408,37.33360401,37.32877929,37.32668965,37.32329292,37.31839659,37.3052325,37.29588361,37.29509524,37.29499795,37.29491917,37.29483021,37.29471956,37.29452188,37.29437445,37.2942416,37.29407669,37.29390042,37.29382351,37.29375036,37.29367341,37.29364035,37.29358241,37.29353541,37.29348275,37.29325955,37.29304499,37.2929183,37.29277491,37.29266007,37.2925503,37.29244094,37.29232952,37.29217092,37.29205526,37.29183468,37.2917024,37.29154597,37.29137292,37.29132843,37.2912072,37.29111578,37.29095384,37.29087146,37.29062524,37.29044315,37.29032623,37.29015618,37.2900076,37.28989321,37.28983671,37.28978784,37.2896872,37.28960423,37.2894059,37.28923026,37.28903045,37.28888285,37.28871658,37.28861111,37.28840481,37.28819004,37.28812498,37.28796508,37.28780563,37.28760062,37.28747834,37.28729315,37.2871374,37.28701563,37.28690044,37.28674196,37.2866347,37.28648735,37.28637717,37.28626038,37.28617781,37.28606077,37.28597888,37.28588493,37.28579509,37.28574628,37.28564438,37.28560177,37.28548953,37.28538,37.28527556,37.28512027,37.28500488,37.28490015,37.2848049,37.28475501,37.28469017,37.28428581,37.28417177,37.28407908,37.2839118,37.28380902,37.28355826,37.2834277,37.28325457,37.28311321,37.28302891,37.28298101,37.28292361,37.28292978,37.28296729,37.28298848,37.28301452,37.28299703,37.28298064,37.28298034,37.28293088,37.28294121,37.28292812,37.28292843,37.28289232,37.28288944,37.28290007,37.28288859,37.28284807,37.28281921,37.28277513,37.28274101,37.2826364,37.28257492,37.28253288,37.28251185,37.28244021,37.28237801,37.28228263,37.28219301,37.28216827,37.28215409,37.28212649,37.28198219,37.28189461,37.28181168,37.28167299,37.28154117,37.28145364,37.28140188,37.28141199,37.28134383,37.28134093,37.28132691,37.2812942,37.28126724,37.281184,37.28112825,37.28110422,37.28117365,37.28136806,37.2815769,37.28158995,37.28159086,37.28156547,37.28153905,37.28146042,37.28135643,37.2812392,37.28112373,37.28100216,37.28086279,37.28035296,37.28025042,37.2800064,37.27982477,37.27973915,37.2796498,37.27960173,37.27957916,37.279581,37.27960204,37.27967625,37.27977516,37.27989984,37.28000587,37.28010899,37.28016853,37.28029948,37.28042464,37.28053481,37.28063381,37.2807749,37.28087081,37.28098097,37.28106691,37.28113279,37.28116481,37.28117967,37.28111477,37.2810493,37.28096718,37.28088288,37.28086273,37.28083696,37.28082318,37.28082216,37.28086904,37.28097911,37.28114277,37.28120262,37.28125147,37.2812295,37.28113964,37.28091506,37.28085214,37.28067696,37.28053785,37.28042575,37.2802968,37.28013719,37.27991675,37.27982473,37.27962601,37.27950251,37.27935309,37.27927991,37.27914746,37.27897785,37.27876242,37.27865432,37.27855491,37.27845535,37.27834045,37.27824224,37.27811627,37.27800192,37.27767652,37.27748983,37.27737243,37.27722807,37.27698896,37.27688501,37.27667563,37.27650552,37.27637372,37.27618577,37.27606747,37.27596246,37.27579739,37.27567667,37.27550714,37.27540086,37.27528595,37.27506027,37.27490136,37.27459132,37.27433941,37.27413242,37.27395205,37.2736119,37.27343987,37.27322165,37.27315407,37.27309598,37.27312941,37.27310219,37.27293706,37.2728379,37.27272718,37.27267909,37.27265126,37.2726273,37.27260435,37.27258304,37.27258101,37.27252484,37.27247946,37.27245138,37.27234033,37.27225153,37.27214691,37.27204795,37.27192,37.27178648,37.27167732,37.27151785,37.27141263,37.27125863,37.27116443,37.27105436,37.27088,37.27068827,37.27063341,37.27046335,37.27032615,37.27013755,37.27004934,37.26997801,37.2699223,37.26988962,37.26985552,37.26979086,37.26974227,37.26966495,37.26956656,37.26948509,37.26935264,37.26923748,37.26905615,37.26893945,37.26877403,37.26865816,37.2685542,37.26843904,37.2683511,37.26829232,37.26824776,37.26815549,37.26803844,37.26794424,37.2678727,37.26779552,37.26775015,37.26768942,37.26761163,37.2674725,37.26736212,37.26724538,37.26714202,37.26701845,37.26696374,37.26691861,37.26686804,37.26677428,37.26667042,37.26654236,37.26645334,37.26639843,37.26635892,37.26608536,37.26578421,37.2654856,37.26523269,37.26514666,37.26512051,37.26509782,37.26506303,37.26501263,37.26497351,37.26496782,37.26498277,37.26496999,37.26493714,37.26487553,37.26480832,37.26475203,37.26475096,37.26474343,37.26474502,37.26472922,37.26471352,37.26469715,37.26468476,37.26464685,37.26463419,37.26463487,37.26461911,37.26458044,37.26455136,37.26446867,37.26439089,37.26432205,37.26426033,37.26422187,37.26420541,37.26418569,37.26418221,37.26417469,37.26413672,37.26406449,37.26395324,37.26379677,37.26367108,37.26359994,37.26352793,37.26340648,37.26332411,37.26322279,37.26309147,37.26295833,37.26289265,37.26284063,37.26280099,37.26279616,37.26274003,37.26267815,37.26261149,37.26252337,37.26245696,37.26237307,37.26237371,37.26235527,37.26236263,37.26237567,37.26236411,37.2623633,37.26235037,37.26231558,37.26225104,37.26221732,37.26213823,37.26205693,37.26192991,37.26185282,37.26170356,37.26158476,37.26160234,37.26151849,37.26146916,37.26138561,37.2612779,37.26121861,37.26117315,37.26108592,37.26099313,37.26091026,37.26072954,37.2604957,37.26035629,37.26033646,37.26030886,37.2600224,37.25985672,37.2598251,37.25981854,37.25985052,37.25990616,37.25998238,37.26001003,37.26002787,37.26002056,37.26002687,37.26002083,37.26001638,37.26000613,37.25996097,37.25989538,37.25987281,37.25986404,37.25985476,37.2598726,37.25990521,37.25991097,37.26003529,37.25998807,37.25995003,37.2599142,37.25993704,37.25995335,37.26001916,37.26002831,37.2599737,37.25984991,37.25973137,37.259673,37.25963799,37.25960186,37.25954141,37.25950979,37.25949495,37.25950075,37.25953753,37.25954421,37.25956459,37.25966299,37.25964473,37.259597,37.2588675,37.25886519,37.25902029,37.25903213,37.25903277,37.25898002,37.25878826,37.25853988,37.2582672,37.25813608,37.25806761,37.25808755,37.25810016,37.25812564,37.25809964,37.25806365,37.25804169,37.25803093,37.25802807,37.25797012,37.25796712,37.25797183,37.25793017,37.25783024,37.25775667,37.25748399,37.25740257,37.25733651,37.25726589,37.25719772,37.25721936,37.25725829,37.25730786,37.25731541,37.25726299,37.25715834,37.25708285,37.25696257,37.25692451,37.25690542,37.25686292,37.25679766,37.25671966,37.25670483,37.25663739,37.25652576,37.25631951,37.25609114,37.25600916,37.2559677,37.25565613,37.25557883,37.25549015,37.25546529,37.25538709,37.25542708,37.25544812,37.2554757,37.25550075,37.25549082,37.25545858,37.25543643,37.25544864,37.25547064,37.25548721,37.25550247,37.25551399,37.25550842,37.25546388,37.25544433,37.25539634,37.25533563,37.2552533,37.25518806,37.25514626,37.25501946,37.254909,37.25478051,37.2548005,37.25482439,37.25482957,37.25457155,37.25450552,37.25439528,37.2543592,37.2543807,37.25439121,37.25440942,37.25434427,37.25422375,37.25385523,37.25361692,37.25359329,37.25360421,37.25356809,37.25348312,37.25341144,37.25325469,37.2531843,37.25311135,37.25310425,37.25311374,37.25313592,37.25318429,37.25326924,37.25339704,37.25342965,37.25338208,37.25328328,37.25306822,37.25293216,37.25277537,37.25275463,37.25270809,37.25246336,37.25224658,37.2520485,37.25193301,37.25192079,37.25182944,37.25173103,37.25163567,37.25154398,37.25124894,37.25079148,37.25074673,37.25061685,37.25034116,37.25015636,37.24954448,37.2492116,37.24904019,37.24890172,37.24870397,37.24871388,37.24859994,37.24776572,37.24758689,37.24713277,37.2468546,37.24640899,37.24654025,37.24661477,37.24679851,37.24681131,37.24677449,37.24649477,37.2465243,37.24658235,37.24665086,37.24679459,37.24690768,37.24699696,37.2471451,37.24721466,37.24720604,37.24712569,37.24707199,37.24700795,37.24701125,37.24702958,37.24704359,37.24708113,37.2471022,37.24711153,37.24709525,37.24706151,37.24700533,37.24692962,37.24679504,37.24660686,37.24642742,37.24633307,37.2462602,37.24622309,37.24613724,37.24601232,37.24588057,37.24576931,37.24564854,37.24544104,37.24522831,37.24509642,37.24495892,37.24472938,37.24448045,37.24431442,37.2442113,37.24397233,37.24370518,37.2435414,37.24342807,37.24330154,37.24323323,37.24319344,37.24319622,37.24321019,37.24325728,37.24328489,37.24333024,37.24339853,37.24350954,37.24360937,37.24371604,37.24384976,37.24394926,37.24402224,37.24413152,37.24415888,37.24415781,37.24411922,37.24407394,37.24404184,37.24392829,37.24387212,37.24387027,37.24386556,37.24389939,37.24395636,37.24400265,37.24408243,37.24414824,37.24418621,37.24418385,37.24414747,37.24409993,37.24398201,37.24386892,37.24381542,37.24379018,37.24378482,37.24378828,37.24379188,37.24374766,37.24351029,37.24327127,37.24313381,37.24304735,37.24292855,37.24282521,37.24276212,37.24269437,37.24266788,37.24262171,37.24255991,37.2424418,37.24226697,37.2420927,37.24197084,37.24182825,37.24168316,37.24156201,37.24143049,37.241295,37.24113655,37.2410062,37.24093228,37.24087956,37.24082205,37.24078886,37.24071854,37.24065591,37.24059505,37.24052317,37.24050515,37.24049426,37.24046046,37.24039213,37.24030134,37.24021943,37.24011631,37.24000296,37.23970933,37.23958608,37.23948379,37.23940142,37.23932285,37.23925251,37.23920808,37.23912306,37.23903842,37.238943,37.23873668,37.23839859,37.23833969,37.23826969,37.23821408,37.23817224,37.23811902,37.2380739,37.23807269,37.23809701,37.23811872,37.23815864,37.2381999,37.23823516,37.2382681,37.23828392,37.23838556,37.23847643,37.23862667,37.23865291,37.23858674,37.23836428,37.23836513,37.2384484,37.23848598,37.23852267,37.23848094,37.23838006,37.23820497,37.23788802,37.23771747,37.23742096,37.23704261,37.23676498,37.23656802,37.23635799,37.23607689,37.23588046,37.23576443,37.23568618,37.23567461,37.23570614,37.23582338,37.23598651,37.23613563,37.23618649,37.23620237,37.23618063,37.23612689,37.23599365,37.2356865,37.2354088,37.23523447,37.23512521,37.23507881,37.23505688,37.23507751,37.23523104,37.23534986,37.23539455,37.23544546,37.23546763,37.23544121,37.23536823,37.23531842,37.23532602,37.23539635,37.23553304,37.23563287,37.23570085,37.23570731,37.23567775,37.23558527,37.23538382,37.23516847,37.2350494,37.23491246,37.23480003,37.23470047,37.2346324,37.23455399,37.23455347,37.23452115,37.2344475,37.23440426,37.23431461,37.23417858,37.2340859,37.23402872,37.23397428,37.23387525,37.23381158,37.23362172,37.23357045,37.23350707,37.23345383,37.23333923,37.23324851,37.23317393,37.23313842,37.2330576,37.23301728,37.23285788,37.23259382,37.23251756,37.23243072,37.23232318,37.23220328,37.23212669,37.2320744,37.23201342,37.2318694,37.23178444,37.23174056,37.23177584,37.23179544,37.23181577,37.23174955,37.23163647,37.23159653,37.23153088,37.23137787,37.23128747,37.23120678,37.23117261,37.23116948,37.23115554,37.23115784,37.23110469,37.23092769,37.23083398,37.23077674,37.23063165,37.23051847,37.23045311,37.23038199,37.23028126,37.23020702,37.23013363,37.23006002,37.23001389,37.22997506,37.22989774,37.22984954,37.22978611,37.2296417,37.22954669,37.22942284,37.22934811,37.2292556,37.22903079,37.22882505,37.22848952,37.22811593,37.22776713,37.22767568,37.22756755,37.22726564,37.22694014,37.22687021,37.22687193,37.22687393,37.22687824,37.22686295,37.22676904,37.22667148,37.22651472,37.22638332,37.22593402,37.22575995,37.2256027,37.22547803,37.22532078,37.22520136,37.2251159,37.22501776,37.22497061,37.22491418,37.22497453,37.22501022,37.22512081,37.22523726,37.22525717,37.22521115,37.22521358,37.22521269,37.22523758,37.22528345,37.22534648,37.22544591,37.22556983,37.22578074,37.22677605,37.2269924,37.22723268,37.22739221,37.22749377,37.22751291,37.22741864,37.22733982,37.22724806,37.22716134,37.22712243,37.22705054,37.22698552,37.22696281,37.22695784,37.22688348,37.2267761,37.22662479,37.22652689,37.22634852,37.22624071,37.22619922,37.22616153,37.22601049,37.22594903,37.22558495,37.2254511,37.22539681,37.22501258,37.22490934,37.2248495,37.22469235,37.22460113,37.22441324,37.2240791,37.22379436,37.22355782,37.2233534,37.22300637,37.2227526,37.22257437,37.22242298,37.22217636,37.22149635,37.22104222,37.22072421,37.22056924,37.22037182,37.22018113,37.21993333,37.21953442,37.21933987,37.21912802,37.21870147,37.21829295,37.21807128,37.21785284,37.2176107,37.21726366,37.2169073,37.21682339,37.21677187,37.21674933,37.21674389,37.21671121,37.21670303,37.21667873,37.21667789,37.21664018,37.21658339,37.21644535,37.21641708,37.21625198,37.21615037,37.21600324,37.21587654,37.21575573,37.21560762,37.21533819,37.21519642,37.21505712,37.21485764,37.21475867,37.21466575]}]],[[{"lng":[-84.333341,-83.731162,-83.936973,-85.132835,-85.183493,-85.076679,-84.333341],"lat":[38.525492,37.81249,37.466612,37.610688,37.819669,38.42201,38.525492]}]],[[{"lng":[-85.132835,-85.53729,-86.486381,-86.47342224,-86.46993672,-86.46467458,-86.4620852,-86.45870468,-86.45679297,-86.45576929,-86.45390304,-86.45180897,-86.44973725,-86.44789789,-86.44553882,-86.44305162,-86.43933131,-86.43738022,-86.43543033,-86.4339234,-86.43264121,-86.4319767,-86.43102785,-86.43048219,-86.43022797,-86.43025873,-86.43068883,-86.4313536,-86.43267153,-86.4340112,-86.4356056,-86.43794984,-86.44085222,-86.44235056,-86.44504455,-86.44569856,-86.44745546,-86.44822707,-86.44902208,-86.44941455,-86.44999442,-86.45125358,-86.45297143,-86.45410844,-86.45476285,-86.45717224,-86.4588331,-86.46093047,-86.46281574,-86.46310721,-86.46331919,-86.46347876,-86.46369831,-86.46430461,-86.4646823,-86.46550259,-86.46577715,-86.46646384,-86.46659463,-86.4665561,-86.46635922,-86.46582342,-86.4646804,-86.46329939,-86.46310619,-86.40455711,-86.40433548,-86.40348666,-86.40187892,-86.40129512,-86.27621101,-86.27588201,-86.27495055,-86.27361747,-86.2727979,-86.27190539,-86.2713834,-86.26871434,-86.26776863,-86.26720333,-86.26633556,-86.26567366,-86.26469249,-86.26365311,-86.26186015,-86.25925611,-86.25817968,-86.25710424,-86.25585973,-86.25324666,-86.25036068,-86.24692971,-86.24254642,-86.24026662,-86.23932362,-86.23821095,-86.23651597,-86.23431933,-86.2333391,-86.23313124,-86.23320713,-86.23350742,-86.23382724,-86.23384534,-86.2334477,-86.232127,-86.23122213,-86.22956252,-86.22793093,-86.22555376,-86.22468635,-86.22332801,-86.22235463,-86.22172994,-86.22135158,-86.22071133,-86.21950431,-86.21801621,-86.21491454,-86.21146747,-86.20769816,-86.19795813,-86.19321047,-86.18987599,-86.18850957,-86.18476139,-86.1832338,-86.17892979,-86.17802558,-86.17655745,-86.17523853,-86.17199182,-86.17044818,-86.16866167,-86.16531254,-86.16318588,-86.16162424,-86.16010257,-86.15902904,-86.15761929,-86.15363147,-86.152485,-86.15056788,-86.14955104,-86.14789672,-86.1432689,-86.13769898,-86.13583529,-86.13263695,-86.12829996,-86.1242524,-86.12159952,-86.12058174,-86.11752288,-86.11136792,-86.10565464,-86.10416732,-86.10296239,-86.09460202,-86.0867706,-86.08496209,-86.08176143,-86.08010357,-86.07938852,-86.07829669,-86.07618688,-86.07483111,-86.07407803,-86.07381426,-86.07392644,-86.07423787,-86.07510457,-86.07677931,-86.07715494,-86.07734396,-86.07732416,-86.07717421,-86.07662875,-86.07621331,-86.07566754,-86.07470552,-86.07333983,-86.07173735,-86.07044572,-86.06989943,-86.06886305,-86.06804503,-86.06766739,-86.06617958,-86.06523654,-86.0644934,-86.06276101,-86.05799701,-86.05114743,-86.05002892,-86.04901169,-86.04673621,-86.04368954,-86.04230694,-86.04082142,-86.03911026,-86.03819003,-86.03662969,-86.03576506,-86.03480323,-86.03422284,-86.0339076,-86.03371002,-86.03357764,-86.03373697,-86.03418691,-86.03479638,-86.03543152,-86.03537835,-86.03510308,-86.03394212,-86.03278171,-86.0315938,-86.03070272,-86.0283134,-86.0255607,-86.02166651,-86.01973855,-86.01472794,-86.00952587,-86.00404511,-86.00267279,-86.00057382,-85.99895194,-85.99720425,-85.99580837,-85.99413474,-85.99208431,-85.98937677,-85.98746383,-85.98380078,-85.98201074,-85.97742334,-85.97718222,-85.97563856,-85.97363624,-85.9729176,-85.9712727,-85.97049552,-85.9670375,-85.183493,-85.132835],"lat":[37.610688,36.800262,37.592213,38.0460616,38.04638674,38.04702564,38.04753223,38.04847194,38.04903059,38.04948092,38.05008118,38.05101296,38.05210734,38.05317145,38.05492725,38.05692956,38.05986381,38.06164797,38.06376161,38.06570513,38.06810527,38.07025195,38.07377615,38.07619745,38.07895894,38.08003188,38.0818406,38.08346606,38.08527032,38.08641257,38.08747918,38.08865334,38.08967658,38.09011613,38.09113841,38.09121351,38.09179361,38.09199571,38.09191821,38.09189737,38.09203122,38.09252362,38.0930139,38.09344723,38.09392324,38.09495311,38.09600598,38.09745783,38.09943139,38.09992325,38.10082141,38.10132647,38.10156681,38.10208768,38.10250834,38.10430562,38.10555969,38.10916353,38.11081804,38.11239467,38.11359736,38.1149827,38.11737478,38.11871579,38.11892977,38.105237,38.10503593,38.10456278,38.10432928,38.10447413,38.07522094,38.07394857,38.07144674,38.0676662,38.06500248,38.06306822,38.06195693,38.05829891,38.0571709,38.05679785,38.05638285,38.05584678,38.05485344,38.05422977,38.05286234,38.05121484,38.05048689,38.04990793,38.04922396,38.0477473,38.04620587,38.04467902,38.04301045,38.0422249,38.04167408,38.04145486,38.04087621,38.04004144,38.03962526,38.03943046,38.0393587,38.03934237,38.03913306,38.03871346,38.03817959,38.0371977,38.03661916,38.03584664,38.03483096,38.03341866,38.03270538,38.03151617,38.03024303,38.02920266,38.02866862,38.02817751,38.02755204,38.02694278,38.02563339,38.02431223,38.02279994,38.0190481,38.01725349,38.01605005,38.01539188,38.01377102,38.01284974,38.01080987,38.01051105,38.01023008,38.00995058,38.00972538,38.00959289,38.00978735,38.00986718,38.01006414,38.01044037,38.01082601,38.01096293,38.01150269,38.01255105,38.01301565,38.01410631,38.01447706,38.01474903,38.01529255,38.01590967,38.01600026,38.01609372,38.01619219,38.01619823,38.01605212,38.01591872,38.01544083,38.01431326,38.01296704,38.01262686,38.01216704,38.00880899,38.00520721,38.00401702,38.00195051,38.00104067,38.00062522,37.99977416,37.99788232,37.99657402,37.99578378,37.9953808,37.99524658,37.99543388,37.99601714,37.99725176,37.99744435,37.9974143,37.99725164,37.99708795,37.9965656,37.99599898,37.99501662,37.99287303,37.99046479,37.98744206,37.98445759,37.98371003,37.98275983,37.98173907,37.98106928,37.9779837,37.97652516,37.97514505,37.9728242,37.96767092,37.96132469,37.96050022,37.95986085,37.95899533,37.95825459,37.9581708,37.95836604,37.95896072,37.95958844,37.96107667,37.96219579,37.96373813,37.96526579,37.96762913,37.96857843,37.97023137,37.97153067,37.97441391,37.97725829,37.98135979,37.98286419,37.98435818,37.98743613,37.98977879,37.99130586,37.99196985,37.99332943,37.99450513,37.99579327,37.99623227,37.99737579,37.99840488,37.99918782,37.99926218,37.99946923,37.99965389,38.00010315,38.00041091,38.0006849,38.0009068,38.00130228,38.00164186,38.00227262,38.00254119,38.0033884,38.00340877,38.00310689,38.00264387,38.0025745,38.00264558,38.00273354,38.0029151,37.819669,37.610688]}]],[[{"lng":[-84.21298805,-84.333341,-85.076679,-85.28093219,-85.27966703,-85.27876447,-85.27610955,-85.27275417,-85.26895467,-85.26844124,-85.26364913,-85.26161009,-85.2589457,-85.25673615,-85.25571283,-85.24948293,-85.24782387,-85.24655603,-85.24628255,-85.24608578,-85.24288498,-85.24074067,-85.23897315,-85.23837062,-85.2376119,-85.23714151,-85.23573938,-85.23508596,-85.23508708,-85.23523798,-85.23559799,-85.23579713,-85.23584967,-85.23569179,-85.23519677,-85.23462556,-85.23386671,-85.23331923,-85.2326852,-85.23252362,-85.23242651,-85.23251488,-85.23300376,-85.2332549,-85.23327064,-85.23313373,-85.23145304,-85.22917494,-85.22804861,-85.22669215,-85.22615876,-85.22558719,-85.22408053,-85.2235597,-85.22188826,-85.22152877,-85.22138142,-85.22111898,-85.21913427,-85.21826098,-85.21700597,-85.21485938,-85.21302594,-85.21107548,-85.2094845,-85.20890852,-85.20693211,-85.20480796,-85.20444587,-85.20313119,-85.20147381,-85.19911126,-85.19695565,-85.19566852,-85.19470568,-85.19307458,-85.19215766,-85.19123983,-85.19103057,-85.19111367,-85.19182294,-85.19211385,-85.19219571,-85.19206918,-85.19070404,-85.18975724,-85.18880592,-85.1882756,-85.18763568,-85.18684473,-85.185101,-85.1834705,-85.18161338,-85.18084748,-85.1790224,-85.1775518,-85.1765675,-85.173829,-85.17333908,-85.17304842,-85.17123499,-85.16874528,-85.16738754,-85.16600418,-85.1627348,-85.16021026,-85.15757065,-85.15632563,-85.15457615,-85.15140115,-85.14932693,-85.14503173,-85.14225936,-85.13954891,-85.13740666,-85.1364494,-85.13556172,-85.13505543,-85.13414751,-85.13312488,-85.1319902,-85.13073591,-85.12993618,-85.12831857,-85.12683336,-85.12523794,-85.12364236,-85.12163835,-85.11954044,-85.11791394,-85.11606048,-85.11459684,-85.11287175,-85.11044176,-85.10857116,-85.10741466,-85.10699989,-85.10698007,-85.10704101,-85.10697425,-85.10343786,-85.10332233,-85.10343607,-85.10372795,-85.10385564,-85.10369222,-85.10188998,-85.10158147,-85.09923542,-85.09889586,-85.09772758,-85.09740124,-85.09708921,-85.09673103,-85.09415676,-85.09275855,-85.09251211,-85.09172085,-85.09102547,-85.09052269,-85.08978893,-85.08921983,-85.08827192,-85.08549329,-85.08363859,-85.08295925,-85.08253642,-85.08064119,-85.07953714,-85.07740447,-85.0768848,-85.07618321,-85.07579138,-85.07402884,-85.07303618,-85.07196509,-85.07034732,-85.06841459,-85.06756385,-85.063094,-85.06140708,-85.05967685,-85.05793714,-85.05691201,-85.05592326,-85.05308831,-85.05239956,-85.05194415,-85.05122165,-85.05065408,-85.0481513,-85.04772714,-85.04700722,-85.0457297,-85.04247592,-85.04062144,-85.03688318,-85.03462568,-85.03241085,-85.0305154,-85.02454131,-85.02424088,-85.02351926,-85.0160873,-85.01333871,-85.01098612,-85.00870324,-85.00644346,-85.0040108,-85.00039315,-84.99973052,-84.99647658,-84.9940104,-84.99192657,-84.99033626,-84.98987894,-84.989532,-84.9882539,-84.98681059,-84.98510988,-84.98311951,-84.98154748,-84.97999469,-84.97825918,-84.9762128,-84.97473151,-84.97352695,-84.97254092,-84.9707143,-84.96910565,-84.96760769,-84.96594494,-84.96448385,-84.96351591,-84.96225548,-84.96121424,-84.95993492,-84.95781554,-84.9554967,-84.95376058,-84.95250148,-84.9516611,-84.95072913,-84.94923074,-84.94795267,-84.94652787,-84.94534103,-84.94364085,-84.94175978,-84.93982106,-84.9380675,-84.93631343,-84.934923,-84.93351596,-84.93155998,-84.92985939,-84.92863436,-84.92757403,-84.92642154,-84.9231808,-84.92155611,-84.92075962,-84.91884492,-84.91765554,-84.91472575,-84.91229978,-84.91117136,-84.90933352,-84.90671342,-84.90343496,-84.8998411,-84.89865061,-84.89690612,-84.89549696,-84.8939579,-84.89270171,-84.89027748,-84.88911636,-84.88797644,-84.88728461,-84.88662943,-84.88524785,-84.88308078,-84.88222102,-84.88079855,-84.87897646,-84.87722134,-84.87647706,-84.87552017,-84.87523424,-84.87276762,-84.8699984,-84.86198938,-84.85894332,-84.85559831,-84.85286593,-84.84965328,-84.84644048,-84.83986174,-84.83780832,-84.83553748,-84.83295396,-84.83149452,-84.82885716,-84.8275466,-84.82395713,-84.82121512,-84.81940572,-84.81582363,-84.81471996,-84.81393787,-84.81323805,-84.8125341,-84.81216023,-84.81169584,-84.81159859,-84.81183733,-84.81224313,-84.81278424,-84.81315308,-84.81399075,-84.81483468,-84.81554327,-84.81623373,-84.81650481,-84.81708731,-84.8180517,-84.81878025,-84.81943552,-84.81994374,-84.82063371,-84.82139976,-84.82236527,-84.82336704,-84.82444126,-84.8256428,-84.82660839,-84.82720942,-84.82779034,-84.8286254,-84.82911505,-84.82922111,-84.82947554,-84.82973075,-84.8299655,-84.830092,-84.83014016,-84.83013563,-84.82996796,-84.82939751,-84.82873546,-84.82788982,-84.82700991,-84.82596333,-84.82524785,-84.82473499,-84.82434911,-84.82319396,-84.822021,-84.82007679,-84.81791526,-84.81644969,-84.8154789,-84.81500201,-84.81408419,-84.81238209,-84.81080791,-84.80976358,-84.80905058,-84.80722382,-84.80632674,-84.80562372,-84.80481695,-84.80374706,-84.80253379,-84.80185742,-84.80129686,-84.80046109,-84.80005653,-84.7993521,-84.79600016,-84.79561683,-84.79503937,-84.79427487,-84.79382818,-84.79359736,-84.79319701,-84.79274374,-84.79152393,-84.79043611,-84.78895444,-84.78791635,-84.78730685,-84.78616247,-84.78573468,-84.78546034,-84.78521685,-84.78461602,-84.78459246,-84.78465503,-84.78494987,-84.7851569,-84.78527493,-84.785483,-84.78595304,-84.78661326,-84.78756413,-84.78947082,-84.79158206,-84.79248246,-84.79279557,-84.79315864,-84.79347277,-84.79396754,-84.79446149,-84.7950663,-84.79588604,-84.79739277,-84.7993784,-84.80141308,-84.80263614,-84.8037468,-84.80503822,-84.80597566,-84.80650452,-84.80685724,-84.80724345,-84.80813038,-84.80896448,-84.8107566,-84.81215968,-84.81389394,-84.81476677,-84.81486977,-84.81467017,-84.81460916,-84.8148332,-84.81592592,-84.8169384,-84.81906742,-84.82122025,-84.82610855,-84.82945335,-84.83036525,-84.83074688,-84.83138324,-84.83247503,-84.83666231,-84.84029174,-84.84267924,-84.84463748,-84.84672193,-84.84835252,-84.84887239,-84.84964837,-84.85060323,-84.85396187,-84.8551927,-84.85567461,-84.8561671,-84.85677691,-84.85983859,-84.86193086,-84.86375603,-84.86675247,-84.86810495,-84.86901362,-84.86996901,-84.87074666,-84.87114006,-84.87211343,-84.87307322,-84.87343478,-84.87428798,-84.8747568,-84.87510466,-84.87683095,-84.87727592,-84.87726633,-84.87734979,-84.87816906,-84.87873364,-84.87880409,-84.87878911,-84.87911152,-84.87925815,-84.87907298,-84.87838111,-84.87803303,-84.87753536,-84.87604595,-84.8740933,-84.87330769,-84.87278612,-84.87210199,-84.87139307,-84.86997509,-84.86886239,-84.86809978,-84.86768438,-84.86664652,-84.8644994,-84.86316869,-84.8620576,-84.86047576,-84.85807537,-84.85626275,-84.85584876,-84.85532291,-84.8547934,-84.85374242,-84.85266357,-84.85187571,-84.85006416,-84.84931723,-84.84855528,-84.84617532,-84.84416092,-84.84263614,-84.8415633,-84.84100399,-84.84051312,-84.84016044,-84.83946135,-84.83859712,-84.83692778,-84.83515518,-84.83382767,-84.83316941,-84.83268558,-84.83222214,-84.83166803,-84.83100543,-84.83052199,-84.83039176,-84.83026068,-84.82998554,-84.82985546,-84.83002616,-84.83004929,-84.83027391,-84.83085594,-84.83198661,-84.83283356,-84.833682,-84.83539697,-84.83648565,-84.83744059,-84.8385793,-84.83956002,-84.84070651,-84.84478356,-84.84665598,-84.84773623,-84.8480739,-84.84820157,-84.84856091,-84.84965441,-84.85060728,-84.85156786,-84.85243549,-84.85486416,-84.85737799,-84.86016564,-84.8616505,-84.86358324,-84.86432676,-84.86523493,-84.86601551,-84.86881586,-84.87182426,-84.87240739,-84.87456334,-84.87612079,-84.877193,-84.87755695,-84.87781911,-84.87812872,-84.8782199,-84.87824849,-84.87799811,-84.87791208,-84.87797493,-84.87832922,-84.87911468,-84.88002318,-84.88079255,-84.88187093,-84.88345292,-84.88465601,-84.8852403,-84.88565906,-84.88694082,-84.88832848,-84.88996547,-84.89153234,-84.89206569,-84.89278067,-84.89316365,-84.89354929,-84.89480169,-84.89563431,-84.8962995,-84.89672594,-84.89717776,-84.89731776,-84.89730694,-84.89709518,-84.89709823,-84.89723187,-84.89733615,-84.89722982,-84.89691118,-84.89660742,-84.89627017,-84.89548195,-84.89471001,-84.89320254,-84.89147653,-84.89109068,-84.89046695,-84.89019055,-84.88976153,-84.88905877,-84.88820582,-84.88658848,-84.88577055,-84.88544965,-84.8852932,-84.88513714,-84.88481583,-84.88120428,-84.88065826,-84.87985616,-84.87920491,-84.87733282,-84.87592062,-84.87470818,-84.87297801,-84.87195798,-84.86731835,-84.865649,-84.8640776,-84.86238823,-84.86101413,-84.85914178,-84.8575381,-84.85642778,-84.85413148,-84.85168597,-84.8509344,-84.85059989,-84.84982464,-84.84919775,-84.84862196,-84.84805113,-84.84752486,-84.84718424,-84.84600459,-84.84559711,-84.84490384,-84.84458196,-84.84380509,-84.84310909,-84.84116895,-84.84009516,-84.83946986,-84.83795356,-84.83569972,-84.83355746,-84.83243504,-84.83130854,-84.82937457,-84.82804776,-84.82711299,-84.82390385,-84.82233428,-84.82079824,-84.81997723,-84.81948645,-84.81798805,-84.81685008,-84.81487914,-84.81395205,-84.81285911,-84.8121173,-84.81174951,-84.81124752,-84.81094042,-84.81067906,-84.80866136,-84.80661999,-84.80387592,-84.80108186,-84.79715146,-84.79441776,-84.79318871,-84.79110566,-84.78886639,-84.78776821,-84.78625096,-84.78589118,-84.78448361,-84.7838702,-84.78334628,-84.78253735,-84.78192763,-84.78018636,-84.77824327,-84.77482119,-84.77223814,-84.76972896,-84.76904731,-84.76893591,-84.7683284,-84.76746332,-84.7672036,-84.76694563,-84.76628187,-84.76519553,-84.76106162,-84.75812309,-84.75490256,-84.75400179,-84.75273365,-84.75034486,-84.74886491,-84.74587011,-84.74557459,-84.7453972,-84.74505899,-84.74476395,-84.74453063,-84.74437137,-84.74436977,-84.74278518,-84.74179001,-84.73949679,-84.73789277,-84.73456446,-84.73208144,-84.72842889,-84.72746225,-84.72543988,-84.72444079,-84.72174824,-84.71809586,-84.7176729,-84.71668046,-84.71509499,-84.71413767,-84.71363187,-84.71323391,-84.712741,-84.71193549,-84.71117565,-84.70989144,-84.70781712,-84.70526988,-84.70439575,-84.7006249,-84.69966318,-84.69643455,-84.69502436,-84.69405812,-84.6930476,-84.69162911,-84.69111985,-84.68935388,-84.68746333,-84.68607331,-84.68552965,-84.68316826,-84.68023923,-84.67814347,-84.67574018,-84.67421365,-84.67229769,-84.67060571,-84.66801892,-84.66660172,-84.66488454,-84.66201904,-84.65956305,-84.65824809,-84.65433873,-84.65341254,-84.65169247,-84.65018195,-84.64627806,-84.64374565,-84.64237605,-84.64083214,-84.63979771,-84.63876387,-84.63774908,-84.63627922,-84.63499732,-84.63282176,-84.63250552,-84.63020108,-84.62901712,-84.62790845,-84.62684164,-84.62375159,-84.62197853,-84.62016489,-84.61873448,-84.61806421,-84.61741798,-84.61698815,-84.61565439,-84.61405061,-84.61043329,-84.60933837,-84.60899486,-84.60788896,-84.60533628,-84.60280722,-84.60082088,-84.59932665,-84.59760438,-84.59676525,-84.59498582,-84.5930404,-84.59006191,-84.58738361,-84.58627969,-84.58360038,-84.5814397,-84.5804687,-84.5784652,-84.57637161,-84.57549901,-84.57466366,-84.57379003,-84.57315284,-84.57237587,-84.5711013,-84.56951832,-84.56744179,-84.56653939,-84.56603629,-84.56483583,-84.56402953,-84.56078881,-84.55983623,-84.55885046,-84.55740166,-84.55526715,-84.55350942,-84.55237362,-84.55135857,-84.54955263,-84.54860119,-84.54707709,-84.54614617,-84.54402353,-84.54034184,-84.53777229,-84.53433333,-84.53266748,-84.53106312,-84.52969504,-84.52881414,-84.5266886,-84.52562555,-84.5237724,-84.52237064,-84.52106406,-84.51981736,-84.51530743,-84.51298598,-84.5110414,-84.50616056,-84.50408536,-84.50311718,-84.50226402,-84.49880205,-84.49723887,-84.49647007,-84.49608139,-84.49526821,-84.4939446,-84.49298085,-84.49252733,-84.49117042,-84.4903928,-84.49014218,-84.4891418,-84.48849227,-84.48524387,-84.48267517,-84.48214616,-84.48118731,-84.48051102,-84.48009824,-84.47957768,-84.47854351,-84.47688843,-84.47590884,-84.47532844,-84.47435537,-84.47273066,-84.47117664,-84.47077634,-84.46973402,-84.46783758,-84.46601057,-84.46421079,-84.46280253,-84.45959592,-84.45881803,-84.45765858,-84.45666329,-84.45474796,-84.45247005,-84.45101322,-84.45000553,-84.44897948,-84.44790267,-84.44638898,-84.44507166,-84.44383619,-84.44322046,-84.44251509,-84.44204631,-84.44098578,-84.44046152,-84.44006831,-84.43961672,-84.4394424,-84.43892038,-84.43782717,-84.43734038,-84.43693203,-84.43621877,-84.43538814,-84.43515978,-84.43496976,-84.43458978,-84.43398981,-84.43382656,-84.43376714,-84.43394716,-84.43440813,-84.43481288,-84.43501753,-84.43505919,-84.43505201,-84.43514059,-84.43547019,-84.43549232,-84.43535388,-84.4348443,-84.43447673,-84.43371833,-84.43381621,-84.43394837,-84.43421343,-84.43414307,-84.43357317,-84.43343121,-84.43337394,-84.43336451,-84.43360026,-84.43372542,-84.43359262,-84.43329931,-84.43273173,-84.4323011,-84.43143985,-84.43111251,-84.43056121,-84.43018281,-84.42932062,-84.4280444,-84.42626308,-84.42544433,-84.42476115,-84.42385189,-84.42378905,-84.42386457,-84.42431935,-84.4262673,-84.42699071,-84.42827947,-84.42856387,-84.42862978,-84.42791892,-84.42625608,-84.42451426,-84.42210562,-84.41910273,-84.41829386,-84.41708719,-84.4164254,-84.41562156,-84.41401038,-84.41248737,-84.41114381,-84.40956778,-84.40733447,-84.40454126,-84.40291179,-84.40218778,-84.40129723,-84.4006807,-84.39977591,-84.39778308,-84.39617832,-84.39546078,-84.39421036,-84.39293976,-84.39251443,-84.39111794,-84.39027145,-84.38891206,-84.38753185,-84.38690025,-84.38505836,-84.38304469,-84.38118134,-84.37874121,-84.37691265,-84.37503231,-84.37449391,-84.37414118,-84.37321456,-84.37157487,-84.36926986,-84.36699715,-84.36366861,-84.3628213,-84.36160148,-84.36058657,-84.35782203,-84.35697594,-84.35568757,-84.35222538,-84.35088503,-84.34820416,-84.346319,-84.34560037,-84.34514601,-84.34470389,-84.34417588,-84.34318446,-84.34199969,-84.34075438,-84.33975621,-84.33850394,-84.33620139,-84.33572698,-84.33554848,-84.33431804,-84.33291348,-84.33022975,-84.32890968,-84.32872713,-84.32662013,-84.32596807,-84.32552476,-84.32414953,-84.32246964,-84.32124494,-84.32074159,-84.31998489,-84.31936158,-84.31844952,-84.31741605,-84.31624237,-84.31477869,-84.31380224,-84.31247404,-84.31027038,-84.30931343,-84.30824605,-84.30765601,-84.30657143,-84.30607398,-84.30442199,-84.30333476,-84.30305488,-84.30207781,-84.30163771,-84.30146253,-84.30068385,-84.29995065,-84.29914776,-84.29794942,-84.29758041,-84.29819586,-84.29789296,-84.29751994,-84.29680613,-84.29661476,-84.29664187,-84.29579586,-84.29393072,-84.29306134,-84.29129957,-84.29015567,-84.2887769,-84.2865359,-84.28515747,-84.28038773,-84.2784527,-84.27502353,-84.27240934,-84.27176043,-84.26957682,-84.26936071,-84.26835607,-84.26660286,-84.26569536,-84.2648867,-84.26222471,-84.26134658,-84.26044534,-84.25703945,-84.2562109,-84.25380694,-84.2499604,-84.24987704,-84.24942289,-84.24791349,-84.2474888,-84.24670569,-84.24647184,-84.24619089,-84.24523725,-84.24422732,-84.2434507,-84.24298389,-84.24273995,-84.24243637,-84.24176843,-84.24151222,-84.24123077,-84.24074728,-84.24016357,-84.23973819,-84.23932849,-84.23864003,-84.23842302,-84.23774283,-84.23705758,-84.23656725,-84.23540394,-84.23402657,-84.23299763,-84.23284513,-84.23286173,-84.23253489,-84.23201184,-84.23192141,-84.23187484,-84.23203292,-84.23201793,-84.23191674,-84.23181037,-84.2316977,-84.23153327,-84.23179801,-84.23229225,-84.23285779,-84.23327434,-84.23332106,-84.23356031,-84.23361207,-84.23354711,-84.23337183,-84.233589,-84.23366069,-84.23361252,-84.23356547,-84.23341624,-84.23309854,-84.23297317,-84.23295123,-84.23261938,-84.23247445,-84.2322937,-84.23215463,-84.23174186,-84.23041084,-84.23014742,-84.22951996,-84.22809456,-84.22567503,-84.2249694,-84.22387743,-84.2217263,-84.21985619,-84.2187973,-84.21807921,-84.21510592,-84.2145185,-84.2140411,-84.21356747,-84.21311546,-84.21298805],"lat":[38.80576303,38.525492,38.42201,38.74176632,38.74167132,38.74164506,38.74125909,38.74076315,38.74012116,38.74009092,38.73899724,38.73854342,38.73776985,38.73688072,38.73631567,38.73357349,38.73269684,38.73176821,38.73152064,38.73108533,38.72710353,38.72472005,38.72285501,38.72230945,38.7217934,38.72115095,38.71918379,38.71816025,38.71800238,38.71797352,38.71835739,38.71845026,38.71820335,38.71773247,38.71710775,38.7166035,38.71611905,38.71573224,38.71519545,38.71499914,38.71484907,38.71474235,38.71474519,38.71466802,38.71442028,38.71420619,38.71251442,38.70984386,38.70856971,38.70640909,38.70578416,38.70535192,38.70436435,38.70394199,38.70200225,38.7015593,38.70134583,38.70105777,38.69957242,38.69896858,38.69785022,38.69648835,38.6954374,38.69458356,38.69391467,38.69363126,38.69274022,38.69194177,38.69186873,38.69175357,38.69131829,38.69055643,38.68999658,38.68971537,38.68963743,38.68967991,38.6895486,38.68931297,38.68919738,38.6890948,38.68911529,38.68909262,38.68892691,38.68874921,38.68814285,38.68780824,38.68759988,38.68754656,38.68761767,38.68774916,38.68785282,38.68804414,38.68809634,38.68815172,38.68835787,38.6884833,38.68846342,38.68810561,38.6880394,38.68802155,38.68852896,38.68904467,38.68928927,38.68966828,38.69041897,38.69110937,38.69195091,38.6923229,38.69290383,38.69385784,38.69472675,38.69639295,38.69756086,38.69885603,38.69986716,38.70036537,38.70113097,38.7015464,38.70200917,38.70236702,38.70291648,38.70393272,38.70464523,38.70635426,38.70772211,38.70886351,38.71001864,38.71098627,38.71226359,38.71332786,38.71449181,38.71535168,38.71665769,38.71860032,38.71989034,38.72067832,38.7210138,38.72127934,38.72152335,38.72173855,38.72450628,38.72468482,38.7247088,38.72459641,38.72462594,38.72487561,38.72632862,38.72653077,38.726853,38.72700488,38.7275133,38.72775111,38.72815162,38.72841598,38.72975273,38.73048708,38.73060037,38.73088429,38.73103077,38.73120302,38.7317179,38.73204217,38.73240072,38.73381027,38.73499639,38.73510653,38.73534303,38.73654191,38.73690225,38.73836741,38.73865209,38.73926658,38.73955746,38.74041581,38.74103963,38.74142274,38.74177873,38.74263463,38.74288171,38.74397486,38.74459118,38.74533759,38.74633586,38.74684611,38.74722133,38.74798043,38.74814047,38.7484659,38.74922015,38.74954424,38.75074999,38.75110376,38.75176743,38.75261995,38.75441287,38.75544934,38.75673397,38.75772741,38.75848292,38.75884766,38.76153585,38.76159853,38.76187007,38.76475354,38.76588291,38.76703184,38.76838979,38.76988312,38.77163476,38.77452798,38.77500775,38.77660995,38.77783402,38.77853672,38.7786625,38.77879001,38.77876169,38.77888808,38.7790436,38.77932993,38.77947087,38.77952526,38.77958389,38.77950883,38.77930684,38.77923611,38.7792063,38.77907633,38.77882828,38.77870103,38.77855392,38.77839887,38.77825129,38.77823462,38.77817688,38.77796472,38.77771738,38.77730177,38.7768422,38.77651007,38.77633898,38.77620707,38.77594753,38.77569173,38.77548888,38.77540102,38.7753573,38.77542681,38.77568179,38.77606676,38.77652229,38.77686111,38.77714745,38.77750091,38.77816912,38.77873815,38.77927956,38.7798372,38.78047928,38.78136772,38.78219045,38.78251853,38.78292598,38.78325197,38.78438464,38.78547208,38.78613206,38.78686044,38.78819215,38.79001676,38.79149306,38.79189506,38.79241802,38.79306344,38.79371618,38.79402703,38.79431642,38.79444875,38.79472126,38.79477596,38.79455225,38.79448666,38.79409202,38.79381532,38.79320775,38.79286843,38.79250342,38.79239981,38.79232347,38.79232277,38.79219687,38.79185385,38.79108608,38.79058422,38.78999562,38.78938203,38.78859312,38.78768746,38.78565092,38.7849062,38.78429646,38.7838654,38.78373475,38.78327098,38.78315648,38.78308544,38.7831293,38.78334791,38.78406877,38.78451248,38.78504313,38.7857282,38.78672897,38.78783872,38.78998839,38.79195975,38.79317594,38.79395411,38.79512182,38.79754781,38.80021708,38.8017201,38.80310672,38.8045392,38.80515704,38.80584326,38.80698752,38.80792052,38.80909533,38.810109,38.81104107,38.81178494,38.81271774,38.81383547,38.81519333,38.81675668,38.81782881,38.81873197,38.81997754,38.82166434,38.82305192,38.82396841,38.82452709,38.82488325,38.82547332,38.82630002,38.82818875,38.82980181,38.83057341,38.83168923,38.83282976,38.83418851,38.83534311,38.83663025,38.83726993,38.83771148,38.83824044,38.83922266,38.8400798,38.84140451,38.84282777,38.84363862,38.84405246,38.84455257,38.84508079,38.8458458,38.84648825,38.84688363,38.84731186,38.84861532,38.84915735,38.84949088,38.84983594,38.85043287,38.85125657,38.8518305,38.85240954,38.85363294,38.8540937,38.85466605,38.85697173,38.85714989,38.85727021,38.85745762,38.85764763,38.85784619,38.85824798,38.85880308,38.85997392,38.86124603,38.86335785,38.86511768,38.86632767,38.86867969,38.86995982,38.87118491,38.87206701,38.87500684,38.87559282,38.87643625,38.87857745,38.879919,38.88042513,38.88089358,38.88160575,38.88241554,38.88329766,38.88468996,38.88602343,38.88674316,38.88710947,38.88741849,38.887572,38.88761307,38.88772134,38.88794581,38.88838894,38.88935916,38.89064895,38.89168648,38.89218767,38.89255479,38.89280522,38.89298425,38.89324652,38.8934113,38.89343219,38.89357921,38.89387407,38.89452929,38.89497959,38.89535425,38.89551073,38.89542232,38.89523405,38.89506057,38.8949882,38.89498166,38.89506918,38.89548665,38.8958288,38.89670824,38.89712257,38.89724766,38.89721354,38.89717998,38.89725014,38.89744972,38.89758452,38.89757932,38.89747478,38.89739721,38.89750837,38.8975219,38.89741931,38.89734137,38.8973584,38.89740878,38.897503,38.8975973,38.89758129,38.89760141,38.89774327,38.89803823,38.89880998,38.89926203,38.8996668,38.90026967,38.9009055,38.90134905,38.90251071,38.90450693,38.90497769,38.90561953,38.90651942,38.90695849,38.9087832,38.90947972,38.91013719,38.91050433,38.9117856,38.91306092,38.91422419,38.91517951,38.91569937,38.91607524,38.91657218,38.91859196,38.91977962,38.92068887,38.9225312,38.92518556,38.92592387,38.92676562,38.92753759,38.92861413,38.9300437,38.93093742,38.9315056,38.93199259,38.93322593,38.93505228,38.93608157,38.93682286,38.93768138,38.93935336,38.9406769,38.94103893,38.94163216,38.94209629,38.94294091,38.94404749,38.94492974,38.94742824,38.9482655,38.94875255,38.9498616,38.95097337,38.95200783,38.95288924,38.95347388,38.95420733,38.95457117,38.95494472,38.95544742,38.95664135,38.95792916,38.95933288,38.96036977,38.96136954,38.96228981,38.96384225,38.96633004,38.96729414,38.96772417,38.96835737,38.96897846,38.96939066,38.97021836,38.97256043,38.9738539,38.97567041,38.97819254,38.98006461,38.98182272,38.98488741,38.98685738,38.98841169,38.98990159,38.9909468,38.99196312,38.9952419,38.99674135,38.9980083,38.99858189,38.99949431,39.00002418,39.00307158,39.00469305,39.00583279,39.00652426,39.00960911,39.0125078,39.01548264,39.01708599,39.01934333,39.01998717,39.02069807,39.0216263,39.02448021,39.02775559,39.02828837,39.0295986,39.03048302,39.03103443,39.03121142,39.03121608,39.03122655,39.03125471,39.03136884,39.03170194,39.03197996,39.03216576,39.03271193,39.03369498,39.03455401,39.03512241,39.03575481,39.03651713,39.03688138,39.03718482,39.03749398,39.03909005,39.04111101,39.04378994,39.04600704,39.04675623,39.048377,39.04904138,39.04948067,39.05061245,39.05151474,39.05244057,39.05330428,39.05440701,39.0550806,39.05585607,39.05679761,39.05713664,39.05730097,39.05741976,39.05747664,39.05747437,39.05755458,39.05794065,39.05954379,39.06065696,39.06248008,39.06416982,39.06463651,39.06497244,39.06526423,39.06566192,39.06612632,39.06648534,39.06700625,39.06723371,39.06741808,39.06769011,39.06807884,39.06829748,39.06977712,39.06993927,39.07001444,39.07013736,39.07089653,39.07133098,39.07155683,39.07206991,39.07254698,39.07453888,39.0754051,39.07631725,39.07708441,39.07798703,39.07930871,39.0804004,39.0813269,39.08316694,39.08537919,39.08605435,39.08618363,39.0864935,39.08691017,39.08746729,39.08819046,39.08901009,39.08949073,39.09044539,39.09092004,39.09171364,39.09195966,39.09238757,39.09283388,39.09416302,39.09509373,39.09551041,39.09674794,39.09821597,39.0997658,39.1004888,39.10097159,39.10177894,39.10249759,39.10285828,39.10405518,39.10473344,39.10527197,39.10554976,39.10562968,39.10570176,39.10582878,39.10620187,39.10650897,39.10683121,39.10724957,39.10762554,39.10870596,39.10902063,39.10920392,39.10964379,39.11013697,39.11060809,39.1112627,39.11217453,39.11278553,39.11312712,39.11382697,39.11474792,39.11531286,39.11652367,39.11681316,39.11771876,39.1182656,39.11884199,39.12017378,39.12097322,39.12284102,39.12503798,39.12962222,39.13285702,39.13569569,39.13644506,39.13660064,39.13721474,39.13771136,39.1380181,39.13832758,39.13892332,39.13974894,39.14290488,39.14497933,39.14652568,39.14678313,39.1472228,39.14762154,39.14769291,39.14768021,39.14763793,39.14746346,39.14731653,39.14736481,39.1476635,39.147732,39.147732,39.14755685,39.14737141,39.14685386,39.14634069,39.14534755,39.14454683,39.14317884,39.14272724,39.14152124,39.14099662,39.13920145,39.13661561,39.13611642,39.1351333,39.13371954,39.13262827,39.13175776,39.13124094,39.13083038,39.13021942,39.12950181,39.12773783,39.12503902,39.12239507,39.12142249,39.11689272,39.11577379,39.11167827,39.11002413,39.1091042,39.10807951,39.10628116,39.10543796,39.10319174,39.10164034,39.1008017,39.10051135,39.09972162,39.09872639,39.09832879,39.09800118,39.09771431,39.0975502,39.09760634,39.09789595,39.09795317,39.0975766,39.09682995,39.09614598,39.09561512,39.09389652,39.09340483,39.09252844,39.09142468,39.08821099,39.08563303,39.08431632,39.08323134,39.08234598,39.08142356,39.08075384,39.07990012,39.07885182,39.07670794,39.0765444,39.07637598,39.07618099,39.07567095,39.07530266,39.07435252,39.07387876,39.07352672,39.07333061,39.07328587,39.0732811,39.07329078,39.07333578,39.07341532,39.07331364,39.07328678,39.07329312,39.07329353,39.0734668,39.07392855,39.0744778,39.07509077,39.07619984,39.0766955,39.07729471,39.07770007,39.07839058,39.07891641,39.07922692,39.07981168,39.0801228,39.08026843,39.08065929,39.08106706,39.08122458,39.08147719,39.08169789,39.08189202,39.0822358,39.08274488,39.08380685,39.08532239,39.0860067,39.08640121,39.08721844,39.08794896,39.09138149,39.09254159,39.09390035,39.09523939,39.09713988,39.09850877,39.0990163,39.0993603,39.09969223,39.09980622,39.0999282,39.09997653,39.09985908,39.09899833,39.09800596,39.09654625,39.0957716,39.09490421,39.09413255,39.09372134,39.09274013,39.09247807,39.09227241,39.09214413,39.09222407,39.09230049,39.09295277,39.09335435,39.09365409,39.09517663,39.09600614,39.09647649,39.09692199,39.09919472,39.10025187,39.10090542,39.10127613,39.10205139,39.10300117,39.10463283,39.10518676,39.10723837,39.10809089,39.10841909,39.10991989,39.11069822,39.1137004,39.11600545,39.11643222,39.11695195,39.11753639,39.11776538,39.11800697,39.11849839,39.11922753,39.11992269,39.12016223,39.12058289,39.12118328,39.12166775,39.12168545,39.12153295,39.12174737,39.12202294,39.12205578,39.12196794,39.12153669,39.1214789,39.12107518,39.12076109,39.12015701,39.11923322,39.11841716,39.11781323,39.11725028,39.11646984,39.11529347,39.11397642,39.11281813,39.11217448,39.11132532,39.11074229,39.10955704,39.10892807,39.10825804,39.10770263,39.10720794,39.10645271,39.10513667,39.10448204,39.10368003,39.10239833,39.1008847,39.10036196,39.0996639,39.09837074,39.09657411,39.09557025,39.09486267,39.09425789,39.09351069,39.09275466,39.0923492,39.09208884,39.09073253,39.09002243,39.08806166,39.08703513,39.08660393,39.08565942,39.08514336,39.08422491,39.08358764,39.08231659,39.0811005,39.08041475,39.07891496,39.07858394,39.07785715,39.0765282,39.07459662,39.07400498,39.07326774,39.07011133,39.06683389,39.06571997,39.06184481,39.06067165,39.0587396,39.05824537,39.05743831,39.05645505,39.05478531,39.05420793,39.05382423,39.0530962,39.05287449,39.05278611,39.05285431,39.05406879,39.05466155,39.05553242,39.0555795,39.0554402,39.05454279,39.05304182,39.05220576,39.05144466,39.04977499,39.04953261,39.04928441,39.04898603,39.04846778,39.04762614,39.04696668,39.04660296,39.04624763,39.04582862,39.0457039,39.04566773,39.04579134,39.04625354,39.04646487,39.04636405,39.04599012,39.04566587,39.04543812,39.04509036,39.04516108,39.04512468,39.04458853,39.04438538,39.04468839,39.0451614,39.04523795,39.04516888,39.04497155,39.0446414,39.04437461,39.0441628,39.04380487,39.04369851,39.04354616,39.04339413,39.04325306,39.04301233,39.04274036,39.04208001,39.04183133,39.04164558,39.04151026,39.04072718,39.04041945,39.03995283,39.03902285,39.03860499,39.03778286,39.03705106,39.03671041,39.03635773,39.03609997,39.03591668,39.03575813,39.03540237,39.03490177,39.034275,39.0337729,39.03260765,39.03247577,39.03224162,39.0316148,39.03080333,39.02934109,39.02880237,39.02868901,39.02726233,39.02649544,39.02612498,39.02526433,39.02405547,39.02305791,39.02225431,39.02153416,39.02092544,39.02032283,39.0194525,39.01873141,39.01745912,39.01655785,39.01511281,39.0128239,39.01174295,39.01037516,39.00969535,39.00830945,39.00775294,39.00526055,39.00330764,39.0028732,39.00077745,39.00008297,38.99978156,38.99780351,38.99654396,38.99401648,38.99094744,38.98889881,38.98635009,38.98416223,38.98169893,38.97666023,38.97532213,38.97316986,38.96920854,38.96494925,38.96287391,38.96005457,38.95826136,38.95564437,38.95254176,38.95105592,38.94573245,38.94361503,38.94089154,38.93882052,38.93779248,38.9361688,38.93590253,38.93482473,38.93261734,38.93143366,38.93005896,38.92734735,38.92619693,38.92471537,38.92264921,38.92148561,38.91813591,38.9127389,38.91234932,38.91161876,38.90982601,38.90928936,38.90815371,38.90790502,38.90738392,38.90591527,38.90487424,38.90385537,38.90306141,38.90279339,38.90260693,38.90236514,38.90217927,38.90185723,38.90110698,38.90036373,38.89961013,38.89903248,38.89842654,38.89804762,38.89746788,38.89670824,38.89612538,38.89436294,38.89140745,38.88775203,38.88689206,38.88617697,38.8839885,38.88034088,38.8788611,38.87721578,38.87603568,38.87515135,38.87486589,38.87280517,38.87264855,38.87253252,38.87247137,38.86779325,38.86382032,38.86051002,38.85919125,38.85638113,38.85481939,38.85448084,38.85430011,38.85415734,38.85400037,38.85133351,38.84768367,38.84455836,38.84100939,38.84020051,38.83973616,38.83880932,38.83835028,38.83615266,38.8347354,38.83230142,38.82743656,38.8264303,38.82546055,38.82286329,38.8181211,38.81703705,38.81562815,38.8132618,38.81147833,38.81059225,38.81002559,38.80780643,38.80728743,38.80678975,38.80628322,38.80583528,38.80576303]}]],[[{"lng":[-83.498003,-82.792715,-83.831339,-83.936973,-83.731162,-83.498003],"lat":[37.920187,37.298604,36.604187,37.466612,37.81249,37.920187]}]],[[{"lng":[-87.34722039,-87.382126,-88.129262,-88.18043731,-88.17969684,-88.17816072,-88.17658743,-88.17574275,-88.17539732,-88.1750501,-88.17438379,-88.17399259,-88.17360313,-88.17320788,-88.17281439,-88.17223434,-88.17103924,-88.17068251,-88.16996559,-88.16645738,-88.16565294,-88.16434261,-88.16388817,-88.16262884,-88.16175159,-88.1606378,-88.15995685,-88.15913673,-88.15808265,-88.1566212,-88.15553638,-88.15466518,-88.1543529,-88.15404067,-88.15367412,-88.15330583,-88.15239827,-88.15165227,-88.15132082,-88.15099112,-88.15045004,-88.14990904,-88.148845,-88.14840838,-88.14797188,-88.14731798,-88.14648332,-88.14275983,-88.14035489,-88.13809477,-88.1372613,-88.13624606,-88.13577218,-88.13438564,-88.13352371,-88.13343209,-88.1326211,-88.1315647,-88.13052327,-88.12986625,-88.12871028,-88.12835116,-88.12799357,-88.12722978,-88.12559768,-88.12495816,-88.12431958,-88.12364259,-88.12280329,-88.12135735,-88.11981039,-88.11872096,-88.11761074,-88.11689405,-88.11617483,-88.11547163,-88.11476137,-88.11386765,-88.11310698,-88.11235391,-88.11189348,-88.11092444,-88.1097413,-88.10708944,-88.10560865,-88.10422221,-88.10351544,-88.10280761,-88.102143,-88.10148648,-88.10035214,-88.09980164,-88.09778426,-88.09694225,-88.09434359,-88.09348446,-88.09262055,-88.09180391,-88.09102554,-88.09000492,-88.08907178,-88.08812737,-88.0871771,-88.08652839,-88.08588334,-88.08522898,-88.08458483,-88.08366502,-88.08277994,-88.08224298,-88.08200384,-88.08176465,-88.08133693,-88.08114508,-88.08095316,-88.08060775,-88.08002471,-88.07950922,-88.07856042,-88.07718312,-88.07659874,-88.076027,-88.07452015,-88.07400629,-88.0736636,-88.07342952,-88.07349584,-88.07346155,-88.07306629,-88.07208824,-88.07146334,-88.0708418,-88.06996375,-88.06930896,-88.06843804,-88.06784431,-88.06731886,-88.06688519,-88.06647446,-88.06603368,-88.06542967,-88.06521759,-88.06503356,-88.06473831,-88.06439435,-88.06365635,-88.06307009,-88.0627207,-88.06225248,-88.06202004,-88.06178333,-88.06151838,-88.06122818,-88.06116765,-88.0612251,-88.06133176,-88.06134502,-88.06156335,-88.06223015,-88.06274679,-88.06289529,-88.06294102,-88.06288473,-88.06273831,-88.06261043,-88.06267766,-88.06297133,-88.06368349,-88.06473353,-88.06599757,-88.0665913,-88.06708486,-88.06766214,-88.06778819,-88.06799833,-88.06839321,-88.06901806,-88.07026967,-88.07210049,-88.0733155,-88.07444035,-88.07625661,-88.07665596,-88.07770263,-88.07855293,-88.07946708,-88.08032739,-88.08122114,-88.08189216,-88.08246838,-88.08293568,-88.08463104,-88.08616083,-88.0873734,-88.08796647,-88.0884125,-88.08893009,-88.08969535,-88.09056933,-88.09113124,-88.09190666,-88.09236057,-88.09325804,-88.09417549,-88.0949366,-88.09557005,-88.09613985,-88.0968046,-88.09695861,-88.09724502,-88.09796944,-88.09818181,-88.09871207,-88.09955306,-88.100435,-88.10102636,-88.10168617,-88.10275148,-88.10338875,-88.10384751,-88.10462159,-88.10507414,-88.10590469,-88.10662597,-88.10880204,-88.11030126,-88.11150779,-88.11247331,-88.11392661,-88.11473323,-88.11555525,-88.11628964,-88.1175811,-88.11836292,-88.11901184,-88.11937124,-88.11994459,-88.1205434,-88.12167452,-88.12342337,-88.12402394,-88.12493825,-88.12561292,-88.1267635,-88.12834026,-88.13052334,-88.13122001,-88.13265005,-88.13324217,-88.13350996,-88.1336657,-88.1352555,-88.13576174,-88.13689036,-88.13850168,-88.13973718,-88.14001557,-88.14019442,-88.14082125,-88.14097657,-88.14094557,-88.14037514,-88.14026161,-88.14024355,-88.14052359,-88.14079694,-88.14090402,-88.14144159,-88.14185068,-88.14198308,-88.14225547,-88.14436464,-88.14557173,-88.14641675,-88.14755197,-88.14936164,-88.15025671,-88.15070326,-88.15082578,-88.15154022,-88.15169092,-88.15188132,-88.15204332,-88.15238328,-88.15256304,-88.1526439,-88.15267798,-88.15274236,-88.15289261,-88.15331078,-88.15348876,-88.15431193,-88.1552616,-88.15625412,-88.15660526,-88.15714576,-88.15766987,-88.15788604,-88.15811882,-88.15859056,-88.15867982,-88.15864962,-88.15866419,-88.15875581,-88.15895835,-88.15970581,-88.16021511,-88.16034595,-88.16038894,-88.16028761,-88.16009992,-88.15988495,-88.15959026,-88.15892281,-88.15832672,-88.15794733,-88.15689336,-88.15534755,-88.1545082,-88.15384318,-88.15331481,-88.15287221,-88.15222506,-88.15107145,-88.14787443,-88.1462327,-88.14432366,-88.14303447,-88.14096008,-88.13948247,-88.13868914,-88.13806201,-88.13708897,-88.13667714,-88.13489049,-88.13464783,-88.13436884,-88.13402028,-88.13382895,-88.13364177,-88.13334349,-88.13331421,-88.13282,-88.13193036,-88.13103474,-88.1297502,-88.12862818,-88.12729996,-88.12640522,-88.12564179,-88.12499261,-88.12458443,-88.12364652,-88.12288549,-88.12215125,-88.12134207,-88.12041487,-88.11912244,-88.11768803,-88.11626765,-88.11443828,-88.11270502,-88.11071477,-88.10667286,-88.10478819,-88.10224643,-88.10099617,-88.09971835,-88.09840657,-88.0969306,-88.09571549,-88.09449876,-88.09295138,-88.09197742,-88.0908113,-88.08972596,-88.08881244,-88.08749358,-88.08646254,-88.08534211,-88.08408524,-88.08260988,-88.08140309,-88.08017874,-88.07873188,-88.0778861,-88.07657286,-88.074861,-88.07231142,-88.07040996,-88.06875072,-88.06562984,-88.06357832,-88.06178918,-88.05933307,-88.0580401,-88.05726871,-88.05676567,-88.05626306,-88.05520122,-88.05250752,-88.05161451,-88.0506724,-88.0491829,-88.04790603,-88.04743981,-88.0465763,-88.04458457,-88.04414591,-88.04380817,-88.04336522,-88.04246507,-88.04193128,-88.04126924,-88.04086299,-88.04014102,-88.03960585,-88.03959038,-88.03962658,-88.03949318,-88.03903389,-88.03896637,-88.03897118,-88.03884347,-88.03839599,-88.03782871,-88.03680126,-88.03653742,-88.03626188,-88.03550503,-88.03449164,-88.03326149,-88.03243197,-88.03158214,-88.03068406,-88.02963988,-88.02834762,-88.02632541,-88.02573403,-88.02548619,-88.02490955,-88.02460999,-88.02288636,-88.02090554,-88.01931184,-88.01732493,-88.01548743,-88.01315355,-88.01099125,-88.01010309,-88.00935444,-88.00821235,-88.00597919,-88.00432557,-88.00226504,-88.00036068,-87.99914793,-87.99777299,-87.99649183,-87.99470521,-87.99354082,-87.99225085,-87.99099288,-87.98873088,-87.98737601,-87.98661574,-87.98541012,-87.98457486,-87.98376547,-87.98095945,-87.97692541,-87.97593258,-87.9749372,-87.97192345,-87.97135579,-87.97103359,-87.9706221,-87.97023632,-87.9696099,-87.96879054,-87.96765851,-87.96676221,-87.96560795,-87.96306993,-87.96191646,-87.96078007,-87.95997321,-87.95947054,-87.95893641,-87.9543868,-87.95322714,-87.95234529,-87.95138518,-87.95034665,-87.94903182,-87.94821064,-87.94747082,-87.94653263,-87.94599065,-87.94550721,-87.9448039,-87.9440808,-87.94394424,-87.94281847,-87.94193017,-87.94162767,-87.94114561,-87.94070433,-87.9404018,-87.93993009,-87.93929676,-87.93892919,-87.93878202,-87.93860199,-87.93804428,-87.93642271,-87.93574765,-87.93523829,-87.93467668,-87.9346078,-87.93483475,-87.93502142,-87.93502341,-87.93472128,-87.93447536,-87.93292866,-87.93179424,-87.93084367,-87.9296862,-87.92841551,-87.92709543,-87.92357936,-87.92192405,-87.92007947,-87.9185533,-87.91538184,-87.91366593,-87.91161531,-87.90917752,-87.9078481,-87.90737523,-87.90693865,-87.90658437,-87.9060562,-87.90542766,-87.90496499,-87.90441043,-87.90420263,-87.9040877,-87.90389343,-87.90372449,-87.90364659,-87.90378159,-87.90406261,-87.90428583,-87.90469152,-87.90491809,-87.90511605,-87.90514546,-87.90524408,-87.90548265,-87.90608353,-87.9067505,-87.90715392,-87.9075046,-87.90765637,-87.90766868,-87.90776697,-87.90785524,-87.90808782,-87.9085958,-87.90911355,-87.90970084,-87.91008007,-87.91023523,-87.91027634,-87.91004603,-87.90996514,-87.9100169,-87.91026732,-87.91052294,-87.91139224,-87.91203457,-87.91230265,-87.91277722,-87.91326141,-87.91370582,-87.91418224,-87.9147014,-87.91516166,-87.9157089,-87.91665416,-87.91757707,-87.91909452,-87.91955281,-87.92042643,-87.92100238,-87.92154736,-87.92202424,-87.9232905,-87.92438971,-87.92476215,-87.92506101,-87.92583911,-87.92672805,-87.9274089,-87.92813769,-87.92879498,-87.92954742,-87.93061989,-87.93180991,-87.93252782,-87.93289735,-87.93340581,-87.93369547,-87.93453622,-87.93529161,-87.93630113,-87.93710371,-87.93801701,-87.93898422,-87.93988579,-87.94026203,-87.94085978,-87.94117667,-87.94089416,-87.94099668,-87.94087933,-87.94057879,-87.94021356,-87.93938773,-87.93854834,-87.93814421,-87.93631892,-87.93511,-87.93417272,-87.93385904,-87.93366269,-87.93328181,-87.93206253,-87.93107534,-87.92997323,-87.92746199,-87.92706841,-87.92696187,-87.92679997,-87.92525707,-87.92430209,-87.92377892,-87.92319591,-87.92277625,-87.9224095,-87.92008653,-87.91907455,-87.91797096,-87.91688449,-87.91559366,-87.91473332,-87.91377589,-87.91307305,-87.91260431,-87.91225129,-87.91210564,-87.91196046,-87.91167617,-87.91105132,-87.910477,-87.91002795,-87.90947388,-87.9088548,-87.90811565,-87.9066486,-87.90563569,-87.90528551,-87.90484595,-87.90449174,-87.9038643,-87.90270441,-87.90118522,-87.89885496,-87.89714361,-87.89545968,-87.89439277,-87.89221861,-87.88978581,-87.88845239,-87.88704899,-87.88564588,-87.88395201,-87.88255824,-87.88019683,-87.87890874,-87.87497875,-87.87400024,-87.87057148,-87.86958079,-87.86710289,-87.86612973,-87.86509091,-87.86376346,-87.86243315,-87.86152186,-87.86116689,-87.8604321,-87.86032215,-87.85989436,-87.85824459,-87.85692676,-87.85584337,-87.85475718,-87.85310948,-87.85172681,-87.84806578,-87.84582401,-87.8452242,-87.84481385,-87.84438784,-87.84410759,-87.84261247,-87.84202577,-87.84186261,-87.84172853,-87.84157788,-87.84122537,-87.84062066,-87.84013327,-87.83941951,-87.83879148,-87.83749226,-87.83496673,-87.83363539,-87.83299361,-87.83205579,-87.83097411,-87.83023996,-87.82970093,-87.82697152,-87.82605317,-87.82394054,-87.82238339,-87.81950322,-87.81787259,-87.81581249,-87.81572944,-87.81178298,-87.8085156,-87.80631562,-87.80418718,-87.8016287,-87.80028705,-87.79923398,-87.79735988,-87.79601301,-87.79417738,-87.79210068,-87.78948418,-87.78669624,-87.78420885,-87.78289554,-87.78133473,-87.77957537,-87.77726236,-87.77439679,-87.77122894,-87.77060858,-87.76977976,-87.76824606,-87.76629299,-87.76419086,-87.76279914,-87.76127818,-87.75943153,-87.75739546,-87.75474021,-87.75231669,-87.74966512,-87.74861067,-87.74706445,-87.74459608,-87.74229741,-87.74095697,-87.73928292,-87.73652092,-87.73515888,-87.73334685,-87.72875191,-87.72652207,-87.72479878,-87.72354494,-87.7217896,-87.71867646,-87.71683607,-87.71534093,-87.71420627,-87.71302047,-87.71165711,-87.70989557,-87.70482647,-87.7032933,-87.70076248,-87.69936277,-87.69822759,-87.69703525,-87.69329895,-87.69191954,-87.68963633,-87.68802953,-87.68716295,-87.68604171,-87.68501969,-87.68434259,-87.68321867,-87.68213069,-87.67978955,-87.67919151,-87.6789219,-87.67893943,-87.67904832,-87.67928842,-87.67937409,-87.67930935,-87.67920804,-87.67892718,-87.67831409,-87.67753095,-87.67485114,-87.67311225,-87.67062864,-87.6690038,-87.66818555,-87.66787068,-87.66739298,-87.6668554,-87.66633121,-87.66576007,-87.66521779,-87.66473259,-87.66435757,-87.6636994,-87.66345924,-87.66344235,-87.66349996,-87.66369414,-87.66410445,-87.66451422,-87.66494637,-87.66543188,-87.66593819,-87.66647669,-87.66690418,-87.66795871,-87.66859459,-87.66969066,-87.67081294,-87.67162168,-87.67242746,-87.67336398,-87.67564239,-87.6763292,-87.67676655,-87.67714134,-87.6774826,-87.67779308,-87.67866936,-87.6799672,-87.68081547,-87.68137458,-87.68168407,-87.68173597,-87.68160165,-87.68142172,-87.68126868,-87.68139771,-87.68187091,-87.68208465,-87.68206782,-87.68189048,-87.68132399,-87.68099875,-87.68087061,-87.68084115,-87.68093363,-87.68086326,-87.68064644,-87.68007961,-87.67973895,-87.67965191,-87.67956217,-87.67940553,-87.6788813,-87.67800118,-87.67751099,-87.67676664,-87.67481805,-87.67344671,-87.67253456,-87.67042862,-87.66926029,-87.66853385,-87.66643809,-87.66370903,-87.6614841,-87.65786482,-87.65542716,-87.65347314,-87.65191246,-87.6502651,-87.64792524,-87.64535999,-87.64391049,-87.64153827,-87.63952096,-87.63735265,-87.63447984,-87.63063915,-87.62718676,-87.62479557,-87.62422045,-87.62080798,-87.61983591,-87.61919024,-87.61861254,-87.61790632,-87.61558305,-87.6150522,-87.61444436,-87.61351285,-87.6120636,-87.61050202,-87.61011448,-87.60988589,-87.60926941,-87.60771084,-87.60655265,-87.60527809,-87.60421592,-87.60326138,-87.60162756,-87.60090035,-87.60020484,-87.59932967,-87.59835036,-87.59785941,-87.59710088,-87.59654974,-87.59608285,-87.59541353,-87.59478099,-87.59403924,-87.59290357,-87.59169339,-87.5902742,-87.58916363,-87.58843544,-87.58846423,-87.58858126,-87.58884445,-87.58914188,-87.58918941,-87.58908211,-87.58869451,-87.58850829,-87.58851048,-87.58857702,-87.58914635,-87.58936706,-87.58949095,-87.58951615,-87.58948921,-87.58987665,-87.59161238,-87.59196391,-87.59216708,-87.59223664,-87.59215889,-87.59186128,-87.59156989,-87.59150684,-87.59168662,-87.59210201,-87.59282646,-87.59412764,-87.59620965,-87.59764252,-87.59965073,-87.60129046,-87.60224027,-87.60328799,-87.60481797,-87.60662111,-87.60826528,-87.60918121,-87.61028064,-87.61178976,-87.6130586,-87.6143286,-87.6181528,-87.61950015,-87.62079529,-87.62145251,-87.62175476,-87.62194585,-87.62176325,-87.62168096,-87.6219445,-87.62244531,-87.62344228,-87.62396505,-87.62503362,-87.62559221,-87.62655385,-87.6275151,-87.62806715,-87.62828608,-87.62845197,-87.6283887,-87.62803176,-87.62778549,-87.6276803,-87.6274314,-87.62718457,-87.62708881,-87.62706912,-87.62701836,-87.62679612,-87.62629292,-87.6259556,-87.62566232,-87.62524522,-87.62487659,-87.6244099,-87.62408785,-87.62317012,-87.62269593,-87.62238634,-87.6219597,-87.62174445,-87.62149682,-87.62086753,-87.62062758,-87.62014924,-87.6193219,-87.61873382,-87.61813255,-87.61777119,-87.61761479,-87.61743106,-87.61739199,-87.61740426,-87.61751509,-87.61873093,-87.62028628,-87.62145178,-87.62199761,-87.62232141,-87.62235972,-87.61963551,-87.61833076,-87.61688482,-87.61549883,-87.6143899,-87.61166944,-87.60907195,-87.6074913,-87.60645188,-87.60585024,-87.60505968,-87.60478122,-87.60460768,-87.60471657,-87.60457105,-87.60364043,-87.60356227,-87.6034464,-87.60340321,-87.60346233,-87.60339648,-87.60296687,-87.60206416,-87.6015734,-87.60075915,-87.5999103,-87.59755792,-87.59617116,-87.59496366,-87.59364113,-87.59256995,-87.59209429,-87.59098599,-87.58828953,-87.5871052,-87.5863756,-87.58582843,-87.58454484,-87.58382724,-87.5829646,-87.580729,-87.57918088,-87.57799639,-87.5768156,-87.57572922,-87.57515797,-87.5744463,-87.57411774,-87.57404602,-87.57409579,-87.57435083,-87.5747239,-87.57540389,-87.57610585,-87.57657753,-87.5766628,-87.57651353,-87.57594751,-87.57419742,-87.57360469,-87.57264004,-87.57224698,-87.57141562,-87.57054789,-87.56956747,-87.56838665,-87.56734372,-87.56603113,-87.56474516,-87.56288728,-87.56135492,-87.55847263,-87.55656736,-87.55593285,-87.55251407,-87.55098604,-87.55003082,-87.54725038,-87.54603892,-87.5402483,-87.53659011,-87.53418853,-87.53219954,-87.5309191,-87.53080277,-87.52786685,-87.52369965,-87.52198917,-87.52074464,-87.51980923,-87.51788783,-87.51563878,-87.5115076,-87.51086409,-87.50972011,-87.50878071,-87.506897,-87.50521491,-87.50346691,-87.502028,-87.5010729,-87.50050754,-87.5002022,-87.49928387,-87.4976309,-87.49585632,-87.49174532,-87.48997271,-87.48750231,-87.48528977,-87.48301976,-87.48076749,-87.47899121,-87.4763493,-87.47469705,-87.47298236,-87.47078945,-87.46926659,-87.46604745,-87.46479367,-87.4634034,-87.46201734,-87.4592666,-87.45622741,-87.4522762,-87.45008207,-87.44878427,-87.44799,-87.44595417,-87.44350983,-87.44126422,-87.43925941,-87.43780066,-87.43631133,-87.43330207,-87.43080088,-87.4291602,-87.42830694,-87.42724888,-87.42564357,-87.42415071,-87.42254454,-87.42096943,-87.41939093,-87.41715667,-87.41512074,-87.41406818,-87.41283016,-87.4122317,-87.41091697,-87.40748685,-87.40601211,-87.40444613,-87.4031698,-87.40223825,-87.40159478,-87.4006233,-87.39910649,-87.39791178,-87.39738348,-87.39644847,-87.39578853,-87.39440153,-87.39114998,-87.38858509,-87.38678141,-87.38543382,-87.38365923,-87.38055538,-87.37769698,-87.3757348,-87.37477748,-87.37423709,-87.37345332,-87.37299699,-87.37290733,-87.37310777,-87.37347239,-87.37393562,-87.37407159,-87.37409627,-87.37324359,-87.37179257,-87.37089387,-87.36960161,-87.36921237,-87.36732488,-87.36607093,-87.36367402,-87.36250398,-87.36197094,-87.3610749,-87.35967357,-87.35894699,-87.35776461,-87.35681523,-87.35633595,-87.35473894,-87.35399852,-87.35312471,-87.35273788,-87.35198625,-87.35141728,-87.34871407,-87.34722039],"lat":[37.9125714,37.647219,37.394341,37.46375851,37.46389361,37.46366381,37.46340456,37.46339662,37.46347935,37.46355932,37.46394885,37.46426605,37.46458524,37.46483038,37.46507754,37.46536498,37.46555249,37.4656059,37.46565988,37.46594458,37.46600929,37.46604455,37.46611438,37.46628937,37.46634044,37.46632697,37.46637394,37.46653989,37.46666736,37.46693369,37.46717644,37.46741484,37.46745834,37.46750184,37.46751899,37.46753617,37.46771619,37.46793756,37.46797457,37.46801159,37.46817445,37.46834009,37.46863868,37.46872868,37.46882074,37.4690656,37.46931762,37.47004283,37.47050545,37.47102278,37.47125888,37.47147117,37.47152754,37.47166228,37.47165713,37.47164943,37.47156699,37.47119357,37.47074836,37.4705227,37.47032229,37.47035503,37.47038495,37.47059071,37.47107715,37.47123645,37.47142521,37.4715983,37.47170806,37.47181841,37.47184214,37.47199882,37.47209959,37.4721086,37.47209288,37.47203845,37.47181513,37.47189567,37.47203811,37.47220512,37.47236068,37.47240154,37.47243021,37.47261274,37.47282249,37.47274533,37.47279523,37.47286718,37.47294302,37.47305717,37.4734309,37.47357317,37.47343851,37.47346222,37.47364205,37.47367027,37.47365802,37.47344906,37.47286779,37.47203719,37.47163067,37.47146824,37.47139381,37.47137241,37.47141208,37.47153981,37.4717175,37.47200992,37.47236479,37.47266463,37.47284246,37.47302101,37.4733963,37.47359863,37.47379885,37.47421646,37.47502616,37.47579266,37.4772525,37.47917554,37.47983483,37.48034894,37.48127518,37.48187472,37.48271395,37.48360596,37.4843492,37.48529357,37.48571835,37.4859733,37.48594519,37.48580436,37.48539727,37.48518499,37.48544947,37.48586715,37.48665159,37.48745076,37.48782219,37.48817295,37.4887598,37.48942196,37.49098743,37.49152627,37.49205025,37.49354152,37.49492402,37.49643849,37.49851371,37.4995211,37.50016999,37.50113199,37.5028335,37.50426949,37.50478486,37.50533154,37.50536971,37.50601447,37.50694158,37.50780638,37.50864549,37.5097813,37.51129826,37.51235609,37.51334425,37.51406477,37.5150219,37.51634989,37.51794869,37.51966346,37.52050752,37.52129171,37.52232773,37.52255463,37.5230436,37.5240358,37.52532359,37.52685174,37.5288114,37.52971729,37.53038729,37.53132172,37.53151644,37.53200249,37.5322741,37.53249355,37.53258909,37.53254312,37.53270769,37.53298675,37.53331122,37.53385235,37.53428478,37.53466512,37.53487378,37.53523507,37.53567669,37.53614906,37.53695235,37.53754008,37.53822445,37.53877926,37.53977783,37.54097038,37.54202044,37.54290475,37.54373953,37.54468641,37.54497386,37.54552099,37.5463341,37.54666574,37.54744979,37.54878461,37.54988508,37.55074274,37.55169176,37.55302481,37.55375109,37.55423568,37.55503058,37.55553593,37.55637091,37.55697047,37.55833538,37.55919603,37.55996842,37.56064888,37.5616361,37.56247353,37.56319808,37.56387832,37.56481932,37.56547179,37.56590717,37.56619044,37.56674553,37.56728562,37.56817349,37.56932908,37.56959782,37.57007383,37.57044613,37.57091526,37.57148772,37.57234593,37.5727583,37.57381306,37.57414033,37.57441719,37.57491404,37.57846765,37.57944988,37.58143109,37.58419576,37.58616722,37.58671856,37.58723282,37.58954569,37.59034818,37.59131517,37.59445536,37.59511223,37.59562363,37.59772515,37.5995658,37.60015565,37.60172991,37.60274425,37.60320929,37.60400188,37.60777832,37.60981693,37.61122626,37.61333361,37.61691214,37.61837054,37.61925566,37.61973258,37.62110467,37.62170463,37.62214648,37.62234784,37.62250024,37.62261128,37.62281496,37.62328133,37.62361658,37.62398917,37.62447581,37.62474485,37.62691077,37.62903355,37.63104004,37.63196077,37.6333412,37.63528043,37.63619358,37.63719162,37.64108041,37.64324487,37.64635962,37.64733943,37.64861854,37.64974765,37.65265345,37.65434496,37.65512801,37.65613062,37.65753317,37.65946771,37.66056282,37.66170354,37.66333748,37.66451049,37.66517419,37.6666691,37.66866515,37.66969406,37.67092887,37.67238272,37.67338974,37.67443254,37.67611352,37.68002445,37.68190419,37.68380378,37.68472224,37.68621576,37.68724384,37.68783556,37.68854405,37.68983586,37.69014645,37.69102895,37.69116846,37.69141661,37.69224236,37.6935492,37.69434147,37.69522526,37.69528425,37.69631219,37.69783921,37.69901949,37.70052564,37.70187258,37.70385487,37.70517453,37.70622294,37.70722304,37.7076503,37.70838284,37.70918326,37.70995842,37.71060801,37.71118926,37.71197701,37.71264813,37.7132743,37.71387296,37.71444839,37.71499183,37.71616094,37.71681894,37.71791524,37.71867721,37.71971654,37.72110339,37.72238768,37.72333437,37.7240146,37.72479271,37.72527505,37.72591642,37.72665233,37.72718774,37.72786921,37.72840824,37.72885568,37.72941913,37.73018538,37.73069216,37.73108187,37.73132758,37.73143636,37.73180442,37.73242416,37.73351994,37.73460489,37.73558204,37.73755295,37.73904458,37.74057777,37.74296741,37.74460819,37.74611168,37.74734406,37.74798167,37.74899359,37.75099145,37.75181528,37.75295252,37.75507304,37.7573013,37.75827879,37.7596679,37.76312165,37.76404295,37.76492663,37.76570794,37.76731821,37.76857583,37.77038889,37.77202386,37.77559486,37.7794432,37.77995032,37.78016871,37.78066788,37.78182312,37.7824934,37.78320964,37.7838934,37.78559852,37.787181,37.78989189,37.79082008,37.79142639,37.79247889,37.79368605,37.79522025,37.79627548,37.79712091,37.79780729,37.79841338,37.79906001,37.79983951,37.80002887,37.80001991,37.80023919,37.80046268,37.80098912,37.80142781,37.8016756,37.80185952,37.80194785,37.80176956,37.80142517,37.80114009,37.80088729,37.80061736,37.80033258,37.79997903,37.79933446,37.79881668,37.7984436,37.79797058,37.79739345,37.79653198,37.79586601,37.79499575,37.79415228,37.79290489,37.79228992,37.79204821,37.79190284,37.79181502,37.79154951,37.79022097,37.78839983,37.78784448,37.78714767,37.78476859,37.78419146,37.78354784,37.78252333,37.78189327,37.78120459,37.78054217,37.77990011,37.77932844,37.77811465,37.77605538,37.77521104,37.77407104,37.77324353,37.77298445,37.77282826,37.77194805,37.77176374,37.77172808,37.77179484,37.77190221,37.77220357,37.77263786,37.77313316,37.77341509,37.77357768,37.77408188,37.77504966,37.77616821,37.77640634,37.77877202,37.78068278,37.7813388,37.78189239,37.78282915,37.78348449,37.78415332,37.78567948,37.78694658,37.78747055,37.7878798,37.78833456,37.78945601,37.79004069,37.79078566,37.79199114,37.79241341,37.7934167,37.79440428,37.7951185,37.79584865,37.79619524,37.79745609,37.79819961,37.79866229,37.79915146,37.79961866,37.79999614,37.80075413,37.80121326,37.80182905,37.80232558,37.80333039,37.80396978,37.80494563,37.8061813,37.80684029,37.80712851,37.8075932,37.8082089,37.80945271,37.81087694,37.8116354,37.81250953,37.81316231,37.81427151,37.81515208,37.81606998,37.81678497,37.81767393,37.81894273,37.819473,37.82091878,37.82227582,37.82336694,37.82514926,37.82586035,37.8264418,37.82762917,37.82989569,37.83120144,37.8333082,37.83483211,37.83685788,37.83755593,37.83791071,37.83822446,37.83859905,37.83883196,37.83919273,37.83960609,37.83999745,37.84063263,37.84164367,37.84225503,37.84301848,37.84340876,37.84397686,37.84474035,37.84538445,37.84566656,37.84637694,37.84741396,37.84810016,37.84857627,37.84909069,37.84972508,37.85037154,37.85124075,37.85187624,37.85270263,37.85303206,37.85393552,37.85437749,37.85464832,37.85478169,37.85566417,37.85645979,37.85657651,37.85666646,37.85726397,37.85815411,37.85880218,37.85942944,37.86010064,37.86088334,37.8620015,37.86334612,37.86418783,37.86473453,37.8651722,37.86541751,37.86601933,37.8667209,37.86787312,37.86899826,37.87023465,37.87188554,37.87424433,37.87571458,37.87770199,37.8791569,37.88102539,37.88255633,37.88473837,37.88623497,37.88753769,37.88926381,37.89076903,37.89128613,37.89333025,37.89441515,37.89513442,37.89566426,37.89611635,37.89654301,37.89751683,37.89836748,37.89914195,37.90121714,37.90168455,37.90189257,37.90204664,37.90333884,37.90446424,37.90553631,37.90604982,37.9066935,37.907192,37.90949499,37.91069214,37.91184081,37.91310251,37.91449152,37.91518723,37.9159431,37.91669227,37.91726332,37.91758161,37.91793866,37.91830941,37.91866765,37.91911862,37.91957833,37.92017238,37.92079375,37.92150148,37.92207954,37.92326226,37.92408569,37.92450346,37.92488993,37.92517176,37.92553693,37.92601895,37.92654873,37.927333,37.92775633,37.9279896,37.92803375,37.92786591,37.92738819,37.92715077,37.92683216,37.92658153,37.92635054,37.92606335,37.92535131,37.92487873,37.92310093,37.9227203,37.91991138,37.91880088,37.9171567,37.91635214,37.91512983,37.91333237,37.91197651,37.91054103,37.90976863,37.90789456,37.90695842,37.90606025,37.90261549,37.90047097,37.89973971,37.89903115,37.89777706,37.89688081,37.89485489,37.89336335,37.8928088,37.89221245,37.89100104,37.89053007,37.88895858,37.88831384,37.88781472,37.88687418,37.88338673,37.88256478,37.88183244,37.88126351,37.88059697,37.88014183,37.87948427,37.87816787,37.87747241,37.87714315,37.87700795,37.8767476,37.87652086,37.87645488,37.8765099,37.87650965,37.87619045,37.87596513,37.87570814,37.87564478,37.87558962,37.87559243,37.87550026,37.87527449,37.87529645,37.87527729,37.87549294,37.87566397,37.87568024,37.87539556,37.87531457,37.87535608,37.87557551,37.87601646,37.87658733,37.8775025,37.87813778,37.87910349,37.88028485,37.88187746,37.88380229,37.8860852,37.88659652,37.88702344,37.887788,37.88887085,37.89002004,37.8907189,37.891319,37.89186082,37.8921304,37.89232122,37.89262068,37.89301116,37.89324131,37.89349003,37.89386358,37.89442576,37.89465928,37.89479608,37.89488806,37.89483341,37.8945446,37.89337001,37.89281412,37.89253605,37.89244237,37.89251848,37.89276492,37.89296805,37.8933151,37.89353387,37.89365118,37.89387166,37.89443667,37.89635521,37.89677897,37.8975557,37.8979786,37.89824665,37.89871346,37.90045217,37.90106004,37.90229877,37.9029618,37.90316492,37.90330696,37.90359708,37.90375383,37.90379629,37.90368573,37.9033121,37.90317973,37.90307772,37.90301904,37.9030049,37.90303944,37.90300298,37.90291343,37.90288277,37.90287982,37.90283359,37.9026486,37.90178115,37.90090309,37.89944377,37.89821357,37.89740695,37.89709341,37.89685259,37.89637377,37.89567566,37.8945031,37.89377575,37.89237237,37.89100914,37.88760816,37.88663138,37.88591265,37.88519137,37.88412447,37.88263511,37.88146309,37.88055093,37.879493,37.87863667,37.87754973,37.87679491,37.87529711,37.87449565,37.87319838,37.87184441,37.87069532,37.86943302,37.8682674,37.86554366,37.86464032,37.86387226,37.86282917,37.86183125,37.86117992,37.86017256,37.85898861,37.85797001,37.85702482,37.85627255,37.8554071,37.85424254,37.85312408,37.85197353,37.85087746,37.8485677,37.84759932,37.84682225,37.84626476,37.84526524,37.84455017,37.84368835,37.84315662,37.84165735,37.84095253,37.84020822,37.83919291,37.83855019,37.83793355,37.83721534,37.83665477,37.83594368,37.83473228,37.83393271,37.83307819,37.83113365,37.82987325,37.8292248,37.82834651,37.82803319,37.82799902,37.82751126,37.82717526,37.82704796,37.82656762,37.82631323,37.82608044,37.82606038,37.82617078,37.8262175,37.82625405,37.82631582,37.82645085,37.82672293,37.82711349,37.82758599,37.82819957,37.82869352,37.82931676,37.8295134,37.83022083,37.83060916,37.83089206,37.83105711,37.83106765,37.83184824,37.83208534,37.8324967,37.832986,37.83395524,37.83548942,37.83605454,37.8363308,37.83681575,37.8377139,37.83869564,37.840151,37.84130362,37.84246892,37.84452116,37.84529281,37.84587784,37.84647945,37.84721456,37.8477373,37.84871267,37.85008789,37.85116034,37.85210342,37.85348131,37.85443994,37.85557913,37.85671884,37.85858008,37.86010685,37.86168535,37.86263392,37.86385722,37.86427066,37.86459766,37.86511608,37.86602427,37.86743946,37.86796293,37.86895655,37.87030837,37.87320777,37.87414166,37.87487315,37.87518868,37.87563752,37.87700284,37.88178689,37.88288908,37.88395169,37.88465656,37.88522085,37.88614572,37.88696955,37.88742997,37.88817702,37.88892044,37.88968783,37.89064812,37.8921311,37.89287638,37.89424504,37.89535927,37.89605303,37.89664016,37.89765989,37.89878585,37.89965608,37.90003031,37.90053346,37.90140444,37.90216381,37.90296847,37.90552154,37.90656936,37.90767572,37.90864522,37.90921658,37.90964345,37.91078423,37.91123122,37.91164458,37.91211457,37.91287537,37.91345903,37.91505719,37.91602757,37.9185332,37.92088436,37.92289177,37.92461675,37.92636869,37.92756322,37.92866491,37.92907128,37.92923022,37.92926299,37.92916944,37.92894916,37.92810684,37.92740375,37.92684624,37.9262177,37.92597649,37.92582943,37.92585872,37.92602253,37.92628682,37.92650894,37.92690121,37.92721025,37.92758188,37.92839965,37.92880205,37.9299116,37.93142484,37.9318764,37.93236608,37.9331813,37.93392814,37.93511201,37.93604684,37.93706154,37.93781917,37.93812605,37.93827008,37.93833287,37.93785762,37.93716474,37.93648702,37.93626337,37.93617584,37.93625213,37.93831227,37.9393157,37.94029177,37.94124081,37.94203569,37.9439198,37.94600658,37.94742966,37.94885862,37.95004305,37.95150723,37.95250458,37.9534694,37.95435216,37.95511946,37.95826484,37.95888276,37.96028066,37.96222269,37.96582356,37.96693226,37.96848,37.970463,37.97130372,37.97224974,37.97292573,37.97425362,37.97485976,37.97528038,37.97547209,37.97551356,37.97543515,37.97544972,37.97551239,37.97540105,37.97529637,37.97520053,37.97465673,37.97426412,37.97383114,37.97253507,37.97153316,37.97057021,37.96926454,37.96777815,37.96656469,37.96430133,37.9625182,37.96087806,37.95930953,37.95769526,37.95643625,37.95468419,37.95346817,37.95262304,37.95235255,37.9521372,37.95204502,37.95176515,37.95164179,37.9481854,37.94722733,37.94572666,37.94415375,37.94251326,37.94082912,37.93960365,37.93763652,37.93611469,37.93410922,37.93257536,37.93022301,37.92860551,37.92818467,37.92628539,37.92526978,37.92477825,37.92344868,37.92275573,37.92033052,37.91860814,37.91751491,37.9166317,37.91615942,37.91615084,37.9152496,37.91389371,37.91333778,37.91283874,37.91236043,37.91124661,37.90954913,37.90647962,37.90609989,37.90602773,37.90625255,37.90692822,37.90726441,37.90789338,37.90861593,37.90898515,37.90926686,37.90947603,37.90985845,37.91069877,37.91181971,37.91502295,37.9163106,37.91808237,37.91998489,37.92180992,37.92358107,37.92472856,37.92652866,37.92749983,37.92847122,37.92961092,37.93070781,37.93320833,37.93410074,37.93494021,37.93559007,37.93699378,37.93860075,37.94044536,37.94148172,37.94205868,37.94228717,37.94266875,37.94308845,37.94347571,37.94400577,37.94422308,37.94424234,37.9446095,37.94489787,37.94504832,37.94504672,37.94481186,37.94445699,37.94431822,37.94438291,37.94467241,37.94473667,37.94478956,37.94471538,37.94480027,37.94465636,37.94464903,37.94433381,37.94357049,37.94338659,37.94315794,37.94292795,37.94268282,37.94221184,37.94181,37.94129219,37.94098958,37.94093796,37.94053558,37.94018152,37.9398074,37.93886736,37.93823628,37.93791322,37.9376696,37.93701302,37.93568471,37.93439135,37.93332116,37.93268404,37.93247383,37.9322374,37.93214414,37.93200942,37.93197713,37.93207993,37.93209206,37.93204623,37.93190652,37.93097613,37.9294085,37.92851445,37.92754065,37.92718546,37.92523578,37.92418523,37.92224108,37.92137541,37.92102083,37.92071722,37.92053243,37.92052519,37.92036691,37.92007704,37.91972236,37.91827121,37.91754378,37.91641992,37.91609144,37.91572468,37.91538838,37.91351682,37.9125714]}]],[[{"lng":[-87.003929,-86.95616768,-86.9572338,-86.96676303,-86.97457191,-86.98163498,-86.99998944,-87.05116792,-87.06084923,-87.07049059,-87.09520823,-87.11540186,-87.12990996,-87.25003988,-87.28407667,-87.29898233,-87.30618547,-87.31870699,-87.33598036,-87.37622131,-87.43609453,-87.45943628,-87.47468839,-87.4921413,-87.53699053,-87.53844073,-87.54098994,-87.54293071,-87.54635073,-87.55065394,-87.5515761,-87.55219905,-87.62496129,-87.64905132,-87.66529426,-87.66834663,-87.69419161,-87.70777284,-87.7296429,-87.73377511,-87.74663475,-87.75178249,-87.75772894,-87.81556289,-87.8205343,-87.83155896,-87.8533188,-87.84954446,-87.86005164,-87.87501142,-87.88363279,-87.90356427,-87.91667831,-87.92687501,-88.00001847,-88.00309331,-88.01220343,-88.02671601,-88.03164062,-88.03688261,-88.04309713,-88.04916956,-88.04923032,-88.05284932,-88.05749285,-88.07054103,-88.06863491,-88.06805711,-88.06683555,-88.06581418,-88.06459144,-88.06314807,-88.05989382,-88.05866195,-88.05755943,-88.0570155,-88.05632816,-88.05588281,-88.05567827,-88.05575854,-88.05562475,-88.05509214,-88.05382665,-88.05158209,-88.04854433,-88.04766436,-88.04565694,-88.04486219,-88.04432751,-88.04343646,-88.04266358,-88.04144442,-88.04108083,-88.04089834,-88.04078891,-88.04049744,-88.03995575,-88.03553551,-88.03509283,-88.03457284,-88.03429684,-88.03421612,-88.0339874,-88.03372235,-88.03373295,-88.03374972,-88.03342174,-88.03281419,-88.0326491,-88.03259904,-88.03254143,-88.03267461,-88.03298406,-88.03413964,-88.03440536,-88.03468312,-88.03517001,-88.03655545,-88.03702136,-88.03743166,-88.03758054,-88.03741641,-88.03737137,-88.03741527,-88.03767116,-88.03832648,-88.03906931,-88.03982297,-88.04053874,-88.04141707,-88.04261625,-88.04695521,-88.04911529,-88.05030118,-88.05085289,-88.0517324,-88.05184524,-88.05232768,-88.05301019,-88.05329255,-88.05329472,-88.06520683,-88.09469723,-88.1107587,-88.12507342,-88.13046045,-88.14270525,-88.14671991,-88.053997,-87.003929],"lat":[37.131848,36.64494605,36.64492218,36.64468169,36.64449844,36.64435554,36.64429621,36.6431543,36.64296269,36.64273023,36.64258032,36.64236662,36.64222142,36.6417184,36.64177303,36.64173391,36.64171148,36.64167231,36.6416588,36.64141033,36.64084784,36.6405873,36.64041469,36.64004905,36.63923782,36.63916393,36.63915198,36.63899489,36.63891168,36.63891625,36.63885386,36.63889154,36.63831158,36.63801096,36.63767612,36.6376139,36.63710796,36.63685915,36.63633481,36.63625312,36.63598396,36.63583053,36.63572069,36.63446706,36.63435219,36.63398968,36.63315959,36.66369508,36.66436326,36.66530257,36.66588849,36.66710257,36.66814499,36.66893587,36.67601703,36.67631299,36.67718967,36.67766696,36.67777337,36.67793987,36.67812469,36.67806478,36.67793309,36.67805691,36.67805656,36.67825533,36.66196232,36.65959006,36.65585571,36.65341468,36.65129633,36.64915217,36.64509781,36.64350635,36.64151467,36.64034289,36.63821519,36.63642055,36.63486497,36.63270273,36.63034011,36.62875326,36.62588434,36.62080903,36.6135202,36.61115042,36.60577914,36.60307045,36.60056471,36.59597892,36.5915233,36.58516116,36.58295283,36.58132327,36.57901377,36.57682393,36.57486086,36.56198343,36.56018875,36.55736264,36.55488819,36.55363091,36.55198308,36.5499802,36.54864561,36.54667357,36.5448395,36.54299244,36.54209466,36.54106278,36.53809499,36.53698534,36.53551504,36.53006885,36.52873057,36.52784463,36.52689622,36.52482638,36.52402878,36.52285798,36.52154053,36.5197232,36.51807175,36.5162681,36.51455299,36.5125436,36.51078383,36.50943659,36.50841153,36.50736256,36.50617818,36.50289927,36.50115175,36.50009529,36.49966674,36.49877566,36.49856944,36.49815741,36.49733344,36.497058,36.497058,36.49763293,36.49800878,36.49828405,36.49856694,36.49859279,36.49872449,36.49879639,37.111477,37.131848]}]],[[{"lng":[-85.28093219,-85.076679,-85.183493,-85.9670375,-85.96645624,-85.96490671,-85.96379803,-85.96221946,-85.95917005,-85.95642283,-85.95518786,-85.95463802,-85.95229737,-85.95105135,-85.94974988,-85.94821439,-85.94711444,-85.94488474,-85.94313221,-85.94221585,-85.94161181,-85.94105285,-85.94029125,-85.93960882,-85.93879794,-85.9369545,-85.93479427,-85.93236362,-85.93122064,-85.92836464,-85.92688286,-85.92565419,-85.92342836,-85.92185341,-85.92127547,-85.92065163,-85.91955333,-85.91907252,-85.91891161,-85.91879496,-85.91848273,-85.91803203,-85.91791882,-85.91717969,-85.9170534,-85.91638351,-85.9163284,-85.91631521,-85.91627637,-85.91514235,-85.91428851,-85.91383886,-85.91350229,-85.9133481,-85.91325941,-85.91326718,-85.91323584,-85.91310626,-85.91298306,-85.91200602,-85.91042259,-85.90997338,-85.9090246,-85.90818181,-85.90640195,-85.90526607,-85.90498997,-85.90481126,-85.90441,-85.90421997,-85.90422555,-85.90440316,-85.90425171,-85.90438842,-85.90469385,-85.90505019,-85.90530929,-85.90566857,-85.90590248,-85.90649514,-85.90673315,-85.9072744,-85.90756302,-85.90793815,-85.90812406,-85.90848011,-85.90855881,-85.90875228,-85.90876642,-85.90886812,-85.90912233,-85.90928856,-85.90923566,-85.90913327,-85.90900322,-85.90902702,-85.90894093,-85.90885335,-85.90878377,-85.90848632,-85.90844745,-85.90829426,-85.90829487,-85.90836747,-85.90831112,-85.90796497,-85.90734396,-85.90624374,-85.90406309,-85.90387328,-85.90352939,-85.89976023,-85.89949673,-85.89767737,-85.89506954,-85.89354419,-85.89267091,-85.8920077,-85.88871984,-85.88617998,-85.88428191,-85.88295482,-85.88072411,-85.87852822,-85.87603279,-85.8757304,-85.87508574,-85.87477626,-85.87371403,-85.87308328,-85.87247464,-85.87194456,-85.87130289,-85.86837007,-85.86376824,-85.85965088,-85.85798143,-85.85617812,-85.85563436,-85.85523594,-85.85483767,-85.85235808,-85.8516939,-85.84976685,-85.84795034,-85.84658777,-85.84566692,-85.84438079,-85.84285173,-85.84148792,-85.84065432,-85.84027864,-85.84018851,-85.83934448,-85.83909077,-85.83892261,-85.83887646,-85.83863049,-85.83848525,-85.83839058,-85.83836541,-85.83816689,-85.83818283,-85.83806362,-85.83810388,-85.83807469,-85.83824181,-85.83812709,-85.83796932,-85.83739512,-85.83724818,-85.83730087,-85.83749729,-85.83763314,-85.83763246,-85.83750633,-85.83699299,-85.83675808,-85.8365881,-85.83616809,-85.83545564,-85.83400199,-85.83282475,-85.83201826,-85.83115246,-85.8292157,-85.8277469,-85.82638599,-85.82548945,-85.82453191,-85.82342108,-85.82170605,-85.81952763,-85.81791332,-85.81739944,-85.81646421,-85.81451538,-85.81296882,-85.81216419,-85.81144123,-85.80952361,-85.80842969,-85.80714081,-85.80380862,-85.80160337,-85.79941214,-85.79880077,-85.79726987,-85.79546373,-85.7945007,-85.7937763,-85.79323109,-85.79172254,-85.79122432,-85.78992314,-85.78799669,-85.78690448,-85.78623029,-85.78552474,-85.78305615,-85.7824307,-85.78168692,-85.78130889,-85.78102668,-85.78074266,-85.77951944,-85.77786934,-85.77737628,-85.77698773,-85.77586754,-85.77495995,-85.77399657,-85.77344957,-85.77303493,-85.77276135,-85.77226831,-85.77170381,-85.77142151,-85.77111482,-85.77110605,-85.77117576,-85.77137958,-85.77171412,-85.77220718,-85.77245453,-85.77256948,-85.77249103,-85.77220006,-85.7714073,-85.77005178,-85.76970678,-85.76883565,-85.76754118,-85.76681816,-85.76625369,-85.76599063,-85.76584948,-85.76579888,-85.76589801,-85.76612788,-85.76666774,-85.76704908,-85.76716225,-85.76715696,-85.76691122,-85.76658546,-85.76622315,-85.76567623,-85.76493589,-85.76464499,-85.76438018,-85.76418854,-85.76399683,-85.76374071,-85.76318669,-85.7614883,-85.76093265,-85.75891391,-85.75790891,-85.7567193,-85.75510821,-85.75395348,-85.75147513,-85.74964644,-85.74952283,-85.74867466,-85.74653948,-85.74507653,-85.74321303,-85.74221683,-85.74085658,-85.73857145,-85.73775805,-85.73564874,-85.73498857,-85.73472555,-85.73349399,-85.73256382,-85.73010253,-85.72992647,-85.72939865,-85.72805038,-85.72584323,-85.72465685,-85.72300179,-85.72150013,-85.72009075,-85.71837298,-85.71694429,-85.71479607,-85.71304156,-85.71109888,-85.70884243,-85.70754778,-85.70593418,-85.70476147,-85.70306068,-85.70118388,-85.70072033,-85.69952137,-85.69902297,-85.69818827,-85.69574155,-85.69406515,-85.69231183,-85.69088451,-85.68934731,-85.68795475,-85.6865639,-85.68520789,-85.68347179,-85.68191867,-85.67921313,-85.67820882,-85.6759246,-85.67356701,-85.67267013,-85.6726436,-85.67159592,-85.67057295,-85.66754082,-85.66579922,-85.66144736,-85.65933439,-85.65868907,-85.65833961,-85.6561021,-85.65535543,-85.65226385,-85.65136359,-85.65121081,-85.64951163,-85.64775953,-85.64430998,-85.64244443,-85.6412887,-85.63948439,-85.63902965,-85.63867761,-85.63851918,-85.63836477,-85.63786094,-85.63754586,-85.63686754,-85.6363124,-85.63604614,-85.63577285,-85.63543159,-85.63506182,-85.63460946,-85.6342923,-85.63395411,-85.63365775,-85.63325295,-85.63282691,-85.63233773,-85.63183318,-85.631434,-85.63092976,-85.63060051,-85.63023991,-85.62983738,-85.62957659,-85.62879624,-85.6283382,-85.62755932,-85.62706259,-85.62683137,-85.62627641,-85.62586838,-85.62558478,-85.62530824,-85.6251788,-85.62504569,-85.6240629,-85.62305068,-85.62287158,-85.62202738,-85.6207463,-85.62054286,-85.62047916,-85.62051015,-85.6207245,-85.6203717,-85.61942154,-85.61828088,-85.61638397,-85.61526307,-85.61413518,-85.6130195,-85.61193183,-85.60971242,-85.60888797,-85.60695405,-85.60445679,-85.60067127,-85.5971037,-85.59224524,-85.58603284,-85.58357466,-85.5783759,-85.57491233,-85.57201526,-85.56808139,-85.56622549,-85.56332769,-85.56251039,-85.55753763,-85.55539659,-85.55240721,-85.55042286,-85.54604602,-85.54167104,-85.53924682,-85.53820743,-85.53354525,-85.53092972,-85.52478684,-85.52182212,-85.51914133,-85.51677511,-85.51551365,-85.51425076,-85.50834936,-85.50579541,-85.50339466,-85.5003317,-85.49917217,-85.49850731,-85.49752153,-85.49645023,-85.49469151,-85.49314607,-85.49209228,-85.49041602,-85.4887167,-85.48736268,-85.4863941,-85.48493045,-85.48387561,-85.48279729,-85.48165372,-85.48122089,-85.48115427,-85.48082455,-85.48034377,-85.47984131,-85.4793835,-85.47873378,-85.47781386,-85.47673329,-85.47542163,-85.4751242,-85.47410799,-85.47316629,-85.47167248,-85.46971945,-85.46874209,-85.46686375,-85.46454766,-85.46007997,-85.45855366,-85.45633076,-85.45418164,-85.45175602,-85.44988159,-85.44896319,-85.44727435,-85.44448124,-85.44211107,-85.44047452,-85.43843562,-85.43604569,-85.4331891,-85.4287416,-85.42622668,-85.42338964,-85.42065032,-85.41833103,-85.41704709,-85.41682592,-85.41660429,-85.41625337,-85.4157447,-85.41555941,-85.41585309,-85.41597699,-85.41897097,-85.4201407,-85.42305236,-85.42427234,-85.42559576,-85.4277331,-85.4310147,-85.43283858,-85.43512634,-85.43629961,-85.4374121,-85.43841578,-85.43928444,-85.43972908,-85.43971505,-85.43952705,-85.4396665,-85.43963422,-85.43963444,-85.43946323,-85.43877954,-85.43869121,-85.43859022,-85.4387569,-85.4387202,-85.43809565,-85.43769897,-85.43761278,-85.43873261,-85.438619,-85.43858084,-85.43870533,-85.43922671,-85.44029833,-85.4407086,-85.44104552,-85.4416937,-85.44455548,-85.44638503,-85.44960329,-85.45070042,-85.45211207,-85.45239731,-85.45399602,-85.45504211,-85.45605374,-85.45669293,-85.45691254,-85.45679329,-85.45675472,-85.45631842,-85.45552613,-85.45531122,-85.45472197,-85.45436311,-85.45326281,-85.45272428,-85.45249981,-85.45236141,-85.45208681,-85.45187121,-85.45181829,-85.45152739,-85.45148068,-85.45164946,-85.4516512,-85.45153417,-85.45134759,-85.4509446,-85.45064727,-85.45027825,-85.45018396,-85.44854714,-85.44824277,-85.44755162,-85.44726031,-85.4468223,-85.4443755,-85.44416286,-85.4431788,-85.44144652,-85.43952673,-85.43883161,-85.43770897,-85.43699025,-85.4362987,-85.43540923,-85.43393904,-85.43145145,-85.42835471,-85.42598663,-85.42535135,-85.42478296,-85.42419064,-85.42356949,-85.42341779,-85.42305789,-85.42250079,-85.4214829,-85.41954021,-85.41695983,-85.41598073,-85.41414429,-85.41219114,-85.41023781,-85.40870756,-85.40799424,-85.40548877,-85.40415745,-85.39783356,-85.39256501,-85.39122059,-85.38822011,-85.38584943,-85.38302779,-85.38070989,-85.37939247,-85.37883867,-85.37678403,-85.37586284,-85.37497575,-85.37471311,-85.37450137,-85.37357946,-85.3722647,-85.37047386,-85.3690133,-85.36808361,-85.36702491,-85.3662961,-85.36602261,-85.36584064,-85.36603938,-85.36640482,-85.36656709,-85.36654864,-85.36618454,-85.3652155,-85.36333474,-85.36178465,-85.3607252,-85.36014211,-85.35977704,-85.35879192,-85.35543271,-85.35366052,-85.35260317,-85.35150826,-85.35050424,-85.34979315,-85.34895485,-85.34806008,-85.34754922,-85.34674736,-85.34554208,-85.34402809,-85.3427333,-85.34154671,-85.34063546,-85.33999598,-85.33957685,-85.33862631,-85.33802392,-85.33756779,-85.33664587,-85.33583113,-85.33571872,-85.33565535,-85.33570759,-85.33587211,-85.33618595,-85.33640317,-85.33651118,-85.33649071,-85.3362386,-85.33569247,-85.33474801,-85.33433231,-85.33374996,-85.33309881,-85.33252654,-85.33149823,-85.3303735,-85.32878729,-85.32724681,-85.3258065,-85.32490969,-85.32356871,-85.32232802,-85.32091856,-85.31945813,-85.31808737,-85.31689371,-85.31575315,-85.31456695,-85.31359119,-85.31287313,-85.31223785,-85.3109851,-85.30946548,-85.30794614,-85.30674069,-85.30585813,-85.30532516,-85.3047854,-85.30424692,-85.30371344,-85.30295725,-85.3016994,-85.30080688,-85.29846361,-85.29741705,-85.29679079,-85.29464522,-85.29411018,-85.2937122,-85.29362132,-85.2935798,-85.29337054,-85.29320041,-85.29304158,-85.29291955,-85.29284581,-85.28926691,-85.28625987,-85.28310112,-85.28093219],"lat":[38.74176632,38.42201,37.819669,38.0029151,38.00294562,38.00299033,38.00307543,38.00326845,38.00375107,38.00433468,38.00455379,38.00465706,38.00481146,38.0048184,38.00483845,38.00496875,38.00508527,38.00584488,38.00662218,38.00726703,38.00790583,38.00851849,38.0092866,38.00982117,38.01034085,38.01159952,38.01320677,38.01499153,38.01601765,38.0185472,38.02022329,38.02178434,38.02524727,38.02876138,38.03032005,38.0323058,38.03712231,38.04017753,38.04119461,38.04255897,38.04726033,38.05064029,38.05125696,38.05612989,38.05712489,38.05963318,38.06060135,38.06092606,38.06295769,38.0676382,38.07028472,38.07196129,38.07293186,38.07312363,38.07306471,38.07264518,38.07183851,38.0713595,38.07142626,38.07340008,38.07692228,38.07804473,38.08030755,38.0818136,38.08628961,38.08893301,38.08981832,38.09325482,38.09661741,38.09879201,38.09980191,38.10162859,38.10317289,38.10621556,38.10851649,38.1101871,38.11110468,38.11334717,38.11546283,38.11874034,38.11950351,38.1239297,38.12557702,38.12785178,38.12944846,38.13172324,38.13273784,38.13379349,38.13552426,38.13672837,38.13850136,38.14223464,38.14347737,38.14438716,38.14616138,38.14672433,38.14711578,38.14843063,38.14920103,38.15159957,38.15291984,38.15445518,38.15555916,38.15695688,38.15824904,38.16147285,38.16385051,38.16826099,38.17342735,38.1741416,38.1744002,38.18044388,38.18086506,38.18359636,38.18702823,38.18901486,38.18996199,38.19067198,38.1945432,38.197547,38.19957033,38.20081519,38.20279008,38.20481504,38.20677368,38.20700537,38.20755806,38.20773961,38.20835105,38.20889478,38.2091824,38.20959144,38.20987837,38.21170205,38.21473557,38.21725973,38.21818946,38.21925386,38.21992439,38.22003735,38.22025464,38.22194226,38.22244537,38.2248101,38.22661308,38.22817195,38.22949702,38.23104757,38.23325873,38.23543061,38.23706313,38.23732089,38.23764429,38.23937091,38.23972876,38.24030835,38.2410155,38.24209012,38.24288177,38.24379973,38.24457004,38.24455923,38.24478442,38.24557672,38.24574834,38.24606761,38.24607845,38.24766786,38.2482433,38.24999027,38.2509124,38.25570774,38.2568493,38.25832871,38.25924385,38.26009385,38.26188197,38.26352431,38.2640723,38.26528979,38.2666661,38.26871509,38.27036629,38.27178179,38.27320626,38.27650769,38.27772796,38.27887261,38.27941759,38.27990355,38.28040196,38.28111906,38.28188102,38.28236049,38.28238685,38.2826208,38.28307431,38.28346439,38.28359117,38.28357505,38.28392066,38.28402213,38.28427474,38.28456531,38.28477707,38.28509311,38.28523063,38.28569743,38.28628235,38.28674543,38.28722971,38.28736382,38.2874783,38.2875279,38.28782971,38.28835489,38.28853303,38.2885442,38.288541,38.28833988,38.28834212,38.28851531,38.28852022,38.28847635,38.28835219,38.28770372,38.28684869,38.28654605,38.28644729,38.28630955,38.28623287,38.28622278,38.28617207,38.28610417,38.28592094,38.28558736,38.28534722,38.28512346,38.28476854,38.28460176,38.28453924,38.28462229,38.28490989,38.28513154,38.28514317,38.28504497,38.2848143,38.28459536,38.28410466,38.28313961,38.28292413,38.28232972,38.28132896,38.28089794,38.28056781,38.28034403,38.28002274,38.27958065,38.27908153,38.27871008,38.27820609,38.27769183,38.27732386,38.27713024,38.27659136,38.27630855,38.27620975,38.27618165,38.27603895,38.27589619,38.27568136,38.27530102,38.27458707,38.27416078,38.27353336,38.27226688,38.27197721,38.27120781,38.27079185,38.27019805,38.26929808,38.26879012,38.26799792,38.26761349,38.2675805,38.26736837,38.26716995,38.26719048,38.26728308,38.26747524,38.26786646,38.26886444,38.26909024,38.27029762,38.27055154,38.27074238,38.27149052,38.27193113,38.27305802,38.27343488,38.27371284,38.27442383,38.2754635,38.27612166,38.27693753,38.27747543,38.27812661,38.27889163,38.27963815,38.28062821,38.28143776,38.28227747,38.28335662,38.2840674,38.28490161,38.285506,38.28637928,38.28730943,38.28759209,38.28817858,38.28838501,38.28874025,38.2898081,38.29050139,38.29136967,38.2919889,38.29272888,38.2933666,38.29404484,38.29469221,38.29558716,38.29642588,38.29800879,38.29872697,38.30047689,38.30232489,38.30353119,38.30391836,38.30598343,38.30769768,38.3108893,38.31303273,38.31774114,38.31972221,38.32007115,38.32081505,38.32326281,38.32384916,38.32879232,38.33074198,38.33156087,38.33514577,38.33904094,38.34601698,38.35319071,38.35653917,38.36086594,38.36293393,38.36394762,38.36605502,38.37701565,38.38026303,38.38212931,38.38424794,38.38569248,38.38639657,38.38714598,38.38784037,38.38891302,38.39036318,38.39125601,38.39219411,38.39316797,38.39429893,38.39564132,38.39714495,38.39842749,38.39929278,38.40037282,38.40112557,38.4018831,38.40261247,38.40311471,38.404421,38.40496563,38.4064298,38.40711304,38.40766887,38.40874883,38.40960861,38.41012798,38.41062538,38.41081751,38.41108165,38.41232731,38.41438774,38.41502121,38.41678185,38.41983534,38.42042758,38.42092246,38.42116211,38.42232663,38.42346241,38.42484806,38.42635296,38.42808359,38.4292466,38.4303732,38.43148611,38.43253658,38.43481721,38.43600594,38.43857387,38.44081978,38.44295964,38.44510245,38.44748643,38.45009218,38.450824,38.45201794,38.45257509,38.45276578,38.45282568,38.45279402,38.45325426,38.45332503,38.45335414,38.45352156,38.4536059,38.45392383,38.45440177,38.45480672,38.45504273,38.45521386,38.45588578,38.456448,38.4576365,38.45869006,38.45939473,38.46054957,38.46079078,38.46145487,38.46385808,38.46466357,38.46611533,38.46763497,38.46812955,38.46849472,38.4692258,38.46996014,38.47149612,38.47295023,38.47412116,38.47599229,38.47792994,38.47950309,38.48073867,38.48266169,38.48404946,38.48565754,38.48741369,38.48825025,38.48880408,38.49011039,38.49163605,38.49336484,38.49480469,38.49617549,38.4978484,38.49996988,38.50312468,38.50368893,38.50490578,38.50582622,38.50717164,38.50887639,38.50949465,38.51083977,38.51194906,38.51404915,38.51467766,38.51557217,38.51636797,38.51725088,38.5179333,38.51816025,38.51875941,38.51970921,38.52065109,38.52124615,38.52193138,38.52295343,38.52437509,38.52707337,38.52902639,38.53184485,38.53542132,38.53923784,38.54172614,38.54308817,38.54453601,38.54559009,38.54672271,38.55322649,38.56282754,38.56365367,38.57132232,38.5733163,38.57806846,38.58021561,38.58272551,38.58552523,38.59030014,38.59287441,38.59662645,38.59839033,38.60090158,38.60390674,38.60740579,38.6114934,38.61315596,38.61704625,38.61965236,38.62726637,38.63051053,38.63580665,38.63892888,38.64035644,38.64311708,38.64549326,38.64671438,38.64825585,38.6493181,38.65023631,38.6553107,38.65650819,38.65807114,38.65885675,38.659769,38.66099501,38.66252822,38.66318121,38.66477613,38.6696709,38.6718852,38.67500085,38.67650622,38.67821005,38.678705,38.68007772,38.68126305,38.6836152,38.68626365,38.68871748,38.69049573,38.69225221,38.69403996,38.69763829,38.69836057,38.69938945,38.70148009,38.70409196,38.70555817,38.70733479,38.70819383,38.70978495,38.71023745,38.71032173,38.71034095,38.70975873,38.70833275,38.70790511,38.70782247,38.70803616,38.70888218,38.71004079,38.71159053,38.71193141,38.71369825,38.714005,38.71460458,38.71471777,38.71512647,38.71778831,38.71794289,38.71901598,38.72130828,38.72399061,38.72509464,38.72697588,38.72783136,38.72848437,38.72909432,38.72984962,38.73080741,38.73195089,38.73280246,38.73298335,38.73309713,38.73307075,38.7332338,38.73383538,38.73435814,38.73468816,38.73498532,38.73551326,38.73635723,38.73657826,38.73685937,38.73698633,38.73713518,38.73715071,38.73713631,38.73691772,38.73675047,38.73562341,38.73449707,38.73414913,38.7334097,38.73290417,38.73251387,38.7319857,38.73187729,38.73186115,38.73127402,38.73114345,38.73119489,38.73114118,38.73107052,38.73073332,38.73044977,38.7303837,38.73049845,38.73064786,38.73100692,38.73128118,38.73129472,38.73123852,38.731106,38.73093561,38.7307487,38.73059077,38.73049557,38.73046841,38.73050078,38.73064538,38.73080667,38.73103676,38.73112204,38.73115314,38.73136309,38.73141004,38.73149439,38.73172687,38.73200083,38.73222977,38.73232165,38.73247996,38.73263471,38.73279473,38.73301235,38.73326116,38.73349013,38.73380729,38.73409591,38.73435248,38.73439637,38.73418441,38.73408623,38.73416085,38.73446719,38.73472592,38.73476466,38.73481385,38.73487715,38.73492513,38.73489805,38.73492764,38.73503786,38.73524921,38.73550711,38.73569259,38.73595428,38.73599744,38.73607501,38.73622786,38.73637757,38.73658332,38.73678804,38.73708583,38.73734741,38.73756535,38.73775987,38.73806533,38.73831759,38.73864888,38.73900189,38.73930171,38.73958638,38.73979567,38.73999935,38.74019691,38.74038921,38.74051114,38.74071382,38.7409752,38.74119681,38.74140029,38.74153569,38.74154606,38.74153371,38.74158044,38.74168482,38.74179116,38.74195733,38.74200339,38.74194237,38.74195422,38.74203077,38.74203081,38.74208573,38.74210276,38.74206055,38.74196564,38.7417912,38.74180699,38.74198006,38.74215876,38.74217083,38.74235746,38.74220576,38.74192917,38.74176632]}],[{"lng":[-86.27621101,-86.40129512,-86.40024026,-86.39867279,-86.39749212,-86.39614636,-86.39535513,-86.39499542,-86.39439555,-86.39359464,-86.39335786,-86.39293305,-86.39255192,-86.39184007,-86.39135359,-86.39082738,-86.38939172,-86.38876626,-86.38840676,-86.3882625,-86.38780784,-86.38695279,-86.38539039,-86.38371515,-86.38116217,-86.3795713,-86.37686968,-86.37595297,-86.3750829,-86.37445421,-86.37331955,-86.37202528,-86.37089145,-86.36961013,-86.36798996,-86.36579237,-86.36458326,-86.35996548,-86.35863626,-86.35701692,-86.35375149,-86.35239768,-86.3504156,-86.34823866,-86.34678929,-86.34473482,-86.34314174,-86.34055595,-86.33837109,-86.33545019,-86.3336649,-86.33209887,-86.3307983,-86.32911123,-86.32718773,-86.32555114,-86.32442294,-86.32384678,-86.32341673,-86.32284351,-86.32224455,-86.32195919,-86.32192633,-86.32171382,-86.32159672,-86.32145112,-86.32121404,-86.32119074,-86.32124006,-86.32138619,-86.32180398,-86.32255837,-86.32296006,-86.32393291,-86.32468451,-86.32509671,-86.3258743,-86.32802783,-86.32914098,-86.33098093,-86.33370347,-86.33658404,-86.33980048,-86.34142259,-86.3448565,-86.34650081,-86.35008001,-86.35232747,-86.35397294,-86.35590596,-86.35755075,-86.36072018,-86.36313939,-86.36605455,-86.36898596,-86.37119012,-86.37233092,-86.37465267,-86.37657327,-86.37735508,-86.37820598,-86.37857906,-86.37862551,-86.37819272,-86.37741007,-86.37618587,-86.37485237,-86.37381768,-86.37307303,-86.37247005,-86.37095187,-86.36750394,-86.36463013,-86.36170575,-86.35977201,-86.35771679,-86.3561184,-86.35003835,-86.34773599,-86.34567389,-86.34188879,-86.33946343,-86.33650052,-86.333479,-86.33141527,-86.33093157,-86.3296002,-86.32904088,-86.32599688,-86.32097669,-86.31864723,-86.31714575,-86.31318613,-86.30634615,-86.30126182,-86.2957397,-86.2931959,-86.29140248,-86.28834661,-86.28711044,-86.28635897,-86.28375976,-86.28043281,-86.27776216,-86.27652459,-86.27550671,-86.27284724,-86.27124028,-86.27060521,-86.27067646,-86.27044145,-86.27016744,-86.2702691,-86.27064912,-86.27149451,-86.27201988,-86.2731944,-86.2734818,-86.27369342,-86.27356965,-86.27418266,-86.2749734,-86.27676601,-86.27720495,-86.27802064,-86.27824285,-86.27876685,-86.27910021,-86.27898541,-86.2787162,-86.27875648,-86.27869214,-86.27858539,-86.2784315,-86.27770443,-86.27746715,-86.27681812,-86.27621101],"lat":[38.07522094,38.10447413,38.10473586,38.10533147,38.10604169,38.10715237,38.10828409,38.10868769,38.10964459,38.11106879,38.1118157,38.11372463,38.11466456,38.11714833,38.11876304,38.11981496,38.12222783,38.12286008,38.12329939,38.12369973,38.12439155,38.12501335,38.1262583,38.12732665,38.12882265,38.12940029,38.13019253,38.1305393,38.13063796,38.13050877,38.13035825,38.1302566,38.13041292,38.130397,38.13019469,38.13016015,38.13005042,38.12934043,38.12941868,38.12931099,38.12857663,38.12840708,38.12793587,38.12765375,38.12769955,38.12751287,38.12763483,38.12773703,38.12798204,38.12858292,38.12923504,38.12992933,38.13077333,38.13199891,38.13389362,38.13580888,38.13760908,38.1384124,38.13967227,38.14085869,38.14231506,38.14340396,38.14409756,38.1451689,38.14576337,38.14605036,38.14663988,38.14700455,38.14731122,38.1477671,38.14895006,38.15047743,38.15115176,38.15237395,38.15286943,38.1533267,38.15402939,38.15478578,38.15503093,38.1557126,38.15649831,38.15725369,38.1580293,38.15840773,38.15896719,38.15908045,38.15931635,38.15938728,38.15963089,38.15974043,38.15990705,38.16042899,38.16086137,38.16153071,38.16268599,38.16378873,38.16460589,38.16705155,38.16935508,38.17109001,38.17419494,38.17857249,38.18279527,38.18569007,38.18857432,38.19048806,38.19224312,38.19333263,38.1941577,38.19465453,38.1955749,38.19730457,38.19821275,38.19869752,38.19884002,38.19880666,38.19846882,38.19627197,38.19536297,38.19381899,38.19132863,38.1893683,38.18674254,38.18437307,38.18254532,38.18231768,38.18180517,38.18146398,38.17905804,38.17547863,38.17363549,38.17291013,38.17121543,38.16879609,38.16665244,38.16406915,38.16273799,38.16150148,38.15885638,38.15793859,38.15719914,38.15392091,38.14976364,38.14663801,38.14547707,38.14440716,38.14083508,38.13781994,38.13577887,38.13528351,38.13401167,38.1313964,38.12978318,38.12796559,38.12460453,38.12294895,38.12067606,38.12002462,38.11825027,38.11746539,38.11665388,38.11493259,38.10992366,38.10788052,38.10433008,38.10307885,38.10200474,38.10075441,38.10000998,38.09881865,38.09691733,38.09206769,38.08929577,38.08599612,38.08248141,38.07990712,38.07756882,38.07522094]}],[{"lng":[-86.40455711,-86.46310619,-86.4616863,-86.46098826,-86.45995501,-86.45903977,-86.4577491,-86.45574167,-86.4540005,-86.45121695,-86.4487726,-86.44600852,-86.4432065,-86.43968832,-86.43805613,-86.43548832,-86.43356557,-86.43234434,-86.43089143,-86.42954115,-86.42802681,-86.42522618,-86.42338702,-86.4213604,-86.4189995,-86.41820115,-86.41739067,-86.41696776,-86.41706202,-86.41699439,-86.41655816,-86.41494396,-86.41249345,-86.40936282,-86.40603306,-86.40455711],"lat":[38.105237,38.11892977,38.12050237,38.12111621,38.12176097,38.12238712,38.12355312,38.12503094,38.12582474,38.12686632,38.12738682,38.12773885,38.1277622,38.12741203,38.12705218,38.12682818,38.12662511,38.1263356,38.1258057,38.12528139,38.12449433,38.12275482,38.12121364,38.11950945,38.11753727,38.11709212,38.1168447,38.11677915,38.11663581,38.11645973,38.11607907,38.11477753,38.11285443,38.11008103,38.10657607,38.105237]}]],[[{"lng":[-87.382126,-86.984531,-87.003929,-88.053997,-88.129262,-87.382126],"lat":[37.647219,37.183973,37.131848,37.111477,37.394341,37.647219]}]],[[{"lng":[-83.22116142,-83.27589,-83.498003,-83.731162,-84.333341,-84.21298805,-84.21275128,-84.21200993,-84.21064439,-84.20894722,-84.20587911,-84.20466656,-84.2025627,-84.19894316,-84.19800381,-84.19573068,-84.19447116,-84.19217546,-84.19085595,-84.18825953,-84.18573844,-84.1774572,-84.17400924,-84.1689207,-84.16353841,-84.15852657,-84.15661977,-84.15587211,-84.15484179,-84.14721191,-84.14455827,-84.13968336,-84.13766543,-84.13594239,-84.13331122,-84.12491124,-84.11953908,-84.11803657,-84.11644262,-84.1150748,-84.11378367,-84.11256767,-84.11062487,-84.1102341,-84.11011552,-84.11024096,-84.11081695,-84.11170768,-84.11165811,-84.11058467,-84.10985966,-84.1088633,-84.10717831,-84.10226021,-84.09708485,-84.09444341,-84.0925761,-84.09181369,-84.08865392,-84.08641686,-84.08499507,-84.08193664,-84.07803797,-84.07604949,-84.07463775,-84.07164791,-84.07077861,-84.06884862,-84.0655819,-84.06348019,-84.05377194,-84.05270892,-84.05111088,-84.05031576,-84.04880945,-84.04540132,-84.04457599,-84.04375253,-84.0389564,-84.03569833,-84.03452262,-84.02979989,-84.02745361,-84.02595495,-84.0240064,-84.02279181,-84.02033726,-84.01956916,-84.01842637,-84.01685022,-84.01343298,-84.0102696,-84.00755224,-84.00627783,-84.00341124,-84.00034276,-83.99829294,-83.99669814,-83.99582121,-83.99553781,-83.99469768,-83.99381952,-83.9914839,-83.98968204,-83.98878759,-83.98809158,-83.98703616,-83.98542276,-83.98423133,-83.98301338,-83.98203684,-83.98093657,-83.98029873,-83.97982221,-83.9791644,-83.97865477,-83.97793179,-83.97733968,-83.97632476,-83.97537193,-83.97377388,-83.97309482,-83.97219447,-83.97117659,-83.97005074,-83.96880584,-83.96655627,-83.96443524,-83.9634911,-83.96243371,-83.96184244,-83.96130984,-83.96045698,-83.95944683,-83.95884454,-83.95736946,-83.95693469,-83.95637376,-83.95510719,-83.95405749,-83.95250197,-83.95069892,-83.94858417,-83.9471478,-83.94502527,-83.94362324,-83.94170834,-83.94050151,-83.93928766,-83.93847638,-83.93768831,-83.93579361,-83.9341777,-83.93293336,-83.93165015,-83.93011317,-83.92890945,-83.92755676,-83.92662307,-83.92631808,-83.92611155,-83.92608676,-83.92613564,-83.92647746,-83.92693319,-83.9276968,-83.92822022,-83.92854897,-83.92864051,-83.92843818,-83.92781391,-83.92661502,-83.9256611,-83.92525405,-83.92403597,-83.92308609,-83.92195728,-83.92057594,-83.91938028,-83.91837269,-83.91714897,-83.91513565,-83.91408575,-83.91313314,-83.91258598,-83.91123331,-83.91056346,-83.90892488,-83.90616508,-83.90390102,-83.90189019,-83.90123867,-83.90058887,-83.89914234,-83.89740856,-83.89643041,-83.89426942,-83.89245894,-83.89127502,-83.89066878,-83.89021509,-83.88988096,-83.8892562,-83.88835572,-83.88767625,-83.88728705,-83.8868043,-83.88506014,-83.88411862,-83.88309421,-83.88177265,-83.88100872,-83.87995117,-83.87954536,-83.87915575,-83.87893764,-83.87854265,-83.87836194,-83.87820232,-83.87780098,-83.87750435,-83.87708189,-83.87602694,-83.87436006,-83.87294893,-83.87192733,-83.87122919,-83.87019947,-83.86895806,-83.86811888,-83.86710142,-83.86633182,-83.86573184,-83.86522426,-83.86450161,-83.86382352,-83.86324575,-83.86279305,-83.86217798,-83.86154987,-83.8610648,-83.86071279,-83.85997292,-83.85937599,-83.85864233,-83.858316,-83.85778185,-83.85730753,-83.85700553,-83.85665153,-83.85628858,-83.85597403,-83.85574824,-83.85556029,-83.85545736,-83.85544394,-83.8554662,-83.85537264,-83.85519426,-83.85477088,-83.85422787,-83.85378841,-83.85338153,-83.85306263,-83.85288895,-83.85258987,-83.85237923,-83.85212283,-83.85188373,-83.85179529,-83.85090447,-83.84889089,-83.84833105,-83.84784161,-83.84728769,-83.84660889,-83.84620741,-83.8460114,-83.84572047,-83.84500588,-83.8447899,-83.84445755,-83.84390608,-83.84349579,-83.84337419,-83.84313937,-83.84290579,-83.84242637,-83.84235511,-83.84155627,-83.84103275,-83.84065696,-83.84026424,-83.83996561,-83.83950173,-83.83920412,-83.83850311,-83.83788483,-83.83719902,-83.83619233,-83.83523385,-83.83316,-83.83018822,-83.82790959,-83.82660672,-83.82578433,-83.82474842,-83.82397862,-83.82244724,-83.82158752,-83.81951845,-83.81801693,-83.81635257,-83.81423223,-83.8126353,-83.81141111,-83.80834018,-83.80699101,-83.8049948,-83.80278985,-83.80214619,-83.80125016,-83.8006811,-83.80037772,-83.79997175,-83.79951777,-83.79883509,-83.79810682,-83.79660714,-83.79199567,-83.79050158,-83.78921236,-83.78800065,-83.78684445,-83.78521534,-83.78438617,-83.78390486,-83.78365438,-83.7834755,-83.78331296,-83.78306804,-83.78254051,-83.78214153,-83.78145918,-83.78103007,-83.78032784,-83.77986603,-83.77934564,-83.77915137,-83.77898572,-83.77854927,-83.77822286,-83.77802508,-83.77748704,-83.77676708,-83.77631264,-83.77573243,-83.77500751,-83.77455674,-83.77423968,-83.77396645,-83.7738877,-83.77384099,-83.77363098,-83.77303533,-83.77231883,-83.77148702,-83.77074664,-83.77017801,-83.76912041,-83.7678207,-83.76654807,-83.76524293,-83.7641882,-83.76319599,-83.76193529,-83.75951997,-83.75781819,-83.75482497,-83.75159075,-83.75059004,-83.74874731,-83.74659635,-83.74442342,-83.74226892,-83.73962871,-83.73811067,-83.73441072,-83.73367661,-83.73179554,-83.73019632,-83.72926359,-83.7282363,-83.7252813,-83.72349673,-83.72219319,-83.72102259,-83.72036683,-83.71954022,-83.71865801,-83.71800839,-83.71770834,-83.717478,-83.71712335,-83.71669435,-83.71514043,-83.71467124,-83.71379312,-83.71347544,-83.71317649,-83.71191548,-83.71132439,-83.71092296,-83.71070757,-83.71032116,-83.71014562,-83.70995256,-83.70974415,-83.70952745,-83.70848208,-83.70776292,-83.70698153,-83.70649169,-83.70589058,-83.70531088,-83.70499294,-83.7047042,-83.70389131,-83.70279262,-83.70141118,-83.69981635,-83.6966995,-83.69249745,-83.69026891,-83.68851872,-83.68603656,-83.68456041,-83.68152287,-83.67812462,-83.67486503,-83.67414725,-83.67304087,-83.67256488,-83.67147272,-83.67029774,-83.66871782,-83.66801647,-83.66708014,-83.66619951,-83.66209689,-83.659566,-83.65666013,-83.6548556,-83.65411923,-83.65254649,-83.65042366,-83.64914079,-83.64828588,-83.64780678,-83.64557364,-83.64491345,-83.64449832,-83.64429671,-83.64405368,-83.64380803,-83.64358465,-83.6433096,-83.64316471,-83.64297085,-83.6428254,-83.64272545,-83.64266039,-83.64248796,-83.64217368,-83.64192473,-83.64170901,-83.64159373,-83.64150584,-83.64145801,-83.64137624,-83.64128952,-83.64107287,-83.64088941,-83.6406589,-83.64047778,-83.64017941,-83.63991817,-83.63969325,-83.63934436,-83.63916976,-83.63906152,-83.63890268,-83.63881567,-83.63882776,-83.63887301,-83.63889908,-83.63891827,-83.63887854,-83.63881779,-83.6386999,-83.63865862,-83.63857499,-83.63853542,-83.638437,-83.63833306,-83.63820079,-83.63800217,-83.6377815,-83.63760003,-83.63744213,-83.63734676,-83.63727577,-83.6371633,-83.63696798,-83.6368439,-83.6367075,-83.63649129,-83.63621172,-83.63578165,-83.63548877,-83.63515323,-83.63490116,-83.63442494,-83.63421173,-83.63393514,-83.63338068,-83.63280565,-83.63206092,-83.63152984,-83.63068749,-83.63036312,-83.62982417,-83.62928053,-83.62856563,-83.62795067,-83.62735586,-83.62674383,-83.62602265,-83.62552972,-83.62521908,-83.62495836,-83.6248818,-83.62472813,-83.62446084,-83.62405186,-83.62364339,-83.62313531,-83.62264256,-83.62235306,-83.6221844,-83.62183203,-83.6213604,-83.62098086,-83.62066282,-83.62021798,-83.61996524,-83.61945553,-83.61880866,-83.618104,-83.61788454,-83.61739927,-83.61688546,-83.61644776,-83.61589235,-83.61526545,-83.61467463,-83.61413588,-83.61343084,-83.61278663,-83.61210517,-83.61141008,-83.61086102,-83.61018055,-83.60956888,-83.60891049,-83.6086786,-83.60810997,-83.60674288,-83.60646644,-83.60602892,-83.6055249,-83.60503476,-83.60456203,-83.60404622,-83.60333833,-83.60300122,-83.60271219,-83.60226203,-83.60174199,-83.60113663,-83.60070964,-83.60038697,-83.59991978,-83.59961576,-83.59934106,-83.5989563,-83.59850913,-83.59810763,-83.59779985,-83.59700821,-83.5966521,-83.5962448,-83.59532074,-83.59475853,-83.59444079,-83.59423683,-83.59404565,-83.59365676,-83.59344484,-83.59310666,-83.59242399,-83.59191198,-83.59119214,-83.59046276,-83.58938984,-83.58899099,-83.58860483,-83.58806002,-83.58695568,-83.58636108,-83.58526174,-83.58464718,-83.58415122,-83.58346556,-83.58285748,-83.58217722,-83.58179644,-83.58147129,-83.58076247,-83.58001255,-83.57925873,-83.5786983,-83.57813829,-83.5775202,-83.57716276,-83.57667046,-83.57606705,-83.57541261,-83.57527378,-83.57477552,-83.57426259,-83.57374001,-83.57287039,-83.57207196,-83.57133497,-83.57078581,-83.57010496,-83.56938236,-83.56882618,-83.56819311,-83.56758026,-83.56678443,-83.56579193,-83.56515696,-83.56427166,-83.56358214,-83.56287044,-83.56220959,-83.5616603,-83.56073968,-83.55999576,-83.55958179,-83.55918072,-83.55856151,-83.55764511,-83.55704905,-83.55621877,-83.55569906,-83.55523333,-83.5545725,-83.55432023,-83.55376413,-83.55298459,-83.55212738,-83.5515784,-83.55085557,-83.55026082,-83.54937579,-83.54832815,-83.5475577,-83.54688752,-83.54638446,-83.54598177,-83.54522405,-83.54460673,-83.54367645,-83.54287007,-83.54232516,-83.54111201,-83.54016552,-83.53954182,-83.53878838,-83.53824857,-83.53733481,-83.53678043,-83.53593777,-83.53494037,-83.53389461,-83.53340207,-83.53287663,-83.53213287,-83.53151558,-83.53063023,-83.53005459,-83.52957197,-83.52896186,-83.52843689,-83.52814862,-83.52701265,-83.52660924,-83.52601029,-83.52544176,-83.52476957,-83.52406644,-83.5234205,-83.52297726,-83.52264281,-83.52206777,-83.52131996,-83.5210775,-83.52075532,-83.52008369,-83.51886683,-83.51842965,-83.51783433,-83.51689026,-83.51608021,-83.51515327,-83.51467909,-83.51363503,-83.51276313,-83.51199467,-83.51142254,-83.51081548,-83.5103735,-83.50980225,-83.50929544,-83.50870735,-83.50790564,-83.50681261,-83.50621935,-83.50557965,-83.50474181,-83.50406111,-83.50325986,-83.50226209,-83.50185175,-83.5013323,-83.50079565,-83.50026579,-83.49991898,-83.49959604,-83.49914696,-83.49826487,-83.4968574,-83.49582496,-83.49485534,-83.49363578,-83.49239105,-83.49119981,-83.49060716,-83.48961769,-83.48890978,-83.4883409,-83.48791972,-83.48694655,-83.48624746,-83.48582693,-83.48520074,-83.4846468,-83.48414359,-83.48353066,-83.48299664,-83.48195823,-83.48150034,-83.48082588,-83.47975723,-83.4791369,-83.47898799,-83.47861711,-83.47799137,-83.47729167,-83.47666037,-83.47624868,-83.47583085,-83.47538057,-83.47492854,-83.47442835,-83.4740661,-83.47369464,-83.4725286,-83.47192608,-83.47141281,-83.47115793,-83.47080554,-83.47033672,-83.46926681,-83.46894894,-83.46848573,-83.46813331,-83.46685843,-83.46477947,-83.46218164,-83.4607849,-83.45965352,-83.45886964,-83.4581078,-83.45775155,-83.45711521,-83.45669471,-83.45634264,-83.45484522,-83.45321431,-83.45025453,-83.44891938,-83.44764625,-83.44684228,-83.4453992,-83.44209557,-83.44065723,-83.43899829,-83.43660522,-83.43318083,-83.43083773,-83.43009749,-83.42831484,-83.4261661,-83.42434267,-83.42314507,-83.42190246,-83.42070138,-83.41774809,-83.41752478,-83.41748049,-83.41964817,-83.41981717,-83.41958469,-83.41653667,-83.41603142,-83.41544294,-83.41482399,-83.41451083,-83.41405658,-83.4134076,-83.41250692,-83.41193592,-83.41102135,-83.41060681,-83.41015711,-83.4098207,-83.4095293,-83.40914185,-83.40893418,-83.40867006,-83.40854594,-83.40835121,-83.40769381,-83.40697215,-83.40634391,-83.40562396,-83.40464715,-83.40374478,-83.40299028,-83.40213902,-83.40134949,-83.40099488,-83.40047119,-83.39986809,-83.39948993,-83.39910465,-83.39881317,-83.39842423,-83.39810235,-83.39771196,-83.39723764,-83.39657337,-83.39606443,-83.39552166,-83.39529797,-83.39498476,-83.39466975,-83.39401324,-83.39337645,-83.39278134,-83.39204418,-83.39115001,-83.39032757,-83.38923754,-83.38867104,-83.38801469,-83.38733107,-83.38589356,-83.3848578,-83.38391947,-83.38359645,-83.38291985,-83.38153314,-83.38072151,-83.37757319,-83.37624979,-83.37517051,-83.37491099,-83.3745816,-83.37441974,-83.37419588,-83.37373908,-83.37330483,-83.37299629,-83.37276475,-83.37243582,-83.3722327,-83.37197187,-83.37168547,-83.37128439,-83.37099789,-83.37053404,-83.3700513,-83.3696303,-83.36931349,-83.36915253,-83.36894283,-83.36862631,-83.36835305,-83.3679954,-83.36760889,-83.36718301,-83.36678208,-83.36592711,-83.36565326,-83.36533674,-83.36507123,-83.36470604,-83.36413815,-83.36379407,-83.36351359,-83.36323994,-83.36283256,-83.36255282,-83.36227218,-83.36166891,-83.36112077,-83.36058036,-83.36018755,-83.35989993,-83.35971114,-83.35934538,-83.35868641,-83.35814567,-83.35787963,-83.35752872,-83.35728456,-83.35700513,-83.35678762,-83.35651896,-83.35618892,-83.35597193,-83.35564991,-83.35529396,-83.35516573,-83.3548551,-83.35425756,-83.35389405,-83.3534456,-83.3531376,-83.35281427,-83.35235813,-83.35193226,-83.35161679,-83.35127573,-83.35073852,-83.3503832,-83.34975843,-83.34916769,-83.34880197,-83.34847155,-83.34822757,-83.34755972,-83.3468524,-83.34654381,-83.34621295,-83.3458844,-83.34553981,-83.3451961,-83.34477629,-83.3442001,-83.34393104,-83.34346651,-83.34294428,-83.34268614,-83.34230739,-83.34191373,-83.34131704,-83.34091831,-83.34070829,-83.34036329,-83.33974669,-83.33947255,-83.33923498,-83.33883465,-83.33820351,-83.3379508,-83.33764232,-83.33723525,-83.33642221,-83.33611953,-83.33590205,-83.3356158,-83.33527957,-83.33514598,-83.33507617,-83.3349838,-83.33483574,-83.33460459,-83.3344796,-83.3341982,-83.33387526,-83.33284389,-83.33268432,-83.3323824,-83.3320445,-83.33168749,-83.33139355,-83.33109148,-83.33076903,-83.33021408,-83.32957511,-83.32921841,-83.32883991,-83.32867046,-83.32792021,-83.32762563,-83.32747966,-83.32738046,-83.3273026,-83.32718337,-83.32698649,-83.32678457,-83.32657998,-83.32642555,-83.32629137,-83.32615108,-83.32604699,-83.32587104,-83.32568166,-83.32540072,-83.32469241,-83.32460821,-83.32456626,-83.32450486,-83.32442687,-83.32433476,-83.32425161,-83.32415215,-83.3240826,-83.32406183,-83.32406771,-83.32404011,-83.32402549,-83.32397652,-83.32392687,-83.32391279,-83.32391243,-83.32389953,-83.32383614,-83.32373806,-83.32355618,-83.32345009,-83.32333672,-83.3232259,-83.32309873,-83.32302895,-83.32288841,-83.32279734,-83.32272043,-83.32265741,-83.32255143,-83.32242695,-83.32218729,-83.32198346,-83.32188527,-83.32181447,-83.32177316,-83.32174409,-83.32154841,-83.32144928,-83.32140056,-83.32132353,-83.32121803,-83.32114672,-83.32103443,-83.32097827,-83.32096412,-83.32094265,-83.3209072,-83.32085822,-83.32079508,-83.32079548,-83.32084457,-83.32090052,-83.32088652,-83.32087832,-83.32084299,-83.32084786,-83.32078143,-83.32069038,-83.32053885,-83.32044063,-83.32033868,-83.32029285,-83.32027353,-83.32023591,-83.32019271,-83.32015912,-83.32012965,-83.320063,-83.31998515,-83.31986927,-83.31976749,-83.31965152,-83.31939646,-83.31921691,-83.31881706,-83.31839923,-83.31800186,-83.31772696,-83.31736813,-83.31696501,-83.31661657,-83.31626502,-83.31594424,-83.31554272,-83.31512883,-83.31459444,-83.31367096,-83.31340234,-83.31305891,-83.31253455,-83.31229336,-83.31199704,-83.31178551,-83.31146479,-83.3109875,-83.31043564,-83.31007058,-83.30955795,-83.30892617,-83.3083162,-83.30777536,-83.30682987,-83.30619209,-83.30545744,-83.30489561,-83.30355693,-83.30306693,-83.30233859,-83.30174262,-83.30099357,-83.30038365,-83.29977337,-83.29933979,-83.29863276,-83.29763688,-83.2968388,-83.2963199,-83.29573031,-83.29529585,-83.29475532,-83.29453914,-83.29413301,-83.29362072,-83.29301851,-83.2925343,-83.29180532,-83.29107632,-83.29017946,-83.29011587,-83.28992027,-83.28935882,-83.28855955,-83.28804062,-83.28774405,-83.28707789,-83.28676523,-83.28642309,-83.28617533,-83.28563231,-83.28511738,-83.28496203,-83.28485845,-83.28438096,-83.28400918,-83.28371374,-83.28320847,-83.28262083,-83.28227623,-83.28186231,-83.2814424,-83.28099957,-83.28062181,-83.2805658,-83.28022846,-83.27979356,-83.27948577,-83.27930941,-83.27903585,-83.27880379,-83.2783844,-83.2781803,-83.27797622,-83.27756278,-83.27735257,-83.2771777,-83.27676252,-83.27644695,-83.27613182,-83.27580979,-83.27545171,-83.27511417,-83.27478558,-83.27444835,-83.27399928,-83.27369013,-83.27333255,-83.2729051,-83.27250485,-83.2720346,-83.27160785,-83.27133379,-83.27092572,-83.27058262,-83.27037912,-83.27021815,-83.26992983,-83.26938937,-83.26895543,-83.26861086,-83.26845196,-83.26833583,-83.26825942,-83.26815906,-83.26813142,-83.2681106,-83.26799816,-83.26786873,-83.26774551,-83.26715407,-83.26632195,-83.26553513,-83.26486888,-83.26384108,-83.26291988,-83.26217913,-83.26129638,-83.26035787,-83.25895833,-83.25663487,-83.25559804,-83.25454101,-83.25384419,-83.25314159,-83.25247339,-83.25241056,-83.25231274,-83.25206096,-83.25183603,-83.25163288,-83.25145703,-83.25121171,-83.25104443,-83.2507921,-83.25040607,-83.24939116,-83.24766739,-83.24679482,-83.24522224,-83.24312992,-83.24071043,-83.23771895,-83.23688304,-83.2345766,-83.2301279,-83.22760085,-83.2242978,-83.22116142],"lat":[38.62295978,38.169264,37.920187,37.81249,38.525492,38.80576303,38.80562877,38.80525469,38.80477645,38.80413189,38.80268491,38.8023582,38.80195198,38.80111755,38.80090144,38.80069818,38.80052387,38.80006347,38.79973868,38.79956398,38.79930916,38.79824466,38.79777352,38.79690707,38.79607841,38.7953258,38.79507241,38.79492376,38.79462373,38.79286077,38.792188,38.79057763,38.79019954,38.78981516,38.78901129,38.78611128,38.78402377,38.78359474,38.78309646,38.78237337,38.78221974,38.78192362,38.78126325,38.78109109,38.78098028,38.78086186,38.78091237,38.7810063,38.78086971,38.78039705,38.78003284,38.77933191,38.77883571,38.77757814,38.7760717,38.77537046,38.77449122,38.77423344,38.77396497,38.7738466,38.77335578,38.77256814,38.77178994,38.77154236,38.77138113,38.77059419,38.77041444,38.77060075,38.7710997,38.77119974,38.77106814,38.77122604,38.77146482,38.77148988,38.7713256,38.77066313,38.77055661,38.77067046,38.77153607,38.77225471,38.77242795,38.77359628,38.77416723,38.77434946,38.7749398,38.77512063,38.77581891,38.77603364,38.77622094,38.77670743,38.77790371,38.779116,38.77986168,38.78019387,38.78050337,38.78103714,38.78144364,38.78167285,38.78181236,38.78192695,38.78228806,38.7825497,38.78309265,38.78346973,38.78375312,38.7840277,38.78458193,38.78521573,38.7855908,38.78590157,38.78609238,38.78625319,38.78643935,38.78663003,38.78699095,38.78717151,38.78732414,38.78743481,38.78747188,38.78741102,38.78718952,38.78712238,38.7871392,38.78729768,38.78735434,38.78739825,38.7873488,38.78727998,38.78736402,38.78748957,38.78749238,38.78739242,38.78725808,38.7871729,38.787054,38.78654233,38.78645892,38.78643952,38.78643829,38.78632089,38.78608667,38.78571484,38.78518245,38.78473917,38.78395461,38.783332,38.78245307,38.78181343,38.78103366,38.78035952,38.7798841,38.77876234,38.77771965,38.77697089,38.77616661,38.77533787,38.77486499,38.77445574,38.77419707,38.77404893,38.77389057,38.77375908,38.77355799,38.77335522,38.77315555,38.77299077,38.77289165,38.77272027,38.77242574,38.77216797,38.77188105,38.77149818,38.7712076,38.771143,38.77096646,38.77079742,38.77041624,38.77003738,38.76980757,38.76970011,38.7696813,38.76981303,38.76985725,38.76979589,38.76972293,38.76932243,38.76917819,38.76898678,38.76860702,38.76818205,38.76773278,38.76762517,38.76752239,38.76736675,38.7670597,38.76690309,38.76656603,38.76631055,38.76610809,38.76594761,38.76578745,38.76575545,38.76577041,38.76580097,38.76576016,38.76568681,38.76556594,38.76505055,38.76476464,38.764498,38.76419237,38.76402798,38.76368463,38.76350729,38.76331169,38.7632698,38.76321489,38.76321888,38.76321916,38.76320805,38.76321849,38.76321185,38.76304353,38.7627331,38.76236691,38.76206041,38.76186127,38.76153198,38.76111558,38.76080919,38.76041275,38.76013076,38.75986726,38.75962379,38.7592217,38.75892811,38.7586876,38.75849503,38.75820383,38.757944,38.75771451,38.75756133,38.75721663,38.75690373,38.7565234,38.75632532,38.75595979,38.75558637,38.75533097,38.75491618,38.7545774,38.75433008,38.75424754,38.75419306,38.75417219,38.75408134,38.75389769,38.75358454,38.75343064,38.7531898,38.75296354,38.75280274,38.75260269,38.75239164,38.7522605,38.7519598,38.75176493,38.75144294,38.75119748,38.75109173,38.75008135,38.74747743,38.74648466,38.74555277,38.74440219,38.7431322,38.74225662,38.74143577,38.74028804,38.73830961,38.73765052,38.73620891,38.73443291,38.73282254,38.73224323,38.73116432,38.72963572,38.72691548,38.7262875,38.72391913,38.72268865,38.72197616,38.72157786,38.72120096,38.72044037,38.72002228,38.71935054,38.71886484,38.71814804,38.71730111,38.71662251,38.71557029,38.71421041,38.71308614,38.71231195,38.71173086,38.71093692,38.71048784,38.7098115,38.70951746,38.70902874,38.70855126,38.70806905,38.70753339,38.70728706,38.70712362,38.70688616,38.70674606,38.70629054,38.70564896,38.70553683,38.70542673,38.705276,38.7050877,38.70486891,38.70480724,38.70471162,38.70448956,38.70388486,38.70228557,38.70154216,38.70087143,38.70005436,38.69906312,38.69741456,38.69658111,38.69597309,38.69551582,38.69506521,38.69413703,38.69347319,38.69243598,38.69150595,38.68971233,38.6880794,38.68598747,38.68446588,38.68271267,38.68159926,38.68027077,38.67865486,38.67750628,38.67626716,38.67341854,38.67069187,38.66922875,38.66671311,38.6649544,38.66400496,38.66355478,38.66310119,38.66277445,38.66190855,38.66106057,38.65983681,38.65848399,38.65731668,38.65645853,38.65585721,38.65507546,38.65424706,38.65351797,38.65289203,38.65252496,38.65224061,38.65204376,38.65167521,38.65127668,38.65052685,38.64994596,38.64971974,38.64935785,38.64899622,38.64860667,38.64831289,38.64804515,38.64791308,38.64765615,38.64760866,38.647561,38.64738965,38.64730515,38.64728568,38.64719355,38.64707594,38.64691366,38.64669598,38.64647472,38.64610012,38.64564769,38.64520609,38.644914,38.64431752,38.64384802,38.64347058,38.64267985,38.64242736,38.6418308,38.64166885,38.64165133,38.64166546,38.64170269,38.64165533,38.64153214,38.64126052,38.64102541,38.6406644,38.6404782,38.64040033,38.64002811,38.63982348,38.63971601,38.63970211,38.63978449,38.63985349,38.63982672,38.63975997,38.6395249,38.63905698,38.63830673,38.6375501,38.63606548,38.63432923,38.63351408,38.63281159,38.63186704,38.63132095,38.63033368,38.62941284,38.62873053,38.62848455,38.62786792,38.62761514,38.62742238,38.62706399,38.62654204,38.62645903,38.62645019,38.62651506,38.62704188,38.62739288,38.62806205,38.62860087,38.62894426,38.62957978,38.63046928,38.63118888,38.63181779,38.63240736,38.63530317,38.63634269,38.63707826,38.63751415,38.63811063,38.63873865,38.63938078,38.64011609,38.64058933,38.6411194,38.64154801,38.64179758,38.64198935,38.64232203,38.64289873,38.643274,38.64377277,38.64406669,38.64444208,38.64500835,38.64541616,38.64562951,38.64628137,38.64699632,38.64776468,38.64827713,38.64933193,38.65019385,38.65094855,38.65205535,38.65264481,38.65299785,38.65346608,38.65368904,38.65387804,38.65419058,38.65443892,38.65462396,38.65497,38.65555801,38.65673002,38.65731016,38.65790262,38.65824313,38.65892045,38.65948986,38.66006703,38.66093962,38.66191068,38.66255425,38.66347286,38.66404655,38.66468454,38.66536568,38.6660042,38.66647785,38.66683453,38.6673463,38.66792841,38.66874947,38.66936701,38.66994745,38.67042632,38.67108388,38.67137053,38.67172745,38.67236438,38.67304624,38.6739029,38.67439675,38.67511573,38.67536745,38.67582952,38.67627303,38.67688304,38.67736986,38.67782543,38.67820867,38.67861116,38.67887635,38.67901569,38.67912567,38.67916825,38.67927192,38.67942645,38.67963544,38.67982654,38.68006808,38.68032432,38.68045989,38.68053655,38.68066552,38.68085962,38.68101969,38.68117258,38.68140702,38.68154392,38.68184033,38.68209653,38.68240935,38.68254689,38.68278535,38.68298214,38.68315418,38.68339485,38.68362389,38.68381861,38.6839696,38.68417463,38.68433608,38.68451469,38.68467868,38.68476219,38.68484608,38.68491404,38.68496197,38.68498252,38.68495714,38.68479593,38.6847834,38.6847659,38.68474653,38.6847329,38.6847237,38.68462718,38.6843322,38.68417783,38.68405726,38.68399423,38.68398345,38.68419569,38.68441729,38.68466483,38.6852414,38.68557029,38.68579671,38.68601086,38.68620464,38.68633264,38.6864321,38.68666085,38.68679516,38.68694094,38.68732381,38.68755463,38.68769443,38.68777864,38.68790357,38.68819864,38.68831357,38.68843449,38.6886487,38.6887829,38.68895113,38.68908687,38.68928576,38.68932314,38.6893484,38.68940443,38.68953887,38.68962072,38.68976418,38.68980931,38.68987097,38.69000886,38.69018936,38.69038091,38.69051818,38.69061247,38.69082137,38.69093884,38.69106997,38.69117992,38.69127612,38.69137947,38.69143681,38.69149442,38.69163449,38.69178184,38.69179575,38.69187594,38.69191942,38.6919943,38.69218921,38.69234627,38.69250032,38.6926413,38.69279295,38.6929335,38.69307507,38.69326807,38.6934889,38.69379427,38.69417022,38.69442631,38.69473348,38.6949975,38.69524193,38.69542544,38.69557124,38.69582759,38.6959773,38.69605071,38.69616008,38.6963581,38.69664676,38.69683144,38.69705509,38.69720621,38.6973679,38.69755137,38.69760716,38.69774386,38.69791004,38.69815513,38.69828713,38.69849142,38.69863152,38.69886646,38.69915056,38.69936221,38.69950431,38.69962474,38.6997299,38.69992803,38.70005873,38.70028318,38.70046668,38.70058083,38.70082886,38.70100835,38.7011204,38.70123274,38.70129344,38.70143299,38.70156963,38.7017929,38.70197487,38.70219161,38.70225312,38.70230104,38.70238264,38.70245419,38.70258122,38.70266729,38.70268921,38.70269774,38.70267352,38.70270108,38.70282957,38.70289825,38.70294337,38.70296709,38.70294284,38.70284045,38.70275831,38.70275416,38.70280282,38.70292526,38.70308293,38.70310311,38.70309366,38.70299251,38.70278502,38.70269513,38.70256515,38.70243348,38.70233246,38.7022148,38.70213315,38.70194875,38.70180533,38.70154854,38.70140526,38.70131488,38.70121179,38.70109603,38.70093613,38.70079734,38.70053917,38.70018213,38.69998418,38.6997579,38.69942214,38.69916281,38.69883254,38.698456,38.69829509,38.6980903,38.69787623,38.69767123,38.69749373,38.69734,38.69712825,38.69675039,38.69613673,38.69563724,38.69514441,38.69451777,38.69385833,38.69322398,38.69295389,38.69231162,38.69174547,38.69138584,38.69112515,38.69052442,38.69007099,38.68978765,38.6893006,38.68885608,38.68847162,38.68795322,38.68754552,38.68673471,38.68641497,38.6859036,38.68511008,38.68460459,38.68449255,38.68419296,38.68369217,38.68309446,38.68243559,38.68204049,38.68161781,38.68116767,38.68071683,38.68023832,38.67988945,38.67960768,38.67857261,38.67800491,38.67749864,38.67730151,38.67708395,38.67678178,38.67609182,38.6758928,38.67563536,38.67547617,38.67518119,38.67482954,38.6742111,38.67394804,38.67382808,38.67385353,38.67401534,38.67403594,38.67399416,38.67382814,38.67354735,38.67303372,38.67258755,38.67167348,38.67118282,38.67055807,38.67027745,38.66998999,38.66959705,38.66938171,38.66921837,38.66922679,38.66905444,38.6689786,38.6689559,38.66899188,38.66886276,38.66858612,38.66851395,38.66853428,38.66851558,38.66796542,38.66788208,38.66773219,38.66732148,38.6671284,38.66700367,38.66678877,38.66659348,38.66642676,38.66622717,38.66615923,38.66612286,38.66626049,38.66643573,38.66654401,38.66671416,38.66675136,38.66679123,38.66679423,38.66670406,38.66649457,38.66641561,38.6662951,38.66623288,38.66618649,38.66614817,38.66609414,38.66602065,38.66591309,38.66578396,38.66568447,38.66561602,38.6655045,38.6653811,38.66529789,38.66524085,38.66520423,38.66519743,38.66519463,38.66510924,38.66500269,38.66493381,38.66487252,38.66480823,38.66471133,38.66463259,38.66451678,38.66444647,38.66438257,38.66437292,38.66430775,38.66422989,38.66421603,38.66404418,38.66390835,38.66377534,38.66362874,38.66354402,38.66347401,38.6633808,38.66320116,38.66311056,38.66277054,38.66268448,38.66264563,38.66252119,38.66237938,38.66180855,38.66146151,38.66104031,38.66088817,38.66078345,38.66075136,38.66074002,38.66067598,38.66061787,38.66057185,38.6605288,38.66041028,38.66030047,38.66018884,38.66005404,38.65989287,38.65981645,38.65975221,38.65967869,38.65964353,38.6595843,38.65952477,38.65945536,38.65938724,38.65933368,38.65923659,38.65905785,38.65890511,38.65873988,38.65847899,38.65838901,38.65826663,38.65813705,38.65794978,38.65769329,38.6575566,38.65745758,38.65736351,38.65718025,38.6570586,38.65691015,38.65655815,38.65623471,38.65594302,38.65574215,38.65559355,38.65552864,38.6554142,38.65521351,38.65498494,38.6548725,38.65467727,38.65453916,38.65440855,38.65425794,38.65406441,38.65382017,38.65365581,38.65338018,38.65307154,38.65297764,38.65272902,38.65241759,38.65223518,38.65207712,38.65196382,38.65183713,38.65170089,38.65160238,38.65150191,38.65138313,38.65110108,38.65093666,38.65060201,38.65024539,38.65002238,38.64984542,38.64970248,38.64929486,38.64886239,38.64865909,38.64849583,38.64836834,38.64824948,38.64815804,38.64798273,38.64777055,38.64764493,38.64744602,38.64719102,38.64705259,38.64685608,38.6466318,38.64629767,38.64606921,38.6459592,38.64574553,38.64543364,38.64524885,38.64512459,38.64489122,38.64454267,38.64434596,38.64414263,38.64390023,38.64349167,38.64332481,38.64322773,38.64314637,38.64304135,38.64295145,38.64289098,38.642771,38.64264027,38.64237599,38.6422375,38.64206151,38.64187158,38.64123538,38.641136,38.64094655,38.64073299,38.64051491,38.6403476,38.6401629,38.6399586,38.63958544,38.6391556,38.63892862,38.63867302,38.6385556,38.63805005,38.63785107,38.63771147,38.63758721,38.63745381,38.63724743,38.63695296,38.63665358,38.63632736,38.63602139,38.63568357,38.63542665,38.6352391,38.63505354,38.63490344,38.63476859,38.63442594,38.6343782,38.6343231,38.6342223,38.63403942,38.6338068,38.63367397,38.63355797,38.63343844,38.63332539,38.63325342,38.63313543,38.63299572,38.63283612,38.63269502,38.63248737,38.63233905,38.63225295,38.63221044,38.63221186,38.63215184,38.63213048,38.63206431,38.63197481,38.6318493,38.63178882,38.63169877,38.63164608,38.63158959,38.63148395,38.63130049,38.631094,38.63061393,38.63031931,38.63021704,38.63003021,38.62990231,38.6296717,38.62918359,38.62884715,38.62852136,38.62825817,38.62800677,38.62772995,38.62720853,38.62694986,38.62679645,38.62649387,38.62629472,38.62613575,38.62598067,38.62586324,38.6257029,38.62554679,38.62538858,38.62521259,38.62511713,38.62486519,38.62443949,38.62386012,38.62309894,38.6223663,38.62137679,38.62075371,38.62012228,38.61925219,38.61854813,38.61761012,38.61728472,38.61681438,38.61631218,38.61526813,38.61464323,38.61407643,38.61305974,38.61250875,38.61147814,38.6105151,38.6098313,38.60941297,38.60899157,38.60853286,38.60811644,38.60774049,38.60743797,38.60709192,38.60669617,38.60623818,38.60542957,38.60524556,38.6048876,38.60439412,38.60412069,38.60382275,38.60360485,38.60330165,38.60286746,38.60246271,38.60223064,38.60185896,38.60143808,38.60109869,38.60078475,38.60027298,38.59992819,38.59960338,38.59934258,38.59881374,38.59860456,38.59835195,38.59817074,38.59796237,38.59778087,38.59760829,38.59749158,38.59733346,38.59718038,38.5970788,38.59699941,38.59689044,38.59680043,38.59668833,38.59666391,38.5966686,38.59670678,38.59676368,38.59685255,38.59703662,38.59727427,38.59756128,38.59757713,38.59766989,38.59786838,38.59816703,38.59834927,38.59852852,38.59892676,38.59916887,38.59945499,38.59964073,38.6002269,38.60070652,38.60085026,38.60096348,38.60137178,38.60165314,38.60185097,38.60219963,38.60265368,38.60290819,38.60324638,38.60365653,38.60412459,38.60453148,38.60458389,38.60493329,38.60532047,38.6056258,38.60576843,38.60604359,38.60622969,38.60657252,38.60675987,38.60694655,38.60737058,38.60758454,38.60778625,38.60816008,38.60843369,38.60869423,38.608954,38.60919033,38.60944078,38.60963308,38.60987464,38.61026565,38.61055723,38.61088353,38.61130721,38.61170403,38.61220236,38.61265769,38.61294591,38.61336517,38.61372817,38.61394707,38.61409962,38.61429275,38.61464062,38.61484235,38.61509269,38.61523634,38.61551202,38.61580224,38.61628563,38.61689277,38.61719791,38.61772639,38.61803272,38.61825881,38.61897365,38.61976655,38.62051168,38.62105807,38.62173222,38.62220738,38.62247206,38.6227406,38.62290019,38.6229725,38.62303303,38.62314863,38.62349724,38.62385825,38.62443887,38.62508888,38.62518571,38.62528186,38.62552996,38.62570793,38.62586367,38.62598837,38.6260972,38.62617745,38.62628685,38.62641402,38.62685892,38.62801474,38.6283926,38.62871109,38.62881532,38.62875954,38.62838394,38.62830309,38.62786427,38.62679294,38.62599983,38.62471293,38.62295978]}]],[[{"lng":[-86.47342224,-86.486381,-86.984531,-87.382126,-87.34722039,-87.34607778,-87.34479275,-87.34270588,-87.34055503,-87.3385405,-87.33663962,-87.3358555,-87.33522375,-87.33415387,-87.33353896,-87.33254,-87.3297527,-87.32858457,-87.32796362,-87.32557859,-87.32307209,-87.32137747,-87.31975431,-87.31822762,-87.31520451,-87.3135002,-87.31181575,-87.30972602,-87.30841932,-87.30663787,-87.30501171,-87.30293217,-87.30260165,-87.30221204,-87.30183413,-87.30017237,-87.29892473,-87.29788223,-87.29673381,-87.29615474,-87.29477648,-87.29149324,-87.29093132,-87.29047598,-87.28995453,-87.28722895,-87.28525659,-87.28380333,-87.28237113,-87.28095,-87.27978741,-87.27495595,-87.27361097,-87.27293282,-87.2722525,-87.27036866,-87.26899451,-87.26797745,-87.26664175,-87.26534342,-87.26035342,-87.25819065,-87.25677936,-87.25550047,-87.25477895,-87.25359159,-87.2523062,-87.25061731,-87.24947873,-87.24846136,-87.24633985,-87.24376173,-87.24060809,-87.23818826,-87.23595257,-87.23426029,-87.23213528,-87.230152,-87.22836747,-87.22593233,-87.22478879,-87.2233547,-87.22141611,-87.22056895,-87.21994468,-87.21829858,-87.21373449,-87.21260851,-87.2117523,-87.2099173,-87.20827228,-87.20592587,-87.20386883,-87.2023339,-87.19986425,-87.19740845,-87.19568212,-87.19269776,-87.19045798,-87.18921599,-87.187689,-87.18575136,-87.18416994,-87.17909383,-87.1770002,-87.17583608,-87.17465125,-87.17233907,-87.17090117,-87.17036037,-87.16899101,-87.16588746,-87.16474713,-87.16344693,-87.16240581,-87.16170354,-87.16058272,-87.15938074,-87.15732266,-87.15640868,-87.15517733,-87.15425391,-87.15315468,-87.15199975,-87.15110327,-87.14918697,-87.14674176,-87.14544722,-87.14491444,-87.14440834,-87.14293934,-87.14236663,-87.14196734,-87.14096687,-87.14046016,-87.1394017,-87.13761845,-87.13710659,-87.1356991,-87.13547557,-87.13547953,-87.1356453,-87.13568615,-87.13538798,-87.13456754,-87.13409253,-87.13398009,-87.13418729,-87.13420425,-87.13356973,-87.1325635,-87.13112145,-87.13022441,-87.1295209,-87.12881851,-87.12860365,-87.12803147,-87.12741016,-87.12707052,-87.12608767,-87.1248999,-87.12347342,-87.12272204,-87.12144201,-87.11859376,-87.11621601,-87.11379132,-87.11100797,-87.10833276,-87.10646817,-87.10433402,-87.10263775,-87.09919385,-87.09603422,-87.09299387,-87.09106934,-87.08927894,-87.0873103,-87.08511484,-87.08293188,-87.08124369,-87.07904426,-87.0775352,-87.07600756,-87.07504202,-87.07398554,-87.07153324,-87.06967524,-87.06747937,-87.06610612,-87.0659079,-87.06606578,-87.06586107,-87.06580412,-87.0646769,-87.06395348,-87.06324204,-87.06207033,-87.0613562,-87.06105519,-87.06068537,-87.06026134,-87.05958016,-87.05874538,-87.05817238,-87.05739278,-87.05666352,-87.05614353,-87.0552089,-87.05427054,-87.05354658,-87.05295877,-87.05155526,-87.05082734,-87.05047514,-87.04993473,-87.04866832,-87.04750972,-87.04633112,-87.04512171,-87.04399777,-87.04328487,-87.04300334,-87.04293156,-87.04297757,-87.04301072,-87.04304735,-87.04302835,-87.04294477,-87.04298728,-87.04298863,-87.04310015,-87.04328965,-87.04345818,-87.04371908,-87.0438851,-87.04400516,-87.04421994,-87.04429598,-87.04439398,-87.04479888,-87.04542697,-87.04582878,-87.04608867,-87.04633043,-87.04614589,-87.04587759,-87.04543691,-87.04520527,-87.04429489,-87.04359863,-87.04323393,-87.04016286,-87.03674249,-87.03517427,-87.03416554,-87.0327327,-87.03074734,-87.01954647,-87.01394944,-87.01310367,-87.01278222,-87.01237264,-87.01125696,-87.00997459,-87.0077534,-87.00348647,-87.002637,-87.00046438,-86.99225295,-86.98802153,-86.97883684,-86.97800425,-86.97739874,-86.97660005,-86.97606429,-86.975564,-86.97475814,-86.9740425,-86.97377299,-86.972994,-86.97247941,-86.97217377,-86.97150059,-86.97104733,-86.97076959,-86.97038151,-86.97000514,-86.96974867,-86.96949785,-86.96922089,-86.96887984,-86.9686235,-86.96832454,-86.96800434,-86.96776817,-86.96747592,-86.96723335,-86.96710066,-86.96698333,-86.96677388,-86.96659364,-86.96652385,-86.9664816,-86.96653076,-86.96674691,-86.96696887,-86.96712849,-86.9672472,-86.96737953,-86.96751155,-86.9675677,-86.96752508,-86.96733863,-86.96696335,-86.96665055,-86.96606757,-86.96564378,-86.96503311,-86.96462177,-86.96412983,-86.96362965,-86.96330913,-86.96307383,-86.96284318,-86.96257255,-86.96205111,-86.96142735,-86.96050265,-86.95980808,-86.95930776,-86.95884209,-86.95829356,-86.9451924,-86.93921684,-86.93458731,-86.93189394,-86.92894062,-86.92582545,-86.91983434,-86.91794913,-86.91427149,-86.91243065,-86.91041926,-86.90852857,-86.90718828,-86.90399027,-86.90198253,-86.89986035,-86.89890817,-86.89807385,-86.89581588,-86.89360936,-86.89029032,-86.88755647,-86.88647988,-86.8846848,-86.88222282,-86.8793641,-86.87852548,-86.87676154,-86.87500693,-86.87365065,-86.87197769,-86.87051618,-86.86984973,-86.86813002,-86.86735704,-86.86541119,-86.86341975,-86.86203385,-86.86111432,-86.85903446,-86.85629671,-86.85372719,-86.8519334,-86.85008535,-86.84704784,-86.84454277,-86.84184816,-86.83934373,-86.83567998,-86.8331141,-86.83112186,-86.82922265,-86.82752215,-86.82564844,-86.82456239,-86.82381728,-86.82296264,-86.82216205,-86.82082072,-86.81980109,-86.81867233,-86.81724031,-86.81574615,-86.81463317,-86.81317102,-86.81017208,-86.80774583,-86.80560058,-86.80391447,-86.80260512,-86.80037395,-86.79800011,-86.79551429,-86.79489253,-86.79487298,-86.795164,-86.79471994,-86.79395387,-86.79380042,-86.79173515,-86.79050943,-86.79011602,-86.78911672,-86.78868926,-86.78830851,-86.78770412,-86.78748791,-86.78734611,-86.78716794,-86.78563897,-86.78449287,-86.78374379,-86.78302301,-86.78241555,-86.78133466,-86.78075592,-86.78012968,-86.77981436,-86.7796637,-86.77908872,-86.77856864,-86.77832617,-86.77824984,-86.7783206,-86.77848034,-86.77871818,-86.77902958,-86.77928955,-86.77949138,-86.77972878,-86.77986763,-86.77991499,-86.77938642,-86.77751353,-86.77698123,-86.77646579,-86.77557738,-86.77462367,-86.77399777,-86.77364743,-86.77320461,-86.77277349,-86.77190893,-86.77079955,-86.77044249,-86.77020064,-86.76970376,-86.76898681,-86.76854464,-86.76832368,-86.76706316,-86.76530484,-86.76165818,-86.75867997,-86.75787077,-86.75687052,-86.7564284,-86.75622395,-86.75594591,-86.75519026,-86.7545225,-86.75270367,-86.75113737,-86.74873557,-86.74675104,-86.74643004,-86.74615261,-86.74611395,-86.74532883,-86.74423378,-86.74197424,-86.73839578,-86.73644227,-86.735563,-86.73444095,-86.7332875,-86.73256304,-86.73183416,-86.73072062,-86.7288828,-86.72544356,-86.72375769,-86.72284729,-86.72113803,-86.71981285,-86.71867072,-86.71749239,-86.71551233,-86.71415738,-86.71213351,-86.70965215,-86.70817873,-86.70214532,-86.70049304,-86.69816649,-86.69686544,-86.69372748,-86.68923128,-86.68820163,-86.68659968,-86.68623963,-86.68586062,-86.68540946,-86.68394104,-86.68287298,-86.6816949,-86.68039668,-86.67934287,-86.67701557,-86.67512495,-86.67390596,-86.67063833,-86.66908988,-86.66850575,-86.66656028,-86.66618692,-86.66493007,-86.66281792,-86.66190809,-86.66090786,-86.66003451,-86.65943331,-86.65674756,-86.65470719,-86.65270249,-86.65161023,-86.65048069,-86.64951446,-86.64844497,-86.6471275,-86.64632033,-86.64578609,-86.64550737,-86.64519742,-86.64447445,-86.64408233,-86.64398068,-86.64403704,-86.64425663,-86.64534791,-86.64620437,-86.64677764,-86.64704249,-86.64720028,-86.64788074,-86.64845128,-86.64979192,-86.65328807,-86.65456445,-86.65597532,-86.65695956,-86.65756762,-86.65818051,-86.65863878,-86.66065481,-86