forked from patilv/INRUG-InteractiveCharts
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmynewggplot.html
18 lines (17 loc) · 174 KB
/
mynewggplot.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<script src="data:application/x-javascript;base64,KGZ1bmN0aW9uKCkgewogIC8vIElmIHdpbmRvdy5IVE1MV2lkZ2V0cyBpcyBhbHJlYWR5IGRlZmluZWQsIHRoZW4gdXNlIGl0OyBvdGhlcndpc2UgY3JlYXRlIGEKICAvLyBuZXcgb2JqZWN0LiBUaGlzIGFsbG93cyBwcmVjZWRpbmcgY29kZSB0byBzZXQgb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUKICAvLyBpbml0aWFsaXphdGlvbiBwcm9jZXNzICh0aG91Z2ggbm9uZSBjdXJyZW50bHkgZXhpc3QpLgogIHdpbmRvdy5IVE1MV2lkZ2V0cyA9IHdpbmRvdy5IVE1MV2lkZ2V0cyB8fCB7fTsKCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSB2aWV3ZXIgcGFuZS4gSWYgbm90LCB3ZSdyZSBpbiBhIHdlYiBicm93c2VyLgogIHZhciB2aWV3ZXJNb2RlID0gd2luZG93LkhUTUxXaWRnZXRzLnZpZXdlck1vZGUgPQogICAgICAvXGJ2aWV3ZXJfcGFuZT0xXGIvLnRlc3Qod2luZG93LmxvY2F0aW9uKTsKCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gU2hpbnkgbW9kZS4gSWYgbm90LCBpdCdzIGEgc3RhdGljIGRvY3VtZW50LgogIC8vIE5vdGUgdGhhdCBzdGF0aWMgd2lkZ2V0cyBjYW4gYXBwZWFyIGluIGJvdGggU2hpbnkgYW5kIHN0YXRpYyBtb2RlcywgYnV0CiAgLy8gb2J2aW91c2x5LCBTaGlueSB3aWRnZXRzIGNhbiBvbmx5IGFwcGVhciBpbiBTaGlueSBhcHBzL2RvY3VtZW50cy4KICB2YXIgc2hpbnlNb2RlID0gd2luZG93LkhUTUxXaWRnZXRzLnNoaW55TW9kZSA9CiAgICAgIHR5cGVvZih3aW5kb3cuU2hpbnkpICE9PSAidW5kZWZpbmVkIiAmJiAhIXdpbmRvdy5TaGlueS5vdXRwdXRCaW5kaW5nczsKCiAgLy8gV2UgY2FuJ3QgY291bnQgb24galF1ZXJ5IGJlaW5nIGF2YWlsYWJsZSwgc28gd2UgaW1wbGVtZW50IG91ciBvd24KICAvLyB2ZXJzaW9uIGlmIG5lY2Vzc2FyeS4KICBmdW5jdGlvbiBxdWVyeVNlbGVjdG9yQWxsKHNjb3BlLCBzZWxlY3RvcikgewogICAgaWYgKHR5cGVvZihqUXVlcnkpICE9PSAidW5kZWZpbmVkIiAmJiBzY29wZSBpbnN0YW5jZW9mIGpRdWVyeSkgewogICAgICByZXR1cm4gc2NvcGUuZmluZChzZWxlY3Rvcik7CiAgICB9CiAgICBpZiAoc2NvcGUucXVlcnlTZWxlY3RvckFsbCkgewogICAgICByZXR1cm4gc2NvcGUucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBhc0FycmF5KHZhbHVlKSB7CiAgICBpZiAodmFsdWUgPT09IG51bGwpCiAgICAgIHJldHVybiBbXTsKICAgIGlmICgkLmlzQXJyYXkodmFsdWUpKQogICAgICByZXR1cm4gdmFsdWU7CiAgICByZXR1cm4gW3ZhbHVlXTsKICB9CgogIC8vIEltcGxlbWVudCBqUXVlcnkncyBleHRlbmQKICBmdW5jdGlvbiBleHRlbmQodGFyZ2V0IC8qLCAuLi4gKi8pIHsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgcmV0dXJuIHRhcmdldDsKICAgIH0KICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07CiAgICAgIGZvciAodmFyIHByb3AgaW4gc291cmNlKSB7CiAgICAgICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgewogICAgICAgICAgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHRhcmdldDsKICB9CgogIC8vIElFOCBkb2Vzbid0IHN1cHBvcnQgQXJyYXkuZm9yRWFjaC4KICBmdW5jdGlvbiBmb3JFYWNoKHZhbHVlcywgY2FsbGJhY2ssIHRoaXNBcmcpIHsKICAgIGlmICh2YWx1ZXMuZm9yRWFjaCkgewogICAgICB2YWx1ZXMuZm9yRWFjaChjYWxsYmFjaywgdGhpc0FyZyk7CiAgICB9IGVsc2UgewogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgewogICAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdmFsdWVzW2ldLCBpLCB2YWx1ZXMpOwogICAgICB9CiAgICB9CiAgfQoKICAvLyBSZXBsYWNlcyB0aGUgc3BlY2lmaWVkIG1ldGhvZCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YgZnVuY1NvdXJjZS4KICAvLwogIC8vIE5vdGUgdGhhdCBmdW5jU291cmNlIHNob3VsZCBub3QgQkUgdGhlIG5ldyBtZXRob2QsIGl0IHNob3VsZCBiZSBhIGZ1bmN0aW9uCiAgLy8gdGhhdCBSRVRVUk5TIHRoZSBuZXcgbWV0aG9kLiBmdW5jU291cmNlIHJlY2VpdmVzIGEgc2luZ2xlIGFyZ3VtZW50IHRoYXQgaXMKICAvLyB0aGUgb3ZlcnJpZGRlbiBtZXRob2QsIGl0IGNhbiBiZSBjYWxsZWQgZnJvbSB0aGUgbmV3IG1ldGhvZC4gVGhlIG92ZXJyaWRkZW4KICAvLyBtZXRob2QgY2FuIGJlIGNhbGxlZCBsaWtlIGEgcmVndWxhciBmdW5jdGlvbiwgaXQgaGFzIHRoZSB0YXJnZXQgcGVybWFuZW50bHkKICAvLyBib3VuZCB0byBpdCBzbyAidGhpcyIgd2lsbCB3b3JrIGNvcnJlY3RseS4KICBmdW5jdGlvbiBvdmVycmlkZU1ldGhvZCh0YXJnZXQsIG1ldGhvZE5hbWUsIGZ1bmNTb3VyY2UpIHsKICAgIHZhciBzdXBlckZ1bmMgPSB0YXJnZXRbbWV0aG9kTmFtZV0gfHwgZnVuY3Rpb24oKSB7fTsKICAgIHZhciBzdXBlckZ1bmNCb3VuZCA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gc3VwZXJGdW5jLmFwcGx5KHRhcmdldCwgYXJndW1lbnRzKTsKICAgIH07CiAgICB0YXJnZXRbbWV0aG9kTmFtZV0gPSBmdW5jU291cmNlKHN1cGVyRnVuY0JvdW5kKTsKICB9CgogIC8vIEltcGxlbWVudCBhIHZhZ3VlIGZhY3NpbWlsaWUgb2YgalF1ZXJ5J3MgZGF0YSBtZXRob2QKICBmdW5jdGlvbiBlbGVtZW50RGF0YShlbCwgbmFtZSwgdmFsdWUpIHsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDIpIHsKICAgICAgcmV0dXJuIGVsWyJodG1sd2lkZ2V0X2RhdGFfIiArIG5hbWVdOwogICAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDMpIHsKICAgICAgZWxbImh0bWx3aWRnZXRfZGF0YV8iICsgbmFtZV0gPSB2YWx1ZTsKICAgICAgcmV0dXJuIGVsOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzIGZvciBlbGVtZW50RGF0YTogIiArCiAgICAgICAgYXJndW1lbnRzLmxlbmd0aCk7CiAgICB9CiAgfQoKICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzM0NDYxNzAvZXNjYXBlLXN0cmluZy1mb3ItdXNlLWluLWphdmFzY3JpcHQtcmVnZXgKICBmdW5jdGlvbiBlc2NhcGVSZWdFeHAoc3RyKSB7CiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1tcLVxbXF1cL1x7XH1cKFwpXCpcK1w/XC5cXFxeXCRcfF0vZywgIlxcJCYiKTsKICB9CgogIGZ1bmN0aW9uIGhhc0NsYXNzKGVsLCBjbGFzc05hbWUpIHsKICAgIHZhciByZSA9IG5ldyBSZWdFeHAoIlxcYiIgKyBlc2NhcGVSZWdFeHAoY2xhc3NOYW1lKSArICJcXGIiKTsKICAgIHJldHVybiByZS50ZXN0KGVsLmNsYXNzTmFtZSk7CiAgfQoKICAvLyBlbGVtZW50cyAtIGFycmF5IChvciBhcnJheS1saWtlIG9iamVjdCkgb2YgSFRNTCBlbGVtZW50cwogIC8vIGNsYXNzTmFtZSAtIGNsYXNzIG5hbWUgdG8gdGVzdCBmb3IKICAvLyBpbmNsdWRlIC0gaWYgdHJ1ZSwgb25seSByZXR1cm4gZWxlbWVudHMgd2l0aCBnaXZlbiBjbGFzc05hbWU7CiAgLy8gICBpZiBmYWxzZSwgb25seSByZXR1cm4gZWxlbWVudHMgKndpdGhvdXQqIGdpdmVuIGNsYXNzTmFtZQogIGZ1bmN0aW9uIGZpbHRlckJ5Q2xhc3MoZWxlbWVudHMsIGNsYXNzTmFtZSwgaW5jbHVkZSkgewogICAgdmFyIHJlc3VsdHMgPSBbXTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGhhc0NsYXNzKGVsZW1lbnRzW2ldLCBjbGFzc05hbWUpID09IGluY2x1ZGUpCiAgICAgICAgcmVzdWx0cy5wdXNoKGVsZW1lbnRzW2ldKTsKICAgIH0KICAgIHJldHVybiByZXN1bHRzOwogIH0KCiAgZnVuY3Rpb24gb24ob2JqLCBldmVudE5hbWUsIGZ1bmMpIHsKICAgIGlmIChvYmouYWRkRXZlbnRMaXN0ZW5lcikgewogICAgICBvYmouYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGZ1bmMsIGZhbHNlKTsKICAgIH0gZWxzZSBpZiAob2JqLmF0dGFjaEV2ZW50KSB7CiAgICAgIG9iai5hdHRhY2hFdmVudChldmVudE5hbWUsIGZ1bmMpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gb2ZmKG9iaiwgZXZlbnROYW1lLCBmdW5jKSB7CiAgICBpZiAob2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIpCiAgICAgIG9iai5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZnVuYywgZmFsc2UpOwogICAgZWxzZSBpZiAob2JqLmRldGFjaEV2ZW50KSB7CiAgICAgIG9iai5kZXRhY2hFdmVudChldmVudE5hbWUsIGZ1bmMpOwogICAgfQogIH0KCiAgLy8gVHJhbnNsYXRlIGFycmF5IG9mIHZhbHVlcyB0byB0b3AvcmlnaHQvYm90dG9tL2xlZnQsIGFzIHVzdWFsIHdpdGgKICAvLyB0aGUgInBhZGRpbmciIENTUyBwcm9wZXJ0eQogIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9wYWRkaW5nCiAgZnVuY3Rpb24gdW5wYWNrUGFkZGluZyh2YWx1ZSkgewogICAgaWYgKHR5cGVvZih2YWx1ZSkgPT09ICJudW1iZXIiKQogICAgICB2YWx1ZSA9IFt2YWx1ZV07CiAgICBpZiAodmFsdWUubGVuZ3RoID09PSAxKSB7CiAgICAgIHJldHVybiB7dG9wOiB2YWx1ZVswXSwgcmlnaHQ6IHZhbHVlWzBdLCBib3R0b206IHZhbHVlWzBdLCBsZWZ0OiB2YWx1ZVswXX07CiAgICB9CiAgICBpZiAodmFsdWUubGVuZ3RoID09PSAyKSB7CiAgICAgIHJldHVybiB7dG9wOiB2YWx1ZVswXSwgcmlnaHQ6IHZhbHVlWzFdLCBib3R0b206IHZhbHVlWzBdLCBsZWZ0OiB2YWx1ZVsxXX07CiAgICB9CiAgICBpZiAodmFsdWUubGVuZ3RoID09PSAzKSB7CiAgICAgIHJldHVybiB7dG9wOiB2YWx1ZVswXSwgcmlnaHQ6IHZhbHVlWzFdLCBib3R0b206IHZhbHVlWzJdLCBsZWZ0OiB2YWx1ZVsxXX07CiAgICB9CiAgICBpZiAodmFsdWUubGVuZ3RoID09PSA0KSB7CiAgICAgIHJldHVybiB7dG9wOiB2YWx1ZVswXSwgcmlnaHQ6IHZhbHVlWzFdLCBib3R0b206IHZhbHVlWzJdLCBsZWZ0OiB2YWx1ZVszXX07CiAgICB9CiAgfQoKICAvLyBDb252ZXJ0IGFuIHVucGFja2VkIHBhZGRpbmcgb2JqZWN0IHRvIGEgQ1NTIHZhbHVlCiAgZnVuY3Rpb24gcGFkZGluZ1RvQ3NzKHBhZGRpbmdPYmopIHsKICAgIHJldHVybiBwYWRkaW5nT2JqLnRvcCArICJweCAiICsgcGFkZGluZ09iai5yaWdodCArICJweCAiICsgcGFkZGluZ09iai5ib3R0b20gKyAicHggIiArIHBhZGRpbmdPYmoubGVmdCArICJweCI7CiAgfQoKICAvLyBNYWtlcyBhIG51bWJlciBzdWl0YWJsZSBmb3IgQ1NTCiAgZnVuY3Rpb24gcHgoeCkgewogICAgaWYgKHR5cGVvZih4KSA9PT0gIm51bWJlciIpCiAgICAgIHJldHVybiB4ICsgInB4IjsKICAgIGVsc2UKICAgICAgcmV0dXJuIHg7CiAgfQoKICAvLyBSZXRyaWV2ZXMgcnVudGltZSB3aWRnZXQgc2l6aW5nIGluZm9ybWF0aW9uIGZvciBhbiBlbGVtZW50LgogIC8vIFRoZSByZXR1cm4gdmFsdWUgaXMgZWl0aGVyIG51bGwsIG9yIGFuIG9iamVjdCB3aXRoIGZpbGwsIHBhZGRpbmcsCiAgLy8gZGVmYXVsdFdpZHRoLCBkZWZhdWx0SGVpZ2h0IGZpZWxkcy4KICBmdW5jdGlvbiBzaXppbmdQb2xpY3koZWwpIHsKICAgIHZhciBzaXppbmdFbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInNjcmlwdFtkYXRhLWZvcj0nIiArIGVsLmlkICsgIiddW3R5cGU9J2FwcGxpY2F0aW9uL2h0bWx3aWRnZXQtc2l6aW5nJ10iKTsKICAgIGlmICghc2l6aW5nRWwpCiAgICAgIHJldHVybiBudWxsOwogICAgdmFyIHNwID0gSlNPTi5wYXJzZShzaXppbmdFbC50ZXh0Q29udGVudCB8fCBzaXppbmdFbC50ZXh0IHx8ICJ7fSIpOwogICAgaWYgKHZpZXdlck1vZGUpIHsKICAgICAgcmV0dXJuIHNwLnZpZXdlcjsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBzcC5icm93c2VyOwogICAgfQogIH0KCiAgZnVuY3Rpb24gaW5pdFNpemluZyhlbCkgewogICAgdmFyIHNpemluZyA9IHNpemluZ1BvbGljeShlbCk7CiAgICBpZiAoIXNpemluZykKICAgICAgcmV0dXJuOwoKICAgIHZhciBjZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaHRtbHdpZGdldF9jb250YWluZXIiKTsKICAgIGlmICghY2VsKQogICAgICByZXR1cm47CgogICAgaWYgKHR5cGVvZihzaXppbmcucGFkZGluZykgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUubWFyZ2luID0gIjAiOwogICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmcgPSBwYWRkaW5nVG9Dc3ModW5wYWNrUGFkZGluZyhzaXppbmcucGFkZGluZykpOwogICAgfQoKICAgIGlmIChzaXppbmcuZmlsbCkgewogICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gImhpZGRlbiI7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUud2lkdGggPSAiMTAwJSI7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuaGVpZ2h0ID0gIjEwMCUiOwogICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUud2lkdGggPSAiMTAwJSI7CiAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5oZWlnaHQgPSAiMTAwJSI7CiAgICAgIGlmIChjZWwpIHsKICAgICAgICBjZWwuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOwogICAgICAgIHZhciBwYWQgPSB1bnBhY2tQYWRkaW5nKHNpemluZy5wYWRkaW5nKTsKICAgICAgICBjZWwuc3R5bGUudG9wID0gcGFkLnRvcCArICJweCI7CiAgICAgICAgY2VsLnN0eWxlLnJpZ2h0ID0gcGFkLnJpZ2h0ICsgInB4IjsKICAgICAgICBjZWwuc3R5bGUuYm90dG9tID0gcGFkLmJvdHRvbSArICJweCI7CiAgICAgICAgY2VsLnN0eWxlLmxlZnQgPSBwYWQubGVmdCArICJweCI7CiAgICAgICAgZWwuc3R5bGUud2lkdGggPSAiMTAwJSI7CiAgICAgICAgZWwuc3R5bGUuaGVpZ2h0ID0gIjEwMCUiOwogICAgICB9CgogICAgICByZXR1cm4gewogICAgICAgIGdldFdpZHRoOiBmdW5jdGlvbigpIHsgcmV0dXJuIGNlbC5vZmZzZXRXaWR0aDsgfSwKICAgICAgICBnZXRIZWlnaHQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gY2VsLm9mZnNldEhlaWdodDsgfQogICAgICB9OwoKICAgIH0gZWxzZSB7CiAgICAgIGVsLnN0eWxlLndpZHRoID0gcHgoc2l6aW5nLndpZHRoKTsKICAgICAgZWwuc3R5bGUuaGVpZ2h0ID0gcHgoc2l6aW5nLmhlaWdodCk7CgogICAgICByZXR1cm4gewogICAgICAgIGdldFdpZHRoOiBmdW5jdGlvbigpIHsgcmV0dXJuIGVsLm9mZnNldFdpZHRoOyB9LAogICAgICAgIGdldEhlaWdodDogZnVuY3Rpb24oKSB7IHJldHVybiBlbC5vZmZzZXRIZWlnaHQ7IH0KICAgICAgfTsKICAgIH0KICB9CgogIC8vIERlZmF1bHQgaW1wbGVtZW50YXRpb25zIGZvciBtZXRob2RzCiAgdmFyIGRlZmF1bHRzID0gewogICAgZmluZDogZnVuY3Rpb24oc2NvcGUpIHsKICAgICAgcmV0dXJuIHF1ZXJ5U2VsZWN0b3JBbGwoc2NvcGUsICIuIiArIHRoaXMubmFtZSk7CiAgICB9LAogICAgcmVuZGVyRXJyb3I6IGZ1bmN0aW9uKGVsLCBlcnIpIHsKICAgICAgdmFyICRlbCA9ICQoZWwpOwoKICAgICAgdGhpcy5jbGVhckVycm9yKGVsKTsKCiAgICAgIC8vIEFkZCBhbGwgdGhlc2UgZXJyb3IgY2xhc3NlcywgYXMgU2hpbnkgZG9lcwogICAgICB2YXIgZXJyQ2xhc3MgPSAic2hpbnktb3V0cHV0LWVycm9yIjsKICAgICAgaWYgKGVyci50eXBlICE9PSBudWxsKSB7CiAgICAgICAgLy8gdXNlIHRoZSBjbGFzc2VzIG9mIHRoZSBlcnJvciBjb25kaXRpb24gYXMgQ1NTIGNsYXNzIG5hbWVzCiAgICAgICAgZXJyQ2xhc3MgPSBlcnJDbGFzcyArICIgIiArICQubWFwKGFzQXJyYXkoZXJyLnR5cGUpLCBmdW5jdGlvbih0eXBlKSB7CiAgICAgICAgICByZXR1cm4gZXJyQ2xhc3MgKyAiLSIgKyB0eXBlOwogICAgICAgIH0pLmpvaW4oIiAiKTsKICAgICAgfQogICAgICBlcnJDbGFzcyA9IGVyckNsYXNzICsgIiBodG1sd2lkZ2V0cy1lcnJvciI7CgogICAgICAvLyBJcyBlbCBpbmxpbmUgb3IgYmxvY2s/IElmIGlubGluZSBvciBpbmxpbmUtYmxvY2ssIGp1c3QgZGlzcGxheTpub25lIGl0CiAgICAgIC8vIGFuZCBhZGQgYW4gaW5saW5lIGVycm9yLgogICAgICB2YXIgZGlzcGxheSA9ICRlbC5jc3MoImRpc3BsYXkiKTsKICAgICAgJGVsLmRhdGEoInJlc3RvcmUtZGlzcGxheS1tb2RlIiwgZGlzcGxheSk7CgogICAgICBpZiAoZGlzcGxheSA9PT0gImlubGluZSIgfHwgZGlzcGxheSA9PT0gImlubGluZS1ibG9jayIpIHsKICAgICAgICAkZWwuaGlkZSgpOwogICAgICAgIGlmIChlcnIubWVzc2FnZSAhPT0gIiIpIHsKICAgICAgICAgIHZhciBlcnJvclNwYW4gPSAkKCI8c3Bhbj4iKS5hZGRDbGFzcyhlcnJDbGFzcyk7CiAgICAgICAgICBlcnJvclNwYW4udGV4dChlcnIubWVzc2FnZSk7CiAgICAgICAgICAkZWwuYWZ0ZXIoZXJyb3JTcGFuKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoZGlzcGxheSA9PT0gImJsb2NrIikgewogICAgICAgIC8vIElmIGJsb2NrLCBhZGQgYW4gZXJyb3IganVzdCBhZnRlciB0aGUgZWwsIHNldCB2aXNpYmlsaXR5Om5vbmUgb24gdGhlCiAgICAgICAgLy8gZWwsIGFuZCBwb3NpdGlvbiB0aGUgZXJyb3IgdG8gYmUgb24gdG9wIG9mIHRoZSBlbC4KICAgICAgICAvLyBNYXJrIGl0IHdpdGggYSB1bmlxdWUgSUQgYW5kIENTUyBjbGFzcyBzbyB3ZSBjYW4gcmVtb3ZlIGl0IGxhdGVyLgogICAgICAgICRlbC5jc3MoInZpc2liaWxpdHkiLCAiaGlkZGVuIik7CiAgICAgICAgaWYgKGVyci5tZXNzYWdlICE9PSAiIikgewogICAgICAgICAgdmFyIGVycm9yRGl2ID0gJCgiPGRpdj4iKS5hZGRDbGFzcyhlcnJDbGFzcykuY3NzKCJwb3NpdGlvbiIsICJhYnNvbHV0ZSIpCiAgICAgICAgICAgIC5jc3MoInRvcCIsIGVsLm9mZnNldFRvcCkKICAgICAgICAgICAgLmNzcygibGVmdCIsIGVsLm9mZnNldExlZnQpCiAgICAgICAgICAgIC8vIHNldHRpbmcgd2lkdGggY2FuIHB1c2ggb3V0IHRoZSBwYWdlIHNpemUsIGZvcmNpbmcgb3RoZXJ3aXNlCiAgICAgICAgICAgIC8vIHVubmVjZXNzYXJ5IHNjcm9sbGJhcnMgdG8gYXBwZWFyIGFuZCBtYWtpbmcgaXQgaW1wb3NzaWJsZSBmb3IKICAgICAgICAgICAgLy8gdGhlIGVsZW1lbnQgdG8gc2hyaW5rOyBzbyB1c2UgbWF4LXdpZHRoIGluc3RlYWQKICAgICAgICAgICAgLmNzcygibWF4V2lkdGgiLCBlbC5vZmZzZXRXaWR0aCkKICAgICAgICAgICAgLmNzcygiaGVpZ2h0IiwgZWwub2Zmc2V0SGVpZ2h0KTsKICAgICAgICAgIGVycm9yRGl2LnRleHQoZXJyLm1lc3NhZ2UpOwogICAgICAgICAgJGVsLmFmdGVyKGVycm9yRGl2KTsKCiAgICAgICAgICAvLyBSZWFsbHkgZHVtYiB3YXkgdG8ga2VlcCB0aGUgc2l6ZS9wb3NpdGlvbiBvZiB0aGUgZXJyb3IgaW4gc3luYyB3aXRoCiAgICAgICAgICAvLyB0aGUgcGFyZW50IGVsZW1lbnQgYXMgdGhlIHdpbmRvdyBpcyByZXNpemVkIG9yIHdoYXRldmVyLgogICAgICAgICAgdmFyIGludElkID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGlmICghZXJyb3JEaXZbMF0ucGFyZW50RWxlbWVudCkgewogICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50SWQpOwogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBlcnJvckRpdgogICAgICAgICAgICAgIC5jc3MoInRvcCIsIGVsLm9mZnNldFRvcCkKICAgICAgICAgICAgICAuY3NzKCJsZWZ0IiwgZWwub2Zmc2V0TGVmdCkKICAgICAgICAgICAgICAuY3NzKCJtYXhXaWR0aCIsIGVsLm9mZnNldFdpZHRoKQogICAgICAgICAgICAgIC5jc3MoImhlaWdodCIsIGVsLm9mZnNldEhlaWdodCk7CiAgICAgICAgICB9LCA1MDApOwogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIGNsZWFyRXJyb3I6IGZ1bmN0aW9uKGVsKSB7CiAgICAgIHZhciAkZWwgPSAkKGVsKTsKICAgICAgdmFyIGRpc3BsYXkgPSAkZWwuZGF0YSgicmVzdG9yZS1kaXNwbGF5LW1vZGUiKTsKICAgICAgJGVsLmRhdGEoInJlc3RvcmUtZGlzcGxheS1tb2RlIiwgbnVsbCk7CgogICAgICBpZiAoZGlzcGxheSA9PT0gImlubGluZSIgfHwgZGlzcGxheSA9PT0gImlubGluZS1ibG9jayIpIHsKICAgICAgICBpZiAoZGlzcGxheSkKICAgICAgICAgICRlbC5jc3MoImRpc3BsYXkiLCBkaXNwbGF5KTsKICAgICAgICAkKGVsLm5leHRTaWJsaW5nKS5maWx0ZXIoIi5odG1sd2lkZ2V0cy1lcnJvciIpLnJlbW92ZSgpOwogICAgICB9IGVsc2UgaWYgKGRpc3BsYXkgPT09ICJibG9jayIpewogICAgICAgICRlbC5jc3MoInZpc2liaWxpdHkiLCAiaW5oZXJpdCIpOwogICAgICAgICQoZWwubmV4dFNpYmxpbmcpLmZpbHRlcigiLmh0bWx3aWRnZXRzLWVycm9yIikucmVtb3ZlKCk7CiAgICAgIH0KICAgIH0sCiAgICBzaXppbmc6IHt9CiAgfTsKCiAgLy8gQ2FsbGVkIGJ5IHdpZGdldCBiaW5kaW5ncyB0byByZWdpc3RlciBhIG5ldyB0eXBlIG9mIHdpZGdldC4gVGhlIGRlZmluaXRpb24KICAvLyBvYmplY3QgY2FuIGNvbnRhaW4gdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgogIC8vIC0gbmFtZSAocmVxdWlyZWQpIC0gQSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgYmluZGluZyBuYW1lLCB3aGljaCB3aWxsIGJlCiAgLy8gICB1c2VkIGJ5IGRlZmF1bHQgYXMgdGhlIENTUyBjbGFzc25hbWUgdG8gbG9vayBmb3IuCiAgLy8gLSBpbml0aWFsaXplIChvcHRpb25hbCkgLSBBIGZ1bmN0aW9uKGVsKSB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uY2UgcGVyCiAgLy8gICB3aWRnZXQgZWxlbWVudDsgaWYgYSB2YWx1ZSBpcyByZXR1cm5lZCwgaXQgd2lsbCBiZSBwYXNzZWQgYXMgdGhlIHRoaXJkCiAgLy8gICB2YWx1ZSB0byByZW5kZXJWYWx1ZS4KICAvLyAtIHJlbmRlclZhbHVlIChyZXF1aXJlZCkgLSBBIGZ1bmN0aW9uKGVsLCBkYXRhLCBpbml0VmFsdWUpIHRoYXQgd2lsbCBiZQogIC8vICAgY2FsbGVkIHdpdGggZGF0YS4gU3RhdGljIGNvbnRleHRzIHdpbGwgY2F1c2UgdGhpcyB0byBiZSBjYWxsZWQgb25jZSBwZXIKICAvLyAgIGVsZW1lbnQ7IFNoaW55IGFwcHMgd2lsbCBjYXVzZSB0aGlzIHRvIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBwZXIKICAvLyAgIGVsZW1lbnQsIGFzIHRoZSBkYXRhIGNoYW5nZXMuCiAgd2luZG93LkhUTUxXaWRnZXRzLndpZGdldCA9IGZ1bmN0aW9uKGRlZmluaXRpb24pIHsKICAgIGlmICghZGVmaW5pdGlvbi5uYW1lKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiV2lkZ2V0IG11c3QgaGF2ZSBhIG5hbWUiKTsKICAgIH0KICAgIGlmICghZGVmaW5pdGlvbi50eXBlKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiV2lkZ2V0IG11c3QgaGF2ZSBhIHR5cGUiKTsKICAgIH0KICAgIC8vIEN1cnJlbnRseSB3ZSBvbmx5IHN1cHBvcnQgb3V0cHV0IHdpZGdldHMKICAgIGlmIChkZWZpbml0aW9uLnR5cGUgIT09ICJvdXRwdXQiKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHdpZGdldCB0eXBlICciICsgZGVmaW5pdGlvbi50eXBlICsgIiciKTsKICAgIH0KICAgIC8vIFRPRE86IFZlcmlmeSB0aGF0IC5uYW1lIGlzIGEgdmFsaWQgQ1NTIGNsYXNzbmFtZQogICAgaWYgKCFkZWZpbml0aW9uLnJlbmRlclZhbHVlKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiV2lkZ2V0IG11c3QgaGF2ZSBhIHJlbmRlclZhbHVlIGZ1bmN0aW9uIik7CiAgICB9CgogICAgLy8gRm9yIHN0YXRpYyByZW5kZXJpbmcgKG5vbi1TaGlueSksIHVzZSBhIHNpbXBsZSB3aWRnZXQgcmVnaXN0cmF0aW9uCiAgICAvLyBzY2hlbWUuIFdlIGFsc28gdXNlIHRoaXMgc2NoZW1lIGZvciBTaGlueSBhcHBzL2RvY3VtZW50cyB0aGF0IGFsc28KICAgIC8vIGNvbnRhaW4gc3RhdGljIHdpZGdldHMuCiAgICB3aW5kb3cuSFRNTFdpZGdldHMud2lkZ2V0cyA9IHdpbmRvdy5IVE1MV2lkZ2V0cy53aWRnZXRzIHx8IFtdOwogICAgLy8gTWVyZ2UgZGVmYXVsdHMgaW50byB0aGUgZGVmaW5pdGlvbjsgZG9uJ3QgbXV0YXRlIHRoZSBvcmlnaW5hbCBkZWZpbml0aW9uLgogICAgdmFyIHN0YXRpY0JpbmRpbmcgPSBleHRlbmQoe30sIGRlZmF1bHRzLCBkZWZpbml0aW9uKTsKICAgIG92ZXJyaWRlTWV0aG9kKHN0YXRpY0JpbmRpbmcsICJmaW5kIiwgZnVuY3Rpb24oc3VwZXJmdW5jKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbihzY29wZSkgewogICAgICAgIHZhciByZXN1bHRzID0gc3VwZXJmdW5jKHNjb3BlKTsKICAgICAgICAvLyBGaWx0ZXIgb3V0IFNoaW55IG91dHB1dHMsIHdlIG9ubHkgd2FudCB0aGUgc3RhdGljIGtpbmQKICAgICAgICByZXR1cm4gZmlsdGVyQnlDbGFzcyhyZXN1bHRzLCAiaHRtbC13aWRnZXQtb3V0cHV0IiwgZmFsc2UpOwogICAgICB9OwogICAgfSk7CiAgICB3aW5kb3cuSFRNTFdpZGdldHMud2lkZ2V0cy5wdXNoKHN0YXRpY0JpbmRpbmcpOwoKICAgIGlmIChzaGlueU1vZGUpIHsKICAgICAgLy8gU2hpbnkgaXMgcnVubmluZy4gUmVnaXN0ZXIgdGhlIGRlZmluaXRpb24gYXMgYW4gb3V0cHV0IGJpbmRpbmcuCgogICAgICAvLyBNZXJnZSBkZWZhdWx0cyBpbnRvIHRoZSBkZWZpbml0aW9uOyBkb24ndCBtdXRhdGUgdGhlIG9yaWdpbmFsIGRlZmluaXRpb24uCiAgICAgIC8vIFRoZSBiYXNlIG9iamVjdCBpcyBhIFNoaW55IG91dHB1dCBiaW5kaW5nIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gU2hpbnkgbW9kZSwKICAgICAgLy8gb3IgYW4gZW1wdHkgb2JqZWN0IGlmIHdlJ3JlIG5vdC4KICAgICAgdmFyIHNoaW55QmluZGluZyA9IGV4dGVuZChuZXcgU2hpbnkuT3V0cHV0QmluZGluZygpLCBkZWZhdWx0cywgZGVmaW5pdGlvbik7CgogICAgICAvLyBXcmFwIHJlbmRlclZhbHVlIHRvIGhhbmRsZSBpbml0aWFsaXphdGlvbiwgd2hpY2ggdW5mb3J0dW5hdGVseSBpc24ndAogICAgICAvLyBzdXBwb3J0ZWQgbmF0aXZlbHkgYnkgU2hpbnkgYXQgdGhlIHRpbWUgb2YgdGhpcyB3cml0aW5nLgoKICAgICAgLy8gTkI6IHNoaW55QmluZGluZy5pbml0aWFsaXplIG1heSBiZSB1bmRlZmluZWQsIGFzIGl0J3Mgb3B0aW9uYWwuCgogICAgICAvLyBSZW5hbWUgaW5pdGlhbGl6ZSB0byBtYWtlIHN1cmUgaXQgaXNuJ3QgY2FsbGVkIGJ5IGEgZnV0dXJlIHZlcnNpb24KICAgICAgLy8gb2YgU2hpbnkgdGhhdCBkb2VzIHN1cHBvcnQgaW5pdGlhbGl6ZSBkaXJlY3RseS4KICAgICAgc2hpbnlCaW5kaW5nLl9odG1sd2lkZ2V0c19pbml0aWFsaXplID0gc2hpbnlCaW5kaW5nLmluaXRpYWxpemU7CiAgICAgIGRlbGV0ZSBzaGlueUJpbmRpbmcuaW5pdGlhbGl6ZTsKCiAgICAgIG92ZXJyaWRlTWV0aG9kKHNoaW55QmluZGluZywgImZpbmQiLCBmdW5jdGlvbihzdXBlcmZ1bmMpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb24oc2NvcGUpIHsKCiAgICAgICAgICB2YXIgcmVzdWx0cyA9IHN1cGVyZnVuYyhzY29wZSk7CgogICAgICAgICAgLy8gT25seSByZXR1cm4gZWxlbWVudHMgdGhhdCBhcmUgU2hpbnkgb3V0cHV0cywgbm90IHN0YXRpYyBvbmVzCiAgICAgICAgICB2YXIgZHluYW1pY1Jlc3VsdHMgPSByZXN1bHRzLmZpbHRlcigiLmh0bWwtd2lkZ2V0LW91dHB1dCIpOwoKICAgICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB3aGF0ZXZlciBjYXVzZWQgU2hpbnkgdG8gdGhpbmsgdGhlcmUgbWlnaHQgYmUKICAgICAgICAgIC8vIG5ldyBkeW5hbWljIG91dHB1dHMsIGFsc28gY2F1c2VkIHRoZXJlIHRvIGJlIG5ldyBzdGF0aWMgb3V0cHV0cy4KICAgICAgICAgIC8vIFNpbmNlIHRoZXJlIG1pZ2h0IGJlIGxvdHMgb2YgZGlmZmVyZW50IGh0bWx3aWRnZXRzIGJpbmRpbmdzLCB3ZQogICAgICAgICAgLy8gc2NoZWR1bGUgZXhlY3V0aW9uIGZvciBsYXRlci0tbm8gbmVlZCB0byBzdGF0aWNSZW5kZXIgbXVsdGlwbGUKICAgICAgICAgIC8vIHRpbWVzLgogICAgICAgICAgaWYgKHJlc3VsdHMubGVuZ3RoICE9PSBkeW5hbWljUmVzdWx0cy5sZW5ndGgpCiAgICAgICAgICAgIHNjaGVkdWxlU3RhdGljUmVuZGVyKCk7CgogICAgICAgICAgcmV0dXJuIGR5bmFtaWNSZXN1bHRzOwogICAgICAgIH07CiAgICAgIH0pOwoKICAgICAgb3ZlcnJpZGVNZXRob2Qoc2hpbnlCaW5kaW5nLCAicmVuZGVyVmFsdWUiLCBmdW5jdGlvbihzdXBlcmZ1bmMpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb24oZWwsIGRhdGEpIHsKICAgICAgICAgIC8vIFJlc29sdmUgc3RyaW5ncyBtYXJrZWQgYXMgamF2YXNjcmlwdCBsaXRlcmFscyB0byBvYmplY3RzCiAgICAgICAgICBpZiAoIShkYXRhLmV2YWxzIGluc3RhbmNlb2YgQXJyYXkpKSBkYXRhLmV2YWxzID0gW2RhdGEuZXZhbHNdOwogICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGRhdGEuZXZhbHMgJiYgaSA8IGRhdGEuZXZhbHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgd2luZG93LkhUTUxXaWRnZXRzLmV2YWx1YXRlU3RyaW5nTWVtYmVyKGRhdGEueCwgZGF0YS5ldmFsc1tpXSk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoIXRoaXMucmVuZGVyT25OdWxsVmFsdWUpIHsKICAgICAgICAgICAgaWYgKGRhdGEueCA9PT0gbnVsbCkgewogICAgICAgICAgICAgIGVsLnN0eWxlLnZpc2liaWxpdHkgPSAiaGlkZGVuIjsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgZWwuc3R5bGUudmlzaWJpbGl0eSA9ICJpbmhlcml0IjsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKCFlbGVtZW50RGF0YShlbCwgImluaXRpYWxpemVkIikpIHsKICAgICAgICAgICAgaW5pdFNpemluZyhlbCk7CgogICAgICAgICAgICBlbGVtZW50RGF0YShlbCwgImluaXRpYWxpemVkIiwgdHJ1ZSk7CiAgICAgICAgICAgIGlmICh0aGlzLl9odG1sd2lkZ2V0c19pbml0aWFsaXplKSB7CiAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuX2h0bWx3aWRnZXRzX2luaXRpYWxpemUoZWwsIGVsLm9mZnNldFdpZHRoLAogICAgICAgICAgICAgICAgZWwub2Zmc2V0SGVpZ2h0KTsKICAgICAgICAgICAgICBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0IiwgcmVzdWx0KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgU2hpbnkucmVuZGVyRGVwZW5kZW5jaWVzKGRhdGEuZGVwcyk7CiAgICAgICAgICBzdXBlcmZ1bmMoZWwsIGRhdGEueCwgZWxlbWVudERhdGEoZWwsICJpbml0X3Jlc3VsdCIpKTsKICAgICAgICB9OwogICAgICB9KTsKCiAgICAgIG92ZXJyaWRlTWV0aG9kKHNoaW55QmluZGluZywgInJlc2l6ZSIsIGZ1bmN0aW9uKHN1cGVyZnVuYykgewogICAgICAgIHJldHVybiBmdW5jdGlvbihlbCwgd2lkdGgsIGhlaWdodCkgewogICAgICAgICAgLy8gU2hpbnkgY2FuIGNhbGwgcmVzaXplIGJlZm9yZSBpbml0aWFsaXplL3JlbmRlclZhbHVlIGhhdmUgYmVlbgogICAgICAgICAgLy8gY2FsbGVkLCB3aGljaCBkb2Vzbid0IG1ha2Ugc2Vuc2UgZm9yIHdpZGdldHMuCiAgICAgICAgICBpZiAoZWxlbWVudERhdGEoZWwsICJpbml0aWFsaXplZCIpKSB7CiAgICAgICAgICAgIHN1cGVyZnVuYyhlbCwgd2lkdGgsIGhlaWdodCwgZWxlbWVudERhdGEoZWwsICJpbml0X3Jlc3VsdCIpKTsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICB9KTsKCiAgICAgIFNoaW55Lm91dHB1dEJpbmRpbmdzLnJlZ2lzdGVyKHNoaW55QmluZGluZywgc2hpbnlCaW5kaW5nLm5hbWUpOwogICAgfQogIH07CgogIHZhciBzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQgPSBudWxsOwogIGZ1bmN0aW9uIHNjaGVkdWxlU3RhdGljUmVuZGVyKCkgewogICAgaWYgKCFzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQpIHsKICAgICAgc2NoZWR1bGVTdGF0aWNSZW5kZXJUaW1lcklkID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICBzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQgPSBudWxsOwogICAgICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy5zdGF0aWNSZW5kZXIoKTsKICAgICAgfSwgMSk7CiAgICB9CiAgfQoKICAvLyBSZW5kZXIgc3RhdGljIHdpZGdldHMgYWZ0ZXIgdGhlIGRvY3VtZW50IGZpbmlzaGVzIGxvYWRpbmcKICAvLyBTdGF0aWNhbGx5IHJlbmRlciBhbGwgZWxlbWVudHMgdGhhdCBhcmUgb2YgdGhpcyB3aWRnZXQncyBjbGFzcwogIHdpbmRvdy5IVE1MV2lkZ2V0cy5zdGF0aWNSZW5kZXIgPSBmdW5jdGlvbigpIHsKICAgIHZhciBiaW5kaW5ncyA9IHdpbmRvdy5IVE1MV2lkZ2V0cy53aWRnZXRzIHx8IFtdOwogICAgZm9yRWFjaChiaW5kaW5ncywgZnVuY3Rpb24oYmluZGluZykgewogICAgICB2YXIgbWF0Y2hlcyA9IGJpbmRpbmcuZmluZChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpOwogICAgICBmb3JFYWNoKG1hdGNoZXMsIGZ1bmN0aW9uKGVsKSB7CiAgICAgICAgdmFyIHNpemVPYmogPSBpbml0U2l6aW5nKGVsLCBiaW5kaW5nKTsKCiAgICAgICAgaWYgKGhhc0NsYXNzKGVsLCAiaHRtbC13aWRnZXQtc3RhdGljLWJvdW5kIikpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgZWwuY2xhc3NOYW1lID0gZWwuY2xhc3NOYW1lICsgIiBodG1sLXdpZGdldC1zdGF0aWMtYm91bmQiOwoKICAgICAgICB2YXIgaW5pdFJlc3VsdDsKICAgICAgICBpZiAoYmluZGluZy5pbml0aWFsaXplKSB7CiAgICAgICAgICBpbml0UmVzdWx0ID0gYmluZGluZy5pbml0aWFsaXplKGVsLAogICAgICAgICAgICBzaXplT2JqID8gc2l6ZU9iai5nZXRXaWR0aCgpIDogZWwub2Zmc2V0V2lkdGgsCiAgICAgICAgICAgIHNpemVPYmogPyBzaXplT2JqLmdldEhlaWdodCgpIDogZWwub2Zmc2V0SGVpZ2h0CiAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgaWYgKGJpbmRpbmcucmVzaXplKSB7CiAgICAgICAgICB2YXIgbGFzdFNpemUgPSB7fTsKICAgICAgICAgIHZhciByZXNpemVIYW5kbGVyID0gZnVuY3Rpb24oZSkgewogICAgICAgICAgICB2YXIgc2l6ZSA9IHsKICAgICAgICAgICAgICB3OiBzaXplT2JqID8gc2l6ZU9iai5nZXRXaWR0aCgpIDogZWwub2Zmc2V0V2lkdGgsCiAgICAgICAgICAgICAgaDogc2l6ZU9iaiA/IHNpemVPYmouZ2V0SGVpZ2h0KCkgOiBlbC5vZmZzZXRIZWlnaHQKICAgICAgICAgICAgfTsKICAgICAgICAgICAgaWYgKHNpemUudyA9PT0gMCAmJiBzaXplLmggPT09IDApCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoc2l6ZS53ID09PSBsYXN0U2l6ZS53ICYmIHNpemUuaCA9PT0gbGFzdFNpemUuaCkKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGxhc3RTaXplID0gc2l6ZTsKICAgICAgICAgICAgYmluZGluZy5yZXNpemUoZWwsIHNpemUudywgc2l6ZS5oLCBpbml0UmVzdWx0KTsKICAgICAgICAgIH07CgogICAgICAgICAgb24od2luZG93LCAicmVzaXplIiwgcmVzaXplSGFuZGxlcik7CgogICAgICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgZm9yIGNhc2VzIHdoZXJlIHdlJ3JlIHJ1bm5pbmcgaW4gYSBTaGlueQogICAgICAgICAgLy8gYXBwLCBidXQgdGhlIHdpZGdldCBpdHNlbGYgaXMgbm90IGEgU2hpbnkgb3V0cHV0LCBidXQKICAgICAgICAgIC8vIHJhdGhlciBhIHNpbXBsZSBzdGF0aWMgd2lkZ2V0LiBPbmUgZXhhbXBsZSBvZiB0aGlzIGlzCiAgICAgICAgICAvLyBhbiBybWFya2Rvd24gZG9jdW1lbnQgdGhhdCBoYXMgcnVudGltZTpzaGlueSBhbmQgd2lkZ2V0CiAgICAgICAgICAvLyB0aGF0IGlzbid0IGluIGEgcmVuZGVyIGZ1bmN0aW9uLiBTaGlueSBvbmx5IGtub3dzIHRvCiAgICAgICAgICAvLyBjYWxsIHJlc2l6ZSBoYW5kbGVycyBmb3IgU2hpbnkgb3V0cHV0cywgbm90IGZvciBzdGF0aWMKICAgICAgICAgIC8vIHdpZGdldHMsIHNvIHdlIGRvIGl0IG91cnNlbHZlcy4KICAgICAgICAgIGlmICh3aW5kb3cualF1ZXJ5KSB7CiAgICAgICAgICAgIHdpbmRvdy5qUXVlcnkoZG9jdW1lbnQpLm9uKCJzaG93biIsIHJlc2l6ZUhhbmRsZXIpOwogICAgICAgICAgICB3aW5kb3cualF1ZXJ5KGRvY3VtZW50KS5vbigiaGlkZGVuIiwgcmVzaXplSGFuZGxlcik7CiAgICAgICAgICB9CgogICAgICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgZm9yIHRoZSBzcGVjaWZpYyBjYXNlIG9mIGlvc2xpZGVzLCB3aGljaAogICAgICAgICAgLy8gZmxpcHMgc2xpZGVzIGJldHdlZW4gZGlzcGxheTpub25lIGFuZCBkaXNwbGF5OmJsb2NrLgogICAgICAgICAgLy8gSWRlYWxseSB3ZSB3b3VsZCBub3QgaGF2ZSB0byBoYXZlIGlvc2xpZGUtc3BlY2lmaWMgY29kZQogICAgICAgICAgLy8gaGVyZSwgYnV0IHJhdGhlciBoYXZlIGlvc2xpZGVzIHJhaXNlIGEgZ2VuZXJpYyBldmVudCwKICAgICAgICAgIC8vIGJ1dCB0aGUgcm1hcmtkb3duIHBhY2thZ2UganVzdCB3ZW50IHRvIENSQU4gc28gdGhlCiAgICAgICAgICAvLyB3aW5kb3cgdG8gZ2V0dGluZyB0aGF0IGZpeGVkIG1heSBiZSBsb25nLgogICAgICAgICAgaWYgKHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKSB7CiAgICAgICAgICAgIC8vIEl0J3MgT0sgdG8gbGltaXQgdGhpcyB0byB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcgogICAgICAgICAgICAvLyBicm93c2VycyBiZWNhdXNlIGlvc2xpZGVzIGl0c2VsZiBvbmx5IHN1cHBvcnRzCiAgICAgICAgICAgIC8vIHN1Y2ggYnJvd3NlcnMuCiAgICAgICAgICAgIG9uKGRvY3VtZW50LCAic2xpZGVlbnRlciIsIHJlc2l6ZUhhbmRsZXIpOwogICAgICAgICAgICBvbihkb2N1bWVudCwgInNsaWRlbGVhdmUiLCByZXNpemVIYW5kbGVyKTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHZhciBzY3JpcHREYXRhID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigic2NyaXB0W2RhdGEtZm9yPSciICsgZWwuaWQgKyAiJ11bdHlwZT0nYXBwbGljYXRpb24vanNvbiddIik7CiAgICAgICAgaWYgKHNjcmlwdERhdGEpIHsKICAgICAgICAgIHZhciBkYXRhID0gSlNPTi5wYXJzZShzY3JpcHREYXRhLnRleHRDb250ZW50IHx8IHNjcmlwdERhdGEudGV4dCk7CiAgICAgICAgICAvLyBSZXNvbHZlIHN0cmluZ3MgbWFya2VkIGFzIGphdmFzY3JpcHQgbGl0ZXJhbHMgdG8gb2JqZWN0cwogICAgICAgICAgaWYgKCEoZGF0YS5ldmFscyBpbnN0YW5jZW9mIEFycmF5KSkgZGF0YS5ldmFscyA9IFtkYXRhLmV2YWxzXTsKICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBkYXRhLmV2YWxzICYmIGsgPCBkYXRhLmV2YWxzLmxlbmd0aDsgaysrKSB7CiAgICAgICAgICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy5ldmFsdWF0ZVN0cmluZ01lbWJlcihkYXRhLngsIGRhdGEuZXZhbHNba10pOwogICAgICAgICAgfQogICAgICAgICAgYmluZGluZy5yZW5kZXJWYWx1ZShlbCwgZGF0YS54LCBpbml0UmVzdWx0KTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSk7CiAgfQoKICAvLyBXYWl0IHVudGlsIGFmdGVyIHRoZSBkb2N1bWVudCBoYXMgbG9hZGVkIHRvIHJlbmRlciB0aGUgd2lkZ2V0cy4KICBpZiAoZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcikgewogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsIGZ1bmN0aW9uKCkgewogICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwgYXJndW1lbnRzLmNhbGxlZSwgZmFsc2UpOwogICAgICB3aW5kb3cuSFRNTFdpZGdldHMuc3RhdGljUmVuZGVyKCk7CiAgICB9LCBmYWxzZSk7CiAgfSBlbHNlIGlmIChkb2N1bWVudC5hdHRhY2hFdmVudCkgewogICAgZG9jdW1lbnQuYXR0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsIGZ1bmN0aW9uKCkgewogICAgICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gImNvbXBsZXRlIikgewogICAgICAgIGRvY3VtZW50LmRldGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCBhcmd1bWVudHMuY2FsbGVlKTsKICAgICAgICB3aW5kb3cuSFRNTFdpZGdldHMuc3RhdGljUmVuZGVyKCk7CiAgICAgIH0KICAgIH0pOwogIH0KCgogIHdpbmRvdy5IVE1MV2lkZ2V0cy5nZXRBdHRhY2htZW50VXJsID0gZnVuY3Rpb24oZGVwbmFtZSwga2V5KSB7CiAgICAvLyBJZiBubyBrZXksIGRlZmF1bHQgdG8gdGhlIGZpcnN0IGl0ZW0KICAgIGlmICh0eXBlb2Yoa2V5KSA9PT0gInVuZGVmaW5lZCIpCiAgICAgIGtleSA9IDE7CgogICAgdmFyIGxpbmsgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChkZXBuYW1lICsgIi0iICsga2V5ICsgIi1hdHRhY2htZW50Iik7CiAgICBpZiAoIWxpbmspIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJBdHRhY2htZW50ICIgKyBkZXBuYW1lICsgIi8iICsga2V5ICsgIiBub3QgZm91bmQgaW4gZG9jdW1lbnQiKTsKICAgIH0KICAgIHJldHVybiBsaW5rLmdldEF0dHJpYnV0ZSgiaHJlZiIpOwogIH07CgogIHdpbmRvdy5IVE1MV2lkZ2V0cy5kYXRhZnJhbWVUb0QzID0gZnVuY3Rpb24oZGYpIHsKICAgIHZhciBuYW1lcyA9IFtdOwogICAgdmFyIGxlbmd0aDsKICAgIGZvciAodmFyIG5hbWUgaW4gZGYpIHsKICAgICAgICBpZiAoZGYuaGFzT3duUHJvcGVydHkobmFtZSkpCiAgICAgICAgICAgIG5hbWVzLnB1c2gobmFtZSk7CiAgICAgICAgaWYgKHR5cGVvZihkZltuYW1lXSkgIT09ICJvYmplY3QiIHx8IHR5cGVvZihkZltuYW1lXS5sZW5ndGgpID09PSAidW5kZWZpbmVkIikgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkFsbCBmaWVsZHMgbXVzdCBiZSBhcnJheXMiKTsKICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZihsZW5ndGgpICE9PSAidW5kZWZpbmVkIiAmJiBsZW5ndGggIT09IGRmW25hbWVdLmxlbmd0aCkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkFsbCBmaWVsZHMgbXVzdCBiZSBhcnJheXMgb2YgdGhlIHNhbWUgbGVuZ3RoIik7CiAgICAgICAgfQogICAgICAgIGxlbmd0aCA9IGRmW25hbWVdLmxlbmd0aDsKICAgIH0KICAgIHZhciByZXN1bHRzID0gW107CiAgICB2YXIgaXRlbTsKICAgIGZvciAodmFyIHJvdyA9IDA7IHJvdyA8IGxlbmd0aDsgcm93KyspIHsKICAgICAgICBpdGVtID0ge307CiAgICAgICAgZm9yICh2YXIgY29sID0gMDsgY29sIDwgbmFtZXMubGVuZ3RoOyBjb2wrKykgewogICAgICAgICAgICBpdGVtW25hbWVzW2NvbF1dID0gZGZbbmFtZXNbY29sXV1bcm93XTsKICAgICAgICB9CiAgICAgICAgcmVzdWx0cy5wdXNoKGl0ZW0pOwogICAgfQogICAgcmV0dXJuIHJlc3VsdHM7CiAgfTsKCiAgd2luZG93LkhUTUxXaWRnZXRzLnRyYW5zcG9zZUFycmF5MkQgPSBmdW5jdGlvbihhcnJheSkgewogICAgICB2YXIgbmV3QXJyYXkgPSBhcnJheVswXS5tYXAoZnVuY3Rpb24oY29sLCBpKSB7CiAgICAgICAgICByZXR1cm4gYXJyYXkubWFwKGZ1bmN0aW9uKHJvdykgewogICAgICAgICAgICAgIHJldHVybiByb3dbaV0KICAgICAgICAgIH0pCiAgICAgIH0pOwogICAgICByZXR1cm4gbmV3QXJyYXk7CiAgfTsKICAvLyBTcGxpdCB2YWx1ZSBhdCBzcGxpdENoYXIsIGJ1dCBhbGxvdyBzcGxpdENoYXIgdG8gYmUgZXNjYXBlZAogIC8vIHVzaW5nIGVzY2FwZUNoYXIuIEFueSBvdGhlciBjaGFyYWN0ZXJzIGVzY2FwZWQgYnkgZXNjYXBlQ2hhcgogIC8vIHdpbGwgYmUgaW5jbHVkZWQgYXMgdXN1YWwgKGluY2x1ZGluZyBlc2NhcGVDaGFyIGl0c2VsZikuCiAgZnVuY3Rpb24gc3BsaXRXaXRoRXNjYXBlKHZhbHVlLCBzcGxpdENoYXIsIGVzY2FwZUNoYXIpIHsKICAgIHZhciByZXN1bHRzID0gW107CiAgICB2YXIgZXNjYXBlTW9kZSA9IGZhbHNlOwogICAgdmFyIGN1cnJlbnRSZXN1bHQgPSAiIjsKICAgIGZvciAodmFyIHBvcyA9IDA7IHBvcyA8IHZhbHVlLmxlbmd0aDsgcG9zKyspIHsKICAgICAgaWYgKCFlc2NhcGVNb2RlKSB7CiAgICAgICAgaWYgKHZhbHVlW3Bvc10gPT09IHNwbGl0Q2hhcikgewogICAgICAgICAgcmVzdWx0cy5wdXNoKGN1cnJlbnRSZXN1bHQpOwogICAgICAgICAgY3VycmVudFJlc3VsdCA9ICIiOwogICAgICAgIH0gZWxzZSBpZiAodmFsdWVbcG9zXSA9PT0gZXNjYXBlQ2hhcikgewogICAgICAgICAgZXNjYXBlTW9kZSA9IHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGN1cnJlbnRSZXN1bHQgKz0gdmFsdWVbcG9zXTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY3VycmVudFJlc3VsdCArPSB2YWx1ZVtwb3NdOwogICAgICAgIGVzY2FwZU1vZGUgPSBmYWxzZTsKICAgICAgfQogICAgfQogICAgaWYgKGN1cnJlbnRSZXN1bHQgIT09ICIiKSB7CiAgICAgIHJlc3VsdHMucHVzaChjdXJyZW50UmVzdWx0KTsKICAgIH0KICAgIHJldHVybiByZXN1bHRzOwogIH0KICAvLyBGdW5jdGlvbiBhdXRob3JlZCBieSBZaWh1aS9KSiBBbGxhaXJlCiAgd2luZG93LkhUTUxXaWRnZXRzLmV2YWx1YXRlU3RyaW5nTWVtYmVyID0gZnVuY3Rpb24obywgbWVtYmVyKSB7CiAgICB2YXIgcGFydHMgPSBzcGxpdFdpdGhFc2NhcGUobWVtYmVyLCAnLicsICdcXCcpOwogICAgZm9yICh2YXIgaSA9IDAsIGwgPSBwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKICAgICAgdmFyIHBhcnQgPSBwYXJ0c1tpXTsKICAgICAgLy8gcGFydCBtYXkgYmUgYSBjaGFyYWN0ZXIgb3IgJ251bWVyaWMnIG1lbWJlciBuYW1lCiAgICAgIGlmIChvICE9PSBudWxsICYmIHR5cGVvZiBvID09PSAib2JqZWN0IiAmJiBwYXJ0IGluIG8pIHsKICAgICAgICBpZiAoaSA9PSAobCAtIDEpKSB7IC8vIGlmIHdlIGFyZSBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lIHRoZW4gZXZhbHVsYXRlCiAgICAgICAgICBpZiAodHlwZW9mIG9bcGFydF0gPT09ICJzdHJpbmciKQogICAgICAgICAgICBvW3BhcnRdID0gZXZhbCgiKCIgKyBvW3BhcnRdICsgIikiKTsKICAgICAgICB9IGVsc2UgeyAvLyBvdGhlcndpc2UgY29udGludWUgdG8gbmV4dCBlbWJlZGRlZCBvYmplY3QKICAgICAgICAgIG8gPSBvW3BhcnRdOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH07Cn0pKCk7Cgo="></script>
<script src="data:application/x-javascript;base64,LyohIEhhbW1lci5KUyAtIHYyLjAuNCAtIDIwMTQtMDktMjgKICogaHR0cDovL2hhbW1lcmpzLmdpdGh1Yi5pby8KICoKICogQ29weXJpZ2h0IChjKSAyMDE0IEpvcmlrIFRhbmdlbGRlcjsKICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlICovCiFmdW5jdGlvbihhLGIsYyxkKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZShhLGIsYyl7cmV0dXJuIHNldFRpbWVvdXQoayhhLGMpLGIpfWZ1bmN0aW9uIGYoYSxiLGMpe3JldHVybiBBcnJheS5pc0FycmF5KGEpPyhnKGEsY1tiXSxjKSwhMCk6ITF9ZnVuY3Rpb24gZyhhLGIsYyl7dmFyIGU7aWYoYSlpZihhLmZvckVhY2gpYS5mb3JFYWNoKGIsYyk7ZWxzZSBpZihhLmxlbmd0aCE9PWQpZm9yKGU9MDtlPGEubGVuZ3RoOyliLmNhbGwoYyxhW2VdLGUsYSksZSsrO2Vsc2UgZm9yKGUgaW4gYSlhLmhhc093blByb3BlcnR5KGUpJiZiLmNhbGwoYyxhW2VdLGUsYSl9ZnVuY3Rpb24gaChhLGIsYyl7Zm9yKHZhciBlPU9iamVjdC5rZXlzKGIpLGY9MDtmPGUubGVuZ3RoOykoIWN8fGMmJmFbZVtmXV09PT1kKSYmKGFbZVtmXV09YltlW2ZdXSksZisrO3JldHVybiBhfWZ1bmN0aW9uIGkoYSxiKXtyZXR1cm4gaChhLGIsITApfWZ1bmN0aW9uIGooYSxiLGMpe3ZhciBkLGU9Yi5wcm90b3R5cGU7ZD1hLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUpLGQuY29uc3RydWN0b3I9YSxkLl9zdXBlcj1lLGMmJmgoZCxjKX1mdW5jdGlvbiBrKGEsYil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGEuYXBwbHkoYixhcmd1bWVudHMpfX1mdW5jdGlvbiBsKGEsYil7cmV0dXJuIHR5cGVvZiBhPT1rYj9hLmFwcGx5KGI/YlswXXx8ZDpkLGIpOmF9ZnVuY3Rpb24gbShhLGIpe3JldHVybiBhPT09ZD9iOmF9ZnVuY3Rpb24gbihhLGIsYyl7ZyhyKGIpLGZ1bmN0aW9uKGIpe2EuYWRkRXZlbnRMaXN0ZW5lcihiLGMsITEpfSl9ZnVuY3Rpb24gbyhhLGIsYyl7ZyhyKGIpLGZ1bmN0aW9uKGIpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lcihiLGMsITEpfSl9ZnVuY3Rpb24gcChhLGIpe2Zvcig7YTspe2lmKGE9PWIpcmV0dXJuITA7YT1hLnBhcmVudE5vZGV9cmV0dXJuITF9ZnVuY3Rpb24gcShhLGIpe3JldHVybiBhLmluZGV4T2YoYik+LTF9ZnVuY3Rpb24gcihhKXtyZXR1cm4gYS50cmltKCkuc3BsaXQoL1xzKy9nKX1mdW5jdGlvbiBzKGEsYixjKXtpZihhLmluZGV4T2YmJiFjKXJldHVybiBhLmluZGV4T2YoYik7Zm9yKHZhciBkPTA7ZDxhLmxlbmd0aDspe2lmKGMmJmFbZF1bY109PWJ8fCFjJiZhW2RdPT09YilyZXR1cm4gZDtkKyt9cmV0dXJuLTF9ZnVuY3Rpb24gdChhKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYSwwKX1mdW5jdGlvbiB1KGEsYixjKXtmb3IodmFyIGQ9W10sZT1bXSxmPTA7ZjxhLmxlbmd0aDspe3ZhciBnPWI/YVtmXVtiXTphW2ZdO3MoZSxnKTwwJiZkLnB1c2goYVtmXSksZVtmXT1nLGYrK31yZXR1cm4gYyYmKGQ9Yj9kLnNvcnQoZnVuY3Rpb24oYSxjKXtyZXR1cm4gYVtiXT5jW2JdfSk6ZC5zb3J0KCkpLGR9ZnVuY3Rpb24gdihhLGIpe2Zvcih2YXIgYyxlLGY9YlswXS50b1VwcGVyQ2FzZSgpK2Iuc2xpY2UoMSksZz0wO2c8aWIubGVuZ3RoOyl7aWYoYz1pYltnXSxlPWM/YytmOmIsZSBpbiBhKXJldHVybiBlO2crK31yZXR1cm4gZH1mdW5jdGlvbiB3KCl7cmV0dXJuIG9iKyt9ZnVuY3Rpb24geChhKXt2YXIgYj1hLm93bmVyRG9jdW1lbnQ7cmV0dXJuIGIuZGVmYXVsdFZpZXd8fGIucGFyZW50V2luZG93fWZ1bmN0aW9uIHkoYSxiKXt2YXIgYz10aGlzO3RoaXMubWFuYWdlcj1hLHRoaXMuY2FsbGJhY2s9Yix0aGlzLmVsZW1lbnQ9YS5lbGVtZW50LHRoaXMudGFyZ2V0PWEub3B0aW9ucy5pbnB1dFRhcmdldCx0aGlzLmRvbUhhbmRsZXI9ZnVuY3Rpb24oYil7bChhLm9wdGlvbnMuZW5hYmxlLFthXSkmJmMuaGFuZGxlcihiKX0sdGhpcy5pbml0KCl9ZnVuY3Rpb24geihhKXt2YXIgYixjPWEub3B0aW9ucy5pbnB1dENsYXNzO3JldHVybiBuZXcoYj1jP2M6cmI/TjpzYj9ROnFiP1M6TSkoYSxBKX1mdW5jdGlvbiBBKGEsYixjKXt2YXIgZD1jLnBvaW50ZXJzLmxlbmd0aCxlPWMuY2hhbmdlZFBvaW50ZXJzLmxlbmd0aCxmPWImeWImJmQtZT09PTAsZz1iJihBYnxCYikmJmQtZT09PTA7Yy5pc0ZpcnN0PSEhZixjLmlzRmluYWw9ISFnLGYmJihhLnNlc3Npb249e30pLGMuZXZlbnRUeXBlPWIsQihhLGMpLGEuZW1pdCgiaGFtbWVyLmlucHV0IixjKSxhLnJlY29nbml6ZShjKSxhLnNlc3Npb24ucHJldklucHV0PWN9ZnVuY3Rpb24gQihhLGIpe3ZhciBjPWEuc2Vzc2lvbixkPWIucG9pbnRlcnMsZT1kLmxlbmd0aDtjLmZpcnN0SW5wdXR8fChjLmZpcnN0SW5wdXQ9RShiKSksZT4xJiYhYy5maXJzdE11bHRpcGxlP2MuZmlyc3RNdWx0aXBsZT1FKGIpOjE9PT1lJiYoYy5maXJzdE11bHRpcGxlPSExKTt2YXIgZj1jLmZpcnN0SW5wdXQsZz1jLmZpcnN0TXVsdGlwbGUsaD1nP2cuY2VudGVyOmYuY2VudGVyLGk9Yi5jZW50ZXI9RihkKTtiLnRpbWVTdGFtcD1uYigpLGIuZGVsdGFUaW1lPWIudGltZVN0YW1wLWYudGltZVN0YW1wLGIuYW5nbGU9SihoLGkpLGIuZGlzdGFuY2U9SShoLGkpLEMoYyxiKSxiLm9mZnNldERpcmVjdGlvbj1IKGIuZGVsdGFYLGIuZGVsdGFZKSxiLnNjYWxlPWc/TChnLnBvaW50ZXJzLGQpOjEsYi5yb3RhdGlvbj1nP0soZy5wb2ludGVycyxkKTowLEQoYyxiKTt2YXIgaj1hLmVsZW1lbnQ7cChiLnNyY0V2ZW50LnRhcmdldCxqKSYmKGo9Yi5zcmNFdmVudC50YXJnZXQpLGIudGFyZ2V0PWp9ZnVuY3Rpb24gQyhhLGIpe3ZhciBjPWIuY2VudGVyLGQ9YS5vZmZzZXREZWx0YXx8e30sZT1hLnByZXZEZWx0YXx8e30sZj1hLnByZXZJbnB1dHx8e307KGIuZXZlbnRUeXBlPT09eWJ8fGYuZXZlbnRUeXBlPT09QWIpJiYoZT1hLnByZXZEZWx0YT17eDpmLmRlbHRhWHx8MCx5OmYuZGVsdGFZfHwwfSxkPWEub2Zmc2V0RGVsdGE9e3g6Yy54LHk6Yy55fSksYi5kZWx0YVg9ZS54KyhjLngtZC54KSxiLmRlbHRhWT1lLnkrKGMueS1kLnkpfWZ1bmN0aW9uIEQoYSxiKXt2YXIgYyxlLGYsZyxoPWEubGFzdEludGVydmFsfHxiLGk9Yi50aW1lU3RhbXAtaC50aW1lU3RhbXA7aWYoYi5ldmVudFR5cGUhPUJiJiYoaT54Ynx8aC52ZWxvY2l0eT09PWQpKXt2YXIgaj1oLmRlbHRhWC1iLmRlbHRhWCxrPWguZGVsdGFZLWIuZGVsdGFZLGw9RyhpLGosayk7ZT1sLngsZj1sLnksYz1tYihsLngpPm1iKGwueSk/bC54OmwueSxnPUgoaixrKSxhLmxhc3RJbnRlcnZhbD1ifWVsc2UgYz1oLnZlbG9jaXR5LGU9aC52ZWxvY2l0eVgsZj1oLnZlbG9jaXR5WSxnPWguZGlyZWN0aW9uO2IudmVsb2NpdHk9YyxiLnZlbG9jaXR5WD1lLGIudmVsb2NpdHlZPWYsYi5kaXJlY3Rpb249Z31mdW5jdGlvbiBFKGEpe2Zvcih2YXIgYj1bXSxjPTA7YzxhLnBvaW50ZXJzLmxlbmd0aDspYltjXT17Y2xpZW50WDpsYihhLnBvaW50ZXJzW2NdLmNsaWVudFgpLGNsaWVudFk6bGIoYS5wb2ludGVyc1tjXS5jbGllbnRZKX0sYysrO3JldHVybnt0aW1lU3RhbXA6bmIoKSxwb2ludGVyczpiLGNlbnRlcjpGKGIpLGRlbHRhWDphLmRlbHRhWCxkZWx0YVk6YS5kZWx0YVl9fWZ1bmN0aW9uIEYoYSl7dmFyIGI9YS5sZW5ndGg7aWYoMT09PWIpcmV0dXJue3g6bGIoYVswXS5jbGllbnRYKSx5OmxiKGFbMF0uY2xpZW50WSl9O2Zvcih2YXIgYz0wLGQ9MCxlPTA7Yj5lOyljKz1hW2VdLmNsaWVudFgsZCs9YVtlXS5jbGllbnRZLGUrKztyZXR1cm57eDpsYihjL2IpLHk6bGIoZC9iKX19ZnVuY3Rpb24gRyhhLGIsYyl7cmV0dXJue3g6Yi9hfHwwLHk6Yy9hfHwwfX1mdW5jdGlvbiBIKGEsYil7cmV0dXJuIGE9PT1iP0NiOm1iKGEpPj1tYihiKT9hPjA/RGI6RWI6Yj4wP0ZiOkdifWZ1bmN0aW9uIEkoYSxiLGMpe2N8fChjPUtiKTt2YXIgZD1iW2NbMF1dLWFbY1swXV0sZT1iW2NbMV1dLWFbY1sxXV07cmV0dXJuIE1hdGguc3FydChkKmQrZSplKX1mdW5jdGlvbiBKKGEsYixjKXtjfHwoYz1LYik7dmFyIGQ9YltjWzBdXS1hW2NbMF1dLGU9YltjWzFdXS1hW2NbMV1dO3JldHVybiAxODAqTWF0aC5hdGFuMihlLGQpL01hdGguUEl9ZnVuY3Rpb24gSyhhLGIpe3JldHVybiBKKGJbMV0sYlswXSxMYiktSihhWzFdLGFbMF0sTGIpfWZ1bmN0aW9uIEwoYSxiKXtyZXR1cm4gSShiWzBdLGJbMV0sTGIpL0koYVswXSxhWzFdLExiKX1mdW5jdGlvbiBNKCl7dGhpcy5ldkVsPU5iLHRoaXMuZXZXaW49T2IsdGhpcy5hbGxvdz0hMCx0aGlzLnByZXNzZWQ9ITEseS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gTigpe3RoaXMuZXZFbD1SYix0aGlzLmV2V2luPVNiLHkuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuc3RvcmU9dGhpcy5tYW5hZ2VyLnNlc3Npb24ucG9pbnRlckV2ZW50cz1bXX1mdW5jdGlvbiBPKCl7dGhpcy5ldlRhcmdldD1VYix0aGlzLmV2V2luPVZiLHRoaXMuc3RhcnRlZD0hMSx5LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBQKGEsYil7dmFyIGM9dChhLnRvdWNoZXMpLGQ9dChhLmNoYW5nZWRUb3VjaGVzKTtyZXR1cm4gYiYoQWJ8QmIpJiYoYz11KGMuY29uY2F0KGQpLCJpZGVudGlmaWVyIiwhMCkpLFtjLGRdfWZ1bmN0aW9uIFEoKXt0aGlzLmV2VGFyZ2V0PVhiLHRoaXMudGFyZ2V0SWRzPXt9LHkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIFIoYSxiKXt2YXIgYz10KGEudG91Y2hlcyksZD10aGlzLnRhcmdldElkcztpZihiJih5Ynx6YikmJjE9PT1jLmxlbmd0aClyZXR1cm4gZFtjWzBdLmlkZW50aWZpZXJdPSEwLFtjLGNdO3ZhciBlLGYsZz10KGEuY2hhbmdlZFRvdWNoZXMpLGg9W10saT10aGlzLnRhcmdldDtpZihmPWMuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBwKGEudGFyZ2V0LGkpfSksYj09PXliKWZvcihlPTA7ZTxmLmxlbmd0aDspZFtmW2VdLmlkZW50aWZpZXJdPSEwLGUrKztmb3IoZT0wO2U8Zy5sZW5ndGg7KWRbZ1tlXS5pZGVudGlmaWVyXSYmaC5wdXNoKGdbZV0pLGImKEFifEJiKSYmZGVsZXRlIGRbZ1tlXS5pZGVudGlmaWVyXSxlKys7cmV0dXJuIGgubGVuZ3RoP1t1KGYuY29uY2F0KGgpLCJpZGVudGlmaWVyIiwhMCksaF06dm9pZCAwfWZ1bmN0aW9uIFMoKXt5LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgYT1rKHRoaXMuaGFuZGxlcix0aGlzKTt0aGlzLnRvdWNoPW5ldyBRKHRoaXMubWFuYWdlcixhKSx0aGlzLm1vdXNlPW5ldyBNKHRoaXMubWFuYWdlcixhKX1mdW5jdGlvbiBUKGEsYil7dGhpcy5tYW5hZ2VyPWEsdGhpcy5zZXQoYil9ZnVuY3Rpb24gVShhKXtpZihxKGEsYmMpKXJldHVybiBiYzt2YXIgYj1xKGEsY2MpLGM9cShhLGRjKTtyZXR1cm4gYiYmYz9jYysiICIrZGM6Ynx8Yz9iP2NjOmRjOnEoYSxhYyk/YWM6X2J9ZnVuY3Rpb24gVihhKXt0aGlzLmlkPXcoKSx0aGlzLm1hbmFnZXI9bnVsbCx0aGlzLm9wdGlvbnM9aShhfHx7fSx0aGlzLmRlZmF1bHRzKSx0aGlzLm9wdGlvbnMuZW5hYmxlPW0odGhpcy5vcHRpb25zLmVuYWJsZSwhMCksdGhpcy5zdGF0ZT1lYyx0aGlzLnNpbXVsdGFuZW91cz17fSx0aGlzLnJlcXVpcmVGYWlsPVtdfWZ1bmN0aW9uIFcoYSl7cmV0dXJuIGEmamM/ImNhbmNlbCI6YSZoYz8iZW5kIjphJmdjPyJtb3ZlIjphJmZjPyJzdGFydCI6IiJ9ZnVuY3Rpb24gWChhKXtyZXR1cm4gYT09R2I/ImRvd24iOmE9PUZiPyJ1cCI6YT09RGI/ImxlZnQiOmE9PUViPyJyaWdodCI6IiJ9ZnVuY3Rpb24gWShhLGIpe3ZhciBjPWIubWFuYWdlcjtyZXR1cm4gYz9jLmdldChhKTphfWZ1bmN0aW9uIFooKXtWLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiAkKCl7Wi5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5wWD1udWxsLHRoaXMucFk9bnVsbH1mdW5jdGlvbiBfKCl7Wi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gYWIoKXtWLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLl90aW1lcj1udWxsLHRoaXMuX2lucHV0PW51bGx9ZnVuY3Rpb24gYmIoKXtaLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBjYigpe1ouYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIGRiKCl7Vi5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5wVGltZT0hMSx0aGlzLnBDZW50ZXI9ITEsdGhpcy5fdGltZXI9bnVsbCx0aGlzLl9pbnB1dD1udWxsLHRoaXMuY291bnQ9MH1mdW5jdGlvbiBlYihhLGIpe3JldHVybiBiPWJ8fHt9LGIucmVjb2duaXplcnM9bShiLnJlY29nbml6ZXJzLGViLmRlZmF1bHRzLnByZXNldCksbmV3IGZiKGEsYil9ZnVuY3Rpb24gZmIoYSxiKXtiPWJ8fHt9LHRoaXMub3B0aW9ucz1pKGIsZWIuZGVmYXVsdHMpLHRoaXMub3B0aW9ucy5pbnB1dFRhcmdldD10aGlzLm9wdGlvbnMuaW5wdXRUYXJnZXR8fGEsdGhpcy5oYW5kbGVycz17fSx0aGlzLnNlc3Npb249e30sdGhpcy5yZWNvZ25pemVycz1bXSx0aGlzLmVsZW1lbnQ9YSx0aGlzLmlucHV0PXoodGhpcyksdGhpcy50b3VjaEFjdGlvbj1uZXcgVCh0aGlzLHRoaXMub3B0aW9ucy50b3VjaEFjdGlvbiksZ2IodGhpcywhMCksZyhiLnJlY29nbml6ZXJzLGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuYWRkKG5ldyBhWzBdKGFbMV0pKTthWzJdJiZiLnJlY29nbml6ZVdpdGgoYVsyXSksYVszXSYmYi5yZXF1aXJlRmFpbHVyZShhWzNdKX0sdGhpcyl9ZnVuY3Rpb24gZ2IoYSxiKXt2YXIgYz1hLmVsZW1lbnQ7ZyhhLm9wdGlvbnMuY3NzUHJvcHMsZnVuY3Rpb24oYSxkKXtjLnN0eWxlW3YoYy5zdHlsZSxkKV09Yj9hOiIifSl9ZnVuY3Rpb24gaGIoYSxjKXt2YXIgZD1iLmNyZWF0ZUV2ZW50KCJFdmVudCIpO2QuaW5pdEV2ZW50KGEsITAsITApLGQuZ2VzdHVyZT1jLGMudGFyZ2V0LmRpc3BhdGNoRXZlbnQoZCl9dmFyIGliPVsiIiwid2Via2l0IiwibW96IiwiTVMiLCJtcyIsIm8iXSxqYj1iLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGtiPSJmdW5jdGlvbiIsbGI9TWF0aC5yb3VuZCxtYj1NYXRoLmFicyxuYj1EYXRlLm5vdyxvYj0xLHBiPS9tb2JpbGV8dGFibGV0fGlwKGFkfGhvbmV8b2QpfGFuZHJvaWQvaSxxYj0ib250b3VjaHN0YXJ0ImluIGEscmI9dihhLCJQb2ludGVyRXZlbnQiKSE9PWQsc2I9cWImJnBiLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdGI9InRvdWNoIix1Yj0icGVuIix2Yj0ibW91c2UiLHdiPSJraW5lY3QiLHhiPTI1LHliPTEsemI9MixBYj00LEJiPTgsQ2I9MSxEYj0yLEViPTQsRmI9OCxHYj0xNixIYj1EYnxFYixJYj1GYnxHYixKYj1IYnxJYixLYj1bIngiLCJ5Il0sTGI9WyJjbGllbnRYIiwiY2xpZW50WSJdO3kucHJvdG90eXBlPXtoYW5kbGVyOmZ1bmN0aW9uKCl7fSxpbml0OmZ1bmN0aW9uKCl7dGhpcy5ldkVsJiZuKHRoaXMuZWxlbWVudCx0aGlzLmV2RWwsdGhpcy5kb21IYW5kbGVyKSx0aGlzLmV2VGFyZ2V0JiZuKHRoaXMudGFyZ2V0LHRoaXMuZXZUYXJnZXQsdGhpcy5kb21IYW5kbGVyKSx0aGlzLmV2V2luJiZuKHgodGhpcy5lbGVtZW50KSx0aGlzLmV2V2luLHRoaXMuZG9tSGFuZGxlcil9LGRlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmV2RWwmJm8odGhpcy5lbGVtZW50LHRoaXMuZXZFbCx0aGlzLmRvbUhhbmRsZXIpLHRoaXMuZXZUYXJnZXQmJm8odGhpcy50YXJnZXQsdGhpcy5ldlRhcmdldCx0aGlzLmRvbUhhbmRsZXIpLHRoaXMuZXZXaW4mJm8oeCh0aGlzLmVsZW1lbnQpLHRoaXMuZXZXaW4sdGhpcy5kb21IYW5kbGVyKX19O3ZhciBNYj17bW91c2Vkb3duOnliLG1vdXNlbW92ZTp6Yixtb3VzZXVwOkFifSxOYj0ibW91c2Vkb3duIixPYj0ibW91c2Vtb3ZlIG1vdXNldXAiO2ooTSx5LHtoYW5kbGVyOmZ1bmN0aW9uKGEpe3ZhciBiPU1iW2EudHlwZV07YiZ5YiYmMD09PWEuYnV0dG9uJiYodGhpcy5wcmVzc2VkPSEwKSxiJnpiJiYxIT09YS53aGljaCYmKGI9QWIpLHRoaXMucHJlc3NlZCYmdGhpcy5hbGxvdyYmKGImQWImJih0aGlzLnByZXNzZWQ9ITEpLHRoaXMuY2FsbGJhY2sodGhpcy5tYW5hZ2VyLGIse3BvaW50ZXJzOlthXSxjaGFuZ2VkUG9pbnRlcnM6W2FdLHBvaW50ZXJUeXBlOnZiLHNyY0V2ZW50OmF9KSl9fSk7dmFyIFBiPXtwb2ludGVyZG93bjp5Yixwb2ludGVybW92ZTp6Yixwb2ludGVydXA6QWIscG9pbnRlcmNhbmNlbDpCYixwb2ludGVyb3V0OkJifSxRYj17Mjp0YiwzOnViLDQ6dmIsNTp3Yn0sUmI9InBvaW50ZXJkb3duIixTYj0icG9pbnRlcm1vdmUgcG9pbnRlcnVwIHBvaW50ZXJjYW5jZWwiO2EuTVNQb2ludGVyRXZlbnQmJihSYj0iTVNQb2ludGVyRG93biIsU2I9Ik1TUG9pbnRlck1vdmUgTVNQb2ludGVyVXAgTVNQb2ludGVyQ2FuY2VsIiksaihOLHkse2hhbmRsZXI6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5zdG9yZSxjPSExLGQ9YS50eXBlLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgibXMiLCIiKSxlPVBiW2RdLGY9UWJbYS5wb2ludGVyVHlwZV18fGEucG9pbnRlclR5cGUsZz1mPT10YixoPXMoYixhLnBvaW50ZXJJZCwicG9pbnRlcklkIik7ZSZ5YiYmKDA9PT1hLmJ1dHRvbnx8Zyk/MD5oJiYoYi5wdXNoKGEpLGg9Yi5sZW5ndGgtMSk6ZSYoQWJ8QmIpJiYoYz0hMCksMD5ofHwoYltoXT1hLHRoaXMuY2FsbGJhY2sodGhpcy5tYW5hZ2VyLGUse3BvaW50ZXJzOmIsY2hhbmdlZFBvaW50ZXJzOlthXSxwb2ludGVyVHlwZTpmLHNyY0V2ZW50OmF9KSxjJiZiLnNwbGljZShoLDEpKX19KTt2YXIgVGI9e3RvdWNoc3RhcnQ6eWIsdG91Y2htb3ZlOnpiLHRvdWNoZW5kOkFiLHRvdWNoY2FuY2VsOkJifSxVYj0idG91Y2hzdGFydCIsVmI9InRvdWNoc3RhcnQgdG91Y2htb3ZlIHRvdWNoZW5kIHRvdWNoY2FuY2VsIjtqKE8seSx7aGFuZGxlcjpmdW5jdGlvbihhKXt2YXIgYj1UYlthLnR5cGVdO2lmKGI9PT15YiYmKHRoaXMuc3RhcnRlZD0hMCksdGhpcy5zdGFydGVkKXt2YXIgYz1QLmNhbGwodGhpcyxhLGIpO2ImKEFifEJiKSYmY1swXS5sZW5ndGgtY1sxXS5sZW5ndGg9PT0wJiYodGhpcy5zdGFydGVkPSExKSx0aGlzLmNhbGxiYWNrKHRoaXMubWFuYWdlcixiLHtwb2ludGVyczpjWzBdLGNoYW5nZWRQb2ludGVyczpjWzFdLHBvaW50ZXJUeXBlOnRiLHNyY0V2ZW50OmF9KX19fSk7dmFyIFdiPXt0b3VjaHN0YXJ0OnliLHRvdWNobW92ZTp6Yix0b3VjaGVuZDpBYix0b3VjaGNhbmNlbDpCYn0sWGI9InRvdWNoc3RhcnQgdG91Y2htb3ZlIHRvdWNoZW5kIHRvdWNoY2FuY2VsIjtqKFEseSx7aGFuZGxlcjpmdW5jdGlvbihhKXt2YXIgYj1XYlthLnR5cGVdLGM9Ui5jYWxsKHRoaXMsYSxiKTtjJiZ0aGlzLmNhbGxiYWNrKHRoaXMubWFuYWdlcixiLHtwb2ludGVyczpjWzBdLGNoYW5nZWRQb2ludGVyczpjWzFdLHBvaW50ZXJUeXBlOnRiLHNyY0V2ZW50OmF9KX19KSxqKFMseSx7aGFuZGxlcjpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9Yy5wb2ludGVyVHlwZT09dGIsZT1jLnBvaW50ZXJUeXBlPT12YjtpZihkKXRoaXMubW91c2UuYWxsb3c9ITE7ZWxzZSBpZihlJiYhdGhpcy5tb3VzZS5hbGxvdylyZXR1cm47YiYoQWJ8QmIpJiYodGhpcy5tb3VzZS5hbGxvdz0hMCksdGhpcy5jYWxsYmFjayhhLGIsYyl9LGRlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLnRvdWNoLmRlc3Ryb3koKSx0aGlzLm1vdXNlLmRlc3Ryb3koKX19KTt2YXIgWWI9dihqYi5zdHlsZSwidG91Y2hBY3Rpb24iKSxaYj1ZYiE9PWQsJGI9ImNvbXB1dGUiLF9iPSJhdXRvIixhYz0ibWFuaXB1bGF0aW9uIixiYz0ibm9uZSIsY2M9InBhbi14IixkYz0icGFuLXkiO1QucHJvdG90eXBlPXtzZXQ6ZnVuY3Rpb24oYSl7YT09JGImJihhPXRoaXMuY29tcHV0ZSgpKSxaYiYmKHRoaXMubWFuYWdlci5lbGVtZW50LnN0eWxlW1liXT1hKSx0aGlzLmFjdGlvbnM9YS50b0xvd2VyQ2FzZSgpLnRyaW0oKX0sdXBkYXRlOmZ1bmN0aW9uKCl7dGhpcy5zZXQodGhpcy5tYW5hZ2VyLm9wdGlvbnMudG91Y2hBY3Rpb24pfSxjb21wdXRlOmZ1bmN0aW9uKCl7dmFyIGE9W107cmV0dXJuIGcodGhpcy5tYW5hZ2VyLnJlY29nbml6ZXJzLGZ1bmN0aW9uKGIpe2woYi5vcHRpb25zLmVuYWJsZSxbYl0pJiYoYT1hLmNvbmNhdChiLmdldFRvdWNoQWN0aW9uKCkpKX0pLFUoYS5qb2luKCIgIikpfSxwcmV2ZW50RGVmYXVsdHM6ZnVuY3Rpb24oYSl7aWYoIVpiKXt2YXIgYj1hLnNyY0V2ZW50LGM9YS5vZmZzZXREaXJlY3Rpb247aWYodGhpcy5tYW5hZ2VyLnNlc3Npb24ucHJldmVudGVkKXJldHVybiB2b2lkIGIucHJldmVudERlZmF1bHQoKTt2YXIgZD10aGlzLmFjdGlvbnMsZT1xKGQsYmMpLGY9cShkLGRjKSxnPXEoZCxjYyk7cmV0dXJuIGV8fGYmJmMmSGJ8fGcmJmMmSWI/dGhpcy5wcmV2ZW50U3JjKGIpOnZvaWQgMH19LHByZXZlbnRTcmM6ZnVuY3Rpb24oYSl7dGhpcy5tYW5hZ2VyLnNlc3Npb24ucHJldmVudGVkPSEwLGEucHJldmVudERlZmF1bHQoKX19O3ZhciBlYz0xLGZjPTIsZ2M9NCxoYz04LGljPWhjLGpjPTE2LGtjPTMyO1YucHJvdG90eXBlPXtkZWZhdWx0czp7fSxzZXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGgodGhpcy5vcHRpb25zLGEpLHRoaXMubWFuYWdlciYmdGhpcy5tYW5hZ2VyLnRvdWNoQWN0aW9uLnVwZGF0ZSgpLHRoaXN9LHJlY29nbml6ZVdpdGg6ZnVuY3Rpb24oYSl7aWYoZihhLCJyZWNvZ25pemVXaXRoIix0aGlzKSlyZXR1cm4gdGhpczt2YXIgYj10aGlzLnNpbXVsdGFuZW91cztyZXR1cm4gYT1ZKGEsdGhpcyksYlthLmlkXXx8KGJbYS5pZF09YSxhLnJlY29nbml6ZVdpdGgodGhpcykpLHRoaXN9LGRyb3BSZWNvZ25pemVXaXRoOmZ1bmN0aW9uKGEpe3JldHVybiBmKGEsImRyb3BSZWNvZ25pemVXaXRoIix0aGlzKT90aGlzOihhPVkoYSx0aGlzKSxkZWxldGUgdGhpcy5zaW11bHRhbmVvdXNbYS5pZF0sdGhpcyl9LHJlcXVpcmVGYWlsdXJlOmZ1bmN0aW9uKGEpe2lmKGYoYSwicmVxdWlyZUZhaWx1cmUiLHRoaXMpKXJldHVybiB0aGlzO3ZhciBiPXRoaXMucmVxdWlyZUZhaWw7cmV0dXJuIGE9WShhLHRoaXMpLC0xPT09cyhiLGEpJiYoYi5wdXNoKGEpLGEucmVxdWlyZUZhaWx1cmUodGhpcykpLHRoaXN9LGRyb3BSZXF1aXJlRmFpbHVyZTpmdW5jdGlvbihhKXtpZihmKGEsImRyb3BSZXF1aXJlRmFpbHVyZSIsdGhpcykpcmV0dXJuIHRoaXM7YT1ZKGEsdGhpcyk7dmFyIGI9cyh0aGlzLnJlcXVpcmVGYWlsLGEpO3JldHVybiBiPi0xJiZ0aGlzLnJlcXVpcmVGYWlsLnNwbGljZShiLDEpLHRoaXN9LGhhc1JlcXVpcmVGYWlsdXJlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlcXVpcmVGYWlsLmxlbmd0aD4wfSxjYW5SZWNvZ25pemVXaXRoOmZ1bmN0aW9uKGEpe3JldHVybiEhdGhpcy5zaW11bHRhbmVvdXNbYS5pZF19LGVtaXQ6ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihiKXtjLm1hbmFnZXIuZW1pdChjLm9wdGlvbnMuZXZlbnQrKGI/VyhkKToiIiksYSl9dmFyIGM9dGhpcyxkPXRoaXMuc3RhdGU7aGM+ZCYmYighMCksYigpLGQ+PWhjJiZiKCEwKX0sdHJ5RW1pdDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5jYW5FbWl0KCk/dGhpcy5lbWl0KGEpOnZvaWQodGhpcy5zdGF0ZT1rYyl9LGNhbkVtaXQ6ZnVuY3Rpb24oKXtmb3IodmFyIGE9MDthPHRoaXMucmVxdWlyZUZhaWwubGVuZ3RoOyl7aWYoISh0aGlzLnJlcXVpcmVGYWlsW2FdLnN0YXRlJihrY3xlYykpKXJldHVybiExO2ErK31yZXR1cm4hMH0scmVjb2duaXplOmZ1bmN0aW9uKGEpe3ZhciBiPWgoe30sYSk7cmV0dXJuIGwodGhpcy5vcHRpb25zLmVuYWJsZSxbdGhpcyxiXSk/KHRoaXMuc3RhdGUmKGljfGpjfGtjKSYmKHRoaXMuc3RhdGU9ZWMpLHRoaXMuc3RhdGU9dGhpcy5wcm9jZXNzKGIpLHZvaWQodGhpcy5zdGF0ZSYoZmN8Z2N8aGN8amMpJiZ0aGlzLnRyeUVtaXQoYikpKToodGhpcy5yZXNldCgpLHZvaWQodGhpcy5zdGF0ZT1rYykpfSxwcm9jZXNzOmZ1bmN0aW9uKCl7fSxnZXRUb3VjaEFjdGlvbjpmdW5jdGlvbigpe30scmVzZXQ6ZnVuY3Rpb24oKXt9fSxqKFosVix7ZGVmYXVsdHM6e3BvaW50ZXJzOjF9LGF0dHJUZXN0OmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMub3B0aW9ucy5wb2ludGVycztyZXR1cm4gMD09PWJ8fGEucG9pbnRlcnMubGVuZ3RoPT09Yn0scHJvY2VzczpmdW5jdGlvbihhKXt2YXIgYj10aGlzLnN0YXRlLGM9YS5ldmVudFR5cGUsZD1iJihmY3xnYyksZT10aGlzLmF0dHJUZXN0KGEpO3JldHVybiBkJiYoYyZCYnx8IWUpP2J8amM6ZHx8ZT9jJkFiP2J8aGM6YiZmYz9ifGdjOmZjOmtjfX0pLGooJCxaLHtkZWZhdWx0czp7ZXZlbnQ6InBhbiIsdGhyZXNob2xkOjEwLHBvaW50ZXJzOjEsZGlyZWN0aW9uOkpifSxnZXRUb3VjaEFjdGlvbjpmdW5jdGlvbigpe3ZhciBhPXRoaXMub3B0aW9ucy5kaXJlY3Rpb24sYj1bXTtyZXR1cm4gYSZIYiYmYi5wdXNoKGRjKSxhJkliJiZiLnB1c2goY2MpLGJ9LGRpcmVjdGlvblRlc3Q6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5vcHRpb25zLGM9ITAsZD1hLmRpc3RhbmNlLGU9YS5kaXJlY3Rpb24sZj1hLmRlbHRhWCxnPWEuZGVsdGFZO3JldHVybiBlJmIuZGlyZWN0aW9ufHwoYi5kaXJlY3Rpb24mSGI/KGU9MD09PWY/Q2I6MD5mP0RiOkViLGM9ZiE9dGhpcy5wWCxkPU1hdGguYWJzKGEuZGVsdGFYKSk6KGU9MD09PWc/Q2I6MD5nP0ZiOkdiLGM9ZyE9dGhpcy5wWSxkPU1hdGguYWJzKGEuZGVsdGFZKSkpLGEuZGlyZWN0aW9uPWUsYyYmZD5iLnRocmVzaG9sZCYmZSZiLmRpcmVjdGlvbn0sYXR0clRlc3Q6ZnVuY3Rpb24oYSl7cmV0dXJuIFoucHJvdG90eXBlLmF0dHJUZXN0LmNhbGwodGhpcyxhKSYmKHRoaXMuc3RhdGUmZmN8fCEodGhpcy5zdGF0ZSZmYykmJnRoaXMuZGlyZWN0aW9uVGVzdChhKSl9LGVtaXQ6ZnVuY3Rpb24oYSl7dGhpcy5wWD1hLmRlbHRhWCx0aGlzLnBZPWEuZGVsdGFZO3ZhciBiPVgoYS5kaXJlY3Rpb24pO2ImJnRoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCtiLGEpLHRoaXMuX3N1cGVyLmVtaXQuY2FsbCh0aGlzLGEpfX0pLGooXyxaLHtkZWZhdWx0czp7ZXZlbnQ6InBpbmNoIix0aHJlc2hvbGQ6MCxwb2ludGVyczoyfSxnZXRUb3VjaEFjdGlvbjpmdW5jdGlvbigpe3JldHVybltiY119LGF0dHJUZXN0OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9zdXBlci5hdHRyVGVzdC5jYWxsKHRoaXMsYSkmJihNYXRoLmFicyhhLnNjYWxlLTEpPnRoaXMub3B0aW9ucy50aHJlc2hvbGR8fHRoaXMuc3RhdGUmZmMpfSxlbWl0OmZ1bmN0aW9uKGEpe2lmKHRoaXMuX3N1cGVyLmVtaXQuY2FsbCh0aGlzLGEpLDEhPT1hLnNjYWxlKXt2YXIgYj1hLnNjYWxlPDE/ImluIjoib3V0Ijt0aGlzLm1hbmFnZXIuZW1pdCh0aGlzLm9wdGlvbnMuZXZlbnQrYixhKX19fSksaihhYixWLHtkZWZhdWx0czp7ZXZlbnQ6InByZXNzIixwb2ludGVyczoxLHRpbWU6NTAwLHRocmVzaG9sZDo1fSxnZXRUb3VjaEFjdGlvbjpmdW5jdGlvbigpe3JldHVybltfYl19LHByb2Nlc3M6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5vcHRpb25zLGM9YS5wb2ludGVycy5sZW5ndGg9PT1iLnBvaW50ZXJzLGQ9YS5kaXN0YW5jZTxiLnRocmVzaG9sZCxmPWEuZGVsdGFUaW1lPmIudGltZTtpZih0aGlzLl9pbnB1dD1hLCFkfHwhY3x8YS5ldmVudFR5cGUmKEFifEJiKSYmIWYpdGhpcy5yZXNldCgpO2Vsc2UgaWYoYS5ldmVudFR5cGUmeWIpdGhpcy5yZXNldCgpLHRoaXMuX3RpbWVyPWUoZnVuY3Rpb24oKXt0aGlzLnN0YXRlPWljLHRoaXMudHJ5RW1pdCgpfSxiLnRpbWUsdGhpcyk7ZWxzZSBpZihhLmV2ZW50VHlwZSZBYilyZXR1cm4gaWM7cmV0dXJuIGtjfSxyZXNldDpmdW5jdGlvbigpe2NsZWFyVGltZW91dCh0aGlzLl90aW1lcil9LGVtaXQ6ZnVuY3Rpb24oYSl7dGhpcy5zdGF0ZT09PWljJiYoYSYmYS5ldmVudFR5cGUmQWI/dGhpcy5tYW5hZ2VyLmVtaXQodGhpcy5vcHRpb25zLmV2ZW50KyJ1cCIsYSk6KHRoaXMuX2lucHV0LnRpbWVTdGFtcD1uYigpLHRoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCx0aGlzLl9pbnB1dCkpKX19KSxqKGJiLFose2RlZmF1bHRzOntldmVudDoicm90YXRlIix0aHJlc2hvbGQ6MCxwb2ludGVyczoyfSxnZXRUb3VjaEFjdGlvbjpmdW5jdGlvbigpe3JldHVybltiY119LGF0dHJUZXN0OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9zdXBlci5hdHRyVGVzdC5jYWxsKHRoaXMsYSkmJihNYXRoLmFicyhhLnJvdGF0aW9uKT50aGlzLm9wdGlvbnMudGhyZXNob2xkfHx0aGlzLnN0YXRlJmZjKX19KSxqKGNiLFose2RlZmF1bHRzOntldmVudDoic3dpcGUiLHRocmVzaG9sZDoxMCx2ZWxvY2l0eTouNjUsZGlyZWN0aW9uOkhifEliLHBvaW50ZXJzOjF9LGdldFRvdWNoQWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuICQucHJvdG90eXBlLmdldFRvdWNoQWN0aW9uLmNhbGwodGhpcyl9LGF0dHJUZXN0OmZ1bmN0aW9uKGEpe3ZhciBiLGM9dGhpcy5vcHRpb25zLmRpcmVjdGlvbjtyZXR1cm4gYyYoSGJ8SWIpP2I9YS52ZWxvY2l0eTpjJkhiP2I9YS52ZWxvY2l0eVg6YyZJYiYmKGI9YS52ZWxvY2l0eVkpLHRoaXMuX3N1cGVyLmF0dHJUZXN0LmNhbGwodGhpcyxhKSYmYyZhLmRpcmVjdGlvbiYmYS5kaXN0YW5jZT50aGlzLm9wdGlvbnMudGhyZXNob2xkJiZtYihiKT50aGlzLm9wdGlvbnMudmVsb2NpdHkmJmEuZXZlbnRUeXBlJkFifSxlbWl0OmZ1bmN0aW9uKGEpe3ZhciBiPVgoYS5kaXJlY3Rpb24pO2ImJnRoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCtiLGEpLHRoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCxhKX19KSxqKGRiLFYse2RlZmF1bHRzOntldmVudDoidGFwIixwb2ludGVyczoxLHRhcHM6MSxpbnRlcnZhbDozMDAsdGltZToyNTAsdGhyZXNob2xkOjIscG9zVGhyZXNob2xkOjEwfSxnZXRUb3VjaEFjdGlvbjpmdW5jdGlvbigpe3JldHVyblthY119LHByb2Nlc3M6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5vcHRpb25zLGM9YS5wb2ludGVycy5sZW5ndGg9PT1iLnBvaW50ZXJzLGQ9YS5kaXN0YW5jZTxiLnRocmVzaG9sZCxmPWEuZGVsdGFUaW1lPGIudGltZTtpZih0aGlzLnJlc2V0KCksYS5ldmVudFR5cGUmeWImJjA9PT10aGlzLmNvdW50KXJldHVybiB0aGlzLmZhaWxUaW1lb3V0KCk7aWYoZCYmZiYmYyl7aWYoYS5ldmVudFR5cGUhPUFiKXJldHVybiB0aGlzLmZhaWxUaW1lb3V0KCk7dmFyIGc9dGhpcy5wVGltZT9hLnRpbWVTdGFtcC10aGlzLnBUaW1lPGIuaW50ZXJ2YWw6ITAsaD0hdGhpcy5wQ2VudGVyfHxJKHRoaXMucENlbnRlcixhLmNlbnRlcik8Yi5wb3NUaHJlc2hvbGQ7dGhpcy5wVGltZT1hLnRpbWVTdGFtcCx0aGlzLnBDZW50ZXI9YS5jZW50ZXIsaCYmZz90aGlzLmNvdW50Kz0xOnRoaXMuY291bnQ9MSx0aGlzLl9pbnB1dD1hO3ZhciBpPXRoaXMuY291bnQlYi50YXBzO2lmKDA9PT1pKXJldHVybiB0aGlzLmhhc1JlcXVpcmVGYWlsdXJlcygpPyh0aGlzLl90aW1lcj1lKGZ1bmN0aW9uKCl7dGhpcy5zdGF0ZT1pYyx0aGlzLnRyeUVtaXQoKX0sYi5pbnRlcnZhbCx0aGlzKSxmYyk6aWN9cmV0dXJuIGtjfSxmYWlsVGltZW91dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90aW1lcj1lKGZ1bmN0aW9uKCl7dGhpcy5zdGF0ZT1rY30sdGhpcy5vcHRpb25zLmludGVydmFsLHRoaXMpLGtjfSxyZXNldDpmdW5jdGlvbigpe2NsZWFyVGltZW91dCh0aGlzLl90aW1lcil9LGVtaXQ6ZnVuY3Rpb24oKXt0aGlzLnN0YXRlPT1pYyYmKHRoaXMuX2lucHV0LnRhcENvdW50PXRoaXMuY291bnQsdGhpcy5tYW5hZ2VyLmVtaXQodGhpcy5vcHRpb25zLmV2ZW50LHRoaXMuX2lucHV0KSl9fSksZWIuVkVSU0lPTj0iMi4wLjQiLGViLmRlZmF1bHRzPXtkb21FdmVudHM6ITEsdG91Y2hBY3Rpb246JGIsZW5hYmxlOiEwLGlucHV0VGFyZ2V0Om51bGwsaW5wdXRDbGFzczpudWxsLHByZXNldDpbW2JiLHtlbmFibGU6ITF9XSxbXyx7ZW5hYmxlOiExfSxbInJvdGF0ZSJdXSxbY2Ise2RpcmVjdGlvbjpIYn1dLFskLHtkaXJlY3Rpb246SGJ9LFsic3dpcGUiXV0sW2RiXSxbZGIse2V2ZW50OiJkb3VibGV0YXAiLHRhcHM6Mn0sWyJ0YXAiXV0sW2FiXV0sY3NzUHJvcHM6e3VzZXJTZWxlY3Q6Im5vbmUiLHRvdWNoU2VsZWN0OiJub25lIix0b3VjaENhbGxvdXQ6Im5vbmUiLGNvbnRlbnRab29taW5nOiJub25lIix1c2VyRHJhZzoibm9uZSIsdGFwSGlnaGxpZ2h0Q29sb3I6InJnYmEoMCwwLDAsMCkifX07dmFyIGxjPTEsbWM9MjtmYi5wcm90b3R5cGU9e3NldDpmdW5jdGlvbihhKXtyZXR1cm4gaCh0aGlzLm9wdGlvbnMsYSksYS50b3VjaEFjdGlvbiYmdGhpcy50b3VjaEFjdGlvbi51cGRhdGUoKSxhLmlucHV0VGFyZ2V0JiYodGhpcy5pbnB1dC5kZXN0cm95KCksdGhpcy5pbnB1dC50YXJnZXQ9YS5pbnB1dFRhcmdldCx0aGlzLmlucHV0LmluaXQoKSksdGhpc30sc3RvcDpmdW5jdGlvbihhKXt0aGlzLnNlc3Npb24uc3RvcHBlZD1hP21jOmxjfSxyZWNvZ25pemU6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5zZXNzaW9uO2lmKCFiLnN0b3BwZWQpe3RoaXMudG91Y2hBY3Rpb24ucHJldmVudERlZmF1bHRzKGEpO3ZhciBjLGQ9dGhpcy5yZWNvZ25pemVycyxlPWIuY3VyUmVjb2duaXplcjsoIWV8fGUmJmUuc3RhdGUmaWMpJiYoZT1iLmN1clJlY29nbml6ZXI9bnVsbCk7Zm9yKHZhciBmPTA7ZjxkLmxlbmd0aDspYz1kW2ZdLGIuc3RvcHBlZD09PW1jfHxlJiZjIT1lJiYhYy5jYW5SZWNvZ25pemVXaXRoKGUpP2MucmVzZXQoKTpjLnJlY29nbml6ZShhKSwhZSYmYy5zdGF0ZSYoZmN8Z2N8aGMpJiYoZT1iLmN1clJlY29nbml6ZXI9YyksZisrfX0sZ2V0OmZ1bmN0aW9uKGEpe2lmKGEgaW5zdGFuY2VvZiBWKXJldHVybiBhO2Zvcih2YXIgYj10aGlzLnJlY29nbml6ZXJzLGM9MDtjPGIubGVuZ3RoO2MrKylpZihiW2NdLm9wdGlvbnMuZXZlbnQ9PWEpcmV0dXJuIGJbY107cmV0dXJuIG51bGx9LGFkZDpmdW5jdGlvbihhKXtpZihmKGEsImFkZCIsdGhpcykpcmV0dXJuIHRoaXM7dmFyIGI9dGhpcy5nZXQoYS5vcHRpb25zLmV2ZW50KTtyZXR1cm4gYiYmdGhpcy5yZW1vdmUoYiksdGhpcy5yZWNvZ25pemVycy5wdXNoKGEpLGEubWFuYWdlcj10aGlzLHRoaXMudG91Y2hBY3Rpb24udXBkYXRlKCksYX0scmVtb3ZlOmZ1bmN0aW9uKGEpe2lmKGYoYSwicmVtb3ZlIix0aGlzKSlyZXR1cm4gdGhpczt2YXIgYj10aGlzLnJlY29nbml6ZXJzO3JldHVybiBhPXRoaXMuZ2V0KGEpLGIuc3BsaWNlKHMoYixhKSwxKSx0aGlzLnRvdWNoQWN0aW9uLnVwZGF0ZSgpLHRoaXN9LG9uOmZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5oYW5kbGVycztyZXR1cm4gZyhyKGEpLGZ1bmN0aW9uKGEpe2NbYV09Y1thXXx8W10sY1thXS5wdXNoKGIpfSksdGhpc30sb2ZmOmZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5oYW5kbGVycztyZXR1cm4gZyhyKGEpLGZ1bmN0aW9uKGEpe2I/Y1thXS5zcGxpY2UocyhjW2FdLGIpLDEpOmRlbGV0ZSBjW2FdfSksdGhpc30sZW1pdDpmdW5jdGlvbihhLGIpe3RoaXMub3B0aW9ucy5kb21FdmVudHMmJmhiKGEsYik7dmFyIGM9dGhpcy5oYW5kbGVyc1thXSYmdGhpcy5oYW5kbGVyc1thXS5zbGljZSgpO2lmKGMmJmMubGVuZ3RoKXtiLnR5cGU9YSxiLnByZXZlbnREZWZhdWx0PWZ1bmN0aW9uKCl7Yi5zcmNFdmVudC5wcmV2ZW50RGVmYXVsdCgpfTtmb3IodmFyIGQ9MDtkPGMubGVuZ3RoOyljW2RdKGIpLGQrK319LGRlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQmJmdiKHRoaXMsITEpLHRoaXMuaGFuZGxlcnM9e30sdGhpcy5zZXNzaW9uPXt9LHRoaXMuaW5wdXQuZGVzdHJveSgpLHRoaXMuZWxlbWVudD1udWxsfX0saChlYix7SU5QVVRfU1RBUlQ6eWIsSU5QVVRfTU9WRTp6YixJTlBVVF9FTkQ6QWIsSU5QVVRfQ0FOQ0VMOkJiLFNUQVRFX1BPU1NJQkxFOmVjLFNUQVRFX0JFR0FOOmZjLFNUQVRFX0NIQU5HRUQ6Z2MsU1RBVEVfRU5ERUQ6aGMsU1RBVEVfUkVDT0dOSVpFRDppYyxTVEFURV9DQU5DRUxMRUQ6amMsU1RBVEVfRkFJTEVEOmtjLERJUkVDVElPTl9OT05FOkNiLERJUkVDVElPTl9MRUZUOkRiLERJUkVDVElPTl9SSUdIVDpFYixESVJFQ1RJT05fVVA6RmIsRElSRUNUSU9OX0RPV046R2IsRElSRUNUSU9OX0hPUklaT05UQUw6SGIsRElSRUNUSU9OX1ZFUlRJQ0FMOkliLERJUkVDVElPTl9BTEw6SmIsTWFuYWdlcjpmYixJbnB1dDp5LFRvdWNoQWN0aW9uOlQsVG91Y2hJbnB1dDpRLE1vdXNlSW5wdXQ6TSxQb2ludGVyRXZlbnRJbnB1dDpOLFRvdWNoTW91c2VJbnB1dDpTLFNpbmdsZVRvdWNoSW5wdXQ6TyxSZWNvZ25pemVyOlYsQXR0clJlY29nbml6ZXI6WixUYXA6ZGIsUGFuOiQsU3dpcGU6Y2IsUGluY2g6XyxSb3RhdGU6YmIsUHJlc3M6YWIsb246bixvZmY6byxlYWNoOmcsbWVyZ2U6aSxleHRlbmQ6aCxpbmhlcml0OmosYmluZEZuOmsscHJlZml4ZWQ6dn0pLHR5cGVvZiBkZWZpbmU9PWtiJiZkZWZpbmUuYW1kP2RlZmluZShmdW5jdGlvbigpe3JldHVybiBlYn0pOiJ1bmRlZmluZWQiIT10eXBlb2YgbW9kdWxlJiZtb2R1bGUuZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz1lYjphW2NdPWVifSh3aW5kb3csZG9jdW1lbnQsIkhhbW1lciIpOwovLyMgc291cmNlTWFwcGluZ1VSTD1oYW1tZXIubWluLm1hcA=="></script>
<script src="data:application/x-javascript;base64,Ly8gc3ZnLXBhbi16b29tIHYzLjIuMwovLyBodHRwczovL2dpdGh1Yi5jb20vYXJpdXR0YS9zdmctcGFuLXpvb20KIWZ1bmN0aW9uIHQoZSxvLG4pe2Z1bmN0aW9uIGkocixhKXtpZighb1tyXSl7aWYoIWVbcl0pe3ZhciBsPSJmdW5jdGlvbiI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFhJiZsKXJldHVybiBsKHIsITApO2lmKHMpcmV0dXJuIHMociwhMCk7dmFyIHU9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIrcisiJyIpO3Rocm93IHUuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsdX12YXIgaD1vW3JdPXtleHBvcnRzOnt9fTtlW3JdWzBdLmNhbGwoaC5leHBvcnRzLGZ1bmN0aW9uKHQpe3ZhciBvPWVbcl1bMV1bdF07cmV0dXJuIGkobz9vOnQpfSxoLGguZXhwb3J0cyx0LGUsbyxuKX1yZXR1cm4gb1tyXS5leHBvcnRzfWZvcih2YXIgcz0iZnVuY3Rpb24iPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxyPTA7cjxuLmxlbmd0aDtyKyspaShuW3JdKTtyZXR1cm4gaX0oezE6W2Z1bmN0aW9uKHQsZSl7dmFyIG89dCgiLi9zdmctcGFuLXpvb20uanMiKTshZnVuY3Rpb24odCl7ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoInN2Zy1wYW4tem9vbSIsZnVuY3Rpb24oKXtyZXR1cm4gb30pOiJ1bmRlZmluZWQiIT10eXBlb2YgZSYmZS5leHBvcnRzJiYoZS5leHBvcnRzPW8sdC5zdmdQYW5ab29tPW8pfSh3aW5kb3csZG9jdW1lbnQpfSx7Ii4vc3ZnLXBhbi16b29tLmpzIjo0fV0sMjpbZnVuY3Rpb24odCxlKXt2YXIgbz10KCIuL3N2Zy11dGlsaXRpZXMiKTtlLmV4cG9ydHM9e2VuYWJsZTpmdW5jdGlvbih0KXt2YXIgZT10LnN2Zy5xdWVyeVNlbGVjdG9yKCJkZWZzIik7ZXx8KGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG8uc3ZnTlMsImRlZnMiKSx0LnN2Zy5hcHBlbmRDaGlsZChlKSk7dmFyIG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG8uc3ZnTlMsInN0eWxlIik7bi5zZXRBdHRyaWJ1dGUoInR5cGUiLCJ0ZXh0L2NzcyIpLG4udGV4dENvbnRlbnQ9Ii5zdmctcGFuLXpvb20tY29udHJvbCB7IGN1cnNvcjogcG9pbnRlcjsgZmlsbDogYmxhY2s7IGZpbGwtb3BhY2l0eTogMC4zMzM7IH0gLnN2Zy1wYW4tem9vbS1jb250cm9sOmhvdmVyIHsgZmlsbC1vcGFjaXR5OiAwLjg7IH0gLnN2Zy1wYW4tem9vbS1jb250cm9sLWJhY2tncm91bmQgeyBmaWxsOiB3aGl0ZTsgZmlsbC1vcGFjaXR5OiAwLjU7IH0gLnN2Zy1wYW4tem9vbS1jb250cm9sLWJhY2tncm91bmQgeyBmaWxsLW9wYWNpdHk6IDAuODsgfSIsZS5hcHBlbmRDaGlsZChuKTt2YXIgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoby5zdmdOUywiZyIpO2kuc2V0QXR0cmlidXRlKCJpZCIsInN2Zy1wYW4tem9vbS1jb250cm9scyIpLGkuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisodC53aWR0aC03MCkrIiAiKyh0LmhlaWdodC03NikrIikgc2NhbGUoMC43NSkiKSxpLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJzdmctcGFuLXpvb20tY29udHJvbCIpLGkuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlWm9vbUluKHQpKSxpLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZVpvb21SZXNldCh0KSksaS5hcHBlbmRDaGlsZCh0aGlzLl9jcmVhdGVab29tT3V0KHQpKSx0LnN2Zy5hcHBlbmRDaGlsZChpKSx0LmNvbnRyb2xJY29ucz1pfSxfY3JlYXRlWm9vbUluOmZ1bmN0aW9uKHQpe3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhvLnN2Z05TLCJnIik7ZS5zZXRBdHRyaWJ1dGUoImlkIiwic3ZnLXBhbi16b29tLXpvb20taW4iKSxlLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIiwidHJhbnNsYXRlKDMwLjUgNSkgc2NhbGUoMC4wMTUpIiksZS5zZXRBdHRyaWJ1dGUoImNsYXNzIiwic3ZnLXBhbi16b29tLWNvbnRyb2wiKSxlLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbigpe3QuZ2V0UHVibGljSW5zdGFuY2UoKS56b29tSW4oKX0sITEpLGUuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsZnVuY3Rpb24oKXt0LmdldFB1YmxpY0luc3RhbmNlKCkuem9vbUluKCl9LCExKTt2YXIgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoby5zdmdOUywicmVjdCIpO24uc2V0QXR0cmlidXRlKCJ4IiwiMCIpLG4uc2V0QXR0cmlidXRlKCJ5IiwiMCIpLG4uc2V0QXR0cmlidXRlKCJ3aWR0aCIsIjE1MDAiKSxuLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IiwiMTQwMCIpLG4uc2V0QXR0cmlidXRlKCJjbGFzcyIsInN2Zy1wYW4tem9vbS1jb250cm9sLWJhY2tncm91bmQiKSxlLmFwcGVuZENoaWxkKG4pO3ZhciBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhvLnN2Z05TLCJwYXRoIik7cmV0dXJuIGkuc2V0QXR0cmlidXRlKCJkIiwiTTEyODAgNTc2djEyOHEwIDI2IC0xOSA0NXQtNDUgMTloLTMyMHYzMjBxMCAyNiAtMTkgNDV0LTQ1IDE5aC0xMjhxLTI2IDAgLTQ1IC0xOXQtMTkgLTQ1di0zMjBoLTMyMHEtMjYgMCAtNDUgLTE5dC0xOSAtNDV2LTEyOHEwIC0yNiAxOSAtNDV0NDUgLTE5aDMyMHYtMzIwcTAgLTI2IDE5IC00NXQ0NSAtMTloMTI4cTI2IDAgNDUgMTl0MTkgNDV2MzIwaDMyMHEyNiAwIDQ1IDE5dDE5IDQ1ek0xNTM2IDExMjB2LTk2MCBxMCAtMTE5IC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjVoLTk2MHEtMTE5IDAgLTIwMy41IDg0LjV0LTg0LjUgMjAzLjV2OTYwcTAgMTE5IDg0LjUgMjAzLjV0MjAzLjUgODQuNWg5NjBxMTE5IDAgMjAzLjUgLTg0LjV0ODQuNSAtMjAzLjV6IiksaS5zZXRBdHRyaWJ1dGUoImNsYXNzIiwic3ZnLXBhbi16b29tLWNvbnRyb2wtZWxlbWVudCIpLGUuYXBwZW5kQ2hpbGQoaSksZX0sX2NyZWF0ZVpvb21SZXNldDpmdW5jdGlvbih0KXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoby5zdmdOUywiZyIpO2Uuc2V0QXR0cmlidXRlKCJpZCIsInN2Zy1wYW4tem9vbS1yZXNldC1wYW4tem9vbSIpLGUuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoNSAzNSkgc2NhbGUoMC40KSIpLGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsInN2Zy1wYW4tem9vbS1jb250cm9sIiksZS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXt0LmdldFB1YmxpY0luc3RhbmNlKCkucmVzZXQoKX0sITEpLGUuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsZnVuY3Rpb24oKXt0LmdldFB1YmxpY0luc3RhbmNlKCkucmVzZXQoKX0sITEpO3ZhciBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhvLnN2Z05TLCJyZWN0Iik7bi5zZXRBdHRyaWJ1dGUoIngiLCIyIiksbi5zZXRBdHRyaWJ1dGUoInkiLCIyIiksbi5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiMTgyIiksbi5zZXRBdHRyaWJ1dGUoImhlaWdodCIsIjU4Iiksbi5zZXRBdHRyaWJ1dGUoImNsYXNzIiwic3ZnLXBhbi16b29tLWNvbnRyb2wtYmFja2dyb3VuZCIpLGUuYXBwZW5kQ2hpbGQobik7dmFyIGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG8uc3ZnTlMsInBhdGgiKTtpLnNldEF0dHJpYnV0ZSgiZCIsIk0zMy4wNTEsMjAuNjMyYy0wLjc0Mi0wLjQwNi0xLjg1NC0wLjYwOS0zLjMzOC0wLjYwOWgtNy45Njl2OS4yODFoNy43NjljMS41NDMsMCwyLjcwMS0wLjE4OCwzLjQ3My0wLjU2MmMxLjM2NS0wLjY1NiwyLjA0OC0xLjk1MywyLjA0OC0zLjg5MUMzNS4wMzIsMjIuNzU3LDM0LjM3MiwyMS4zNTEsMzMuMDUxLDIwLjYzMnoiKSxpLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJzdmctcGFuLXpvb20tY29udHJvbC1lbGVtZW50IiksZS5hcHBlbmRDaGlsZChpKTt2YXIgcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoby5zdmdOUywicGF0aCIpO3JldHVybiBzLnNldEF0dHJpYnV0ZSgiZCIsIk0xNzAuMjMxLDAuNUgxNS44NDdDNy4xMDIsMC41LDAuNSw1LjcwOCwwLjUsMTEuODR2MzguODYxQzAuNSw1Ni44MzMsNy4xMDIsNjEuNSwxNS44NDcsNjEuNWgxNTQuMzg0YzguNzQ1LDAsMTUuMjY5LTQuNjY3LDE1LjI2OS0xMC43OThWMTEuODRDMTg1LjUsNS43MDgsMTc4Ljk3NiwwLjUsMTcwLjIzMSwwLjV6IE00Mi44MzcsNDguNTY5aC03Ljk2OWMtMC4yMTktMC43NjYtMC4zNzUtMS4zODMtMC40NjktMS44NTJjLTAuMTg4LTAuOTY5LTAuMjg5LTEuOTYxLTAuMzA1LTIuOTc3bC0wLjA0Ny0zLjIxMWMtMC4wMy0yLjIwMy0wLjQxLTMuNjcyLTEuMTQyLTQuNDA2Yy0wLjczMi0wLjczNC0yLjEwMy0xLjEwMi00LjExMy0xLjEwMmgtNy4wNXYxMy41NDdoLTcuMDU1VjE0LjAyMmgxNi41MjRjMi4zNjEsMC4wNDcsNC4xNzgsMC4zNDQsNS40NSwwLjg5MWMxLjI3MiwwLjU0NywyLjM1MSwxLjM1MiwzLjIzNCwyLjQxNGMwLjczMSwwLjg3NSwxLjMxLDEuODQ0LDEuNzM3LDIuOTA2czAuNjQsMi4yNzMsMC42NCwzLjYzM2MwLDEuNjQxLTAuNDE0LDMuMjU0LTEuMjQyLDQuODRzLTIuMTk1LDIuNzA3LTQuMTAyLDMuMzYzYzEuNTk0LDAuNjQxLDIuNzIzLDEuNTUxLDMuMzg3LDIuNzNzMC45OTYsMi45OCwwLjk5Niw1LjQwMnYyLjMyYzAsMS41NzgsMC4wNjMsMi42NDgsMC4xOSwzLjIxMWMwLjE5LDAuODkxLDAuNjM1LDEuNTQ3LDEuMzMzLDEuOTY5VjQ4LjU2OXogTTc1LjU3OSw0OC41NjloLTI2LjE4VjE0LjAyMmgyNS4zMzZ2Ni4xMTdINTYuNDU0djcuMzM2aDE2Ljc4MXY2SDU2LjQ1NHY4Ljg4M2gxOS4xMjVWNDguNTY5eiBNMTA0LjQ5Nyw0Ni4zMzFjLTIuNDQsMi4wODYtNS44ODcsMy4xMjktMTAuMzQsMy4xMjljLTQuNTQ4LDAtOC4xMjUtMS4wMjctMTAuNzMxLTMuMDgycy0zLjkwOS00Ljg3OS0zLjkwOS04LjQ3M2g2Ljg5MWMwLjIyNCwxLjU3OCwwLjY2MiwyLjc1OCwxLjMxNiwzLjUzOWMxLjE5NiwxLjQyMiwzLjI0NiwyLjEzMyw2LjE1LDIuMTMzYzEuNzM5LDAsMy4xNTEtMC4xODgsNC4yMzYtMC41NjJjMi4wNTgtMC43MTksMy4wODctMi4wNTUsMy4wODctNC4wMDhjMC0xLjE0MS0wLjUwNC0yLjAyMy0xLjUxMi0yLjY0OGMtMS4wMDgtMC42MDktMi42MDctMS4xNDgtNC43OTYtMS42MTdsLTMuNzQtMC44MmMtMy42NzYtMC44MTItNi4yMDEtMS42OTUtNy41NzYtMi42NDhjLTIuMzI4LTEuNTk0LTMuNDkyLTQuMDg2LTMuNDkyLTcuNDc3YzAtMy4wOTQsMS4xMzktNS42NjQsMy40MTctNy43MTFzNS42MjMtMy4wNywxMC4wMzYtMy4wN2MzLjY4NSwwLDYuODI5LDAuOTY1LDkuNDMxLDIuODk1YzIuNjAyLDEuOTMsMy45NjYsNC43Myw0LjA5Myw4LjQwMmgtNi45MzhjLTAuMTI4LTIuMDc4LTEuMDU3LTMuNTU1LTIuNzg3LTQuNDNjLTEuMTU0LTAuNTc4LTIuNTg3LTAuODY3LTQuMzAxLTAuODY3Yy0xLjkwNywwLTMuNDI4LDAuMzc1LTQuNTY1LDEuMTI1Yy0xLjEzOCwwLjc1LTEuNzA2LDEuNzk3LTEuNzA2LDMuMTQxYzAsMS4yMzQsMC41NjEsMi4xNTYsMS42ODIsMi43NjZjMC43MjEsMC40MDYsMi4yNSwwLjg4Myw0LjU4OSwxLjQzbDYuMDYzLDEuNDNjMi42NTcsMC42MjUsNC42NDgsMS40NjEsNS45NzUsMi41MDhjMi4wNTksMS42MjUsMy4wODksMy45NzcsMy4wODksNy4wNTVDMTA4LjE1Nyw0MS42MjQsMTA2LjkzNyw0NC4yNDUsMTA0LjQ5Nyw0Ni4zMzF6IE0xMzkuNjEsNDguNTY5aC0yNi4xOFYxNC4wMjJoMjUuMzM2djYuMTE3aC0xOC4yODF2Ny4zMzZoMTYuNzgxdjZoLTE2Ljc4MXY4Ljg4M2gxOS4xMjVWNDguNTY5eiBNMTcwLjMzNywyMC4xNGgtMTAuMzM2djI4LjQzaC03LjI2NlYyMC4xNGgtMTAuMzgzdi02LjExN2gyNy45ODRWMjAuMTR6Iikscy5zZXRBdHRyaWJ1dGUoImNsYXNzIiwic3ZnLXBhbi16b29tLWNvbnRyb2wtZWxlbWVudCIpLGUuYXBwZW5kQ2hpbGQocyksZX0sX2NyZWF0ZVpvb21PdXQ6ZnVuY3Rpb24odCl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG8uc3ZnTlMsImciKTtlLnNldEF0dHJpYnV0ZSgiaWQiLCJzdmctcGFuLXpvb20tem9vbS1vdXQiKSxlLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIiwidHJhbnNsYXRlKDMwLjUgNzApIHNjYWxlKDAuMDE1KSIpLGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsInN2Zy1wYW4tem9vbS1jb250cm9sIiksZS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXt0LmdldFB1YmxpY0luc3RhbmNlKCkuem9vbU91dCgpfSwhMSksZS5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IixmdW5jdGlvbigpe3QuZ2V0UHVibGljSW5zdGFuY2UoKS56b29tT3V0KCl9LCExKTt2YXIgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoby5zdmdOUywicmVjdCIpO24uc2V0QXR0cmlidXRlKCJ4IiwiMCIpLG4uc2V0QXR0cmlidXRlKCJ5IiwiMCIpLG4uc2V0QXR0cmlidXRlKCJ3aWR0aCIsIjE1MDAiKSxuLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IiwiMTQwMCIpLG4uc2V0QXR0cmlidXRlKCJjbGFzcyIsInN2Zy1wYW4tem9vbS1jb250cm9sLWJhY2tncm91bmQiKSxlLmFwcGVuZENoaWxkKG4pO3ZhciBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhvLnN2Z05TLCJwYXRoIik7cmV0dXJuIGkuc2V0QXR0cmlidXRlKCJkIiwiTTEyODAgNTc2djEyOHEwIDI2IC0xOSA0NXQtNDUgMTloLTg5NnEtMjYgMCAtNDUgLTE5dC0xOSAtNDV2LTEyOHEwIC0yNiAxOSAtNDV0NDUgLTE5aDg5NnEyNiAwIDQ1IDE5dDE5IDQ1ek0xNTM2IDExMjB2LTk2MHEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtOTYwcS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY5NjBxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDk2MHExMTkgMCAyMDMuNSAtODQuNSB0ODQuNSAtMjAzLjV6IiksaS5zZXRBdHRyaWJ1dGUoImNsYXNzIiwic3ZnLXBhbi16b29tLWNvbnRyb2wtZWxlbWVudCIpLGUuYXBwZW5kQ2hpbGQoaSksZX0sZGlzYWJsZTpmdW5jdGlvbih0KXt0LmNvbnRyb2xJY29ucyYmKHQuY29udHJvbEljb25zLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodC5jb250cm9sSWNvbnMpLHQuY29udHJvbEljb25zPW51bGwpfX19LHsiLi9zdmctdXRpbGl0aWVzIjo1fV0sMzpbZnVuY3Rpb24odCxlKXt2YXIgbz10KCIuL3N2Zy11dGlsaXRpZXMiKSxuPXQoIi4vdXRpbGl0aWVzIiksaT1mdW5jdGlvbih0LGUpe3RoaXMuaW5pdCh0LGUpfTtpLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKHQsZSl7dGhpcy52aWV3cG9ydD10LHRoaXMub3B0aW9ucz1lLHRoaXMub3JpZ2luYWxTdGF0ZT17em9vbToxLHg6MCx5OjB9LHRoaXMuYWN0aXZlU3RhdGU9e3pvb206MSx4OjAseTowfSx0aGlzLnVwZGF0ZUNUTUNhY2hlZD1uLnByb3h5KHRoaXMudXBkYXRlQ1RNLHRoaXMpLHRoaXMucmVxdWVzdEFuaW1hdGlvbkZyYW1lPW4uY3JlYXRlUmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMub3B0aW9ucy5yZWZyZXNoUmF0ZSksdGhpcy52aWV3Qm94PXt4OjAseTowLHdpZHRoOjAsaGVpZ2h0OjB9LHRoaXMuY2FjaGVWaWV3Qm94KCksdGhpcy5wcm9jZXNzQ1RNKCksdGhpcy51cGRhdGVDVE0oKX0saS5wcm90b3R5cGUuY2FjaGVWaWV3Qm94PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zLnN2Zy5nZXRBdHRyaWJ1dGUoInZpZXdCb3giKTtpZih0KXt2YXIgZT10LnNwbGl0KC9bXHNcLF0vKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHR9KS5tYXAocGFyc2VGbG9hdCk7dGhpcy52aWV3Qm94Lng9ZVswXSx0aGlzLnZpZXdCb3gueT1lWzFdLHRoaXMudmlld0JveC53aWR0aD1lWzJdLHRoaXMudmlld0JveC5oZWlnaHQ9ZVszXTt2YXIgbz1NYXRoLm1pbih0aGlzLm9wdGlvbnMud2lkdGgvdGhpcy52aWV3Qm94LndpZHRoLHRoaXMub3B0aW9ucy5oZWlnaHQvdGhpcy52aWV3Qm94LmhlaWdodCk7dGhpcy5hY3RpdmVTdGF0ZS56b29tPW8sdGhpcy5hY3RpdmVTdGF0ZS54PSh0aGlzLm9wdGlvbnMud2lkdGgtdGhpcy52aWV3Qm94LndpZHRoKm8pLzIsdGhpcy5hY3RpdmVTdGF0ZS55PSh0aGlzLm9wdGlvbnMuaGVpZ2h0LXRoaXMudmlld0JveC5oZWlnaHQqbykvMix0aGlzLnVwZGF0ZUNUTU9uTmV4dEZyYW1lKCksdGhpcy5vcHRpb25zLnN2Zy5yZW1vdmVBdHRyaWJ1dGUoInZpZXdCb3giKX1lbHNle3ZhciBuPXRoaXMudmlld3BvcnQuZ2V0QkJveCgpO3RoaXMudmlld0JveC54PW4ueCx0aGlzLnZpZXdCb3gueT1uLnksdGhpcy52aWV3Qm94LndpZHRoPW4ud2lkdGgsdGhpcy52aWV3Qm94LmhlaWdodD1uLmhlaWdodH19LGkucHJvdG90eXBlLnJlY2FjaGVWaWV3Qm94PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy52aWV3cG9ydC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxlPXQud2lkdGgvdGhpcy5nZXRab29tKCksbz10LmhlaWdodC90aGlzLmdldFpvb20oKTt0aGlzLnZpZXdCb3gueD0wLHRoaXMudmlld0JveC55PTAsdGhpcy52aWV3Qm94LndpZHRoPWUsdGhpcy52aWV3Qm94LmhlaWdodD1vfSxpLnByb3RvdHlwZS5nZXRWaWV3Qm94PWZ1bmN0aW9uKCl7cmV0dXJuIG4uZXh0ZW5kKHt9LHRoaXMudmlld0JveCl9LGkucHJvdG90eXBlLnByb2Nlc3NDVE09ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdldENUTSgpO2lmKHRoaXMub3B0aW9ucy5maXR8fHRoaXMub3B0aW9ucy5jb250YWluKXt2YXIgZTtlPXRoaXMub3B0aW9ucy5maXQ/TWF0aC5taW4odGhpcy5vcHRpb25zLndpZHRoL3RoaXMudmlld0JveC53aWR0aCx0aGlzLm9wdGlvbnMuaGVpZ2h0L3RoaXMudmlld0JveC5oZWlnaHQpOk1hdGgubWF4KHRoaXMub3B0aW9ucy53aWR0aC90aGlzLnZpZXdCb3gud2lkdGgsdGhpcy5vcHRpb25zLmhlaWdodC90aGlzLnZpZXdCb3guaGVpZ2h0KSx0LmE9ZSx0LmQ9ZSx0LmU9LXRoaXMudmlld0JveC54KmUsdC5mPS10aGlzLnZpZXdCb3gueSplfWlmKHRoaXMub3B0aW9ucy5jZW50ZXIpe3ZhciBvPS41Kih0aGlzLm9wdGlvbnMud2lkdGgtKHRoaXMudmlld0JveC53aWR0aCsyKnRoaXMudmlld0JveC54KSp0LmEpLG49LjUqKHRoaXMub3B0aW9ucy5oZWlnaHQtKHRoaXMudmlld0JveC5oZWlnaHQrMip0aGlzLnZpZXdCb3gueSkqdC5hKTt0LmU9byx0LmY9bn10aGlzLm9yaWdpbmFsU3RhdGUuem9vbT10LmEsdGhpcy5vcmlnaW5hbFN0YXRlLng9dC5lLHRoaXMub3JpZ2luYWxTdGF0ZS55PXQuZix0aGlzLnNldENUTSh0KX0saS5wcm90b3R5cGUuZ2V0T3JpZ2luYWxTdGF0ZT1mdW5jdGlvbigpe3JldHVybiBuLmV4dGVuZCh7fSx0aGlzLm9yaWdpbmFsU3RhdGUpfSxpLnByb3RvdHlwZS5nZXRTdGF0ZT1mdW5jdGlvbigpe3JldHVybiBuLmV4dGVuZCh7fSx0aGlzLmFjdGl2ZVN0YXRlKX0saS5wcm90b3R5cGUuZ2V0Wm9vbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmFjdGl2ZVN0YXRlLnpvb219LGkucHJvdG90eXBlLmdldFJlbGF0aXZlWm9vbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmFjdGl2ZVN0YXRlLnpvb20vdGhpcy5vcmlnaW5hbFN0YXRlLnpvb219LGkucHJvdG90eXBlLmNvbXB1dGVSZWxhdGl2ZVpvb209ZnVuY3Rpb24odCl7cmV0dXJuIHQvdGhpcy5vcmlnaW5hbFN0YXRlLnpvb219LGkucHJvdG90eXBlLmdldFBhbj1mdW5jdGlvbigpe3JldHVybnt4OnRoaXMuYWN0aXZlU3RhdGUueCx5OnRoaXMuYWN0aXZlU3RhdGUueX19LGkucHJvdG90eXBlLmdldENUTT1mdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucy5zdmcuY3JlYXRlU1ZHTWF0cml4KCk7cmV0dXJuIHQuYT10aGlzLmFjdGl2ZVN0YXRlLnpvb20sdC5iPTAsdC5jPTAsdC5kPXRoaXMuYWN0aXZlU3RhdGUuem9vbSx0LmU9dGhpcy5hY3RpdmVTdGF0ZS54LHQuZj10aGlzLmFjdGl2ZVN0YXRlLnksdH0saS5wcm90b3R5cGUuc2V0Q1RNPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaXNab29tRGlmZmVyZW50KHQpLG89dGhpcy5pc1BhbkRpZmZlcmVudCh0KTtpZihlfHxvKXtpZihlJiZ0aGlzLm9wdGlvbnMuYmVmb3JlWm9vbSh0aGlzLmdldFJlbGF0aXZlWm9vbSgpLHRoaXMuY29tcHV0ZVJlbGF0aXZlWm9vbSh0LmEpKT09PSExJiYodC5hPXQuZD10aGlzLmFjdGl2ZVN0YXRlLnpvb20sZT0hMSksbyl7dmFyIGk9dGhpcy5vcHRpb25zLmJlZm9yZVBhbih0aGlzLmdldFBhbigpLHt4OnQuZSx5OnQuZn0pLHM9ITEscj0hMTtpPT09ITE/KHQuZT10aGlzLmdldFBhbigpLngsdC5mPXRoaXMuZ2V0UGFuKCkueSxzPXI9ITApOm4uaXNPYmplY3QoaSkmJihpLng9PT0hMT8odC5lPXRoaXMuZ2V0UGFuKCkueCxzPSEwKTpuLmlzTnVtYmVyKGkueCkmJih0LmU9aS54KSxpLnk9PT0hMT8odC5mPXRoaXMuZ2V0UGFuKCkueSxyPSEwKTpuLmlzTnVtYmVyKGkueSkmJih0LmY9aS55KSkscyYmciYmKG89ITEpfShlfHxvKSYmKHRoaXMudXBkYXRlQ2FjaGUodCksdGhpcy51cGRhdGVDVE1Pbk5leHRGcmFtZSgpLGUmJnRoaXMub3B0aW9ucy5vblpvb20odGhpcy5nZXRSZWxhdGl2ZVpvb20oKSksbyYmdGhpcy5vcHRpb25zLm9uUGFuKHRoaXMuZ2V0UGFuKCkpKX19LGkucHJvdG90eXBlLmlzWm9vbURpZmZlcmVudD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hY3RpdmVTdGF0ZS56b29tIT09dC5hfSxpLnByb3RvdHlwZS5pc1BhbkRpZmZlcmVudD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hY3RpdmVTdGF0ZS54IT09dC5lfHx0aGlzLmFjdGl2ZVN0YXRlLnkhPT10LmZ9LGkucHJvdG90eXBlLnVwZGF0ZUNhY2hlPWZ1bmN0aW9uKHQpe3RoaXMuYWN0aXZlU3RhdGUuem9vbT10LmEsdGhpcy5hY3RpdmVTdGF0ZS54PXQuZSx0aGlzLmFjdGl2ZVN0YXRlLnk9dC5mfSxpLnByb3RvdHlwZS5wZW5kaW5nVXBkYXRlPSExLGkucHJvdG90eXBlLnVwZGF0ZUNUTU9uTmV4dEZyYW1lPWZ1bmN0aW9uKCl7dGhpcy5wZW5kaW5nVXBkYXRlfHwodGhpcy5wZW5kaW5nVXBkYXRlPSEwLHRoaXMucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmNhbGwod2luZG93LHRoaXMudXBkYXRlQ1RNQ2FjaGVkKSl9LGkucHJvdG90eXBlLnVwZGF0ZUNUTT1mdW5jdGlvbigpe28uc2V0Q1RNKHRoaXMudmlld3BvcnQsdGhpcy5nZXRDVE0oKSx0aGlzLmRlZnMpLHRoaXMucGVuZGluZ1VwZGF0ZT0hMX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBpKHQsZSl9fSx7Ii4vc3ZnLXV0aWxpdGllcyI6NSwiLi91dGlsaXRpZXMiOjd9XSw0OltmdW5jdGlvbih0LGUpe3ZhciBvPXQoIi4vdW5pd2hlZWwiKSxuPXQoIi4vY29udHJvbC1pY29ucyIpLGk9dCgiLi91dGlsaXRpZXMiKSxzPXQoIi4vc3ZnLXV0aWxpdGllcyIpLHI9dCgiLi9zaGFkb3ctdmlld3BvcnQiKSxhPWZ1bmN0aW9uKHQsZSl7dGhpcy5pbml0KHQsZSl9LGw9e3ZpZXdwb3J0U2VsZWN0b3I6Ii5zdmctcGFuLXpvb21fdmlld3BvcnQiLHBhbkVuYWJsZWQ6ITAsY29udHJvbEljb25zRW5hYmxlZDohMSx6b29tRW5hYmxlZDohMCxkYmxDbGlja1pvb21FbmFibGVkOiEwLG1vdXNlV2hlZWxab29tRW5hYmxlZDohMCxwcmV2ZW50TW91c2VFdmVudHNEZWZhdWx0OiEwLHpvb21TY2FsZVNlbnNpdGl2aXR5Oi4xLG1pblpvb206LjUsbWF4Wm9vbToxMCxmaXQ6ITAsY29udGFpbjohMSxjZW50ZXI6ITAscmVmcmVzaFJhdGU6ImF1dG8iLGJlZm9yZVpvb206bnVsbCxvblpvb206bnVsbCxiZWZvcmVQYW46bnVsbCxvblBhbjpudWxsLGN1c3RvbUV2ZW50c0hhbmRsZXI6bnVsbH07YS5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbih0LGUpe3ZhciBvPXRoaXM7dGhpcy5zdmc9dCx0aGlzLmRlZnM9dC5xdWVyeVNlbGVjdG9yKCJkZWZzIikscy5zZXR1cFN2Z0F0dHJpYnV0ZXModGhpcy5zdmcpLHRoaXMub3B0aW9ucz1pLmV4dGVuZChpLmV4dGVuZCh7fSxsKSxlKSx0aGlzLnN0YXRlPSJub25lIjt2YXIgYT1zLmdldEJvdW5kaW5nQ2xpZW50UmVjdE5vcm1hbGl6ZWQodCk7dGhpcy53aWR0aD1hLndpZHRoLHRoaXMuaGVpZ2h0PWEuaGVpZ2h0LHRoaXMudmlld3BvcnQ9cihzLmdldE9yQ3JlYXRlVmlld3BvcnQodGhpcy5zdmcsdGhpcy5vcHRpb25zLnZpZXdwb3J0U2VsZWN0b3IpLHtzdmc6dGhpcy5zdmcsd2lkdGg6dGhpcy53aWR0aCxoZWlnaHQ6dGhpcy5oZWlnaHQsZml0OnRoaXMub3B0aW9ucy5maXQsY29udGFpbjp0aGlzLm9wdGlvbnMuY29udGFpbixjZW50ZXI6dGhpcy5vcHRpb25zLmNlbnRlcixyZWZyZXNoUmF0ZTp0aGlzLm9wdGlvbnMucmVmcmVzaFJhdGUsYmVmb3JlWm9vbTpmdW5jdGlvbih0LGUpe3JldHVybiBvLnZpZXdwb3J0JiZvLm9wdGlvbnMuYmVmb3JlWm9vbT9vLm9wdGlvbnMuYmVmb3JlWm9vbSh0LGUpOnZvaWQgMH0sb25ab29tOmZ1bmN0aW9uKHQpe3JldHVybiBvLnZpZXdwb3J0JiZvLm9wdGlvbnMub25ab29tP28ub3B0aW9ucy5vblpvb20odCk6dm9pZCAwfSxiZWZvcmVQYW46ZnVuY3Rpb24odCxlKXtyZXR1cm4gby52aWV3cG9ydCYmby5vcHRpb25zLmJlZm9yZVBhbj9vLm9wdGlvbnMuYmVmb3JlUGFuKHQsZSk6dm9pZCAwfSxvblBhbjpmdW5jdGlvbih0KXtyZXR1cm4gby52aWV3cG9ydCYmby5vcHRpb25zLm9uUGFuP28ub3B0aW9ucy5vblBhbih0KTp2b2lkIDB9fSk7dmFyIHU9dGhpcy5nZXRQdWJsaWNJbnN0YW5jZSgpO3Uuc2V0QmVmb3JlWm9vbSh0aGlzLm9wdGlvbnMuYmVmb3JlWm9vbSksdS5zZXRPblpvb20odGhpcy5vcHRpb25zLm9uWm9vbSksdS5zZXRCZWZvcmVQYW4odGhpcy5vcHRpb25zLmJlZm9yZVBhbiksdS5zZXRPblBhbih0aGlzLm9wdGlvbnMub25QYW4pLHRoaXMub3B0aW9ucy5jb250cm9sSWNvbnNFbmFibGVkJiZuLmVuYWJsZSh0aGlzKSx0aGlzLmxhc3RNb3VzZVdoZWVsRXZlbnRUaW1lPURhdGUubm93KCksdGhpcy5zZXR1cEhhbmRsZXJzKCl9LGEucHJvdG90eXBlLnNldHVwSGFuZGxlcnM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9bnVsbDtpZih0aGlzLmV2ZW50TGlzdGVuZXJzPXttb3VzZWRvd246ZnVuY3Rpb24oZSl7cmV0dXJuIHQuaGFuZGxlTW91c2VEb3duKGUsbnVsbCl9LHRvdWNoc3RhcnQ6ZnVuY3Rpb24obyl7dmFyIG49dC5oYW5kbGVNb3VzZURvd24obyxlKTtyZXR1cm4gZT1vLG59LG1vdXNldXA6ZnVuY3Rpb24oZSl7cmV0dXJuIHQuaGFuZGxlTW91c2VVcChlKX0sdG91Y2hlbmQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHQuaGFuZGxlTW91c2VVcChlKX0sbW91c2Vtb3ZlOmZ1bmN0aW9uKGUpe3JldHVybiB0LmhhbmRsZU1vdXNlTW92ZShlKX0sdG91Y2htb3ZlOmZ1bmN0aW9uKGUpe3JldHVybiB0LmhhbmRsZU1vdXNlTW92ZShlKX0sbW91c2VsZWF2ZTpmdW5jdGlvbihlKXtyZXR1cm4gdC5oYW5kbGVNb3VzZVVwKGUpfSx0b3VjaGxlYXZlOmZ1bmN0aW9uKGUpe3JldHVybiB0LmhhbmRsZU1vdXNlVXAoZSl9LHRvdWNoY2FuY2VsOmZ1bmN0aW9uKGUpe3JldHVybiB0LmhhbmRsZU1vdXNlVXAoZSl9fSxudWxsIT10aGlzLm9wdGlvbnMuY3VzdG9tRXZlbnRzSGFuZGxlcil7dGhpcy5vcHRpb25zLmN1c3RvbUV2ZW50c0hhbmRsZXIuaW5pdCh7c3ZnRWxlbWVudDp0aGlzLnN2ZyxpbnN0YW5jZTp0aGlzLmdldFB1YmxpY0luc3RhbmNlKCl9KTt2YXIgbz10aGlzLm9wdGlvbnMuY3VzdG9tRXZlbnRzSGFuZGxlci5oYWx0RXZlbnRMaXN0ZW5lcnM7aWYobyYmby5sZW5ndGgpZm9yKHZhciBuPW8ubGVuZ3RoLTE7bj49MDtuLS0pdGhpcy5ldmVudExpc3RlbmVycy5oYXNPd25Qcm9wZXJ0eShvW25dKSYmZGVsZXRlIHRoaXMuZXZlbnRMaXN0ZW5lcnNbb1tuXV19Zm9yKHZhciBpIGluIHRoaXMuZXZlbnRMaXN0ZW5lcnMpdGhpcy5zdmcuYWRkRXZlbnRMaXN0ZW5lcihpLHRoaXMuZXZlbnRMaXN0ZW5lcnNbaV0sITEpO3RoaXMub3B0aW9ucy5tb3VzZVdoZWVsWm9vbUVuYWJsZWQmJih0aGlzLm9wdGlvbnMubW91c2VXaGVlbFpvb21FbmFibGVkPSExLHRoaXMuZW5hYmxlTW91c2VXaGVlbFpvb20oKSl9LGEucHJvdG90eXBlLmVuYWJsZU1vdXNlV2hlZWxab29tPWZ1bmN0aW9uKCl7aWYoIXRoaXMub3B0aW9ucy5tb3VzZVdoZWVsWm9vbUVuYWJsZWQpe3ZhciB0PXRoaXM7dGhpcy53aGVlbExpc3RlbmVyPWZ1bmN0aW9uKGUpe3JldHVybiB0LmhhbmRsZU1vdXNlV2hlZWwoZSl9LG8ub24odGhpcy5zdmcsdGhpcy53aGVlbExpc3RlbmVyLCExKSx0aGlzLm9wdGlvbnMubW91c2VXaGVlbFpvb21FbmFibGVkPSEwfX0sYS5wcm90b3R5cGUuZGlzYWJsZU1vdXNlV2hlZWxab29tPWZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLm1vdXNlV2hlZWxab29tRW5hYmxlZCYmKG8ub2ZmKHRoaXMuc3ZnLHRoaXMud2hlZWxMaXN0ZW5lciwhMSksdGhpcy5vcHRpb25zLm1vdXNlV2hlZWxab29tRW5hYmxlZD0hMSl9LGEucHJvdG90eXBlLmhhbmRsZU1vdXNlV2hlZWw9ZnVuY3Rpb24odCl7aWYodGhpcy5vcHRpb25zLnpvb21FbmFibGVkJiYibm9uZSI9PT10aGlzLnN0YXRlKXt0aGlzLm9wdGlvbnMucHJldmVudE1vdXNlRXZlbnRzRGVmYXVsdCYmKHQucHJldmVudERlZmF1bHQ/dC5wcmV2ZW50RGVmYXVsdCgpOnQucmV0dXJuVmFsdWU9ITEpO3ZhciBlPXQuZGVsdGFZfHwxLG89RGF0ZS5ub3coKS10aGlzLmxhc3RNb3VzZVdoZWVsRXZlbnRUaW1lLG49MytNYXRoLm1heCgwLDMwLW8pO3RoaXMubGFzdE1vdXNlV2hlZWxFdmVudFRpbWU9RGF0ZS5ub3coKSwiZGVsdGFNb2RlImluIHQmJjA9PT10LmRlbHRhTW9kZSYmdC53aGVlbERlbHRhJiYoZT0wPT09dC5kZWx0YVk/MDpNYXRoLmFicyh0LndoZWVsRGVsdGEpL3QuZGVsdGFZKSxlPWU+LS4zJiYuMz5lP2U6KGU+MD8xOi0xKSpNYXRoLmxvZyhNYXRoLmFicyhlKSsxMCkvbjt2YXIgaT10aGlzLnN2Zy5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkscj1zLmdldEV2ZW50UG9pbnQodCx0aGlzLnN2ZykubWF0cml4VHJhbnNmb3JtKGkpLGE9TWF0aC5wb3coMSt0aGlzLm9wdGlvbnMuem9vbVNjYWxlU2Vuc2l0aXZpdHksLTEqZSk7dGhpcy56b29tQXRQb2ludChhLHIpfX0sYS5wcm90b3R5cGUuem9vbUF0UG9pbnQ9ZnVuY3Rpb24odCxlLG8pe3ZhciBuPXRoaXMudmlld3BvcnQuZ2V0T3JpZ2luYWxTdGF0ZSgpO28/KHQ9TWF0aC5tYXgodGhpcy5vcHRpb25zLm1pblpvb20qbi56b29tLE1hdGgubWluKHRoaXMub3B0aW9ucy5tYXhab29tKm4uem9vbSx0KSksdC89dGhpcy5nZXRab29tKCkpOnRoaXMuZ2V0Wm9vbSgpKnQ8dGhpcy5vcHRpb25zLm1pblpvb20qbi56b29tP3Q9dGhpcy5vcHRpb25zLm1pblpvb20qbi56b29tL3RoaXMuZ2V0Wm9vbSgpOnRoaXMuZ2V0Wm9vbSgpKnQ+dGhpcy5vcHRpb25zLm1heFpvb20qbi56b29tJiYodD10aGlzLm9wdGlvbnMubWF4Wm9vbSpuLnpvb20vdGhpcy5nZXRab29tKCkpO3ZhciBpPXRoaXMudmlld3BvcnQuZ2V0Q1RNKCkscz1lLm1hdHJpeFRyYW5zZm9ybShpLmludmVyc2UoKSkscj10aGlzLnN2Zy5jcmVhdGVTVkdNYXRyaXgoKS50cmFuc2xhdGUocy54LHMueSkuc2NhbGUodCkudHJhbnNsYXRlKC1zLngsLXMueSksYT1pLm11bHRpcGx5KHIpO2EuYSE9PWkuYSYmdGhpcy52aWV3cG9ydC5zZXRDVE0oYSl9LGEucHJvdG90eXBlLnpvb209ZnVuY3Rpb24odCxlKXt0aGlzLnpvb21BdFBvaW50KHQscy5nZXRTdmdDZW50ZXJQb2ludCh0aGlzLnN2Zyx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSxlKX0sYS5wcm90b3R5cGUucHVibGljWm9vbT1mdW5jdGlvbih0LGUpe2UmJih0PXRoaXMuY29tcHV0ZUZyb21SZWxhdGl2ZVpvb20odCkpLHRoaXMuem9vbSh0LGUpfSxhLnByb3RvdHlwZS5wdWJsaWNab29tQXRQb2ludD1mdW5jdGlvbih0LGUsbyl7aWYobyYmKHQ9dGhpcy5jb21wdXRlRnJvbVJlbGF0aXZlWm9vbSh0KSksISgiU1ZHUG9pbnQiIT09aS5nZXRUeXBlKGUpJiYieCJpbiBlJiYieSJpbiBlKSl0aHJvdyBuZXcgRXJyb3IoIkdpdmVuIHBvaW50IGlzIGludmFsaWQiKTtlPXMuY3JlYXRlU1ZHUG9pbnQodGhpcy5zdmcsZS54LGUueSksdGhpcy56b29tQXRQb2ludCh0LGUsbyl9LGEucHJvdG90eXBlLmdldFpvb209ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52aWV3cG9ydC5nZXRab29tKCl9LGEucHJvdG90eXBlLmdldFJlbGF0aXZlWm9vbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZpZXdwb3J0LmdldFJlbGF0aXZlWm9vbSgpfSxhLnByb3RvdHlwZS5jb21wdXRlRnJvbVJlbGF0aXZlWm9vbT1mdW5jdGlvbih0KXtyZXR1cm4gdCp0aGlzLnZpZXdwb3J0LmdldE9yaWdpbmFsU3RhdGUoKS56b29tfSxhLnByb3RvdHlwZS5yZXNldFpvb209ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnZpZXdwb3J0LmdldE9yaWdpbmFsU3RhdGUoKTt0aGlzLnpvb20odC56b29tLCEwKX0sYS5wcm90b3R5cGUucmVzZXRQYW49ZnVuY3Rpb24oKXt0aGlzLnBhbih0aGlzLnZpZXdwb3J0LmdldE9yaWdpbmFsU3RhdGUoKSl9LGEucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5yZXNldFpvb20oKSx0aGlzLnJlc2V0UGFuKCl9LGEucHJvdG90eXBlLmhhbmRsZURibENsaWNrPWZ1bmN0aW9uKHQpe2lmKHRoaXMub3B0aW9ucy5wcmV2ZW50TW91c2VFdmVudHNEZWZhdWx0JiYodC5wcmV2ZW50RGVmYXVsdD90LnByZXZlbnREZWZhdWx0KCk6dC5yZXR1cm5WYWx1ZT0hMSksdGhpcy5vcHRpb25zLmNvbnRyb2xJY29uc0VuYWJsZWQpe3ZhciBlPXQudGFyZ2V0LmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiI7aWYoZS5pbmRleE9mKCJzdmctcGFuLXpvb20tY29udHJvbCIpPi0xKXJldHVybiExfXZhciBvO289dC5zaGlmdEtleT8xLygyKigxK3RoaXMub3B0aW9ucy56b29tU2NhbGVTZW5zaXRpdml0eSkpOjIqKDErdGhpcy5vcHRpb25zLnpvb21TY2FsZVNlbnNpdGl2aXR5KTt2YXIgbj1zLmdldEV2ZW50UG9pbnQodCx0aGlzLnN2ZykubWF0cml4VHJhbnNmb3JtKHRoaXMuc3ZnLmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSk7dGhpcy56b29tQXRQb2ludChvLG4pfSxhLnByb3RvdHlwZS5oYW5kbGVNb3VzZURvd249ZnVuY3Rpb24odCxlKXt0aGlzLm9wdGlvbnMucHJldmVudE1vdXNlRXZlbnRzRGVmYXVsdCYmKHQucHJldmVudERlZmF1bHQ/dC5wcmV2ZW50RGVmYXVsdCgpOnQucmV0dXJuVmFsdWU9ITEpLGkubW91c2VBbmRUb3VjaE5vcm1hbGl6ZSh0LHRoaXMuc3ZnKSx0aGlzLm9wdGlvbnMuZGJsQ2xpY2tab29tRW5hYmxlZCYmaS5pc0RibENsaWNrKHQsZSk/dGhpcy5oYW5kbGVEYmxDbGljayh0KToodGhpcy5zdGF0ZT0icGFuIix0aGlzLmZpcnN0RXZlbnRDVE09dGhpcy52aWV3cG9ydC5nZXRDVE0oKSx0aGlzLnN0YXRlT3JpZ2luPXMuZ2V0RXZlbnRQb2ludCh0LHRoaXMuc3ZnKS5tYXRyaXhUcmFuc2Zvcm0odGhpcy5maXJzdEV2ZW50Q1RNLmludmVyc2UoKSkpfSxhLnByb3RvdHlwZS5oYW5kbGVNb3VzZU1vdmU9ZnVuY3Rpb24odCl7aWYodGhpcy5vcHRpb25zLnByZXZlbnRNb3VzZUV2ZW50c0RlZmF1bHQmJih0LnByZXZlbnREZWZhdWx0P3QucHJldmVudERlZmF1bHQoKTp0LnJldHVyblZhbHVlPSExKSwicGFuIj09PXRoaXMuc3RhdGUmJnRoaXMub3B0aW9ucy5wYW5FbmFibGVkKXt2YXIgZT1zLmdldEV2ZW50UG9pbnQodCx0aGlzLnN2ZykubWF0cml4VHJhbnNmb3JtKHRoaXMuZmlyc3RFdmVudENUTS5pbnZlcnNlKCkpLG89dGhpcy5maXJzdEV2ZW50Q1RNLnRyYW5zbGF0ZShlLngtdGhpcy5zdGF0ZU9yaWdpbi54LGUueS10aGlzLnN0YXRlT3JpZ2luLnkpO3RoaXMudmlld3BvcnQuc2V0Q1RNKG8pfX0sYS5wcm90b3R5cGUuaGFuZGxlTW91c2VVcD1mdW5jdGlvbih0KXt0aGlzLm9wdGlvbnMucHJldmVudE1vdXNlRXZlbnRzRGVmYXVsdCYmKHQucHJldmVudERlZmF1bHQ/dC5wcmV2ZW50RGVmYXVsdCgpOnQucmV0dXJuVmFsdWU9ITEpLCJwYW4iPT09dGhpcy5zdGF0ZSYmKHRoaXMuc3RhdGU9Im5vbmUiKX0sYS5wcm90b3R5cGUuZml0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy52aWV3cG9ydC5nZXRWaWV3Qm94KCksZT1NYXRoLm1pbih0aGlzLndpZHRoL3Qud2lkdGgsdGhpcy5oZWlnaHQvdC5oZWlnaHQpO3RoaXMuem9vbShlLCEwKX0sYS5wcm90b3R5cGUuY29udGFpbj1mdW5jdGlvbigpe3ZhciB0PXRoaXMudmlld3BvcnQuZ2V0Vmlld0JveCgpLGU9TWF0aC5tYXgodGhpcy53aWR0aC90LndpZHRoLHRoaXMuaGVpZ2h0L3QuaGVpZ2h0KTt0aGlzLnpvb20oZSwhMCl9LGEucHJvdG90eXBlLmNlbnRlcj1mdW5jdGlvbigpe3ZhciB0PXRoaXMudmlld3BvcnQuZ2V0Vmlld0JveCgpLGU9LjUqKHRoaXMud2lkdGgtKHQud2lkdGgrMip0LngpKnRoaXMuZ2V0Wm9vbSgpKSxvPS41Kih0aGlzLmhlaWdodC0odC5oZWlnaHQrMip0LnkpKnRoaXMuZ2V0Wm9vbSgpKTt0aGlzLmdldFB1YmxpY0luc3RhbmNlKCkucGFuKHt4OmUseTpvfSl9LGEucHJvdG90eXBlLnVwZGF0ZUJCb3g9ZnVuY3Rpb24oKXt0aGlzLnZpZXdwb3J0LnJlY2FjaGVWaWV3Qm94KCl9LGEucHJvdG90eXBlLnBhbj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnZpZXdwb3J0LmdldENUTSgpO2UuZT10LngsZS5mPXQueSx0aGlzLnZpZXdwb3J0LnNldENUTShlKX0sYS5wcm90b3R5cGUucGFuQnk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy52aWV3cG9ydC5nZXRDVE0oKTtlLmUrPXQueCxlLmYrPXQueSx0aGlzLnZpZXdwb3J0LnNldENUTShlKX0sYS5wcm90b3R5cGUuZ2V0UGFuPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy52aWV3cG9ydC5nZXRTdGF0ZSgpO3JldHVybnt4OnQueCx5OnQueX19LGEucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbigpe3ZhciB0PXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0Tm9ybWFsaXplZCh0aGlzLnN2Zyk7dGhpcy53aWR0aD10LndpZHRoLHRoaXMuaGVpZ2h0PXQuaGVpZ2h0LHRoaXMub3B0aW9ucy5jb250cm9sSWNvbnNFbmFibGVkJiYodGhpcy5nZXRQdWJsaWNJbnN0YW5jZSgpLmRpc2FibGVDb250cm9sSWNvbnMoKSx0aGlzLmdldFB1YmxpY0luc3RhbmNlKCkuZW5hYmxlQ29udHJvbEljb25zKCkpfSxhLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLmJlZm9yZVpvb209bnVsbCx0aGlzLm9uWm9vbT1udWxsLHRoaXMuYmVmb3JlUGFuPW51bGwsdGhpcy5vblBhbj1udWxsLG51bGwhPXRoaXMub3B0aW9ucy5jdXN0b21FdmVudHNIYW5kbGVyJiZ0aGlzLm9wdGlvbnMuY3VzdG9tRXZlbnRzSGFuZGxlci5kZXN0cm95KHtzdmdFbGVtZW50OnRoaXMuc3ZnLGluc3RhbmNlOnRoaXMuZ2V0UHVibGljSW5zdGFuY2UoKX0pO2Zvcih2YXIgZSBpbiB0aGlzLmV2ZW50TGlzdGVuZXJzKXRoaXMuc3ZnLnJlbW92ZUV2ZW50TGlzdGVuZXIoZSx0aGlzLmV2ZW50TGlzdGVuZXJzW2VdLCExKTt0aGlzLmRpc2FibGVNb3VzZVdoZWVsWm9vbSgpLHRoaXMuZ2V0UHVibGljSW5zdGFuY2UoKS5kaXNhYmxlQ29udHJvbEljb25zKCksdGhpcy5yZXNldCgpLHU9dS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3ZnIT09dC5zdmd9KSxkZWxldGUgdGhpcy5vcHRpb25zLGRlbGV0ZSB0aGlzLnB1YmxpY0luc3RhbmNlLGRlbGV0ZSB0aGlzLnBpLHRoaXMuZ2V0UHVibGljSW5zdGFuY2U9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH19LGEucHJvdG90eXBlLmdldFB1YmxpY0luc3RhbmNlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5wdWJsaWNJbnN0YW5jZXx8KHRoaXMucHVibGljSW5zdGFuY2U9dGhpcy5waT17ZW5hYmxlUGFuOmZ1bmN0aW9uKCl7cmV0dXJuIHQub3B0aW9ucy5wYW5FbmFibGVkPSEwLHQucGl9LGRpc2FibGVQYW46ZnVuY3Rpb24oKXtyZXR1cm4gdC5vcHRpb25zLnBhbkVuYWJsZWQ9ITEsdC5waX0saXNQYW5FbmFibGVkOmZ1bmN0aW9uKCl7cmV0dXJuISF0Lm9wdGlvbnMucGFuRW5hYmxlZH0scGFuOmZ1bmN0aW9uKGUpe3JldHVybiB0LnBhbihlKSx0LnBpfSxwYW5CeTpmdW5jdGlvbihlKXtyZXR1cm4gdC5wYW5CeShlKSx0LnBpfSxnZXRQYW46ZnVuY3Rpb24oKXtyZXR1cm4gdC5nZXRQYW4oKX0sc2V0QmVmb3JlUGFuOmZ1bmN0aW9uKGUpe3JldHVybiB0Lm9wdGlvbnMuYmVmb3JlUGFuPW51bGw9PT1lP251bGw6aS5wcm94eShlLHQucHVibGljSW5zdGFuY2UpLHQucGl9LHNldE9uUGFuOmZ1bmN0aW9uKGUpe3JldHVybiB0Lm9wdGlvbnMub25QYW49bnVsbD09PWU/bnVsbDppLnByb3h5KGUsdC5wdWJsaWNJbnN0YW5jZSksdC5waX0sZW5hYmxlWm9vbTpmdW5jdGlvbigpe3JldHVybiB0Lm9wdGlvbnMuem9vbUVuYWJsZWQ9ITAsdC5waX0sZGlzYWJsZVpvb206ZnVuY3Rpb24oKXtyZXR1cm4gdC5vcHRpb25zLnpvb21FbmFibGVkPSExLHQucGl9LGlzWm9vbUVuYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hIXQub3B0aW9ucy56b29tRW5hYmxlZH0sZW5hYmxlQ29udHJvbEljb25zOmZ1bmN0aW9uKCl7cmV0dXJuIHQub3B0aW9ucy5jb250cm9sSWNvbnNFbmFibGVkfHwodC5vcHRpb25zLmNvbnRyb2xJY29uc0VuYWJsZWQ9ITAsbi5lbmFibGUodCkpLHQucGl9LGRpc2FibGVDb250cm9sSWNvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gdC5vcHRpb25zLmNvbnRyb2xJY29uc0VuYWJsZWQmJih0Lm9wdGlvbnMuY29udHJvbEljb25zRW5hYmxlZD0hMSxuLmRpc2FibGUodCkpLHQucGl9LGlzQ29udHJvbEljb25zRW5hYmxlZDpmdW5jdGlvbigpe3JldHVybiEhdC5vcHRpb25zLmNvbnRyb2xJY29uc0VuYWJsZWR9LGVuYWJsZURibENsaWNrWm9vbTpmdW5jdGlvbigpe3JldHVybiB0Lm9wdGlvbnMuZGJsQ2xpY2tab29tRW5hYmxlZD0hMCx0LnBpfSxkaXNhYmxlRGJsQ2xpY2tab29tOmZ1bmN0aW9uKCl7cmV0dXJuIHQub3B0aW9ucy5kYmxDbGlja1pvb21FbmFibGVkPSExLHQucGl9LGlzRGJsQ2xpY2tab29tRW5hYmxlZDpmdW5jdGlvbigpe3JldHVybiEhdC5vcHRpb25zLmRibENsaWNrWm9vbUVuYWJsZWR9LGVuYWJsZU1vdXNlV2hlZWxab29tOmZ1bmN0aW9uKCl7cmV0dXJuIHQuZW5hYmxlTW91c2VXaGVlbFpvb20oKSx0LnBpfSxkaXNhYmxlTW91c2VXaGVlbFpvb206ZnVuY3Rpb24oKXtyZXR1cm4gdC5kaXNhYmxlTW91c2VXaGVlbFpvb20oKSx0LnBpfSxpc01vdXNlV2hlZWxab29tRW5hYmxlZDpmdW5jdGlvbigpe3JldHVybiEhdC5vcHRpb25zLm1vdXNlV2hlZWxab29tRW5hYmxlZH0sc2V0Wm9vbVNjYWxlU2Vuc2l0aXZpdHk6ZnVuY3Rpb24oZSl7cmV0dXJuIHQub3B0aW9ucy56b29tU2NhbGVTZW5zaXRpdml0eT1lLHQucGl9LHNldE1pblpvb206ZnVuY3Rpb24oZSl7cmV0dXJuIHQub3B0aW9ucy5taW5ab29tPWUsdC5waX0sc2V0TWF4Wm9vbTpmdW5jdGlvbihlKXtyZXR1cm4gdC5vcHRpb25zLm1heFpvb209ZSx0LnBpfSxzZXRCZWZvcmVab29tOmZ1bmN0aW9uKGUpe3JldHVybiB0Lm9wdGlvbnMuYmVmb3JlWm9vbT1udWxsPT09ZT9udWxsOmkucHJveHkoZSx0LnB1YmxpY0luc3RhbmNlKSx0LnBpfSxzZXRPblpvb206ZnVuY3Rpb24oZSl7cmV0dXJuIHQub3B0aW9ucy5vblpvb209bnVsbD09PWU/bnVsbDppLnByb3h5KGUsdC5wdWJsaWNJbnN0YW5jZSksdC5waX0sem9vbTpmdW5jdGlvbihlKXtyZXR1cm4gdC5wdWJsaWNab29tKGUsITApLHQucGl9LHpvb21CeTpmdW5jdGlvbihlKXtyZXR1cm4gdC5wdWJsaWNab29tKGUsITEpLHQucGl9LHpvb21BdFBvaW50OmZ1bmN0aW9uKGUsbyl7cmV0dXJuIHQucHVibGljWm9vbUF0UG9pbnQoZSxvLCEwKSx0LnBpfSx6b29tQXRQb2ludEJ5OmZ1bmN0aW9uKGUsbyl7cmV0dXJuIHQucHVibGljWm9vbUF0UG9pbnQoZSxvLCExKSx0LnBpfSx6b29tSW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy56b29tQnkoMSt0Lm9wdGlvbnMuem9vbVNjYWxlU2Vuc2l0aXZpdHkpLHQucGl9LHpvb21PdXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy56b29tQnkoMS8oMSt0Lm9wdGlvbnMuem9vbVNjYWxlU2Vuc2l0aXZpdHkpKSx0LnBpfSxnZXRab29tOmZ1bmN0aW9uKCl7cmV0dXJuIHQuZ2V0UmVsYXRpdmVab29tKCl9LHJlc2V0Wm9vbTpmdW5jdGlvbigpe3JldHVybiB0LnJlc2V0Wm9vbSgpLHQucGl9LHJlc2V0UGFuOmZ1bmN0aW9uKCl7cmV0dXJuIHQucmVzZXRQYW4oKSx0LnBpfSxyZXNldDpmdW5jdGlvbigpe3JldHVybiB0LnJlc2V0KCksdC5waX0sZml0OmZ1bmN0aW9uKCl7cmV0dXJuIHQuZml0KCksdC5waX0sY29udGFpbjpmdW5jdGlvbigpe3JldHVybiB0LmNvbnRhaW4oKSx0LnBpfSxjZW50ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdC5jZW50ZXIoKSx0LnBpfSx1cGRhdGVCQm94OmZ1bmN0aW9uKCl7cmV0dXJuIHQudXBkYXRlQkJveCgpLHQucGl9LHJlc2l6ZTpmdW5jdGlvbigpe3JldHVybiB0LnJlc2l6ZSgpLHQucGl9LGdldFNpemVzOmZ1bmN0aW9uKCl7cmV0dXJue3dpZHRoOnQud2lkdGgsaGVpZ2h0OnQuaGVpZ2h0LHJlYWxab29tOnQuZ2V0Wm9vbSgpLHZpZXdCb3g6dC52aWV3cG9ydC5nZXRWaWV3Qm94KCl9fSxkZXN0cm95OmZ1bmN0aW9uKCl7cmV0dXJuIHQuZGVzdHJveSgpLHQucGl9fSksdGhpcy5wdWJsaWNJbnN0YW5jZX07dmFyIHU9W10saD1mdW5jdGlvbih0LGUpe3ZhciBvPWkuZ2V0U3ZnKHQpO2lmKG51bGw9PT1vKXJldHVybiBudWxsO2Zvcih2YXIgbj11Lmxlbmd0aC0xO24+PTA7bi0tKWlmKHVbbl0uc3ZnPT09bylyZXR1cm4gdVtuXS5pbnN0YW5jZS5nZXRQdWJsaWNJbnN0YW5jZSgpO3JldHVybiB1LnB1c2goe3N2ZzpvLGluc3RhbmNlOm5ldyBhKG8sZSl9KSx1W3UubGVuZ3RoLTFdLmluc3RhbmNlLmdldFB1YmxpY0luc3RhbmNlKCl9O2UuZXhwb3J0cz1ofSx7Ii4vY29udHJvbC1pY29ucyI6MiwiLi9zaGFkb3ctdmlld3BvcnQiOjMsIi4vc3ZnLXV0aWxpdGllcyI6NSwiLi91bml3aGVlbCI6NiwiLi91dGlsaXRpZXMiOjd9XSw1OltmdW5jdGlvbih0LGUpe3ZhciBvPXQoIi4vdXRpbGl0aWVzIiksbj0idW5rbm93biI7ZG9jdW1lbnQuZG9jdW1lbnRNb2RlJiYobj0iaWUiKSxlLmV4cG9ydHM9e3N2Z05TOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseG1sTlM6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnNOUzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8iLHhsaW5rTlM6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLGV2TlM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLWV2ZW50cyIsZ2V0Qm91bmRpbmdDbGllbnRSZWN0Tm9ybWFsaXplZDpmdW5jdGlvbih0KXtpZih0LmNsaWVudFdpZHRoJiZ0LmNsaWVudEhlaWdodClyZXR1cm57d2lkdGg6dC5jbGllbnRXaWR0aCxoZWlnaHQ6dC5jbGllbnRIZWlnaHR9O2lmKHQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpcmV0dXJuIHQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZ2V0IEJvdW5kaW5nQ2xpZW50UmVjdCBmb3IgU1ZHLiIpfSxnZXRPckNyZWF0ZVZpZXdwb3J0OmZ1bmN0aW9uKHQsZSl7dmFyIG49bnVsbDtpZihuPW8uaXNFbGVtZW50KGUpP2U6dC5xdWVyeVNlbGVjdG9yKGUpLCFuKXt2YXIgaT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LmNoaWxkTm9kZXN8fHQuY2hpbGRyZW4pLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4iZGVmcyIhPT10Lm5vZGVOYW1lJiYiI3RleHQiIT09dC5ub2RlTmFtZX0pOzE9PT1pLmxlbmd0aCYmImciPT09aVswXS5ub2RlTmFtZSYmbnVsbD09PWlbMF0uZ2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iKSYmKG49aVswXSl9aWYoIW4pe3ZhciBzPSJ2aWV3cG9ydC0iKyhuZXcgRGF0ZSkudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9cRC9nLCIiKTtuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh0aGlzLnN2Z05TLCJnIiksbi5zZXRBdHRyaWJ1dGUoImlkIixzKTt2YXIgcj10LmNoaWxkTm9kZXN8fHQuY2hpbGRyZW47aWYociYmci5sZW5ndGg+MClmb3IodmFyIGE9ci5sZW5ndGg7YT4wO2EtLSkiZGVmcyIhPT1yW3IubGVuZ3RoLWFdLm5vZGVOYW1lJiZuLmFwcGVuZENoaWxkKHJbci5sZW5ndGgtYV0pO3QuYXBwZW5kQ2hpbGQobil9dmFyIGw9W107cmV0dXJuIG4uZ2V0QXR0cmlidXRlKCJjbGFzcyIpJiYobD1uLmdldEF0dHJpYnV0ZSgiY2xhc3MiKS5zcGxpdCgiICIpKSx+bC5pbmRleE9mKCJzdmctcGFuLXpvb21fdmlld3BvcnQiKXx8KGwucHVzaCgic3ZnLXBhbi16b29tX3ZpZXdwb3J0Iiksbi5zZXRBdHRyaWJ1dGUoImNsYXNzIixsLmpvaW4oIiAiKSkpLG59LHNldHVwU3ZnQXR0cmlidXRlczpmdW5jdGlvbih0KXtpZih0LnNldEF0dHJpYnV0ZSgieG1sbnMiLHRoaXMuc3ZnTlMpLHQuc2V0QXR0cmlidXRlTlModGhpcy54bWxuc05TLCJ4bWxuczp4bGluayIsdGhpcy54bGlua05TKSx0LnNldEF0dHJpYnV0ZU5TKHRoaXMueG1sbnNOUywieG1sbnM6ZXYiLHRoaXMuZXZOUyksbnVsbCE9PXQucGFyZW50Tm9kZSl7dmFyIGU9dC5nZXRBdHRyaWJ1dGUoInN0eWxlIil8fCIiOy0xPT09ZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoIm92ZXJmbG93IikmJnQuc2V0QXR0cmlidXRlKCJzdHlsZSIsIm92ZXJmbG93OiBoaWRkZW47ICIrZSl9fSxpbnRlcm5ldEV4cGxvcmVyUmVkaXNwbGF5SW50ZXJ2YWw6MzAwLHJlZnJlc2hEZWZzR2xvYmFsOm8udGhyb3R0bGUoZnVuY3Rpb24oKXtmb3IodmFyIHQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiZGVmcyIpLGU9dC5sZW5ndGgsbz0wO2U+bztvKyspe3ZhciBuPXRbb107bi5wYXJlbnROb2RlLmluc2VydEJlZm9yZShuLG4pfX0sdGhpcy5pbnRlcm5ldEV4cGxvcmVyUmVkaXNwbGF5SW50ZXJ2YWwpLHNldENUTTpmdW5jdGlvbih0LGUsbyl7dmFyIGk9dGhpcyxzPSJtYXRyaXgoIitlLmErIiwiK2UuYisiLCIrZS5jKyIsIitlLmQrIiwiK2UuZSsiLCIrZS5mKyIpIjt0LnNldEF0dHJpYnV0ZU5TKG51bGwsInRyYW5zZm9ybSIscyksImllIj09PW4mJm8mJihvLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG8sbyksd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtpLnJlZnJlc2hEZWZzR2xvYmFsKCl9LGkuaW50ZXJuZXRFeHBsb3JlclJlZGlzcGxheUludGVydmFsKSl9LGdldEV2ZW50UG9pbnQ6ZnVuY3Rpb24odCxlKXt2YXIgbj1lLmNyZWF0ZVNWR1BvaW50KCk7cmV0dXJuIG8ubW91c2VBbmRUb3VjaE5vcm1hbGl6ZSh0LGUpLG4ueD10LmNsaWVudFgsbi55PXQuY2xpZW50WSxufSxnZXRTdmdDZW50ZXJQb2ludDpmdW5jdGlvbih0LGUsbyl7cmV0dXJuIHRoaXMuY3JlYXRlU1ZHUG9pbnQodCxlLzIsby8yKX0sY3JlYXRlU1ZHUG9pbnQ6ZnVuY3Rpb24odCxlLG8pe3ZhciBuPXQuY3JlYXRlU1ZHUG9pbnQoKTtyZXR1cm4gbi54PWUsbi55PW8sbn19fSx7Ii4vdXRpbGl0aWVzIjo3fV0sNjpbZnVuY3Rpb24odCxlKXtlLmV4cG9ydHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxvKXt2YXIgbj1mdW5jdGlvbih0KXshdCYmKHQ9d2luZG93LmV2ZW50KTt2YXIgbz17b3JpZ2luYWxFdmVudDp0LHRhcmdldDp0LnRhcmdldHx8dC5zcmNFbGVtZW50LHR5cGU6IndoZWVsIixkZWx0YU1vZGU6Ik1vek1vdXNlUGl4ZWxTY3JvbGwiPT10LnR5cGU/MDoxLGRlbHRhWDowLGRlbGF0WjowLHByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7dC5wcmV2ZW50RGVmYXVsdD90LnByZXZlbnREZWZhdWx0KCk6dC5yZXR1cm5WYWx1ZT0hMX19O3JldHVybiJtb3VzZXdoZWVsIj09dT8oby5kZWx0YVk9LTEvNDAqdC53aGVlbERlbHRhLHQud2hlZWxEZWx0YVgmJihvLmRlbHRhWD0tMS80MCp0LndoZWVsRGVsdGFYKSk6by5kZWx0YVk9dC5kZXRhaWwsZShvKX07cmV0dXJuIGMucHVzaCh7ZWxlbWVudDp0LGZuOm4sY2FwdHVyZTpvfSksbn1mdW5jdGlvbiBlKHQsZSl7Zm9yKHZhciBvPTA7bzxjLmxlbmd0aDtvKyspaWYoY1tvXS5lbGVtZW50PT09dCYmY1tvXS5jYXB0dXJlPT09ZSlyZXR1cm4gY1tvXS5mbjtyZXR1cm4gZnVuY3Rpb24oKXt9fWZ1bmN0aW9uIG8odCxlKXtmb3IodmFyIG89MDtvPGMubGVuZ3RoO28rKylpZihjW29dLmVsZW1lbnQ9PT10JiZjW29dLmNhcHR1cmU9PT1lKXJldHVybiBjLnNwbGljZShvLDEpfWZ1bmN0aW9uIG4oZSxvLG4saSl7dmFyIHM7cz0id2hlZWwiPT09dT9uOnQoZSxuLGkpLGVbYV0oaCtvLHMsaXx8ITEpfWZ1bmN0aW9uIGkodCxuLGkscyl7Y2I9IndoZWVsIj09PXU/aTplKHQscyksdFtsXShoK24sY2Isc3x8ITEpLG8odCxzKX1mdW5jdGlvbiBzKHQsZSxvKXtuKHQsdSxlLG8pLCJET01Nb3VzZVNjcm9sbCI9PXUmJm4odCwiTW96TW91c2VQaXhlbFNjcm9sbCIsZSxvKX1mdW5jdGlvbiByKHQsZSxvKXtpKHQsdSxlLG8pLCJET01Nb3VzZVNjcm9sbCI9PXUmJmkodCwiTW96TW91c2VQaXhlbFNjcm9sbCIsZSxvKX12YXIgYSxsLHUsaD0iIixjPVtdO3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcj8oYT0iYWRkRXZlbnRMaXN0ZW5lciIsbD0icmVtb3ZlRXZlbnRMaXN0ZW5lciIpOihhPSJhdHRhY2hFdmVudCIsbD0iZGV0YWNoRXZlbnQiLGg9Im9uIiksdT0ib253aGVlbCJpbiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKT8id2hlZWwiOnZvaWQgMCE9PWRvY3VtZW50Lm9ubW91c2V3aGVlbD8ibW91c2V3aGVlbCI6IkRPTU1vdXNlU2Nyb2xsIix7b246cyxvZmY6cn19KCl9LHt9XSw3OltmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG8odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3dpbmRvdy5zZXRUaW1lb3V0KGUsdCl9fWUuZXhwb3J0cz17ZXh0ZW5kOmZ1bmN0aW9uKHQsZSl7dD10fHx7fTtmb3IodmFyIG8gaW4gZSl0W29dPXRoaXMuaXNPYmplY3QoZVtvXSk/dGhpcy5leHRlbmQodFtvXSxlW29dKTplW29dO3JldHVybiB0fSxpc0VsZW1lbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudHx8dCBpbnN0YW5jZW9mIFNWR0VsZW1lbnR8fHQgaW5zdGFuY2VvZiBTVkdTVkdFbGVtZW50fHx0JiYib2JqZWN0Ij09dHlwZW9mIHQmJm51bGwhPT10JiYxPT09dC5ub2RlVHlwZSYmInN0cmluZyI9PXR5cGVvZiB0Lm5vZGVOYW1lfSxpc09iamVjdDpmdW5jdGlvbih0KXtyZXR1cm4iW29iamVjdCBPYmplY3RdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX0saXNOdW1iZXI6ZnVuY3Rpb24odCl7cmV0dXJuIWlzTmFOKHBhcnNlRmxvYXQodCkpJiZpc0Zpbml0ZSh0KX0sZ2V0U3ZnOmZ1bmN0aW9uKHQpe3ZhciBlLG87aWYodGhpcy5pc0VsZW1lbnQodCkpZT10O2Vsc2V7aWYoISgic3RyaW5nIj09dHlwZW9mIHR8fHQgaW5zdGFuY2VvZiBTdHJpbmcpKXRocm93IG5ldyBFcnJvcigiUHJvdmlkZWQgc2VsZWN0b3IgaXMgbm90IGFuIEhUTUwgb2JqZWN0IG5vciBTdHJpbmciKTtpZihlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodCksIWUpdGhyb3cgbmV3IEVycm9yKCJQcm92aWRlZCBzZWxlY3RvciBkaWQgbm90IGZpbmQgYW55IGVsZW1lbnRzLiBTZWxlY3RvcjogIit0KX1pZigic3ZnIj09PWUudGFnTmFtZS50b0xvd2VyQ2FzZSgpKW89ZTtlbHNlIGlmKCJvYmplY3QiPT09ZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkpbz1lLmNvbnRlbnREb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7ZWxzZXtpZigiZW1iZWQiIT09ZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkpdGhyb3cgbmV3IEVycm9yKCJpbWciPT09ZS50YWdOYW1lLnRvTG93ZXJDYXNlKCk/J0Nhbm5vdCBzY3JpcHQgYW4gU1ZHIGluIGFuICJpbWciIGVsZW1lbnQuIFBsZWFzZSB1c2UgYW4gIm9iamVjdCIgZWxlbWVudCBvciBhbiBpbi1saW5lIFNWRy4nOiJDYW5ub3QgZ2V0IFNWRy4iKTtvPWUuZ2V0U1ZHRG9jdW1lbnQoKS5kb2N1bWVudEVsZW1lbnR9cmV0dXJuIG99LHByb3h5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkoZSxhcmd1bWVudHMpfX0sZ2V0VHlwZTpmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5hcHBseSh0KS5yZXBsYWNlKC9eXFtvYmplY3Rccy8sIiIpLnJlcGxhY2UoL1xdJC8sIiIpfSxtb3VzZUFuZFRvdWNoTm9ybWFsaXplOmZ1bmN0aW9uKHQsZSl7aWYodm9pZCAwPT09dC5jbGllbnRYfHxudWxsPT09dC5jbGllbnRYKWlmKHQuY2xpZW50WD0wLHQuY2xpZW50WT0wLHZvaWQgMCE9PXQuY2hhbmdlZFRvdWNoZXMmJnQuY2hhbmdlZFRvdWNoZXMubGVuZ3RoKXtpZih2b2lkIDAhPT10LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFgpdC5jbGllbnRYPXQuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WCx0LmNsaWVudFk9dC5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRZO2Vsc2UgaWYodm9pZCAwIT09dC5jaGFuZ2VkVG91Y2hlc1swXS5wYWdlWCl7dmFyIG89ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0LmNsaWVudFg9dC5jaGFuZ2VkVG91Y2hlc1swXS5wYWdlWC1vLmxlZnQsdC5jbGllbnRZPXQuY2hhbmdlZFRvdWNoZXNbMF0ucGFnZVktby50b3B9fWVsc2Ugdm9pZCAwIT09dC5vcmlnaW5hbEV2ZW50JiZ2b2lkIDAhPT10Lm9yaWdpbmFsRXZlbnQuY2xpZW50WCYmKHQuY2xpZW50WD10Lm9yaWdpbmFsRXZlbnQuY2xpZW50WCx0LmNsaWVudFk9dC5vcmlnaW5hbEV2ZW50LmNsaWVudFkpfSxpc0RibENsaWNrOmZ1bmN0aW9uKHQsZSl7aWYoMj09PXQuZGV0YWlsKXJldHVybiEwO2lmKHZvaWQgMCE9PWUmJm51bGwhPT1lKXt2YXIgbz10LnRpbWVTdGFtcC1lLnRpbWVTdGFtcCxuPU1hdGguc3FydChNYXRoLnBvdyh0LmNsaWVudFgtZS5jbGllbnRYLDIpK01hdGgucG93KHQuY2xpZW50WS1lLmNsaWVudFksMikpO3JldHVybiAyNTA+byYmMTA+bn1yZXR1cm4hMX0sbm93OkRhdGUubm93fHxmdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0VGltZSgpfSx0aHJvdHRsZTpmdW5jdGlvbih0LGUsbyl7dmFyIG4saSxzLHI9dGhpcyxhPW51bGwsbD0wO298fChvPXt9KTt2YXIgdT1mdW5jdGlvbigpe2w9by5sZWFkaW5nPT09ITE/MDpyLm5vdygpLGE9bnVsbCxzPXQuYXBwbHkobixpKSxhfHwobj1pPW51bGwpfTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaD1yLm5vdygpO2x8fG8ubGVhZGluZyE9PSExfHwobD1oKTt2YXIgYz1lLShoLWwpO3JldHVybiBuPXRoaXMsaT1hcmd1bWVudHMsMD49Y3x8Yz5lPyhjbGVhclRpbWVvdXQoYSksYT1udWxsLGw9aCxzPXQuYXBwbHkobixpKSxhfHwobj1pPW51bGwpKTphfHxvLnRyYWlsaW5nPT09ITF8fChhPXNldFRpbWVvdXQodSxjKSksc319LGNyZWF0ZVJlcXVlc3RBbmltYXRpb25GcmFtZTpmdW5jdGlvbih0KXt2YXIgZT1udWxsO3JldHVybiJhdXRvIiE9PXQmJjYwPnQmJnQ+MSYmKGU9TWF0aC5mbG9vcigxZTMvdCkpLG51bGw9PT1lP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fG8oMzMpOm8oZSl9fX0se31dfSx7fSxbMV0pOwo="></script>
<script src="data:application/x-javascript;base64,SFRNTFdpZGdldHMud2lkZ2V0KHsKCiAgbmFtZTogJ3N2Z1Bhblpvb20nLAoKICB0eXBlOiAnb3V0cHV0JywKCiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oZWwsIHdpZHRoLCBoZWlnaHQpIHsKCiAgICByZXR1cm4gewogICAgICAvLyBUT0RPOiBhZGQgaW5zdGFuY2UgZmllbGRzIGFzIHJlcXVpcmVkCiAgICB9CgogIH0sCgogIHJlbmRlclZhbHVlOiBmdW5jdGlvbihlbCwgeCwgaW5zdGFuY2UpIHsKICAgIC8vIHNldCBpbm5lckhUTUwgZXF1YWwgdG8gdGhlIFNWRyBwcm92aWRlZCBieSBSIGFzIHguc3ZnCiAgICAvLyAgZm9yIGJldHRlciByb2J1c3RuZXNzLCBjcmVhdGUgRE9NIGVsZW1lbnQgc2VwYXJhdGVseQogICAgLy8gIGFuZCBhZGQgdG8gdGhlIGh0bWx3aWRnZXRzIGNvbnRhaW5lciBlbAogICAgZWwuaW5uZXJIVE1MID0geC5zdmc7CgogICAgdmFyIHN2ZyA9IGVsLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzdmciKVswXTsKICAgIHZhciB2aWV3Ym94ID0gc3ZnLmdldEF0dHJpYnV0ZSgidmlld0JveCIpOwoKICAgIC8vIGFkZCB0b3VjaCB3aXRoIGhhbW1lci5qcwogICAgLy8gIHVzaW5nIGNvZGUgZnJvbSBleGFtcGxlCiAgICAvLyAgaHR0cHM6Ly9naXRodWIuY29tL2FyaXV0dGEvc3ZnLXBhbi16b29tL2Jsb2IvbWFzdGVyL2RlbW8vbW9iaWxlLmh0bWwKICAgIHguY29uZmlnLmN1c3RvbUV2ZW50c0hhbmRsZXIgPSB7CiAgICAgIGhhbHRFdmVudExpc3RlbmVyczogWyd0b3VjaHN0YXJ0JywgJ3RvdWNoZW5kJywgJ3RvdWNobW92ZScsICd0b3VjaGxlYXZlJywgJ3RvdWNoY2FuY2VsJ10KICAgICwgaW5pdDogZnVuY3Rpb24ob3B0aW9ucykgewogICAgICAgIHZhciBpbnN0YW5jZSA9IG9wdGlvbnMuaW5zdGFuY2UKICAgICAgICAgICwgaW5pdGlhbFNjYWxlID0gMQogICAgICAgICAgLCBwYW5uZWRYID0gMAogICAgICAgICAgLCBwYW5uZWRZID0gMAogICAgICAgIC8vIEluaXQgSGFtbWVyCiAgICAgICAgLy8gTGlzdGVuIG9ubHkgZm9yIHBvaW50ZXIgYW5kIHRvdWNoIGV2ZW50cwogICAgICAgIHRoaXMuaGFtbWVyID0gSGFtbWVyKG9wdGlvbnMuc3ZnRWxlbWVudCwgewogICAgICAgICAgaW5wdXRDbGFzczogSGFtbWVyLlNVUFBPUlRfUE9JTlRFUl9FVkVOVFMgPyBIYW1tZXIuUG9pbnRlckV2ZW50SW5wdXQgOiBIYW1tZXIuVG91Y2hJbnB1dAogICAgICAgIH0pCiAgICAgICAgLy8gRW5hYmxlIHBpbmNoCiAgICAgICAgdGhpcy5oYW1tZXIuZ2V0KCdwaW5jaCcpLnNldCh7ZW5hYmxlOiB0cnVlfSkKICAgICAgICAvLyBIYW5kbGUgZG91YmxlIHRhcAogICAgICAgIHRoaXMuaGFtbWVyLm9uKCdkb3VibGV0YXAnLCBmdW5jdGlvbihldil7CiAgICAgICAgICBpbnN0YW5jZS56b29tSW4oKQogICAgICAgIH0pCiAgICAgICAgLy8gSGFuZGxlIHBhbgogICAgICAgIHRoaXMuaGFtbWVyLm9uKCdwYW5zdGFydCBwYW5tb3ZlJywgZnVuY3Rpb24oZXYpewogICAgICAgICAgLy8gT24gcGFuIHN0YXJ0IHJlc2V0IHBhbm5lZCB2YXJpYWJsZXMKICAgICAgICAgIGlmIChldi50eXBlID09PSAncGFuc3RhcnQnKSB7CiAgICAgICAgICAgIHBhbm5lZFggPSAwCiAgICAgICAgICAgIHBhbm5lZFkgPSAwCiAgICAgICAgICB9CiAgICAgICAgICAvLyBQYW4gb25seSB0aGUgZGlmZmVyZW5jZQogICAgICAgICAgaW5zdGFuY2UucGFuQnkoe3g6IGV2LmRlbHRhWCAtIHBhbm5lZFgsIHk6IGV2LmRlbHRhWSAtIHBhbm5lZFl9KQogICAgICAgICAgcGFubmVkWCA9IGV2LmRlbHRhWAogICAgICAgICAgcGFubmVkWSA9IGV2LmRlbHRhWQogICAgICAgIH0pCiAgICAgICAgLy8gSGFuZGxlIHBpbmNoCiAgICAgICAgdGhpcy5oYW1tZXIub24oJ3BpbmNoc3RhcnQgcGluY2htb3ZlJywgZnVuY3Rpb24oZXYpewogICAgICAgICAgLy8gT24gcGluY2ggc3RhcnQgcmVtZW1iZXIgaW5pdGlhbCB6b29tCiAgICAgICAgICBpZiAoZXYudHlwZSA9PT0gJ3BpbmNoc3RhcnQnKSB7CiAgICAgICAgICAgIGluaXRpYWxTY2FsZSA9IGluc3RhbmNlLmdldFpvb20oKQogICAgICAgICAgICBpbnN0YW5jZS56b29tKGluaXRpYWxTY2FsZSAqIGV2LnNjYWxlKQogICAgICAgICAgfQogICAgICAgICAgaW5zdGFuY2Uuem9vbShpbml0aWFsU2NhbGUgKiBldi5zY2FsZSkKICAgICAgICB9KQogICAgICAgIC8vIFByZXZlbnQgbW92aW5nIHRoZSBwYWdlIG9uIHNvbWUgZGV2aWNlcyB3aGVuIHBhbm5pbmcgb3ZlciBTVkcKICAgICAgICBvcHRpb25zLnN2Z0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgZnVuY3Rpb24oZSl7IGUucHJldmVudERlZmF1bHQoKTsgfSk7CiAgICAgIH0KICAgICwgZGVzdHJveTogZnVuY3Rpb24oKXsKICAgICAgICB0aGlzLmhhbW1lci5kZXN0cm95KCk7CiAgICAgIH0KICAgIH0KCiAgICBpbnN0YW5jZS56b29tV2lkZ2V0ID0gc3ZnUGFuWm9vbShzdmcsIHguY29uZmlnKTsKCiAgICAvLyBhZGQgYmFjayB2aWV3Qm94IHRoYXQgc3ZnUGFuWm9vbSByZW1vdmVzIHRvIGZpbGwgdGhlIGNvbnRhaW5lcgogICAgLy8gIG1ha2UgaXQgYW4gYXJndW1lbnQgb24gdGhlIFIgc2lkZSBpbiBjYXNlCiAgICAvLyAgd2Ugd2FudCB0byBkaXNhYmxlCiAgICBpZih4Lm9wdGlvbnMudmlld0JveCl7CiAgICAgIC8vICBpZiB2aWV3Ym94IHByZXZpb3VzbHkgZGVmaW5lZCB0YWtlIG1heCBvZiBwcmlvciBhbmQgYm91bmRpbmcgcmVjdAogICAgICBpZih2aWV3Ym94KXsKICAgICAgICB2aWV3Ym94X2FycmF5ID0gdmlld2JveC5zcGxpdCgvW1xzLFwsXS8pCiAgICAgICAgdmlld2JveCA9IFsKICAgICAgICAgIHZpZXdib3hfYXJyYXlbMF0sCiAgICAgICAgICB2aWV3Ym94X2FycmF5WzFdLAogICAgICAgICAgTWF0aC5tYXgodmlld2JveF9hcnJheVsyXSxzdmcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpLAogICAgICAgICAgTWF0aC5tYXgodmlld2JveF9hcnJheVszXSxzdmcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KQogICAgICAgIF0uam9pbigiICIpCiAgICAgICAgc3ZnLnNldEF0dHJpYnV0ZSgndmlld0JveCcsIHZpZXdib3gpOwogICAgICB9IGVsc2UgewogICAgICAgIHN2Zy5zZXRBdHRyaWJ1dGUoCiAgICAgICAgICAndmlld0JveCcsCiAgICAgICAgICBbJzAnLCcwJywKICAgICAgICAgIHN2Zy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCwKICAgICAgICAgIHN2Zy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQKICAgICAgICAgIF0uam9pbignICcpCiAgICAgICAgKQogICAgICB9CiAgICB9CgogICAgLy8gdXNlIHRoaXMgdG8gc29ydCBvZiBtYWtlIG91ciBkaWFncmFtIHJlc3BvbnNpdmUKICAgIC8vICBvciBhdCBhIG1pbmltdW0gZml0IHdpdGhpbiB0aGUgYm91bmRzIHNldCBieSBodG1sd2lkZ2V0cwogICAgLy8gIGZvciB0aGUgcGFyZW50IGNvbnRhaW5lcgogICAgZnVuY3Rpb24gbWFrZVJlc3BvbnNpdmUoZWwpewogICAgICAgdmFyIHN2ZyA9IGVsLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzdmciKVswXTsKICAgICAgIGlmKHN2Zyl7CiAgICAgICAgaWYoc3ZnLndpZHRoKSB7c3ZnLnJlbW92ZUF0dHJpYnV0ZSgid2lkdGgiKX07CiAgICAgICAgaWYoc3ZnLmhlaWdodCkge3N2Zy5yZW1vdmVBdHRyaWJ1dGUoImhlaWdodCIpfTsKICAgICAgICBzdmcuc3R5bGUud2lkdGggPSAiMTAwJSI7CiAgICAgICAgc3ZnLnN0eWxlLmhlaWdodCA9ICIxMDAlIjsKICAgICAgIH0KICAgIH07CgogICAgbWFrZVJlc3BvbnNpdmUoZWwpOwoKICAgIGlmKCF4Lm9wdGlvbnMudmlld0JveCl7CiAgICAgIGluc3RhbmNlLnpvb21XaWRnZXQuZGVzdHJveSgpOwogICAgICBpbnN0YW5jZS56b29tV2lkZ2V0ID0gc3ZnUGFuWm9vbShzdmcsIHguY29uZmlnKTsKICAgIH0KICAgIC8vIHNldCB1cCBhIGNvbnRhaW5lciBmb3IgdGFza3MgdG8gcGVyZm9ybSBhZnRlciBjb21wbGV0aW9uCiAgICAvLyAgb25lIGV4YW1wbGUgd291bGQgYmUgYWRkIGNhbGxiYWNrcyBmb3IgZXZlbnQgaGFuZGxpbmcKICAgIC8vICBzdHlsaW5nCiAgICBpZiAoISh0eXBlb2YgeC50YXNrcyA9PT0gInVuZGVmaW5lZCIpICl7CiAgICAgIGlmICggKHR5cGVvZiB4LnRhc2tzLmxlbmd0aCA9PT0gInVuZGVmaW5lZCIpIHx8CiAgICAgICAodHlwZW9mIHgudGFza3MgPT09ICJmdW5jdGlvbiIgKSApIHsKICAgICAgICAgLy8gaGFuZGxlIGEgZnVuY3Rpb24gbm90IGVuY2xvc2VkIGluIGFycmF5CiAgICAgICAgIC8vIHNob3VsZCBiZSBhYmxlIHRvIHJlbW92ZSBvbmNlIHVzaW5nIGpzb25saXRlCiAgICAgICAgIHgudGFza3MgPSBbeC50YXNrc107CiAgICAgIH0KICAgICAgeC50YXNrcy5tYXAoZnVuY3Rpb24odCl7CiAgICAgICAgLy8gZm9yIGVhY2ggdGFza3MgY2FsbCB0aGUgdGFzayB3aXRoIGVsIHN1cHBsaWVkIGFzIGB0aGlzYAogICAgICAgIHQuY2FsbCh7ZWw6ZWwsem9vbVdpZGdldDppbnN0YW5jZS56b29tV2lkZ2V0fSk7CiAgICAgIH0pOwogICAgfQoKICAgIC8vICB1c2UgZXhwYW5kbyBwcm9wZXJ0eSBzbyB3ZSBjYW4gYWNjZXNzIGxhdGVyCiAgICAvLyAgICBzb21ld2hlcmUgc2F3IHdoZXJlIGV4cGFuZG8gY2FuIGNhdXNlIG1lbW9yeSBsZWFrIGluIElFCiAgICAvLyAgICBjb3VsZCBhbHNvIHNldCBpbiBIVE1MV2lkZ2V0cy53aWRnZXRzW3hdIHdoZXJlIG1hdGNoZXMgZWwKICAgIGVsLnpvb21XaWRnZXQgPSBpbnN0YW5jZS56b29tV2lkZ2V0OwoKICB9LAoKICByZXNpemU6IGZ1bmN0aW9uKGVsLCB3aWR0aCwgaGVpZ2h0LCBpbnN0YW5jZSkgewoKICB9Cgp9KTsK"></script>
</head>
<body style="background-color:white;">
<div id="htmlwidget_container">
<div id="htmlwidget-9635" style="width:960px;height:500px;" class="svgPanZoom"></div>
</div>
<script type="application/json" data-for="htmlwidget-9635">{"x":{"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"1344px\" height=\"960px\" viewBox=\"0 0 1344 960\" version=\"1.1\">\n <metadata xmlns:gridsvg=\"http://www.stat.auckland.ac.nz/~paul/R/gridSVG/\">\n <gridsvg:generator name=\"gridSVG\" version=\"1.4-3\" time=\"2015-11-06 05:41:03\"/>\n <gridsvg:argument name=\"name\" value=\"\"/>\n <gridsvg:argument name=\"exportCoords\" value=\"none\"/>\n <gridsvg:argument name=\"exportMappings\" value=\"none\"/>\n <gridsvg:argument name=\"exportJS\" value=\"none\"/>\n <gridsvg:argument name=\"res\" value=\"192\"/>\n <gridsvg:argument name=\"prefix\" value=\"\"/>\n <gridsvg:argument name=\"addClasses\" value=\"FALSE\"/>\n <gridsvg:argument name=\"indent\" value=\"TRUE\"/>\n <gridsvg:argument name=\"htmlWrapper\" value=\"FALSE\"/>\n <gridsvg:argument name=\"usePaths\" value=\"vpPaths\"/>\n <gridsvg:argument name=\"uniqueNames\" value=\"TRUE\"/>\n <gridsvg:separator name=\"id.sep\" value=\".\"/>\n <gridsvg:separator name=\"gPath.sep\" value=\"::\"/>\n <gridsvg:separator name=\"vpPath.sep\" value=\"::\"/>\n </metadata>\n <g transform=\"translate(0, 960) scale(1, -1)\">\n <g id=\"gridSVG\" fill=\"rgb(255,255,255)\" stroke=\"rgb(0,0,0)\" stroke-dasharray=\"none\" stroke-width=\"2\" font-size=\"32\" font-family=\"Helvetica, Arial, FreeSans, Liberation Sans, Nimbus Sans L, sans-serif\" opacity=\"1\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-miterlimit=\"10\" stroke-opacity=\"1\" fill-opacity=\"1\" font-weight=\"normal\" font-style=\"normal\">\n <defs>\n <symbol id=\"gridSVG.pch16\" viewBox=\"-5 -5 10 10\" overflow=\"visible\">\n <circle cx=\"0\" cy=\"0\" r=\"3.75\"/>\n </symbol>\n </defs>\n <g id=\"layout.1\">\n <g id=\"GRID.gTableParent.66.1\">\n <defs>\n <clipPath id=\"layout::background.1-6-6-1.1.clipPath\">\n <rect x=\"0\" y=\"0\" width=\"1344\" height=\"960\" fill=\"none\" stroke=\"none\"/>\n </clipPath>\n </defs>\n <g id=\"layout::background.1-6-6-1.1\" clip-path=\"url(#layout::background.1-6-6-1.1.clipPath)\">\n <g id=\"background.1-6-6-1.1\">\n <rect id=\"background.1-6-6-1.1.1\" x=\"0\" y=\"0\" width=\"1344\" height=\"960\" stroke-width=\"2.83\" stroke=\"rgb(255,255,255)\" fill=\"rgb(255,255,255)\" stroke-dasharray=\"none\" stroke-opacity=\"1\" fill-opacity=\"1\"/>\n </g>\n </g>\n <g id=\"layout::spacer.4-3-4-3.1\"/>\n <defs>\n <clipPath id=\"layout::panel.3-4-3-4.1.clipPath\">\n <rect x=\"116.3\" y=\"101.3\" width=\"950.27\" height=\"820.3\" fill=\"none\" stroke=\"none\"/>\n </clipPath>\n </defs>\n <g id=\"layout::panel.3-4-3-4.1\" clip-path=\"url(#layout::panel.3-4-3-4.1.clipPath)\">\n <g id=\"panel.3-4-3-4.1\">\n <g id=\"grill.gTree.25.1\">\n <g id=\"panel.background.rect.16.1\">\n <rect id=\"panel.background.rect.16.1.1\" x=\"116.3\" y=\"101.3\" width=\"950.27\" height=\"820.3\" stroke-width=\"2.83\" stroke=\"none\" fill=\"rgb(229,229,229)\" stroke-dasharray=\"none\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n </g>\n <g id=\"panel.grid.minor.y.polyline.18.1\">\n <polyline id=\"panel.grid.minor.y.polyline.18.1.1\" points=\"116.3,216.26 1066.56,216.26\" stroke-width=\"1.42\" stroke=\"rgb(242,242,242)\" stroke-dasharray=\"none\" stroke-linecap=\"butt\" stroke-opacity=\"1\" fill=\"none\"/>\n <polyline id=\"panel.grid.minor.y.polyline.18.1.2\" points=\"116.3,371.62 1066.56,371.62\" stroke-width=\"1.42\" stroke=\"rgb(242,242,242)\" stroke-dasharray=\"none\" stroke-linecap=\"butt\" stroke-opacity=\"1\" fill=\"none\"/>\n <polyline id=\"panel.grid.minor.y.polyline.18.1.3\" points=\"116.3,526.98 1066.56,526.98\" stroke-width=\"1.42\" stroke=\"rgb(242,242,242)\" stroke-dasharray=\"none\" stroke-linecap=\"butt\" stroke-opacity=\"1\" fill=\"none\"/>\n <polyline id=\"panel.grid.minor.y.polyline.18.1.4\" points=\"116.3,682.35 1066.56,682.35\" stroke-width=\"1.42\" stroke=\"rgb(242,242,242)\" stroke-dasharray=\"none\" stroke-linecap=\"butt\" stroke-opacity=\"1\" fill=\"none\"/>\n <polyline id=\"panel.grid.minor.y.polyline.18.1.5\" points=\"116.3,837.71 1066.56,837.71\" stroke-width=\"1.42\" stroke=\"rgb(242,242,242)\" stroke-dasharray=\"none\" stroke-linecap=\"butt\" stroke-opacity=\"1\" fill=\"none\"/>\n </g>\n <g id=\"panel.grid.minor.x.polyline.20.1\">\n <polyline id=\"panel.grid.minor.x.polyline.20.1.1\" points=\"207.48,101.3 207.48,921.6\" stroke-width=\"1.42\" stroke=\"rgb(242,242,242)\" stroke-dasharray=\"none\" stroke-linecap=\"butt\" stroke-opacity=\"1\" fill=\"none\"/>\n <polyline id=\"panel.grid.minor.x.polyline.20.1.2\" points=\"447.45,101.3 447.45,921.6\" stroke-width=\"1.42\" stroke=\"rgb(242,242,242)\" stroke-dasharray=\"none\" stroke-linecap=\"butt\" stroke-opacity=\"1\" fill=\"none\"/>\n <polyline id=\"panel.grid.minor.x.polyline.20.1.3\" points=\"687.42,101.3 687.42,921.6\" stroke-width=\"1.42\" stroke=\"rgb(242,242,242)\" stroke-dasharray=\"none\" stroke-linecap=\"butt\" stroke-opacity=\"1\" fill=\"none\"/>\n <polyline id=\"panel.grid.minor.x.polyline.20.1.4\" points=\"927.38,101.3 927.38,921.6\" stroke-width=\"1.42\" stroke=\"rgb(242,242,242)\" stroke-dasharray=\"none\" stroke-linecap=\"butt\" stroke-opacity=\"1\" fill=\"none\"/>\n </g>\n <g id=\"panel.grid.major.y.polyline.22.1\">\n <polyline id=\"panel.grid.major.y.polyline.22.1.1\" points=\"116.3,138.58 1066.56,138.58\" stroke-width=\"2.83\" stroke=\"rgb(255,255,255)\" stroke-dasharray=\"none\" stroke-linecap=\"butt\" stroke-opacity=\"1\" fill=\"none\"/>\n <polyline id=\"panel.grid.major.y.polyline.22.1.2\" points=\"116.3,293.94 1066.56,293.94\" stroke-width=\"2.83\" stroke=\"rgb(255,255,255)\" stroke-dasharray=\"none\" stroke-linecap=\"butt\" stroke-opacity=\"1\" fill=\"none\"/>\n <polyline id=\"panel.grid.major.y.polyline.22.1.3\" points=\"116.3,449.3 1066.56,449.3\" stroke-width=\"2.83\" stroke=\"rgb(255,255,255)\" stroke-dasharray=\"none\" stroke-linecap=\"butt\" stroke-opacity=\"1\" fill=\"none\"/>\n <polyline id=\"panel.grid.major.y.polyline.22.1.4\" points=\"116.3,604.66 1066.56,604.66\" stroke-width=\"2.83\" stroke=\"rgb(255,255,255)\" stroke-dasharray=\"none\" stroke-linecap=\"butt\" stroke-opacity=\"1\" fill=\"none\"/>\n <polyline id=\"panel.grid.major.y.polyline.22.1.5\" points=\"116.3,760.03 1066.56,760.03\" stroke-width=\"2.83\" stroke=\"rgb(255,255,255)\" stroke-dasharray=\"none\" stroke-linecap=\"butt\" stroke-opacity=\"1\" fill=\"none\"/>\n <polyline id=\"panel.grid.major.y.polyline.22.1.6\" points=\"116.3,915.39 1066.56,915.39\" stroke-width=\"2.83\" stroke=\"rgb(255,255,255)\" stroke-dasharray=\"none\" stroke-linecap=\"butt\" stroke-opacity=\"1\" fill=\"none\"/>\n </g>\n <g id=\"panel.grid.major.x.polyline.24.1\">\n <polyline id=\"panel.grid.major.x.polyline.24.1.1\" points=\"327.47,101.3 327.47,921.6\" stroke-width=\"2.83\" stroke=\"rgb(255,255,255)\" stroke-dasharray=\"none\" stroke-linecap=\"butt\" stroke-opacity=\"1\" fill=\"none\"/>\n <polyline id=\"panel.grid.major.x.polyline.24.1.2\" points=\"567.43,101.3 567.43,921.6\" stroke-width=\"2.83\" stroke=\"rgb(255,255,255)\" stroke-dasharray=\"none\" stroke-linecap=\"butt\" stroke-opacity=\"1\" fill=\"none\"/>\n <polyline id=\"panel.grid.major.x.polyline.24.1.3\" points=\"807.4,101.3 807.4,921.6\" stroke-width=\"2.83\" stroke=\"rgb(255,255,255)\" stroke-dasharray=\"none\" stroke-linecap=\"butt\" stroke-opacity=\"1\" fill=\"none\"/>\n <polyline id=\"panel.grid.major.x.polyline.24.1.4\" points=\"1047.37,101.3 1047.37,921.6\" stroke-width=\"2.83\" stroke=\"rgb(255,255,255)\" stroke-dasharray=\"none\" stroke-linecap=\"butt\" stroke-opacity=\"1\" fill=\"none\"/>\n </g>\n </g>\n <g id=\"geom_point.points.12.1\">\n <use id=\"geom_point.points.12.1.1\" xlink:href=\"#gridSVG.pch16\" x=\"351.46\" y=\"604.66\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(248,118,109)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.2\" xlink:href=\"#gridSVG.pch16\" x=\"303.47\" y=\"449.3\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(248,118,109)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.3\" xlink:href=\"#gridSVG.pch16\" x=\"255.48\" y=\"511.45\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(248,118,109)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.4\" xlink:href=\"#gridSVG.pch16\" x=\"231.48\" y=\"480.38\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(248,118,109)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.5\" xlink:href=\"#gridSVG.pch16\" x=\"327.47\" y=\"635.74\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(248,118,109)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.6\" xlink:href=\"#gridSVG.pch16\" x=\"423.45\" y=\"728.95\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(248,118,109)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.7\" xlink:href=\"#gridSVG.pch16\" x=\"231.48\" y=\"573.59\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(248,118,109)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.8\" xlink:href=\"#gridSVG.pch16\" x=\"327.47\" y=\"573.59\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(248,118,109)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.9\" xlink:href=\"#gridSVG.pch16\" x=\"183.49\" y=\"418.23\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(248,118,109)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.10\" xlink:href=\"#gridSVG.pch16\" x=\"303.47\" y=\"480.38\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(248,118,109)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.11\" xlink:href=\"#gridSVG.pch16\" x=\"423.45\" y=\"666.81\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(248,118,109)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.12\" xlink:href=\"#gridSVG.pch16\" x=\"279.47\" y=\"573.59\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(248,118,109)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.13\" xlink:href=\"#gridSVG.pch16\" x=\"279.47\" y=\"449.3\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(248,118,109)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.14\" xlink:href=\"#gridSVG.pch16\" x=\"159.49\" y=\"449.3\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(248,118,109)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.15\" xlink:href=\"#gridSVG.pch16\" x=\"519.44\" y=\"760.03\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(248,118,109)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.16\" xlink:href=\"#gridSVG.pch16\" x=\"495.44\" y=\"884.31\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(248,118,109)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.17\" xlink:href=\"#gridSVG.pch16\" x=\"423.45\" y=\"728.95\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(248,118,109)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.18\" xlink:href=\"#gridSVG.pch16\" x=\"351.46\" y=\"604.66\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(248,118,109)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.19\" xlink:href=\"#gridSVG.pch16\" x=\"495.44\" y=\"697.88\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(248,118,109)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.20\" xlink:href=\"#gridSVG.pch16\" x=\"351.46\" y=\"697.88\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(248,118,109)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.21\" xlink:href=\"#gridSVG.pch16\" x=\"423.45\" y=\"573.59\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(248,118,109)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.22\" xlink:href=\"#gridSVG.pch16\" x=\"351.46\" y=\"666.81\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(248,118,109)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.23\" xlink:href=\"#gridSVG.pch16\" x=\"231.48\" y=\"635.74\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(248,118,109)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.24\" xlink:href=\"#gridSVG.pch16\" x=\"351.46\" y=\"542.52\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(248,118,109)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.25\" xlink:href=\"#gridSVG.pch16\" x=\"279.47\" y=\"573.59\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(248,118,109)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.26\" xlink:href=\"#gridSVG.pch16\" x=\"327.47\" y=\"449.3\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(248,118,109)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.27\" xlink:href=\"#gridSVG.pch16\" x=\"327.47\" y=\"573.59\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(248,118,109)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.28\" xlink:href=\"#gridSVG.pch16\" x=\"375.46\" y=\"604.66\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(248,118,109)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.29\" xlink:href=\"#gridSVG.pch16\" x=\"375.46\" y=\"573.59\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(248,118,109)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.30\" xlink:href=\"#gridSVG.pch16\" x=\"255.48\" y=\"511.45\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(248,118,109)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.31\" xlink:href=\"#gridSVG.pch16\" x=\"279.47\" y=\"480.38\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(248,118,109)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.32\" xlink:href=\"#gridSVG.pch16\" x=\"423.45\" y=\"573.59\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(248,118,109)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.33\" xlink:href=\"#gridSVG.pch16\" x=\"375.46\" y=\"791.1\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(248,118,109)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.34\" xlink:href=\"#gridSVG.pch16\" x=\"447.45\" y=\"822.17\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(248,118,109)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.35\" xlink:href=\"#gridSVG.pch16\" x=\"303.47\" y=\"480.38\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(248,118,109)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.36\" xlink:href=\"#gridSVG.pch16\" x=\"327.47\" y=\"511.45\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(248,118,109)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.37\" xlink:href=\"#gridSVG.pch16\" x=\"447.45\" y=\"604.66\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(248,118,109)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.38\" xlink:href=\"#gridSVG.pch16\" x=\"303.47\" y=\"635.74\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(248,118,109)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.39\" xlink:href=\"#gridSVG.pch16\" x=\"183.49\" y=\"449.3\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(248,118,109)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.40\" xlink:href=\"#gridSVG.pch16\" x=\"351.46\" y=\"573.59\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(248,118,109)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.41\" xlink:href=\"#gridSVG.pch16\" x=\"327.47\" y=\"604.66\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(248,118,109)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.42\" xlink:href=\"#gridSVG.pch16\" x=\"207.48\" y=\"231.8\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(248,118,109)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.43\" xlink:href=\"#gridSVG.pch16\" x=\"183.49\" y=\"511.45\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(248,118,109)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.44\" xlink:href=\"#gridSVG.pch16\" x=\"327.47\" y=\"604.66\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(248,118,109)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.45\" xlink:href=\"#gridSVG.pch16\" x=\"351.46\" y=\"697.88\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(248,118,109)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.46\" xlink:href=\"#gridSVG.pch16\" x=\"279.47\" y=\"449.3\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(248,118,109)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.47\" xlink:href=\"#gridSVG.pch16\" x=\"351.46\" y=\"697.88\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(248,118,109)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.48\" xlink:href=\"#gridSVG.pch16\" x=\"231.48\" y=\"511.45\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(248,118,109)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.49\" xlink:href=\"#gridSVG.pch16\" x=\"399.46\" y=\"666.81\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(248,118,109)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.50\" xlink:href=\"#gridSVG.pch16\" x=\"327.47\" y=\"542.52\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(248,118,109)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.51\" xlink:href=\"#gridSVG.pch16\" x=\"807.4\" y=\"511.45\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(0,186,56)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.52\" xlink:href=\"#gridSVG.pch16\" x=\"663.42\" y=\"511.45\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(0,186,56)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.53\" xlink:href=\"#gridSVG.pch16\" x=\"783.4\" y=\"480.38\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(0,186,56)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.54\" xlink:href=\"#gridSVG.pch16\" x=\"447.45\" y=\"231.8\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(0,186,56)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.55\" xlink:href=\"#gridSVG.pch16\" x=\"687.42\" y=\"387.16\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(0,186,56)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.56\" xlink:href=\"#gridSVG.pch16\" x=\"495.44\" y=\"387.16\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(0,186,56)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.57\" xlink:href=\"#gridSVG.pch16\" x=\"639.42\" y=\"542.52\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(0,186,56)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.58\" xlink:href=\"#gridSVG.pch16\" x=\"303.47\" y=\"262.87\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(0,186,56)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.59\" xlink:href=\"#gridSVG.pch16\" x=\"711.41\" y=\"418.23\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(0,186,56)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.60\" xlink:href=\"#gridSVG.pch16\" x=\"375.46\" y=\"356.09\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(0,186,56)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.61\" xlink:href=\"#gridSVG.pch16\" x=\"327.47\" y=\"138.58\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(0,186,56)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.62\" xlink:href=\"#gridSVG.pch16\" x=\"543.44\" y=\"449.3\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(0,186,56)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.63\" xlink:href=\"#gridSVG.pch16\" x=\"567.43\" y=\"200.73\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(0,186,56)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.64\" xlink:href=\"#gridSVG.pch16\" x=\"591.43\" y=\"418.23\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(0,186,56)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.65\" xlink:href=\"#gridSVG.pch16\" x=\"471.45\" y=\"418.23\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(0,186,56)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.66\" xlink:href=\"#gridSVG.pch16\" x=\"735.41\" y=\"480.38\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(0,186,56)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.67\" xlink:href=\"#gridSVG.pch16\" x=\"471.45\" y=\"449.3\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(0,186,56)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.68\" xlink:href=\"#gridSVG.pch16\" x=\"519.44\" y=\"356.09\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(0,186,56)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.69\" xlink:href=\"#gridSVG.pch16\" x=\"615.43\" y=\"200.73\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(0,186,56)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.70\" xlink:href=\"#gridSVG.pch16\" x=\"471.45\" y=\"293.94\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(0,186,56)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.71\" xlink:href=\"#gridSVG.pch16\" x=\"543.44\" y=\"511.45\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(0,186,56)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.72\" xlink:href=\"#gridSVG.pch16\" x=\"591.43\" y=\"387.16\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(0,186,56)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.73\" xlink:href=\"#gridSVG.pch16\" x=\"639.42\" y=\"293.94\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(0,186,56)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.74\" xlink:href=\"#gridSVG.pch16\" x=\"591.43\" y=\"387.16\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(0,186,56)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.75\" xlink:href=\"#gridSVG.pch16\" x=\"663.42\" y=\"418.23\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(0,186,56)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.76\" xlink:href=\"#gridSVG.pch16\" x=\"711.41\" y=\"449.3\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(0,186,56)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.77\" xlink:href=\"#gridSVG.pch16\" x=\"759.41\" y=\"387.16\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(0,186,56)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.78\" xlink:href=\"#gridSVG.pch16\" x=\"735.41\" y=\"449.3\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(0,186,56)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.79\" xlink:href=\"#gridSVG.pch16\" x=\"567.43\" y=\"418.23\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(0,186,56)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.80\" xlink:href=\"#gridSVG.pch16\" x=\"495.44\" y=\"325.02\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(0,186,56)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.81\" xlink:href=\"#gridSVG.pch16\" x=\"447.45\" y=\"262.87\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(0,186,56)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.82\" xlink:href=\"#gridSVG.pch16\" x=\"447.45\" y=\"262.87\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(0,186,56)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.83\" xlink:href=\"#gridSVG.pch16\" x=\"519.44\" y=\"356.09\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(0,186,56)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.84\" xlink:href=\"#gridSVG.pch16\" x=\"567.43\" y=\"356.09\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(0,186,56)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.85\" xlink:href=\"#gridSVG.pch16\" x=\"423.45\" y=\"449.3\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(0,186,56)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.86\" xlink:href=\"#gridSVG.pch16\" x=\"567.43\" y=\"573.59\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(0,186,56)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.87\" xlink:href=\"#gridSVG.pch16\" x=\"735.41\" y=\"480.38\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(0,186,56)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.88\" xlink:href=\"#gridSVG.pch16\" x=\"639.42\" y=\"231.8\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(0,186,56)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.89\" xlink:href=\"#gridSVG.pch16\" x=\"471.45\" y=\"449.3\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(0,186,56)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.90\" xlink:href=\"#gridSVG.pch16\" x=\"447.45\" y=\"293.94\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(0,186,56)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.91\" xlink:href=\"#gridSVG.pch16\" x=\"447.45\" y=\"325.02\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(0,186,56)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.92\" xlink:href=\"#gridSVG.pch16\" x=\"591.43\" y=\"449.3\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(0,186,56)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.93\" xlink:href=\"#gridSVG.pch16\" x=\"519.44\" y=\"325.02\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(0,186,56)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.94\" xlink:href=\"#gridSVG.pch16\" x=\"327.47\" y=\"231.8\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(0,186,56)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.95\" xlink:href=\"#gridSVG.pch16\" x=\"471.45\" y=\"356.09\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(0,186,56)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.96\" xlink:href=\"#gridSVG.pch16\" x=\"495.44\" y=\"449.3\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(0,186,56)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.97\" xlink:href=\"#gridSVG.pch16\" x=\"495.44\" y=\"418.23\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(0,186,56)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.98\" xlink:href=\"#gridSVG.pch16\" x=\"615.43\" y=\"418.23\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(0,186,56)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.99\" xlink:href=\"#gridSVG.pch16\" x=\"351.46\" y=\"293.94\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(0,186,56)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.100\" xlink:href=\"#gridSVG.pch16\" x=\"495.44\" y=\"387.16\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(0,186,56)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.101\" xlink:href=\"#gridSVG.pch16\" x=\"639.42\" y=\"542.52\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(97,156,255)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.102\" xlink:href=\"#gridSVG.pch16\" x=\"519.44\" y=\"356.09\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(97,156,255)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.103\" xlink:href=\"#gridSVG.pch16\" x=\"831.4\" y=\"449.3\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(97,156,255)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.104\" xlink:href=\"#gridSVG.pch16\" x=\"639.42\" y=\"418.23\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(97,156,255)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.105\" xlink:href=\"#gridSVG.pch16\" x=\"687.42\" y=\"449.3\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(97,156,255)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.106\" xlink:href=\"#gridSVG.pch16\" x=\"951.38\" y=\"449.3\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(97,156,255)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.107\" xlink:href=\"#gridSVG.pch16\" x=\"303.47\" y=\"293.94\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(97,156,255)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.108\" xlink:href=\"#gridSVG.pch16\" x=\"879.39\" y=\"418.23\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(97,156,255)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.109\" xlink:href=\"#gridSVG.pch16\" x=\"735.41\" y=\"293.94\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(97,156,255)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.110\" xlink:href=\"#gridSVG.pch16\" x=\"855.39\" y=\"635.74\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(97,156,255)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.111\" xlink:href=\"#gridSVG.pch16\" x=\"687.42\" y=\"511.45\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(97,156,255)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.112\" xlink:href=\"#gridSVG.pch16\" x=\"663.42\" y=\"356.09\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(97,156,255)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.113\" xlink:href=\"#gridSVG.pch16\" x=\"759.41\" y=\"449.3\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(97,156,255)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.114\" xlink:href=\"#gridSVG.pch16\" x=\"495.44\" y=\"293.94\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(97,156,255)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.115\" xlink:href=\"#gridSVG.pch16\" x=\"519.44\" y=\"387.16\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(97,156,255)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.116\" xlink:href=\"#gridSVG.pch16\" x=\"663.42\" y=\"511.45\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(97,156,255)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.117\" xlink:href=\"#gridSVG.pch16\" x=\"687.42\" y=\"449.3\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(97,156,255)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.118\" xlink:href=\"#gridSVG.pch16\" x=\"975.38\" y=\"697.88\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(97,156,255)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.119\" xlink:href=\"#gridSVG.pch16\" x=\"975.38\" y=\"325.02\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(97,156,255)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.120\" xlink:href=\"#gridSVG.pch16\" x=\"567.43\" y=\"200.73\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(97,156,255)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.121\" xlink:href=\"#gridSVG.pch16\" x=\"783.4\" y=\"511.45\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(97,156,255)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.122\" xlink:href=\"#gridSVG.pch16\" x=\"471.45\" y=\"387.16\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(97,156,255)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.123\" xlink:href=\"#gridSVG.pch16\" x=\"975.38\" y=\"387.16\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(97,156,255)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.124\" xlink:href=\"#gridSVG.pch16\" x=\"639.42\" y=\"356.09\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(97,156,255)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.125\" xlink:href=\"#gridSVG.pch16\" x=\"735.41\" y=\"542.52\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(97,156,255)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.126\" xlink:href=\"#gridSVG.pch16\" x=\"855.39\" y=\"511.45\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(97,156,255)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.127\" xlink:href=\"#gridSVG.pch16\" x=\"615.43\" y=\"387.16\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(97,156,255)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.128\" xlink:href=\"#gridSVG.pch16\" x=\"591.43\" y=\"449.3\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(97,156,255)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.129\" xlink:href=\"#gridSVG.pch16\" x=\"663.42\" y=\"387.16\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(97,156,255)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.130\" xlink:href=\"#gridSVG.pch16\" x=\"855.39\" y=\"449.3\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(97,156,255)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.131\" xlink:href=\"#gridSVG.pch16\" x=\"903.39\" y=\"387.16\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(97,156,255)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.132\" xlink:href=\"#gridSVG.pch16\" x=\"1023.37\" y=\"697.88\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(97,156,255)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.133\" xlink:href=\"#gridSVG.pch16\" x=\"663.42\" y=\"387.16\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(97,156,255)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.134\" xlink:href=\"#gridSVG.pch16\" x=\"639.42\" y=\"387.16\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(97,156,255)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.135\" xlink:href=\"#gridSVG.pch16\" x=\"591.43\" y=\"325.02\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(97,156,255)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.136\" xlink:href=\"#gridSVG.pch16\" x=\"975.38\" y=\"449.3\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(97,156,255)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.137\" xlink:href=\"#gridSVG.pch16\" x=\"639.42\" y=\"573.59\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(97,156,255)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.138\" xlink:href=\"#gridSVG.pch16\" x=\"663.42\" y=\"480.38\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(97,156,255)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.139\" xlink:href=\"#gridSVG.pch16\" x=\"567.43\" y=\"449.3\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(97,156,255)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.140\" xlink:href=\"#gridSVG.pch16\" x=\"783.4\" y=\"480.38\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(97,156,255)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.141\" xlink:href=\"#gridSVG.pch16\" x=\"735.41\" y=\"480.38\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(97,156,255)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.142\" xlink:href=\"#gridSVG.pch16\" x=\"783.4\" y=\"480.38\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(97,156,255)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.143\" xlink:href=\"#gridSVG.pch16\" x=\"519.44\" y=\"356.09\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(97,156,255)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.144\" xlink:href=\"#gridSVG.pch16\" x=\"759.41\" y=\"511.45\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(97,156,255)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.145\" xlink:href=\"#gridSVG.pch16\" x=\"735.41\" y=\"542.52\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(97,156,255)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.146\" xlink:href=\"#gridSVG.pch16\" x=\"735.41\" y=\"449.3\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(97,156,255)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.147\" xlink:href=\"#gridSVG.pch16\" x=\"639.42\" y=\"293.94\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(97,156,255)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.148\" xlink:href=\"#gridSVG.pch16\" x=\"687.42\" y=\"449.3\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(97,156,255)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.149\" xlink:href=\"#gridSVG.pch16\" x=\"615.43\" y=\"573.59\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(97,156,255)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n <use id=\"geom_point.points.12.1.150\" xlink:href=\"#gridSVG.pch16\" x=\"543.44\" y=\"449.3\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(97,156,255)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n </g>\n </g>\n </g>\n <g id=\"layout::axis-l.3-3-3-3.1\">\n <g id=\"layout::axis-l.3-3-3-3::GRID.VP.2.1\">\n <g id=\"axis-l.3-3-3-3.1\">\n <g id=\"layout::axis-l.3-3-3-3::GRID.VP.2::axis.1\">\n <g id=\"GRID.gTableParent.71.1\">\n <g id=\"layout::axis-l.3-3-3-3::GRID.VP.2::axis::axis.1-1-1-1.1\">\n <g id=\"axis.1-1-1-1.1\">\n <g id=\"axis.1-1-1-1.1.1\" transform=\"translate(97.4, 138.58)\" stroke-width=\"0.1\">\n <g id=\"axis.1-1-1-1.1.1.scale\" transform=\"scale(1, -1)\">\n <text x=\"0\" y=\"0\" id=\"axis.1-1-1-1.1.1.text\" text-anchor=\"end\" font-size=\"25.6\" stroke=\"rgb(127,127,127)\" font-family=\"Helvetica, Arial, FreeSans, Liberation Sans, Nimbus Sans L, sans-serif\" fill=\"rgb(127,127,127)\" stroke-opacity=\"1\" fill-opacity=\"1\" font-weight=\"normal\" font-style=\"normal\">\n <tspan id=\"axis.1-1-1-1.1.1.tspan.1\" dy=\"10\" x=\"0\">2.0</tspan>\n </text>\n </g>\n </g>\n <g id=\"axis.1-1-1-1.1.2\" transform=\"translate(97.4, 293.94)\" stroke-width=\"0.1\">\n <g id=\"axis.1-1-1-1.1.2.scale\" transform=\"scale(1, -1)\">\n <text x=\"0\" y=\"0\" id=\"axis.1-1-1-1.1.2.text\" text-anchor=\"end\" font-size=\"25.6\" stroke=\"rgb(127,127,127)\" font-family=\"Helvetica, Arial, FreeSans, Liberation Sans, Nimbus Sans L, sans-serif\" fill=\"rgb(127,127,127)\" stroke-opacity=\"1\" fill-opacity=\"1\" font-weight=\"normal\" font-style=\"normal\">\n <tspan id=\"axis.1-1-1-1.1.2.tspan.1\" dy=\"10\" x=\"0\">2.5</tspan>\n </text>\n </g>\n </g>\n <g id=\"axis.1-1-1-1.1.3\" transform=\"translate(97.4, 449.3)\" stroke-width=\"0.1\">\n <g id=\"axis.1-1-1-1.1.3.scale\" transform=\"scale(1, -1)\">\n <text x=\"0\" y=\"0\" id=\"axis.1-1-1-1.1.3.text\" text-anchor=\"end\" font-size=\"25.6\" stroke=\"rgb(127,127,127)\" font-family=\"Helvetica, Arial, FreeSans, Liberation Sans, Nimbus Sans L, sans-serif\" fill=\"rgb(127,127,127)\" stroke-opacity=\"1\" fill-opacity=\"1\" font-weight=\"normal\" font-style=\"normal\">\n <tspan id=\"axis.1-1-1-1.1.3.tspan.1\" dy=\"10\" x=\"0\">3.0</tspan>\n </text>\n </g>\n </g>\n <g id=\"axis.1-1-1-1.1.4\" transform=\"translate(97.4, 604.66)\" stroke-width=\"0.1\">\n <g id=\"axis.1-1-1-1.1.4.scale\" transform=\"scale(1, -1)\">\n <text x=\"0\" y=\"0\" id=\"axis.1-1-1-1.1.4.text\" text-anchor=\"end\" font-size=\"25.6\" stroke=\"rgb(127,127,127)\" font-family=\"Helvetica, Arial, FreeSans, Liberation Sans, Nimbus Sans L, sans-serif\" fill=\"rgb(127,127,127)\" stroke-opacity=\"1\" fill-opacity=\"1\" font-weight=\"normal\" font-style=\"normal\">\n <tspan id=\"axis.1-1-1-1.1.4.tspan.1\" dy=\"10\" x=\"0\">3.5</tspan>\n </text>\n </g>\n </g>\n <g id=\"axis.1-1-1-1.1.5\" transform=\"translate(97.4, 760.03)\" stroke-width=\"0.1\">\n <g id=\"axis.1-1-1-1.1.5.scale\" transform=\"scale(1, -1)\">\n <text x=\"0\" y=\"0\" id=\"axis.1-1-1-1.1.5.text\" text-anchor=\"end\" font-size=\"25.6\" stroke=\"rgb(127,127,127)\" font-family=\"Helvetica, Arial, FreeSans, Liberation Sans, Nimbus Sans L, sans-serif\" fill=\"rgb(127,127,127)\" stroke-opacity=\"1\" fill-opacity=\"1\" font-weight=\"normal\" font-style=\"normal\">\n <tspan id=\"axis.1-1-1-1.1.5.tspan.1\" dy=\"10\" x=\"0\">4.0</tspan>\n </text>\n </g>\n </g>\n <g id=\"axis.1-1-1-1.1.6\" transform=\"translate(97.4, 915.39)\" stroke-width=\"0.1\">\n <g id=\"axis.1-1-1-1.1.6.scale\" transform=\"scale(1, -1)\">\n <text x=\"0\" y=\"0\" id=\"axis.1-1-1-1.1.6.text\" text-anchor=\"end\" font-size=\"25.6\" stroke=\"rgb(127,127,127)\" font-family=\"Helvetica, Arial, FreeSans, Liberation Sans, Nimbus Sans L, sans-serif\" fill=\"rgb(127,127,127)\" stroke-opacity=\"1\" fill-opacity=\"1\" font-weight=\"normal\" font-style=\"normal\">\n <tspan id=\"axis.1-1-1-1.1.6.tspan.1\" dy=\"10\" x=\"0\">4.5</tspan>\n </text>\n </g>\n </g>\n </g>\n </g>\n <g id=\"layout::axis-l.3-3-3-3::GRID.VP.2::axis::axis.1-2-1-2.1\">\n <g id=\"axis.1-2-1-2.1\">\n <polyline id=\"axis.1-2-1-2.1.1\" points=\"104.96,138.58 116.3,138.58\" stroke-width=\"2.83\" stroke=\"rgb(127,127,127)\" stroke-dasharray=\"none\" stroke-linecap=\"butt\" stroke-opacity=\"1\" fill=\"none\"/>\n <polyline id=\"axis.1-2-1-2.1.2\" points=\"104.96,293.94 116.3,293.94\" stroke-width=\"2.83\" stroke=\"rgb(127,127,127)\" stroke-dasharray=\"none\" stroke-linecap=\"butt\" stroke-opacity=\"1\" fill=\"none\"/>\n <polyline id=\"axis.1-2-1-2.1.3\" points=\"104.96,449.3 116.3,449.3\" stroke-width=\"2.83\" stroke=\"rgb(127,127,127)\" stroke-dasharray=\"none\" stroke-linecap=\"butt\" stroke-opacity=\"1\" fill=\"none\"/>\n <polyline id=\"axis.1-2-1-2.1.4\" points=\"104.96,604.66 116.3,604.66\" stroke-width=\"2.83\" stroke=\"rgb(127,127,127)\" stroke-dasharray=\"none\" stroke-linecap=\"butt\" stroke-opacity=\"1\" fill=\"none\"/>\n <polyline id=\"axis.1-2-1-2.1.5\" points=\"104.96,760.03 116.3,760.03\" stroke-width=\"2.83\" stroke=\"rgb(127,127,127)\" stroke-dasharray=\"none\" stroke-linecap=\"butt\" stroke-opacity=\"1\" fill=\"none\"/>\n <polyline id=\"axis.1-2-1-2.1.6\" points=\"104.96,915.39 116.3,915.39\" stroke-width=\"2.83\" stroke=\"rgb(127,127,127)\" stroke-dasharray=\"none\" stroke-linecap=\"butt\" stroke-opacity=\"1\" fill=\"none\"/>\n </g>\n </g>\n </g>\n </g>\n </g>\n </g>\n </g>\n <g id=\"layout::axis-b.4-4-4-4.1\">\n <g id=\"layout::axis-b.4-4-4-4::GRID.VP.1.1\">\n <g id=\"axis-b.4-4-4-4.1\">\n <g id=\"layout::axis-b.4-4-4-4::GRID.VP.1::axis.1\">\n <g id=\"GRID.gTableParent.79.1\">\n <g id=\"layout::axis-b.4-4-4-4::GRID.VP.1::axis::axis.1-1-1-1.1\">\n <g id=\"axis.1-1-1-1.2\">\n <polyline id=\"axis.1-1-1-1.2.1\" points=\"327.47,89.96 327.47,101.3\" stroke-width=\"2.83\" stroke=\"rgb(127,127,127)\" stroke-dasharray=\"none\" stroke-linecap=\"butt\" stroke-opacity=\"1\" fill=\"none\"/>\n <polyline id=\"axis.1-1-1-1.2.2\" points=\"567.43,89.96 567.43,101.3\" stroke-width=\"2.83\" stroke=\"rgb(127,127,127)\" stroke-dasharray=\"none\" stroke-linecap=\"butt\" stroke-opacity=\"1\" fill=\"none\"/>\n <polyline id=\"axis.1-1-1-1.2.3\" points=\"807.4,89.96 807.4,101.3\" stroke-width=\"2.83\" stroke=\"rgb(127,127,127)\" stroke-dasharray=\"none\" stroke-linecap=\"butt\" stroke-opacity=\"1\" fill=\"none\"/>\n <polyline id=\"axis.1-1-1-1.2.4\" points=\"1047.37,89.96 1047.37,101.3\" stroke-width=\"2.83\" stroke=\"rgb(127,127,127)\" stroke-dasharray=\"none\" stroke-linecap=\"butt\" stroke-opacity=\"1\" fill=\"none\"/>\n </g>\n </g>\n <g id=\"layout::axis-b.4-4-4-4::GRID.VP.1::axis::axis.2-1-2-1.1\">\n <g id=\"axis.2-1-2-1.1\">\n <g id=\"axis.2-1-2-1.1.1\" transform=\"translate(327.47, 82.4)\" stroke-width=\"0.1\">\n <g id=\"axis.2-1-2-1.1.1.scale\" transform=\"scale(1, -1)\">\n <text x=\"0\" y=\"0\" id=\"axis.2-1-2-1.1.1.text\" text-anchor=\"middle\" font-size=\"25.6\" stroke=\"rgb(127,127,127)\" font-family=\"Helvetica, Arial, FreeSans, Liberation Sans, Nimbus Sans L, sans-serif\" fill=\"rgb(127,127,127)\" stroke-opacity=\"1\" fill-opacity=\"1\" font-weight=\"normal\" font-style=\"normal\">\n <tspan id=\"axis.2-1-2-1.1.1.tspan.1\" dy=\"20\" x=\"0\">5</tspan>\n </text>\n </g>\n </g>\n <g id=\"axis.2-1-2-1.1.2\" transform=\"translate(567.43, 82.4)\" stroke-width=\"0.1\">\n <g id=\"axis.2-1-2-1.1.2.scale\" transform=\"scale(1, -1)\">\n <text x=\"0\" y=\"0\" id=\"axis.2-1-2-1.1.2.text\" text-anchor=\"middle\" font-size=\"25.6\" stroke=\"rgb(127,127,127)\" font-family=\"Helvetica, Arial, FreeSans, Liberation Sans, Nimbus Sans L, sans-serif\" fill=\"rgb(127,127,127)\" stroke-opacity=\"1\" fill-opacity=\"1\" font-weight=\"normal\" font-style=\"normal\">\n <tspan id=\"axis.2-1-2-1.1.2.tspan.1\" dy=\"20\" x=\"0\">6</tspan>\n </text>\n </g>\n </g>\n <g id=\"axis.2-1-2-1.1.3\" transform=\"translate(807.4, 82.4)\" stroke-width=\"0.1\">\n <g id=\"axis.2-1-2-1.1.3.scale\" transform=\"scale(1, -1)\">\n <text x=\"0\" y=\"0\" id=\"axis.2-1-2-1.1.3.text\" text-anchor=\"middle\" font-size=\"25.6\" stroke=\"rgb(127,127,127)\" font-family=\"Helvetica, Arial, FreeSans, Liberation Sans, Nimbus Sans L, sans-serif\" fill=\"rgb(127,127,127)\" stroke-opacity=\"1\" fill-opacity=\"1\" font-weight=\"normal\" font-style=\"normal\">\n <tspan id=\"axis.2-1-2-1.1.3.tspan.1\" dy=\"20\" x=\"0\">7</tspan>\n </text>\n </g>\n </g>\n <g id=\"axis.2-1-2-1.1.4\" transform=\"translate(1047.37, 82.4)\" stroke-width=\"0.1\">\n <g id=\"axis.2-1-2-1.1.4.scale\" transform=\"scale(1, -1)\">\n <text x=\"0\" y=\"0\" id=\"axis.2-1-2-1.1.4.text\" text-anchor=\"middle\" font-size=\"25.6\" stroke=\"rgb(127,127,127)\" font-family=\"Helvetica, Arial, FreeSans, Liberation Sans, Nimbus Sans L, sans-serif\" fill=\"rgb(127,127,127)\" stroke-opacity=\"1\" fill-opacity=\"1\" font-weight=\"normal\" font-style=\"normal\">\n <tspan id=\"axis.2-1-2-1.1.4.tspan.1\" dy=\"20\" x=\"0\">8</tspan>\n </text>\n </g>\n </g>\n </g>\n </g>\n </g>\n </g>\n </g>\n </g>\n </g>\n <g id=\"layout::xlab.5-4-5-4.1\">\n <g id=\"xlab.5-4-5-4.1\">\n <g id=\"xlab.5-4-5-4.1.1\" transform=\"translate(591.43, 40.8)\" stroke-width=\"0.1\">\n <g id=\"xlab.5-4-5-4.1.1.scale\" transform=\"scale(1, -1)\">\n <text x=\"0\" y=\"0\" id=\"xlab.5-4-5-4.1.1.text\" text-anchor=\"middle\" font-size=\"32\" stroke=\"rgb(0,0,0)\" font-family=\"Helvetica, Arial, FreeSans, Liberation Sans, Nimbus Sans L, sans-serif\" fill=\"rgb(0,0,0)\" stroke-opacity=\"1\" fill-opacity=\"1\" font-weight=\"normal\" font-style=\"normal\">\n <tspan id=\"xlab.5-4-5-4.1.1.tspan.1\" dy=\"12\" x=\"0\">Sepal.Length</tspan>\n </text>\n </g>\n </g>\n </g>\n </g>\n <g id=\"layout::ylab.3-2-3-2.1\">\n <g id=\"ylab.3-2-3-2.1\">\n <g id=\"ylab.3-2-3-2.1.1\" transform=\"translate(40.8, 511.45)\" stroke-width=\"0.1\">\n <g id=\"ylab.3-2-3-2.1.1.scale\" transform=\"scale(1, -1)\">\n <text x=\"0\" y=\"0\" id=\"ylab.3-2-3-2.1.1.text\" transform=\"rotate(-90)\" text-anchor=\"middle\" font-size=\"32\" stroke=\"rgb(0,0,0)\" font-family=\"Helvetica, Arial, FreeSans, Liberation Sans, Nimbus Sans L, sans-serif\" fill=\"rgb(0,0,0)\" stroke-opacity=\"1\" fill-opacity=\"1\" font-weight=\"normal\" font-style=\"normal\">\n <tspan id=\"ylab.3-2-3-2.1.1.tspan.1\" dy=\"12\" x=\"0\">Sepal.Width</tspan>\n </text>\n </g>\n </g>\n </g>\n </g>\n <g id=\"layout::guide-box.3-5-3-5.1\">\n <g id=\"layout::guide-box.3-5-3-5::guide-box.3-5-3-5.1\">\n <g id=\"layout::guide-box.3-5-3-5::guide-box.3-5-3-5::guide-box.3-5-3-5.1\">\n <g id=\"GRID.gTableChild.89.1\">\n <g id=\"layout::guide-box.3-5-3-5::guide-box.3-5-3-5::guide-box.3-5-3-5::guides.2-2-2-2.1\">\n <g id=\"layout::guide-box.3-5-3-5::guide-box.3-5-3-5::guide-box.3-5-3-5::guides.2-2-2-2::guides.2-2-2-2.1\">\n <g id=\"layout::guide-box.3-5-3-5::guide-box.3-5-3-5::guide-box.3-5-3-5::guides.2-2-2-2::guides.2-2-2-2::guides.2-2-2-2.1\">\n <g id=\"GRID.gTableChild.90.1\">\n <g id=\"layout::guide-box.3-5-3-5::guide-box.3-5-3-5::guide-box.3-5-3-5::guides.2-2-2-2::guides.2-2-2-2::guides.2-2-2-2::background.1-6-7-1.1\">\n <g id=\"background.1-6-7-1.1\">\n <rect id=\"background.1-6-7-1.1.1\" x=\"1093.32\" y=\"415.23\" width=\"185.52\" height=\"192.44\" stroke-width=\"2.83\" stroke=\"none\" fill=\"rgb(255,255,255)\" stroke-dasharray=\"none\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n </g>\n </g>\n <g id=\"layout::guide-box.3-5-3-5::guide-box.3-5-3-5::guide-box.3-5-3-5::guides.2-2-2-2::guides.2-2-2-2::guides.2-2-2-2::title.2-5-2-2.1\">\n <g id=\"title.2-5-2-2.1\">\n <g id=\"title.2-5-2-2.1.1\" transform=\"translate(1104.66, 586.33)\" stroke-width=\"0.1\">\n <g id=\"title.2-5-2-2.1.1.scale\" transform=\"scale(1, -1)\">\n <text x=\"0\" y=\"0\" id=\"title.2-5-2-2.1.1.text\" text-anchor=\"start\" font-size=\"25.6\" stroke=\"rgb(0,0,0)\" font-family=\"Helvetica, Arial, FreeSans, Liberation Sans, Nimbus Sans L, sans-serif\" fill=\"rgb(0,0,0)\" stroke-opacity=\"1\" fill-opacity=\"1\" font-weight=\"bold\" font-style=\"normal\">\n <tspan id=\"title.2-5-2-2.1.1.tspan.1\" dy=\"10\" x=\"0\">Species</tspan>\n </text>\n </g>\n </g>\n </g>\n </g>\n <g id=\"layout::guide-box.3-5-3-5::guide-box.3-5-3-5::guide-box.3-5-3-5::guides.2-2-2-2::guides.2-2-2-2::guides.2-2-2-2::key-3-1-bg.4-2-4-2.1\">\n <g id=\"key-3-1-bg.4-2-4-2.1\">\n <rect id=\"key-3-1-bg.4-2-4-2.1.1\" x=\"1104.66\" y=\"518.73\" width=\"46.08\" height=\"46.08\" stroke-width=\"2.83\" stroke=\"rgb(255,255,255)\" fill=\"rgb(242,242,242)\" stroke-dasharray=\"none\" stroke-opacity=\"1\" fill-opacity=\"1\"/>\n </g>\n </g>\n <g id=\"layout::guide-box.3-5-3-5::guide-box.3-5-3-5::guide-box.3-5-3-5::guides.2-2-2-2::guides.2-2-2-2::guides.2-2-2-2::key-3-1-1.4-2-4-2.1\">\n <g id=\"key-3-1-1.4-2-4-2.1\">\n <use id=\"key-3-1-1.4-2-4-2.1.1\" xlink:href=\"#gridSVG.pch16\" x=\"1127.7\" y=\"541.77\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(248,118,109)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n </g>\n </g>\n <g id=\"layout::guide-box.3-5-3-5::guide-box.3-5-3-5::guide-box.3-5-3-5::guides.2-2-2-2::guides.2-2-2-2::guides.2-2-2-2::key-4-1-bg.5-2-5-2.1\">\n <g id=\"key-4-1-bg.5-2-5-2.1\">\n <rect id=\"key-4-1-bg.5-2-5-2.1.1\" x=\"1104.66\" y=\"472.65\" width=\"46.08\" height=\"46.08\" stroke-width=\"2.83\" stroke=\"rgb(255,255,255)\" fill=\"rgb(242,242,242)\" stroke-dasharray=\"none\" stroke-opacity=\"1\" fill-opacity=\"1\"/>\n </g>\n </g>\n <g id=\"layout::guide-box.3-5-3-5::guide-box.3-5-3-5::guide-box.3-5-3-5::guides.2-2-2-2::guides.2-2-2-2::guides.2-2-2-2::key-4-1-1.5-2-5-2.1\">\n <g id=\"key-4-1-1.5-2-5-2.1\">\n <use id=\"key-4-1-1.5-2-5-2.1.1\" xlink:href=\"#gridSVG.pch16\" x=\"1127.7\" y=\"495.69\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(0,186,56)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n </g>\n </g>\n <g id=\"layout::guide-box.3-5-3-5::guide-box.3-5-3-5::guide-box.3-5-3-5::guides.2-2-2-2::guides.2-2-2-2::guides.2-2-2-2::key-5-1-bg.6-2-6-2.1\">\n <g id=\"key-5-1-bg.6-2-6-2.1\">\n <rect id=\"key-5-1-bg.6-2-6-2.1.1\" x=\"1104.66\" y=\"426.57\" width=\"46.08\" height=\"46.08\" stroke-width=\"2.83\" stroke=\"rgb(255,255,255)\" fill=\"rgb(242,242,242)\" stroke-dasharray=\"none\" stroke-opacity=\"1\" fill-opacity=\"1\"/>\n </g>\n </g>\n <g id=\"layout::guide-box.3-5-3-5::guide-box.3-5-3-5::guide-box.3-5-3-5::guides.2-2-2-2::guides.2-2-2-2::guides.2-2-2-2::key-5-1-1.6-2-6-2.1\">\n <g id=\"key-5-1-1.6-2-6-2.1\">\n <use id=\"key-5-1-1.6-2-6-2.1.1\" xlink:href=\"#gridSVG.pch16\" x=\"1127.7\" y=\"449.61\" width=\"15.12\" height=\"15.12\" transform=\"translate(-7.56,-7.56)\" stroke=\"none\" fill=\"rgb(97,156,255)\" font-size=\"15.12\" stroke-width=\"1.32\" stroke-opacity=\"0\" fill-opacity=\"1\"/>\n </g>\n </g>\n <g id=\"layout::guide-box.3-5-3-5::guide-box.3-5-3-5::guide-box.3-5-3-5::guides.2-2-2-2::guides.2-2-2-2::guides.2-2-2-2::label-3-3.4-4-4-4.1\">\n <g id=\"label-3-3.4-4-4-4.1\">\n <g id=\"label-3-3.4-4-4-4.1.1\" transform=\"translate(1156.5, 541.77)\" stroke-width=\"0.1\">\n <g id=\"label-3-3.4-4-4-4.1.1.scale\" transform=\"scale(1, -1)\">\n <text x=\"0\" y=\"0\" id=\"label-3-3.4-4-4-4.1.1.text\" text-anchor=\"start\" font-size=\"25.6\" stroke=\"rgb(0,0,0)\" font-family=\"Helvetica, Arial, FreeSans, Liberation Sans, Nimbus Sans L, sans-serif\" fill=\"rgb(0,0,0)\" stroke-opacity=\"1\" fill-opacity=\"1\" font-weight=\"normal\" font-style=\"normal\">\n <tspan id=\"label-3-3.4-4-4-4.1.1.tspan.1\" dy=\"10\" x=\"0\">setosa</tspan>\n </text>\n </g>\n </g>\n </g>\n </g>\n <g id=\"layout::guide-box.3-5-3-5::guide-box.3-5-3-5::guide-box.3-5-3-5::guides.2-2-2-2::guides.2-2-2-2::guides.2-2-2-2::label-4-3.5-4-5-4.1\">\n <g id=\"label-4-3.5-4-5-4.1\">\n <g id=\"label-4-3.5-4-5-4.1.1\" transform=\"translate(1156.5, 495.69)\" stroke-width=\"0.1\">\n <g id=\"label-4-3.5-4-5-4.1.1.scale\" transform=\"scale(1, -1)\">\n <text x=\"0\" y=\"0\" id=\"label-4-3.5-4-5-4.1.1.text\" text-anchor=\"start\" font-size=\"25.6\" stroke=\"rgb(0,0,0)\" font-family=\"Helvetica, Arial, FreeSans, Liberation Sans, Nimbus Sans L, sans-serif\" fill=\"rgb(0,0,0)\" stroke-opacity=\"1\" fill-opacity=\"1\" font-weight=\"normal\" font-style=\"normal\">\n <tspan id=\"label-4-3.5-4-5-4.1.1.tspan.1\" dy=\"10\" x=\"0\">versicolor</tspan>\n </text>\n </g>\n </g>\n </g>\n </g>\n <g id=\"layout::guide-box.3-5-3-5::guide-box.3-5-3-5::guide-box.3-5-3-5::guides.2-2-2-2::guides.2-2-2-2::guides.2-2-2-2::label-5-3.6-4-6-4.1\">\n <g id=\"label-5-3.6-4-6-4.1\">\n <g id=\"label-5-3.6-4-6-4.1.1\" transform=\"translate(1156.5, 449.61)\" stroke-width=\"0.1\">\n <g id=\"label-5-3.6-4-6-4.1.1.scale\" transform=\"scale(1, -1)\">\n <text x=\"0\" y=\"0\" id=\"label-5-3.6-4-6-4.1.1.text\" text-anchor=\"start\" font-size=\"25.6\" stroke=\"rgb(0,0,0)\" font-family=\"Helvetica, Arial, FreeSans, Liberation Sans, Nimbus Sans L, sans-serif\" fill=\"rgb(0,0,0)\" stroke-opacity=\"1\" fill-opacity=\"1\" font-weight=\"normal\" font-style=\"normal\">\n <tspan id=\"label-5-3.6-4-6-4.1.1.tspan.1\" dy=\"10\" x=\"0\">virginica</tspan>\n </text>\n </g>\n </g>\n </g>\n </g>\n </g>\n </g>\n </g>\n </g>\n </g>\n </g>\n </g>\n </g>\n <g id=\"layout::title.2-4-2-4.1\">\n <g id=\"title.2-4-2-4.1\">\n <g id=\"title.2-4-2-4.1.1\" transform=\"translate(591.43, 921.6)\" stroke-width=\"0.1\">\n <g id=\"title.2-4-2-4.1.1.scale\" transform=\"scale(1, -1)\">\n <text x=\"0\" y=\"0\" id=\"title.2-4-2-4.1.1.text\" text-anchor=\"middle\" font-size=\"38.4\" stroke=\"rgb(0,0,0)\" font-family=\"Helvetica, Arial, FreeSans, Liberation Sans, Nimbus Sans L, sans-serif\" fill=\"rgb(0,0,0)\" stroke-opacity=\"1\" fill-opacity=\"1\" font-weight=\"normal\" font-style=\"normal\">\n <tspan id=\"title.2-4-2-4.1.1.tspan.1\" dy=\"14\" x=\"0\"> </tspan>\n </text>\n </g>\n </g>\n </g>\n </g>\n </g>\n </g>\n </g>\n </g>\n</svg>","config":[],"options":{"viewBox":true}},"evals":[]}</script>
<script type="application/htmlwidget-sizing" data-for="htmlwidget-9635">{"viewer":{"width":450,"height":350,"padding":15,"fill":true},"browser":{"width":960,"height":500,"padding":40,"fill":false}}</script>
</body>
</html>