Skip to content

Instantly share code, notes, and snippets.

@timelyportfolio
Last active July 4, 2017 20:29
Show Gist options
  • Save timelyportfolio/f239ec27f798e42811215ef234486802 to your computer and use it in GitHub Desktop.
Save timelyportfolio/f239ec27f798e42811215ef234486802 to your computer and use it in GitHub Desktop.
d3_table example with sankey
license: mit
scrolling: yes
height: 800

I was reminded recently by an email of a function that I wrote a couple of year ago to convert a R table to d3 nodes and links network. I thought this functionality might be helpful in d3r, so I added d3_table(). Hopefully, d3r 0.6.6 with d3_table() hits CRAN tonight or tomorrow.

This quick example makes a d3/networkD3 sankey and visNetwork out of a table constructed from diamonds.

Code in R

# hopefully d3_table hits CRAN tonight
# devtools::install_github("timelyportfolio/d3r")

library(d3r)
library(pipeR)
library(networkD3)
library(visNetwork)

data(diamonds, package="ggplot2")

dia_tbl <- xtabs(~cut+clarity,diamonds)

d3_table(dia_tbl) %>>%
  (sankeyNetwork(
    Links = .$links
    , Nodes = .$nodes
    , Source= "source"
    , Target = "target"
    , Value = "value"
    , NodeID = "name"
  ))

d3_table(dia_tbl) %>>%
  (
    visNetwork(
      nodes = data.frame(
        id = as.numeric(rownames(.$nodes))-1
        ,label = .$nodes$name
        ,value = .$nodes$value
      )
      ,edges = data.frame(
        from = .$links$source
        ,to = .$links$target
        ,value = .$links$value
      )
    )
  )
This file has been truncated, but you can view the full file.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<script src="data:application/x-javascript;base64,KGZ1bmN0aW9uKCkgewogIC8vIElmIHdpbmRvdy5IVE1MV2lkZ2V0cyBpcyBhbHJlYWR5IGRlZmluZWQsIHRoZW4gdXNlIGl0OyBvdGhlcndpc2UgY3JlYXRlIGEKICAvLyBuZXcgb2JqZWN0LiBUaGlzIGFsbG93cyBwcmVjZWRpbmcgY29kZSB0byBzZXQgb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUKICAvLyBpbml0aWFsaXphdGlvbiBwcm9jZXNzICh0aG91Z2ggbm9uZSBjdXJyZW50bHkgZXhpc3QpLgogIHdpbmRvdy5IVE1MV2lkZ2V0cyA9IHdpbmRvdy5IVE1MV2lkZ2V0cyB8fCB7fTsKCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSB2aWV3ZXIgcGFuZS4gSWYgbm90LCB3ZSdyZSBpbiBhIHdlYiBicm93c2VyLgogIHZhciB2aWV3ZXJNb2RlID0gd2luZG93LkhUTUxXaWRnZXRzLnZpZXdlck1vZGUgPQogICAgICAvXGJ2aWV3ZXJfcGFuZT0xXGIvLnRlc3Qod2luZG93LmxvY2F0aW9uKTsKCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gU2hpbnkgbW9kZS4gSWYgbm90LCBpdCdzIGEgc3RhdGljIGRvY3VtZW50LgogIC8vIE5vdGUgdGhhdCBzdGF0aWMgd2lkZ2V0cyBjYW4gYXBwZWFyIGluIGJvdGggU2hpbnkgYW5kIHN0YXRpYyBtb2RlcywgYnV0CiAgLy8gb2J2aW91c2x5LCBTaGlueSB3aWRnZXRzIGNhbiBvbmx5IGFwcGVhciBpbiBTaGlueSBhcHBzL2RvY3VtZW50cy4KICB2YXIgc2hpbnlNb2RlID0gd2luZG93LkhUTUxXaWRnZXRzLnNoaW55TW9kZSA9CiAgICAgIHR5cGVvZih3aW5kb3cuU2hpbnkpICE9PSAidW5kZWZpbmVkIiAmJiAhIXdpbmRvdy5TaGlueS5vdXRwdXRCaW5kaW5nczsKCiAgLy8gV2UgY2FuJ3QgY291bnQgb24galF1ZXJ5IGJlaW5nIGF2YWlsYWJsZSwgc28gd2UgaW1wbGVtZW50IG91ciBvd24KICAvLyB2ZXJzaW9uIGlmIG5lY2Vzc2FyeS4KICBmdW5jdGlvbiBxdWVyeVNlbGVjdG9yQWxsKHNjb3BlLCBzZWxlY3RvcikgewogICAgaWYgKHR5cGVvZihqUXVlcnkpICE9PSAidW5kZWZpbmVkIiAmJiBzY29wZSBpbnN0YW5jZW9mIGpRdWVyeSkgewogICAgICByZXR1cm4gc2NvcGUuZmluZChzZWxlY3Rvcik7CiAgICB9CiAgICBpZiAoc2NvcGUucXVlcnlTZWxlY3RvckFsbCkgewogICAgICByZXR1cm4gc2NvcGUucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBhc0FycmF5KHZhbHVlKSB7CiAgICBpZiAodmFsdWUgPT09IG51bGwpCiAgICAgIHJldHVybiBbXTsKICAgIGlmICgkLmlzQXJyYXkodmFsdWUpKQogICAgICByZXR1cm4gdmFsdWU7CiAgICByZXR1cm4gW3ZhbHVlXTsKICB9CgogIC8vIEltcGxlbWVudCBqUXVlcnkncyBleHRlbmQKICBmdW5jdGlvbiBleHRlbmQodGFyZ2V0IC8qLCAuLi4gKi8pIHsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgcmV0dXJuIHRhcmdldDsKICAgIH0KICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07CiAgICAgIGZvciAodmFyIHByb3AgaW4gc291cmNlKSB7CiAgICAgICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgewogICAgICAgICAgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHRhcmdldDsKICB9CgogIC8vIElFOCBkb2Vzbid0IHN1cHBvcnQgQXJyYXkuZm9yRWFjaC4KICBmdW5jdGlvbiBmb3JFYWNoKHZhbHVlcywgY2FsbGJhY2ssIHRoaXNBcmcpIHsKICAgIGlmICh2YWx1ZXMuZm9yRWFjaCkgewogICAgICB2YWx1ZXMuZm9yRWFjaChjYWxsYmFjaywgdGhpc0FyZyk7CiAgICB9IGVsc2UgewogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgewogICAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdmFsdWVzW2ldLCBpLCB2YWx1ZXMpOwogICAgICB9CiAgICB9CiAgfQoKICAvLyBSZXBsYWNlcyB0aGUgc3BlY2lmaWVkIG1ldGhvZCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YgZnVuY1NvdXJjZS4KICAvLwogIC8vIE5vdGUgdGhhdCBmdW5jU291cmNlIHNob3VsZCBub3QgQkUgdGhlIG5ldyBtZXRob2QsIGl0IHNob3VsZCBiZSBhIGZ1bmN0aW9uCiAgLy8gdGhhdCBSRVRVUk5TIHRoZSBuZXcgbWV0aG9kLiBmdW5jU291cmNlIHJlY2VpdmVzIGEgc2luZ2xlIGFyZ3VtZW50IHRoYXQgaXMKICAvLyB0aGUgb3ZlcnJpZGRlbiBtZXRob2QsIGl0IGNhbiBiZSBjYWxsZWQgZnJvbSB0aGUgbmV3IG1ldGhvZC4gVGhlIG92ZXJyaWRkZW4KICAvLyBtZXRob2QgY2FuIGJlIGNhbGxlZCBsaWtlIGEgcmVndWxhciBmdW5jdGlvbiwgaXQgaGFzIHRoZSB0YXJnZXQgcGVybWFuZW50bHkKICAvLyBib3VuZCB0byBpdCBzbyAidGhpcyIgd2lsbCB3b3JrIGNvcnJlY3RseS4KICBmdW5jdGlvbiBvdmVycmlkZU1ldGhvZCh0YXJnZXQsIG1ldGhvZE5hbWUsIGZ1bmNTb3VyY2UpIHsKICAgIHZhciBzdXBlckZ1bmMgPSB0YXJnZXRbbWV0aG9kTmFtZV0gfHwgZnVuY3Rpb24oKSB7fTsKICAgIHZhciBzdXBlckZ1bmNCb3VuZCA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gc3VwZXJGdW5jLmFwcGx5KHRhcmdldCwgYXJndW1lbnRzKTsKICAgIH07CiAgICB0YXJnZXRbbWV0aG9kTmFtZV0gPSBmdW5jU291cmNlKHN1cGVyRnVuY0JvdW5kKTsKICB9CgogIC8vIEFkZCBhIG1ldGhvZCB0byBkZWxlZ2F0b3IgdGhhdCwgd2hlbiBpbnZva2VkLCBjYWxscwogIC8vIGRlbGVnYXRlZS5tZXRob2ROYW1lLiBJZiB0aGVyZSBpcyBubyBzdWNoIG1ldGhvZCBvbgogIC8vIHRoZSBkZWxlZ2F0ZWUsIGJ1dCB0aGVyZSB3YXMgb25lIG9uIGRlbGVnYXRvciBiZWZvcmUKICAvLyBkZWxlZ2F0ZU1ldGhvZCB3YXMgY2FsbGVkLCB0aGVuIHRoZSBvcmlnaW5hbCB2ZXJzaW9uCiAgLy8gaXMgaW52b2tlZCBpbnN0ZWFkLgogIC8vIEZvciBleGFtcGxlOgogIC8vCiAgLy8gdmFyIGEgPSB7CiAgLy8gICBtZXRob2QxOiBmdW5jdGlvbigpIHsgY29uc29sZS5sb2coJ2ExJyk7IH0KICAvLyAgIG1ldGhvZDI6IGZ1bmN0aW9uKCkgeyBjb25zb2xlLmxvZygnYTInKTsgfQogIC8vIH07CiAgLy8gdmFyIGIgPSB7CiAgLy8gICBtZXRob2QxOiBmdW5jdGlvbigpIHsgY29uc29sZS5sb2coJ2IxJyk7IH0KICAvLyB9OwogIC8vIGRlbGVnYXRlTWV0aG9kKGEsIGIsICJtZXRob2QxIik7CiAgLy8gZGVsZWdhdGVNZXRob2QoYSwgYiwgIm1ldGhvZDIiKTsKICAvLyBhLm1ldGhvZDEoKTsKICAvLyBhLm1ldGhvZDIoKTsKICAvLwogIC8vIFRoZSBvdXRwdXQgd291bGQgYmUgImIxIiwgImEyIi4KICBmdW5jdGlvbiBkZWxlZ2F0ZU1ldGhvZChkZWxlZ2F0b3IsIGRlbGVnYXRlZSwgbWV0aG9kTmFtZSkgewogICAgdmFyIGluaGVyaXRlZCA9IGRlbGVnYXRvclttZXRob2ROYW1lXTsKICAgIGRlbGVnYXRvclttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgdGFyZ2V0ID0gZGVsZWdhdGVlOwogICAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGVlW21ldGhvZE5hbWVdOwoKICAgICAgLy8gVGhlIG1ldGhvZCBkb2Vzbid0IGV4aXN0IG9uIHRoZSBkZWxlZ2F0ZWUuIEluc3RlYWQsCiAgICAgIC8vIGNhbGwgdGhlIG1ldGhvZCBvbiB0aGUgZGVsZWdhdG9yLCBpZiBpdCBleGlzdHMuCiAgICAgIGlmICghbWV0aG9kKSB7CiAgICAgICAgdGFyZ2V0ID0gZGVsZWdhdG9yOwogICAgICAgIG1ldGhvZCA9IGluaGVyaXRlZDsKICAgICAgfQoKICAgICAgaWYgKG1ldGhvZCkgewogICAgICAgIHJldHVybiBtZXRob2QuYXBwbHkodGFyZ2V0LCBhcmd1bWVudHMpOwogICAgICB9CiAgICB9OwogIH0KCiAgLy8gSW1wbGVtZW50IGEgdmFndWUgZmFjc2ltaWxpZSBvZiBqUXVlcnkncyBkYXRhIG1ldGhvZAogIGZ1bmN0aW9uIGVsZW1lbnREYXRhKGVsLCBuYW1lLCB2YWx1ZSkgewogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMikgewogICAgICByZXR1cm4gZWxbImh0bWx3aWRnZXRfZGF0YV8iICsgbmFtZV07CiAgICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMykgewogICAgICBlbFsiaHRtbHdpZGdldF9kYXRhXyIgKyBuYW1lXSA9IHZhbHVlOwogICAgICByZXR1cm4gZWw7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIGVsZW1lbnREYXRhOiAiICsKICAgICAgICBhcmd1bWVudHMubGVuZ3RoKTsKICAgIH0KICB9CgogIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzQ0NjE3MC9lc2NhcGUtc3RyaW5nLWZvci11c2UtaW4tamF2YXNjcmlwdC1yZWdleAogIGZ1bmN0aW9uIGVzY2FwZVJlZ0V4cChzdHIpIHsKICAgIHJldHVybiBzdHIucmVwbGFjZSgvW1wtXFtcXVwvXHtcfVwoXClcKlwrXD9cLlxcXF5cJFx8XS9nLCAiXFwkJiIpOwogIH0KCiAgZnVuY3Rpb24gaGFzQ2xhc3MoZWwsIGNsYXNzTmFtZSkgewogICAgdmFyIHJlID0gbmV3IFJlZ0V4cCgiXFxiIiArIGVzY2FwZVJlZ0V4cChjbGFzc05hbWUpICsgIlxcYiIpOwogICAgcmV0dXJuIHJlLnRlc3QoZWwuY2xhc3NOYW1lKTsKICB9CgogIC8vIGVsZW1lbnRzIC0gYXJyYXkgKG9yIGFycmF5LWxpa2Ugb2JqZWN0KSBvZiBIVE1MIGVsZW1lbnRzCiAgLy8gY2xhc3NOYW1lIC0gY2xhc3MgbmFtZSB0byB0ZXN0IGZvcgogIC8vIGluY2x1ZGUgLSBpZiB0cnVlLCBvbmx5IHJldHVybiBlbGVtZW50cyB3aXRoIGdpdmVuIGNsYXNzTmFtZTsKICAvLyAgIGlmIGZhbHNlLCBvbmx5IHJldHVybiBlbGVtZW50cyAqd2l0aG91dCogZ2l2ZW4gY2xhc3NOYW1lCiAgZnVuY3Rpb24gZmlsdGVyQnlDbGFzcyhlbGVtZW50cywgY2xhc3NOYW1lLCBpbmNsdWRlKSB7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykgewogICAgICBpZiAoaGFzQ2xhc3MoZWxlbWVudHNbaV0sIGNsYXNzTmFtZSkgPT0gaW5jbHVkZSkKICAgICAgICByZXN1bHRzLnB1c2goZWxlbWVudHNbaV0pOwogICAgfQogICAgcmV0dXJuIHJlc3VsdHM7CiAgfQoKICBmdW5jdGlvbiBvbihvYmosIGV2ZW50TmFtZSwgZnVuYykgewogICAgaWYgKG9iai5hZGRFdmVudExpc3RlbmVyKSB7CiAgICAgIG9iai5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZnVuYywgZmFsc2UpOwogICAgfSBlbHNlIGlmIChvYmouYXR0YWNoRXZlbnQpIHsKICAgICAgb2JqLmF0dGFjaEV2ZW50KGV2ZW50TmFtZSwgZnVuYyk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBvZmYob2JqLCBldmVudE5hbWUsIGZ1bmMpIHsKICAgIGlmIChvYmoucmVtb3ZlRXZlbnRMaXN0ZW5lcikKICAgICAgb2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBmdW5jLCBmYWxzZSk7CiAgICBlbHNlIGlmIChvYmouZGV0YWNoRXZlbnQpIHsKICAgICAgb2JqLmRldGFjaEV2ZW50KGV2ZW50TmFtZSwgZnVuYyk7CiAgICB9CiAgfQoKICAvLyBUcmFuc2xhdGUgYXJyYXkgb2YgdmFsdWVzIHRvIHRvcC9yaWdodC9ib3R0b20vbGVmdCwgYXMgdXN1YWwgd2l0aAogIC8vIHRoZSAicGFkZGluZyIgQ1NTIHByb3BlcnR5CiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3BhZGRpbmcKICBmdW5jdGlvbiB1bnBhY2tQYWRkaW5nKHZhbHVlKSB7CiAgICBpZiAodHlwZW9mKHZhbHVlKSA9PT0gIm51bWJlciIpCiAgICAgIHZhbHVlID0gW3ZhbHVlXTsKICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDEpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMF0sIGJvdHRvbTogdmFsdWVbMF0sIGxlZnQ6IHZhbHVlWzBdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDIpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMF0sIGxlZnQ6IHZhbHVlWzFdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDMpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMl0sIGxlZnQ6IHZhbHVlWzFdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDQpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMl0sIGxlZnQ6IHZhbHVlWzNdfTsKICAgIH0KICB9CgogIC8vIENvbnZlcnQgYW4gdW5wYWNrZWQgcGFkZGluZyBvYmplY3QgdG8gYSBDU1MgdmFsdWUKICBmdW5jdGlvbiBwYWRkaW5nVG9Dc3MocGFkZGluZ09iaikgewogICAgcmV0dXJuIHBhZGRpbmdPYmoudG9wICsgInB4ICIgKyBwYWRkaW5nT2JqLnJpZ2h0ICsgInB4ICIgKyBwYWRkaW5nT2JqLmJvdHRvbSArICJweCAiICsgcGFkZGluZ09iai5sZWZ0ICsgInB4IjsKICB9CgogIC8vIE1ha2VzIGEgbnVtYmVyIHN1aXRhYmxlIGZvciBDU1MKICBmdW5jdGlvbiBweCh4KSB7CiAgICBpZiAodHlwZW9mKHgpID09PSAibnVtYmVyIikKICAgICAgcmV0dXJuIHggKyAicHgiOwogICAgZWxzZQogICAgICByZXR1cm4geDsKICB9CgogIC8vIFJldHJpZXZlcyBydW50aW1lIHdpZGdldCBzaXppbmcgaW5mb3JtYXRpb24gZm9yIGFuIGVsZW1lbnQuCiAgLy8gVGhlIHJldHVybiB2YWx1ZSBpcyBlaXRoZXIgbnVsbCwgb3IgYW4gb2JqZWN0IHdpdGggZmlsbCwgcGFkZGluZywKICAvLyBkZWZhdWx0V2lkdGgsIGRlZmF1bHRIZWlnaHQgZmllbGRzLgogIGZ1bmN0aW9uIHNpemluZ1BvbGljeShlbCkgewogICAgdmFyIHNpemluZ0VsID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigic2NyaXB0W2RhdGEtZm9yPSciICsgZWwuaWQgKyAiJ11bdHlwZT0nYXBwbGljYXRpb24vaHRtbHdpZGdldC1zaXppbmcnXSIpOwogICAgaWYgKCFzaXppbmdFbCkKICAgICAgcmV0dXJuIG51bGw7CiAgICB2YXIgc3AgPSBKU09OLnBhcnNlKHNpemluZ0VsLnRleHRDb250ZW50IHx8IHNpemluZ0VsLnRleHQgfHwgInt9Iik7CiAgICBpZiAodmlld2VyTW9kZSkgewogICAgICByZXR1cm4gc3Audmlld2VyOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHNwLmJyb3dzZXI7CiAgICB9CiAgfQoKICAvLyBAcGFyYW0gdGFza3MgQXJyYXkgb2Ygc3RyaW5ncyAob3IgZmFsc3kgdmFsdWUsIGluIHdoaWNoIGNhc2Ugbm8tb3ApLgogIC8vICAgRWFjaCBlbGVtZW50IG11c3QgYmUgYSB2YWxpZCBKYXZhU2NyaXB0IGV4cHJlc3Npb24gdGhhdCB5aWVsZHMgYQogIC8vICAgZnVuY3Rpb24uIE9yLCBjYW4gYmUgYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoICJjb2RlIiBhbmQgImRhdGEiCiAgLy8gICBwcm9wZXJ0aWVzOyBpbiB0aGlzIGNhc2UsIHRoZSAiY29kZSIgcHJvcGVydHkgc2hvdWxkIGJlIGEgc3RyaW5nCiAgLy8gICBvZiBKUyB0aGF0J3MgYW4gZXhwciB0aGF0IHlpZWxkcyBhIGZ1bmN0aW9uLCBhbmQgImRhdGEiIHNob3VsZCBiZQogIC8vICAgYW4gb2JqZWN0IHRoYXQgd2lsbCBiZSBhZGRlZCBhcyBhbiBhZGRpdGlvbmFsIGFyZ3VtZW50IHdoZW4gdGhhdAogIC8vICAgZnVuY3Rpb24gaXMgY2FsbGVkLgogIC8vIEBwYXJhbSB0YXJnZXQgVGhlIG9iamVjdCB0aGF0IHdpbGwgYmUgInRoaXMiIGZvciBlYWNoIGZ1bmN0aW9uCiAgLy8gICBleGVjdXRpb24uCiAgLy8gQHBhcmFtIGFyZ3MgQXJyYXkgb2YgYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb25zLiAoVGhlCiAgLy8gICBzYW1lIGFyZ3VtZW50cyB3aWxsIGJlIHBhc3NlZCB0byBhbGwgZnVuY3Rpb25zLikKICBmdW5jdGlvbiBldmFsQW5kUnVuKHRhc2tzLCB0YXJnZXQsIGFyZ3MpIHsKICAgIGlmICh0YXNrcykgewogICAgICBmb3JFYWNoKHRhc2tzLCBmdW5jdGlvbih0YXNrKSB7CiAgICAgICAgdmFyIHRoZXNlQXJncyA9IGFyZ3M7CiAgICAgICAgaWYgKHR5cGVvZih0YXNrKSA9PT0gIm9iamVjdCIpIHsKICAgICAgICAgIHRoZXNlQXJncyA9IHRoZXNlQXJncy5jb25jYXQoW3Rhc2suZGF0YV0pOwogICAgICAgICAgdGFzayA9IHRhc2suY29kZTsKICAgICAgICB9CiAgICAgICAgdmFyIHRhc2tGdW5jID0gZXZhbCgiKCIgKyB0YXNrICsgIikiKTsKICAgICAgICBpZiAodHlwZW9mKHRhc2tGdW5jKSAhPT0gImZ1bmN0aW9uIikgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUYXNrIG11c3QgYmUgYSBmdW5jdGlvbiEgU291cmNlOlxuIiArIHRhc2spOwogICAgICAgIH0KICAgICAgICB0YXNrRnVuYy5hcHBseSh0YXJnZXQsIHRoZXNlQXJncyk7CiAgICAgIH0pOwogICAgfQogIH0KCiAgZnVuY3Rpb24gaW5pdFNpemluZyhlbCkgewogICAgdmFyIHNpemluZyA9IHNpemluZ1BvbGljeShlbCk7CiAgICBpZiAoIXNpemluZykKICAgICAgcmV0dXJuOwoKICAgIHZhciBjZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaHRtbHdpZGdldF9jb250YWluZXIiKTsKICAgIGlmICghY2VsKQogICAgICByZXR1cm47CgogICAgaWYgKHR5cGVvZihzaXppbmcucGFkZGluZykgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUubWFyZ2luID0gIjAiOwogICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmcgPSBwYWRkaW5nVG9Dc3ModW5wYWNrUGFkZGluZyhzaXppbmcucGFkZGluZykpOwogICAgfQoKICAgIGlmIChzaXppbmcuZmlsbCkgewogICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gImhpZGRlbiI7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUud2lkdGggPSAiMTAwJSI7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuaGVpZ2h0ID0gIjEwMCUiOwogICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUud2lkdGggPSAiMTAwJSI7CiAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5oZWlnaHQgPSAiMTAwJSI7CiAgICAgIGlmIChjZWwpIHsKICAgICAgICBjZWwuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOwogICAgICAgIHZhciBwYWQgPSB1bnBhY2tQYWRkaW5nKHNpemluZy5wYWRkaW5nKTsKICAgICAgICBjZWwuc3R5bGUudG9wID0gcGFkLnRvcCArICJweCI7CiAgICAgICAgY2VsLnN0eWxlLnJpZ2h0ID0gcGFkLnJpZ2h0ICsgInB4IjsKICAgICAgICBjZWwuc3R5bGUuYm90dG9tID0gcGFkLmJvdHRvbSArICJweCI7CiAgICAgICAgY2VsLnN0eWxlLmxlZnQgPSBwYWQubGVmdCArICJweCI7CiAgICAgICAgZWwuc3R5bGUud2lkdGggPSAiMTAwJSI7CiAgICAgICAgZWwuc3R5bGUuaGVpZ2h0ID0gIjEwMCUiOwogICAgICB9CgogICAgICByZXR1cm4gewogICAgICAgIGdldFdpZHRoOiBmdW5jdGlvbigpIHsgcmV0dXJuIGNlbC5vZmZzZXRXaWR0aDsgfSwKICAgICAgICBnZXRIZWlnaHQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gY2VsLm9mZnNldEhlaWdodDsgfQogICAgICB9OwoKICAgIH0gZWxzZSB7CiAgICAgIGVsLnN0eWxlLndpZHRoID0gcHgoc2l6aW5nLndpZHRoKTsKICAgICAgZWwuc3R5bGUuaGVpZ2h0ID0gcHgoc2l6aW5nLmhlaWdodCk7CgogICAgICByZXR1cm4gewogICAgICAgIGdldFdpZHRoOiBmdW5jdGlvbigpIHsgcmV0dXJuIGVsLm9mZnNldFdpZHRoOyB9LAogICAgICAgIGdldEhlaWdodDogZnVuY3Rpb24oKSB7IHJldHVybiBlbC5vZmZzZXRIZWlnaHQ7IH0KICAgICAgfTsKICAgIH0KICB9CgogIC8vIERlZmF1bHQgaW1wbGVtZW50YXRpb25zIGZvciBtZXRob2RzCiAgdmFyIGRlZmF1bHRzID0gewogICAgZmluZDogZnVuY3Rpb24oc2NvcGUpIHsKICAgICAgcmV0dXJuIHF1ZXJ5U2VsZWN0b3JBbGwoc2NvcGUsICIuIiArIHRoaXMubmFtZSk7CiAgICB9LAogICAgcmVuZGVyRXJyb3I6IGZ1bmN0aW9uKGVsLCBlcnIpIHsKICAgICAgdmFyICRlbCA9ICQoZWwpOwoKICAgICAgdGhpcy5jbGVhckVycm9yKGVsKTsKCiAgICAgIC8vIEFkZCBhbGwgdGhlc2UgZXJyb3IgY2xhc3NlcywgYXMgU2hpbnkgZG9lcwogICAgICB2YXIgZXJyQ2xhc3MgPSAic2hpbnktb3V0cHV0LWVycm9yIjsKICAgICAgaWYgKGVyci50eXBlICE9PSBudWxsKSB7CiAgICAgICAgLy8gdXNlIHRoZSBjbGFzc2VzIG9mIHRoZSBlcnJvciBjb25kaXRpb24gYXMgQ1NTIGNsYXNzIG5hbWVzCiAgICAgICAgZXJyQ2xhc3MgPSBlcnJDbGFzcyArICIgIiArICQubWFwKGFzQXJyYXkoZXJyLnR5cGUpLCBmdW5jdGlvbih0eXBlKSB7CiAgICAgICAgICByZXR1cm4gZXJyQ2xhc3MgKyAiLSIgKyB0eXBlOwogICAgICAgIH0pLmpvaW4oIiAiKTsKICAgICAgfQogICAgICBlcnJDbGFzcyA9IGVyckNsYXNzICsgIiBodG1sd2lkZ2V0cy1lcnJvciI7CgogICAgICAvLyBJcyBlbCBpbmxpbmUgb3IgYmxvY2s/IElmIGlubGluZSBvciBpbmxpbmUtYmxvY2ssIGp1c3QgZGlzcGxheTpub25lIGl0CiAgICAgIC8vIGFuZCBhZGQgYW4gaW5saW5lIGVycm9yLgogICAgICB2YXIgZGlzcGxheSA9ICRlbC5jc3MoImRpc3BsYXkiKTsKICAgICAgJGVsLmRhdGEoInJlc3RvcmUtZGlzcGxheS1tb2RlIiwgZGlzcGxheSk7CgogICAgICBpZiAoZGlzcGxheSA9PT0gImlubGluZSIgfHwgZGlzcGxheSA9PT0gImlubGluZS1ibG9jayIpIHsKICAgICAgICAkZWwuaGlkZSgpOwogICAgICAgIGlmIChlcnIubWVzc2FnZSAhPT0gIiIpIHsKICAgICAgICAgIHZhciBlcnJvclNwYW4gPSAkKCI8c3Bhbj4iKS5hZGRDbGFzcyhlcnJDbGFzcyk7CiAgICAgICAgICBlcnJvclNwYW4udGV4dChlcnIubWVzc2FnZSk7CiAgICAgICAgICAkZWwuYWZ0ZXIoZXJyb3JTcGFuKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoZGlzcGxheSA9PT0gImJsb2NrIikgewogICAgICAgIC8vIElmIGJsb2NrLCBhZGQgYW4gZXJyb3IganVzdCBhZnRlciB0aGUgZWwsIHNldCB2aXNpYmlsaXR5Om5vbmUgb24gdGhlCiAgICAgICAgLy8gZWwsIGFuZCBwb3NpdGlvbiB0aGUgZXJyb3IgdG8gYmUgb24gdG9wIG9mIHRoZSBlbC4KICAgICAgICAvLyBNYXJrIGl0IHdpdGggYSB1bmlxdWUgSUQgYW5kIENTUyBjbGFzcyBzbyB3ZSBjYW4gcmVtb3ZlIGl0IGxhdGVyLgogICAgICAgICRlbC5jc3MoInZpc2liaWxpdHkiLCAiaGlkZGVuIik7CiAgICAgICAgaWYgKGVyci5tZXNzYWdlICE9PSAiIikgewogICAgICAgICAgdmFyIGVycm9yRGl2ID0gJCgiPGRpdj4iKS5hZGRDbGFzcyhlcnJDbGFzcykuY3NzKCJwb3NpdGlvbiIsICJhYnNvbHV0ZSIpCiAgICAgICAgICAgIC5jc3MoInRvcCIsIGVsLm9mZnNldFRvcCkKICAgICAgICAgICAgLmNzcygibGVmdCIsIGVsLm9mZnNldExlZnQpCiAgICAgICAgICAgIC8vIHNldHRpbmcgd2lkdGggY2FuIHB1c2ggb3V0IHRoZSBwYWdlIHNpemUsIGZvcmNpbmcgb3RoZXJ3aXNlCiAgICAgICAgICAgIC8vIHVubmVjZXNzYXJ5IHNjcm9sbGJhcnMgdG8gYXBwZWFyIGFuZCBtYWtpbmcgaXQgaW1wb3NzaWJsZSBmb3IKICAgICAgICAgICAgLy8gdGhlIGVsZW1lbnQgdG8gc2hyaW5rOyBzbyB1c2UgbWF4LXdpZHRoIGluc3RlYWQKICAgICAgICAgICAgLmNzcygibWF4V2lkdGgiLCBlbC5vZmZzZXRXaWR0aCkKICAgICAgICAgICAgLmNzcygiaGVpZ2h0IiwgZWwub2Zmc2V0SGVpZ2h0KTsKICAgICAgICAgIGVycm9yRGl2LnRleHQoZXJyLm1lc3NhZ2UpOwogICAgICAgICAgJGVsLmFmdGVyKGVycm9yRGl2KTsKCiAgICAgICAgICAvLyBSZWFsbHkgZHVtYiB3YXkgdG8ga2VlcCB0aGUgc2l6ZS9wb3NpdGlvbiBvZiB0aGUgZXJyb3IgaW4gc3luYyB3aXRoCiAgICAgICAgICAvLyB0aGUgcGFyZW50IGVsZW1lbnQgYXMgdGhlIHdpbmRvdyBpcyByZXNpemVkIG9yIHdoYXRldmVyLgogICAgICAgICAgdmFyIGludElkID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGlmICghZXJyb3JEaXZbMF0ucGFyZW50RWxlbWVudCkgewogICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50SWQpOwogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBlcnJvckRpdgogICAgICAgICAgICAgIC5jc3MoInRvcCIsIGVsLm9mZnNldFRvcCkKICAgICAgICAgICAgICAuY3NzKCJsZWZ0IiwgZWwub2Zmc2V0TGVmdCkKICAgICAgICAgICAgICAuY3NzKCJtYXhXaWR0aCIsIGVsLm9mZnNldFdpZHRoKQogICAgICAgICAgICAgIC5jc3MoImhlaWdodCIsIGVsLm9mZnNldEhlaWdodCk7CiAgICAgICAgICB9LCA1MDApOwogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIGNsZWFyRXJyb3I6IGZ1bmN0aW9uKGVsKSB7CiAgICAgIHZhciAkZWwgPSAkKGVsKTsKICAgICAgdmFyIGRpc3BsYXkgPSAkZWwuZGF0YSgicmVzdG9yZS1kaXNwbGF5LW1vZGUiKTsKICAgICAgJGVsLmRhdGEoInJlc3RvcmUtZGlzcGxheS1tb2RlIiwgbnVsbCk7CgogICAgICBpZiAoZGlzcGxheSA9PT0gImlubGluZSIgfHwgZGlzcGxheSA9PT0gImlubGluZS1ibG9jayIpIHsKICAgICAgICBpZiAoZGlzcGxheSkKICAgICAgICAgICRlbC5jc3MoImRpc3BsYXkiLCBkaXNwbGF5KTsKICAgICAgICAkKGVsLm5leHRTaWJsaW5nKS5maWx0ZXIoIi5odG1sd2lkZ2V0cy1lcnJvciIpLnJlbW92ZSgpOwogICAgICB9IGVsc2UgaWYgKGRpc3BsYXkgPT09ICJibG9jayIpewogICAgICAgICRlbC5jc3MoInZpc2liaWxpdHkiLCAiaW5oZXJpdCIpOwogICAgICAgICQoZWwubmV4dFNpYmxpbmcpLmZpbHRlcigiLmh0bWx3aWRnZXRzLWVycm9yIikucmVtb3ZlKCk7CiAgICAgIH0KICAgIH0sCiAgICBzaXppbmc6IHt9CiAgfTsKCiAgLy8gQ2FsbGVkIGJ5IHdpZGdldCBiaW5kaW5ncyB0byByZWdpc3RlciBhIG5ldyB0eXBlIG9mIHdpZGdldC4gVGhlIGRlZmluaXRpb24KICAvLyBvYmplY3QgY2FuIGNvbnRhaW4gdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgogIC8vIC0gbmFtZSAocmVxdWlyZWQpIC0gQSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgYmluZGluZyBuYW1lLCB3aGljaCB3aWxsIGJlCiAgLy8gICB1c2VkIGJ5IGRlZmF1bHQgYXMgdGhlIENTUyBjbGFzc25hbWUgdG8gbG9vayBmb3IuCiAgLy8gLSBpbml0aWFsaXplIChvcHRpb25hbCkgLSBBIGZ1bmN0aW9uKGVsKSB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uY2UgcGVyCiAgLy8gICB3aWRnZXQgZWxlbWVudDsgaWYgYSB2YWx1ZSBpcyByZXR1cm5lZCwgaXQgd2lsbCBiZSBwYXNzZWQgYXMgdGhlIHRoaXJkCiAgLy8gICB2YWx1ZSB0byByZW5kZXJWYWx1ZS4KICAvLyAtIHJlbmRlclZhbHVlIChyZXF1aXJlZCkgLSBBIGZ1bmN0aW9uKGVsLCBkYXRhLCBpbml0VmFsdWUpIHRoYXQgd2lsbCBiZQogIC8vICAgY2FsbGVkIHdpdGggZGF0YS4gU3RhdGljIGNvbnRleHRzIHdpbGwgY2F1c2UgdGhpcyB0byBiZSBjYWxsZWQgb25jZSBwZXIKICAvLyAgIGVsZW1lbnQ7IFNoaW55IGFwcHMgd2lsbCBjYXVzZSB0aGlzIHRvIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBwZXIKICAvLyAgIGVsZW1lbnQsIGFzIHRoZSBkYXRhIGNoYW5nZXMuCiAgd2luZG93LkhUTUxXaWRnZXRzLndpZGdldCA9IGZ1bmN0aW9uKGRlZmluaXRpb24pIHsKICAgIGlmICghZGVmaW5pdGlvbi5uYW1lKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiV2lkZ2V0IG11c3QgaGF2ZSBhIG5hbWUiKTsKICAgIH0KICAgIGlmICghZGVmaW5pdGlvbi50eXBlKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiV2lkZ2V0IG11c3QgaGF2ZSBhIHR5cGUiKTsKICAgIH0KICAgIC8vIEN1cnJlbnRseSB3ZSBvbmx5IHN1cHBvcnQgb3V0cHV0IHdpZGdldHMKICAgIGlmIChkZWZpbml0aW9uLnR5cGUgIT09ICJvdXRwdXQiKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHdpZGdldCB0eXBlICciICsgZGVmaW5pdGlvbi50eXBlICsgIiciKTsKICAgIH0KICAgIC8vIFRPRE86IFZlcmlmeSB0aGF0IC5uYW1lIGlzIGEgdmFsaWQgQ1NTIGNsYXNzbmFtZQoKICAgIC8vIFN1cHBvcnQgbmV3LXN0eWxlIGluc3RhbmNlLWJvdW5kIGRlZmluaXRpb25zLiBPbGQtc3R5bGUgY2xhc3MtYm91bmQKICAgIC8vIGRlZmluaXRpb25zIGhhdmUgb25lIHdpZGdldCAib2JqZWN0IiBwZXIgd2lkZ2V0IHBlciB0eXBlL2NsYXNzIG9mCiAgICAvLyB3aWRnZXQ7IHRoZSByZW5kZXJWYWx1ZSBhbmQgcmVzaXplIG1ldGhvZHMgb24gc3VjaCB3aWRnZXQgb2JqZWN0cwogICAgLy8gdGFrZSBlbCBhbmQgaW5zdGFuY2UgYXJndW1lbnRzLCBiZWNhdXNlIHRoZSB3aWRnZXQgb2JqZWN0IGNhbid0CiAgICAvLyBzdG9yZSB0aGVtLiBOZXctc3R5bGUgaW5zdGFuY2UtYm91bmQgZGVmaW5pdGlvbnMgaGF2ZSBvbmUgd2lkZ2V0CiAgICAvLyBvYmplY3QgcGVyIHdpZGdldCBpbnN0YW5jZTsgdGhlIGRlZmluaXRpb24gdGhhdCdzIHBhc3NlZCBpbiBkb2Vzbid0CiAgICAvLyBwcm92aWRlIHJlbmRlclZhbHVlIG9yIHJlc2l6ZSBtZXRob2RzIGF0IGFsbCwganVzdCB0aGUgc2luZ2xlIG1ldGhvZAogICAgLy8gICBmYWN0b3J5KGVsLCB3aWR0aCwgaGVpZ2h0KQogICAgLy8gd2hpY2ggcmV0dXJucyBhbiBvYmplY3QgdGhhdCBoYXMgcmVuZGVyVmFsdWUoeCkgYW5kIHJlc2l6ZSh3LCBoKS4KICAgIC8vIFRoaXMgZW5hYmxlcyBhIGZhciBtb3JlIG5hdHVyYWwgcHJvZ3JhbW1pbmcgc3R5bGUgZm9yIHRoZSB3aWRnZXQKICAgIC8vIGF1dGhvciwgd2hvIGNhbiBzdG9yZSBwZXItaW5zdGFuY2Ugc3RhdGUgdXNpbmcgZWl0aGVyIE9PLXN0eWxlCiAgICAvLyBpbnN0YW5jZSBmaWVsZHMgb3IgZnVuY3Rpb25hbC1zdHlsZSBjbG9zdXJlIHZhcmlhYmxlcyAoSSBndWVzcyB0aGlzCiAgICAvLyBpcyBpbiBjb250cmFzdCB0byB3aGF0IGNhbiBvbmx5IGJlIGNhbGxlZCBDLXN0eWxlIHBzZXVkby1PTyB3aGljaCBpcwogICAgLy8gd2hhdCB3ZSByZXF1aXJlZCBiZWZvcmUpLgogICAgaWYgKGRlZmluaXRpb24uZmFjdG9yeSkgewogICAgICBkZWZpbml0aW9uID0gY3JlYXRlTGVnYWN5RGVmaW5pdGlvbkFkYXB0ZXIoZGVmaW5pdGlvbik7CiAgICB9CgogICAgaWYgKCFkZWZpbml0aW9uLnJlbmRlclZhbHVlKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiV2lkZ2V0IG11c3QgaGF2ZSBhIHJlbmRlclZhbHVlIGZ1bmN0aW9uIik7CiAgICB9CgogICAgLy8gRm9yIHN0YXRpYyByZW5kZXJpbmcgKG5vbi1TaGlueSksIHVzZSBhIHNpbXBsZSB3aWRnZXQgcmVnaXN0cmF0aW9uCiAgICAvLyBzY2hlbWUuIFdlIGFsc28gdXNlIHRoaXMgc2NoZW1lIGZvciBTaGlueSBhcHBzL2RvY3VtZW50cyB0aGF0IGFsc28KICAgIC8vIGNvbnRhaW4gc3RhdGljIHdpZGdldHMuCiAgICB3aW5kb3cuSFRNTFdpZGdldHMud2lkZ2V0cyA9IHdpbmRvdy5IVE1MV2lkZ2V0cy53aWRnZXRzIHx8IFtdOwogICAgLy8gTWVyZ2UgZGVmYXVsdHMgaW50byB0aGUgZGVmaW5pdGlvbjsgZG9uJ3QgbXV0YXRlIHRoZSBvcmlnaW5hbCBkZWZpbml0aW9uLgogICAgdmFyIHN0YXRpY0JpbmRpbmcgPSBleHRlbmQoe30sIGRlZmF1bHRzLCBkZWZpbml0aW9uKTsKICAgIG92ZXJyaWRlTWV0aG9kKHN0YXRpY0JpbmRpbmcsICJmaW5kIiwgZnVuY3Rpb24oc3VwZXJmdW5jKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbihzY29wZSkgewogICAgICAgIHZhciByZXN1bHRzID0gc3VwZXJmdW5jKHNjb3BlKTsKICAgICAgICAvLyBGaWx0ZXIgb3V0IFNoaW55IG91dHB1dHMsIHdlIG9ubHkgd2FudCB0aGUgc3RhdGljIGtpbmQKICAgICAgICByZXR1cm4gZmlsdGVyQnlDbGFzcyhyZXN1bHRzLCAiaHRtbC13aWRnZXQtb3V0cHV0IiwgZmFsc2UpOwogICAgICB9OwogICAgfSk7CiAgICB3aW5kb3cuSFRNTFdpZGdldHMud2lkZ2V0cy5wdXNoKHN0YXRpY0JpbmRpbmcpOwoKICAgIGlmIChzaGlueU1vZGUpIHsKICAgICAgLy8gU2hpbnkgaXMgcnVubmluZy4gUmVnaXN0ZXIgdGhlIGRlZmluaXRpb24gd2l0aCBhbiBvdXRwdXQgYmluZGluZy4KICAgICAgLy8gVGhlIGRlZmluaXRpb24gaXRzZWxmIHdpbGwgbm90IGJlIHRoZSBvdXRwdXQgYmluZGluZywgaW5zdGVhZAogICAgICAvLyB3ZSB3aWxsIG1ha2UgYW4gb3V0cHV0IGJpbmRpbmcgb2JqZWN0IHRoYXQgZGVsZWdhdGVzIHRvIHRoZQogICAgICAvLyBkZWZpbml0aW9uLiBUaGlzIGlzIGJlY2F1c2Ugd2UgZm9vbGlzaGx5IHVzZWQgdGhlIHNhbWUgbWV0aG9kCiAgICAgIC8vIG5hbWUgKHJlbmRlclZhbHVlKSBmb3IgaHRtbHdpZGdldHMgZGVmaW5pdGlvbiBhbmQgU2hpbnkgYmluZGluZ3MKICAgICAgLy8gYnV0IHRoZXkgYWN0dWFsbHkgaGF2ZSBxdWl0ZSBkaWZmZXJlbnQgc2VtYW50aWNzICh0aGUgU2hpbnkKICAgICAgLy8gYmluZGluZ3MgcmVjZWl2ZSBkYXRhIHRoYXQgaW5jbHVkZXMgbG90cyBvZiBtZXRhZGF0YSB0aGF0IGl0CiAgICAgIC8vIHN0cmlwcyBvZmYgYmVmb3JlIGNhbGxpbmcgaHRtbHdpZGdldHMgcmVuZGVyVmFsdWUpLiBXZSBjYW4ndAogICAgICAvLyBqdXN0IGlnbm9yZSB0aGUgZGlmZmVyZW5jZSBiZWNhdXNlIGluIHNvbWUgd2lkZ2V0cyBpdCdzIGhlbHBmdWwKICAgICAgLy8gdG8gY2FsbCB0aGlzLnJlbmRlclZhbHVlKCkgZnJvbSBpbnNpZGUgb2YgcmVzaXplKCksIGFuZCBpZgogICAgICAvLyB3ZSdyZSBub3QgZGVsZWdhdGluZywgdGhlbiB0aGF0IGNhbGwgd2lsbCBnbyB0byB0aGUgU2hpbnkKICAgICAgLy8gdmVyc2lvbiBpbnN0ZWFkIG9mIHRoZSBodG1sd2lkZ2V0cyB2ZXJzaW9uLgoKICAgICAgLy8gTWVyZ2UgZGVmYXVsdHMgd2l0aCBkZWZpbml0aW9uLCB3aXRob3V0IG11dGF0aW5nIGVpdGhlci4KICAgICAgdmFyIGJpbmRpbmdEZWYgPSBleHRlbmQoe30sIGRlZmF1bHRzLCBkZWZpbml0aW9uKTsKCiAgICAgIC8vIFRoaXMgb2JqZWN0IHdpbGwgYmUgb3VyIGFjdHVhbCBTaGlueSBiaW5kaW5nLgogICAgICB2YXIgc2hpbnlCaW5kaW5nID0gbmV3IFNoaW55Lk91dHB1dEJpbmRpbmcoKTsKCiAgICAgIC8vIFdpdGggYSBmZXcgZXhjZXB0aW9ucywgd2UnbGwgd2FudCB0byBzaW1wbHkgdXNlIHRoZSBiaW5kaW5nRGVmJ3MKICAgICAgLy8gdmVyc2lvbiBvZiBtZXRob2RzIGlmIHRoZXkgYXJlIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0bwogICAgICAvLyBTaGlueSdzIGRlZmF1bHRzLiBOT1RFOiBJZiBTaGlueSdzIG91dHB1dCBiaW5kaW5ncyBnYWluIGFkZGl0aW9uYWwKICAgICAgLy8gbWV0aG9kcyBpbiB0aGUgZnV0dXJlLCBhbmQgd2Ugd2FudCB0aGVtIHRvIGJlIG92ZXJyaWRlYWJsZSBieQogICAgICAvLyBIVE1MV2lkZ2V0IGJpbmRpbmcgZGVmaW5pdGlvbnMsIHRoZW4gd2UnbGwgbmVlZCB0byBhZGQgdGhlbSB0byB0aGlzCiAgICAgIC8vIGxpc3QuCiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgImdldElkIik7CiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgIm9uVmFsdWVDaGFuZ2UiKTsKICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAib25WYWx1ZUVycm9yIik7CiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgInJlbmRlckVycm9yIik7CiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgImNsZWFyRXJyb3IiKTsKICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAic2hvd1Byb2dyZXNzIik7CgogICAgICAvLyBUaGUgZmluZCwgcmVuZGVyVmFsdWUsIGFuZCByZXNpemUgYXJlIGhhbmRsZWQgZGlmZmVyZW50bHksIGJlY2F1c2Ugd2UKICAgICAgLy8gd2FudCB0byBhY3R1YWxseSBkZWNvcmF0ZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGJpbmRpbmdEZWYgbWV0aG9kcy4KCiAgICAgIHNoaW55QmluZGluZy5maW5kID0gZnVuY3Rpb24oc2NvcGUpIHsKICAgICAgICB2YXIgcmVzdWx0cyA9IGJpbmRpbmdEZWYuZmluZChzY29wZSk7CgogICAgICAgIC8vIE9ubHkgcmV0dXJuIGVsZW1lbnRzIHRoYXQgYXJlIFNoaW55IG91dHB1dHMsIG5vdCBzdGF0aWMgb25lcwogICAgICAgIHZhciBkeW5hbWljUmVzdWx0cyA9IHJlc3VsdHMuZmlsdGVyKCIuaHRtbC13aWRnZXQtb3V0cHV0Iik7CgogICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB3aGF0ZXZlciBjYXVzZWQgU2hpbnkgdG8gdGhpbmsgdGhlcmUgbWlnaHQgYmUKICAgICAgICAvLyBuZXcgZHluYW1pYyBvdXRwdXRzLCBhbHNvIGNhdXNlZCB0aGVyZSB0byBiZSBuZXcgc3RhdGljIG91dHB1dHMuCiAgICAgICAgLy8gU2luY2UgdGhlcmUgbWlnaHQgYmUgbG90cyBvZiBkaWZmZXJlbnQgaHRtbHdpZGdldHMgYmluZGluZ3MsIHdlCiAgICAgICAgLy8gc2NoZWR1bGUgZXhlY3V0aW9uIGZvciBsYXRlci0tbm8gbmVlZCB0byBzdGF0aWNSZW5kZXIgbXVsdGlwbGUKICAgICAgICAvLyB0aW1lcy4KICAgICAgICBpZiAocmVzdWx0cy5sZW5ndGggIT09IGR5bmFtaWNSZXN1bHRzLmxlbmd0aCkKICAgICAgICAgIHNjaGVkdWxlU3RhdGljUmVuZGVyKCk7CgogICAgICAgIHJldHVybiBkeW5hbWljUmVzdWx0czsKICAgICAgfTsKCiAgICAgIC8vIFdyYXAgcmVuZGVyVmFsdWUgdG8gaGFuZGxlIGluaXRpYWxpemF0aW9uLCB3aGljaCB1bmZvcnR1bmF0ZWx5IGlzbid0CiAgICAgIC8vIHN1cHBvcnRlZCBuYXRpdmVseSBieSBTaGlueSBhdCB0aGUgdGltZSBvZiB0aGlzIHdyaXRpbmcuCgogICAgICBzaGlueUJpbmRpbmcucmVuZGVyVmFsdWUgPSBmdW5jdGlvbihlbCwgZGF0YSkgewogICAgICAgIFNoaW55LnJlbmRlckRlcGVuZGVuY2llcyhkYXRhLmRlcHMpOwogICAgICAgIC8vIFJlc29sdmUgc3RyaW5ncyBtYXJrZWQgYXMgamF2YXNjcmlwdCBsaXRlcmFscyB0byBvYmplY3RzCiAgICAgICAgaWYgKCEoZGF0YS5ldmFscyBpbnN0YW5jZW9mIEFycmF5KSkgZGF0YS5ldmFscyA9IFtkYXRhLmV2YWxzXTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgZGF0YS5ldmFscyAmJiBpIDwgZGF0YS5ldmFscy5sZW5ndGg7IGkrKykgewogICAgICAgICAgd2luZG93LkhUTUxXaWRnZXRzLmV2YWx1YXRlU3RyaW5nTWVtYmVyKGRhdGEueCwgZGF0YS5ldmFsc1tpXSk7CiAgICAgICAgfQogICAgICAgIGlmICghYmluZGluZ0RlZi5yZW5kZXJPbk51bGxWYWx1ZSkgewogICAgICAgICAgaWYgKGRhdGEueCA9PT0gbnVsbCkgewogICAgICAgICAgICBlbC5zdHlsZS52aXNpYmlsaXR5ID0gImhpZGRlbiI7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGVsLnN0eWxlLnZpc2liaWxpdHkgPSAiaW5oZXJpdCI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICghZWxlbWVudERhdGEoZWwsICJpbml0aWFsaXplZCIpKSB7CiAgICAgICAgICBpbml0U2l6aW5nKGVsKTsKCiAgICAgICAgICBlbGVtZW50RGF0YShlbCwgImluaXRpYWxpemVkIiwgdHJ1ZSk7CiAgICAgICAgICBpZiAoYmluZGluZ0RlZi5pbml0aWFsaXplKSB7CiAgICAgICAgICAgIHZhciByZXN1bHQgPSBiaW5kaW5nRGVmLmluaXRpYWxpemUoZWwsIGVsLm9mZnNldFdpZHRoLAogICAgICAgICAgICAgIGVsLm9mZnNldEhlaWdodCk7CiAgICAgICAgICAgIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiLCByZXN1bHQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBiaW5kaW5nRGVmLnJlbmRlclZhbHVlKGVsLCBkYXRhLngsIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiKSk7CiAgICAgICAgZXZhbEFuZFJ1bihkYXRhLmpzSG9va3MucmVuZGVyLCBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0IiksIFtlbCwgZGF0YS54XSk7CiAgICAgIH07CgogICAgICAvLyBPbmx5IG92ZXJyaWRlIHJlc2l6ZSBpZiBiaW5kaW5nRGVmIGltcGxlbWVudHMgaXQKICAgICAgaWYgKGJpbmRpbmdEZWYucmVzaXplKSB7CiAgICAgICAgc2hpbnlCaW5kaW5nLnJlc2l6ZSA9IGZ1bmN0aW9uKGVsLCB3aWR0aCwgaGVpZ2h0KSB7CiAgICAgICAgICAvLyBTaGlueSBjYW4gY2FsbCByZXNpemUgYmVmb3JlIGluaXRpYWxpemUvcmVuZGVyVmFsdWUgaGF2ZSBiZWVuCiAgICAgICAgICAvLyBjYWxsZWQsIHdoaWNoIGRvZXNuJ3QgbWFrZSBzZW5zZSBmb3Igd2lkZ2V0cy4KICAgICAgICAgIGlmIChlbGVtZW50RGF0YShlbCwgImluaXRpYWxpemVkIikpIHsKICAgICAgICAgICAgYmluZGluZ0RlZi5yZXNpemUoZWwsIHdpZHRoLCBoZWlnaHQsIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiKSk7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgfQoKICAgICAgU2hpbnkub3V0cHV0QmluZGluZ3MucmVnaXN0ZXIoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLm5hbWUpOwogICAgfQogIH07CgogIHZhciBzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQgPSBudWxsOwogIGZ1bmN0aW9uIHNjaGVkdWxlU3RhdGljUmVuZGVyKCkgewogICAgaWYgKCFzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQpIHsKICAgICAgc2NoZWR1bGVTdGF0aWNSZW5kZXJUaW1lcklkID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICBzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQgPSBudWxsOwogICAgICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy5zdGF0aWNSZW5kZXIoKTsKICAgICAgfSwgMSk7CiAgICB9CiAgfQoKICAvLyBSZW5kZXIgc3RhdGljIHdpZGdldHMgYWZ0ZXIgdGhlIGRvY3VtZW50IGZpbmlzaGVzIGxvYWRpbmcKICAvLyBTdGF0aWNhbGx5IHJlbmRlciBhbGwgZWxlbWVudHMgdGhhdCBhcmUgb2YgdGhpcyB3aWRnZXQncyBjbGFzcwogIHdpbmRvdy5IVE1MV2lkZ2V0cy5zdGF0aWNSZW5kZXIgPSBmdW5jdGlvbigpIHsKICAgIHZhciBiaW5kaW5ncyA9IHdpbmRvdy5IVE1MV2lkZ2V0cy53aWRnZXRzIHx8IFtdOwogICAgZm9yRWFjaChiaW5kaW5ncywgZnVuY3Rpb24oYmluZGluZykgewogICAgICB2YXIgbWF0Y2hlcyA9IGJpbmRpbmcuZmluZChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpOwogICAgICBmb3JFYWNoKG1hdGNoZXMsIGZ1bmN0aW9uKGVsKSB7CiAgICAgICAgdmFyIHNpemVPYmogPSBpbml0U2l6aW5nKGVsLCBiaW5kaW5nKTsKCiAgICAgICAgaWYgKGhhc0NsYXNzKGVsLCAiaHRtbC13aWRnZXQtc3RhdGljLWJvdW5kIikpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgZWwuY2xhc3NOYW1lID0gZWwuY2xhc3NOYW1lICsgIiBodG1sLXdpZGdldC1zdGF0aWMtYm91bmQiOwoKICAgICAgICB2YXIgaW5pdFJlc3VsdDsKICAgICAgICBpZiAoYmluZGluZy5pbml0aWFsaXplKSB7CiAgICAgICAgICBpbml0UmVzdWx0ID0gYmluZGluZy5pbml0aWFsaXplKGVsLAogICAgICAgICAgICBzaXplT2JqID8gc2l6ZU9iai5nZXRXaWR0aCgpIDogZWwub2Zmc2V0V2lkdGgsCiAgICAgICAgICAgIHNpemVPYmogPyBzaXplT2JqLmdldEhlaWdodCgpIDogZWwub2Zmc2V0SGVpZ2h0CiAgICAgICAgICApOwogICAgICAgICAgZWxlbWVudERhdGEoZWwsICJpbml0X3Jlc3VsdCIsIGluaXRSZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgaWYgKGJpbmRpbmcucmVzaXplKSB7CiAgICAgICAgICB2YXIgbGFzdFNpemUgPSB7fTsKICAgICAgICAgIHZhciByZXNpemVIYW5kbGVyID0gZnVuY3Rpb24oZSkgewogICAgICAgICAgICB2YXIgc2l6ZSA9IHsKICAgICAgICAgICAgICB3OiBzaXplT2JqID8gc2l6ZU9iai5nZXRXaWR0aCgpIDogZWwub2Zmc2V0V2lkdGgsCiAgICAgICAgICAgICAgaDogc2l6ZU9iaiA/IHNpemVPYmouZ2V0SGVpZ2h0KCkgOiBlbC5vZmZzZXRIZWlnaHQKICAgICAgICAgICAgfTsKICAgICAgICAgICAgaWYgKHNpemUudyA9PT0gMCAmJiBzaXplLmggPT09IDApCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoc2l6ZS53ID09PSBsYXN0U2l6ZS53ICYmIHNpemUuaCA9PT0gbGFzdFNpemUuaCkKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGxhc3RTaXplID0gc2l6ZTsKICAgICAgICAgICAgYmluZGluZy5yZXNpemUoZWwsIHNpemUudywgc2l6ZS5oLCBpbml0UmVzdWx0KTsKICAgICAgICAgIH07CgogICAgICAgICAgb24od2luZG93LCAicmVzaXplIiwgcmVzaXplSGFuZGxlcik7CgogICAgICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgZm9yIGNhc2VzIHdoZXJlIHdlJ3JlIHJ1bm5pbmcgaW4gYSBTaGlueQogICAgICAgICAgLy8gYXBwLCBidXQgdGhlIHdpZGdldCBpdHNlbGYgaXMgbm90IGEgU2hpbnkgb3V0cHV0LCBidXQKICAgICAgICAgIC8vIHJhdGhlciBhIHNpbXBsZSBzdGF0aWMgd2lkZ2V0LiBPbmUgZXhhbXBsZSBvZiB0aGlzIGlzCiAgICAgICAgICAvLyBhbiBybWFya2Rvd24gZG9jdW1lbnQgdGhhdCBoYXMgcnVudGltZTpzaGlueSBhbmQgd2lkZ2V0CiAgICAgICAgICAvLyB0aGF0IGlzbid0IGluIGEgcmVuZGVyIGZ1bmN0aW9uLiBTaGlueSBvbmx5IGtub3dzIHRvCiAgICAgICAgICAvLyBjYWxsIHJlc2l6ZSBoYW5kbGVycyBmb3IgU2hpbnkgb3V0cHV0cywgbm90IGZvciBzdGF0aWMKICAgICAgICAgIC8vIHdpZGdldHMsIHNvIHdlIGRvIGl0IG91cnNlbHZlcy4KICAgICAgICAgIGlmICh3aW5kb3cualF1ZXJ5KSB7CiAgICAgICAgICAgIHdpbmRvdy5qUXVlcnkoZG9jdW1lbnQpLm9uKAogICAgICAgICAgICAgICJzaG93bi5odG1sd2lkZ2V0cyBzaG93bi5icy50YWIuaHRtbHdpZGdldHMgc2hvd24uYnMuY29sbGFwc2UuaHRtbHdpZGdldHMiLAogICAgICAgICAgICAgIHJlc2l6ZUhhbmRsZXIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgd2luZG93LmpRdWVyeShkb2N1bWVudCkub24oCiAgICAgICAgICAgICAgImhpZGRlbi5odG1sd2lkZ2V0cyBoaWRkZW4uYnMudGFiLmh0bWx3aWRnZXRzIGhpZGRlbi5icy5jb2xsYXBzZS5odG1sd2lkZ2V0cyIsCiAgICAgICAgICAgICAgcmVzaXplSGFuZGxlcgogICAgICAgICAgICApOwogICAgICAgICAgfQoKICAgICAgICAgIC8vIFRoaXMgaXMgbmVlZGVkIGZvciB0aGUgc3BlY2lmaWMgY2FzZSBvZiBpb3NsaWRlcywgd2hpY2gKICAgICAgICAgIC8vIGZsaXBzIHNsaWRlcyBiZXR3ZWVuIGRpc3BsYXk6bm9uZSBhbmQgZGlzcGxheTpibG9jay4KICAgICAgICAgIC8vIElkZWFsbHkgd2Ugd291bGQgbm90IGhhdmUgdG8gaGF2ZSBpb3NsaWRlLXNwZWNpZmljIGNvZGUKICAgICAgICAgIC8vIGhlcmUsIGJ1dCByYXRoZXIgaGF2ZSBpb3NsaWRlcyByYWlzZSBhIGdlbmVyaWMgZXZlbnQsCiAgICAgICAgICAvLyBidXQgdGhlIHJtYXJrZG93biBwYWNrYWdlIGp1c3Qgd2VudCB0byBDUkFOIHNvIHRoZQogICAgICAgICAgLy8gd2luZG93IHRvIGdldHRpbmcgdGhhdCBmaXhlZCBtYXkgYmUgbG9uZy4KICAgICAgICAgIGlmICh3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikgewogICAgICAgICAgICAvLyBJdCdzIE9LIHRvIGxpbWl0IHRoaXMgdG8gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIKICAgICAgICAgICAgLy8gYnJvd3NlcnMgYmVjYXVzZSBpb3NsaWRlcyBpdHNlbGYgb25seSBzdXBwb3J0cwogICAgICAgICAgICAvLyBzdWNoIGJyb3dzZXJzLgogICAgICAgICAgICBvbihkb2N1bWVudCwgInNsaWRlZW50ZXIiLCByZXNpemVIYW5kbGVyKTsKICAgICAgICAgICAgb24oZG9jdW1lbnQsICJzbGlkZWxlYXZlIiwgcmVzaXplSGFuZGxlcik7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB2YXIgc2NyaXB0RGF0YSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInNjcmlwdFtkYXRhLWZvcj0nIiArIGVsLmlkICsgIiddW3R5cGU9J2FwcGxpY2F0aW9uL2pzb24nXSIpOwogICAgICAgIGlmIChzY3JpcHREYXRhKSB7CiAgICAgICAgICB2YXIgZGF0YSA9IEpTT04ucGFyc2Uoc2NyaXB0RGF0YS50ZXh0Q29udGVudCB8fCBzY3JpcHREYXRhLnRleHQpOwogICAgICAgICAgLy8gUmVzb2x2ZSBzdHJpbmdzIG1hcmtlZCBhcyBqYXZhc2NyaXB0IGxpdGVyYWxzIHRvIG9iamVjdHMKICAgICAgICAgIGlmICghKGRhdGEuZXZhbHMgaW5zdGFuY2VvZiBBcnJheSkpIGRhdGEuZXZhbHMgPSBbZGF0YS5ldmFsc107CiAgICAgICAgICBmb3IgKHZhciBrID0gMDsgZGF0YS5ldmFscyAmJiBrIDwgZGF0YS5ldmFscy5sZW5ndGg7IGsrKykgewogICAgICAgICAgICB3aW5kb3cuSFRNTFdpZGdldHMuZXZhbHVhdGVTdHJpbmdNZW1iZXIoZGF0YS54LCBkYXRhLmV2YWxzW2tdKTsKICAgICAgICAgIH0KICAgICAgICAgIGJpbmRpbmcucmVuZGVyVmFsdWUoZWwsIGRhdGEueCwgaW5pdFJlc3VsdCk7CiAgICAgICAgICBldmFsQW5kUnVuKGRhdGEuanNIb29rcy5yZW5kZXIsIGluaXRSZXN1bHQsIFtlbCwgZGF0YS54XSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwoKICAgIGludm9rZVBvc3RSZW5kZXJIYW5kbGVycygpOwogIH0KCiAgLy8gV2FpdCB1bnRpbCBhZnRlciB0aGUgZG9jdW1lbnQgaGFzIGxvYWRlZCB0byByZW5kZXIgdGhlIHdpZGdldHMuCiAgaWYgKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHsKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCBmdW5jdGlvbigpIHsKICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsIGFyZ3VtZW50cy5jYWxsZWUsIGZhbHNlKTsKICAgICAgd2luZG93LkhUTUxXaWRnZXRzLnN0YXRpY1JlbmRlcigpOwogICAgfSwgZmFsc2UpOwogIH0gZWxzZSBpZiAoZG9jdW1lbnQuYXR0YWNoRXZlbnQpIHsKICAgIGRvY3VtZW50LmF0dGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCBmdW5jdGlvbigpIHsKICAgICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICJjb21wbGV0ZSIpIHsKICAgICAgICBkb2N1bWVudC5kZXRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIiwgYXJndW1lbnRzLmNhbGxlZSk7CiAgICAgICAgd2luZG93LkhUTUxXaWRnZXRzLnN0YXRpY1JlbmRlcigpOwogICAgICB9CiAgICB9KTsKICB9CgoKICB3aW5kb3cuSFRNTFdpZGdldHMuZ2V0QXR0YWNobWVudFVybCA9IGZ1bmN0aW9uKGRlcG5hbWUsIGtleSkgewogICAgLy8gSWYgbm8ga2V5LCBkZWZhdWx0IHRvIHRoZSBmaXJzdCBpdGVtCiAgICBpZiAodHlwZW9mKGtleSkgPT09ICJ1bmRlZmluZWQiKQogICAgICBrZXkgPSAxOwoKICAgIHZhciBsaW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZGVwbmFtZSArICItIiArIGtleSArICItYXR0YWNobWVudCIpOwogICAgaWYgKCFsaW5rKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiQXR0YWNobWVudCAiICsgZGVwbmFtZSArICIvIiArIGtleSArICIgbm90IGZvdW5kIGluIGRvY3VtZW50Iik7CiAgICB9CiAgICByZXR1cm4gbGluay5nZXRBdHRyaWJ1dGUoImhyZWYiKTsKICB9OwoKICB3aW5kb3cuSFRNTFdpZGdldHMuZGF0YWZyYW1lVG9EMyA9IGZ1bmN0aW9uKGRmKSB7CiAgICB2YXIgbmFtZXMgPSBbXTsKICAgIHZhciBsZW5ndGg7CiAgICBmb3IgKHZhciBuYW1lIGluIGRmKSB7CiAgICAgICAgaWYgKGRmLmhhc093blByb3BlcnR5KG5hbWUpKQogICAgICAgICAgICBuYW1lcy5wdXNoKG5hbWUpOwogICAgICAgIGlmICh0eXBlb2YoZGZbbmFtZV0pICE9PSAib2JqZWN0IiB8fCB0eXBlb2YoZGZbbmFtZV0ubGVuZ3RoKSA9PT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJBbGwgZmllbGRzIG11c3QgYmUgYXJyYXlzIik7CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YobGVuZ3RoKSAhPT0gInVuZGVmaW5lZCIgJiYgbGVuZ3RoICE9PSBkZltuYW1lXS5sZW5ndGgpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJBbGwgZmllbGRzIG11c3QgYmUgYXJyYXlzIG9mIHRoZSBzYW1lIGxlbmd0aCIpOwogICAgICAgIH0KICAgICAgICBsZW5ndGggPSBkZltuYW1lXS5sZW5ndGg7CiAgICB9CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgdmFyIGl0ZW07CiAgICBmb3IgKHZhciByb3cgPSAwOyByb3cgPCBsZW5ndGg7IHJvdysrKSB7CiAgICAgICAgaXRlbSA9IHt9OwogICAgICAgIGZvciAodmFyIGNvbCA9IDA7IGNvbCA8IG5hbWVzLmxlbmd0aDsgY29sKyspIHsKICAgICAgICAgICAgaXRlbVtuYW1lc1tjb2xdXSA9IGRmW25hbWVzW2NvbF1dW3Jvd107CiAgICAgICAgfQogICAgICAgIHJlc3VsdHMucHVzaChpdGVtKTsKICAgIH0KICAgIHJldHVybiByZXN1bHRzOwogIH07CgogIHdpbmRvdy5IVE1MV2lkZ2V0cy50cmFuc3Bvc2VBcnJheTJEID0gZnVuY3Rpb24oYXJyYXkpIHsKICAgICAgaWYgKGFycmF5Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIGFycmF5OwogICAgICB2YXIgbmV3QXJyYXkgPSBhcnJheVswXS5tYXAoZnVuY3Rpb24oY29sLCBpKSB7CiAgICAgICAgICByZXR1cm4gYXJyYXkubWFwKGZ1bmN0aW9uKHJvdykgewogICAgICAgICAgICAgIHJldHVybiByb3dbaV0KICAgICAgICAgIH0pCiAgICAgIH0pOwogICAgICByZXR1cm4gbmV3QXJyYXk7CiAgfTsKICAvLyBTcGxpdCB2YWx1ZSBhdCBzcGxpdENoYXIsIGJ1dCBhbGxvdyBzcGxpdENoYXIgdG8gYmUgZXNjYXBlZAogIC8vIHVzaW5nIGVzY2FwZUNoYXIuIEFueSBvdGhlciBjaGFyYWN0ZXJzIGVzY2FwZWQgYnkgZXNjYXBlQ2hhcgogIC8vIHdpbGwgYmUgaW5jbHVkZWQgYXMgdXN1YWwgKGluY2x1ZGluZyBlc2NhcGVDaGFyIGl0c2VsZikuCiAgZnVuY3Rpb24gc3BsaXRXaXRoRXNjYXBlKHZhbHVlLCBzcGxpdENoYXIsIGVzY2FwZUNoYXIpIHsKICAgIHZhciByZXN1bHRzID0gW107CiAgICB2YXIgZXNjYXBlTW9kZSA9IGZhbHNlOwogICAgdmFyIGN1cnJlbnRSZXN1bHQgPSAiIjsKICAgIGZvciAodmFyIHBvcyA9IDA7IHBvcyA8IHZhbHVlLmxlbmd0aDsgcG9zKyspIHsKICAgICAgaWYgKCFlc2NhcGVNb2RlKSB7CiAgICAgICAgaWYgKHZhbHVlW3Bvc10gPT09IHNwbGl0Q2hhcikgewogICAgICAgICAgcmVzdWx0cy5wdXNoKGN1cnJlbnRSZXN1bHQpOwogICAgICAgICAgY3VycmVudFJlc3VsdCA9ICIiOwogICAgICAgIH0gZWxzZSBpZiAodmFsdWVbcG9zXSA9PT0gZXNjYXBlQ2hhcikgewogICAgICAgICAgZXNjYXBlTW9kZSA9IHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGN1cnJlbnRSZXN1bHQgKz0gdmFsdWVbcG9zXTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY3VycmVudFJlc3VsdCArPSB2YWx1ZVtwb3NdOwogICAgICAgIGVzY2FwZU1vZGUgPSBmYWxzZTsKICAgICAgfQogICAgfQogICAgaWYgKGN1cnJlbnRSZXN1bHQgIT09ICIiKSB7CiAgICAgIHJlc3VsdHMucHVzaChjdXJyZW50UmVzdWx0KTsKICAgIH0KICAgIHJldHVybiByZXN1bHRzOwogIH0KICAvLyBGdW5jdGlvbiBhdXRob3JlZCBieSBZaWh1aS9KSiBBbGxhaXJlCiAgd2luZG93LkhUTUxXaWRnZXRzLmV2YWx1YXRlU3RyaW5nTWVtYmVyID0gZnVuY3Rpb24obywgbWVtYmVyKSB7CiAgICB2YXIgcGFydHMgPSBzcGxpdFdpdGhFc2NhcGUobWVtYmVyLCAnLicsICdcXCcpOwogICAgZm9yICh2YXIgaSA9IDAsIGwgPSBwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKICAgICAgdmFyIHBhcnQgPSBwYXJ0c1tpXTsKICAgICAgLy8gcGFydCBtYXkgYmUgYSBjaGFyYWN0ZXIgb3IgJ251bWVyaWMnIG1lbWJlciBuYW1lCiAgICAgIGlmIChvICE9PSBudWxsICYmIHR5cGVvZiBvID09PSAib2JqZWN0IiAmJiBwYXJ0IGluIG8pIHsKICAgICAgICBpZiAoaSA9PSAobCAtIDEpKSB7IC8vIGlmIHdlIGFyZSBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lIHRoZW4gZXZhbHVsYXRlCiAgICAgICAgICBpZiAodHlwZW9mIG9bcGFydF0gPT09ICJzdHJpbmciKQogICAgICAgICAgICBvW3BhcnRdID0gZXZhbCgiKCIgKyBvW3BhcnRdICsgIikiKTsKICAgICAgICB9IGVsc2UgeyAvLyBvdGhlcndpc2UgY29udGludWUgdG8gbmV4dCBlbWJlZGRlZCBvYmplY3QKICAgICAgICAgIG8gPSBvW3BhcnRdOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH07CgogIC8vIFJldHJpZXZlIHRoZSBIVE1MV2lkZ2V0IGluc3RhbmNlIChpLmUuIHRoZSByZXR1cm4gdmFsdWUgb2YgYW4KICAvLyBIVE1MV2lkZ2V0IGJpbmRpbmcncyBpbml0aWFsaXplKCkgb3IgZmFjdG9yeSgpIGZ1bmN0aW9uKQogIC8vIGFzc29jaWF0ZWQgd2l0aCBhbiBlbGVtZW50LCBvciBudWxsIGlmIG5vbmUuCiAgd2luZG93LkhUTUxXaWRnZXRzLmdldEluc3RhbmNlID0gZnVuY3Rpb24oZWwpIHsKICAgIHJldHVybiBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0Iik7CiAgfTsKCiAgLy8gRmluZHMgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIHNjb3BlIHRoYXQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IsCiAgLy8gYW5kIHJldHVybnMgdGhlIEhUTUxXaWRnZXQgaW5zdGFuY2UgKGkuZS4gdGhlIHJldHVybiB2YWx1ZSBvZgogIC8vIGFuIEhUTUxXaWRnZXQgYmluZGluZydzIGluaXRpYWxpemUoKSBvciBmYWN0b3J5KCkgZnVuY3Rpb24pCiAgLy8gYXNzb2NpYXRlZCB3aXRoIHRoYXQgZWxlbWVudCwgaWYgYW55LiBJZiBubyBlbGVtZW50IG1hdGNoZXMgdGhlCiAgLy8gc2VsZWN0b3IsIG9yIHRoZSBmaXJzdCBtYXRjaGluZyBlbGVtZW50IGhhcyBubyBIVE1MV2lkZ2V0CiAgLy8gaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIGl0LCB0aGVuIG51bGwgaXMgcmV0dXJuZWQuCiAgLy8KICAvLyBUaGUgc2NvcGUgYXJndW1lbnQgaXMgb3B0aW9uYWwsIGFuZCBkZWZhdWx0cyB0byB3aW5kb3cuZG9jdW1lbnQuCiAgd2luZG93LkhUTUxXaWRnZXRzLmZpbmQgPSBmdW5jdGlvbihzY29wZSwgc2VsZWN0b3IpIHsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgc2VsZWN0b3IgPSBzY29wZTsKICAgICAgc2NvcGUgPSBkb2N1bWVudDsKICAgIH0KCiAgICB2YXIgZWwgPSBzY29wZS5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTsKICAgIGlmIChlbCA9PT0gbnVsbCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiB3aW5kb3cuSFRNTFdpZGdldHMuZ2V0SW5zdGFuY2UoZWwpOwogICAgfQogIH07CgogIC8vIEZpbmRzIGFsbCBlbGVtZW50cyBpbiB0aGUgc2NvcGUgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3IsIGFuZAogIC8vIHJldHVybnMgdGhlIEhUTUxXaWRnZXQgaW5zdGFuY2VzIChpLmUuIHRoZSByZXR1cm4gdmFsdWVzIG9mCiAgLy8gYW4gSFRNTFdpZGdldCBiaW5kaW5nJ3MgaW5pdGlhbGl6ZSgpIG9yIGZhY3RvcnkoKSBmdW5jdGlvbikKICAvLyBhc3NvY2lhdGVkIHdpdGggdGhlIGVsZW1lbnRzLCBpbiBhbiBhcnJheS4gSWYgZWxlbWVudHMgdGhhdAogIC8vIG1hdGNoIHRoZSBzZWxlY3RvciBkb24ndCBoYXZlIGFuIGFzc29jaWF0ZWQgSFRNTFdpZGdldAogIC8vIGluc3RhbmNlLCB0aGUgcmV0dXJuZWQgYXJyYXkgd2lsbCBjb250YWluIG51bGxzLgogIC8vCiAgLy8gVGhlIHNjb3BlIGFyZ3VtZW50IGlzIG9wdGlvbmFsLCBhbmQgZGVmYXVsdHMgdG8gd2luZG93LmRvY3VtZW50LgogIHdpbmRvdy5IVE1MV2lkZ2V0cy5maW5kQWxsID0gZnVuY3Rpb24oc2NvcGUsIHNlbGVjdG9yKSB7CiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CiAgICAgIHNlbGVjdG9yID0gc2NvcGU7CiAgICAgIHNjb3BlID0gZG9jdW1lbnQ7CiAgICB9CgogICAgdmFyIG5vZGVzID0gc2NvcGUucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykgewogICAgICByZXN1bHRzLnB1c2god2luZG93LkhUTUxXaWRnZXRzLmdldEluc3RhbmNlKG5vZGVzW2ldKSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0czsKICB9OwoKICB2YXIgcG9zdFJlbmRlckhhbmRsZXJzID0gW107CiAgZnVuY3Rpb24gaW52b2tlUG9zdFJlbmRlckhhbmRsZXJzKCkgewogICAgd2hpbGUgKHBvc3RSZW5kZXJIYW5kbGVycy5sZW5ndGgpIHsKICAgICAgdmFyIGhhbmRsZXIgPSBwb3N0UmVuZGVySGFuZGxlcnMuc2hpZnQoKTsKICAgICAgaWYgKGhhbmRsZXIpIHsKICAgICAgICBoYW5kbGVyKCk7CiAgICAgIH0KICAgIH0KICB9CgogIC8vIFJlZ2lzdGVyIHRoZSBnaXZlbiBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBpbnZva2VkIGFmdGVyIHRoZQogIC8vIG5leHQgdGltZSBzdGF0aWMgd2lkZ2V0cyBhcmUgcmVuZGVyZWQuCiAgd2luZG93LkhUTUxXaWRnZXRzLmFkZFBvc3RSZW5kZXJIYW5kbGVyID0gZnVuY3Rpb24oY2FsbGJhY2spIHsKICAgIHBvc3RSZW5kZXJIYW5kbGVycy5wdXNoKGNhbGxiYWNrKTsKICB9OwoKICAvLyBUYWtlcyBhIG5ldy1zdHlsZSBpbnN0YW5jZS1ib3VuZCBkZWZpbml0aW9uLCBhbmQgcmV0dXJucyBhbgogIC8vIG9sZC1zdHlsZSBjbGFzcy1ib3VuZCBkZWZpbml0aW9uLiBUaGlzIHNhdmVzIHVzIGZyb20gaGF2aW5nCiAgLy8gdG8gcmV3cml0ZSBhbGwgdGhlIGxvZ2ljIGluIHRoaXMgZmlsZSB0byBhY2NvbW9kYXRlIGJvdGgKICAvLyB0eXBlcyBvZiBkZWZpbml0aW9ucy4KICBmdW5jdGlvbiBjcmVhdGVMZWdhY3lEZWZpbml0aW9uQWRhcHRlcihkZWZuKSB7CiAgICB2YXIgcmVzdWx0ID0gewogICAgICBuYW1lOiBkZWZuLm5hbWUsCiAgICAgIHR5cGU6IGRlZm4udHlwZSwKICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oZWwsIHdpZHRoLCBoZWlnaHQpIHsKICAgICAgICByZXR1cm4gZGVmbi5mYWN0b3J5KGVsLCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgfSwKICAgICAgcmVuZGVyVmFsdWU6IGZ1bmN0aW9uKGVsLCB4LCBpbnN0YW5jZSkgewogICAgICAgIHJldHVybiBpbnN0YW5jZS5yZW5kZXJWYWx1ZSh4KTsKICAgICAgfSwKICAgICAgcmVzaXplOiBmdW5jdGlvbihlbCwgd2lkdGgsIGhlaWdodCwgaW5zdGFuY2UpIHsKICAgICAgICByZXR1cm4gaW5zdGFuY2UucmVzaXplKHdpZHRoLCBoZWlnaHQpOwogICAgICB9CiAgICB9OwoKICAgIGlmIChkZWZuLmZpbmQpCiAgICAgIHJlc3VsdC5maW5kID0gZGVmbi5maW5kOwogICAgaWYgKGRlZm4ucmVuZGVyRXJyb3IpCiAgICAgIHJlc3VsdC5yZW5kZXJFcnJvciA9IGRlZm4ucmVuZGVyRXJyb3I7CiAgICBpZiAoZGVmbi5jbGVhckVycm9yKQogICAgICByZXN1bHQuY2xlYXJFcnJvciA9IGRlZm4uY2xlYXJFcnJvcjsKCiAgICByZXR1cm4gcmVzdWx0OwogIH0KfSkoKTsKCg=="></script>
<script src="data:application/x-javascript;base64,Ly8gaHR0cHM6Ly9kM2pzLm9yZyBWZXJzaW9uIDQuNS4wLiBDb3B5cmlnaHQgMjAxNyBNaWtlIEJvc3RvY2suDQooZnVuY3Rpb24odCxuKXsib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHMmJiJ1bmRlZmluZWQiIT10eXBlb2YgbW9kdWxlP24oZXhwb3J0cyk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoWyJleHBvcnRzIl0sbik6bih0LmQzPXQuZDN8fHt9KX0pKHRoaXMsZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7cmV0dXJuIGZ1bmN0aW9uKG4sZSl7cmV0dXJuIE5zKHQobiksZSl9fWZ1bmN0aW9uIGUodCxuLGUpe3ZhciByPU1hdGguYWJzKG4tdCkvTWF0aC5tYXgoMCxlKSxpPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2cocikvTWF0aC5MTjEwKSksbz1yL2k7cmV0dXJuIG8+PVlzP2kqPTEwOm8+PUJzP2kqPTU6bz49anMmJihpKj0yKSxuPHQ/LWk6aX1mdW5jdGlvbiByKHQpe3JldHVybiB0Lmxlbmd0aH1mdW5jdGlvbiBpKHQsbixlKXt2YXIgcj10KGUpO3JldHVybiJ0cmFuc2xhdGUoIisoaXNGaW5pdGUocik/cjpuKGUpKSsiLDApIn1mdW5jdGlvbiBvKHQsbixlKXt2YXIgcj10KGUpO3JldHVybiJ0cmFuc2xhdGUoMCwiKyhpc0Zpbml0ZShyKT9yOm4oZSkpKyIpIn1mdW5jdGlvbiB1KHQpe3ZhciBuPXQuYmFuZHdpZHRoKCkvMjtyZXR1cm4gdC5yb3VuZCgpJiYobj1NYXRoLnJvdW5kKG4pKSxmdW5jdGlvbihlKXtyZXR1cm4gdChlKStufX1mdW5jdGlvbiBhKCl7cmV0dXJuIXRoaXMuX19heGlzfWZ1bmN0aW9uIGModCxuKXtmdW5jdGlvbiBlKGUpe3ZhciBwLGQ9bnVsbD09Yz9uLnRpY2tzP24udGlja3MuYXBwbHkobixyKTpuLmRvbWFpbigpOmMsdj1udWxsPT1zP24udGlja0Zvcm1hdD9uLnRpY2tGb3JtYXQuYXBwbHkobixyKTpmZjpzLF89TWF0aC5tYXgoZiwwKStoLHk9dD09PWxmfHx0PT09cGY/aTpvLGc9bi5yYW5nZSgpLG09Z1swXSsuNSx4PWdbZy5sZW5ndGgtMV0rLjUsYj0obi5iYW5kd2lkdGg/dTpmZikobi5jb3B5KCkpLHc9ZS5zZWxlY3Rpb24/ZS5zZWxlY3Rpb24oKTplLE09dy5zZWxlY3RBbGwoIi5kb21haW4iKS5kYXRhKFtudWxsXSksVD13LnNlbGVjdEFsbCgiLnRpY2siKS5kYXRhKGQsbikub3JkZXIoKSxOPVQuZXhpdCgpLGs9VC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidGljayIpLFM9VC5zZWxlY3QoImxpbmUiKSxFPVQuc2VsZWN0KCJ0ZXh0IiksQT10PT09bGZ8fHQ9PT1kZj8tMToxLEM9dD09PWRmfHx0PT09aGY/KHA9IngiLCJ5Iik6KHA9InkiLCJ4Iik7TT1NLm1lcmdlKE0uZW50ZXIoKS5pbnNlcnQoInBhdGgiLCIudGljayIpLmF0dHIoImNsYXNzIiwiZG9tYWluIikuYXR0cigic3Ryb2tlIiwiIzAwMCIpKSxUPVQubWVyZ2UoayksUz1TLm1lcmdlKGsuYXBwZW5kKCJsaW5lIikuYXR0cigic3Ryb2tlIiwiIzAwMCIpLmF0dHIocCsiMiIsQSpmKS5hdHRyKEMrIjEiLC41KS5hdHRyKEMrIjIiLC41KSksRT1FLm1lcmdlKGsuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZmlsbCIsIiMwMDAiKS5hdHRyKHAsQSpfKS5hdHRyKEMsLjUpLmF0dHIoImR5Iix0PT09bGY/IjBlbSI6dD09PXBmPyIwLjcxZW0iOiIwLjMyZW0iKSksZSE9PXcmJihNPU0udHJhbnNpdGlvbihlKSxUPVQudHJhbnNpdGlvbihlKSxTPVMudHJhbnNpdGlvbihlKSxFPUUudHJhbnNpdGlvbihlKSxOPU4udHJhbnNpdGlvbihlKS5hdHRyKCJvcGFjaXR5Iix2ZikuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXtyZXR1cm4geShiLHRoaXMucGFyZW50Tm9kZS5fX2F4aXN8fGIsdCl9KSxrLmF0dHIoIm9wYWNpdHkiLHZmKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3JldHVybiB5KHRoaXMucGFyZW50Tm9kZS5fX2F4aXN8fGIsYix0KX0pKSxOLnJlbW92ZSgpLE0uYXR0cigiZCIsdD09PWRmfHx0PT1oZj8iTSIrQSpsKyIsIittKyJIMC41ViIreCsiSCIrQSpsOiJNIittKyIsIitBKmwrIlYwLjVIIit4KyJWIitBKmwpLFQuYXR0cigib3BhY2l0eSIsMSkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXtyZXR1cm4geShiLGIsdCl9KSxTLmF0dHIocCsiMiIsQSpmKSxFLmF0dHIocCxBKl8pLnRleHQodiksdy5maWx0ZXIoYSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKS5hdHRyKCJmb250LWZhbWlseSIsInNhbnMtc2VyaWYiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsdD09PWhmPyJzdGFydCI6dD09PWRmPyJlbmQiOiJtaWRkbGUiKSx3LmVhY2goZnVuY3Rpb24oKXt0aGlzLl9fYXhpcz1ifSl9dmFyIHI9W10sYz1udWxsLHM9bnVsbCxmPTYsbD02LGg9MztyZXR1cm4gZS5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGUpOm59LGUudGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gcj1zZi5jYWxsKGFyZ3VtZW50cyksZX0sZS50aWNrQXJndW1lbnRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW51bGw9PXQ/W106c2YuY2FsbCh0KSxlKTpyLnNsaWNlKCl9LGUudGlja1ZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1udWxsPT10P251bGw6c2YuY2FsbCh0KSxlKTpjJiZjLnNsaWNlKCl9LGUudGlja0Zvcm1hdD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10LGUpOnN9LGUudGlja1NpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9bD0rdCxlKTpmfSxlLnRpY2tTaXplSW5uZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9K3QsZSk6Zn0sZS50aWNrU2l6ZU91dGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPSt0LGUpOmx9LGUudGlja1BhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9K3QsZSk6aH0sZX1mdW5jdGlvbiBzKHQpe3JldHVybiBjKGxmLHQpfWZ1bmN0aW9uIGYodCl7cmV0dXJuIGMoaGYsdCl9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gYyhwZix0KX1mdW5jdGlvbiBoKHQpe3JldHVybiBjKGRmLHQpfWZ1bmN0aW9uIHAoKXtmb3IodmFyIHQsbj0wLGU9YXJndW1lbnRzLmxlbmd0aCxyPXt9O248ZTsrK24pe2lmKCEodD1hcmd1bWVudHNbbl0rIiIpfHx0IGluIHIpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrdCk7clt0XT1bXX1yZXR1cm4gbmV3IGQocil9ZnVuY3Rpb24gZCh0KXt0aGlzLl89dH1mdW5jdGlvbiB2KHQsbil7cmV0dXJuIHQudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbih0KXt2YXIgZT0iIixyPXQuaW5kZXhPZigiLiIpO2lmKHI+PTAmJihlPXQuc2xpY2UocisxKSx0PXQuc2xpY2UoMCxyKSksdCYmIW4uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7cmV0dXJue3R5cGU6dCxuYW1lOmV9fSl9ZnVuY3Rpb24gXyh0LG4pe2Zvcih2YXIgZSxyPTAsaT10Lmxlbmd0aDtyPGk7KytyKWlmKChlPXRbcl0pLm5hbWU9PT1uKXJldHVybiBlLnZhbHVlfWZ1bmN0aW9uIHkodCxuLGUpe2Zvcih2YXIgcj0wLGk9dC5sZW5ndGg7cjxpOysrcilpZih0W3JdLm5hbWU9PT1uKXt0W3JdPV9mLHQ9dC5zbGljZSgwLHIpLmNvbmNhdCh0LnNsaWNlKHIrMSkpO2JyZWFrfXJldHVybiBudWxsIT1lJiZ0LnB1c2goe25hbWU6bix2YWx1ZTplfSksdH1mdW5jdGlvbiBnKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXRoaXMub3duZXJEb2N1bWVudCxlPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiBlPT09eWYmJm4uZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PXlmP24uY3JlYXRlRWxlbWVudCh0KTpuLmNyZWF0ZUVsZW1lbnROUyhlLHQpfX1mdW5jdGlvbiBtKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIHgoKXtyZXR1cm4gbmV3IGJ9ZnVuY3Rpb24gYigpe3RoaXMuXz0iQCIrKCsrYmYpLnRvU3RyaW5nKDM2KX1mdW5jdGlvbiB3KHQsbixlKXtyZXR1cm4gdD1NKHQsbixlKSxmdW5jdGlvbihuKXt2YXIgZT1uLnJlbGF0ZWRUYXJnZXQ7ZSYmKGU9PT10aGlzfHw4JmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykpfHx0LmNhbGwodGhpcyxuKX19ZnVuY3Rpb24gTShuLGUscil7cmV0dXJuIGZ1bmN0aW9uKGkpe3ZhciBvPXQuZXZlbnQ7dC5ldmVudD1pO3RyeXtuLmNhbGwodGhpcyx0aGlzLl9fZGF0YV9fLGUscil9ZmluYWxseXt0LmV2ZW50PW99fX1mdW5jdGlvbiBUKHQpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24odCl7dmFyIG49IiIsZT10LmluZGV4T2YoIi4iKTtyZXR1cm4gZT49MCYmKG49dC5zbGljZShlKzEpLHQ9dC5zbGljZSgwLGUpKSx7dHlwZTp0LG5hbWU6bn19KX1mdW5jdGlvbiBOKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXRoaXMuX19vbjtpZihuKXtmb3IodmFyIGUscj0wLGk9LTEsbz1uLmxlbmd0aDtyPG87KytyKWU9bltyXSx0LnR5cGUmJmUudHlwZSE9PXQudHlwZXx8ZS5uYW1lIT09dC5uYW1lP25bKytpXT1lOnRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLnR5cGUsZS5saXN0ZW5lcixlLmNhcHR1cmUpOysraT9uLmxlbmd0aD1pOmRlbGV0ZSB0aGlzLl9fb259fX1mdW5jdGlvbiBrKHQsbixlKXt2YXIgcj1rZi5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpP3c6TTtyZXR1cm4gZnVuY3Rpb24oaSxvLHUpe3ZhciBhLGM9dGhpcy5fX29uLHM9cihuLG8sdSk7aWYoYylmb3IodmFyIGY9MCxsPWMubGVuZ3RoO2Y8bDsrK2YpaWYoKGE9Y1tmXSkudHlwZT09PXQudHlwZSYmYS5uYW1lPT09dC5uYW1lKXJldHVybiB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoYS50eXBlLGEubGlzdGVuZXIsYS5jYXB0dXJlKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoYS50eXBlLGEubGlzdGVuZXI9cyxhLmNhcHR1cmU9ZSksdm9pZChhLnZhbHVlPW4pO3RoaXMuYWRkRXZlbnRMaXN0ZW5lcih0LnR5cGUscyxlKSxhPXt0eXBlOnQudHlwZSxuYW1lOnQubmFtZSx2YWx1ZTpuLGxpc3RlbmVyOnMsY2FwdHVyZTplfSxjP2MucHVzaChhKTp0aGlzLl9fb249W2FdfX1mdW5jdGlvbiBTKG4sZSxyLGkpe3ZhciBvPXQuZXZlbnQ7bi5zb3VyY2VFdmVudD10LmV2ZW50LHQuZXZlbnQ9bjt0cnl7cmV0dXJuIGUuYXBwbHkocixpKX1maW5hbGx5e3QuZXZlbnQ9b319ZnVuY3Rpb24gRSgpe31mdW5jdGlvbiBBKCl7cmV0dXJuW119ZnVuY3Rpb24gQyh0LG4pe3RoaXMub3duZXJEb2N1bWVudD10Lm93bmVyRG9jdW1lbnQsdGhpcy5uYW1lc3BhY2VVUkk9dC5uYW1lc3BhY2VVUkksdGhpcy5fbmV4dD1udWxsLHRoaXMuX3BhcmVudD10LHRoaXMuX19kYXRhX189bn1mdW5jdGlvbiB6KHQsbixlLHIsaSxvKXtmb3IodmFyIHUsYT0wLGM9bi5sZW5ndGgscz1vLmxlbmd0aDthPHM7KythKSh1PW5bYV0pPyh1Ll9fZGF0YV9fPW9bYV0sclthXT11KTplW2FdPW5ldyBDKHQsb1thXSk7Zm9yKDthPGM7KythKSh1PW5bYV0pJiYoaVthXT11KX1mdW5jdGlvbiBQKHQsbixlLHIsaSxvLHUpe3ZhciBhLGMscyxmPXt9LGw9bi5sZW5ndGgsaD1vLmxlbmd0aCxwPW5ldyBBcnJheShsKTtmb3IoYT0wO2E8bDsrK2EpKGM9blthXSkmJihwW2FdPXM9SWYrdS5jYWxsKGMsYy5fX2RhdGFfXyxhLG4pLHMgaW4gZj9pW2FdPWM6ZltzXT1jKTtmb3IoYT0wO2E8aDsrK2Epcz1JZit1LmNhbGwodCxvW2FdLGEsbyksKGM9ZltzXSk/KHJbYV09YyxjLl9fZGF0YV9fPW9bYV0sZltzXT1udWxsKTplW2FdPW5ldyBDKHQsb1thXSk7Zm9yKGE9MDthPGw7KythKShjPW5bYV0pJiZmW3BbYV1dPT09YyYmKGlbYV09Yyl9ZnVuY3Rpb24gUih0LG4pe3JldHVybiB0PG4/LTE6dD5uPzE6dD49bj8wOk5hTn1mdW5jdGlvbiBxKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX1mdW5jdGlvbiBMKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19ZnVuY3Rpb24gVSh0LG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKHQsbil9fWZ1bmN0aW9uIEQodCxuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxuKX19ZnVuY3Rpb24gTyh0LG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWU/dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCk6dGhpcy5zZXRBdHRyaWJ1dGUodCxlKX19ZnVuY3Rpb24gRih0LG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWU/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLGUpfX1mdW5jdGlvbiBJKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9fWZ1bmN0aW9uIFkodCxuLGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxuLGUpfX1mdW5jdGlvbiBCKHQsbixlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1yP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCk6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LHIsZSl9fWZ1bmN0aW9uIGoodCl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbdF19fWZ1bmN0aW9uIEgodCxuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzW3RdPW59fWZ1bmN0aW9uIFgodCxuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1lP2RlbGV0ZSB0aGlzW3RdOnRoaXNbdF09ZX19ZnVuY3Rpb24gVih0KXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLyl9ZnVuY3Rpb24gVyh0KXtyZXR1cm4gdC5jbGFzc0xpc3R8fG5ldyAkKHQpfWZ1bmN0aW9uICQodCl7dGhpcy5fbm9kZT10LHRoaXMuX25hbWVzPVYodC5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1mdW5jdGlvbiBaKHQsbil7Zm9yKHZhciBlPVcodCkscj0tMSxpPW4ubGVuZ3RoOysrcjxpOyllLmFkZChuW3JdKX1mdW5jdGlvbiBHKHQsbil7Zm9yKHZhciBlPVcodCkscj0tMSxpPW4ubGVuZ3RoOysrcjxpOyllLnJlbW92ZShuW3JdKX1mdW5jdGlvbiBKKHQpe3JldHVybiBmdW5jdGlvbigpe1oodGhpcyx0KX19ZnVuY3Rpb24gUSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtHKHRoaXMsdCl9fWZ1bmN0aW9uIEsodCxuKXtyZXR1cm4gZnVuY3Rpb24oKXsobi5hcHBseSh0aGlzLGFyZ3VtZW50cyk/WjpHKSh0aGlzLHQpfX1mdW5jdGlvbiB0dCgpe3RoaXMudGV4dENvbnRlbnQ9IiJ9ZnVuY3Rpb24gbnQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fX1mdW5jdGlvbiBldCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PW51bGw9PW4/IiI6bn19ZnVuY3Rpb24gcnQoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBpdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD10fX1mdW5jdGlvbiBvdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD1udWxsPT1uPyIiOm59fWZ1bmN0aW9uIHV0KCl7dGhpcy5uZXh0U2libGluZyYmdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpfWZ1bmN0aW9uIGF0KCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gY3QoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBzdCgpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTt0JiZ0LnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIGZ0KHQsbixlKXt2YXIgcj1LZih0KSxpPXIuQ3VzdG9tRXZlbnQ7aT9pPW5ldyBpKG4sZSk6KGk9ci5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxlPyhpLmluaXRFdmVudChuLGUuYnViYmxlcyxlLmNhbmNlbGFibGUpLGkuZGV0YWlsPWUuZGV0YWlsKTppLmluaXRFdmVudChuLCExLCExKSksdC5kaXNwYXRjaEV2ZW50KGkpfWZ1bmN0aW9uIGx0KHQsbil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGZ0KHRoaXMsdCxuKX19ZnVuY3Rpb24gaHQodCxuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZnQodGhpcyx0LG4uYXBwbHkodGhpcyxhcmd1bWVudHMpKX19ZnVuY3Rpb24gcHQodCxuKXt0aGlzLl9ncm91cHM9dCx0aGlzLl9wYXJlbnRzPW59ZnVuY3Rpb24gZHQoKXtyZXR1cm4gbmV3IHB0KFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0saGwpfWZ1bmN0aW9uIHZ0KCl7dC5ldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBfdCh0LG4pe3ZhciBlPXQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHI9cGwodCkub24oImRyYWdzdGFydC5kcmFnIixudWxsKTtuJiYoci5vbigiY2xpY2suZHJhZyIseWwsITApLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtyLm9uKCJjbGljay5kcmFnIixudWxsKX0sMCkpLCJvbnNlbGVjdHN0YXJ0ImluIGU/ci5vbigic2VsZWN0c3RhcnQuZHJhZyIsbnVsbCk6KGUuc3R5bGUuTW96VXNlclNlbGVjdD1lLl9fbm9zZWxlY3QsZGVsZXRlIGUuX19ub3NlbGVjdCl9ZnVuY3Rpb24geXQodCxuLGUscixpLG8sdSxhLGMscyl7dGhpcy50YXJnZXQ9dCx0aGlzLnR5cGU9bix0aGlzLnN1YmplY3Q9ZSx0aGlzLmlkZW50aWZpZXI9cix0aGlzLmFjdGl2ZT1pLHRoaXMueD1vLHRoaXMueT11LHRoaXMuZHg9YSx0aGlzLmR5PWMsdGhpcy5fPXN9ZnVuY3Rpb24gZ3QoKXtyZXR1cm4hdC5ldmVudC5idXR0b259ZnVuY3Rpb24gbXQoKXtyZXR1cm4gdGhpcy5wYXJlbnROb2RlfWZ1bmN0aW9uIHh0KG4pe3JldHVybiBudWxsPT1uP3t4OnQuZXZlbnQueCx5OnQuZXZlbnQueX06bn1mdW5jdGlvbiBidCh0LG4pe3ZhciBlPU9iamVjdC5jcmVhdGUodC5wcm90b3R5cGUpO2Zvcih2YXIgciBpbiBuKWVbcl09bltyXTtyZXR1cm4gZX1mdW5jdGlvbiB3dCgpe31mdW5jdGlvbiBNdCh0KXt2YXIgbjtyZXR1cm4gdD0odCsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKG49U2wuZXhlYyh0KSk/KG49cGFyc2VJbnQoblsxXSwxNiksbmV3IEV0KG4+PjgmMTV8bj4+NCYyNDAsbj4+NCYxNXwyNDAmbiwoMTUmbik8PDR8MTUmbiwxKSk6KG49RWwuZXhlYyh0KSk/VHQocGFyc2VJbnQoblsxXSwxNikpOihuPUFsLmV4ZWModCkpP25ldyBFdChuWzFdLG5bMl0sblszXSwxKToobj1DbC5leGVjKHQpKT9uZXcgRXQoMjU1Km5bMV0vMTAwLDI1NSpuWzJdLzEwMCwyNTUqblszXS8xMDAsMSk6KG49emwuZXhlYyh0KSk/TnQoblsxXSxuWzJdLG5bM10sbls0XSk6KG49UGwuZXhlYyh0KSk/TnQoMjU1Km5bMV0vMTAwLDI1NSpuWzJdLzEwMCwyNTUqblszXS8xMDAsbls0XSk6KG49UmwuZXhlYyh0KSk/QXQoblsxXSxuWzJdLzEwMCxuWzNdLzEwMCwxKToobj1xbC5leGVjKHQpKT9BdChuWzFdLG5bMl0vMTAwLG5bM10vMTAwLG5bNF0pOkxsLmhhc093blByb3BlcnR5KHQpP1R0KExsW3RdKToidHJhbnNwYXJlbnQiPT09dD9uZXcgRXQoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBUdCh0KXtyZXR1cm4gbmV3IEV0KHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCwxKX1mdW5jdGlvbiBOdCh0LG4sZSxyKXtyZXR1cm4gcjw9MCYmKHQ9bj1lPU5hTiksbmV3IEV0KHQsbixlLHIpfWZ1bmN0aW9uIGt0KHQpe3JldHVybiB0IGluc3RhbmNlb2Ygd3R8fCh0PU10KHQpKSx0Pyh0PXQucmdiKCksbmV3IEV0KHQucix0LmcsdC5iLHQub3BhY2l0eSkpOm5ldyBFdH1mdW5jdGlvbiBTdCh0LG4sZSxyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/a3QodCk6bmV3IEV0KHQsbixlLG51bGw9PXI/MTpyKX1mdW5jdGlvbiBFdCh0LG4sZSxyKXt0aGlzLnI9K3QsdGhpcy5nPStuLHRoaXMuYj0rZSx0aGlzLm9wYWNpdHk9K3J9ZnVuY3Rpb24gQXQodCxuLGUscil7cmV0dXJuIHI8PTA/dD1uPWU9TmFOOmU8PTB8fGU+PTE/dD1uPU5hTjpuPD0wJiYodD1OYU4pLG5ldyBQdCh0LG4sZSxyKX1mdW5jdGlvbiBDdCh0KXtpZih0IGluc3RhbmNlb2YgUHQpcmV0dXJuIG5ldyBQdCh0LmgsdC5zLHQubCx0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiB3dHx8KHQ9TXQodCkpLCF0KXJldHVybiBuZXcgUHQ7aWYodCBpbnN0YW5jZW9mIFB0KXJldHVybiB0O3Q9dC5yZ2IoKTt2YXIgbj10LnIvMjU1LGU9dC5nLzI1NSxyPXQuYi8yNTUsaT1NYXRoLm1pbihuLGUsciksbz1NYXRoLm1heChuLGUsciksdT1OYU4sYT1vLWksYz0obytpKS8yO3JldHVybiBhPyh1PW49PT1vPyhlLXIpL2ErNiooZTxyKTplPT09bz8oci1uKS9hKzI6KG4tZSkvYSs0LGEvPWM8LjU/bytpOjItby1pLHUqPTYwKTphPWM+MCYmYzwxPzA6dSxuZXcgUHQodSxhLGMsdC5vcGFjaXR5KX1mdW5jdGlvbiB6dCh0LG4sZSxyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/Q3QodCk6bmV3IFB0KHQsbixlLG51bGw9PXI/MTpyKX1mdW5jdGlvbiBQdCh0LG4sZSxyKXt0aGlzLmg9K3QsdGhpcy5zPStuLHRoaXMubD0rZSx0aGlzLm9wYWNpdHk9K3J9ZnVuY3Rpb24gUnQodCxuLGUpe3JldHVybiAyNTUqKHQ8NjA/bisoZS1uKSp0LzYwOnQ8MTgwP2U6dDwyNDA/bisoZS1uKSooMjQwLXQpLzYwOm4pfWZ1bmN0aW9uIHF0KHQpe2lmKHQgaW5zdGFuY2VvZiBVdClyZXR1cm4gbmV3IFV0KHQubCx0LmEsdC5iLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIGp0KXt2YXIgbj10LmgqVWw7cmV0dXJuIG5ldyBVdCh0LmwsTWF0aC5jb3MobikqdC5jLE1hdGguc2luKG4pKnQuYyx0Lm9wYWNpdHkpfXQgaW5zdGFuY2VvZiBFdHx8KHQ9a3QodCkpO3ZhciBlPUl0KHQucikscj1JdCh0LmcpLGk9SXQodC5iKSxvPUR0KCguNDEyNDU2NCplKy4zNTc1NzYxKnIrLjE4MDQzNzUqaSkvRmwpLHU9RHQoKC4yMTI2NzI5KmUrLjcxNTE1MjIqcisuMDcyMTc1KmkpL0lsKSxhPUR0KCguMDE5MzMzOSplKy4xMTkxOTIqcisuOTUwMzA0MSppKS9ZbCk7cmV0dXJuIG5ldyBVdCgxMTYqdS0xNiw1MDAqKG8tdSksMjAwKih1LWEpLHQub3BhY2l0eSl9ZnVuY3Rpb24gTHQodCxuLGUscil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3F0KHQpOm5ldyBVdCh0LG4sZSxudWxsPT1yPzE6cil9ZnVuY3Rpb24gVXQodCxuLGUscil7dGhpcy5sPSt0LHRoaXMuYT0rbix0aGlzLmI9K2UsdGhpcy5vcGFjaXR5PStyfWZ1bmN0aW9uIER0KHQpe3JldHVybiB0PlhsP01hdGgucG93KHQsMS8zKTp0L0hsK0JsfWZ1bmN0aW9uIE90KHQpe3JldHVybiB0PmpsP3QqdCp0OkhsKih0LUJsKX1mdW5jdGlvbiBGdCh0KXtyZXR1cm4gMjU1Kih0PD0uMDAzMTMwOD8xMi45Mip0OjEuMDU1Kk1hdGgucG93KHQsMS8yLjQpLS4wNTUpfWZ1bmN0aW9uIEl0KHQpe3JldHVybih0Lz0yNTUpPD0uMDQwNDU/dC8xMi45MjpNYXRoLnBvdygodCsuMDU1KS8xLjA1NSwyLjQpfWZ1bmN0aW9uIFl0KHQpe2lmKHQgaW5zdGFuY2VvZiBqdClyZXR1cm4gbmV3IGp0KHQuaCx0LmMsdC5sLHQub3BhY2l0eSk7dCBpbnN0YW5jZW9mIFV0fHwodD1xdCh0KSk7dmFyIG49TWF0aC5hdGFuMih0LmIsdC5hKSpEbDtyZXR1cm4gbmV3IGp0KG48MD9uKzM2MDpuLE1hdGguc3FydCh0LmEqdC5hK3QuYip0LmIpLHQubCx0Lm9wYWNpdHkpfWZ1bmN0aW9uIEJ0KHQsbixlLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9ZdCh0KTpuZXcganQodCxuLGUsbnVsbD09cj8xOnIpfWZ1bmN0aW9uIGp0KHQsbixlLHIpe3RoaXMuaD0rdCx0aGlzLmM9K24sdGhpcy5sPStlLHRoaXMub3BhY2l0eT0rcn1mdW5jdGlvbiBIdCh0KXtpZih0IGluc3RhbmNlb2YgVnQpcmV0dXJuIG5ldyBWdCh0LmgsdC5zLHQubCx0Lm9wYWNpdHkpO3QgaW5zdGFuY2VvZiBFdHx8KHQ9a3QodCkpO3ZhciBuPXQuci8yNTUsZT10LmcvMjU1LHI9dC5iLzI1NSxpPShLbCpyK0psKm4tUWwqZSkvKEtsK0psLVFsKSxvPXItaSx1PShHbCooZS1pKS0kbCpvKS9abCxhPU1hdGguc3FydCh1KnUrbypvKS8oR2wqaSooMS1pKSksYz1hP01hdGguYXRhbjIodSxvKSpEbC0xMjA6TmFOO3JldHVybiBuZXcgVnQoYzwwP2MrMzYwOmMsYSxpLHQub3BhY2l0eSl9ZnVuY3Rpb24gWHQodCxuLGUscil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP0h0KHQpOm5ldyBWdCh0LG4sZSxudWxsPT1yPzE6cil9ZnVuY3Rpb24gVnQodCxuLGUscil7dGhpcy5oPSt0LHRoaXMucz0rbix0aGlzLmw9K2UsdGhpcy5vcGFjaXR5PStyfWZ1bmN0aW9uIFd0KHQsbixlLHIsaSl7dmFyIG89dCp0LHU9byp0O3JldHVybigoMS0zKnQrMypvLXUpKm4rKDQtNipvKzMqdSkqZSsoMSszKnQrMypvLTMqdSkqcit1KmkpLzZ9ZnVuY3Rpb24gJHQodCxuKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQrZSpufX1mdW5jdGlvbiBadCh0LG4sZSl7cmV0dXJuIHQ9TWF0aC5wb3codCxlKSxuPU1hdGgucG93KG4sZSktdCxlPTEvZSxmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5wb3codCtyKm4sZSl9fWZ1bmN0aW9uIEd0KHQsbil7dmFyIGU9bi10O3JldHVybiBlPyR0KHQsZT4xODB8fGU8LTE4MD9lLTM2MCpNYXRoLnJvdW5kKGUvMzYwKTplKTpjaChpc05hTih0KT9uOnQpfWZ1bmN0aW9uIEp0KHQpe3JldHVybiAxPT09KHQ9K3QpP1F0OmZ1bmN0aW9uKG4sZSl7cmV0dXJuIGUtbj9adChuLGUsdCk6Y2goaXNOYU4obik/ZTpuKX19ZnVuY3Rpb24gUXQodCxuKXt2YXIgZT1uLXQ7cmV0dXJuIGU/JHQodCxlKTpjaChpc05hTih0KT9uOnQpfWZ1bmN0aW9uIEt0KHQpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgZSxyLGk9bi5sZW5ndGgsbz1uZXcgQXJyYXkoaSksdT1uZXcgQXJyYXkoaSksYT1uZXcgQXJyYXkoaSk7Zm9yKGU9MDtlPGk7KytlKXI9U3QobltlXSksb1tlXT1yLnJ8fDAsdVtlXT1yLmd8fDAsYVtlXT1yLmJ8fDA7cmV0dXJuIG89dChvKSx1PXQodSksYT10KGEpLHIub3BhY2l0eT0xLGZ1bmN0aW9uKHQpe3JldHVybiByLnI9byh0KSxyLmc9dSh0KSxyLmI9YSh0KSxyKyIifX19ZnVuY3Rpb24gdG4odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIG5uKHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdChuKSsiIn19ZnVuY3Rpb24gZW4odCl7cmV0dXJuIm5vbmUiPT09dD93aDoodGh8fCh0aD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSxuaD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsZWg9ZG9jdW1lbnQuZGVmYXVsdFZpZXcpLHRoLnN0eWxlLnRyYW5zZm9ybT10LHQ9ZWguZ2V0Q29tcHV0ZWRTdHlsZShuaC5hcHBlbmRDaGlsZCh0aCksbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgidHJhbnNmb3JtIiksbmgucmVtb3ZlQ2hpbGQodGgpLHQ9dC5zbGljZSg3LC0xKS5zcGxpdCgiLCIpLE1oKCt0WzBdLCt0WzFdLCt0WzJdLCt0WzNdLCt0WzRdLCt0WzVdKSl9ZnVuY3Rpb24gcm4odCl7cmV0dXJuIG51bGw9PXQ/d2g6KHJofHwocmg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSkscmguc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLHQpLCh0PXJoLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpPyh0PXQubWF0cml4LE1oKHQuYSx0LmIsdC5jLHQuZCx0LmUsdC5mKSk6d2gpfWZ1bmN0aW9uIG9uKHQsbixlLHIpe2Z1bmN0aW9uIGkodCl7cmV0dXJuIHQubGVuZ3RoP3QucG9wKCkrIiAiOiIifWZ1bmN0aW9uIG8odCxyLGksbyx1LGEpe2lmKHQhPT1pfHxyIT09byl7dmFyIGM9dS5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLG4sbnVsbCxlKTthLnB1c2goe2k6Yy00LHg6ZGgodCxpKX0se2k6Yy0yLHg6ZGgocixvKX0pfWVsc2UoaXx8bykmJnUucHVzaCgidHJhbnNsYXRlKCIraStuK28rZSl9ZnVuY3Rpb24gdSh0LG4sZSxvKXt0IT09bj8odC1uPjE4MD9uKz0zNjA6bi10PjE4MCYmKHQrPTM2MCksby5wdXNoKHtpOmUucHVzaChpKGUpKyJyb3RhdGUoIixudWxsLHIpLTIseDpkaCh0LG4pfSkpOm4mJmUucHVzaChpKGUpKyJyb3RhdGUoIituK3IpfWZ1bmN0aW9uIGEodCxuLGUsbyl7dCE9PW4/by5wdXNoKHtpOmUucHVzaChpKGUpKyJza2V3WCgiLG51bGwsciktMix4OmRoKHQsbil9KTpuJiZlLnB1c2goaShlKSsic2tld1goIituK3IpfWZ1bmN0aW9uIGModCxuLGUscixvLHUpe2lmKHQhPT1lfHxuIT09cil7dmFyIGE9by5wdXNoKGkobykrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO3UucHVzaCh7aTphLTQseDpkaCh0LGUpfSx7aTphLTIseDpkaChuLHIpfSl9ZWxzZSAxPT09ZSYmMT09PXJ8fG8ucHVzaChpKG8pKyJzY2FsZSgiK2UrIiwiK3IrIikiKX1yZXR1cm4gZnVuY3Rpb24obixlKXt2YXIgcj1bXSxpPVtdO3JldHVybiBuPXQobiksZT10KGUpLG8obi50cmFuc2xhdGVYLG4udHJhbnNsYXRlWSxlLnRyYW5zbGF0ZVgsZS50cmFuc2xhdGVZLHIsaSksdShuLnJvdGF0ZSxlLnJvdGF0ZSxyLGkpLGEobi5za2V3WCxlLnNrZXdYLHIsaSksYyhuLnNjYWxlWCxuLnNjYWxlWSxlLnNjYWxlWCxlLnNjYWxlWSxyLGkpLG49ZT1udWxsLGZ1bmN0aW9uKHQpe2Zvcih2YXIgbixlPS0xLG89aS5sZW5ndGg7KytlPG87KXJbKG49aVtlXSkuaV09bi54KHQpO3JldHVybiByLmpvaW4oIiIpfX19ZnVuY3Rpb24gdW4odCl7cmV0dXJuKCh0PU1hdGguZXhwKHQpKSsxL3QpLzJ9ZnVuY3Rpb24gYW4odCl7cmV0dXJuKCh0PU1hdGguZXhwKHQpKS0xL3QpLzJ9ZnVuY3Rpb24gY24odCl7cmV0dXJuKCh0PU1hdGguZXhwKDIqdCkpLTEpLyh0KzEpfWZ1bmN0aW9uIHNuKHQpe3JldHVybiBmdW5jdGlvbihuLGUpe3ZhciByPXQoKG49enQobikpLmgsKGU9enQoZSkpLmgpLGk9UXQobi5zLGUucyksbz1RdChuLmwsZS5sKSx1PVF0KG4ub3BhY2l0eSxlLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbi5oPXIodCksbi5zPWkodCksbi5sPW8odCksbi5vcGFjaXR5PXUodCksbisiIn19fWZ1bmN0aW9uIGZuKHQsbil7dmFyIGU9UXQoKHQ9THQodCkpLmwsKG49THQobikpLmwpLHI9UXQodC5hLG4uYSksaT1RdCh0LmIsbi5iKSxvPVF0KHQub3BhY2l0eSxuLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdC5sPWUobiksdC5hPXIobiksdC5iPWkobiksdC5vcGFjaXR5PW8obiksdCsiIn19ZnVuY3Rpb24gbG4odCl7cmV0dXJuIGZ1bmN0aW9uKG4sZSl7dmFyIHI9dCgobj1CdChuKSkuaCwoZT1CdChlKSkuaCksaT1RdChuLmMsZS5jKSxvPVF0KG4ubCxlLmwpLHU9UXQobi5vcGFjaXR5LGUub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBuLmg9cih0KSxuLmM9aSh0KSxuLmw9byh0KSxuLm9wYWNpdHk9dSh0KSxuKyIifX19ZnVuY3Rpb24gaG4odCl7cmV0dXJuIGZ1bmN0aW9uIG4oZSl7ZnVuY3Rpb24gcihuLHIpe3ZhciBpPXQoKG49WHQobikpLmgsKHI9WHQocikpLmgpLG89UXQobi5zLHIucyksdT1RdChuLmwsci5sKSxhPVF0KG4ub3BhY2l0eSxyLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbi5oPWkodCksbi5zPW8odCksbi5sPXUoTWF0aC5wb3codCxlKSksbi5vcGFjaXR5PWEodCksbisiIn19cmV0dXJuIGU9K2Usci5nYW1tYT1uLHJ9KDEpfWZ1bmN0aW9uIHBuKCl7cmV0dXJuIGpofHwoVmgoZG4pLGpoPVhoLm5vdygpK0hoKX1mdW5jdGlvbiBkbigpe2poPTB9ZnVuY3Rpb24gdm4oKXt0aGlzLl9jYWxsPXRoaXMuX3RpbWU9dGhpcy5fbmV4dD1udWxsfWZ1bmN0aW9uIF9uKHQsbixlKXt2YXIgcj1uZXcgdm47cmV0dXJuIHIucmVzdGFydCh0LG4sZSkscn1mdW5jdGlvbiB5bigpe3BuKCksKytPaDtmb3IodmFyIHQsbj1paDtuOykodD1qaC1uLl90aW1lKT49MCYmbi5fY2FsbC5jYWxsKG51bGwsdCksbj1uLl9uZXh0Oy0tT2h9ZnVuY3Rpb24gZ24oKXtqaD0oQmg9WGgubm93KCkpK0hoLE9oPUZoPTA7dHJ5e3luKCl9ZmluYWxseXtPaD0wLHhuKCksamg9MH19ZnVuY3Rpb24gbW4oKXt2YXIgdD1YaC5ub3coKSxuPXQtQmg7bj5ZaCYmKEhoLT1uLEJoPXQpfWZ1bmN0aW9uIHhuKCl7Zm9yKHZhciB0LG4sZT1paCxyPTEvMDtlOyllLl9jYWxsPyhyPmUuX3RpbWUmJihyPWUuX3RpbWUpLHQ9ZSxlPWUuX25leHQpOihuPWUuX25leHQsZS5fbmV4dD1udWxsLGU9dD90Ll9uZXh0PW46aWg9bik7b2g9dCxibihyKX1mdW5jdGlvbiBibih0KXtpZighT2gpe0ZoJiYoRmg9Y2xlYXJUaW1lb3V0KEZoKSk7dmFyIG49dC1qaDtuPjI0Pyh0PDEvMCYmKEZoPXNldFRpbWVvdXQoZ24sbikpLEloJiYoSWg9Y2xlYXJJbnRlcnZhbChJaCkpKTooSWh8fChCaD1qaCxJaD1zZXRJbnRlcnZhbChtbixZaCkpLE9oPTEsVmgoZ24pKX19ZnVuY3Rpb24gd24odCxuKXt2YXIgZT10Ll9fdHJhbnNpdGlvbjtpZighZXx8IShlPWVbbl0pfHxlLnN0YXRlPkpoKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGUiKTtyZXR1cm4gZX1mdW5jdGlvbiBNbih0LG4pe3ZhciBlPXQuX190cmFuc2l0aW9uO2lmKCFlfHwhKGU9ZVtuXSl8fGUuc3RhdGU+S2gpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZSIpO3JldHVybiBlfWZ1bmN0aW9uIFRuKHQsbil7dmFyIGU9dC5fX3RyYW5zaXRpb247aWYoIWV8fCEoZT1lW25dKSl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlIik7cmV0dXJuIGV9ZnVuY3Rpb24gTm4odCxuLGUpe2Z1bmN0aW9uIHIodCl7ZS5zdGF0ZT1RaCxlLnRpbWVyLnJlc3RhcnQoaSxlLmRlbGF5LGUudGltZSksZS5kZWxheTw9dCYmaSh0LWUuZGVsYXkpfWZ1bmN0aW9uIGkocil7dmFyIHMsZixsLGg7aWYoZS5zdGF0ZSE9PVFoKXJldHVybiB1KCk7Zm9yKHMgaW4gYylpZihoPWNbc10saC5uYW1lPT09ZS5uYW1lKXtpZihoLnN0YXRlPT09dHApcmV0dXJuIFdoKGkpO2guc3RhdGU9PT1ucD8oaC5zdGF0ZT1ycCxoLnRpbWVyLnN0b3AoKSxoLm9uLmNhbGwoImludGVycnVwdCIsdCx0Ll9fZGF0YV9fLGguaW5kZXgsaC5ncm91cCksZGVsZXRlIGNbc10pOitzPG4mJihoLnN0YXRlPXJwLGgudGltZXIuc3RvcCgpLGRlbGV0ZSBjW3NdKX1pZihXaChmdW5jdGlvbigpe2Uuc3RhdGU9PT10cCYmKGUuc3RhdGU9bnAsZS50aW1lci5yZXN0YXJ0KG8sZS5kZWxheSxlLnRpbWUpLG8ocikpfSksZS5zdGF0ZT1LaCxlLm9uLmNhbGwoInN0YXJ0Iix0LHQuX19kYXRhX18sZS5pbmRleCxlLmdyb3VwKSxlLnN0YXRlPT09S2gpe2ZvcihlLnN0YXRlPXRwLGE9bmV3IEFycmF5KGw9ZS50d2Vlbi5sZW5ndGgpLHM9MCxmPS0xO3M8bDsrK3MpKGg9ZS50d2VlbltzXS52YWx1ZS5jYWxsKHQsdC5fX2RhdGFfXyxlLmluZGV4LGUuZ3JvdXApKSYmKGFbKytmXT1oKTthLmxlbmd0aD1mKzF9fWZ1bmN0aW9uIG8obil7Zm9yKHZhciByPW48ZS5kdXJhdGlvbj9lLmVhc2UuY2FsbChudWxsLG4vZS5kdXJhdGlvbik6KGUudGltZXIucmVzdGFydCh1KSxlLnN0YXRlPWVwLDEpLGk9LTEsbz1hLmxlbmd0aDsrK2k8bzspYVtpXS5jYWxsKG51bGwscik7ZS5zdGF0ZT09PWVwJiYoZS5vbi5jYWxsKCJlbmQiLHQsdC5fX2RhdGFfXyxlLmluZGV4LGUuZ3JvdXApLHUoKSl9ZnVuY3Rpb24gdSgpe2Uuc3RhdGU9cnAsZS50aW1lci5zdG9wKCksZGVsZXRlIGNbbl07Zm9yKHZhciByIGluIGMpcmV0dXJuO2RlbGV0ZSB0Ll9fdHJhbnNpdGlvbn12YXIgYSxjPXQuX190cmFuc2l0aW9uO2Nbbl09ZSxlLnRpbWVyPV9uKHIsMCxlLnRpbWUpfWZ1bmN0aW9uIGtuKHQsbil7dmFyIGUscjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaT1Nbih0aGlzLHQpLG89aS50d2VlbjtpZihvIT09ZSl7cj1lPW87Zm9yKHZhciB1PTAsYT1yLmxlbmd0aDt1PGE7Kyt1KWlmKHJbdV0ubmFtZT09PW4pe3I9ci5zbGljZSgpLHIuc3BsaWNlKHUsMSk7YnJlYWt9fWkudHdlZW49cn19ZnVuY3Rpb24gU24odCxuLGUpe3ZhciByLGk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPU1uKHRoaXMsdCksdT1vLnR3ZWVuO2lmKHUhPT1yKXtpPShyPXUpLnNsaWNlKCk7Zm9yKHZhciBhPXtuYW1lOm4sdmFsdWU6ZX0sYz0wLHM9aS5sZW5ndGg7YzxzOysrYylpZihpW2NdLm5hbWU9PT1uKXtpW2NdPWE7YnJlYWt9Yz09PXMmJmkucHVzaChhKX1vLnR3ZWVuPWl9fWZ1bmN0aW9uIEVuKHQsbixlKXt2YXIgcj10Ll9pZDtyZXR1cm4gdC5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9TW4odGhpcyxyKTsodC52YWx1ZXx8KHQudmFsdWU9e30pKVtuXT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGZ1bmN0aW9uKHQpe3JldHVybiBUbih0LHIpLnZhbHVlW25dfX1mdW5jdGlvbiBBbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19ZnVuY3Rpb24gQ24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiB6bih0LG4sZSl7dmFyIHIsaTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz10aGlzLmdldEF0dHJpYnV0ZSh0KTtyZXR1cm4gbz09PWU/bnVsbDpvPT09cj9pOmk9bihyPW8sZSl9fWZ1bmN0aW9uIFBuKHQsbixlKXt2YXIgcixpO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXRoaXMuZ2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKTtyZXR1cm4gbz09PWU/bnVsbDpvPT09cj9pOmk9bihyPW8sZSl9fWZ1bmN0aW9uIFJuKHQsbixlKXt2YXIgcixpLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHUsYT1lKHRoaXMpO3JldHVybiBudWxsPT1hP3ZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGUodCk6KHU9dGhpcy5nZXRBdHRyaWJ1dGUodCksdT09PWE/bnVsbDp1PT09ciYmYT09PWk/bzpvPW4ocj11LGk9YSkpfX1mdW5jdGlvbiBxbih0LG4sZSl7dmFyIHIsaSxvO3JldHVybiBmdW5jdGlvbigpe3ZhciB1LGE9ZSh0aGlzKTtyZXR1cm4gbnVsbD09YT92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKToodT10aGlzLmdldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCksdT09PWE/bnVsbDp1PT09ciYmYT09PWk/bzpvPW4ocj11LGk9YSkpfX1mdW5jdGlvbiBMbih0LG4pe2Z1bmN0aW9uIGUoKXt2YXIgZT10aGlzLHI9bi5hcHBseShlLGFyZ3VtZW50cyk7cmV0dXJuIHImJmZ1bmN0aW9uKG4pe2Uuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLHIobikpfX1yZXR1cm4gZS5fdmFsdWU9bixlfWZ1bmN0aW9uIFVuKHQsbil7ZnVuY3Rpb24gZSgpe3ZhciBlPXRoaXMscj1uLmFwcGx5KGUsYXJndW1lbnRzKTtyZXR1cm4gciYmZnVuY3Rpb24obil7ZS5zZXRBdHRyaWJ1dGUodCxyKG4pKX19cmV0dXJuIGUuX3ZhbHVlPW4sZX1mdW5jdGlvbiBEbih0LG4pe3JldHVybiBmdW5jdGlvbigpe3duKHRoaXMsdCkuZGVsYXk9K24uYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBPbih0LG4pe3JldHVybiBuPStuLGZ1bmN0aW9uKCl7d24odGhpcyx0KS5kZWxheT1ufX1mdW5jdGlvbiBGbih0LG4pe3JldHVybiBmdW5jdGlvbigpe01uKHRoaXMsdCkuZHVyYXRpb249K24uYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBJbih0LG4pe3JldHVybiBuPStuLGZ1bmN0aW9uKCl7TW4odGhpcyx0KS5kdXJhdGlvbj1ufX1mdW5jdGlvbiBZbih0LG4pe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXtNbih0aGlzLHQpLmVhc2U9bn19ZnVuY3Rpb24gQm4odCl7cmV0dXJuKHQrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeShmdW5jdGlvbih0KXt2YXIgbj10LmluZGV4T2YoIi4iKTtyZXR1cm4gbj49MCYmKHQ9dC5zbGljZSgwLG4pKSwhdHx8InN0YXJ0Ij09PXR9KX1mdW5jdGlvbiBqbih0LG4sZSl7dmFyIHIsaSxvPUJuKG4pP3duOk1uO3JldHVybiBmdW5jdGlvbigpe3ZhciB1PW8odGhpcyx0KSxhPXUub247YSE9PXImJihpPShyPWEpLmNvcHkoKSkub24obixlKSx1Lm9uPWl9fWZ1bmN0aW9uIEhuKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXRoaXMucGFyZW50Tm9kZTtmb3IodmFyIGUgaW4gdGhpcy5fX3RyYW5zaXRpb24paWYoK2UhPT10KXJldHVybjtuJiZuLnJlbW92ZUNoaWxkKHRoaXMpfX1mdW5jdGlvbiBYbih0LG4pe3ZhciBlLHIsaTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1LZih0aGlzKS5nZXRDb21wdXRlZFN0eWxlKHRoaXMsbnVsbCksdT1vLmdldFByb3BlcnR5VmFsdWUodCksYT0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KSxvLmdldFByb3BlcnR5VmFsdWUodCkpO3JldHVybiB1PT09YT9udWxsOnU9PT1lJiZhPT09cj9pOmk9bihlPXUscj1hKX19ZnVuY3Rpb24gVm4odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX19ZnVuY3Rpb24gV24odCxuLGUpe3ZhciByLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89S2YodGhpcykuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLG51bGwpLmdldFByb3BlcnR5VmFsdWUodCk7cmV0dXJuIG89PT1lP251bGw6bz09PXI/aTppPW4ocj1vLGUpfX1mdW5jdGlvbiAkbih0LG4sZSl7dmFyIHIsaSxvO3JldHVybiBmdW5jdGlvbigpe3ZhciB1PUtmKHRoaXMpLmdldENvbXB1dGVkU3R5bGUodGhpcyxudWxsKSxhPXUuZ2V0UHJvcGVydHlWYWx1ZSh0KSxjPWUodGhpcyk7cmV0dXJuIG51bGw9PWMmJih0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpLGM9dS5nZXRQcm9wZXJ0eVZhbHVlKHQpKSxhPT09Yz9udWxsOmE9PT1yJiZjPT09aT9vOm89bihyPWEsaT1jKX19ZnVuY3Rpb24gWm4odCxuLGUpe2Z1bmN0aW9uIHIoKXt2YXIgcj10aGlzLGk9bi5hcHBseShyLGFyZ3VtZW50cyk7cmV0dXJuIGkmJmZ1bmN0aW9uKG4pe3Iuc3R5bGUuc2V0UHJvcGVydHkodCxpKG4pLGUpfX1yZXR1cm4gci5fdmFsdWU9bixyfWZ1bmN0aW9uIEduKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH19ZnVuY3Rpb24gSm4odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dCh0aGlzKTt0aGlzLnRleHRDb250ZW50PW51bGw9PW4/IiI6bn19ZnVuY3Rpb24gUW4odCxuLGUscil7dGhpcy5fZ3JvdXBzPXQsdGhpcy5fcGFyZW50cz1uLHRoaXMuX25hbWU9ZSx0aGlzLl9pZD1yfWZ1bmN0aW9uIEtuKHQpe3JldHVybiBkdCgpLnRyYW5zaXRpb24odCl9ZnVuY3Rpb24gdGUoKXtyZXR1cm4rK2twfWZ1bmN0aW9uIG5lKHQpe3JldHVybit0fWZ1bmN0aW9uIGVlKHQpe3JldHVybiB0KnR9ZnVuY3Rpb24gcmUodCl7cmV0dXJuIHQqKDItdCl9ZnVuY3Rpb24gaWUodCl7cmV0dXJuKCh0Kj0yKTw9MT90KnQ6LS10KigyLXQpKzEpLzJ9ZnVuY3Rpb24gb2UodCl7cmV0dXJuIHQqdCp0fWZ1bmN0aW9uIHVlKHQpe3JldHVybi0tdCp0KnQrMX1mdW5jdGlvbiBhZSh0KXtyZXR1cm4oKHQqPTIpPD0xP3QqdCp0Oih0LT0yKSp0KnQrMikvMn1mdW5jdGlvbiBjZSh0KXtyZXR1cm4gMS1NYXRoLmNvcyh0KlJwKX1mdW5jdGlvbiBzZSh0KXtyZXR1cm4gTWF0aC5zaW4odCpScCl9ZnVuY3Rpb24gZmUodCl7cmV0dXJuKDEtTWF0aC5jb3MoUHAqdCkpLzJ9ZnVuY3Rpb24gbGUodCl7cmV0dXJuIE1hdGgucG93KDIsMTAqdC0xMCl9ZnVuY3Rpb24gaGUodCl7cmV0dXJuIDEtTWF0aC5wb3coMiwtMTAqdCl9ZnVuY3Rpb24gcGUodCl7cmV0dXJuKCh0Kj0yKTw9MT9NYXRoLnBvdygyLDEwKnQtMTApOjItTWF0aC5wb3coMiwxMC0xMCp0KSkvMn1mdW5jdGlvbiBkZSh0KXtyZXR1cm4gMS1NYXRoLnNxcnQoMS10KnQpfWZ1bmN0aW9uIHZlKHQpe3JldHVybiBNYXRoLnNxcnQoMS0gLS10KnQpfWZ1bmN0aW9uIF9lKHQpe3JldHVybigodCo9Mik8PTE/MS1NYXRoLnNxcnQoMS10KnQpOk1hdGguc3FydCgxLSh0LT0yKSp0KSsxKS8yfWZ1bmN0aW9uIHllKHQpe3JldHVybiAxLWdlKDEtdCl9ZnVuY3Rpb24gZ2UodCl7cmV0dXJuKHQ9K3QpPHFwP2pwKnQqdDp0PFVwP2pwKih0LT1McCkqdCtEcDp0PEZwP2pwKih0LT1PcCkqdCtJcDpqcCoodC09WXApKnQrQnB9ZnVuY3Rpb24gbWUodCl7cmV0dXJuKCh0Kj0yKTw9MT8xLWdlKDEtdCk6Z2UodC0xKSsxKS8yfWZ1bmN0aW9uIHhlKHQsbil7Zm9yKHZhciBlOyEoZT10Ll9fdHJhbnNpdGlvbil8fCEoZT1lW25dKTspaWYoISh0PXQucGFyZW50Tm9kZSkpcmV0dXJuIHRkLnRpbWU9cG4oKSx0ZDtyZXR1cm4gZX1mdW5jdGlvbiBiZSgpe3QuZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gd2UodCl7cmV0dXJue3R5cGU6dH19ZnVuY3Rpb24gTWUoKXtyZXR1cm4hdC5ldmVudC5idXR0b259ZnVuY3Rpb24gVGUoKXt2YXIgdD10aGlzLm93bmVyU1ZHRWxlbWVudHx8dGhpcztyZXR1cm5bWzAsMF0sW3Qud2lkdGguYmFzZVZhbC52YWx1ZSx0LmhlaWdodC5iYXNlVmFsLnZhbHVlXV19ZnVuY3Rpb24gTmUodCl7Zm9yKDshdC5fX2JydXNoOylpZighKHQ9dC5wYXJlbnROb2RlKSlyZXR1cm47cmV0dXJuIHQuX19icnVzaH1mdW5jdGlvbiBrZSh0KXtyZXR1cm4gdFswXVswXT09PXRbMV1bMF18fHRbMF1bMV09PT10WzFdWzFdfWZ1bmN0aW9uIFNlKHQpe3ZhciBuPXQuX19icnVzaDtyZXR1cm4gbj9uLmRpbS5vdXRwdXQobi5zZWxlY3Rpb24pOm51bGx9ZnVuY3Rpb24gRWUoKXtyZXR1cm4gQ2UobGQpfWZ1bmN0aW9uIEFlKCl7cmV0dXJuIENlKGhkKX1mdW5jdGlvbiBDZShuKXtmdW5jdGlvbiBlKHQpe3ZhciBlPXQucHJvcGVydHkoIl9fYnJ1c2giLGEpLnNlbGVjdEFsbCgiLm92ZXJsYXkiKS5kYXRhKFt3ZSgib3ZlcmxheSIpXSk7ZS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwib3ZlcmxheSIpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuYXR0cigiY3Vyc29yIixkZC5vdmVybGF5KS5tZXJnZShlKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9TmUodGhpcykuZXh0ZW50O3BsKHRoaXMpLmF0dHIoIngiLHRbMF1bMF0pLmF0dHIoInkiLHRbMF1bMV0pLmF0dHIoIndpZHRoIix0WzFdWzBdLXRbMF1bMF0pLmF0dHIoImhlaWdodCIsdFsxXVsxXS10WzBdWzFdKX0pLHQuc2VsZWN0QWxsKCIuc2VsZWN0aW9uIikuZGF0YShbd2UoInNlbGVjdGlvbiIpXSkuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsInNlbGVjdGlvbiIpLmF0dHIoImN1cnNvciIsZGQuc2VsZWN0aW9uKS5hdHRyKCJmaWxsIiwiIzc3NyIpLmF0dHIoImZpbGwtb3BhY2l0eSIsLjMpLmF0dHIoInN0cm9rZSIsIiNmZmYiKS5hdHRyKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIik7dmFyIGk9dC5zZWxlY3RBbGwoIi5oYW5kbGUiKS5kYXRhKG4uaGFuZGxlcyxmdW5jdGlvbih0KXtyZXR1cm4gdC50eXBlfSk7aS5leGl0KCkucmVtb3ZlKCksaS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIixmdW5jdGlvbih0KXtyZXR1cm4iaGFuZGxlIGhhbmRsZS0tIit0LnR5cGV9KS5hdHRyKCJjdXJzb3IiLGZ1bmN0aW9uKHQpe3JldHVybiBkZFt0LnR5cGVdfSksdC5lYWNoKHIpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpLm9uKCJtb3VzZWRvd24uYnJ1c2ggdG91Y2hzdGFydC5icnVzaCIsdSl9ZnVuY3Rpb24gcigpe3ZhciB0PXBsKHRoaXMpLG49TmUodGhpcykuc2VsZWN0aW9uO24/KHQuc2VsZWN0QWxsKCIuc2VsZWN0aW9uIikuc3R5bGUoImRpc3BsYXkiLG51bGwpLmF0dHIoIngiLG5bMF1bMF0pLmF0dHIoInkiLG5bMF1bMV0pLmF0dHIoIndpZHRoIixuWzFdWzBdLW5bMF1bMF0pLmF0dHIoImhlaWdodCIsblsxXVsxXS1uWzBdWzFdKSx0LnNlbGVjdEFsbCgiLmhhbmRsZSIpLnN0eWxlKCJkaXNwbGF5IixudWxsKS5hdHRyKCJ4IixmdW5jdGlvbih0KXtyZXR1cm4iZSI9PT10LnR5cGVbdC50eXBlLmxlbmd0aC0xXT9uWzFdWzBdLWgvMjpuWzBdWzBdLWgvMn0pLmF0dHIoInkiLGZ1bmN0aW9uKHQpe3JldHVybiJzIj09PXQudHlwZVswXT9uWzFdWzFdLWgvMjpuWzBdWzFdLWgvMn0pLmF0dHIoIndpZHRoIixmdW5jdGlvbih0KXtyZXR1cm4ibiI9PT10LnR5cGV8fCJzIj09PXQudHlwZT9uWzFdWzBdLW5bMF1bMF0raDpofSkuYXR0cigiaGVpZ2h0IixmdW5jdGlvbih0KXtyZXR1cm4iZSI9PT10LnR5cGV8fCJ3Ij09PXQudHlwZT9uWzFdWzFdLW5bMF1bMV0raDpofSkpOnQuc2VsZWN0QWxsKCIuc2VsZWN0aW9uLC5oYW5kbGUiKS5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKS5hdHRyKCJ4IixudWxsKS5hdHRyKCJ5IixudWxsKS5hdHRyKCJ3aWR0aCIsbnVsbCkuYXR0cigiaGVpZ2h0IixudWxsKX1mdW5jdGlvbiBpKHQsbil7cmV0dXJuIHQuX19icnVzaC5lbWl0dGVyfHxuZXcgbyh0LG4pfWZ1bmN0aW9uIG8odCxuKXt0aGlzLnRoYXQ9dCx0aGlzLmFyZ3M9bix0aGlzLnN0YXRlPXQuX19icnVzaCx0aGlzLmFjdGl2ZT0wfWZ1bmN0aW9uIHUoKXtmdW5jdGlvbiBlKCl7dmFyIHQ9emYoVCk7IVV8fHd8fE18fChNYXRoLmFicyh0WzBdLU9bMF0pPk1hdGguYWJzKHRbMV0tT1sxXSk/TT0hMDp3PSEwKSxPPXQsYj0hMCx1ZCgpLG8oKX1mdW5jdGlvbiBvKCl7dmFyIHQ7c3dpdGNoKG09T1swXS1EWzBdLHg9T1sxXS1EWzFdLGspe2Nhc2UgY2Q6Y2FzZSBhZDpTJiYobT1NYXRoLm1heChQLWwsTWF0aC5taW4ocS12LG0pKSxoPWwrbSxfPXYrbSksRSYmKHg9TWF0aC5tYXgoUi1wLE1hdGgubWluKEwteSx4KSksZD1wK3gsZz15K3gpO2JyZWFrO2Nhc2Ugc2Q6UzwwPyhtPU1hdGgubWF4KFAtbCxNYXRoLm1pbihxLWwsbSkpLGg9bCttLF89dik6Uz4wJiYobT1NYXRoLm1heChQLXYsTWF0aC5taW4ocS12LG0pKSxoPWwsXz12K20pLEU8MD8oeD1NYXRoLm1heChSLXAsTWF0aC5taW4oTC1wLHgpKSxkPXAreCxnPXkpOkU+MCYmKHg9TWF0aC5tYXgoUi15LE1hdGgubWluKEwteSx4KSksZD1wLGc9eSt4KTticmVhaztjYXNlIGZkOlMmJihoPU1hdGgubWF4KFAsTWF0aC5taW4ocSxsLW0qUykpLF89TWF0aC5tYXgoUCxNYXRoLm1pbihxLHYrbSpTKSkpLEUmJihkPU1hdGgubWF4KFIsTWF0aC5taW4oTCxwLXgqRSkpLGc9TWF0aC5tYXgoUixNYXRoLm1pbihMLHkreCpFKSkpfV88aCYmKFMqPS0xLHQ9bCxsPXYsdj10LHQ9aCxoPV8sXz10LE4gaW4gdmQmJlkuYXR0cigiY3Vyc29yIixkZFtOPXZkW05dXSkpLGc8ZCYmKEUqPS0xLHQ9cCxwPXkseT10LHQ9ZCxkPWcsZz10LE4gaW4gX2QmJlkuYXR0cigiY3Vyc29yIixkZFtOPV9kW05dXSkpLEEuc2VsZWN0aW9uJiYoej1BLnNlbGVjdGlvbiksdyYmKGg9elswXVswXSxfPXpbMV1bMF0pLE0mJihkPXpbMF1bMV0sZz16WzFdWzFdKSx6WzBdWzBdPT09aCYmelswXVsxXT09PWQmJnpbMV1bMF09PT1fJiZ6WzFdWzFdPT09Z3x8KEEuc2VsZWN0aW9uPVtbaCxkXSxbXyxnXV0sci5jYWxsKFQpLEYuYnJ1c2goKSl9ZnVuY3Rpb24gdSgpe2lmKGJlKCksdC5ldmVudC50b3VjaGVzKXtpZih0LmV2ZW50LnRvdWNoZXMubGVuZ3RoKXJldHVybjtjJiZjbGVhclRpbWVvdXQoYyksYz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Yz1udWxsfSw1MDApLEkub24oInRvdWNobW92ZS5icnVzaCB0b3VjaGVuZC5icnVzaCB0b3VjaGNhbmNlbC5icnVzaCIsbnVsbCl9ZWxzZSBfdCh0LmV2ZW50LnZpZXcsYiksQi5vbigia2V5ZG93bi5icnVzaCBrZXl1cC5icnVzaCBtb3VzZW1vdmUuYnJ1c2ggbW91c2V1cC5icnVzaCIsbnVsbCk7SS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLFkuYXR0cigiY3Vyc29yIixkZC5vdmVybGF5KSxBLnNlbGVjdGlvbiYmKHo9QS5zZWxlY3Rpb24pLGtlKHopJiYoQS5zZWxlY3Rpb249bnVsbCxyLmNhbGwoVCkpLEYuZW5kKCl9ZnVuY3Rpb24gYSgpe3N3aXRjaCh0LmV2ZW50LmtleUNvZGUpe2Nhc2UgMTY6VT1TJiZFO2JyZWFrO2Nhc2UgMTg6az09PXNkJiYoUyYmKHY9Xy1tKlMsbD1oK20qUyksRSYmKHk9Zy14KkUscD1kK3gqRSksaz1mZCxvKCkpO2JyZWFrO2Nhc2UgMzI6ayE9PXNkJiZrIT09ZmR8fChTPDA/dj1fLW06Uz4wJiYobD1oLW0pLEU8MD95PWcteDpFPjAmJihwPWQteCksaz1jZCxZLmF0dHIoImN1cnNvciIsZGQuc2VsZWN0aW9uKSxvKCkpO2JyZWFrO2RlZmF1bHQ6cmV0dXJufXVkKCl9ZnVuY3Rpb24gcygpe3N3aXRjaCh0LmV2ZW50LmtleUNvZGUpe2Nhc2UgMTY6VSYmKHc9TT1VPSExLG8oKSk7YnJlYWs7Y2FzZSAxODprPT09ZmQmJihTPDA/dj1fOlM+MCYmKGw9aCksRTwwP3k9ZzpFPjAmJihwPWQpLGs9c2QsbygpKTticmVhaztjYXNlIDMyOms9PT1jZCYmKHQuZXZlbnQuYWx0S2V5PyhTJiYodj1fLW0qUyxsPWgrbSpTKSxFJiYoeT1nLXgqRSxwPWQreCpFKSxrPWZkKTooUzwwP3Y9XzpTPjAmJihsPWgpLEU8MD95PWc6RT4wJiYocD1kKSxrPXNkKSxZLmF0dHIoImN1cnNvciIsZGRbTl0pLG8oKSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm59dWQoKX1pZih0LmV2ZW50LnRvdWNoZXMpe2lmKHQuZXZlbnQuY2hhbmdlZFRvdWNoZXMubGVuZ3RoPHQuZXZlbnQudG91Y2hlcy5sZW5ndGgpcmV0dXJuIHVkKCl9ZWxzZSBpZihjKXJldHVybjtpZihmLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIGwsaCxwLGQsdixfLHksZyxtLHgsYix3LE0sVD10aGlzLE49dC5ldmVudC50YXJnZXQuX19kYXRhX18udHlwZSxrPSJzZWxlY3Rpb24iPT09KHQuZXZlbnQubWV0YUtleT9OPSJvdmVybGF5IjpOKT9hZDp0LmV2ZW50LmFsdEtleT9mZDpzZCxTPW49PT1oZD9udWxsOnlkW05dLEU9bj09PWxkP251bGw6Z2RbTl0sQT1OZShUKSxDPUEuZXh0ZW50LHo9QS5zZWxlY3Rpb24sUD1DWzBdWzBdLFI9Q1swXVsxXSxxPUNbMV1bMF0sTD1DWzFdWzFdLFU9UyYmRSYmdC5ldmVudC5zaGlmdEtleSxEPXpmKFQpLE89RCxGPWkoVCxhcmd1bWVudHMpLmJlZm9yZXN0YXJ0KCk7Im92ZXJsYXkiPT09Tj9BLnNlbGVjdGlvbj16PVtbbD1uPT09aGQ/UDpEWzBdLHA9bj09PWxkP1I6RFsxXV0sW3Y9bj09PWhkP3E6bCx5PW49PT1sZD9MOnBdXToobD16WzBdWzBdLHA9elswXVsxXSx2PXpbMV1bMF0seT16WzFdWzFdKSxoPWwsZD1wLF89dixnPXk7dmFyIEk9cGwoVCkuYXR0cigicG9pbnRlci1ldmVudHMiLCJub25lIiksWT1JLnNlbGVjdEFsbCgiLm92ZXJsYXkiKS5hdHRyKCJjdXJzb3IiLGRkW05dKTtpZih0LmV2ZW50LnRvdWNoZXMpSS5vbigidG91Y2htb3ZlLmJydXNoIixlLCEwKS5vbigidG91Y2hlbmQuYnJ1c2ggdG91Y2hjYW5jZWwuYnJ1c2giLHUsITApO2Vsc2V7dmFyIEI9cGwodC5ldmVudC52aWV3KS5vbigia2V5ZG93bi5icnVzaCIsYSwhMCkub24oImtleXVwLmJydXNoIixzLCEwKS5vbigibW91c2Vtb3ZlLmJydXNoIixlLCEwKS5vbigibW91c2V1cC5icnVzaCIsdSwhMCk7Z2wodC5ldmVudC52aWV3KX1iZSgpLG9wKFQpLHIuY2FsbChUKSxGLnN0YXJ0KCl9fWZ1bmN0aW9uIGEoKXt2YXIgdD10aGlzLl9fYnJ1c2h8fHtzZWxlY3Rpb246bnVsbH07cmV0dXJuIHQuZXh0ZW50PXMuYXBwbHkodGhpcyxhcmd1bWVudHMpLHQuZGltPW4sdH12YXIgYyxzPVRlLGY9TWUsbD1wKGUsInN0YXJ0IiwiYnJ1c2giLCJlbmQiKSxoPTY7cmV0dXJuIGUubW92ZT1mdW5jdGlvbih0LGUpe3Quc2VsZWN0aW9uP3Qub24oInN0YXJ0LmJydXNoIixmdW5jdGlvbigpe2kodGhpcyxhcmd1bWVudHMpLmJlZm9yZXN0YXJ0KCkuc3RhcnQoKX0pLm9uKCJpbnRlcnJ1cHQuYnJ1c2ggZW5kLmJydXNoIixmdW5jdGlvbigpe2kodGhpcyxhcmd1bWVudHMpLmVuZCgpfSkudHdlZW4oImJydXNoIixmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dS5zZWxlY3Rpb249MT09PXQmJmtlKHMpP251bGw6Zih0KSxyLmNhbGwobyksYS5icnVzaCgpfXZhciBvPXRoaXMsdT1vLl9fYnJ1c2gsYT1pKG8sYXJndW1lbnRzKSxjPXUuc2VsZWN0aW9uLHM9bi5pbnB1dCgiZnVuY3Rpb24iPT10eXBlb2YgZT9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTplLHUuZXh0ZW50KSxmPW1oKGMscyk7cmV0dXJuIGMmJnM/dDp0KDEpfSk6dC5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxvPWFyZ3VtZW50cyx1PXQuX19icnVzaCxhPW4uaW5wdXQoImZ1bmN0aW9uIj09dHlwZW9mIGU/ZS5hcHBseSh0LG8pOmUsdS5leHRlbnQpLGM9aSh0LG8pLmJlZm9yZXN0YXJ0KCk7b3AodCksdS5zZWxlY3Rpb249bnVsbD09YXx8a2UoYSk/bnVsbDphLHIuY2FsbCh0KSxjLnN0YXJ0KCkuYnJ1c2goKS5lbmQoKX0pfSxvLnByb3RvdHlwZT17YmVmb3Jlc3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gMT09PSsrdGhpcy5hY3RpdmUmJih0aGlzLnN0YXRlLmVtaXR0ZXI9dGhpcyx0aGlzLnN0YXJ0aW5nPSEwKSx0aGlzfSxzdGFydDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXJ0aW5nJiYodGhpcy5zdGFydGluZz0hMSx0aGlzLmVtaXQoInN0YXJ0IikpLHRoaXN9LGJydXNoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW1pdCgiYnJ1c2giKSx0aGlzfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PS0tdGhpcy5hY3RpdmUmJihkZWxldGUgdGhpcy5zdGF0ZS5lbWl0dGVyLHRoaXMuZW1pdCgiZW5kIikpLHRoaXN9LGVtaXQ6ZnVuY3Rpb24odCl7UyhuZXcgb2QoZSx0LG4ub3V0cHV0KHRoaXMuc3RhdGUuc2VsZWN0aW9uKSksbC5hcHBseSxsLFt0LHRoaXMudGhhdCx0aGlzLmFyZ3NdKX19LGUuZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6aWQoW1srdFswXVswXSwrdFswXVsxXV0sWyt0WzFdWzBdLCt0WzFdWzFdXV0pLGUpOnN9LGUuZmlsdGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6aWQoISF0KSxlKTpmfSxlLmhhbmRsZVNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9K3QsZSk6aH0sZS5vbj1mdW5jdGlvbigpe3ZhciB0PWwub24uYXBwbHkobCxhcmd1bWVudHMpO3JldHVybiB0PT09bD9lOnR9LGV9ZnVuY3Rpb24gemUodCl7cmV0dXJuIGZ1bmN0aW9uKG4sZSl7cmV0dXJuIHQobi5zb3VyY2UudmFsdWUrbi50YXJnZXQudmFsdWUsZS5zb3VyY2UudmFsdWUrZS50YXJnZXQudmFsdWUpfX1mdW5jdGlvbiBQZSgpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIifWZ1bmN0aW9uIFJlKCl7cmV0dXJuIG5ldyBQZX1mdW5jdGlvbiBxZSh0KXtyZXR1cm4gdC5zb3VyY2V9ZnVuY3Rpb24gTGUodCl7cmV0dXJuIHQudGFyZ2V0fWZ1bmN0aW9uIFVlKHQpe3JldHVybiB0LnJhZGl1c31mdW5jdGlvbiBEZSh0KXtyZXR1cm4gdC5zdGFydEFuZ2xlfWZ1bmN0aW9uIE9lKHQpe3JldHVybiB0LmVuZEFuZ2xlfWZ1bmN0aW9uIEZlKCl7fWZ1bmN0aW9uIEllKHQsbil7dmFyIGU9bmV3IEZlO2lmKHQgaW5zdGFuY2VvZiBGZSl0LmVhY2goZnVuY3Rpb24odCxuKXtlLnNldChuLHQpfSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgcixpPS0xLG89dC5sZW5ndGg7aWYobnVsbD09bilmb3IoOysraTxvOyllLnNldChpLHRbaV0pO2Vsc2UgZm9yKDsrK2k8bzspZS5zZXQobihyPXRbaV0saSx0KSxyKX1lbHNlIGlmKHQpZm9yKHZhciB1IGluIHQpZS5zZXQodSx0W3VdKTtyZXR1cm4gZX1mdW5jdGlvbiBZZSgpe3JldHVybnt9fWZ1bmN0aW9uIEJlKHQsbixlKXt0W25dPWV9ZnVuY3Rpb24gamUoKXtyZXR1cm4gSWUoKX1mdW5jdGlvbiBIZSh0LG4sZSl7dC5zZXQobixlKX1mdW5jdGlvbiBYZSgpe31mdW5jdGlvbiBWZSh0LG4pe3ZhciBlPW5ldyBYZTtpZih0IGluc3RhbmNlb2YgWGUpdC5lYWNoKGZ1bmN0aW9uKHQpe2UuYWRkKHQpfSk7ZWxzZSBpZih0KXt2YXIgcj0tMSxpPXQubGVuZ3RoO2lmKG51bGw9PW4pZm9yKDsrK3I8aTspZS5hZGQodFtyXSk7ZWxzZSBmb3IoOysrcjxpOyllLmFkZChuKHRbcl0scix0KSl9cmV0dXJuIGV9ZnVuY3Rpb24gV2UodCl7cmV0dXJuIG5ldyBGdW5jdGlvbigiZCIsInJldHVybiB7Iit0Lm1hcChmdW5jdGlvbih0LG4pe3JldHVybiBKU09OLnN0cmluZ2lmeSh0KSsiOiBkWyIrbisiXSJ9KS5qb2luKCIsIikrIn0iKX1mdW5jdGlvbiAkZSh0LG4pe3ZhciBlPVdlKHQpO3JldHVybiBmdW5jdGlvbihyLGkpe3JldHVybiBuKGUociksaSx0KX19ZnVuY3Rpb24gWmUodCl7dmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKSxlPVtdO3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24odCl7Zm9yKHZhciByIGluIHQpciBpbiBufHxlLnB1c2gobltyXT1yKX0pLGV9ZnVuY3Rpb24gR2UodCxuLGUscil7aWYoaXNOYU4obil8fGlzTmFOKGUpKXJldHVybiB0O3ZhciBpLG8sdSxhLGMscyxmLGwsaCxwPXQuX3Jvb3QsZD17ZGF0YTpyfSx2PXQuX3gwLF89dC5feTAseT10Ll94MSxnPXQuX3kxO2lmKCFwKXJldHVybiB0Ll9yb290PWQsdDtmb3IoO3AubGVuZ3RoOylpZigocz1uPj0obz0odit5KS8yKSk/dj1vOnk9bywoZj1lPj0odT0oXytnKS8yKSk/Xz11Omc9dSxpPXAsIShwPXBbbD1mPDwxfHNdKSlyZXR1cm4gaVtsXT1kLHQ7aWYoYT0rdC5feC5jYWxsKG51bGwscC5kYXRhKSxjPSt0Ll95LmNhbGwobnVsbCxwLmRhdGEpLG49PT1hJiZlPT09YylyZXR1cm4gZC5uZXh0PXAsaT9pW2xdPWQ6dC5fcm9vdD1kLHQ7ZG8gaT1pP2lbbF09bmV3IEFycmF5KDQpOnQuX3Jvb3Q9bmV3IEFycmF5KDQpLChzPW4+PShvPSh2K3kpLzIpKT92PW86eT1vLChmPWU+PSh1PShfK2cpLzIpKT9fPXU6Zz11O3doaWxlKChsPWY8PDF8cyk9PT0oaD0oYz49dSk8PDF8YT49bykpO3JldHVybiBpW2hdPXAsaVtsXT1kLHR9ZnVuY3Rpb24gSmUodCl7dmFyIG4sZSxyLGksbz10Lmxlbmd0aCx1PW5ldyBBcnJheShvKSxhPW5ldyBBcnJheShvKSxjPTEvMCxzPTEvMCxmPS0oMS8wKSxsPS0oMS8wKTtmb3IoZT0wO2U8bzsrK2UpaXNOYU4ocj0rdGhpcy5feC5jYWxsKG51bGwsbj10W2VdKSl8fGlzTmFOKGk9K3RoaXMuX3kuY2FsbChudWxsLG4pKXx8KHVbZV09cixhW2VdPWkscjxjJiYoYz1yKSxyPmYmJihmPXIpLGk8cyYmKHM9aSksaT5sJiYobD1pKSk7Zm9yKGY8YyYmKGM9dGhpcy5feDAsZj10aGlzLl94MSksbDxzJiYocz10aGlzLl95MCxsPXRoaXMuX3kxKSx0aGlzLmNvdmVyKGMscykuY292ZXIoZixsKSxlPTA7ZTxvOysrZSlHZSh0aGlzLHVbZV0sYVtlXSx0W2VdKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBRZSh0KXtmb3IodmFyIG49MCxlPXQubGVuZ3RoO248ZTsrK24pdGhpcy5yZW1vdmUodFtuXSk7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gS2UodCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gdHIodCl7cmV0dXJuIHRbMV19ZnVuY3Rpb24gbnIodCxuLGUpe3ZhciByPW5ldyBlcihudWxsPT1uP0tlOm4sbnVsbD09ZT90cjplLE5hTixOYU4sTmFOLE5hTik7cmV0dXJuIG51bGw9PXQ/cjpyLmFkZEFsbCh0KX1mdW5jdGlvbiBlcih0LG4sZSxyLGksbyl7dGhpcy5feD10LHRoaXMuX3k9bix0aGlzLl94MD1lLHRoaXMuX3kwPXIsdGhpcy5feDE9aSx0aGlzLl95MT1vLHRoaXMuX3Jvb3Q9dm9pZCAwfWZ1bmN0aW9uIHJyKHQpe2Zvcih2YXIgbj17ZGF0YTp0LmRhdGF9LGU9bjt0PXQubmV4dDspZT1lLm5leHQ9e2RhdGE6dC5kYXRhfTtyZXR1cm4gbn1mdW5jdGlvbiBpcih0KXtyZXR1cm4gdC54K3Qudnh9ZnVuY3Rpb24gb3IodCl7cmV0dXJuIHQueSt0LnZ5fWZ1bmN0aW9uIHVyKHQpe3JldHVybiB0LmluZGV4fWZ1bmN0aW9uIGFyKHQsbil7dmFyIGU9dC5nZXQobik7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nOiAiK24pO3JldHVybiBlfWZ1bmN0aW9uIGNyKHQpe3JldHVybiB0Lnh9ZnVuY3Rpb24gc3IodCl7cmV0dXJuIHQueX1mdW5jdGlvbiBmcih0KXtpZighKG49Q3YuZXhlYyh0KSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZvcm1hdDogIit0KTt2YXIgbixlPW5bMV18fCIgIixyPW5bMl18fCI+IixpPW5bM118fCItIixvPW5bNF18fCIiLHU9ISFuWzVdLGE9bls2XSYmK25bNl0sYz0hIW5bN10scz1uWzhdJiYrbls4XS5zbGljZSgxKSxmPW5bOV18fCIiOyJuIj09PWY/KGM9ITAsZj0iZyIpOkF2W2ZdfHwoZj0iIiksKHV8fCIwIj09PWUmJiI9Ij09PXIpJiYodT0hMCxlPSIwIixyPSI9IiksdGhpcy5maWxsPWUsdGhpcy5hbGlnbj1yLHRoaXMuc2lnbj1pLHRoaXMuc3ltYm9sPW8sdGhpcy56ZXJvPXUsdGhpcy53aWR0aD1hLHRoaXMuY29tbWE9Yyx0aGlzLnByZWNpc2lvbj1zLHRoaXMudHlwZT1mfWZ1bmN0aW9uIGxyKHQpe3JldHVybiB0fWZ1bmN0aW9uIGhyKG4pe3JldHVybiBQdj1xdihuKSwNCnQuZm9ybWF0PVB2LmZvcm1hdCx0LmZvcm1hdFByZWZpeD1Qdi5mb3JtYXRQcmVmaXgsUHZ9ZnVuY3Rpb24gcHIoKXt0aGlzLnJlc2V0KCl9ZnVuY3Rpb24gZHIodCxuLGUpe3ZhciByPXQucz1uK2UsaT1yLW4sbz1yLWk7dC50PW4tbysoZS1pKX1mdW5jdGlvbiB2cih0KXtyZXR1cm4gdD4xPzA6dDwtMT9tXzpNYXRoLmFjb3ModCl9ZnVuY3Rpb24gX3IodCl7cmV0dXJuIHQ+MT94Xzp0PC0xPy14XzpNYXRoLmFzaW4odCl9ZnVuY3Rpb24geXIodCl7cmV0dXJuKHQ9Ul8odC8yKSkqdH1mdW5jdGlvbiBncigpe31mdW5jdGlvbiBtcih0LG4pe3QmJk9fLmhhc093blByb3BlcnR5KHQudHlwZSkmJk9fW3QudHlwZV0odCxuKX1mdW5jdGlvbiB4cih0LG4sZSl7dmFyIHIsaT0tMSxvPXQubGVuZ3RoLWU7Zm9yKG4ubGluZVN0YXJ0KCk7KytpPG87KXI9dFtpXSxuLnBvaW50KHJbMF0sclsxXSxyWzJdKTtuLmxpbmVFbmQoKX1mdW5jdGlvbiBicih0LG4pe3ZhciBlPS0xLHI9dC5sZW5ndGg7Zm9yKG4ucG9seWdvblN0YXJ0KCk7KytlPHI7KXhyKHRbZV0sbiwxKTtuLnBvbHlnb25FbmQoKX1mdW5jdGlvbiB3cigpe0JfLnBvaW50PVRyfWZ1bmN0aW9uIE1yKCl7TnIoRnYsSXYpfWZ1bmN0aW9uIFRyKHQsbil7Ql8ucG9pbnQ9TnIsRnY9dCxJdj1uLHQqPVRfLG4qPVRfLFl2PXQsQnY9RV8obj1uLzIrYl8pLGp2PVJfKG4pfWZ1bmN0aW9uIE5yKHQsbil7dCo9VF8sbio9VF8sbj1uLzIrYl87dmFyIGU9dC1ZdixyPWU+PTA/MTotMSxpPXIqZSxvPUVfKG4pLHU9Ul8obiksYT1qdip1LGM9QnYqbythKkVfKGkpLHM9YSpyKlJfKGkpO0lfLmFkZChTXyhzLGMpKSxZdj10LEJ2PW8sanY9dX1mdW5jdGlvbiBrcih0KXtyZXR1cm5bU18odFsxXSx0WzBdKSxfcih0WzJdKV19ZnVuY3Rpb24gU3IodCl7dmFyIG49dFswXSxlPXRbMV0scj1FXyhlKTtyZXR1cm5bcipFXyhuKSxyKlJfKG4pLFJfKGUpXX1mdW5jdGlvbiBFcih0LG4pe3JldHVybiB0WzBdKm5bMF0rdFsxXSpuWzFdK3RbMl0qblsyXX1mdW5jdGlvbiBBcih0LG4pe3JldHVyblt0WzFdKm5bMl0tdFsyXSpuWzFdLHRbMl0qblswXS10WzBdKm5bMl0sdFswXSpuWzFdLXRbMV0qblswXV19ZnVuY3Rpb24gQ3IodCxuKXt0WzBdKz1uWzBdLHRbMV0rPW5bMV0sdFsyXSs9blsyXX1mdW5jdGlvbiB6cih0LG4pe3JldHVyblt0WzBdKm4sdFsxXSpuLHRbMl0qbl19ZnVuY3Rpb24gUHIodCl7dmFyIG49TF8odFswXSp0WzBdK3RbMV0qdFsxXSt0WzJdKnRbMl0pO3RbMF0vPW4sdFsxXS89bix0WzJdLz1ufWZ1bmN0aW9uIFJyKHQsbil7UXYucHVzaChLdj1bSHY9dCxWdj10XSksbjxYdiYmKFh2PW4pLG4+V3YmJihXdj1uKX1mdW5jdGlvbiBxcih0LG4pe3ZhciBlPVNyKFt0KlRfLG4qVF9dKTtpZihKdil7dmFyIHI9QXIoSnYsZSksaT1bclsxXSwtclswXSwwXSxvPUFyKGkscik7UHIobyksbz1rcihvKTt2YXIgdSxhPXQtJHYsYz1hPjA/MTotMSxzPW9bMF0qTV8qYyxmPU5fKGEpPjE4MDtmXihjKiR2PHMmJnM8Yyp0KT8odT1vWzFdKk1fLHU+V3YmJihXdj11KSk6KHM9KHMrMzYwKSUzNjAtMTgwLGZeKGMqJHY8cyYmczxjKnQpPyh1PS1vWzFdKk1fLHU8WHYmJihYdj11KSk6KG48WHYmJihYdj1uKSxuPld2JiYoV3Y9bikpKSxmP3Q8JHY/SXIoSHYsdCk+SXIoSHYsVnYpJiYoVnY9dCk6SXIodCxWdik+SXIoSHYsVnYpJiYoSHY9dCk6VnY+PUh2Pyh0PEh2JiYoSHY9dCksdD5WdiYmKFZ2PXQpKTp0PiR2P0lyKEh2LHQpPklyKEh2LFZ2KSYmKFZ2PXQpOklyKHQsVnYpPklyKEh2LFZ2KSYmKEh2PXQpfWVsc2UgUnIodCxuKTtKdj1lLCR2PXR9ZnVuY3Rpb24gTHIoKXtYXy5wb2ludD1xcn1mdW5jdGlvbiBVcigpe0t2WzBdPUh2LEt2WzFdPVZ2LFhfLnBvaW50PVJyLEp2PW51bGx9ZnVuY3Rpb24gRHIodCxuKXtpZihKdil7dmFyIGU9dC0kdjtIXy5hZGQoTl8oZSk+MTgwP2UrKGU+MD8zNjA6LTM2MCk6ZSl9ZWxzZSBadj10LEd2PW47Ql8ucG9pbnQodCxuKSxxcih0LG4pfWZ1bmN0aW9uIE9yKCl7Ql8ubGluZVN0YXJ0KCl9ZnVuY3Rpb24gRnIoKXtEcihadixHdiksQl8ubGluZUVuZCgpLE5fKEhfKT55XyYmKEh2PS0oVnY9MTgwKSksS3ZbMF09SHYsS3ZbMV09VnYsSnY9bnVsbH1mdW5jdGlvbiBJcih0LG4pe3JldHVybihuLT10KTwwP24rMzYwOm59ZnVuY3Rpb24gWXIodCxuKXtyZXR1cm4gdFswXS1uWzBdfWZ1bmN0aW9uIEJyKHQsbil7cmV0dXJuIHRbMF08PXRbMV0/dFswXTw9biYmbjw9dFsxXTpuPHRbMF18fHRbMV08bn1mdW5jdGlvbiBqcih0LG4pe3QqPVRfLG4qPVRfO3ZhciBlPUVfKG4pO0hyKGUqRV8odCksZSpSXyh0KSxSXyhuKSl9ZnVuY3Rpb24gSHIodCxuLGUpeysrdF8sZV8rPSh0LWVfKS90XyxyXys9KG4tcl8pL3RfLGlfKz0oZS1pXykvdF99ZnVuY3Rpb24gWHIoKXtXXy5wb2ludD1Wcn1mdW5jdGlvbiBWcih0LG4pe3QqPVRfLG4qPVRfO3ZhciBlPUVfKG4pO3BfPWUqRV8odCksZF89ZSpSXyh0KSx2Xz1SXyhuKSxXXy5wb2ludD1XcixIcihwXyxkXyx2Xyl9ZnVuY3Rpb24gV3IodCxuKXt0Kj1UXyxuKj1UXzt2YXIgZT1FXyhuKSxyPWUqRV8odCksaT1lKlJfKHQpLG89Ul8obiksdT1TXyhMXygodT1kXypvLXZfKmkpKnUrKHU9dl8qci1wXypvKSp1Kyh1PXBfKmktZF8qcikqdSkscF8qcitkXyppK3ZfKm8pO25fKz11LG9fKz11KihwXysocF89cikpLHVfKz11KihkXysoZF89aSkpLGFfKz11Kih2Xysodl89bykpLEhyKHBfLGRfLHZfKX1mdW5jdGlvbiAkcigpe1dfLnBvaW50PWpyfWZ1bmN0aW9uIFpyKCl7V18ucG9pbnQ9SnJ9ZnVuY3Rpb24gR3IoKXtRcihsXyxoXyksV18ucG9pbnQ9anJ9ZnVuY3Rpb24gSnIodCxuKXtsXz10LGhfPW4sdCo9VF8sbio9VF8sV18ucG9pbnQ9UXI7dmFyIGU9RV8obik7cF89ZSpFXyh0KSxkXz1lKlJfKHQpLHZfPVJfKG4pLEhyKHBfLGRfLHZfKX1mdW5jdGlvbiBRcih0LG4pe3QqPVRfLG4qPVRfO3ZhciBlPUVfKG4pLHI9ZSpFXyh0KSxpPWUqUl8odCksbz1SXyhuKSx1PWRfKm8tdl8qaSxhPXZfKnItcF8qbyxjPXBfKmktZF8qcixzPUxfKHUqdSthKmErYypjKSxmPXBfKnIrZF8qaSt2XypvLGw9cyYmLXZyKGYpL3MsaD1TXyhzLGYpO2NfKz1sKnUsc18rPWwqYSxmXys9bCpjLG5fKz1oLG9fKz1oKihwXysocF89cikpLHVfKz1oKihkXysoZF89aSkpLGFfKz1oKih2Xysodl89bykpLEhyKHBfLGRfLHZfKX1mdW5jdGlvbiBLcih0LG4pe3JldHVyblt0Pm1fP3Qtd186dDwtbV8/dCt3Xzp0LG5dfWZ1bmN0aW9uIHRpKHQsbixlKXtyZXR1cm4odCU9d18pP258fGU/R18oZWkodCkscmkobixlKSk6ZWkodCk6bnx8ZT9yaShuLGUpOktyfWZ1bmN0aW9uIG5pKHQpe3JldHVybiBmdW5jdGlvbihuLGUpe3JldHVybiBuKz10LFtuPm1fP24td186bjwtbV8/bit3XzpuLGVdfX1mdW5jdGlvbiBlaSh0KXt2YXIgbj1uaSh0KTtyZXR1cm4gbi5pbnZlcnQ9bmkoLXQpLG59ZnVuY3Rpb24gcmkodCxuKXtmdW5jdGlvbiBlKHQsbil7dmFyIGU9RV8obiksYT1FXyh0KSplLGM9Ul8odCkqZSxzPVJfKG4pLGY9cypyK2EqaTtyZXR1cm5bU18oYypvLWYqdSxhKnItcyppKSxfcihmKm8rYyp1KV19dmFyIHI9RV8odCksaT1SXyh0KSxvPUVfKG4pLHU9Ul8obik7cmV0dXJuIGUuaW52ZXJ0PWZ1bmN0aW9uKHQsbil7dmFyIGU9RV8obiksYT1FXyh0KSplLGM9Ul8odCkqZSxzPVJfKG4pLGY9cypvLWMqdTtyZXR1cm5bU18oYypvK3MqdSxhKnIrZippKSxfcihmKnItYSppKV19LGV9ZnVuY3Rpb24gaWkodCxuLGUscixpLG8pe2lmKGUpe3ZhciB1PUVfKG4pLGE9Ul8obiksYz1yKmU7bnVsbD09aT8oaT1uK3Iqd18sbz1uLWMvMik6KGk9b2kodSxpKSxvPW9pKHUsbyksKHI+MD9pPG86aT5vKSYmKGkrPXIqd18pKTtmb3IodmFyIHMsZj1pO3I+MD9mPm86ZjxvO2YtPWMpcz1rcihbdSwtYSpFXyhmKSwtYSpSXyhmKV0pLHQucG9pbnQoc1swXSxzWzFdKX19ZnVuY3Rpb24gb2kodCxuKXtuPVNyKG4pLG5bMF0tPXQsUHIobik7dmFyIGU9dnIoLW5bMV0pO3JldHVybigoLW5bMl08MD8tZTplKSt3Xy15Xykld199ZnVuY3Rpb24gdWkodCxuLGUscil7dGhpcy54PXQsdGhpcy56PW4sdGhpcy5vPWUsdGhpcy5lPXIsdGhpcy52PSExLHRoaXMubj10aGlzLnA9bnVsbH1mdW5jdGlvbiBhaSh0KXtpZihuPXQubGVuZ3RoKXtmb3IodmFyIG4sZSxyPTAsaT10WzBdOysrcjxuOylpLm49ZT10W3JdLGUucD1pLGk9ZTtpLm49ZT10WzBdLGUucD1pfX1mdW5jdGlvbiBjaSh0LG4sZSxyKXtmdW5jdGlvbiBpKGksbyl7cmV0dXJuIHQ8PWkmJmk8PWUmJm48PW8mJm88PXJ9ZnVuY3Rpb24gbyhpLG8sYSxzKXt2YXIgZj0wLGw9MDtpZihudWxsPT1pfHwoZj11KGksYSkpIT09KGw9dShvLGEpKXx8YyhpLG8pPDBeYT4wKXtkbyBzLnBvaW50KDA9PT1mfHwzPT09Zj90OmUsZj4xP3I6bik7d2hpbGUoKGY9KGYrYSs0KSU0KSE9PWwpfWVsc2Ugcy5wb2ludChvWzBdLG9bMV0pfWZ1bmN0aW9uIHUocixpKXtyZXR1cm4gTl8oclswXS10KTx5Xz9pPjA/MDozOk5fKHJbMF0tZSk8eV8/aT4wPzI6MTpOXyhyWzFdLW4pPHlfP2k+MD8xOjA6aT4wPzM6Mn1mdW5jdGlvbiBhKHQsbil7cmV0dXJuIGModC54LG4ueCl9ZnVuY3Rpb24gYyh0LG4pe3ZhciBlPXUodCwxKSxyPXUobiwxKTtyZXR1cm4gZSE9PXI/ZS1yOjA9PT1lP25bMV0tdFsxXToxPT09ZT90WzBdLW5bMF06Mj09PWU/dFsxXS1uWzFdOm5bMF0tdFswXX1yZXR1cm4gZnVuY3Rpb24odSl7ZnVuY3Rpb24gYyh0LG4pe2kodCxuKSYmay5wb2ludCh0LG4pfWZ1bmN0aW9uIHMoKXtmb3IodmFyIG49MCxlPTAsaT1fLmxlbmd0aDtlPGk7KytlKWZvcih2YXIgbyx1LGE9X1tlXSxjPTEscz1hLmxlbmd0aCxmPWFbMF0sbD1mWzBdLGg9ZlsxXTtjPHM7KytjKW89bCx1PWgsZj1hW2NdLGw9ZlswXSxoPWZbMV0sdTw9cj9oPnImJihsLW8pKihyLXUpPihoLXUpKih0LW8pJiYrK246aDw9ciYmKGwtbykqKHItdSk8KGgtdSkqKHQtbykmJi0tbjtyZXR1cm4gbn1mdW5jdGlvbiBmKCl7az1TLHY9W10sXz1bXSxOPSEwfWZ1bmN0aW9uIGwoKXt2YXIgdD1zKCksbj1OJiZ0LGU9KHY9S3ModikpLmxlbmd0aDsobnx8ZSkmJih1LnBvbHlnb25TdGFydCgpLG4mJih1LmxpbmVTdGFydCgpLG8obnVsbCxudWxsLDEsdSksdS5saW5lRW5kKCkpLGUmJnB5KHYsYSx0LG8sdSksdS5wb2x5Z29uRW5kKCkpLGs9dSx2PV89eT1udWxsfWZ1bmN0aW9uIGgoKXtFLnBvaW50PWQsXyYmXy5wdXNoKHk9W10pLFQ9ITAsTT0hMSxiPXc9TmFOfWZ1bmN0aW9uIHAoKXt2JiYoZChnLG0pLHgmJk0mJlMucmVqb2luKCksdi5wdXNoKFMucmVzdWx0KCkpKSxFLnBvaW50PWMsTSYmay5saW5lRW5kKCl9ZnVuY3Rpb24gZChvLHUpe3ZhciBhPWkobyx1KTtpZihfJiZ5LnB1c2goW28sdV0pLFQpZz1vLG09dSx4PWEsVD0hMSxhJiYoay5saW5lU3RhcnQoKSxrLnBvaW50KG8sdSkpO2Vsc2UgaWYoYSYmTSlrLnBvaW50KG8sdSk7ZWxzZXt2YXIgYz1bYj1NYXRoLm1heCh2eSxNYXRoLm1pbihkeSxiKSksdz1NYXRoLm1heCh2eSxNYXRoLm1pbihkeSx3KSldLHM9W289TWF0aC5tYXgodnksTWF0aC5taW4oZHksbykpLHU9TWF0aC5tYXgodnksTWF0aC5taW4oZHksdSkpXTtseShjLHMsdCxuLGUscik/KE18fChrLmxpbmVTdGFydCgpLGsucG9pbnQoY1swXSxjWzFdKSksay5wb2ludChzWzBdLHNbMV0pLGF8fGsubGluZUVuZCgpLE49ITEpOmEmJihrLmxpbmVTdGFydCgpLGsucG9pbnQobyx1KSxOPSExKX1iPW8sdz11LE09YX12YXIgdixfLHksZyxtLHgsYix3LE0sVCxOLGs9dSxTPWZ5KCksRT17cG9pbnQ6YyxsaW5lU3RhcnQ6aCxsaW5lRW5kOnAscG9seWdvblN0YXJ0OmYscG9seWdvbkVuZDpsfTtyZXR1cm4gRX19ZnVuY3Rpb24gc2koKXtneS5wb2ludD1saSxneS5saW5lRW5kPWZpfWZ1bmN0aW9uIGZpKCl7Z3kucG9pbnQ9Z3kubGluZUVuZD1ncn1mdW5jdGlvbiBsaSh0LG4pe3QqPVRfLG4qPVRfLEpfPXQsUV89Ul8obiksS189RV8obiksZ3kucG9pbnQ9aGl9ZnVuY3Rpb24gaGkodCxuKXt0Kj1UXyxuKj1UXzt2YXIgZT1SXyhuKSxyPUVfKG4pLGk9Tl8odC1KXyksbz1FXyhpKSx1PVJfKGkpLGE9cip1LGM9S18qZS1RXypyKm8scz1RXyplK0tfKnIqbzt5eS5hZGQoU18oTF8oYSphK2MqYykscykpLEpfPXQsUV89ZSxLXz1yfWZ1bmN0aW9uIHBpKHQsbixlKXt2YXIgcj1Jcyh0LG4teV8sZSkuY29uY2F0KG4pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gci5tYXAoZnVuY3Rpb24obil7cmV0dXJuW3Qsbl19KX19ZnVuY3Rpb24gZGkodCxuLGUpe3ZhciByPUlzKHQsbi15XyxlKS5jb25jYXQobik7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiByLm1hcChmdW5jdGlvbihuKXtyZXR1cm5bbix0XX0pfX1mdW5jdGlvbiB2aSgpe2Z1bmN0aW9uIHQoKXtyZXR1cm57dHlwZToiTXVsdGlMaW5lU3RyaW5nIixjb29yZGluYXRlczpuKCl9fWZ1bmN0aW9uIG4oKXtyZXR1cm4gSXMoQV8oby9fKSpfLGksXykubWFwKGgpLmNvbmNhdChJcyhBXyhzL3kpKnksYyx5KS5tYXAocCkpLmNvbmNhdChJcyhBXyhyL2QpKmQsZSxkKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIE5fKHQlXyk+eV99KS5tYXAoZikpLmNvbmNhdChJcyhBXyhhL3YpKnYsdSx2KS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIE5fKHQleSk+eV99KS5tYXAobCkpfXZhciBlLHIsaSxvLHUsYSxjLHMsZixsLGgscCxkPTEwLHY9ZCxfPTkwLHk9MzYwLGc9Mi41O3JldHVybiB0LmxpbmVzPWZ1bmN0aW9uKCl7cmV0dXJuIG4oKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJue3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOnR9fSl9LHQub3V0bGluZT1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbaChvKS5jb25jYXQocChjKS5zbGljZSgxKSxoKGkpLnJldmVyc2UoKS5zbGljZSgxKSxwKHMpLnJldmVyc2UoKS5zbGljZSgxKSldfX0sdC5leHRlbnQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dC5leHRlbnRNYWpvcihuKS5leHRlbnRNaW5vcihuKTp0LmV4dGVudE1pbm9yKCl9LHQuZXh0ZW50TWFqb3I9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K25bMF1bMF0saT0rblsxXVswXSxzPStuWzBdWzFdLGM9K25bMV1bMV0sbz5pJiYobj1vLG89aSxpPW4pLHM+YyYmKG49cyxzPWMsYz1uKSx0LnByZWNpc2lvbihnKSk6W1tvLHNdLFtpLGNdXX0sdC5leHRlbnRNaW5vcj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rblswXVswXSxlPStuWzFdWzBdLGE9K25bMF1bMV0sdT0rblsxXVsxXSxyPmUmJihuPXIscj1lLGU9biksYT51JiYobj1hLGE9dSx1PW4pLHQucHJlY2lzaW9uKGcpKTpbW3IsYV0sW2UsdV1dfSx0LnN0ZXA9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dC5zdGVwTWFqb3Iobikuc3RlcE1pbm9yKG4pOnQuc3RlcE1pbm9yKCl9LHQuc3RlcE1ham9yPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhfPStuWzBdLHk9K25bMV0sdCk6W18seV19LHQuc3RlcE1pbm9yPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPStuWzBdLHY9K25bMV0sdCk6W2Qsdl19LHQucHJlY2lzaW9uPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPStuLGY9cGkoYSx1LDkwKSxsPWRpKHIsZSxnKSxoPXBpKHMsYyw5MCkscD1kaShvLGksZyksdCk6Z30sdC5leHRlbnRNYWpvcihbWy0xODAsLTkwK3lfXSxbMTgwLDkwLXlfXV0pLmV4dGVudE1pbm9yKFtbLTE4MCwtODAteV9dLFsxODAsODAreV9dXSl9ZnVuY3Rpb24gX2koKXtyZXR1cm4gdmkoKSgpfWZ1bmN0aW9uIHlpKCl7U3kucG9pbnQ9Z2l9ZnVuY3Rpb24gZ2kodCxuKXtTeS5wb2ludD1taSx0eT1leT10LG55PXJ5PW59ZnVuY3Rpb24gbWkodCxuKXtreS5hZGQocnkqdC1leSpuKSxleT10LHJ5PW59ZnVuY3Rpb24geGkoKXttaSh0eSxueSl9ZnVuY3Rpb24gYmkodCxuKXt0PEV5JiYoRXk9dCksdD5DeSYmKEN5PXQpLG48QXkmJihBeT1uKSxuPnp5JiYoenk9bil9ZnVuY3Rpb24gd2kodCxuKXtSeSs9dCxxeSs9biwrK0x5fWZ1bmN0aW9uIE1pKCl7QnkucG9pbnQ9VGl9ZnVuY3Rpb24gVGkodCxuKXtCeS5wb2ludD1OaSx3aSh1eT10LGF5PW4pfWZ1bmN0aW9uIE5pKHQsbil7dmFyIGU9dC11eSxyPW4tYXksaT1MXyhlKmUrcipyKTtVeSs9aSoodXkrdCkvMixEeSs9aSooYXkrbikvMixPeSs9aSx3aSh1eT10LGF5PW4pfWZ1bmN0aW9uIGtpKCl7QnkucG9pbnQ9d2l9ZnVuY3Rpb24gU2koKXtCeS5wb2ludD1BaX1mdW5jdGlvbiBFaSgpe0NpKGl5LG95KX1mdW5jdGlvbiBBaSh0LG4pe0J5LnBvaW50PUNpLHdpKGl5PXV5PXQsb3k9YXk9bil9ZnVuY3Rpb24gQ2kodCxuKXt2YXIgZT10LXV5LHI9bi1heSxpPUxfKGUqZStyKnIpO1V5Kz1pKih1eSt0KS8yLER5Kz1pKihheStuKS8yLE95Kz1pLGk9YXkqdC11eSpuLEZ5Kz1pKih1eSt0KSxJeSs9aSooYXkrbiksWXkrPTMqaSx3aSh1eT10LGF5PW4pfWZ1bmN0aW9uIHppKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBQaSgpe3RoaXMuX3N0cmluZz1bXX1mdW5jdGlvbiBSaSh0KXtyZXR1cm4ibTAsIit0KyJhIit0KyIsIit0KyIgMCAxLDEgMCwiKy0yKnQrImEiK3QrIiwiK3QrIiAwIDEsMSAwLCIrMip0KyJ6In1mdW5jdGlvbiBxaSh0KXtyZXR1cm4gdC5sZW5ndGg+MX1mdW5jdGlvbiBMaSh0LG4pe3JldHVybigodD10LngpWzBdPDA/dFsxXS14Xy15Xzp4Xy10WzFdKS0oKG49bi54KVswXTwwP25bMV0teF8teV86eF8tblsxXSl9ZnVuY3Rpb24gVWkodCl7dmFyIG4sZT1OYU4scj1OYU4saT1OYU47cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe3QubGluZVN0YXJ0KCksbj0xfSxwb2ludDpmdW5jdGlvbihvLHUpe3ZhciBhPW8+MD9tXzotbV8sYz1OXyhvLWUpO05fKGMtbV8pPHlfPyh0LnBvaW50KGUscj0ocit1KS8yPjA/eF86LXhfKSx0LnBvaW50KGksciksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KGEsciksdC5wb2ludChvLHIpLG49MCk6aSE9PWEmJmM+PW1fJiYoTl8oZS1pKTx5XyYmKGUtPWkqeV8pLE5fKG8tYSk8eV8mJihvLT1hKnlfKSxyPURpKGUscixvLHUpLHQucG9pbnQoaSxyKSx0LmxpbmVFbmQoKSx0LmxpbmVTdGFydCgpLHQucG9pbnQoYSxyKSxuPTApLHQucG9pbnQoZT1vLHI9dSksaT1hfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dC5saW5lRW5kKCksZT1yPU5hTn0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gMi1ufX19ZnVuY3Rpb24gRGkodCxuLGUscil7dmFyIGksbyx1PVJfKHQtZSk7cmV0dXJuIE5fKHUpPnlfP2tfKChSXyhuKSoobz1FXyhyKSkqUl8oZSktUl8ocikqKGk9RV8obikpKlJfKHQpKS8oaSpvKnUpKToobityKS8yfWZ1bmN0aW9uIE9pKHQsbixlLHIpe3ZhciBpO2lmKG51bGw9PXQpaT1lKnhfLHIucG9pbnQoLW1fLGkpLHIucG9pbnQoMCxpKSxyLnBvaW50KG1fLGkpLHIucG9pbnQobV8sMCksci5wb2ludChtXywtaSksci5wb2ludCgwLC1pKSxyLnBvaW50KC1tXywtaSksci5wb2ludCgtbV8sMCksci5wb2ludCgtbV8saSk7ZWxzZSBpZihOXyh0WzBdLW5bMF0pPnlfKXt2YXIgbz10WzBdPG5bMF0/bV86LW1fO2k9ZSpvLzIsci5wb2ludCgtbyxpKSxyLnBvaW50KDAsaSksci5wb2ludChvLGkpfWVsc2Ugci5wb2ludChuWzBdLG5bMV0pfWZ1bmN0aW9uIEZpKHQpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgZT1uZXcgSWk7Zm9yKHZhciByIGluIHQpZVtyXT10W3JdO3JldHVybiBlLnN0cmVhbT1uLGV9fWZ1bmN0aW9uIElpKCl7fWZ1bmN0aW9uIFlpKHQsbixlKXt2YXIgcj1uWzFdWzBdLW5bMF1bMF0saT1uWzFdWzFdLW5bMF1bMV0sbz10LmNsaXBFeHRlbnQmJnQuY2xpcEV4dGVudCgpO3Quc2NhbGUoMTUwKS50cmFuc2xhdGUoWzAsMF0pLG51bGwhPW8mJnQuY2xpcEV4dGVudChudWxsKSxGXyhlLHQuc3RyZWFtKFB5KSk7dmFyIHU9UHkucmVzdWx0KCksYT1NYXRoLm1pbihyLyh1WzFdWzBdLXVbMF1bMF0pLGkvKHVbMV1bMV0tdVswXVsxXSkpLGM9K25bMF1bMF0rKHItYSoodVsxXVswXSt1WzBdWzBdKSkvMixzPStuWzBdWzFdKyhpLWEqKHVbMV1bMV0rdVswXVsxXSkpLzI7cmV0dXJuIG51bGwhPW8mJnQuY2xpcEV4dGVudChvKSx0LnNjYWxlKDE1MCphKS50cmFuc2xhdGUoW2Msc10pfWZ1bmN0aW9uIEJpKHQsbixlKXtyZXR1cm4gWWkodCxbWzAsMF0sbl0sZSl9ZnVuY3Rpb24gamkodCl7cmV0dXJuIEZpKHtwb2ludDpmdW5jdGlvbihuLGUpe249dChuLGUpLHRoaXMuc3RyZWFtLnBvaW50KG5bMF0sblsxXSl9fSl9ZnVuY3Rpb24gSGkodCxuKXtmdW5jdGlvbiBlKHIsaSxvLHUsYSxjLHMsZixsLGgscCxkLHYsXyl7dmFyIHk9cy1yLGc9Zi1pLG09eSp5K2cqZztpZihtPjQqbiYmdi0tKXt2YXIgeD11K2gsYj1hK3Asdz1jK2QsTT1MXyh4KngrYipiK3cqdyksVD1fcih3Lz1NKSxOPU5fKE5fKHcpLTEpPHlffHxOXyhvLWwpPHlfPyhvK2wpLzI6U18oYix4KSxrPXQoTixUKSxTPWtbMF0sRT1rWzFdLEE9Uy1yLEM9RS1pLHo9ZypBLXkqQzsoeip6L20+bnx8Tl8oKHkqQStnKkMpL20tLjUpPi4zfHx1KmgrYSpwK2MqZDxKeSkmJihlKHIsaSxvLHUsYSxjLFMsRSxOLHgvPU0sYi89TSx3LHYsXyksXy5wb2ludChTLEUpLGUoUyxFLE4seCxiLHcscyxmLGwsaCxwLGQsdixfKSl9fXJldHVybiBmdW5jdGlvbihuKXtmdW5jdGlvbiByKGUscil7ZT10KGUsciksbi5wb2ludChlWzBdLGVbMV0pfWZ1bmN0aW9uIGkoKXt5PU5hTix3LnBvaW50PW8sbi5saW5lU3RhcnQoKX1mdW5jdGlvbiBvKHIsaSl7dmFyIG89U3IoW3IsaV0pLHU9dChyLGkpO2UoeSxnLF8sbSx4LGIseT11WzBdLGc9dVsxXSxfPXIsbT1vWzBdLHg9b1sxXSxiPW9bMl0sR3ksbiksbi5wb2ludCh5LGcpfWZ1bmN0aW9uIHUoKXt3LnBvaW50PXIsbi5saW5lRW5kKCl9ZnVuY3Rpb24gYSgpe2koKSx3LnBvaW50PWMsdy5saW5lRW5kPXN9ZnVuY3Rpb24gYyh0LG4pe28oZj10LG4pLGw9eSxoPWcscD1tLGQ9eCx2PWIsdy5wb2ludD1vfWZ1bmN0aW9uIHMoKXtlKHksZyxfLG0seCxiLGwsaCxmLHAsZCx2LEd5LG4pLHcubGluZUVuZD11LHUoKX12YXIgZixsLGgscCxkLHYsXyx5LGcsbSx4LGIsdz17cG9pbnQ6cixsaW5lU3RhcnQ6aSxsaW5lRW5kOnUscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7bi5wb2x5Z29uU3RhcnQoKSx3LmxpbmVTdGFydD1hfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7bi5wb2x5Z29uRW5kKCksdy5saW5lU3RhcnQ9aX19O3JldHVybiB3fX1mdW5jdGlvbiBYaSh0KXtyZXR1cm4gVmkoZnVuY3Rpb24oKXtyZXR1cm4gdH0pKCl9ZnVuY3Rpb24gVmkodCl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gdD1mKHRbMF0qVF8sdFsxXSpUXyksW3RbMF0qXythLGMtdFsxXSpfXX1mdW5jdGlvbiBlKHQpe3JldHVybiB0PWYuaW52ZXJ0KCh0WzBdLWEpL18sKGMtdFsxXSkvXyksdCYmW3RbMF0qTV8sdFsxXSpNX119ZnVuY3Rpb24gcih0LG4pe3JldHVybiB0PXUodCxuKSxbdFswXSpfK2EsYy10WzFdKl9dfWZ1bmN0aW9uIGkoKXtmPUdfKHM9dGkoYix3LE0pLHUpO3ZhciB0PXUobSx4KTtyZXR1cm4gYT15LXRbMF0qXyxjPWcrdFsxXSpfLG8oKX1mdW5jdGlvbiBvKCl7cmV0dXJuIGQ9dj1udWxsLG59dmFyIHUsYSxjLHMsZixsLGgscCxkLHYsXz0xNTAseT00ODAsZz0yNTAsbT0wLHg9MCxiPTAsdz0wLE09MCxUPW51bGwsTj1XeSxrPW51bGwsUz1UeSxFPS41LEE9UXkocixFKTtyZXR1cm4gbi5zdHJlYW09ZnVuY3Rpb24odCl7cmV0dXJuIGQmJnY9PT10P2Q6ZD1LeShOKHMsQShTKHY9dCkpKSl9LG4uY2xpcEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhOPSt0PyR5KFQ9dCpUXyw2KlRfKTooVD1udWxsLFd5KSxvKCkpOlQqTV99LG4uY2xpcEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUz1udWxsPT10PyhrPWw9aD1wPW51bGwsVHkpOmNpKGs9K3RbMF1bMF0sbD0rdFswXVsxXSxoPSt0WzFdWzBdLHA9K3RbMV1bMV0pLG8oKSk6bnVsbD09az9udWxsOltbayxsXSxbaCxwXV19LG4uc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KF89K3QsaSgpKTpffSxuLnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT0rdFswXSxnPSt0WzFdLGkoKSk6W3ksZ119LG4uY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPXRbMF0lMzYwKlRfLHg9dFsxXSUzNjAqVF8saSgpKTpbbSpNXyx4Kk1fXX0sbi5yb3RhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9dFswXSUzNjAqVF8sdz10WzFdJTM2MCpUXyxNPXQubGVuZ3RoPjI/dFsyXSUzNjAqVF86MCxpKCkpOltiKk1fLHcqTV8sTSpNX119LG4ucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhBPVF5KHIsRT10KnQpLG8oKSk6TF8oRSl9LG4uZml0RXh0ZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFlpKG4sdCxlKX0sbi5maXRTaXplPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIEJpKG4sdCxlKX0sZnVuY3Rpb24oKXtyZXR1cm4gdT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxuLmludmVydD11LmludmVydCYmZSxpKCl9fWZ1bmN0aW9uIFdpKHQpe3ZhciBuPTAsZT1tXy8zLHI9VmkodCksaT1yKG4sZSk7cmV0dXJuIGkucGFyYWxsZWxzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3Iobj10WzBdKlRfLGU9dFsxXSpUXyk6W24qTV8sZSpNX119LGl9ZnVuY3Rpb24gJGkodCl7ZnVuY3Rpb24gbih0LG4pe3JldHVyblt0KmUsUl8obikvZV19dmFyIGU9RV8odCk7cmV0dXJuIG4uaW52ZXJ0PWZ1bmN0aW9uKHQsbil7cmV0dXJuW3QvZSxfcihuKmUpXX0sbn1mdW5jdGlvbiBaaSh0LG4pe2Z1bmN0aW9uIGUodCxuKXt2YXIgZT1MXyhvLTIqaSpSXyhuKSkvaTtyZXR1cm5bZSpSXyh0Kj1pKSx1LWUqRV8odCldfXZhciByPVJfKHQpLGk9KHIrUl8obikpLzI7aWYoTl8oaSk8eV8pcmV0dXJuICRpKHQpO3ZhciBvPTErciooMippLXIpLHU9TF8obykvaTtyZXR1cm4gZS5pbnZlcnQ9ZnVuY3Rpb24odCxuKXt2YXIgZT11LW47cmV0dXJuW1NfKHQsTl8oZSkpL2kqcV8oZSksX3IoKG8tKHQqdCtlKmUpKmkqaSkvKDIqaSkpXX0sZX1mdW5jdGlvbiBHaSh0KXt2YXIgbj10Lmxlbmd0aDtyZXR1cm57cG9pbnQ6ZnVuY3Rpb24oZSxyKXtmb3IodmFyIGk9LTE7KytpPG47KXRbaV0ucG9pbnQoZSxyKX0sc3BoZXJlOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPS0xOysrZTxuOyl0W2VdLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtmb3IodmFyIGU9LTE7KytlPG47KXRbZV0ubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtmb3IodmFyIGU9LTE7KytlPG47KXRbZV0ubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtmb3IodmFyIGU9LTE7KytlPG47KXRbZV0ucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtmb3IodmFyIGU9LTE7KytlPG47KXRbZV0ucG9seWdvbkVuZCgpfX19ZnVuY3Rpb24gSmkodCl7cmV0dXJuIGZ1bmN0aW9uKG4sZSl7dmFyIHI9RV8obiksaT1FXyhlKSxvPXQocippKTtyZXR1cm5bbyppKlJfKG4pLG8qUl8oZSldfX1mdW5jdGlvbiBRaSh0KXtyZXR1cm4gZnVuY3Rpb24obixlKXt2YXIgcj1MXyhuKm4rZSplKSxpPXQociksbz1SXyhpKSx1PUVfKGkpO3JldHVybltTXyhuKm8scip1KSxfcihyJiZlKm8vcildfX1mdW5jdGlvbiBLaSh0LG4pe3JldHVyblt0LHpfKFVfKCh4XytuKS8yKSldfWZ1bmN0aW9uIHRvKHQpe3ZhciBuLGU9WGkodCkscj1lLnNjYWxlLGk9ZS50cmFuc2xhdGUsbz1lLmNsaXBFeHRlbnQ7cmV0dXJuIGUuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHIodCksbiYmZS5jbGlwRXh0ZW50KG51bGwpLGUpOnIoKX0sZS50cmFuc2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGkodCksbiYmZS5jbGlwRXh0ZW50KG51bGwpLGUpOmkoKX0sZS5jbGlwRXh0ZW50PWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBuP251bGw6bygpO2lmKG49bnVsbD09dCl7dmFyIHU9bV8qcigpLGE9aSgpO3Q9W1thWzBdLXUsYVsxXS11XSxbYVswXSt1LGFbMV0rdV1dfXJldHVybiBvKHQpLGV9LGUuY2xpcEV4dGVudChudWxsKX1mdW5jdGlvbiBubyh0KXtyZXR1cm4gVV8oKHhfK3QpLzIpfWZ1bmN0aW9uIGVvKHQsbil7ZnVuY3Rpb24gZSh0LG4pe28+MD9uPC14Xyt5XyYmKG49LXhfK3lfKTpuPnhfLXlfJiYobj14Xy15Xyk7dmFyIGU9by9QXyhubyhuKSxpKTtyZXR1cm5bZSpSXyhpKnQpLG8tZSpFXyhpKnQpXX12YXIgcj1FXyh0KSxpPXQ9PT1uP1JfKHQpOnpfKHIvRV8obikpL3pfKG5vKG4pL25vKHQpKSxvPXIqUF8obm8odCksaSkvaTtyZXR1cm4gaT8oZS5pbnZlcnQ9ZnVuY3Rpb24odCxuKXt2YXIgZT1vLW4scj1xXyhpKSpMXyh0KnQrZSplKTtyZXR1cm5bU18odCxOXyhlKSkvaSpxXyhlKSwyKmtfKFBfKG8vciwxL2kpKS14X119LGUpOktpfWZ1bmN0aW9uIHJvKHQsbil7cmV0dXJuW3Qsbl19ZnVuY3Rpb24gaW8odCxuKXtmdW5jdGlvbiBlKHQsbil7dmFyIGU9by1uLHI9aSp0O3JldHVybltlKlJfKHIpLG8tZSpFXyhyKV19dmFyIHI9RV8odCksaT10PT09bj9SXyh0KTooci1FXyhuKSkvKG4tdCksbz1yL2krdDtyZXR1cm4gTl8oaSk8eV8/cm86KGUuaW52ZXJ0PWZ1bmN0aW9uKHQsbil7dmFyIGU9by1uO3JldHVybltTXyh0LE5fKGUpKS9pKnFfKGUpLG8tcV8oaSkqTF8odCp0K2UqZSldfSxlKX1mdW5jdGlvbiBvbyh0LG4pe3ZhciBlPUVfKG4pLHI9RV8odCkqZTtyZXR1cm5bZSpSXyh0KS9yLFJfKG4pL3JdfWZ1bmN0aW9uIHVvKHQsbixlLHIpe3JldHVybiAxPT09dCYmMT09PW4mJjA9PT1lJiYwPT09cj9UeTpGaSh7cG9pbnQ6ZnVuY3Rpb24oaSxvKXt0aGlzLnN0cmVhbS5wb2ludChpKnQrZSxvKm4rcil9fSl9ZnVuY3Rpb24gYW8odCxuKXtyZXR1cm5bRV8obikqUl8odCksUl8obildfWZ1bmN0aW9uIGNvKHQsbil7dmFyIGU9RV8obikscj0xK0VfKHQpKmU7cmV0dXJuW2UqUl8odCkvcixSXyhuKS9yXX1mdW5jdGlvbiBzbyh0LG4pe3JldHVyblt6XyhVXygoeF8rbikvMikpLC10XX1mdW5jdGlvbiBmbyh0LG4pe3JldHVybiB0LnBhcmVudD09PW4ucGFyZW50PzE6Mn1mdW5jdGlvbiBsbyh0KXtyZXR1cm4gdC5yZWR1Y2UoaG8sMCkvdC5sZW5ndGh9ZnVuY3Rpb24gaG8odCxuKXtyZXR1cm4gdCtuLnh9ZnVuY3Rpb24gcG8odCl7cmV0dXJuIDErdC5yZWR1Y2Uodm8sMCl9ZnVuY3Rpb24gdm8odCxuKXtyZXR1cm4gTWF0aC5tYXgodCxuLnkpfWZ1bmN0aW9uIF9vKHQpe2Zvcih2YXIgbjtuPXQuY2hpbGRyZW47KXQ9blswXTtyZXR1cm4gdH1mdW5jdGlvbiB5byh0KXtmb3IodmFyIG47bj10LmNoaWxkcmVuOyl0PW5bbi5sZW5ndGgtMV07cmV0dXJuIHR9ZnVuY3Rpb24gZ28odCl7dmFyIG49MCxlPXQuY2hpbGRyZW4scj1lJiZlLmxlbmd0aDtpZihyKWZvcig7LS1yPj0wOyluKz1lW3JdLnZhbHVlO2Vsc2Ugbj0xO3QudmFsdWU9bn1mdW5jdGlvbiBtbyh0LG4pe2lmKHQ9PT1uKXJldHVybiB0O3ZhciBlPXQuYW5jZXN0b3JzKCkscj1uLmFuY2VzdG9ycygpLGk9bnVsbDtmb3IodD1lLnBvcCgpLG49ci5wb3AoKTt0PT09bjspaT10LHQ9ZS5wb3AoKSxuPXIucG9wKCk7cmV0dXJuIGl9ZnVuY3Rpb24geG8odCxuKXt2YXIgZSxyLGksbyx1LGE9bmV3IE5vKHQpLGM9K3QudmFsdWUmJihhLnZhbHVlPXQudmFsdWUpLHM9W2FdO2ZvcihudWxsPT1uJiYobj13byk7ZT1zLnBvcCgpOylpZihjJiYoZS52YWx1ZT0rZS5kYXRhLnZhbHVlKSwoaT1uKGUuZGF0YSkpJiYodT1pLmxlbmd0aCkpZm9yKGUuY2hpbGRyZW49bmV3IEFycmF5KHUpLG89dS0xO28+PTA7LS1vKXMucHVzaChyPWUuY2hpbGRyZW5bb109bmV3IE5vKGlbb10pKSxyLnBhcmVudD1lLHIuZGVwdGg9ZS5kZXB0aCsxO3JldHVybiBhLmVhY2hCZWZvcmUoVG8pfWZ1bmN0aW9uIGJvKCl7cmV0dXJuIHhvKHRoaXMpLmVhY2hCZWZvcmUoTW8pfWZ1bmN0aW9uIHdvKHQpe3JldHVybiB0LmNoaWxkcmVufWZ1bmN0aW9uIE1vKHQpe3QuZGF0YT10LmRhdGEuZGF0YX1mdW5jdGlvbiBUbyh0KXt2YXIgbj0wO2RvIHQuaGVpZ2h0PW47d2hpbGUoKHQ9dC5wYXJlbnQpJiZ0LmhlaWdodDwrK24pfWZ1bmN0aW9uIE5vKHQpe3RoaXMuZGF0YT10LHRoaXMuZGVwdGg9dGhpcy5oZWlnaHQ9MCx0aGlzLnBhcmVudD1udWxsfWZ1bmN0aW9uIGtvKHQpe3RoaXMuXz10LHRoaXMubmV4dD1udWxsfWZ1bmN0aW9uIFNvKHQsbil7dmFyIGU9bi54LXQueCxyPW4ueS10LnksaT10LnItbi5yO3JldHVybiBpKmkrMWUtNj5lKmUrcipyfWZ1bmN0aW9uIEVvKHQsbil7dmFyIGUscixpLG89bnVsbCx1PXQuaGVhZDtzd2l0Y2gobi5sZW5ndGgpe2Nhc2UgMTplPUFvKG5bMF0pO2JyZWFrO2Nhc2UgMjplPUNvKG5bMF0sblsxXSk7YnJlYWs7Y2FzZSAzOmU9em8oblswXSxuWzFdLG5bMl0pfWZvcig7dTspaT11Ll8scj11Lm5leHQsZSYmU28oZSxpKT9vPXU6KG8/KHQudGFpbD1vLG8ubmV4dD1udWxsKTp0LmhlYWQ9dC50YWlsPW51bGwsbi5wdXNoKGkpLGU9RW8odCxuKSxuLnBvcCgpLHQuaGVhZD8odS5uZXh0PXQuaGVhZCx0LmhlYWQ9dSk6KHUubmV4dD1udWxsLHQuaGVhZD10LnRhaWw9dSksbz10LnRhaWwsby5uZXh0PXIpLHU9cjtyZXR1cm4gdC50YWlsPW8sZX1mdW5jdGlvbiBBbyh0KXtyZXR1cm57eDp0LngseTp0Lnkscjp0LnJ9fWZ1bmN0aW9uIENvKHQsbil7dmFyIGU9dC54LHI9dC55LGk9dC5yLG89bi54LHU9bi55LGE9bi5yLGM9by1lLHM9dS1yLGY9YS1pLGw9TWF0aC5zcXJ0KGMqYytzKnMpO3JldHVybnt4OihlK28rYy9sKmYpLzIseToocit1K3MvbCpmKS8yLHI6KGwraSthKS8yfX1mdW5jdGlvbiB6byh0LG4sZSl7dmFyIHI9dC54LGk9dC55LG89dC5yLHU9bi54LGE9bi55LGM9bi5yLHM9ZS54LGY9ZS55LGw9ZS5yLGg9Miooci11KSxwPTIqKGktYSksZD0yKihjLW8pLHY9cipyK2kqaS1vKm8tdSp1LWEqYStjKmMsXz0yKihyLXMpLHk9MiooaS1mKSxnPTIqKGwtbyksbT1yKnIraSppLW8qby1zKnMtZipmK2wqbCx4PV8qcC1oKnksYj0ocCptLXkqdikveC1yLHc9KHkqZC1wKmcpL3gsTT0oXyp2LWgqbSkveC1pLFQ9KGgqZy1fKmQpL3gsTj13KncrVCpULTEsaz0yKihiKncrTSpUK28pLFM9YipiK00qTS1vKm8sRT0oLWstTWF0aC5zcXJ0KGsqay00Kk4qUykpLygyKk4pO3JldHVybnt4OmIrdypFK3IseTpNK1QqRStpLHI6RX19ZnVuY3Rpb24gUG8odCxuLGUpe3ZhciByPXQueCxpPXQueSxvPW4ucitlLnIsdT10LnIrZS5yLGE9bi54LXIsYz1uLnktaSxzPWEqYStjKmM7aWYocyl7dmFyIGY9LjUrKCh1Kj11KS0obyo9bykpLygyKnMpLGw9TWF0aC5zcXJ0KE1hdGgubWF4KDAsMipvKih1K3MpLSh1LT1zKSp1LW8qbykpLygyKnMpO2UueD1yK2YqYStsKmMsZS55PWkrZipjLWwqYX1lbHNlIGUueD1yK3UsZS55PWl9ZnVuY3Rpb24gUm8odCxuKXt2YXIgZT1uLngtdC54LHI9bi55LXQueSxpPXQucituLnI7cmV0dXJuIGkqaS0xZS02PmUqZStyKnJ9ZnVuY3Rpb24gcW8odCxuKXtmb3IodmFyIGU9dC5fLnI7dCE9PW47KWUrPTIqKHQ9dC5uZXh0KS5fLnI7cmV0dXJuIGUtbi5fLnJ9ZnVuY3Rpb24gTG8odCxuLGUpe3ZhciByPXQueC1uLGk9dC55LWU7cmV0dXJuIHIqcitpKml9ZnVuY3Rpb24gVW8odCl7dGhpcy5fPXQsdGhpcy5uZXh0PW51bGwsdGhpcy5wcmV2aW91cz1udWxsfWZ1bmN0aW9uIERvKHQpe2lmKCEoaT10Lmxlbmd0aCkpcmV0dXJuIDA7dmFyIG4sZSxyLGk7aWYobj10WzBdLG4ueD0wLG4ueT0wLCEoaT4xKSlyZXR1cm4gbi5yO2lmKGU9dFsxXSxuLng9LWUucixlLng9bi5yLGUueT0wLCEoaT4yKSlyZXR1cm4gbi5yK2UucjtQbyhlLG4scj10WzJdKTt2YXIgbyx1LGEsYyxzLGYsbCxoPW4ucipuLnIscD1lLnIqZS5yLGQ9ci5yKnIucix2PWgrcCtkLF89aCpuLngrcCplLngrZCpyLngseT1oKm4ueStwKmUueStkKnIueTtuPW5ldyBVbyhuKSxlPW5ldyBVbyhlKSxyPW5ldyBVbyhyKSxuLm5leHQ9ci5wcmV2aW91cz1lLGUubmV4dD1uLnByZXZpb3VzPXIsci5uZXh0PWUucHJldmlvdXM9bjt0OmZvcihhPTM7YTxpOysrYSl7UG8obi5fLGUuXyxyPXRbYV0pLHI9bmV3IFVvKHIpLGM9ZS5uZXh0LHM9bi5wcmV2aW91cyxmPWUuXy5yLGw9bi5fLnI7ZG8gaWYoZjw9bCl7aWYoUm8oYy5fLHIuXykpe2Yrbi5fLnIrZS5fLnI+cW8oYyxlKT9uPWM6ZT1jLG4ubmV4dD1lLGUucHJldmlvdXM9biwtLWE7Y29udGludWUgdH1mKz1jLl8ucixjPWMubmV4dH1lbHNle2lmKFJvKHMuXyxyLl8pKXtxbyhuLHMpPmwrbi5fLnIrZS5fLnI/bj1zOmU9cyxuLm5leHQ9ZSxlLnByZXZpb3VzPW4sLS1hO2NvbnRpbnVlIHR9bCs9cy5fLnIscz1zLnByZXZpb3VzfXdoaWxlKGMhPT1zLm5leHQpO2ZvcihyLnByZXZpb3VzPW4sci5uZXh0PWUsbi5uZXh0PWUucHJldmlvdXM9ZT1yLHYrPWQ9ci5fLnIqci5fLnIsXys9ZCpyLl8ueCx5Kz1kKnIuXy55LGg9TG8obi5fLG89Xy92LHU9eS92KTsocj1yLm5leHQpIT09ZTspKGQ9TG8oci5fLG8sdSkpPGgmJihuPXIsaD1kKTtlPW4ubmV4dH1mb3Iobj1bZS5fXSxyPWU7KHI9ci5uZXh0KSE9PWU7KW4ucHVzaChyLl8pO2ZvcihyPUFnKG4pLGE9MDthPGk7KythKW49dFthXSxuLngtPXIueCxuLnktPXIueTtyZXR1cm4gci5yfWZ1bmN0aW9uIE9vKHQpe3JldHVybiBudWxsPT10P251bGw6Rm8odCl9ZnVuY3Rpb24gRm8odCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0fWZ1bmN0aW9uIElvKCl7cmV0dXJuIDB9ZnVuY3Rpb24gWW8odCl7cmV0dXJuIE1hdGguc3FydCh0LnZhbHVlKX1mdW5jdGlvbiBCbyh0KXtyZXR1cm4gZnVuY3Rpb24obil7bi5jaGlsZHJlbnx8KG4ucj1NYXRoLm1heCgwLCt0KG4pfHwwKSl9fWZ1bmN0aW9uIGpvKHQsbil7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHI9ZS5jaGlsZHJlbil7dmFyIHIsaSxvLHU9ci5sZW5ndGgsYT10KGUpKm58fDA7aWYoYSlmb3IoaT0wO2k8dTsrK2kpcltpXS5yKz1hO2lmKG89RG8ociksYSlmb3IoaT0wO2k8dTsrK2kpcltpXS5yLT1hO2Uucj1vK2F9fX1mdW5jdGlvbiBIbyh0KXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGU9bi5wYXJlbnQ7bi5yKj10LGUmJihuLng9ZS54K3Qqbi54LG4ueT1lLnkrdCpuLnkpfX1mdW5jdGlvbiBYbyh0KXtyZXR1cm4gdC5pZH1mdW5jdGlvbiBWbyh0KXtyZXR1cm4gdC5wYXJlbnRJZH1mdW5jdGlvbiBXbyh0LG4pe3JldHVybiB0LnBhcmVudD09PW4ucGFyZW50PzE6Mn1mdW5jdGlvbiAkbyh0KXt2YXIgbj10LmNoaWxkcmVuO3JldHVybiBuP25bMF06dC50fWZ1bmN0aW9uIFpvKHQpe3ZhciBuPXQuY2hpbGRyZW47cmV0dXJuIG4/bltuLmxlbmd0aC0xXTp0LnR9ZnVuY3Rpb24gR28odCxuLGUpe3ZhciByPWUvKG4uaS10LmkpO24uYy09cixuLnMrPWUsdC5jKz1yLG4ueis9ZSxuLm0rPWV9ZnVuY3Rpb24gSm8odCl7Zm9yKHZhciBuLGU9MCxyPTAsaT10LmNoaWxkcmVuLG89aS5sZW5ndGg7LS1vPj0wOyluPWlbb10sbi56Kz1lLG4ubSs9ZSxlKz1uLnMrKHIrPW4uYyl9ZnVuY3Rpb24gUW8odCxuLGUpe3JldHVybiB0LmEucGFyZW50PT09bi5wYXJlbnQ/dC5hOmV9ZnVuY3Rpb24gS28odCxuKXt0aGlzLl89dCx0aGlzLnBhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49bnVsbCx0aGlzLkE9bnVsbCx0aGlzLmE9dGhpcyx0aGlzLno9MCx0aGlzLm09MCx0aGlzLmM9MCx0aGlzLnM9MCx0aGlzLnQ9bnVsbCx0aGlzLmk9bn1mdW5jdGlvbiB0dSh0KXtmb3IodmFyIG4sZSxyLGksbyx1PW5ldyBLbyh0LDApLGE9W3VdO249YS5wb3AoKTspaWYocj1uLl8uY2hpbGRyZW4pZm9yKG4uY2hpbGRyZW49bmV3IEFycmF5KG89ci5sZW5ndGgpLGk9by0xO2k+PTA7LS1pKWEucHVzaChlPW4uY2hpbGRyZW5baV09bmV3IEtvKHJbaV0saSkpLGUucGFyZW50PW47cmV0dXJuKHUucGFyZW50PW5ldyBLbyhudWxsLDApKS5jaGlsZHJlbj1bdV0sdX1mdW5jdGlvbiBudSh0LG4sZSxyLGksbyl7Zm9yKHZhciB1LGEsYyxzLGYsbCxoLHAsZCx2LF8seT1bXSxnPW4uY2hpbGRyZW4sbT0wLHg9MCxiPWcubGVuZ3RoLHc9bi52YWx1ZTttPGI7KXtjPWktZSxzPW8tcjtkbyBmPWdbeCsrXS52YWx1ZTt3aGlsZSghZiYmeDxiKTtmb3IobD1oPWYsdj1NYXRoLm1heChzL2MsYy9zKS8odyp0KSxfPWYqZip2LGQ9TWF0aC5tYXgoaC9fLF8vbCk7eDxiOysreCl7aWYoZis9YT1nW3hdLnZhbHVlLGE8bCYmKGw9YSksYT5oJiYoaD1hKSxfPWYqZip2LHA9TWF0aC5tYXgoaC9fLF8vbCkscD5kKXtmLT1hO2JyZWFrfWQ9cH15LnB1c2godT17dmFsdWU6ZixkaWNlOmM8cyxjaGlsZHJlbjpnLnNsaWNlKG0seCl9KSx1LmRpY2U/cWcodSxlLHIsaSx3P3IrPXMqZi93Om8pOllnKHUsZSxyLHc/ZSs9YypmL3c6aSxvKSx3LT1mLG09eH1yZXR1cm4geX1mdW5jdGlvbiBldSh0LG4pe3JldHVybiB0WzBdLW5bMF18fHRbMV0tblsxXX1mdW5jdGlvbiBydSh0KXtmb3IodmFyIG49dC5sZW5ndGgsZT1bMCwxXSxyPTIsaT0yO2k8bjsrK2kpe2Zvcig7cj4xJiZHZyh0W2Vbci0yXV0sdFtlW3ItMV1dLHRbaV0pPD0wOyktLXI7ZVtyKytdPWl9cmV0dXJuIGUuc2xpY2UoMCxyKX1mdW5jdGlvbiBpdSh0KXtpZighKHQ+PTEpKXRocm93IG5ldyBFcnJvcjt0aGlzLl9zaXplPXQsdGhpcy5fY2FsbD10aGlzLl9lcnJvcj1udWxsLHRoaXMuX3Rhc2tzPVtdLHRoaXMuX2RhdGE9W10sdGhpcy5fd2FpdGluZz10aGlzLl9hY3RpdmU9dGhpcy5fZW5kZWQ9dGhpcy5fc3RhcnQ9MH1mdW5jdGlvbiBvdSh0KXtpZighdC5fc3RhcnQpdHJ5e3V1KHQpfWNhdGNoKG4pe2lmKHQuX3Rhc2tzW3QuX2VuZGVkK3QuX2FjdGl2ZS0xXSljdSh0LG4pO2Vsc2UgaWYoIXQuX2RhdGEpdGhyb3cgbn19ZnVuY3Rpb24gdXUodCl7Zm9yKDt0Ll9zdGFydD10Ll93YWl0aW5nJiZ0Ll9hY3RpdmU8dC5fc2l6ZTspe3ZhciBuPXQuX2VuZGVkK3QuX2FjdGl2ZSxlPXQuX3Rhc2tzW25dLHI9ZS5sZW5ndGgtMSxpPWVbcl07ZVtyXT1hdSh0LG4pLC0tdC5fd2FpdGluZywrK3QuX2FjdGl2ZSxlPWkuYXBwbHkobnVsbCxlKSx0Ll90YXNrc1tuXSYmKHQuX3Rhc2tzW25dPWV8fG5tKX19ZnVuY3Rpb24gYXUodCxuKXtyZXR1cm4gZnVuY3Rpb24oZSxyKXt0Ll90YXNrc1tuXSYmKC0tdC5fYWN0aXZlLCsrdC5fZW5kZWQsdC5fdGFza3Nbbl09bnVsbCxudWxsPT10Ll9lcnJvciYmKG51bGwhPWU/Y3UodCxlKToodC5fZGF0YVtuXT1yLHQuX3dhaXRpbmc/b3UodCk6c3UodCkpKSl9fWZ1bmN0aW9uIGN1KHQsbil7dmFyIGUscj10Ll90YXNrcy5sZW5ndGg7Zm9yKHQuX2Vycm9yPW4sdC5fZGF0YT12b2lkIDAsdC5fd2FpdGluZz1OYU47LS1yPj0wOylpZigoZT10Ll90YXNrc1tyXSkmJih0Ll90YXNrc1tyXT1udWxsLGUuYWJvcnQpKXRyeXtlLmFib3J0KCl9Y2F0Y2godCl7fXQuX2FjdGl2ZT1OYU4sc3UodCl9ZnVuY3Rpb24gc3UodCl7aWYoIXQuX2FjdGl2ZSYmdC5fY2FsbCl7dmFyIG49dC5fZGF0YTt0Ll9kYXRhPXZvaWQgMCx0Ll9jYWxsKHQuX2Vycm9yLG4pfX1mdW5jdGlvbiBmdSh0KXtyZXR1cm4gbmV3IGl1KGFyZ3VtZW50cy5sZW5ndGg/K3Q6MS8wKX1mdW5jdGlvbiBsdSh0KXtyZXR1cm4gZnVuY3Rpb24obixlKXt0KG51bGw9PW4/ZTpudWxsKX19ZnVuY3Rpb24gaHUodCl7dmFyIG49dC5yZXNwb25zZVR5cGU7cmV0dXJuIG4mJiJ0ZXh0IiE9PW4/dC5yZXNwb25zZTp0LnJlc3BvbnNlVGV4dH1mdW5jdGlvbiBwdSh0LG4pe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdChlLnJlc3BvbnNlVGV4dCxuKX19ZnVuY3Rpb24gZHUodCl7ZnVuY3Rpb24gbihuKXt2YXIgbz1uKyIiLHU9ZS5nZXQobyk7aWYoIXUpe2lmKGkhPT14bSlyZXR1cm4gaTtlLnNldChvLHU9ci5wdXNoKG4pKX1yZXR1cm4gdFsodS0xKSV0Lmxlbmd0aF19dmFyIGU9SWUoKSxyPVtdLGk9eG07cmV0dXJuIHQ9bnVsbD09dD9bXTptbS5jYWxsKHQpLG4uZG9tYWluPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiByLnNsaWNlKCk7cj1bXSxlPUllKCk7Zm9yKHZhciBpLG8sdT0tMSxhPXQubGVuZ3RoOysrdTxhOyllLmhhcyhvPShpPXRbdV0pKyIiKXx8ZS5zZXQobyxyLnB1c2goaSkpO3JldHVybiBufSxuLnJhbmdlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW1tLmNhbGwoZSksbik6dC5zbGljZSgpfSxuLnVua25vd249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxuKTppfSxuLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gZHUoKS5kb21haW4ocikucmFuZ2UodCkudW5rbm93bihpKX0sbn1mdW5jdGlvbiB2dSgpe2Z1bmN0aW9uIHQoKXt2YXIgdD1pKCkubGVuZ3RoLHI9dVsxXTx1WzBdLGw9dVtyLTBdLGg9dVsxLXJdO249KGgtbCkvTWF0aC5tYXgoMSx0LWMrMipzKSxhJiYobj1NYXRoLmZsb29yKG4pKSxsKz0oaC1sLW4qKHQtYykpKmYsZT1uKigxLWMpLGEmJihsPU1hdGgucm91bmQobCksZT1NYXRoLnJvdW5kKGUpKTt2YXIgcD1Jcyh0KS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGwrbip0fSk7cmV0dXJuIG8ocj9wLnJldmVyc2UoKTpwKX12YXIgbixlLHI9ZHUoKS51bmtub3duKHZvaWQgMCksaT1yLmRvbWFpbixvPXIucmFuZ2UsdT1bMCwxXSxhPSExLGM9MCxzPTAsZj0uNTtyZXR1cm4gZGVsZXRlIHIudW5rbm93bixyLmRvbWFpbj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaShuKSx0KCkpOmkoKX0sci5yYW5nZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1bK25bMF0sK25bMV1dLHQoKSk6dS5zbGljZSgpfSxyLnJhbmdlUm91bmQ9ZnVuY3Rpb24obil7cmV0dXJuIHU9WytuWzBdLCtuWzFdXSxhPSEwLHQoKX0sci5iYW5kd2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gZX0sci5zdGVwPWZ1bmN0aW9uKCl7cmV0dXJuIG59LHIucm91bmQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ISFuLHQoKSk6YX0sci5wYWRkaW5nPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPXM9TWF0aC5tYXgoMCxNYXRoLm1pbigxLG4pKSx0KCkpOmN9LHIucGFkZGluZ0lubmVyPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPU1hdGgubWF4KDAsTWF0aC5taW4oMSxuKSksdCgpKTpjfSxyLnBhZGRpbmdPdXRlcj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1NYXRoLm1heCgwLE1hdGgubWluKDEsbikpLHQoKSk6c30sci5hbGlnbj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj1NYXRoLm1heCgwLE1hdGgubWluKDEsbikpLHQoKSk6Zn0sci5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHZ1KCkuZG9tYWluKGkoKSkucmFuZ2UodSkucm91bmQoYSkucGFkZGluZ0lubmVyKGMpLnBhZGRpbmdPdXRlcihzKS5hbGlnbihmKX0sdCgpfWZ1bmN0aW9uIF91KHQpe3ZhciBuPXQuY29weTtyZXR1cm4gdC5wYWRkaW5nPXQucGFkZGluZ091dGVyLGRlbGV0ZSB0LnBhZGRpbmdJbm5lcixkZWxldGUgdC5wYWRkaW5nT3V0ZXIsdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIF91KG4oKSl9LHR9ZnVuY3Rpb24geXUoKXtyZXR1cm4gX3UodnUoKS5wYWRkaW5nSW5uZXIoMSkpfWZ1bmN0aW9uIGd1KHQsbil7cmV0dXJuKG4tPXQ9K3QpP2Z1bmN0aW9uKGUpe3JldHVybihlLXQpL259OmJtKG4pfWZ1bmN0aW9uIG11KHQpe3JldHVybiBmdW5jdGlvbihuLGUpe3ZhciByPXQobj0rbixlPStlKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQ8PW4/MDp0Pj1lPzE6cih0KX19fWZ1bmN0aW9uIHh1KHQpe3JldHVybiBmdW5jdGlvbihuLGUpe3ZhciByPXQobj0rbixlPStlKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQ8PTA/bjp0Pj0xP2U6cih0KX19fWZ1bmN0aW9uIGJ1KHQsbixlLHIpe3ZhciBpPXRbMF0sbz10WzFdLHU9blswXSxhPW5bMV07cmV0dXJuIG88aT8oaT1lKG8saSksdT1yKGEsdSkpOihpPWUoaSxvKSx1PXIodSxhKSksZnVuY3Rpb24odCl7cmV0dXJuIHUoaSh0KSl9fWZ1bmN0aW9uIHd1KHQsbixlLHIpe3ZhciBpPU1hdGgubWluKHQubGVuZ3RoLG4ubGVuZ3RoKS0xLG89bmV3IEFycmF5KGkpLHU9bmV3IEFycmF5KGkpLGE9LTE7Zm9yKHRbaV08dFswXSYmKHQ9dC5zbGljZSgpLnJldmVyc2UoKSxuPW4uc2xpY2UoKS5yZXZlcnNlKCkpOysrYTxpOylvW2FdPWUodFthXSx0W2ErMV0pLHVbYV09cihuW2FdLG5bYSsxXSk7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBlPUVzKHQsbiwxLGkpLTE7cmV0dXJuIHVbZV0ob1tlXShuKSl9fWZ1bmN0aW9uIE11KHQsbil7cmV0dXJuIG4uZG9tYWluKHQuZG9tYWluKCkpLnJhbmdlKHQucmFuZ2UoKSkuaW50ZXJwb2xhdGUodC5pbnRlcnBvbGF0ZSgpKS5jbGFtcCh0LmNsYW1wKCkpfWZ1bmN0aW9uIFR1KHQsbil7ZnVuY3Rpb24gZSgpe3JldHVybiBpPU1hdGgubWluKGEubGVuZ3RoLGMubGVuZ3RoKT4yP3d1OmJ1LG89dT1udWxsLHJ9ZnVuY3Rpb24gcihuKXtyZXR1cm4ob3x8KG89aShhLGMsZj9tdSh0KTp0LHMpKSkoK24pfXZhciBpLG8sdSxhPU1tLGM9TW0scz1taCxmPSExO3JldHVybiByLmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4odXx8KHU9aShjLGEsZ3UsZj94dShuKTpuKSkpKCt0KX0sci5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9Z20uY2FsbCh0LHdtKSxlKCkpOmEuc2xpY2UoKX0sci5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1tbS5jYWxsKHQpLGUoKSk6Yy5zbGljZSgpfSxyLnJhbmdlUm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGM9bW0uY2FsbCh0KSxzPXhoLGUoKX0sci5jbGFtcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0hIXQsZSgpKTpmfSxyLmludGVycG9sYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXQsZSgpKTpzfSxlKCl9ZnVuY3Rpb24gTnUodCl7dmFyIG49dC5kb21haW47cmV0dXJuIHQudGlja3M9ZnVuY3Rpb24odCl7dmFyIGU9bigpO3JldHVybiBIcyhlWzBdLGVbZS5sZW5ndGgtMV0sbnVsbD09dD8xMDp0KX0sdC50aWNrRm9ybWF0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFRtKG4oKSx0LGUpfSx0Lm5pY2U9ZnVuY3Rpb24ocil7dmFyIGk9bigpLG89aS5sZW5ndGgtMSx1PW51bGw9PXI/MTA6cixhPWlbMF0sYz1pW29dLHM9ZShhLGMsdSk7cmV0dXJuIHMmJihzPWUoTWF0aC5mbG9vcihhL3MpKnMsTWF0aC5jZWlsKGMvcykqcyx1KSxpWzBdPU1hdGguZmxvb3IoYS9zKSpzLGlbb109TWF0aC5jZWlsKGMvcykqcyxuKGkpKSx0fSx0fWZ1bmN0aW9uIGt1KCl7dmFyIHQ9VHUoZ3UsZGgpO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gTXUodCxrdSgpKX0sTnUodCl9ZnVuY3Rpb24gU3UoKXtmdW5jdGlvbiB0KHQpe3JldHVybit0fXZhciBuPVswLDFdO3JldHVybiB0LmludmVydD10LHQuZG9tYWluPXQucmFuZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49Z20uY2FsbChlLHdtKSx0KTpuLnNsaWNlKCl9LHQuY29weT1mdW5jdGlvbigpe3JldHVybiBTdSgpLmRvbWFpbihuKX0sTnUodCl9ZnVuY3Rpb24gRXUodCxuKXtyZXR1cm4obj1NYXRoLmxvZyhuL3QpKT9mdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5sb2coZS90KS9ufTpibShuKX1mdW5jdGlvbiBBdSh0LG4pe3JldHVybiB0PDA/ZnVuY3Rpb24oZSl7cmV0dXJuLU1hdGgucG93KC1uLGUpKk1hdGgucG93KC10LDEtZSl9OmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnBvdyhuLGUpKk1hdGgucG93KHQsMS1lKX19ZnVuY3Rpb24gQ3UodCl7cmV0dXJuIGlzRmluaXRlKHQpPysoIjFlIit0KTp0PDA/MDp0fWZ1bmN0aW9uIHp1KHQpe3JldHVybiAxMD09PXQ/Q3U6dD09PU1hdGguRT9NYXRoLmV4cDpmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5wb3codCxuKX19ZnVuY3Rpb24gUHUodCl7cmV0dXJuIHQ9PT1NYXRoLkU/TWF0aC5sb2c6MTA9PT10JiZNYXRoLmxvZzEwfHwyPT09dCYmTWF0aC5sb2cyfHwodD1NYXRoLmxvZyh0KSxmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5sb2cobikvdH0pfWZ1bmN0aW9uIFJ1KHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4tdCgtbil9fWZ1bmN0aW9uIHF1KCl7ZnVuY3Rpb24gbigpe3JldHVybiBvPVB1KGkpLHU9enUoaSkscigpWzBdPDAmJihvPVJ1KG8pLHU9UnUodSkpLGV9dmFyIGU9VHUoRXUsQXUpLmRvbWFpbihbMSwxMF0pLHI9ZS5kb21haW4saT0xMCxvPVB1KDEwKSx1PXp1KDEwKTtyZXR1cm4gZS5iYXNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSt0LG4oKSk6aX0sZS5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHIodCksbigpKTpyKCl9LGUudGlja3M9ZnVuY3Rpb24odCl7dmFyIG4sZT1yKCksYT1lWzBdLGM9ZVtlLmxlbmd0aC0xXTsobj1jPGEpJiYoaD1hLGE9YyxjPWgpO3ZhciBzLGYsbCxoPW8oYSkscD1vKGMpLGQ9bnVsbD09dD8xMDordCx2PVtdO2lmKCEoaSUxKSYmcC1oPGQpe2lmKGg9TWF0aC5yb3VuZChoKS0xLHA9TWF0aC5yb3VuZChwKSsxLGE+MCl7Zm9yKDtoPHA7KytoKWZvcihmPTEscz11KGgpO2Y8aTsrK2YpaWYobD1zKmYsIShsPGEpKXtpZihsPmMpYnJlYWs7di5wdXNoKGwpfX1lbHNlIGZvcig7aDxwOysraClmb3IoZj1pLTEscz11KGgpO2Y+PTE7LS1mKWlmKGw9cypmLCEobDxhKSl7aWYobD5jKWJyZWFrO3YucHVzaChsKX19ZWxzZSB2PUhzKGgscCxNYXRoLm1pbihwLWgsZCkpLm1hcCh1KTtyZXR1cm4gbj92LnJldmVyc2UoKTp2fSxlLnRpY2tGb3JtYXQ9ZnVuY3Rpb24obixyKXtpZihudWxsPT1yJiYocj0xMD09PWk/Ii4wZSI6IiwiKSwiZnVuY3Rpb24iIT10eXBlb2YgciYmKHI9dC5mb3JtYXQocikpLG49PT0xLzApcmV0dXJuIHI7bnVsbD09biYmKG49MTApO3ZhciBhPU1hdGgubWF4KDEsaSpuL2UudGlja3MoKS5sZW5ndGgpO3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj10L3UoTWF0aC5yb3VuZChvKHQpKSk7cmV0dXJuIG4qaTxpLS41JiYobio9aSksbjw9YT9yKHQpOiIifX0sZS5uaWNlPWZ1bmN0aW9uKCl7cmV0dXJuIHIoTm0ocigpLHtmbG9vcjpmdW5jdGlvbih0KXtyZXR1cm4gdShNYXRoLmZsb29yKG8odCkpKX0sY2VpbDpmdW5jdGlvbih0KXtyZXR1cm4gdShNYXRoLmNlaWwobyh0KSkpfX0pKX0sZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIE11KGUscXUoKS5iYXNlKGkpKX0sZX1mdW5jdGlvbiBMdSh0LG4pe3JldHVybiB0PDA/LU1hdGgucG93KC10LG4pOk1hdGgucG93KHQsbil9ZnVuY3Rpb24gVXUoKXtmdW5jdGlvbiB0KHQsbil7cmV0dXJuKG49THUobixlKS0odD1MdSh0LGUpKSk/ZnVuY3Rpb24ocil7cmV0dXJuKEx1KHIsZSktdCkvbn06Ym0obil9ZnVuY3Rpb24gbih0LG4pe3JldHVybiBuPUx1KG4sZSktKHQ9THUodCxlKSksZnVuY3Rpb24ocil7cmV0dXJuIEx1KHQrbipyLDEvZSl9fXZhciBlPTEscj1UdSh0LG4pLGk9ci5kb21haW47cmV0dXJuIHIuZXhwb25lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3QsaShpKCkpKTplfSxyLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gTXUocixVdSgpLmV4cG9uZW50KGUpKX0sTnUocil9ZnVuY3Rpb24gRHUoKXtyZXR1cm4gVXUoKS5leHBvbmVudCguNSl9ZnVuY3Rpb24gT3UoKXtmdW5jdGlvbiB0KCl7dmFyIHQ9MCxvPU1hdGgubWF4KDEsci5sZW5ndGgpO2ZvcihpPW5ldyBBcnJheShvLTEpOysrdDxvOylpW3QtMV09V3MoZSx0L28pO3JldHVybiBufWZ1bmN0aW9uIG4odCl7aWYoIWlzTmFOKHQ9K3QpKXJldHVybiByW0VzKGksdCldfXZhciBlPVtdLHI9W10saT1bXTtyZXR1cm4gbi5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24odCl7dmFyIG49ci5pbmRleE9mKHQpO3JldHVybiBuPDA/W05hTixOYU5dOltuPjA/aVtuLTFdOmVbMF0sbjxpLmxlbmd0aD9pW25dOmVbZS5sZW5ndGgtMV1dfSxuLmRvbWFpbj1mdW5jdGlvbihuKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZS5zbGljZSgpO2U9W107Zm9yKHZhciByLGk9MCxvPW4ubGVuZ3RoO2k8bzsrK2kpcj1uW2ldLG51bGw9PXJ8fGlzTmFOKHI9K3IpfHxlLnB1c2gocik7cmV0dXJuIGUuc29ydChOcyksdCgpfSxuLnJhbmdlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW1tLmNhbGwobiksdCgpKTpyLnNsaWNlKCl9LG4ucXVhbnRpbGVzPWZ1bmN0aW9uKCl7cmV0dXJuIGkuc2xpY2UoKX0sbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIE91KCkuZG9tYWluKGUpLnJhbmdlKHIpfSxufWZ1bmN0aW9uIEZ1KCl7ZnVuY3Rpb24gdCh0KXtpZih0PD10KXJldHVybiB1W0VzKG8sdCwwLGkpXX1mdW5jdGlvbiBuKCl7dmFyIG49LTE7Zm9yKG89bmV3IEFycmF5KGkpOysrbjxpOylvW25dPSgobisxKSpyLShuLWkpKmUpLyhpKzEpO3JldHVybiB0fXZhciBlPTAscj0xLGk9MSxvPVsuNV0sdT1bMCwxXTtyZXR1cm4gdC5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3RbMF0scj0rdFsxXSxuKCkpOltlLHJdfSx0LnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSh1PW1tLmNhbGwodCkpLmxlbmd0aC0xLG4oKSk6dS5zbGljZSgpfSx0LmludmVydEV4dGVudD1mdW5jdGlvbih0KXt2YXIgbj11LmluZGV4T2YodCk7cmV0dXJuIG48MD9bTmFOLE5hTl06bjwxP1tlLG9bMF1dOm4+PWk/W29baS0xXSxyXTpbb1tuLTFdLG9bbl1dfSx0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gRnUoKS5kb21haW4oW2Uscl0pLnJhbmdlKHUpfSxOdSh0KX1mdW5jdGlvbiBJdSgpe2Z1bmN0aW9uIHQodCl7aWYodDw9dClyZXR1cm4gZVtFcyhuLHQsMCxyKV19dmFyIG49Wy41XSxlPVswLDFdLHI9MTtyZXR1cm4gdC5kb21haW49ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bW0uY2FsbChpKSxyPU1hdGgubWluKG4ubGVuZ3RoLGUubGVuZ3RoLTEpLHQpOm4uc2xpY2UoKX0sdC5yYW5nZT1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1tbS5jYWxsKGkpLHI9TWF0aC5taW4obi5sZW5ndGgsZS5sZW5ndGgtMSksdCk6ZS5zbGljZSgpfSx0LmludmVydEV4dGVudD1mdW5jdGlvbih0KXt2YXIgcj1lLmluZGV4T2YodCk7cmV0dXJuW25bci0xXSxuW3JdXX0sdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEl1KCkuZG9tYWluKG4pLnJhbmdlKGUpfSx0fWZ1bmN0aW9uIFl1KHQsbixlLHIpe2Z1bmN0aW9uIGkobil7cmV0dXJuIHQobj1uZXcgRGF0ZSgrbikpLG59cmV0dXJuIGkuZmxvb3I9aSxpLmNlaWw9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZT1uZXcgRGF0ZShlLTEpKSxuKGUsMSksdChlKSxlfSxpLnJvdW5kPWZ1bmN0aW9uKHQpe3ZhciBuPWkodCksZT1pLmNlaWwodCk7cmV0dXJuIHQtbjxlLXQ/bjplfSxpLm9mZnNldD1mdW5jdGlvbih0LGUpe3JldHVybiBuKHQ9bmV3IERhdGUoK3QpLG51bGw9PWU/MTpNYXRoLmZsb29yKGUpKSx0fSxpLnJhbmdlPWZ1bmN0aW9uKGUscixvKXt2YXIgdT1bXTtpZihlPWkuY2VpbChlKSxvPW51bGw9PW8/MTpNYXRoLmZsb29yKG8pLCEoZTxyJiZvPjApKXJldHVybiB1O2RvIHUucHVzaChuZXcgRGF0ZSgrZSkpO3doaWxlKG4oZSxvKSx0KGUpLGU8cik7cmV0dXJuIHV9LGkuZmlsdGVyPWZ1bmN0aW9uKGUpe3JldHVybiBZdShmdW5jdGlvbihuKXtpZihuPj1uKWZvcig7dChuKSwhZShuKTspbi5zZXRUaW1lKG4tMSl9LGZ1bmN0aW9uKHQscil7aWYodD49dClmb3IoOy0tcj49MDspZm9yKDtuKHQsMSksIWUodCk7KTt9KX0sZSYmKGkuY291bnQ9ZnVuY3Rpb24obixyKXtyZXR1cm4ga20uc2V0VGltZSgrbiksU20uc2V0VGltZSgrciksdChrbSksdChTbSksTWF0aC5mbG9vcihlKGttLFNtKSl9LGkuZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9TWF0aC5mbG9vcih0KSxpc0Zpbml0ZSh0KSYmdD4wP3Q+MT9pLmZpbHRlcihyP2Z1bmN0aW9uKG4pe3JldHVybiByKG4pJXQ9PT0wfTpmdW5jdGlvbihuKXtyZXR1cm4gaS5jb3VudCgwLG4pJXQ9PT0wfSk6aTpudWxsfSksaX1mdW5jdGlvbiBCdSh0KXtyZXR1cm4gWXUoZnVuY3Rpb24obil7bi5zZXREYXRlKG4uZ2V0RGF0ZSgpLShuLmdldERheSgpKzctdCklNyksbi5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxuKXt0LnNldERhdGUodC5nZXREYXRlKCkrNypuKX0sZnVuY3Rpb24odCxuKXtyZXR1cm4obi10LShuLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSp6bSkvcW19KX1mdW5jdGlvbiBqdSh0KXtyZXR1cm4gWXUoZnVuY3Rpb24obil7bi5zZXRVVENEYXRlKG4uZ2V0VVRDRGF0ZSgpLShuLmdldFVUQ0RheSgpKzctdCklNyksbi5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxuKXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCkrNypuKX0sZnVuY3Rpb24odCxuKXtyZXR1cm4obi10KS9xbX0pfWZ1bmN0aW9uIEh1KHQpe2lmKDA8PXQueSYmdC55PDEwMCl7dmFyIG49bmV3IERhdGUoLTEsdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpO3JldHVybiBuLnNldEZ1bGxZZWFyKHQueSksbn1yZXR1cm4gbmV3IERhdGUodC55LHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKX1mdW5jdGlvbiBYdSh0KXtpZigwPD10LnkmJnQueTwxMDApe3ZhciBuPW5ldyBEYXRlKERhdGUuVVRDKC0xLHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKSk7cmV0dXJuIG4uc2V0VVRDRnVsbFllYXIodC55KSxufXJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyh0LnksdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpKX1mdW5jdGlvbiBWdSh0KXtyZXR1cm57eTp0LG06MCxkOjEsSDowLE06MCxTOjAsTDowfX1mdW5jdGlvbiBXdSh0KXtmdW5jdGlvbiBuKHQsbil7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciByLGksbyx1PVtdLGE9LTEsYz0wLHM9dC5sZW5ndGg7Zm9yKGUgaW5zdGFuY2VvZiBEYXRlfHwoZT1uZXcgRGF0ZSgrZSkpOysrYTxzOykzNz09PXQuY2hhckNvZGVBdChhKSYmKHUucHVzaCh0LnNsaWNlKGMsYSkpLG51bGwhPShpPVB4W3I9dC5jaGFyQXQoKythKV0pP3I9dC5jaGFyQXQoKythKTppPSJlIj09PXI/IiAiOiIwIiwobz1uW3JdKSYmKHI9byhlLGkpKSx1LnB1c2gociksYz1hKzEpO3JldHVybiB1LnB1c2godC5zbGljZShjLGEpKSx1LmpvaW4oIiIpfX1mdW5jdGlvbiBlKHQsbil7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBpPVZ1KDE5MDApLG89cihpLHQsZSs9IiIsMCk7aWYobyE9ZS5sZW5ndGgpcmV0dXJuIG51bGw7aWYoInAiaW4gaSYmKGkuSD1pLkglMTIrMTIqaS5wKSwiVyJpbiBpfHwiVSJpbiBpKXsidyJpbiBpfHwoaS53PSJXImluIGk/MTowKTt2YXIgdT0iWiJpbiBpP1h1KFZ1KGkueSkpLmdldFVUQ0RheSgpOm4oVnUoaS55KSkuZ2V0RGF5KCk7aS5tPTAsaS5kPSJXImluIGk/KGkudys2KSU3KzcqaS5XLSh1KzUpJTc6aS53KzcqaS5VLSh1KzYpJTd9cmV0dXJuIloiaW4gaT8oaS5IKz1pLlovMTAwfDAsaS5NKz1pLlolMTAwLFh1KGkpKTpuKGkpfX1mdW5jdGlvbiByKHQsbixlLHIpe2Zvcih2YXIgaSxvLHU9MCxhPW4ubGVuZ3RoLGM9ZS5sZW5ndGg7dTxhOyl7aWYocj49YylyZXR1cm4tMTtpZihpPW4uY2hhckNvZGVBdCh1KyspLDM3PT09aSl7aWYoaT1uLmNoYXJBdCh1KyspLG89QltpIGluIFB4P24uY2hhckF0KHUrKyk6aV0sIW98fChyPW8odCxlLHIpKTwwKXJldHVybi0xfWVsc2UgaWYoaSE9ZS5jaGFyQ29kZUF0KHIrKykpcmV0dXJuLTF9cmV0dXJuIHJ9ZnVuY3Rpb24gaSh0LG4sZSl7dmFyIHI9Qy5leGVjKG4uc2xpY2UoZSkpO3JldHVybiByPyh0LnA9eltyWzBdLnRvTG93ZXJDYXNlKCldLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIG8odCxuLGUpe3ZhciByPXEuZXhlYyhuLnNsaWNlKGUpKTtyZXR1cm4gcj8odC53PUxbclswXS50b0xvd2VyQ2FzZSgpXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB1KHQsbixlKXt2YXIgcj1QLmV4ZWMobi5zbGljZShlKSk7cmV0dXJuIHI/KHQudz1SW3JbMF0udG9Mb3dlckNhc2UoKV0sZStyWzBdLmxlbmd0aCk6LTE7DQp9ZnVuY3Rpb24gYSh0LG4sZSl7dmFyIHI9Ty5leGVjKG4uc2xpY2UoZSkpO3JldHVybiByPyh0Lm09RltyWzBdLnRvTG93ZXJDYXNlKCldLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGModCxuLGUpe3ZhciByPVUuZXhlYyhuLnNsaWNlKGUpKTtyZXR1cm4gcj8odC5tPURbclswXS50b0xvd2VyQ2FzZSgpXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBzKHQsbixlKXtyZXR1cm4gcih0LHcsbixlKX1mdW5jdGlvbiBmKHQsbixlKXtyZXR1cm4gcih0LE0sbixlKX1mdW5jdGlvbiBsKHQsbixlKXtyZXR1cm4gcih0LFQsbixlKX1mdW5jdGlvbiBoKHQpe3JldHVybiBTW3QuZ2V0RGF5KCldfWZ1bmN0aW9uIHAodCl7cmV0dXJuIGtbdC5nZXREYXkoKV19ZnVuY3Rpb24gZCh0KXtyZXR1cm4gQVt0LmdldE1vbnRoKCldfWZ1bmN0aW9uIHYodCl7cmV0dXJuIEVbdC5nZXRNb250aCgpXX1mdW5jdGlvbiBfKHQpe3JldHVybiBOWysodC5nZXRIb3VycygpPj0xMildfWZ1bmN0aW9uIHkodCl7cmV0dXJuIFNbdC5nZXRVVENEYXkoKV19ZnVuY3Rpb24gZyh0KXtyZXR1cm4ga1t0LmdldFVUQ0RheSgpXX1mdW5jdGlvbiBtKHQpe3JldHVybiBBW3QuZ2V0VVRDTW9udGgoKV19ZnVuY3Rpb24geCh0KXtyZXR1cm4gRVt0LmdldFVUQ01vbnRoKCldfWZ1bmN0aW9uIGIodCl7cmV0dXJuIE5bKyh0LmdldFVUQ0hvdXJzKCk+PTEyKV19dmFyIHc9dC5kYXRlVGltZSxNPXQuZGF0ZSxUPXQudGltZSxOPXQucGVyaW9kcyxrPXQuZGF5cyxTPXQuc2hvcnREYXlzLEU9dC5tb250aHMsQT10LnNob3J0TW9udGhzLEM9R3UoTiksej1KdShOKSxQPUd1KGspLFI9SnUoaykscT1HdShTKSxMPUp1KFMpLFU9R3UoRSksRD1KdShFKSxPPUd1KEEpLEY9SnUoQSksST17YTpoLEE6cCxiOmQsQjp2LGM6bnVsbCxkOmhhLGU6aGEsSDpwYSxJOmRhLGo6dmEsTDpfYSxtOnlhLE06Z2EscDpfLFM6bWEsVTp4YSx3OmJhLFc6d2EseDpudWxsLFg6bnVsbCx5Ok1hLFk6VGEsWjpOYSwiJSI6SWF9LFk9e2E6eSxBOmcsYjptLEI6eCxjOm51bGwsZDprYSxlOmthLEg6U2EsSTpFYSxqOkFhLEw6Q2EsbTp6YSxNOlBhLHA6YixTOlJhLFU6cWEsdzpMYSxXOlVhLHg6bnVsbCxYOm51bGwseTpEYSxZOk9hLFo6RmEsIiUiOklhfSxCPXthOm8sQTp1LGI6YSxCOmMsYzpzLGQ6b2EsZTpvYSxIOmFhLEk6YWEsajp1YSxMOmZhLG06aWEsTTpjYSxwOmksUzpzYSxVOkt1LHc6UXUsVzp0YSx4OmYsWDpsLHk6ZWEsWTpuYSxaOnJhLCIlIjpsYX07cmV0dXJuIEkueD1uKE0sSSksSS5YPW4oVCxJKSxJLmM9bih3LEkpLFkueD1uKE0sWSksWS5YPW4oVCxZKSxZLmM9bih3LFkpLHtmb3JtYXQ6ZnVuY3Rpb24odCl7dmFyIGU9bih0Kz0iIixJKTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgbj1lKHQrPSIiLEh1KTtyZXR1cm4gbi50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxufSx1dGNGb3JtYXQ6ZnVuY3Rpb24odCl7dmFyIGU9bih0Kz0iIixZKTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSx1dGNQYXJzZTpmdW5jdGlvbih0KXt2YXIgbj1lKHQsWHUpO3JldHVybiBuLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LG59fX1mdW5jdGlvbiAkdSh0LG4sZSl7dmFyIHI9dDwwPyItIjoiIixpPShyPy10OnQpKyIiLG89aS5sZW5ndGg7cmV0dXJuIHIrKG88ZT9uZXcgQXJyYXkoZS1vKzEpLmpvaW4obikraTppKX1mdW5jdGlvbiBadSh0KXtyZXR1cm4gdC5yZXBsYWNlKEx4LCJcXCQmIil9ZnVuY3Rpb24gR3UodCl7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK3QubWFwKFp1KS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gSnUodCl7Zm9yKHZhciBuPXt9LGU9LTEscj10Lmxlbmd0aDsrK2U8cjspblt0W2VdLnRvTG93ZXJDYXNlKCldPWU7cmV0dXJuIG59ZnVuY3Rpb24gUXUodCxuLGUpe3ZhciByPVJ4LmV4ZWMobi5zbGljZShlLGUrMSkpO3JldHVybiByPyh0Lnc9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gS3UodCxuLGUpe3ZhciByPVJ4LmV4ZWMobi5zbGljZShlKSk7cmV0dXJuIHI/KHQuVT0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB0YSh0LG4sZSl7dmFyIHI9UnguZXhlYyhuLnNsaWNlKGUpKTtyZXR1cm4gcj8odC5XPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIG5hKHQsbixlKXt2YXIgcj1SeC5leGVjKG4uc2xpY2UoZSxlKzQpKTtyZXR1cm4gcj8odC55PStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGVhKHQsbixlKXt2YXIgcj1SeC5leGVjKG4uc2xpY2UoZSxlKzIpKTtyZXR1cm4gcj8odC55PStyWzBdKygrclswXT42OD8xOTAwOjJlMyksZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcmEodCxuLGUpe3ZhciByPS9eKFopfChbKy1dXGRcZCkoPzpcOj8oXGRcZCkpPy8uZXhlYyhuLnNsaWNlKGUsZSs2KSk7cmV0dXJuIHI/KHQuWj1yWzFdPzA6LShyWzJdKyhyWzNdfHwiMDAiKSksZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gaWEodCxuLGUpe3ZhciByPVJ4LmV4ZWMobi5zbGljZShlLGUrMikpO3JldHVybiByPyh0Lm09clswXS0xLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIG9hKHQsbixlKXt2YXIgcj1SeC5leGVjKG4uc2xpY2UoZSxlKzIpKTtyZXR1cm4gcj8odC5kPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHVhKHQsbixlKXt2YXIgcj1SeC5leGVjKG4uc2xpY2UoZSxlKzMpKTtyZXR1cm4gcj8odC5tPTAsdC5kPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGFhKHQsbixlKXt2YXIgcj1SeC5leGVjKG4uc2xpY2UoZSxlKzIpKTtyZXR1cm4gcj8odC5IPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGNhKHQsbixlKXt2YXIgcj1SeC5leGVjKG4uc2xpY2UoZSxlKzIpKTtyZXR1cm4gcj8odC5NPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHNhKHQsbixlKXt2YXIgcj1SeC5leGVjKG4uc2xpY2UoZSxlKzIpKTtyZXR1cm4gcj8odC5TPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGZhKHQsbixlKXt2YXIgcj1SeC5leGVjKG4uc2xpY2UoZSxlKzMpKTtyZXR1cm4gcj8odC5MPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGxhKHQsbixlKXt2YXIgcj1xeC5leGVjKG4uc2xpY2UoZSxlKzEpKTtyZXR1cm4gcj9lK3JbMF0ubGVuZ3RoOi0xfWZ1bmN0aW9uIGhhKHQsbil7cmV0dXJuICR1KHQuZ2V0RGF0ZSgpLG4sMil9ZnVuY3Rpb24gcGEodCxuKXtyZXR1cm4gJHUodC5nZXRIb3VycygpLG4sMil9ZnVuY3Rpb24gZGEodCxuKXtyZXR1cm4gJHUodC5nZXRIb3VycygpJTEyfHwxMixuLDIpfWZ1bmN0aW9uIHZhKHQsbil7cmV0dXJuICR1KDErWW0uY291bnQob3godCksdCksbiwzKX1mdW5jdGlvbiBfYSh0LG4pe3JldHVybiAkdSh0LmdldE1pbGxpc2Vjb25kcygpLG4sMyl9ZnVuY3Rpb24geWEodCxuKXtyZXR1cm4gJHUodC5nZXRNb250aCgpKzEsbiwyKX1mdW5jdGlvbiBnYSh0LG4pe3JldHVybiAkdSh0LmdldE1pbnV0ZXMoKSxuLDIpfWZ1bmN0aW9uIG1hKHQsbil7cmV0dXJuICR1KHQuZ2V0U2Vjb25kcygpLG4sMil9ZnVuY3Rpb24geGEodCxuKXtyZXR1cm4gJHUoam0uY291bnQob3godCksdCksbiwyKX1mdW5jdGlvbiBiYSh0KXtyZXR1cm4gdC5nZXREYXkoKX1mdW5jdGlvbiB3YSh0LG4pe3JldHVybiAkdShIbS5jb3VudChveCh0KSx0KSxuLDIpfWZ1bmN0aW9uIE1hKHQsbil7cmV0dXJuICR1KHQuZ2V0RnVsbFllYXIoKSUxMDAsbiwyKX1mdW5jdGlvbiBUYSh0LG4pe3JldHVybiAkdSh0LmdldEZ1bGxZZWFyKCklMWU0LG4sNCl9ZnVuY3Rpb24gTmEodCl7dmFyIG49dC5nZXRUaW1lem9uZU9mZnNldCgpO3JldHVybihuPjA/Ii0iOihuKj0tMSwiKyIpKSskdShuLzYwfDAsIjAiLDIpKyR1KG4lNjAsIjAiLDIpfWZ1bmN0aW9uIGthKHQsbil7cmV0dXJuICR1KHQuZ2V0VVRDRGF0ZSgpLG4sMil9ZnVuY3Rpb24gU2EodCxuKXtyZXR1cm4gJHUodC5nZXRVVENIb3VycygpLG4sMil9ZnVuY3Rpb24gRWEodCxuKXtyZXR1cm4gJHUodC5nZXRVVENIb3VycygpJTEyfHwxMixuLDIpfWZ1bmN0aW9uIEFhKHQsbil7cmV0dXJuICR1KDErbHguY291bnQoQXgodCksdCksbiwzKX1mdW5jdGlvbiBDYSh0LG4pe3JldHVybiAkdSh0LmdldFVUQ01pbGxpc2Vjb25kcygpLG4sMyl9ZnVuY3Rpb24gemEodCxuKXtyZXR1cm4gJHUodC5nZXRVVENNb250aCgpKzEsbiwyKX1mdW5jdGlvbiBQYSh0LG4pe3JldHVybiAkdSh0LmdldFVUQ01pbnV0ZXMoKSxuLDIpfWZ1bmN0aW9uIFJhKHQsbil7cmV0dXJuICR1KHQuZ2V0VVRDU2Vjb25kcygpLG4sMil9ZnVuY3Rpb24gcWEodCxuKXtyZXR1cm4gJHUocHguY291bnQoQXgodCksdCksbiwyKX1mdW5jdGlvbiBMYSh0KXtyZXR1cm4gdC5nZXRVVENEYXkoKX1mdW5jdGlvbiBVYSh0LG4pe3JldHVybiAkdShkeC5jb3VudChBeCh0KSx0KSxuLDIpfWZ1bmN0aW9uIERhKHQsbil7cmV0dXJuICR1KHQuZ2V0VVRDRnVsbFllYXIoKSUxMDAsbiwyKX1mdW5jdGlvbiBPYSh0LG4pe3JldHVybiAkdSh0LmdldFVUQ0Z1bGxZZWFyKCklMWU0LG4sNCl9ZnVuY3Rpb24gRmEoKXtyZXR1cm4iKzAwMDAifWZ1bmN0aW9uIElhKCl7cmV0dXJuIiUifWZ1bmN0aW9uIFlhKG4pe3JldHVybiBDeD1XdShuKSx0LnRpbWVGb3JtYXQ9Q3guZm9ybWF0LHQudGltZVBhcnNlPUN4LnBhcnNlLHQudXRjRm9ybWF0PUN4LnV0Y0Zvcm1hdCx0LnV0Y1BhcnNlPUN4LnV0Y1BhcnNlLEN4fWZ1bmN0aW9uIEJhKHQpe3JldHVybiB0LnRvSVNPU3RyaW5nKCl9ZnVuY3Rpb24gamEodCl7dmFyIG49bmV3IERhdGUodCk7cmV0dXJuIGlzTmFOKG4pP251bGw6bn1mdW5jdGlvbiBIYSh0KXtyZXR1cm4gbmV3IERhdGUodCl9ZnVuY3Rpb24gWGEodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBEYXRlPyt0OituZXcgRGF0ZSgrdCl9ZnVuY3Rpb24gVmEodCxuLHIsaSxvLHUsYSxjLHMpe2Z1bmN0aW9uIGYoZSl7cmV0dXJuKGEoZSk8ZT92OnUoZSk8ZT9fOm8oZSk8ZT95OmkoZSk8ZT9nOm4oZSk8ZT9yKGUpPGU/bTp4OnQoZSk8ZT9iOncpKGUpfWZ1bmN0aW9uIGwobixyLGksbyl7aWYobnVsbD09biYmKG49MTApLCJudW1iZXIiPT10eXBlb2Ygbil7dmFyIHU9TWF0aC5hYnMoaS1yKS9uLGE9a3MoZnVuY3Rpb24odCl7cmV0dXJuIHRbMl19KS5yaWdodChNLHUpO2E9PT1NLmxlbmd0aD8obz1lKHIvWHgsaS9YeCxuKSxuPXQpOmE/KGE9TVt1L01bYS0xXVsyXTxNW2FdWzJdL3U/YS0xOmFdLG89YVsxXSxuPWFbMF0pOihvPWUocixpLG4pLG49Yyl9cmV0dXJuIG51bGw9PW8/bjpuLmV2ZXJ5KG8pfXZhciBoPVR1KGd1LGRoKSxwPWguaW52ZXJ0LGQ9aC5kb21haW4sdj1zKCIuJUwiKSxfPXMoIjolUyIpLHk9cygiJUk6JU0iKSxnPXMoIiVJICVwIiksbT1zKCIlYSAlZCIpLHg9cygiJWIgJWQiKSxiPXMoIiVCIiksdz1zKCIlWSIpLE09W1thLDEsRnhdLFthLDUsNSpGeF0sW2EsMTUsMTUqRnhdLFthLDMwLDMwKkZ4XSxbdSwxLEl4XSxbdSw1LDUqSXhdLFt1LDE1LDE1Kkl4XSxbdSwzMCwzMCpJeF0sW28sMSxZeF0sW28sMywzKll4XSxbbyw2LDYqWXhdLFtvLDEyLDEyKll4XSxbaSwxLEJ4XSxbaSwyLDIqQnhdLFtyLDEsanhdLFtuLDEsSHhdLFtuLDMsMypIeF0sW3QsMSxYeF1dO3JldHVybiBoLmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IERhdGUocCh0KSl9LGguZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2QoZ20uY2FsbCh0LFhhKSk6ZCgpLm1hcChIYSl9LGgudGlja3M9ZnVuY3Rpb24odCxuKXt2YXIgZSxyPWQoKSxpPXJbMF0sbz1yW3IubGVuZ3RoLTFdLHU9bzxpO3JldHVybiB1JiYoZT1pLGk9byxvPWUpLGU9bCh0LGksbyxuKSxlPWU/ZS5yYW5nZShpLG8rMSk6W10sdT9lLnJldmVyc2UoKTplfSxoLnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbnVsbD09bj9mOnMobil9LGgubmljZT1mdW5jdGlvbih0LG4pe3ZhciBlPWQoKTtyZXR1cm4odD1sKHQsZVswXSxlW2UubGVuZ3RoLTFdLG4pKT9kKE5tKGUsdCkpOmh9LGguY29weT1mdW5jdGlvbigpe3JldHVybiBNdShoLFZhKHQsbixyLGksbyx1LGEsYyxzKSl9LGh9ZnVuY3Rpb24gV2EodCl7dmFyIG49dC5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0W01hdGgubWF4KDAsTWF0aC5taW4obi0xLE1hdGguZmxvb3IoZSpuKSkpXX19ZnVuY3Rpb24gJGEodCl7ZnVuY3Rpb24gbihuKXt2YXIgbz0obi1lKS8oci1lKTtyZXR1cm4gdChpP01hdGgubWF4KDAsTWF0aC5taW4oMSxvKSk6byl9dmFyIGU9MCxyPTEsaT0hMTtyZXR1cm4gbi5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3RbMF0scj0rdFsxXSxuKTpbZSxyXX0sbi5jbGFtcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0hIXQsbik6aX0sbi5pbnRlcnBvbGF0b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxuKTp0fSxuLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gJGEodCkuZG9tYWluKFtlLHJdKS5jbGFtcChpKX0sTnUobil9ZnVuY3Rpb24gWmEodCl7cmV0dXJuIHQuaW5uZXJSYWRpdXN9ZnVuY3Rpb24gR2EodCl7cmV0dXJuIHQub3V0ZXJSYWRpdXN9ZnVuY3Rpb24gSmEodCl7cmV0dXJuIHQuc3RhcnRBbmdsZX1mdW5jdGlvbiBRYSh0KXtyZXR1cm4gdC5lbmRBbmdsZX1mdW5jdGlvbiBLYSh0KXtyZXR1cm4gdCYmdC5wYWRBbmdsZX1mdW5jdGlvbiB0Yyh0KXtyZXR1cm4gdD49MT9sYjp0PD0tMT8tbGI6TWF0aC5hc2luKHQpfWZ1bmN0aW9uIG5jKHQsbixlLHIsaSxvLHUsYSl7dmFyIGM9ZS10LHM9ci1uLGY9dS1pLGw9YS1vLGg9KGYqKG4tbyktbCoodC1pKSkvKGwqYy1mKnMpO3JldHVyblt0K2gqYyxuK2gqc119ZnVuY3Rpb24gZWModCxuLGUscixpLG8sdSl7dmFyIGE9dC1lLGM9bi1yLHM9KHU/bzotbykvTWF0aC5zcXJ0KGEqYStjKmMpLGY9cypjLGw9LXMqYSxoPXQrZixwPW4rbCxkPWUrZix2PXIrbCxfPShoK2QpLzIseT0ocCt2KS8yLGc9ZC1oLG09di1wLHg9ZypnK20qbSxiPWktbyx3PWgqdi1kKnAsTT0obTwwPy0xOjEpKk1hdGguc3FydChNYXRoLm1heCgwLGIqYip4LXcqdykpLFQ9KHcqbS1nKk0pL3gsTj0oLXcqZy1tKk0pL3gsaz0odyptK2cqTSkveCxTPSgtdypnK20qTSkveCxFPVQtXyxBPU4teSxDPWstXyx6PVMteTtyZXR1cm4gRSpFK0EqQT5DKkMreip6JiYoVD1rLE49Uykse2N4OlQsY3k6Tix4MDE6LWYseTAxOi1sLHgxMTpUKihpL2ItMSkseTExOk4qKGkvYi0xKX19ZnVuY3Rpb24gcmModCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIGljKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIG9jKHQpe3JldHVybiB0WzFdfWZ1bmN0aW9uIHVjKHQpe3RoaXMuX2N1cnZlPXR9ZnVuY3Rpb24gYWModCl7ZnVuY3Rpb24gbihuKXtyZXR1cm4gbmV3IHVjKHQobikpfXJldHVybiBuLl9jdXJ2ZT10LG59ZnVuY3Rpb24gY2ModCl7dmFyIG49dC5jdXJ2ZTtyZXR1cm4gdC5hbmdsZT10LngsZGVsZXRlIHQueCx0LnJhZGl1cz10LnksZGVsZXRlIHQueSx0LmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP24oYWModCkpOm4oKS5fY3VydmV9LHR9ZnVuY3Rpb24gc2ModCxuLGUpe3QuX2NvbnRleHQuYmV6aWVyQ3VydmVUbygoMip0Ll94MCt0Ll94MSkvMywoMip0Ll95MCt0Ll95MSkvMywodC5feDArMip0Ll94MSkvMywodC5feTArMip0Ll95MSkvMywodC5feDArNCp0Ll94MStuKS82LCh0Ll95MCs0KnQuX3kxK2UpLzYpfWZ1bmN0aW9uIGZjKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBsYyh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gaGModCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIHBjKHQsbil7dGhpcy5fYmFzaXM9bmV3IGZjKHQpLHRoaXMuX2JldGE9bn1mdW5jdGlvbiBkYyh0LG4sZSl7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHQuX3gxK3QuX2sqKHQuX3gyLXQuX3gwKSx0Ll95MSt0Ll9rKih0Ll95Mi10Ll95MCksdC5feDIrdC5fayoodC5feDEtbiksdC5feTIrdC5fayoodC5feTEtZSksdC5feDIsdC5feTIpfWZ1bmN0aW9uIHZjKHQsbil7dGhpcy5fY29udGV4dD10LHRoaXMuX2s9KDEtbikvNn1mdW5jdGlvbiBfYyh0LG4pe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9rPSgxLW4pLzZ9ZnVuY3Rpb24geWModCxuKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1uKS82fWZ1bmN0aW9uIGdjKHQsbixlKXt2YXIgcj10Ll94MSxpPXQuX3kxLG89dC5feDIsdT10Ll95MjtpZih0Ll9sMDFfYT5zYil7dmFyIGE9Mip0Ll9sMDFfMmErMyp0Ll9sMDFfYSp0Ll9sMTJfYSt0Ll9sMTJfMmEsYz0zKnQuX2wwMV9hKih0Ll9sMDFfYSt0Ll9sMTJfYSk7cj0ociphLXQuX3gwKnQuX2wxMl8yYSt0Ll94Mip0Ll9sMDFfMmEpL2MsaT0oaSphLXQuX3kwKnQuX2wxMl8yYSt0Ll95Mip0Ll9sMDFfMmEpL2N9aWYodC5fbDIzX2E+c2Ipe3ZhciBzPTIqdC5fbDIzXzJhKzMqdC5fbDIzX2EqdC5fbDEyX2ErdC5fbDEyXzJhLGY9Myp0Ll9sMjNfYSoodC5fbDIzX2ErdC5fbDEyX2EpO289KG8qcyt0Ll94MSp0Ll9sMjNfMmEtbip0Ll9sMTJfMmEpL2YsdT0odSpzK3QuX3kxKnQuX2wyM18yYS1lKnQuX2wxMl8yYSkvZn10Ll9jb250ZXh0LmJlemllckN1cnZlVG8ocixpLG8sdSx0Ll94Mix0Ll95Mil9ZnVuY3Rpb24gbWModCxuKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9bn1mdW5jdGlvbiB4Yyh0LG4pe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1ufWZ1bmN0aW9uIGJjKHQsbil7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPW59ZnVuY3Rpb24gd2ModCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIE1jKHQpe3JldHVybiB0PDA/LTE6MX1mdW5jdGlvbiBUYyh0LG4sZSl7dmFyIHI9dC5feDEtdC5feDAsaT1uLXQuX3gxLG89KHQuX3kxLXQuX3kwKS8ocnx8aTwwJiYtMCksdT0oZS10Ll95MSkvKGl8fHI8MCYmLTApLGE9KG8qaSt1KnIpLyhyK2kpO3JldHVybihNYyhvKStNYyh1KSkqTWF0aC5taW4oTWF0aC5hYnMobyksTWF0aC5hYnModSksLjUqTWF0aC5hYnMoYSkpfHwwfWZ1bmN0aW9uIE5jKHQsbil7dmFyIGU9dC5feDEtdC5feDA7cmV0dXJuIGU/KDMqKHQuX3kxLXQuX3kwKS9lLW4pLzI6bn1mdW5jdGlvbiBrYyh0LG4sZSl7dmFyIHI9dC5feDAsaT10Ll95MCxvPXQuX3gxLHU9dC5feTEsYT0oby1yKS8zO3QuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhyK2EsaSthKm4sby1hLHUtYSplLG8sdSl9ZnVuY3Rpb24gU2ModCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIEVjKHQpe3RoaXMuX2NvbnRleHQ9bmV3IEFjKHQpfWZ1bmN0aW9uIEFjKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBDYyh0KXtyZXR1cm4gbmV3IFNjKHQpfWZ1bmN0aW9uIHpjKHQpe3JldHVybiBuZXcgRWModCl9ZnVuY3Rpb24gUGModCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIFJjKHQpe3ZhciBuLGUscj10Lmxlbmd0aC0xLGk9bmV3IEFycmF5KHIpLG89bmV3IEFycmF5KHIpLHU9bmV3IEFycmF5KHIpO2ZvcihpWzBdPTAsb1swXT0yLHVbMF09dFswXSsyKnRbMV0sbj0xO248ci0xOysrbilpW25dPTEsb1tuXT00LHVbbl09NCp0W25dKzIqdFtuKzFdO2ZvcihpW3ItMV09MixvW3ItMV09Nyx1W3ItMV09OCp0W3ItMV0rdFtyXSxuPTE7bjxyOysrbillPWlbbl0vb1tuLTFdLG9bbl0tPWUsdVtuXS09ZSp1W24tMV07Zm9yKGlbci0xXT11W3ItMV0vb1tyLTFdLG49ci0yO24+PTA7LS1uKWlbbl09KHVbbl0taVtuKzFdKS9vW25dO2ZvcihvW3ItMV09KHRbcl0raVtyLTFdKS8yLG49MDtuPHItMTsrK24pb1tuXT0yKnRbbisxXS1pW24rMV07cmV0dXJuW2ksb119ZnVuY3Rpb24gcWModCxuKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fdD1ufWZ1bmN0aW9uIExjKHQpe3JldHVybiBuZXcgcWModCwwKX1mdW5jdGlvbiBVYyh0KXtyZXR1cm4gbmV3IHFjKHQsMSl9ZnVuY3Rpb24gRGModCxuKXtyZXR1cm4gdFtuXX1mdW5jdGlvbiBPYyh0KXtmb3IodmFyIG4sZT0wLHI9LTEsaT10Lmxlbmd0aDsrK3I8aTspKG49K3Rbcl1bMV0pJiYoZSs9bik7cmV0dXJuIGV9ZnVuY3Rpb24gRmModCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gSWModCl7cmV0dXJuIHRbMV19ZnVuY3Rpb24gWWMoKXt0aGlzLl89bnVsbH1mdW5jdGlvbiBCYyh0KXt0LlU9dC5DPXQuTD10LlI9dC5QPXQuTj1udWxsfWZ1bmN0aW9uIGpjKHQsbil7dmFyIGU9bixyPW4uUixpPWUuVTtpP2kuTD09PWU/aS5MPXI6aS5SPXI6dC5fPXIsci5VPWksZS5VPXIsZS5SPXIuTCxlLlImJihlLlIuVT1lKSxyLkw9ZX1mdW5jdGlvbiBIYyh0LG4pe3ZhciBlPW4scj1uLkwsaT1lLlU7aT9pLkw9PT1lP2kuTD1yOmkuUj1yOnQuXz1yLHIuVT1pLGUuVT1yLGUuTD1yLlIsZS5MJiYoZS5MLlU9ZSksci5SPWV9ZnVuY3Rpb24gWGModCl7Zm9yKDt0Lkw7KXQ9dC5MO3JldHVybiB0fWZ1bmN0aW9uIFZjKHQsbixlLHIpe3ZhciBpPVtudWxsLG51bGxdLG89bXcucHVzaChpKS0xO3JldHVybiBpLmxlZnQ9dCxpLnJpZ2h0PW4sZSYmJGMoaSx0LG4sZSksciYmJGMoaSxuLHQscikseXdbdC5pbmRleF0uaGFsZmVkZ2VzLnB1c2gobykseXdbbi5pbmRleF0uaGFsZmVkZ2VzLnB1c2gobyksaX1mdW5jdGlvbiBXYyh0LG4sZSl7dmFyIHI9W24sZV07cmV0dXJuIHIubGVmdD10LHJ9ZnVuY3Rpb24gJGModCxuLGUscil7dFswXXx8dFsxXT90LmxlZnQ9PT1lP3RbMV09cjp0WzBdPXI6KHRbMF09cix0LmxlZnQ9bix0LnJpZ2h0PWUpfWZ1bmN0aW9uIFpjKHQsbixlLHIsaSl7dmFyIG8sdT10WzBdLGE9dFsxXSxjPXVbMF0scz11WzFdLGY9YVswXSxsPWFbMV0saD0wLHA9MSxkPWYtYyx2PWwtcztpZihvPW4tYyxkfHwhKG8+MCkpe2lmKG8vPWQsZDwwKXtpZihvPGgpcmV0dXJuO288cCYmKHA9byl9ZWxzZSBpZihkPjApe2lmKG8+cClyZXR1cm47bz5oJiYoaD1vKX1pZihvPXItYyxkfHwhKG88MCkpe2lmKG8vPWQsZDwwKXtpZihvPnApcmV0dXJuO28+aCYmKGg9byl9ZWxzZSBpZihkPjApe2lmKG88aClyZXR1cm47bzxwJiYocD1vKX1pZihvPWUtcyx2fHwhKG8+MCkpe2lmKG8vPXYsdjwwKXtpZihvPGgpcmV0dXJuO288cCYmKHA9byl9ZWxzZSBpZih2PjApe2lmKG8+cClyZXR1cm47bz5oJiYoaD1vKX1pZihvPWktcyx2fHwhKG88MCkpe2lmKG8vPXYsdjwwKXtpZihvPnApcmV0dXJuO28+aCYmKGg9byl9ZWxzZSBpZih2PjApe2lmKG88aClyZXR1cm47bzxwJiYocD1vKX1yZXR1cm4hKGg+MHx8cDwxKXx8KGg+MCYmKHRbMF09W2MraCpkLHMraCp2XSkscDwxJiYodFsxXT1bYytwKmQscytwKnZdKSwhMCl9fX19fWZ1bmN0aW9uIEdjKHQsbixlLHIsaSl7dmFyIG89dFsxXTtpZihvKXJldHVybiEwO3ZhciB1LGEsYz10WzBdLHM9dC5sZWZ0LGY9dC5yaWdodCxsPXNbMF0saD1zWzFdLHA9ZlswXSxkPWZbMV0sdj0obCtwKS8yLF89KGgrZCkvMjtpZihkPT09aCl7aWYodjxufHx2Pj1yKXJldHVybjtpZihsPnApe2lmKGMpe2lmKGNbMV0+PWkpcmV0dXJufWVsc2UgYz1bdixlXTtvPVt2LGldfWVsc2V7aWYoYyl7aWYoY1sxXTxlKXJldHVybn1lbHNlIGM9W3YsaV07bz1bdixlXX19ZWxzZSBpZih1PShsLXApLyhkLWgpLGE9Xy11KnYsdTwtMXx8dT4xKWlmKGw+cCl7aWYoYyl7aWYoY1sxXT49aSlyZXR1cm59ZWxzZSBjPVsoZS1hKS91LGVdO289WyhpLWEpL3UsaV19ZWxzZXtpZihjKXtpZihjWzFdPGUpcmV0dXJufWVsc2UgYz1bKGktYSkvdSxpXTtvPVsoZS1hKS91LGVdfWVsc2UgaWYoaDxkKXtpZihjKXtpZihjWzBdPj1yKXJldHVybn1lbHNlIGM9W24sdSpuK2FdO289W3IsdSpyK2FdfWVsc2V7aWYoYyl7aWYoY1swXTxuKXJldHVybn1lbHNlIGM9W3IsdSpyK2FdO289W24sdSpuK2FdfXJldHVybiB0WzBdPWMsdFsxXT1vLCEwfWZ1bmN0aW9uIEpjKHQsbixlLHIpe2Zvcih2YXIgaSxvPW13Lmxlbmd0aDtvLS07KUdjKGk9bXdbb10sdCxuLGUscikmJlpjKGksdCxuLGUscikmJihNYXRoLmFicyhpWzBdWzBdLWlbMV1bMF0pPnd3fHxNYXRoLmFicyhpWzBdWzFdLWlbMV1bMV0pPnd3KXx8ZGVsZXRlIG13W29dfWZ1bmN0aW9uIFFjKHQpe3JldHVybiB5d1t0LmluZGV4XT17c2l0ZTp0LGhhbGZlZGdlczpbXX19ZnVuY3Rpb24gS2ModCxuKXt2YXIgZT10LnNpdGUscj1uLmxlZnQsaT1uLnJpZ2h0O3JldHVybiBlPT09aSYmKGk9cixyPWUpLGk/TWF0aC5hdGFuMihpWzFdLXJbMV0saVswXS1yWzBdKTooZT09PXI/KHI9blsxXSxpPW5bMF0pOihyPW5bMF0saT1uWzFdKSxNYXRoLmF0YW4yKHJbMF0taVswXSxpWzFdLXJbMV0pKX1mdW5jdGlvbiB0cyh0LG4pe3JldHVybiBuWysobi5sZWZ0IT09dC5zaXRlKV19ZnVuY3Rpb24gbnModCxuKXtyZXR1cm4gblsrKG4ubGVmdD09PXQuc2l0ZSldfWZ1bmN0aW9uIGVzKCl7Zm9yKHZhciB0LG4sZSxyLGk9MCxvPXl3Lmxlbmd0aDtpPG87KytpKWlmKCh0PXl3W2ldKSYmKHI9KG49dC5oYWxmZWRnZXMpLmxlbmd0aCkpe3ZhciB1PW5ldyBBcnJheShyKSxhPW5ldyBBcnJheShyKTtmb3IoZT0wO2U8cjsrK2UpdVtlXT1lLGFbZV09S2ModCxtd1tuW2VdXSk7Zm9yKHUuc29ydChmdW5jdGlvbih0LG4pe3JldHVybiBhW25dLWFbdF19KSxlPTA7ZTxyOysrZSlhW2VdPW5bdVtlXV07Zm9yKGU9MDtlPHI7KytlKW5bZV09YVtlXX19ZnVuY3Rpb24gcnModCxuLGUscil7dmFyIGksbyx1LGEsYyxzLGYsbCxoLHAsZCx2LF89eXcubGVuZ3RoLHk9ITA7Zm9yKGk9MDtpPF87KytpKWlmKG89eXdbaV0pe2Zvcih1PW8uc2l0ZSxjPW8uaGFsZmVkZ2VzLGE9Yy5sZW5ndGg7YS0tOyltd1tjW2FdXXx8Yy5zcGxpY2UoYSwxKTtmb3IoYT0wLHM9Yy5sZW5ndGg7YTxzOylwPW5zKG8sbXdbY1thXV0pLGQ9cFswXSx2PXBbMV0sZj10cyhvLG13W2NbKythJXNdXSksbD1mWzBdLGg9ZlsxXSwoTWF0aC5hYnMoZC1sKT53d3x8TWF0aC5hYnModi1oKT53dykmJihjLnNwbGljZShhLDAsbXcucHVzaChXYyh1LHAsTWF0aC5hYnMoZC10KTx3dyYmci12Pnd3P1t0LE1hdGguYWJzKGwtdCk8d3c/aDpyXTpNYXRoLmFicyh2LXIpPHd3JiZlLWQ+d3c/W01hdGguYWJzKGgtcik8d3c/bDplLHJdOk1hdGguYWJzKGQtZSk8d3cmJnYtbj53dz9bZSxNYXRoLmFicyhsLWUpPHd3P2g6bl06TWF0aC5hYnModi1uKTx3dyYmZC10Pnd3P1tNYXRoLmFicyhoLW4pPHd3P2w6dCxuXTpudWxsKSktMSksKytzKTtzJiYoeT0hMSl9aWYoeSl7dmFyIGcsbSx4LGI9MS8wO2ZvcihpPTAseT1udWxsO2k8XzsrK2kpKG89eXdbaV0pJiYodT1vLnNpdGUsZz11WzBdLXQsbT11WzFdLW4seD1nKmcrbSptLHg8YiYmKGI9eCx5PW8pKTtpZih5KXt2YXIgdz1bdCxuXSxNPVt0LHJdLFQ9W2Uscl0sTj1bZSxuXTt5LmhhbGZlZGdlcy5wdXNoKG13LnB1c2goV2ModT15LnNpdGUsdyxNKSktMSxtdy5wdXNoKFdjKHUsTSxUKSktMSxtdy5wdXNoKFdjKHUsVCxOKSktMSxtdy5wdXNoKFdjKHUsTix3KSktMSl9fWZvcihpPTA7aTxfOysraSkobz15d1tpXSkmJihvLmhhbGZlZGdlcy5sZW5ndGh8fGRlbGV0ZSB5d1tpXSl9ZnVuY3Rpb24gaXMoKXtCYyh0aGlzKSx0aGlzLng9dGhpcy55PXRoaXMuYXJjPXRoaXMuc2l0ZT10aGlzLmN5PW51bGx9ZnVuY3Rpb24gb3ModCl7dmFyIG49dC5QLGU9dC5OO2lmKG4mJmUpe3ZhciByPW4uc2l0ZSxpPXQuc2l0ZSxvPWUuc2l0ZTtpZihyIT09byl7dmFyIHU9aVswXSxhPWlbMV0sYz1yWzBdLXUscz1yWzFdLWEsZj1vWzBdLXUsbD1vWzFdLWEsaD0yKihjKmwtcypmKTtpZighKGg+PS1Ndykpe3ZhciBwPWMqYytzKnMsZD1mKmYrbCpsLHY9KGwqcC1zKmQpL2gsXz0oYypkLWYqcCkvaCx5PXh3LnBvcCgpfHxuZXcgaXM7eS5hcmM9dCx5LnNpdGU9aSx5Lng9dit1LHkueT0oeS5jeT1fK2EpK01hdGguc3FydCh2KnYrXypfKSx0LmNpcmNsZT15O2Zvcih2YXIgZz1udWxsLG09Z3cuXzttOylpZih5Lnk8bS55fHx5Lnk9PT1tLnkmJnkueDw9bS54KXtpZighbS5MKXtnPW0uUDticmVha31tPW0uTH1lbHNle2lmKCFtLlIpe2c9bTticmVha31tPW0uUn1ndy5pbnNlcnQoZyx5KSxnfHwodnc9eSl9fX19ZnVuY3Rpb24gdXModCl7dmFyIG49dC5jaXJjbGU7biYmKG4uUHx8KHZ3PW4uTiksZ3cucmVtb3ZlKG4pLHh3LnB1c2gobiksQmMobiksdC5jaXJjbGU9bnVsbCl9ZnVuY3Rpb24gYXMoKXtCYyh0aGlzKSx0aGlzLmVkZ2U9dGhpcy5zaXRlPXRoaXMuY2lyY2xlPW51bGx9ZnVuY3Rpb24gY3ModCl7dmFyIG49YncucG9wKCl8fG5ldyBhcztyZXR1cm4gbi5zaXRlPXQsbn1mdW5jdGlvbiBzcyh0KXt1cyh0KSxfdy5yZW1vdmUodCksYncucHVzaCh0KSxCYyh0KX1mdW5jdGlvbiBmcyh0KXt2YXIgbj10LmNpcmNsZSxlPW4ueCxyPW4uY3ksaT1bZSxyXSxvPXQuUCx1PXQuTixhPVt0XTtzcyh0KTtmb3IodmFyIGM9bztjLmNpcmNsZSYmTWF0aC5hYnMoZS1jLmNpcmNsZS54KTx3dyYmTWF0aC5hYnMoci1jLmNpcmNsZS5jeSk8d3c7KW89Yy5QLGEudW5zaGlmdChjKSxzcyhjKSxjPW87YS51bnNoaWZ0KGMpLHVzKGMpO2Zvcih2YXIgcz11O3MuY2lyY2xlJiZNYXRoLmFicyhlLXMuY2lyY2xlLngpPHd3JiZNYXRoLmFicyhyLXMuY2lyY2xlLmN5KTx3dzspdT1zLk4sYS5wdXNoKHMpLHNzKHMpLHM9dTthLnB1c2gocyksdXMocyk7dmFyIGYsbD1hLmxlbmd0aDtmb3IoZj0xO2Y8bDsrK2Ypcz1hW2ZdLGM9YVtmLTFdLCRjKHMuZWRnZSxjLnNpdGUscy5zaXRlLGkpO2M9YVswXSxzPWFbbC0xXSxzLmVkZ2U9VmMoYy5zaXRlLHMuc2l0ZSxudWxsLGkpLG9zKGMpLG9zKHMpfWZ1bmN0aW9uIGxzKHQpe2Zvcih2YXIgbixlLHIsaSxvPXRbMF0sdT10WzFdLGE9X3cuXzthOylpZihyPWhzKGEsdSktbyxyPnd3KWE9YS5MO2Vsc2V7aWYoaT1vLXBzKGEsdSksIShpPnd3KSl7cj4td3c/KG49YS5QLGU9YSk6aT4td3c/KG49YSxlPWEuTik6bj1lPWE7YnJlYWt9aWYoIWEuUil7bj1hO2JyZWFrfWE9YS5SfVFjKHQpO3ZhciBjPWNzKHQpO2lmKF93Lmluc2VydChuLGMpLG58fGUpe2lmKG49PT1lKXJldHVybiB1cyhuKSxlPWNzKG4uc2l0ZSksX3cuaW5zZXJ0KGMsZSksYy5lZGdlPWUuZWRnZT1WYyhuLnNpdGUsYy5zaXRlKSxvcyhuKSx2b2lkIG9zKGUpO2lmKCFlKXJldHVybiB2b2lkKGMuZWRnZT1WYyhuLnNpdGUsYy5zaXRlKSk7dXMobiksdXMoZSk7dmFyIHM9bi5zaXRlLGY9c1swXSxsPXNbMV0saD10WzBdLWYscD10WzFdLWwsZD1lLnNpdGUsdj1kWzBdLWYsXz1kWzFdLWwseT0yKihoKl8tcCp2KSxnPWgqaCtwKnAsbT12KnYrXypfLHg9WyhfKmctcCptKS95K2YsKGgqbS12KmcpL3krbF07JGMoZS5lZGdlLHMsZCx4KSxjLmVkZ2U9VmMocyx0LG51bGwseCksZS5lZGdlPVZjKHQsZCxudWxsLHgpLG9zKG4pLG9zKGUpfX1mdW5jdGlvbiBocyh0LG4pe3ZhciBlPXQuc2l0ZSxyPWVbMF0saT1lWzFdLG89aS1uO2lmKCFvKXJldHVybiByO3ZhciB1PXQuUDtpZighdSlyZXR1cm4tKDEvMCk7ZT11LnNpdGU7dmFyIGE9ZVswXSxjPWVbMV0scz1jLW47aWYoIXMpcmV0dXJuIGE7dmFyIGY9YS1yLGw9MS9vLTEvcyxoPWYvcztyZXR1cm4gbD8oLWgrTWF0aC5zcXJ0KGgqaC0yKmwqKGYqZi8oLTIqcyktYytzLzIraS1vLzIpKSkvbCtyOihyK2EpLzJ9ZnVuY3Rpb24gcHModCxuKXt2YXIgZT10Lk47aWYoZSlyZXR1cm4gaHMoZSxuKTt2YXIgcj10LnNpdGU7cmV0dXJuIHJbMV09PT1uP3JbMF06MS8wfWZ1bmN0aW9uIGRzKHQsbixlKXtyZXR1cm4odFswXS1lWzBdKSooblsxXS10WzFdKS0odFswXS1uWzBdKSooZVsxXS10WzFdKX1mdW5jdGlvbiB2cyh0LG4pe3JldHVybiBuWzFdLXRbMV18fG5bMF0tdFswXX1mdW5jdGlvbiBfcyh0LG4pe3ZhciBlLHIsaSxvPXQuc29ydCh2cykucG9wKCk7Zm9yKG13PVtdLHl3PW5ldyBBcnJheSh0Lmxlbmd0aCksX3c9bmV3IFljLGd3PW5ldyBZYzs7KWlmKGk9dncsbyYmKCFpfHxvWzFdPGkueXx8b1sxXT09PWkueSYmb1swXTxpLngpKW9bMF09PT1lJiZvWzFdPT09cnx8KGxzKG8pLGU9b1swXSxyPW9bMV0pLG89dC5wb3AoKTtlbHNle2lmKCFpKWJyZWFrO2ZzKGkuYXJjKX1pZihlcygpLG4pe3ZhciB1PStuWzBdWzBdLGE9K25bMF1bMV0sYz0rblsxXVswXSxzPStuWzFdWzFdO0pjKHUsYSxjLHMpLHJzKHUsYSxjLHMpfXRoaXMuZWRnZXM9bXcsdGhpcy5jZWxscz15dyxfdz1ndz1tdz15dz1udWxsfWZ1bmN0aW9uIHlzKHQsbixlKXt0aGlzLnRhcmdldD10LHRoaXMudHlwZT1uLHRoaXMudHJhbnNmb3JtPWV9ZnVuY3Rpb24gZ3ModCxuLGUpe3RoaXMuaz10LHRoaXMueD1uLHRoaXMueT1lfWZ1bmN0aW9uIG1zKHQpe3JldHVybiB0Ll9fem9vbXx8a3d9ZnVuY3Rpb24geHMoKXt0LmV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIGJzKCl7cmV0dXJuIXQuZXZlbnQuYnV0dG9ufWZ1bmN0aW9uIHdzKCl7dmFyIHQsbixlPXRoaXM7cmV0dXJuIGUgaW5zdGFuY2VvZiBTVkdFbGVtZW50PyhlPWUub3duZXJTVkdFbGVtZW50fHxlLHQ9ZS53aWR0aC5iYXNlVmFsLnZhbHVlLG49ZS5oZWlnaHQuYmFzZVZhbC52YWx1ZSk6KHQ9ZS5jbGllbnRXaWR0aCxuPWUuY2xpZW50SGVpZ2h0KSxbWzAsMF0sW3Qsbl1dfWZ1bmN0aW9uIE1zKCl7cmV0dXJuIHRoaXMuX196b29tfHxrd312YXIgVHM9IjQuNS4wIixOcz1mdW5jdGlvbih0LG4pe3JldHVybiB0PG4/LTE6dD5uPzE6dD49bj8wOk5hTn0sa3M9ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10Lmxlbmd0aCYmKHQ9bih0KSkse2xlZnQ6ZnVuY3Rpb24obixlLHIsaSl7Zm9yKG51bGw9PXImJihyPTApLG51bGw9PWkmJihpPW4ubGVuZ3RoKTtyPGk7KXt2YXIgbz1yK2k+Pj4xO3QobltvXSxlKTwwP3I9bysxOmk9b31yZXR1cm4gcn0scmlnaHQ6ZnVuY3Rpb24obixlLHIsaSl7Zm9yKG51bGw9PXImJihyPTApLG51bGw9PWkmJihpPW4ubGVuZ3RoKTtyPGk7KXt2YXIgbz1yK2k+Pj4xO3QobltvXSxlKT4wP2k9bzpyPW8rMX1yZXR1cm4gcn19fSxTcz1rcyhOcyksRXM9U3MucmlnaHQsQXM9U3MubGVmdCxDcz1mdW5jdGlvbih0LG4pe3JldHVybiBuPHQ/LTE6bj50PzE6bj49dD8wOk5hTn0senM9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PT10P05hTjordH0sUHM9ZnVuY3Rpb24odCxuKXt2YXIgZSxyLGk9dC5sZW5ndGgsbz0wLHU9MCxhPS0xLGM9MDtpZihudWxsPT1uKWZvcig7KythPGk7KWlzTmFOKGU9enModFthXSkpfHwocj1lLW8sbys9ci8rK2MsdSs9ciooZS1vKSk7ZWxzZSBmb3IoOysrYTxpOylpc05hTihlPXpzKG4odFthXSxhLHQpKSl8fChyPWUtbyxvKz1yLysrYyx1Kz1yKihlLW8pKTtpZihjPjEpcmV0dXJuIHUvKGMtMSl9LFJzPWZ1bmN0aW9uKHQsbil7dmFyIGU9UHModCxuKTtyZXR1cm4gZT9NYXRoLnNxcnQoZSk6ZX0scXM9ZnVuY3Rpb24odCxuKXt2YXIgZSxyLGksbz0tMSx1PXQubGVuZ3RoO2lmKG51bGw9PW4pe2Zvcig7KytvPHU7KWlmKG51bGwhPShyPXRbb10pJiZyPj1yKXtlPWk9cjticmVha31mb3IoOysrbzx1OyludWxsIT0ocj10W29dKSYmKGU+ciYmKGU9ciksaTxyJiYoaT1yKSl9ZWxzZXtmb3IoOysrbzx1OylpZihudWxsIT0ocj1uKHRbb10sbyx0KSkmJnI+PXIpe2U9aT1yO2JyZWFrfWZvcig7KytvPHU7KW51bGwhPShyPW4odFtvXSxvLHQpKSYmKGU+ciYmKGU9ciksaTxyJiYoaT1yKSl9cmV0dXJuW2UsaV19LExzPUFycmF5LnByb3RvdHlwZSxVcz1Mcy5zbGljZSxEcz1Mcy5tYXAsT3M9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSxGcz1mdW5jdGlvbih0KXtyZXR1cm4gdH0sSXM9ZnVuY3Rpb24odCxuLGUpe3Q9K3Qsbj0rbixlPShpPWFyZ3VtZW50cy5sZW5ndGgpPDI/KG49dCx0PTAsMSk6aTwzPzE6K2U7Zm9yKHZhciByPS0xLGk9MHxNYXRoLm1heCgwLE1hdGguY2VpbCgobi10KS9lKSksbz1uZXcgQXJyYXkoaSk7KytyPGk7KW9bcl09dCtyKmU7cmV0dXJuIG99LFlzPU1hdGguc3FydCg1MCksQnM9TWF0aC5zcXJ0KDEwKSxqcz1NYXRoLnNxcnQoMiksSHM9ZnVuY3Rpb24odCxuLHIpe3ZhciBpPWUodCxuLHIpO3JldHVybiBJcyhNYXRoLmNlaWwodC9pKSppLE1hdGguZmxvb3Iobi9pKSppK2kvMixpKX0sWHM9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguY2VpbChNYXRoLmxvZyh0Lmxlbmd0aCkvTWF0aC5MTjIpKzF9LFZzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2YXIgaSxvLHU9dC5sZW5ndGgsYT1uZXcgQXJyYXkodSk7Zm9yKGk9MDtpPHU7KytpKWFbaV09bih0W2ldLGksdCk7dmFyIGM9ZShhKSxzPWNbMF0sZj1jWzFdLGw9cihhLHMsZik7QXJyYXkuaXNBcnJheShsKXx8KGw9SHMocyxmLGwpKTtmb3IodmFyIGg9bC5sZW5ndGg7bFswXTw9czspbC5zaGlmdCgpLC0taDtmb3IoO2xbaC0xXT49ZjspbC5wb3AoKSwtLWg7dmFyIHAsZD1uZXcgQXJyYXkoaCsxKTtmb3IoaT0wO2k8PWg7KytpKXA9ZFtpXT1bXSxwLngwPWk+MD9sW2ktMV06cyxwLngxPWk8aD9sW2ldOmY7Zm9yKGk9MDtpPHU7KytpKW89YVtpXSxzPD1vJiZvPD1mJiZkW0VzKGwsbywwLGgpXS5wdXNoKHRbaV0pO3JldHVybiBkfXZhciBuPUZzLGU9cXMscj1YcztyZXR1cm4gdC52YWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOk9zKGUpLHQpOm59LHQuZG9tYWluPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246T3MoW25bMF0sblsxXV0pLHQpOmV9LHQudGhyZXNob2xkcz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOk9zKEFycmF5LmlzQXJyYXkobik/VXMuY2FsbChuKTpuKSx0KTpyfSx0fSxXcz1mdW5jdGlvbih0LG4sZSl7aWYobnVsbD09ZSYmKGU9enMpLHI9dC5sZW5ndGgpe2lmKChuPStuKTw9MHx8cjwyKXJldHVybitlKHRbMF0sMCx0KTtpZihuPj0xKXJldHVybitlKHRbci0xXSxyLTEsdCk7dmFyIHIsaT0oci0xKSpuLG89TWF0aC5mbG9vcihpKSx1PStlKHRbb10sbyx0KSxhPStlKHRbbysxXSxvKzEsdCk7cmV0dXJuIHUrKGEtdSkqKGktbyl9fSwkcz1mdW5jdGlvbih0LG4sZSl7cmV0dXJuIHQ9RHMuY2FsbCh0LHpzKS5zb3J0KE5zKSxNYXRoLmNlaWwoKGUtbikvKDIqKFdzKHQsLjc1KS1Xcyh0LC4yNSkpKk1hdGgucG93KHQubGVuZ3RoLC0xLzMpKSl9LFpzPWZ1bmN0aW9uKHQsbixlKXtyZXR1cm4gTWF0aC5jZWlsKChlLW4pLygzLjUqUnModCkqTWF0aC5wb3codC5sZW5ndGgsLTEvMykpKX0sR3M9ZnVuY3Rpb24odCxuKXt2YXIgZSxyLGk9LTEsbz10Lmxlbmd0aDtpZihudWxsPT1uKXtmb3IoOysraTxvOylpZihudWxsIT0ocj10W2ldKSYmcj49cil7ZT1yO2JyZWFrfWZvcig7KytpPG87KW51bGwhPShyPXRbaV0pJiZyPmUmJihlPXIpfWVsc2V7Zm9yKDsrK2k8bzspaWYobnVsbCE9KHI9bih0W2ldLGksdCkpJiZyPj1yKXtlPXI7YnJlYWt9Zm9yKDsrK2k8bzspbnVsbCE9KHI9bih0W2ldLGksdCkpJiZyPmUmJihlPXIpfXJldHVybiBlfSxKcz1mdW5jdGlvbih0LG4pe3ZhciBlLHI9MCxpPXQubGVuZ3RoLG89LTEsdT1pO2lmKG51bGw9PW4pZm9yKDsrK288aTspaXNOYU4oZT16cyh0W29dKSk/LS11OnIrPWU7ZWxzZSBmb3IoOysrbzxpOylpc05hTihlPXpzKG4odFtvXSxvLHQpKSk/LS11OnIrPWU7aWYodSlyZXR1cm4gci91fSxRcz1mdW5jdGlvbih0LG4pe3ZhciBlLHI9W10saT10Lmxlbmd0aCxvPS0xO2lmKG51bGw9PW4pZm9yKDsrK288aTspaXNOYU4oZT16cyh0W29dKSl8fHIucHVzaChlKTtlbHNlIGZvcig7KytvPGk7KWlzTmFOKGU9enMobih0W29dLG8sdCkpKXx8ci5wdXNoKGUpO3JldHVybiBXcyhyLnNvcnQoTnMpLC41KX0sS3M9ZnVuY3Rpb24odCl7Zm9yKHZhciBuLGUscixpPXQubGVuZ3RoLG89LTEsdT0wOysrbzxpOyl1Kz10W29dLmxlbmd0aDtmb3IoZT1uZXcgQXJyYXkodSk7LS1pPj0wOylmb3Iocj10W2ldLG49ci5sZW5ndGg7LS1uPj0wOyllWy0tdV09cltuXTtyZXR1cm4gZX0sdGY9ZnVuY3Rpb24odCxuKXt2YXIgZSxyLGk9LTEsbz10Lmxlbmd0aDtpZihudWxsPT1uKXtmb3IoOysraTxvOylpZihudWxsIT0ocj10W2ldKSYmcj49cil7ZT1yO2JyZWFrfWZvcig7KytpPG87KW51bGwhPShyPXRbaV0pJiZlPnImJihlPXIpfWVsc2V7Zm9yKDsrK2k8bzspaWYobnVsbCE9KHI9bih0W2ldLGksdCkpJiZyPj1yKXtlPXI7YnJlYWt9Zm9yKDsrK2k8bzspbnVsbCE9KHI9bih0W2ldLGksdCkpJiZlPnImJihlPXIpfXJldHVybiBlfSxuZj1mdW5jdGlvbih0KXtmb3IodmFyIG49MCxlPXQubGVuZ3RoLTEscj10WzBdLGk9bmV3IEFycmF5KGU8MD8wOmUpO248ZTspaVtuXT1bcixyPXRbKytuXV07cmV0dXJuIGl9LGVmPWZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlPW4ubGVuZ3RoLHI9bmV3IEFycmF5KGUpO2UtLTspcltlXT10W25bZV1dO3JldHVybiByfSxyZj1mdW5jdGlvbih0LG4pe2lmKGU9dC5sZW5ndGgpe3ZhciBlLHIsaT0wLG89MCx1PXRbb107Zm9yKG58fChuPU5zKTsrK2k8ZTspKG4ocj10W2ldLHUpPDB8fDAhPT1uKHUsdSkpJiYodT1yLG89aSk7cmV0dXJuIDA9PT1uKHUsdSk/bzp2b2lkIDB9fSxvZj1mdW5jdGlvbih0LG4sZSl7Zm9yKHZhciByLGksbz0obnVsbD09ZT90Lmxlbmd0aDplKS0obj1udWxsPT1uPzA6K24pO287KWk9TWF0aC5yYW5kb20oKSpvLS18MCxyPXRbbytuXSx0W28rbl09dFtpK25dLHRbaStuXT1yO3JldHVybiB0fSx1Zj1mdW5jdGlvbih0LG4pe3ZhciBlLHI9MCxpPXQubGVuZ3RoLG89LTE7aWYobnVsbD09bilmb3IoOysrbzxpOykoZT0rdFtvXSkmJihyKz1lKTtlbHNlIGZvcig7KytvPGk7KShlPStuKHRbb10sbyx0KSkmJihyKz1lKTtyZXR1cm4gcn0sYWY9ZnVuY3Rpb24odCl7aWYoIShvPXQubGVuZ3RoKSlyZXR1cm5bXTtmb3IodmFyIG49LTEsZT10Zih0LHIpLGk9bmV3IEFycmF5KGUpOysrbjxlOylmb3IodmFyIG8sdT0tMSxhPWlbbl09bmV3IEFycmF5KG8pOysrdTxvOylhW3VdPXRbdV1bbl07cmV0dXJuIGl9LGNmPWZ1bmN0aW9uKCl7cmV0dXJuIGFmKGFyZ3VtZW50cyl9LHNmPUFycmF5LnByb3RvdHlwZS5zbGljZSxmZj1mdW5jdGlvbih0KXtyZXR1cm4gdH0sbGY9MSxoZj0yLHBmPTMsZGY9NCx2Zj0xZS02LF9mPXt2YWx1ZTpmdW5jdGlvbigpe319O2QucHJvdG90eXBlPXAucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpkLG9uOmZ1bmN0aW9uKHQsbil7dmFyIGUscj10aGlzLl8saT12KHQrIiIsciksbz0tMSx1PWkubGVuZ3RoO3tpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2lmKG51bGwhPW4mJiJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIituKTtmb3IoOysrbzx1OylpZihlPSh0PWlbb10pLnR5cGUpcltlXT15KHJbZV0sdC5uYW1lLG4pO2Vsc2UgaWYobnVsbD09bilmb3IoZSBpbiByKXJbZV09eShyW2VdLHQubmFtZSxudWxsKTtyZXR1cm4gdGhpc31mb3IoOysrbzx1OylpZigoZT0odD1pW29dKS50eXBlKSYmKGU9XyhyW2VdLHQubmFtZSkpKXJldHVybiBlfX0sY29weTpmdW5jdGlvbigpe3ZhciB0PXt9LG49dGhpcy5fO2Zvcih2YXIgZSBpbiBuKXRbZV09bltlXS5zbGljZSgpO3JldHVybiBuZXcgZCh0KX0sY2FsbDpmdW5jdGlvbih0LG4pe2lmKChlPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIGUscixpPW5ldyBBcnJheShlKSxvPTA7bzxlOysrbylpW29dPWFyZ3VtZW50c1tvKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKHI9dGhpcy5fW3RdLG89MCxlPXIubGVuZ3RoO288ZTsrK28pcltvXS52YWx1ZS5hcHBseShuLGkpfSxhcHBseTpmdW5jdGlvbih0LG4sZSl7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtmb3IodmFyIHI9dGhpcy5fW3RdLGk9MCxvPXIubGVuZ3RoO2k8bzsrK2kpcltpXS52YWx1ZS5hcHBseShuLGUpfX07dmFyIHlmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixnZj17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6eWYseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifSxtZj1mdW5jdGlvbih0KXt2YXIgbj10Kz0iIixlPW4uaW5kZXhPZigiOiIpO3JldHVybiBlPj0wJiYieG1sbnMiIT09KG49dC5zbGljZSgwLGUpKSYmKHQ9dC5zbGljZShlKzEpKSxnZi5oYXNPd25Qcm9wZXJ0eShuKT97c3BhY2U6Z2Zbbl0sbG9jYWw6dH06dH0seGY9ZnVuY3Rpb24odCl7dmFyIG49bWYodCk7cmV0dXJuKG4ubG9jYWw/bTpnKShuKX0sYmY9MDtiLnByb3RvdHlwZT14LnByb3RvdHlwZT17Y29uc3RydWN0b3I6YixnZXQ6ZnVuY3Rpb24odCl7Zm9yKHZhciBuPXRoaXMuXzshKG4gaW4gdCk7KWlmKCEodD10LnBhcmVudE5vZGUpKXJldHVybjtyZXR1cm4gdFtuXX0sc2V0OmZ1bmN0aW9uKHQsbil7cmV0dXJuIHRbdGhpcy5fXT1ufSxyZW1vdmU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuXyBpbiB0JiZkZWxldGUgdFt0aGlzLl9dfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTt2YXIgd2Y9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyh0KX19O2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQpe3ZhciBNZj1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7aWYoIU1mLm1hdGNoZXMpe3ZhciBUZj1NZi53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fE1mLm1zTWF0Y2hlc1NlbGVjdG9yfHxNZi5tb3pNYXRjaGVzU2VsZWN0b3J8fE1mLm9NYXRjaGVzU2VsZWN0b3I7d2Y9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFRmLmNhbGwodGhpcyx0KX19fX12YXIgTmY9d2Ysa2Y9e307aWYodC5ldmVudD1udWxsLCJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQpe3ZhciBTZj1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7Im9ubW91c2VlbnRlciJpbiBTZnx8KGtmPXttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0In0pfXZhciBFZj1mdW5jdGlvbih0LG4sZSl7dmFyIHIsaSxvPVQodCsiIiksdT1vLmxlbmd0aDt7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtmb3IoYT1uP2s6TixudWxsPT1lJiYoZT0hMSkscj0wO3I8dTsrK3IpdGhpcy5lYWNoKGEob1tyXSxuLGUpKTtyZXR1cm4gdGhpc312YXIgYT10aGlzLm5vZGUoKS5fX29uO2lmKGEpZm9yKHZhciBjLHM9MCxmPWEubGVuZ3RoO3M8ZjsrK3MpZm9yKHI9MCxjPWFbc107cjx1OysrcilpZigoaT1vW3JdKS50eXBlPT09Yy50eXBlJiZpLm5hbWU9PT1jLm5hbWUpcmV0dXJuIGMudmFsdWV9fSxBZj1mdW5jdGlvbigpe2Zvcih2YXIgbixlPXQuZXZlbnQ7bj1lLnNvdXJjZUV2ZW50OyllPW47cmV0dXJuIGV9LENmPWZ1bmN0aW9uKHQsbil7dmFyIGU9dC5vd25lclNWR0VsZW1lbnR8fHQ7aWYoZS5jcmVhdGVTVkdQb2ludCl7dmFyIHI9ZS5jcmVhdGVTVkdQb2ludCgpO3JldHVybiByLng9bi5jbGllbnRYLHIueT1uLmNsaWVudFkscj1yLm1hdHJpeFRyYW5zZm9ybSh0LmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSksW3IueCxyLnldfXZhciBpPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW24uY2xpZW50WC1pLmxlZnQtdC5jbGllbnRMZWZ0LG4uY2xpZW50WS1pLnRvcC10LmNsaWVudFRvcF19LHpmPWZ1bmN0aW9uKHQpe3ZhciBuPUFmKCk7cmV0dXJuIG4uY2hhbmdlZFRvdWNoZXMmJihuPW4uY2hhbmdlZFRvdWNoZXNbMF0pLENmKHQsbil9LFBmPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P0U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKHQpfX0sUmY9ZnVuY3Rpb24odCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PVBmKHQpKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGU9bi5sZW5ndGgscj1uZXcgQXJyYXkoZSksaT0wO2k8ZTsrK2kpZm9yKHZhciBvLHUsYT1uW2ldLGM9YS5sZW5ndGgscz1yW2ldPW5ldyBBcnJheShjKSxmPTA7ZjxjOysrZikobz1hW2ZdKSYmKHU9dC5jYWxsKG8sby5fX2RhdGFfXyxmLGEpKSYmKCJfX2RhdGFfXyJpbiBvJiYodS5fX2RhdGFfXz1vLl9fZGF0YV9fKSxzW2ZdPXUpO3JldHVybiBuZXcgcHQocix0aGlzLl9wYXJlbnRzKX0scWY9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/QTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwodCl9fSxMZj1mdW5jdGlvbih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9cWYodCkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsZT1uLmxlbmd0aCxyPVtdLGk9W10sbz0wO288ZTsrK28pZm9yKHZhciB1LGE9bltvXSxjPWEubGVuZ3RoLHM9MDtzPGM7KytzKSh1PWFbc10pJiYoci5wdXNoKHQuY2FsbCh1LHUuX19kYXRhX18scyxhKSksaS5wdXNoKHUpKTtyZXR1cm4gbmV3IHB0KHIsaSl9LFVmPWZ1bmN0aW9uKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1OZih0KSk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxlPW4ubGVuZ3RoLHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7KytpKWZvcih2YXIgbyx1PW5baV0sYT11Lmxlbmd0aCxjPXJbaV09W10scz0wO3M8YTsrK3MpKG89dVtzXSkmJnQuY2FsbChvLG8uX19kYXRhX18scyx1KSYmYy5wdXNoKG8pO3JldHVybiBuZXcgcHQocix0aGlzLl9wYXJlbnRzKX0sRGY9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBBcnJheSh0Lmxlbmd0aCl9LE9mPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBwdCh0aGlzLl9lbnRlcnx8dGhpcy5fZ3JvdXBzLm1hcChEZiksdGhpcy5fcGFyZW50cyl9O0MucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpDLGFwcGVuZENoaWxkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKHQsdGhpcy5fbmV4dCl9LGluc2VydEJlZm9yZTpmdW5jdGlvbih0LG4pe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKHQsbil9LHF1ZXJ5U2VsZWN0b3I6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yKHQpfSxxdWVyeVNlbGVjdG9yQWxsOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvckFsbCh0KX19O3ZhciBGZj1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LElmPSIkIixZZj1mdW5jdGlvbih0LG4pe2lmKCF0KXJldHVybiBwPW5ldyBBcnJheSh0aGlzLnNpemUoKSkscz0tMSx0aGlzLmVhY2goZnVuY3Rpb24odCl7cFsrK3NdPXR9KSxwO3ZhciBlPW4/UDp6LHI9dGhpcy5fcGFyZW50cyxpPXRoaXMuX2dyb3VwczsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9RmYodCkpO2Zvcih2YXIgbz1pLmxlbmd0aCx1PW5ldyBBcnJheShvKSxhPW5ldyBBcnJheShvKSxjPW5ldyBBcnJheShvKSxzPTA7czxvOysrcyl7dmFyIGY9cltzXSxsPWlbc10saD1sLmxlbmd0aCxwPXQuY2FsbChmLGYmJmYuX19kYXRhX18scyxyKSxkPXAubGVuZ3RoLHY9YVtzXT1uZXcgQXJyYXkoZCksXz11W3NdPW5ldyBBcnJheShkKSx5PWNbc109bmV3IEFycmF5KGgpO2UoZixsLHYsXyx5LHAsbik7Zm9yKHZhciBnLG0seD0wLGI9MDt4PGQ7Kyt4KWlmKGc9dlt4XSl7Zm9yKHg+PWImJihiPXgrMSk7IShtPV9bYl0pJiYrK2I8ZDspO2cuX25leHQ9bXx8bnVsbH19cmV0dXJuIHU9bmV3IHB0KHUsciksdS5fZW50ZXI9YSx1Ll9leGl0PWMsdX0sQmY9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHB0KHRoaXMuX2V4aXR8fHRoaXMuX2dyb3Vwcy5tYXAoRGYpLHRoaXMuX3BhcmVudHMpfSxqZj1mdW5jdGlvbih0KXtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGU9dC5fZ3JvdXBzLHI9bi5sZW5ndGgsaT1lLmxlbmd0aCxvPU1hdGgubWluKHIsaSksdT1uZXcgQXJyYXkociksYT0wO2E8bzsrK2EpZm9yKHZhciBjLHM9blthXSxmPWVbYV0sbD1zLmxlbmd0aCxoPXVbYV09bmV3IEFycmF5KGwpLHA9MDtwPGw7KytwKShjPXNbcF18fGZbcF0pJiYoaFtwXT1jKTtmb3IoO2E8cjsrK2EpdVthXT1uW2FdO3JldHVybiBuZXcgcHQodSx0aGlzLl9wYXJlbnRzKX0sSGY9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLG49LTEsZT10Lmxlbmd0aDsrK248ZTspZm9yKHZhciByLGk9dFtuXSxvPWkubGVuZ3RoLTEsdT1pW29dOy0tbz49MDspKHI9aVtvXSkmJih1JiZ1IT09ci5uZXh0U2libGluZyYmdS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShyLHUpLHU9cik7cmV0dXJuIHRoaXN9LFhmPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4obixlKXtyZXR1cm4gbiYmZT90KG4uX19kYXRhX18sZS5fX2RhdGFfXyk6IW4tIWV9dHx8KHQ9Uik7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxyPWUubGVuZ3RoLGk9bmV3IEFycmF5KHIpLG89MDtvPHI7KytvKXtmb3IodmFyIHUsYT1lW29dLGM9YS5sZW5ndGgscz1pW29dPW5ldyBBcnJheShjKSxmPTA7ZjxjOysrZikodT1hW2ZdKSYmKHNbZl09dSk7cy5zb3J0KG4pfXJldHVybiBuZXcgcHQoaSx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfSxWZj1mdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50c1swXTtyZXR1cm4gYXJndW1lbnRzWzBdPXRoaXMsdC5hcHBseShudWxsLGFyZ3VtZW50cyksdGhpc30sV2Y9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgQXJyYXkodGhpcy5zaXplKCkpLG49LTE7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3RbKytuXT10aGlzfSksdH0sJGY9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLG49MCxlPXQubGVuZ3RoO248ZTsrK24pZm9yKHZhciByPXRbbl0saT0wLG89ci5sZW5ndGg7aTxvOysraSl7dmFyIHU9cltpXTtpZih1KXJldHVybiB1fXJldHVybiBudWxsfSxaZj1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpeysrdH0pLHR9LEdmPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMubm9kZSgpfSxKZj1mdW5jdGlvbih0KXtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGU9MCxyPW4ubGVuZ3RoO2U8cjsrK2UpZm9yKHZhciBpLG89bltlXSx1PTAsYT1vLmxlbmd0aDt1PGE7Kyt1KShpPW9bdV0pJiZ0LmNhbGwoaSxpLl9fZGF0YV9fLHUsbyk7cmV0dXJuIHRoaXN9LFFmPWZ1bmN0aW9uKHQsbil7dmFyIGU9bWYodCk7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgcj10aGlzLm5vZGUoKTtyZXR1cm4gZS5sb2NhbD9yLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk6ci5nZXRBdHRyaWJ1dGUoZSl9cmV0dXJuIHRoaXMuZWFjaCgobnVsbD09bj9lLmxvY2FsP0w6cToiZnVuY3Rpb24iPT10eXBlb2Ygbj9lLmxvY2FsP0Y6TzplLmxvY2FsP0Q6VSkoZSxuKSl9LEtmPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm93bmVyRG9jdW1lbnQmJnQub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8dC5kb2N1bWVudCYmdHx8dC5kZWZhdWx0Vmlld30sdGw9ZnVuY3Rpb24odCxuLGUpe3ZhciByO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChudWxsPT1uP0k6ImZ1bmN0aW9uIj09dHlwZW9mIG4/QjpZKSh0LG4sbnVsbD09ZT8iIjplKSk6S2Yocj10aGlzLm5vZGUoKSkuZ2V0Q29tcHV0ZWRTdHlsZShyLG51bGwpLmdldFByb3BlcnR5VmFsdWUodCl9LG5sPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PW4/ajoiZnVuY3Rpb24iPT10eXBlb2Ygbj9YOkgpKHQsbikpOnRoaXMubm9kZSgpW3RdfTskLnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMuX25hbWVzLmluZGV4T2YodCk7bjwwJiYodGhpcy5fbmFtZXMucHVzaCh0KSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5fbmFtZXMuaW5kZXhPZih0KTtuPj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKG4sMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YodCk+PTB9fTt2YXIgZWw9ZnVuY3Rpb24odCxuKXt2YXIgZT1WKHQrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciByPVcodGhpcy5ub2RlKCkpLGk9LTEsbz1lLmxlbmd0aDsrK2k8bzspaWYoIXIuY29udGFpbnMoZVtpXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIG4/SzpuP0o6USkoZSxuKSl9LHJsPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChudWxsPT10P3R0OigiZnVuY3Rpb24iPT10eXBlb2YgdD9ldDpudCkodCkpOnRoaXMubm9kZSgpLnRleHRDb250ZW50fSxpbD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobnVsbD09dD9ydDooImZ1bmN0aW9uIj09dHlwZW9mIHQ/b3Q6aXQpKHQpKTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9LG9sPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaCh1dCl9LHVsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChhdCl9LGFsPWZ1bmN0aW9uKHQpe3ZhciBuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6eGYodCk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQobi5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSl9LGNsPWZ1bmN0aW9uKHQsbil7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp4Zih0KSxyPW51bGw9PW4/Y3Q6ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpQZihuKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksci5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9LHNsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChzdCl9LGZsPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIix0KTp0aGlzLm5vZGUoKS5fX2RhdGFfX30sbGw9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2Ygbj9odDpsdCkodCxuKSl9LGhsPVtudWxsXTtwdC5wcm90b3R5cGU9ZHQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpwdCxzZWxlY3Q6UmYsc2VsZWN0QWxsOkxmLGZpbHRlcjpVZixkYXRhOllmLGVudGVyOk9mLGV4aXQ6QmYsbWVyZ2U6amYsb3JkZXI6SGYsc29ydDpYZixjYWxsOlZmLG5vZGVzOldmLG5vZGU6JGYsc2l6ZTpaZixlbXB0eTpHZixlYWNoOkpmLGF0dHI6UWYsc3R5bGU6dGwscHJvcGVydHk6bmwsY2xhc3NlZDplbCx0ZXh0OnJsLGh0bWw6aWwscmFpc2U6b2wsbG93ZXI6dWwsYXBwZW5kOmFsLGluc2VydDpjbCxyZW1vdmU6c2wsZGF0dW06Zmwsb246RWYsZGlzcGF0Y2g6bGx9O3ZhciBwbD1mdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/bmV3IHB0KFtbZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0KV1dLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgcHQoW1t0XV0saGwpfSxkbD1mdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/bmV3IHB0KFtkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHQpXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IHB0KFtudWxsPT10P1tdOnRdLGhsKX0sdmw9ZnVuY3Rpb24odCxuLGUpe2FyZ3VtZW50cy5sZW5ndGg8MyYmKGU9bixuPUFmKCkuY2hhbmdlZFRvdWNoZXMpO2Zvcih2YXIgcixpPTAsbz1uP24ubGVuZ3RoOjA7aTxvOysraSlpZigocj1uW2ldKS5pZGVudGlmaWVyPT09ZSlyZXR1cm4gQ2YodCxyKTtyZXR1cm4gbnVsbH0sX2w9ZnVuY3Rpb24odCxuKXtudWxsPT1uJiYobj1BZigpLnRvdWNoZXMpO2Zvcih2YXIgZT0wLHI9bj9uLmxlbmd0aDowLGk9bmV3IEFycmF5KHIpO2U8cjsrK2UpaVtlXT1DZih0LG5bZV0pO3JldHVybiBpfSx5bD1mdW5jdGlvbigpe3QuZXZlbnQucHJldmVudERlZmF1bHQoKSx0LmV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfSxnbD1mdW5jdGlvbih0KXt2YXIgbj10LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxlPXBsKHQpLm9uKCJkcmFnc3RhcnQuZHJhZyIseWwsITApOyJvbnNlbGVjdHN0YXJ0ImluIG4/ZS5vbigic2VsZWN0c3RhcnQuZHJhZyIseWwsITApOihuLl9fbm9zZWxlY3Q9bi5zdHlsZS5Nb3pVc2VyU2VsZWN0LG4uc3R5bGUuTW96VXNlclNlbGVjdD0ibm9uZSIpfSxtbD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19O3l0LnByb3RvdHlwZS5vbj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuXy5vbi5hcHBseSh0aGlzLl8sYXJndW1lbnRzKTtyZXR1cm4gdD09PXRoaXMuXz90aGlzOnR9O3ZhciB4bD1mdW5jdGlvbigpe2Z1bmN0aW9uIG4odCl7dC5vbigibW91c2Vkb3duLmRyYWciLGUpLm9uKCJ0b3VjaHN0YXJ0LmRyYWciLG8pLm9uKCJ0b3VjaG1vdmUuZHJhZyIsdSkub24oInRvdWNoZW5kLmRyYWcgdG91Y2hjYW5jZWwuZHJhZyIsYSkuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1mdW5jdGlvbiBlKCl7aWYoIWYmJmwuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgbj1jKCJtb3VzZSIsaC5hcHBseSh0aGlzLGFyZ3VtZW50cyksemYsdGhpcyxhcmd1bWVudHMpO24mJihwbCh0LmV2ZW50LnZpZXcpLm9uKCJtb3VzZW1vdmUuZHJhZyIsciwhMCkub24oIm1vdXNldXAuZHJhZyIsaSwhMCksZ2wodC5ldmVudC52aWV3KSx2dCgpLHM9ITEsbigic3RhcnQiKSl9fWZ1bmN0aW9uIHIoKXt5bCgpLHM9ITAsdi5tb3VzZSgiZHJhZyIpfWZ1bmN0aW9uIGkoKXtwbCh0LmV2ZW50LnZpZXcpLm9uKCJtb3VzZW1vdmUuZHJhZyBtb3VzZXVwLmRyYWciLG51bGwpLF90KHQuZXZlbnQudmlldyxzKSx5bCgpLHYubW91c2UoImVuZCIpfWZ1bmN0aW9uIG8oKXtpZihsLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIG4sZSxyPXQuZXZlbnQuY2hhbmdlZFRvdWNoZXMsaT1oLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxvPXIubGVuZ3RoO2ZvcihuPTA7bjxvOysrbikoZT1jKHJbbl0uaWRlbnRpZmllcixpLHZsLHRoaXMsYXJndW1lbnRzKSkmJih2dCgpLGUoInN0YXJ0IikpfX1mdW5jdGlvbiB1KCl7dmFyIG4sZSxyPXQuZXZlbnQuY2hhbmdlZFRvdWNoZXMsaT1yLmxlbmd0aDtmb3Iobj0wO248aTsrK24pKGU9dltyW25dLmlkZW50aWZpZXJdKSYmKHlsKCksZSgiZHJhZyIpKX1mdW5jdGlvbiBhKCl7dmFyIG4sZSxyPXQuZXZlbnQuY2hhbmdlZFRvdWNoZXMsaT1yLmxlbmd0aDtmb3IoZiYmY2xlYXJUaW1lb3V0KGYpLGY9c2V0VGltZW91dChmdW5jdGlvbigpe2Y9bnVsbH0sNTAwKSxuPTA7bjxpOysrbikoZT12W3Jbbl0uaWRlbnRpZmllcl0pJiYodnQoKSxlKCJlbmQiKSl9ZnVuY3Rpb24gYyhlLHIsaSxvLHUpe3ZhciBhLGMscyxmPWkocixlKSxsPV8uY29weSgpO2lmKFMobmV3IHl0KG4sImJlZm9yZXN0YXJ0IixhLGUseSxmWzBdLGZbMV0sMCwwLGwpLGZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPSh0LmV2ZW50LnN1YmplY3Q9YT1kLmFwcGx5KG8sdSkpJiYoYz1hLngtZlswXXx8MCxzPWEueS1mWzFdfHwwLCEwKX0pKXJldHVybiBmdW5jdGlvbiB0KGgpe3ZhciBwLGQ9Zjtzd2l0Y2goaCl7Y2FzZSJzdGFydCI6dltlXT10LHA9eSsrO2JyZWFrO2Nhc2UiZW5kIjpkZWxldGUgdltlXSwtLXk7Y2FzZSJkcmFnIjpmPWkocixlKSxwPXl9UyhuZXcgeXQobixoLGEsZSxwLGZbMF0rYyxmWzFdK3MsZlswXS1kWzBdLGZbMV0tZFsxXSxsKSxsLmFwcGx5LGwsW2gsbyx1XSl9fXZhciBzLGYsbD1ndCxoPW10LGQ9eHQsdj17fSxfPXAoInN0YXJ0IiwiZHJhZyIsImVuZCIpLHk9MDtyZXR1cm4gbi5maWx0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDptbCghIXQpLG4pOmx9LG4uY29udGFpbmVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6bWwodCksbik6aH0sbi5zdWJqZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6bWwodCksDQpuKTpkfSxuLm9uPWZ1bmN0aW9uKCl7dmFyIHQ9Xy5vbi5hcHBseShfLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT1fP246dH0sbn0sYmw9ZnVuY3Rpb24odCxuLGUpe3QucHJvdG90eXBlPW4ucHJvdG90eXBlPWUsZS5jb25zdHJ1Y3Rvcj10fSx3bD0uNyxNbD0xL3dsLFRsPSJcXHMqKFsrLV0/XFxkKylcXHMqIixObD0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixrbD0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsU2w9L14jKFswLTlhLWZdezN9KSQvLEVsPS9eIyhbMC05YS1mXXs2fSkkLyxBbD1uZXcgUmVnRXhwKCJecmdiXFwoIitbVGwsVGwsVGxdKyJcXCkkIiksQ2w9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW2tsLGtsLGtsXSsiXFwpJCIpLHpsPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbVGwsVGwsVGwsTmxdKyJcXCkkIiksUGw9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1trbCxrbCxrbCxObF0rIlxcKSQiKSxSbD1uZXcgUmVnRXhwKCJeaHNsXFwoIitbTmwsa2wsa2xdKyJcXCkkIikscWw9bmV3IFJlZ0V4cCgiXmhzbGFcXCgiK1tObCxrbCxrbCxObF0rIlxcKSQiKSxMbD17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtibCh3dCxNdCx7ZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpKyIifX0pLGJsKEV0LFN0LGJ0KHd0LHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P01sOk1hdGgucG93KE1sLHQpLG5ldyBFdCh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD93bDpNYXRoLnBvdyh3bCx0KSxuZXcgRXQodGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIDA8PXRoaXMuciYmdGhpcy5yPD0yNTUmJjA8PXRoaXMuZyYmdGhpcy5nPD0yNTUmJjA8PXRoaXMuYiYmdGhpcy5iPD0yNTUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSx0b1N0cmluZzpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3BhY2l0eTtyZXR1cm4gdD1pc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSksKDE9PT10PyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKDE9PT10PyIpIjoiLCAiK3QrIikiKX19KSksYmwoUHQsenQsYnQod3Qse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/TWw6TWF0aC5wb3coTWwsdCksbmV3IFB0KHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/d2w6TWF0aC5wb3cod2wsdCksbmV3IFB0KHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5oJTM2MCszNjAqKHRoaXMuaDwwKSxuPWlzTmFOKHQpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLGU9dGhpcy5sLHI9ZSsoZTwuNT9lOjEtZSkqbixpPTIqZS1yO3JldHVybiBuZXcgRXQoUnQodD49MjQwP3QtMjQwOnQrMTIwLGksciksUnQodCxpLHIpLFJ0KHQ8MTIwP3QrMjQwOnQtMTIwLGksciksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9fSkpO3ZhciBVbD1NYXRoLlBJLzE4MCxEbD0xODAvTWF0aC5QSSxPbD0xOCxGbD0uOTUwNDcsSWw9MSxZbD0xLjA4ODgzLEJsPTQvMjksamw9Ni8yOSxIbD0zKmpsKmpsLFhsPWpsKmpsKmpsO2JsKFV0LEx0LGJ0KHd0LHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IFV0KHRoaXMubCtPbCoobnVsbD09dD8xOnQpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgVXQodGhpcy5sLU9sKihudWxsPT10PzE6dCksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD0odGhpcy5sKzE2KS8xMTYsbj1pc05hTih0aGlzLmEpP3Q6dCt0aGlzLmEvNTAwLGU9aXNOYU4odGhpcy5iKT90OnQtdGhpcy5iLzIwMDtyZXR1cm4gdD1JbCpPdCh0KSxuPUZsKk90KG4pLGU9WWwqT3QoZSksbmV3IEV0KEZ0KDMuMjQwNDU0MipuLTEuNTM3MTM4NSp0LS40OTg1MzE0KmUpLEZ0KC0uOTY5MjY2Km4rMS44NzYwMTA4KnQrLjA0MTU1NiplKSxGdCguMDU1NjQzNCpuLS4yMDQwMjU5KnQrMS4wNTcyMjUyKmUpLHRoaXMub3BhY2l0eSl9fSkpLGJsKGp0LEJ0LGJ0KHd0LHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGp0KHRoaXMuaCx0aGlzLmMsdGhpcy5sK09sKihudWxsPT10PzE6dCksdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcganQodGhpcy5oLHRoaXMuYyx0aGlzLmwtT2wqKG51bGw9PXQ/MTp0KSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gcXQodGhpcykucmdiKCl9fSkpO3ZhciBWbD0tLjE0ODYxLFdsPTEuNzgyNzcsJGw9LS4yOTIyNyxabD0tLjkwNjQ5LEdsPTEuOTcyOTQsSmw9R2wqWmwsUWw9R2wqV2wsS2w9V2wqJGwtWmwqVmw7YmwoVnQsWHQsYnQod3Qse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/TWw6TWF0aC5wb3coTWwsdCksbmV3IFZ0KHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/d2w6TWF0aC5wb3cod2wsdCksbmV3IFZ0KHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9aXNOYU4odGhpcy5oKT8wOih0aGlzLmgrMTIwKSpVbCxuPSt0aGlzLmwsZT1pc05hTih0aGlzLnMpPzA6dGhpcy5zKm4qKDEtbikscj1NYXRoLmNvcyh0KSxpPU1hdGguc2luKHQpO3JldHVybiBuZXcgRXQoMjU1KihuK2UqKFZsKnIrV2wqaSkpLDI1NSoobitlKigkbCpyK1psKmkpKSwyNTUqKG4rZSooR2wqcikpLHRoaXMub3BhY2l0eSl9fSkpO3ZhciB0aCxuaCxlaCxyaCxpaCxvaCx1aD1mdW5jdGlvbih0KXt2YXIgbj10Lmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihlKXt2YXIgcj1lPD0wP2U9MDplPj0xPyhlPTEsbi0xKTpNYXRoLmZsb29yKGUqbiksaT10W3JdLG89dFtyKzFdLHU9cj4wP3Rbci0xXToyKmktbyxhPXI8bi0xP3RbcisyXToyKm8taTtyZXR1cm4gV3QoKGUtci9uKSpuLHUsaSxvLGEpfX0sYWg9ZnVuY3Rpb24odCl7dmFyIG49dC5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciByPU1hdGguZmxvb3IoKChlJT0xKTwwPysrZTplKSpuKSxpPXRbKHIrbi0xKSVuXSxvPXRbciVuXSx1PXRbKHIrMSklbl0sYT10WyhyKzIpJW5dO3JldHVybiBXdCgoZS1yL24pKm4saSxvLHUsYSl9fSxjaD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LHNoPWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0LG4pe3ZhciBlPXIoKHQ9U3QodCkpLnIsKG49U3QobikpLnIpLGk9cih0Lmcsbi5nKSxvPXIodC5iLG4uYiksdT1RdCh0Lm9wYWNpdHksbi5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQucj1lKG4pLHQuZz1pKG4pLHQuYj1vKG4pLHQub3BhY2l0eT11KG4pLHQrIiJ9fXZhciByPUp0KG4pO3JldHVybiBlLmdhbW1hPXQsZX0oMSksZmg9S3QodWgpLGxoPUt0KGFoKSxoaD1mdW5jdGlvbih0LG4pe3ZhciBlLHI9bj9uLmxlbmd0aDowLGk9dD9NYXRoLm1pbihyLHQubGVuZ3RoKTowLG89bmV3IEFycmF5KHIpLHU9bmV3IEFycmF5KHIpO2ZvcihlPTA7ZTxpOysrZSlvW2VdPW1oKHRbZV0sbltlXSk7Zm9yKDtlPHI7KytlKXVbZV09bltlXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKGU9MDtlPGk7KytlKXVbZV09b1tlXSh0KTtyZXR1cm4gdX19LHBoPWZ1bmN0aW9uKHQsbil7dmFyIGU9bmV3IERhdGU7cmV0dXJuIHQ9K3Qsbi09dCxmdW5jdGlvbihyKXtyZXR1cm4gZS5zZXRUaW1lKHQrbipyKSxlfX0sZGg9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdD0rdCxuLT10LGZ1bmN0aW9uKGUpe3JldHVybiB0K24qZX19LHZoPWZ1bmN0aW9uKHQsbil7dmFyIGUscj17fSxpPXt9O251bGwhPT10JiYib2JqZWN0Ij09dHlwZW9mIHR8fCh0PXt9KSxudWxsIT09biYmIm9iamVjdCI9PXR5cGVvZiBufHwobj17fSk7Zm9yKGUgaW4gbillIGluIHQ/cltlXT1taCh0W2VdLG5bZV0pOmlbZV09bltlXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKGUgaW4gcilpW2VdPXJbZV0odCk7cmV0dXJuIGl9fSxfaD0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2cseWg9bmV3IFJlZ0V4cChfaC5zb3VyY2UsImciKSxnaD1mdW5jdGlvbih0LG4pe3ZhciBlLHIsaSxvPV9oLmxhc3RJbmRleD15aC5sYXN0SW5kZXg9MCx1PS0xLGE9W10sYz1bXTtmb3IodCs9IiIsbis9IiI7KGU9X2guZXhlYyh0KSkmJihyPXloLmV4ZWMobikpOykoaT1yLmluZGV4KT5vJiYoaT1uLnNsaWNlKG8saSksYVt1XT9hW3VdKz1pOmFbKyt1XT1pKSwoZT1lWzBdKT09PShyPXJbMF0pP2FbdV0/YVt1XSs9cjphWysrdV09cjooYVsrK3VdPW51bGwsYy5wdXNoKHtpOnUseDpkaChlLHIpfSkpLG89eWgubGFzdEluZGV4O3JldHVybiBvPG4ubGVuZ3RoJiYoaT1uLnNsaWNlKG8pLGFbdV0/YVt1XSs9aTphWysrdV09aSksYS5sZW5ndGg8Mj9jWzBdP25uKGNbMF0ueCk6dG4obik6KG49Yy5sZW5ndGgsZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9MDtyPG47KytyKWFbKGU9Y1tyXSkuaV09ZS54KHQpO3JldHVybiBhLmpvaW4oIiIpfSl9LG1oPWZ1bmN0aW9uKHQsbil7dmFyIGUscj10eXBlb2YgbjtyZXR1cm4gbnVsbD09bnx8ImJvb2xlYW4iPT09cj9jaChuKTooIm51bWJlciI9PT1yP2RoOiJzdHJpbmciPT09cj8oZT1NdChuKSk/KG49ZSxzaCk6Z2g6biBpbnN0YW5jZW9mIE10P3NoOm4gaW5zdGFuY2VvZiBEYXRlP3BoOkFycmF5LmlzQXJyYXkobik/aGg6aXNOYU4obik/dmg6ZGgpKHQsbil9LHhoPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHQ9K3Qsbi09dCxmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZCh0K24qZSl9fSxiaD0xODAvTWF0aC5QSSx3aD17dHJhbnNsYXRlWDowLHRyYW5zbGF0ZVk6MCxyb3RhdGU6MCxza2V3WDowLHNjYWxlWDoxLHNjYWxlWToxfSxNaD1mdW5jdGlvbih0LG4sZSxyLGksbyl7dmFyIHUsYSxjO3JldHVybih1PU1hdGguc3FydCh0KnQrbipuKSkmJih0Lz11LG4vPXUpLChjPXQqZStuKnIpJiYoZS09dCpjLHItPW4qYyksKGE9TWF0aC5zcXJ0KGUqZStyKnIpKSYmKGUvPWEsci89YSxjLz1hKSx0KnI8biplJiYodD0tdCxuPS1uLGM9LWMsdT0tdSkse3RyYW5zbGF0ZVg6aSx0cmFuc2xhdGVZOm8scm90YXRlOk1hdGguYXRhbjIobix0KSpiaCxza2V3WDpNYXRoLmF0YW4oYykqYmgsc2NhbGVYOnUsc2NhbGVZOmF9fSxUaD1vbihlbiwicHgsICIsInB4KSIsImRlZykiKSxOaD1vbihybiwiLCAiLCIpIiwiKSIpLGtoPU1hdGguU1FSVDIsU2g9MixFaD00LEFoPTFlLTEyLENoPWZ1bmN0aW9uKHQsbil7dmFyIGUscixpPXRbMF0sbz10WzFdLHU9dFsyXSxhPW5bMF0sYz1uWzFdLHM9blsyXSxmPWEtaSxsPWMtbyxoPWYqZitsKmw7aWYoaDxBaClyPU1hdGgubG9nKHMvdSkva2gsZT1mdW5jdGlvbih0KXtyZXR1cm5baSt0KmYsbyt0KmwsdSpNYXRoLmV4cChraCp0KnIpXX07ZWxzZXt2YXIgcD1NYXRoLnNxcnQoaCksZD0ocypzLXUqdStFaCpoKS8oMip1KlNoKnApLHY9KHMqcy11KnUtRWgqaCkvKDIqcypTaCpwKSxfPU1hdGgubG9nKE1hdGguc3FydChkKmQrMSktZCkseT1NYXRoLmxvZyhNYXRoLnNxcnQodip2KzEpLXYpO3I9KHktXykva2gsZT1mdW5jdGlvbih0KXt2YXIgbj10KnIsZT11bihfKSxhPXUvKFNoKnApKihlKmNuKGtoKm4rXyktYW4oXykpO3JldHVybltpK2EqZixvK2EqbCx1KmUvdW4oa2gqbitfKV19fXJldHVybiBlLmR1cmF0aW9uPTFlMypyLGV9LHpoPXNuKEd0KSxQaD1zbihRdCksUmg9bG4oR3QpLHFoPWxuKFF0KSxMaD1obihHdCksVWg9aG4oUXQpLERoPWZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlPW5ldyBBcnJheShuKSxyPTA7cjxuOysrcillW3JdPXQoci8obi0xKSk7cmV0dXJuIGV9LE9oPTAsRmg9MCxJaD0wLFloPTFlMyxCaD0wLGpoPTAsSGg9MCxYaD0ib2JqZWN0Ij09dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxWaD0iZnVuY3Rpb24iPT10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lP3JlcXVlc3RBbmltYXRpb25GcmFtZTpmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQsMTcpfTt2bi5wcm90b3R5cGU9X24ucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp2bixyZXN0YXJ0OmZ1bmN0aW9uKHQsbixlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO2U9KG51bGw9PWU/cG4oKTorZSkrKG51bGw9PW4/MDorbiksdGhpcy5fbmV4dHx8b2g9PT10aGlzfHwob2g/b2guX25leHQ9dGhpczppaD10aGlzLG9oPXRoaXMpLHRoaXMuX2NhbGw9dCx0aGlzLl90aW1lPWUsYm4oKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuX2NhbGwmJih0aGlzLl9jYWxsPW51bGwsdGhpcy5fdGltZT0xLzAsYm4oKSl9fTt2YXIgV2g9ZnVuY3Rpb24odCxuLGUpe3ZhciByPW5ldyB2bjtyZXR1cm4gbj1udWxsPT1uPzA6K24sci5yZXN0YXJ0KGZ1bmN0aW9uKGUpe3Iuc3RvcCgpLHQoZStuKX0sbixlKSxyfSwkaD1mdW5jdGlvbih0LG4sZSl7dmFyIHI9bmV3IHZuLGk9bjtyZXR1cm4gbnVsbD09bj8oci5yZXN0YXJ0KHQsbixlKSxyKToobj0rbixlPW51bGw9PWU/cG4oKTorZSxyLnJlc3RhcnQoZnVuY3Rpb24gbyh1KXt1Kz1pLHIucmVzdGFydChvLGkrPW4sZSksdCh1KX0sbixlKSxyKX0sWmg9cCgic3RhcnQiLCJlbmQiLCJpbnRlcnJ1cHQiKSxHaD1bXSxKaD0wLFFoPTEsS2g9Mix0cD0zLG5wPTQsZXA9NSxycD02LGlwPWZ1bmN0aW9uKHQsbixlLHIsaSxvKXt2YXIgdT10Ll9fdHJhbnNpdGlvbjtpZih1KXtpZihlIGluIHUpcmV0dXJufWVsc2UgdC5fX3RyYW5zaXRpb249e307Tm4odCxlLHtuYW1lOm4saW5kZXg6cixncm91cDppLG9uOlpoLHR3ZWVuOkdoLHRpbWU6by50aW1lLGRlbGF5Om8uZGVsYXksZHVyYXRpb246by5kdXJhdGlvbixlYXNlOm8uZWFzZSx0aW1lcjpudWxsLHN0YXRlOkpofSl9LG9wPWZ1bmN0aW9uKHQsbil7dmFyIGUscixpLG89dC5fX3RyYW5zaXRpb24sdT0hMDtpZihvKXtuPW51bGw9PW4/bnVsbDpuKyIiO2ZvcihpIGluIG8pKGU9b1tpXSkubmFtZT09PW4/KHI9ZS5zdGF0ZT5LaCYmZS5zdGF0ZTxlcCxlLnN0YXRlPXJwLGUudGltZXIuc3RvcCgpLHImJmUub24uY2FsbCgiaW50ZXJydXB0Iix0LHQuX19kYXRhX18sZS5pbmRleCxlLmdyb3VwKSxkZWxldGUgb1tpXSk6dT0hMTt1JiZkZWxldGUgdC5fX3RyYW5zaXRpb259fSx1cD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7b3AodGhpcyx0KX0pfSxhcD1mdW5jdGlvbih0LG4pe3ZhciBlPXRoaXMuX2lkO2lmKHQrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciByLGk9VG4odGhpcy5ub2RlKCksZSkudHdlZW4sbz0wLHU9aS5sZW5ndGg7bzx1OysrbylpZigocj1pW29dKS5uYW1lPT09dClyZXR1cm4gci52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1uP2tuOlNuKShlLHQsbikpfSxjcD1mdW5jdGlvbih0LG4pe3ZhciBlO3JldHVybigibnVtYmVyIj09dHlwZW9mIG4/ZGg6biBpbnN0YW5jZW9mIE10P3NoOihlPU10KG4pKT8obj1lLHNoKTpnaCkodCxuKX0sc3A9ZnVuY3Rpb24odCxuKXt2YXIgZT1tZih0KSxyPSJ0cmFuc2Zvcm0iPT09ZT9OaDpjcDtyZXR1cm4gdGhpcy5hdHRyVHdlZW4odCwiZnVuY3Rpb24iPT10eXBlb2Ygbj8oZS5sb2NhbD9xbjpSbikoZSxyLEVuKHRoaXMsImF0dHIuIit0LG4pKTpudWxsPT1uPyhlLmxvY2FsP0NuOkFuKShlKTooZS5sb2NhbD9Qbjp6bikoZSxyLG4pKX0sZnA9ZnVuY3Rpb24odCxuKXt2YXIgZT0iYXR0ci4iK3Q7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihlPXRoaXMudHdlZW4oZSkpJiZlLl92YWx1ZTtpZihudWxsPT1uKXJldHVybiB0aGlzLnR3ZWVuKGUsbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgbmV3IEVycm9yO3ZhciByPW1mKHQpO3JldHVybiB0aGlzLnR3ZWVuKGUsKHIubG9jYWw/TG46VW4pKHIsbikpfSxscD1mdW5jdGlvbih0KXt2YXIgbj10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiB0P0RuOk9uKShuLHQpKTpUbih0aGlzLm5vZGUoKSxuKS5kZWxheX0saHA9ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgdD9GbjpJbikobix0KSk6VG4odGhpcy5ub2RlKCksbikuZHVyYXRpb259LHBwPWZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChZbihuLHQpKTpUbih0aGlzLm5vZGUoKSxuKS5lYXNlfSxkcD1mdW5jdGlvbih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9TmYodCkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsZT1uLmxlbmd0aCxyPW5ldyBBcnJheShlKSxpPTA7aTxlOysraSlmb3IodmFyIG8sdT1uW2ldLGE9dS5sZW5ndGgsYz1yW2ldPVtdLHM9MDtzPGE7KytzKShvPXVbc10pJiZ0LmNhbGwobyxvLl9fZGF0YV9fLHMsdSkmJmMucHVzaChvKTtyZXR1cm4gbmV3IFFuKHIsdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX0sdnA9ZnVuY3Rpb24odCl7aWYodC5faWQhPT10aGlzLl9pZCl0aHJvdyBuZXcgRXJyb3I7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxlPXQuX2dyb3VwcyxyPW4ubGVuZ3RoLGk9ZS5sZW5ndGgsbz1NYXRoLm1pbihyLGkpLHU9bmV3IEFycmF5KHIpLGE9MDthPG87KythKWZvcih2YXIgYyxzPW5bYV0sZj1lW2FdLGw9cy5sZW5ndGgsaD11W2FdPW5ldyBBcnJheShsKSxwPTA7cDxsOysrcCkoYz1zW3BdfHxmW3BdKSYmKGhbcF09Yyk7Zm9yKDthPHI7KythKXVbYV09blthXTtyZXR1cm4gbmV3IFFuKHUsdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX0sX3A9ZnVuY3Rpb24odCxuKXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP1RuKHRoaXMubm9kZSgpLGUpLm9uLm9uKHQpOnRoaXMuZWFjaChqbihlLHQsbikpfSx5cD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9uKCJlbmQucmVtb3ZlIixIbih0aGlzLl9pZCkpfSxncD1mdW5jdGlvbih0KXt2YXIgbj10aGlzLl9uYW1lLGU9dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PVBmKHQpKTtmb3IodmFyIHI9dGhpcy5fZ3JvdXBzLGk9ci5sZW5ndGgsbz1uZXcgQXJyYXkoaSksdT0wO3U8aTsrK3UpZm9yKHZhciBhLGMscz1yW3VdLGY9cy5sZW5ndGgsbD1vW3VdPW5ldyBBcnJheShmKSxoPTA7aDxmOysraCkoYT1zW2hdKSYmKGM9dC5jYWxsKGEsYS5fX2RhdGFfXyxoLHMpKSYmKCJfX2RhdGFfXyJpbiBhJiYoYy5fX2RhdGFfXz1hLl9fZGF0YV9fKSxsW2hdPWMsaXAobFtoXSxuLGUsaCxsLFRuKGEsZSkpKTtyZXR1cm4gbmV3IFFuKG8sdGhpcy5fcGFyZW50cyxuLGUpfSxtcD1mdW5jdGlvbih0KXt2YXIgbj10aGlzLl9uYW1lLGU9dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PXFmKHQpKTtmb3IodmFyIHI9dGhpcy5fZ3JvdXBzLGk9ci5sZW5ndGgsbz1bXSx1PVtdLGE9MDthPGk7KythKWZvcih2YXIgYyxzPXJbYV0sZj1zLmxlbmd0aCxsPTA7bDxmOysrbClpZihjPXNbbF0pe2Zvcih2YXIgaCxwPXQuY2FsbChjLGMuX19kYXRhX18sbCxzKSxkPVRuKGMsZSksdj0wLF89cC5sZW5ndGg7djxfOysrdikoaD1wW3ZdKSYmaXAoaCxuLGUsdixwLGQpO28ucHVzaChwKSx1LnB1c2goYyl9cmV0dXJuIG5ldyBRbihvLHUsbixlKX0seHA9ZHQucHJvdG90eXBlLmNvbnN0cnVjdG9yLGJwPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB4cCh0aGlzLl9ncm91cHMsdGhpcy5fcGFyZW50cyl9LHdwPWZ1bmN0aW9uKHQsbixlKXt2YXIgcj0idHJhbnNmb3JtIj09KHQrPSIiKT9UaDpjcDtyZXR1cm4gbnVsbD09bj90aGlzLnN0eWxlVHdlZW4odCxYbih0LHIpKS5vbigiZW5kLnN0eWxlLiIrdCxWbih0KSk6dGhpcy5zdHlsZVR3ZWVuKHQsImZ1bmN0aW9uIj09dHlwZW9mIG4/JG4odCxyLEVuKHRoaXMsInN0eWxlLiIrdCxuKSk6V24odCxyLG4pLGUpfSxNcD1mdW5jdGlvbih0LG4sZSl7dmFyIHI9InN0eWxlLiIrKHQrPSIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKHI9dGhpcy50d2VlbihyKSkmJnIuX3ZhbHVlO2lmKG51bGw9PW4pcmV0dXJuIHRoaXMudHdlZW4ocixudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4ocixabih0LG4sbnVsbD09ZT8iIjplKSl9LFRwPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnR3ZWVuKCJ0ZXh0IiwiZnVuY3Rpb24iPT10eXBlb2YgdD9KbihFbih0aGlzLCJ0ZXh0Iix0KSk6R24obnVsbD09dD8iIjp0KyIiKSl9LE5wPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX25hbWUsbj10aGlzLl9pZCxlPXRlKCkscj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxvPTA7bzxpOysrbylmb3IodmFyIHUsYT1yW29dLGM9YS5sZW5ndGgscz0wO3M8YzsrK3MpaWYodT1hW3NdKXt2YXIgZj1Ubih1LG4pO2lwKHUsdCxlLHMsYSx7dGltZTpmLnRpbWUrZi5kZWxheStmLmR1cmF0aW9uLGRlbGF5OjAsZHVyYXRpb246Zi5kdXJhdGlvbixlYXNlOmYuZWFzZX0pfXJldHVybiBuZXcgUW4ocix0aGlzLl9wYXJlbnRzLHQsZSl9LGtwPTAsU3A9ZHQucHJvdG90eXBlO1FuLnByb3RvdHlwZT1Lbi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlFuLHNlbGVjdDpncCxzZWxlY3RBbGw6bXAsZmlsdGVyOmRwLG1lcmdlOnZwLHNlbGVjdGlvbjpicCx0cmFuc2l0aW9uOk5wLGNhbGw6U3AuY2FsbCxub2RlczpTcC5ub2Rlcyxub2RlOlNwLm5vZGUsc2l6ZTpTcC5zaXplLGVtcHR5OlNwLmVtcHR5LGVhY2g6U3AuZWFjaCxvbjpfcCxhdHRyOnNwLGF0dHJUd2VlbjpmcCxzdHlsZTp3cCxzdHlsZVR3ZWVuOk1wLHRleHQ6VHAscmVtb3ZlOnlwLHR3ZWVuOmFwLGRlbGF5OmxwLGR1cmF0aW9uOmhwLGVhc2U6cHB9O3ZhciBFcD0zLEFwPWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gTWF0aC5wb3codCxuKX1yZXR1cm4gbj0rbixlLmV4cG9uZW50PXQsZX0oRXApLENwPWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gMS1NYXRoLnBvdygxLXQsbil9cmV0dXJuIG49K24sZS5leHBvbmVudD10LGV9KEVwKSx6cD1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuKCh0Kj0yKTw9MT9NYXRoLnBvdyh0LG4pOjItTWF0aC5wb3coMi10LG4pKS8yfXJldHVybiBuPStuLGUuZXhwb25lbnQ9dCxlfShFcCksUHA9TWF0aC5QSSxScD1QcC8yLHFwPTQvMTEsTHA9Ni8xMSxVcD04LzExLERwPS43NSxPcD05LzExLEZwPTEwLzExLElwPS45Mzc1LFlwPTIxLzIyLEJwPTYzLzY0LGpwPTEvcXAvcXAsSHA9MS43MDE1OCxYcD1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuIHQqdCooKG4rMSkqdC1uKX1yZXR1cm4gbj0rbixlLm92ZXJzaG9vdD10LGV9KEhwKSxWcD1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuLS10KnQqKChuKzEpKnQrbikrMX1yZXR1cm4gbj0rbixlLm92ZXJzaG9vdD10LGV9KEhwKSxXcD1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuKCh0Kj0yKTwxP3QqdCooKG4rMSkqdC1uKToodC09MikqdCooKG4rMSkqdCtuKSsyKS8yfXJldHVybiBuPStuLGUub3ZlcnNob290PXQsZX0oSHApLCRwPTIqTWF0aC5QSSxacD0xLEdwPS4zLEpwPWZ1bmN0aW9uIHQobixlKXtmdW5jdGlvbiByKHQpe3JldHVybiBuKk1hdGgucG93KDIsMTAqLS10KSpNYXRoLnNpbigoaS10KS9lKX12YXIgaT1NYXRoLmFzaW4oMS8obj1NYXRoLm1heCgxLG4pKSkqKGUvPSRwKTtyZXR1cm4gci5hbXBsaXR1ZGU9ZnVuY3Rpb24obil7cmV0dXJuIHQobixlKiRwKX0sci5wZXJpb2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHQobixlKX0scn0oWnAsR3ApLFFwPWZ1bmN0aW9uIHQobixlKXtmdW5jdGlvbiByKHQpe3JldHVybiAxLW4qTWF0aC5wb3coMiwtMTAqKHQ9K3QpKSpNYXRoLnNpbigodCtpKS9lKX12YXIgaT1NYXRoLmFzaW4oMS8obj1NYXRoLm1heCgxLG4pKSkqKGUvPSRwKTtyZXR1cm4gci5hbXBsaXR1ZGU9ZnVuY3Rpb24obil7cmV0dXJuIHQobixlKiRwKX0sci5wZXJpb2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHQobixlKX0scn0oWnAsR3ApLEtwPWZ1bmN0aW9uIHQobixlKXtmdW5jdGlvbiByKHQpe3JldHVybigodD0yKnQtMSk8MD9uKk1hdGgucG93KDIsMTAqdCkqTWF0aC5zaW4oKGktdCkvZSk6Mi1uKk1hdGgucG93KDIsLTEwKnQpKk1hdGguc2luKChpK3QpL2UpKS8yfXZhciBpPU1hdGguYXNpbigxLyhuPU1hdGgubWF4KDEsbikpKSooZS89JHApO3JldHVybiByLmFtcGxpdHVkZT1mdW5jdGlvbihuKXtyZXR1cm4gdChuLGUqJHApfSxyLnBlcmlvZD1mdW5jdGlvbihlKXtyZXR1cm4gdChuLGUpfSxyfShacCxHcCksdGQ9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOmFlfSxuZD1mdW5jdGlvbih0KXt2YXIgbixlO3QgaW5zdGFuY2VvZiBRbj8obj10Ll9pZCx0PXQuX25hbWUpOihuPXRlKCksKGU9dGQpLnRpbWU9cG4oKSx0PW51bGw9PXQ/bnVsbDp0KyIiKTtmb3IodmFyIHI9dGhpcy5fZ3JvdXBzLGk9ci5sZW5ndGgsbz0wO288aTsrK28pZm9yKHZhciB1LGE9cltvXSxjPWEubGVuZ3RoLHM9MDtzPGM7KytzKSh1PWFbc10pJiZpcCh1LHQsbixzLGEsZXx8eGUodSxuKSk7cmV0dXJuIG5ldyBRbihyLHRoaXMuX3BhcmVudHMsdCxuKX07ZHQucHJvdG90eXBlLmludGVycnVwdD11cCxkdC5wcm90b3R5cGUudHJhbnNpdGlvbj1uZDt2YXIgZWQ9W251bGxdLHJkPWZ1bmN0aW9uKHQsbil7dmFyIGUscixpPXQuX190cmFuc2l0aW9uO2lmKGkpe249bnVsbD09bj9udWxsOm4rIiI7Zm9yKHIgaW4gaSlpZigoZT1pW3JdKS5zdGF0ZT5RaCYmZS5uYW1lPT09bilyZXR1cm4gbmV3IFFuKFtbdF1dLGVkLG4sK3IpfXJldHVybiBudWxsfSxpZD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LG9kPWZ1bmN0aW9uKHQsbixlKXt0aGlzLnRhcmdldD10LHRoaXMudHlwZT1uLHRoaXMuc2VsZWN0aW9uPWV9LHVkPWZ1bmN0aW9uKCl7dC5ldmVudC5wcmV2ZW50RGVmYXVsdCgpLHQuZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9LGFkPXtuYW1lOiJkcmFnIn0sY2Q9e25hbWU6InNwYWNlIn0sc2Q9e25hbWU6ImhhbmRsZSJ9LGZkPXtuYW1lOiJjZW50ZXIifSxsZD17bmFtZToieCIsaGFuZGxlczpbImUiLCJ3Il0ubWFwKHdlKSxpbnB1dDpmdW5jdGlvbih0LG4pe3JldHVybiB0JiZbW3RbMF0sblswXVsxXV0sW3RbMV0sblsxXVsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlt0WzBdWzBdLHRbMV1bMF1dfX0saGQ9e25hbWU6InkiLGhhbmRsZXM6WyJuIiwicyJdLm1hcCh3ZSksaW5wdXQ6ZnVuY3Rpb24odCxuKXtyZXR1cm4gdCYmW1tuWzBdWzBdLHRbMF1dLFtuWzFdWzBdLHRbMV1dXX0sb3V0cHV0OmZ1bmN0aW9uKHQpe3JldHVybiB0JiZbdFswXVsxXSx0WzFdWzFdXX19LHBkPXtuYW1lOiJ4eSIsaGFuZGxlczpbIm4iLCJlIiwicyIsInciLCJudyIsIm5lIiwic2UiLCJzdyJdLm1hcCh3ZSksaW5wdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHR9LG91dHB1dDpmdW5jdGlvbih0KXtyZXR1cm4gdH19LGRkPXtvdmVybGF5OiJjcm9zc2hhaXIiLHNlbGVjdGlvbjoibW92ZSIsbjoibnMtcmVzaXplIixlOiJldy1yZXNpemUiLHM6Im5zLXJlc2l6ZSIsdzoiZXctcmVzaXplIixudzoibndzZS1yZXNpemUiLG5lOiJuZXN3LXJlc2l6ZSIsc2U6Im53c2UtcmVzaXplIixzdzoibmVzdy1yZXNpemUifSx2ZD17ZToidyIsdzoiZSIsbnc6Im5lIixuZToibnciLHNlOiJzdyIsc3c6InNlIn0sX2Q9e246InMiLHM6Im4iLG53OiJzdyIsbmU6InNlIixzZToibmUiLHN3OiJudyJ9LHlkPXtvdmVybGF5OjEsc2VsZWN0aW9uOjEsbjpudWxsLGU6MSxzOm51bGwsdzotMSxudzotMSxuZToxLHNlOjEsc3c6LTF9LGdkPXtvdmVybGF5OjEsc2VsZWN0aW9uOjEsbjotMSxlOm51bGwsczoxLHc6bnVsbCxudzotMSxuZTotMSxzZToxLHN3OjF9LG1kPWZ1bmN0aW9uKCl7cmV0dXJuIENlKHBkKX0seGQ9TWF0aC5jb3MsYmQ9TWF0aC5zaW4sd2Q9TWF0aC5QSSxNZD13ZC8yLFRkPTIqd2QsTmQ9TWF0aC5tYXgsa2Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZhciBvLHUsYSxjLHMsZixsPXQubGVuZ3RoLGg9W10scD1JcyhsKSxkPVtdLHY9W10sXz12Lmdyb3Vwcz1uZXcgQXJyYXkobCkseT1uZXcgQXJyYXkobCpsKTtmb3Iobz0wLHM9LTE7KytzPGw7KXtmb3IodT0wLGY9LTE7KytmPGw7KXUrPXRbc11bZl07aC5wdXNoKHUpLGQucHVzaChJcyhsKSksbys9dX1mb3IoZSYmcC5zb3J0KGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUoaFt0XSxoW25dKX0pLHImJmQuZm9yRWFjaChmdW5jdGlvbihuLGUpe24uc29ydChmdW5jdGlvbihuLGkpe3JldHVybiByKHRbZV1bbl0sdFtlXVtpXSl9KX0pLG89TmQoMCxUZC1uKmwpL28sYz1vP246VGQvbCx1PTAscz0tMTsrK3M8bDspe2ZvcihhPXUsZj0tMTsrK2Y8bDspe3ZhciBnPXBbc10sbT1kW2ddW2ZdLHg9dFtnXVttXSxiPXUsdz11Kz14Km87eVttKmwrZ109e2luZGV4Omcsc3ViaW5kZXg6bSxzdGFydEFuZ2xlOmIsZW5kQW5nbGU6dyx2YWx1ZTp4fX1fW2ddPXtpbmRleDpnLHN0YXJ0QW5nbGU6YSxlbmRBbmdsZTp1LHZhbHVlOmhbZ119LHUrPWN9Zm9yKHM9LTE7KytzPGw7KWZvcihmPXMtMTsrK2Y8bDspe3ZhciBNPXlbZipsK3NdLFQ9eVtzKmwrZl07KE0udmFsdWV8fFQudmFsdWUpJiZ2LnB1c2goTS52YWx1ZTxULnZhbHVlP3tzb3VyY2U6VCx0YXJnZXQ6TX06e3NvdXJjZTpNLHRhcmdldDpUfSl9cmV0dXJuIGk/di5zb3J0KGkpOnZ9dmFyIG49MCxlPW51bGwscj1udWxsLGk9bnVsbDtyZXR1cm4gdC5wYWRBbmdsZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1OZCgwLGUpLHQpOm59LHQuc29ydEdyb3Vwcz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1uLHQpOmV9LHQuc29ydFN1Ymdyb3Vwcz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1uLHQpOnJ9LHQuc29ydENob3Jkcz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09bj9pPW51bGw6KGk9emUobikpLl89bix0KTppJiZpLl99LHR9LFNkPUFycmF5LnByb3RvdHlwZS5zbGljZSxFZD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LEFkPU1hdGguUEksQ2Q9MipBZCx6ZD0xZS02LFBkPUNkLXpkO1BlLnByb3RvdHlwZT1SZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlBlLG1vdmVUbzpmdW5jdGlvbih0LG4pe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rdCkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rbil9LGNsb3NlUGF0aDpmdW5jdGlvbigpe251bGwhPT10aGlzLl94MSYmKHRoaXMuX3gxPXRoaXMuX3gwLHRoaXMuX3kxPXRoaXMuX3kwLHRoaXMuXys9IloiKX0sbGluZVRvOmZ1bmN0aW9uKHQsbil7dGhpcy5fKz0iTCIrKHRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kxPStuKX0scXVhZHJhdGljQ3VydmVUbzpmdW5jdGlvbih0LG4sZSxyKXt0aGlzLl8rPSJRIisgK3QrIiwiKyArbisiLCIrKHRoaXMuX3gxPStlKSsiLCIrKHRoaXMuX3kxPStyKX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbih0LG4sZSxyLGksbyl7dGhpcy5fKz0iQyIrICt0KyIsIisgK24rIiwiKyArZSsiLCIrICtyKyIsIisodGhpcy5feDE9K2kpKyIsIisodGhpcy5feTE9K28pfSxhcmNUbzpmdW5jdGlvbih0LG4sZSxyLGkpe3Q9K3Qsbj0rbixlPStlLHI9K3IsaT0raTt2YXIgbz10aGlzLl94MSx1PXRoaXMuX3kxLGE9ZS10LGM9ci1uLHM9by10LGY9dS1uLGw9cypzK2YqZjtpZihpPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIraSk7aWYobnVsbD09PXRoaXMuX3gxKXRoaXMuXys9Ik0iKyh0aGlzLl94MT10KSsiLCIrKHRoaXMuX3kxPW4pO2Vsc2UgaWYobD56ZClpZihNYXRoLmFicyhmKmEtYypzKT56ZCYmaSl7dmFyIGg9ZS1vLHA9ci11LGQ9YSphK2MqYyx2PWgqaCtwKnAsXz1NYXRoLnNxcnQoZCkseT1NYXRoLnNxcnQobCksZz1pKk1hdGgudGFuKChBZC1NYXRoLmFjb3MoKGQrbC12KS8oMipfKnkpKSkvMiksbT1nL3kseD1nL187TWF0aC5hYnMobS0xKT56ZCYmKHRoaXMuXys9IkwiKyh0K20qcykrIiwiKyhuK20qZikpLHRoaXMuXys9IkEiK2krIiwiK2krIiwwLDAsIisgKyhmKmg+cypwKSsiLCIrKHRoaXMuX3gxPXQreCphKSsiLCIrKHRoaXMuX3kxPW4reCpjKX1lbHNlIHRoaXMuXys9IkwiKyh0aGlzLl94MT10KSsiLCIrKHRoaXMuX3kxPW4pO2Vsc2U7fSxhcmM6ZnVuY3Rpb24odCxuLGUscixpLG8pe3Q9K3Qsbj0rbixlPStlO3ZhciB1PWUqTWF0aC5jb3MociksYT1lKk1hdGguc2luKHIpLGM9dCt1LHM9bithLGY9MV5vLGw9bz9yLWk6aS1yO2lmKGU8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIitlKTtudWxsPT09dGhpcy5feDE/dGhpcy5fKz0iTSIrYysiLCIrczooTWF0aC5hYnModGhpcy5feDEtYyk+emR8fE1hdGguYWJzKHRoaXMuX3kxLXMpPnpkKSYmKHRoaXMuXys9IkwiK2MrIiwiK3MpLGUmJihsPlBkP3RoaXMuXys9IkEiK2UrIiwiK2UrIiwwLDEsIitmKyIsIisodC11KSsiLCIrKG4tYSkrIkEiK2UrIiwiK2UrIiwwLDEsIitmKyIsIisodGhpcy5feDE9YykrIiwiKyh0aGlzLl95MT1zKToobDwwJiYobD1sJUNkK0NkKSx0aGlzLl8rPSJBIitlKyIsIitlKyIsMCwiKyArKGw+PUFkKSsiLCIrZisiLCIrKHRoaXMuX3gxPXQrZSpNYXRoLmNvcyhpKSkrIiwiKyh0aGlzLl95MT1uK2UqTWF0aC5zaW4oaSkpKSl9LHJlY3Q6ZnVuY3Rpb24odCxuLGUscil7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPStuKSsiaCIrICtlKyJ2IisgK3IrImgiKy1lKyJaIn0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX07dmFyIFJkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3ZhciB0LGE9U2QuY2FsbChhcmd1bWVudHMpLGM9bi5hcHBseSh0aGlzLGEpLHM9ZS5hcHBseSh0aGlzLGEpLGY9K3IuYXBwbHkodGhpcywoYVswXT1jLGEpKSxsPWkuYXBwbHkodGhpcyxhKS1NZCxoPW8uYXBwbHkodGhpcyxhKS1NZCxwPWYqeGQobCksZD1mKmJkKGwpLHY9K3IuYXBwbHkodGhpcywoYVswXT1zLGEpKSxfPWkuYXBwbHkodGhpcyxhKS1NZCx5PW8uYXBwbHkodGhpcyxhKS1NZDtpZih1fHwodT10PVJlKCkpLHUubW92ZVRvKHAsZCksdS5hcmMoMCwwLGYsbCxoKSxsPT09XyYmaD09PXl8fCh1LnF1YWRyYXRpY0N1cnZlVG8oMCwwLHYqeGQoXyksdipiZChfKSksdS5hcmMoMCwwLHYsXyx5KSksdS5xdWFkcmF0aWNDdXJ2ZVRvKDAsMCxwLGQpLHUuY2xvc2VQYXRoKCksdClyZXR1cm4gdT1udWxsLHQrIiJ8fG51bGx9dmFyIG49cWUsZT1MZSxyPVVlLGk9RGUsbz1PZSx1PW51bGw7cmV0dXJuIHQucmFkaXVzPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246RWQoK24pLHQpOnJ9LHQuc3RhcnRBbmdsZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOkVkKCtuKSx0KTppfSx0LmVuZEFuZ2xlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246RWQoK24pLHQpOm99LHQuc291cmNlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWUsdCk6bn0sdC50YXJnZXQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bix0KTplfSx0LmNvbnRleHQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9bnVsbD09bj9udWxsOm4sdCk6dX0sdH0scWQ9IiQiO0ZlLnByb3RvdHlwZT1JZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkZlLGhhczpmdW5jdGlvbih0KXtyZXR1cm4gcWQrdCBpbiB0aGlzfSxnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXNbcWQrdF19LHNldDpmdW5jdGlvbih0LG4pe3JldHVybiB0aGlzW3FkK3RdPW4sdGhpc30scmVtb3ZlOmZ1bmN0aW9uKHQpe3ZhciBuPXFkK3Q7cmV0dXJuIG4gaW4gdGhpcyYmZGVsZXRlIHRoaXNbbl19LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PXFkJiZkZWxldGUgdGhpc1t0XX0sa2V5czpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgbiBpbiB0aGlzKW5bMF09PT1xZCYmdC5wdXNoKG4uc2xpY2UoMSkpO3JldHVybiB0fSx2YWx1ZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIG4gaW4gdGhpcyluWzBdPT09cWQmJnQucHVzaCh0aGlzW25dKTtyZXR1cm4gdH0sZW50cmllczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgbiBpbiB0aGlzKW5bMF09PT1xZCYmdC5wdXNoKHtrZXk6bi5zbGljZSgxKSx2YWx1ZTp0aGlzW25dfSk7cmV0dXJuIHR9LHNpemU6ZnVuY3Rpb24oKXt2YXIgdD0wO2Zvcih2YXIgbiBpbiB0aGlzKW5bMF09PT1xZCYmKyt0O3JldHVybiB0fSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzKWlmKHRbMF09PT1xZClyZXR1cm4hMTtyZXR1cm4hMH0sZWFjaDpmdW5jdGlvbih0KXtmb3IodmFyIG4gaW4gdGhpcyluWzBdPT09cWQmJnQodGhpc1tuXSxuLnNsaWNlKDEpLHRoaXMpfX07dmFyIExkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChuLGksdSxhKXtpZihpPj1vLmxlbmd0aClyZXR1cm4gbnVsbCE9cj9yKG4pOm51bGwhPWU/bi5zb3J0KGUpOm47Zm9yKHZhciBjLHMsZixsPS0xLGg9bi5sZW5ndGgscD1vW2krK10sZD1JZSgpLHY9dSgpOysrbDxoOykoZj1kLmdldChjPXAocz1uW2xdKSsiIikpP2YucHVzaChzKTpkLnNldChjLFtzXSk7cmV0dXJuIGQuZWFjaChmdW5jdGlvbihuLGUpe2EodixlLHQobixpLHUsYSkpfSksdn1mdW5jdGlvbiBuKHQsZSl7aWYoKytlPm8ubGVuZ3RoKXJldHVybiB0O3ZhciBpLGE9dVtlLTFdO3JldHVybiBudWxsIT1yJiZlPj1vLmxlbmd0aD9pPXQuZW50cmllcygpOihpPVtdLHQuZWFjaChmdW5jdGlvbih0LHIpe2kucHVzaCh7a2V5OnIsdmFsdWVzOm4odCxlKX0pfSkpLG51bGwhPWE/aS5zb3J0KGZ1bmN0aW9uKHQsbil7cmV0dXJuIGEodC5rZXksbi5rZXkpfSk6aX12YXIgZSxyLGksbz1bXSx1PVtdO3JldHVybiBpPXtvYmplY3Q6ZnVuY3Rpb24obil7cmV0dXJuIHQobiwwLFllLEJlKX0sbWFwOmZ1bmN0aW9uKG4pe3JldHVybiB0KG4sMCxqZSxIZSl9LGVudHJpZXM6ZnVuY3Rpb24oZSl7cmV0dXJuIG4odChlLDAsamUsSGUpLDApfSxrZXk6ZnVuY3Rpb24odCl7cmV0dXJuIG8ucHVzaCh0KSxpfSxzb3J0S2V5czpmdW5jdGlvbih0KXtyZXR1cm4gdVtvLmxlbmd0aC0xXT10LGl9LHNvcnRWYWx1ZXM6ZnVuY3Rpb24odCl7cmV0dXJuIGU9dCxpfSxyb2xsdXA6ZnVuY3Rpb24odCl7cmV0dXJuIHI9dCxpfX19LFVkPUllLnByb3RvdHlwZTtYZS5wcm90b3R5cGU9VmUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpYZSxoYXM6VWQuaGFzLGFkZDpmdW5jdGlvbih0KXtyZXR1cm4gdCs9IiIsdGhpc1txZCt0XT10LHRoaXN9LHJlbW92ZTpVZC5yZW1vdmUsY2xlYXI6VWQuY2xlYXIsdmFsdWVzOlVkLmtleXMsc2l6ZTpVZC5zaXplLGVtcHR5OlVkLmVtcHR5LGVhY2g6VWQuZWFjaH07dmFyIERkPWZ1bmN0aW9uKHQpe3ZhciBuPVtdO2Zvcih2YXIgZSBpbiB0KW4ucHVzaChlKTtyZXR1cm4gbn0sT2Q9ZnVuY3Rpb24odCl7dmFyIG49W107Zm9yKHZhciBlIGluIHQpbi5wdXNoKHRbZV0pO3JldHVybiBufSxGZD1mdW5jdGlvbih0KXt2YXIgbj1bXTtmb3IodmFyIGUgaW4gdCluLnB1c2goe2tleTplLHZhbHVlOnRbZV19KTtyZXR1cm4gbn0sSWQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gbih0LG4pe3ZhciByLGksbz1lKHQsZnVuY3Rpb24odCxlKXtyZXR1cm4gcj9yKHQsZS0xKTooaT10LHZvaWQocj1uPyRlKHQsbik6V2UodCkpKX0pO3JldHVybiBvLmNvbHVtbnM9aSxvfWZ1bmN0aW9uIGUodCxuKXtmdW5jdGlvbiBlKCl7aWYoZj49cylyZXR1cm4gdTtpZihpKXJldHVybiBpPSExLG87dmFyIG4sZT1mO2lmKDM0PT09dC5jaGFyQ29kZUF0KGUpKXtmb3IodmFyIHI9ZTtyKys8czspaWYoMzQ9PT10LmNoYXJDb2RlQXQocikpe2lmKDM0IT09dC5jaGFyQ29kZUF0KHIrMSkpYnJlYWs7KytyfXJldHVybiBmPXIrMixuPXQuY2hhckNvZGVBdChyKzEpLDEzPT09bj8oaT0hMCwxMD09PXQuY2hhckNvZGVBdChyKzIpJiYrK2YpOjEwPT09biYmKGk9ITApLHQuc2xpY2UoZSsxLHIpLnJlcGxhY2UoLyIiL2csJyInKX1mb3IoO2Y8czspe3ZhciBhPTE7aWYobj10LmNoYXJDb2RlQXQoZisrKSwxMD09PW4paT0hMDtlbHNlIGlmKDEzPT09bilpPSEwLDEwPT09dC5jaGFyQ29kZUF0KGYpJiYoKytmLCsrYSk7ZWxzZSBpZihuIT09Yyljb250aW51ZTtyZXR1cm4gdC5zbGljZShlLGYtYSl9cmV0dXJuIHQuc2xpY2UoZSl9Zm9yKHZhciByLGksbz17fSx1PXt9LGE9W10scz10Lmxlbmd0aCxmPTAsbD0wOyhyPWUoKSkhPT11Oyl7Zm9yKHZhciBoPVtdO3IhPT1vJiZyIT09dTspaC5wdXNoKHIpLHI9ZSgpO24mJm51bGw9PShoPW4oaCxsKyspKXx8YS5wdXNoKGgpfXJldHVybiBhfWZ1bmN0aW9uIHIobixlKXtyZXR1cm4gbnVsbD09ZSYmKGU9WmUobikpLFtlLm1hcCh1KS5qb2luKHQpXS5jb25jYXQobi5tYXAoZnVuY3Rpb24obil7cmV0dXJuIGUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB1KG5bdF0pfSkuam9pbih0KX0pKS5qb2luKCJcbiIpfWZ1bmN0aW9uIGkodCl7cmV0dXJuIHQubWFwKG8pLmpvaW4oIlxuIil9ZnVuY3Rpb24gbyhuKXtyZXR1cm4gbi5tYXAodSkuam9pbih0KX1mdW5jdGlvbiB1KHQpe3JldHVybiBudWxsPT10PyIiOmEudGVzdCh0Kz0iIik/JyInK3QucmVwbGFjZSgvXCIvZywnIiInKSsnIic6dH12YXIgYT1uZXcgUmVnRXhwKCdbIicrdCsiXG5dIiksYz10LmNoYXJDb2RlQXQoMCk7cmV0dXJue3BhcnNlOm4scGFyc2VSb3dzOmUsZm9ybWF0OnIsZm9ybWF0Um93czppfX0sWWQ9SWQoIiwiKSxCZD1ZZC5wYXJzZSxqZD1ZZC5wYXJzZVJvd3MsSGQ9WWQuZm9ybWF0LFhkPVlkLmZvcm1hdFJvd3MsVmQ9SWQoIlx0IiksV2Q9VmQucGFyc2UsJGQ9VmQucGFyc2VSb3dzLFpkPVZkLmZvcm1hdCxHZD1WZC5mb3JtYXRSb3dzLEpkPWZ1bmN0aW9uKHQsbil7ZnVuY3Rpb24gZSgpe3ZhciBlLGksbz1yLmxlbmd0aCx1PTAsYT0wO2ZvcihlPTA7ZTxvOysrZSlpPXJbZV0sdSs9aS54LGErPWkueTtmb3IodT11L28tdCxhPWEvby1uLGU9MDtlPG87KytlKWk9cltlXSxpLngtPXUsaS55LT1hfXZhciByO3JldHVybiBudWxsPT10JiYodD0wKSxudWxsPT1uJiYobj0wKSxlLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7cj10fSxlLng9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K24sZSk6dH0sZS55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSt0LGUpOm59LGV9LFFkPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0sS2Q9ZnVuY3Rpb24oKXtyZXR1cm4gMWUtNiooTWF0aC5yYW5kb20oKS0uNSl9LHR2PWZ1bmN0aW9uKHQpe3ZhciBuPSt0aGlzLl94LmNhbGwobnVsbCx0KSxlPSt0aGlzLl95LmNhbGwobnVsbCx0KTtyZXR1cm4gR2UodGhpcy5jb3ZlcihuLGUpLG4sZSx0KX0sbnY9ZnVuY3Rpb24odCxuKXtpZihpc05hTih0PSt0KXx8aXNOYU4obj0rbikpcmV0dXJuIHRoaXM7dmFyIGU9dGhpcy5feDAscj10aGlzLl95MCxpPXRoaXMuX3gxLG89dGhpcy5feTE7aWYoaXNOYU4oZSkpaT0oZT1NYXRoLmZsb29yKHQpKSsxLG89KHI9TWF0aC5mbG9vcihuKSkrMTtlbHNle2lmKCEoZT50fHx0Pml8fHI+bnx8bj5vKSlyZXR1cm4gdGhpczt2YXIgdSxhLGM9aS1lLHM9dGhpcy5fcm9vdDtzd2l0Y2goYT0objwocitvKS8yKTw8MXx0PChlK2kpLzIpe2Nhc2UgMDpkbyB1PW5ldyBBcnJheSg0KSx1W2FdPXMscz11O3doaWxlKGMqPTIsaT1lK2Msbz1yK2MsdD5pfHxuPm8pO2JyZWFrO2Nhc2UgMTpkbyB1PW5ldyBBcnJheSg0KSx1W2FdPXMscz11O3doaWxlKGMqPTIsZT1pLWMsbz1yK2MsZT50fHxuPm8pO2JyZWFrO2Nhc2UgMjpkbyB1PW5ldyBBcnJheSg0KSx1W2FdPXMscz11O3doaWxlKGMqPTIsaT1lK2Mscj1vLWMsdD5pfHxyPm4pO2JyZWFrO2Nhc2UgMzpkbyB1PW5ldyBBcnJheSg0KSx1W2FdPXMscz11O3doaWxlKGMqPTIsZT1pLWMscj1vLWMsZT50fHxyPm4pfXRoaXMuX3Jvb3QmJnRoaXMuX3Jvb3QubGVuZ3RoJiYodGhpcy5fcm9vdD1zKX1yZXR1cm4gdGhpcy5feDA9ZSx0aGlzLl95MD1yLHRoaXMuX3gxPWksdGhpcy5feTE9byx0aGlzfSxldj1mdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLnZpc2l0KGZ1bmN0aW9uKG4pe2lmKCFuLmxlbmd0aClkbyB0LnB1c2gobi5kYXRhKTt3aGlsZShuPW4ubmV4dCl9KSx0fSxydj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmNvdmVyKCt0WzBdWzBdLCt0WzBdWzFdKS5jb3ZlcigrdFsxXVswXSwrdFsxXVsxXSk6aXNOYU4odGhpcy5feDApP3ZvaWQgMDpbW3RoaXMuX3gwLHRoaXMuX3kwXSxbdGhpcy5feDEsdGhpcy5feTFdXX0saXY9ZnVuY3Rpb24odCxuLGUscixpKXt0aGlzLm5vZGU9dCx0aGlzLngwPW4sdGhpcy55MD1lLHRoaXMueDE9cix0aGlzLnkxPWl9LG92PWZ1bmN0aW9uKHQsbixlKXt2YXIgcixpLG8sdSxhLGMscyxmPXRoaXMuX3gwLGw9dGhpcy5feTAsaD10aGlzLl94MSxwPXRoaXMuX3kxLGQ9W10sdj10aGlzLl9yb290O2Zvcih2JiZkLnB1c2gobmV3IGl2KHYsZixsLGgscCkpLG51bGw9PWU/ZT0xLzA6KGY9dC1lLGw9bi1lLGg9dCtlLHA9bitlLGUqPWUpO2M9ZC5wb3AoKTspaWYoISghKHY9Yy5ub2RlKXx8KGk9Yy54MCk+aHx8KG89Yy55MCk+cHx8KHU9Yy54MSk8Znx8KGE9Yy55MSk8bCkpaWYodi5sZW5ndGgpe3ZhciBfPShpK3UpLzIseT0obythKS8yO2QucHVzaChuZXcgaXYodlszXSxfLHksdSxhKSxuZXcgaXYodlsyXSxpLHksXyxhKSxuZXcgaXYodlsxXSxfLG8sdSx5KSxuZXcgaXYodlswXSxpLG8sXyx5KSksKHM9KG4+PXkpPDwxfHQ+PV8pJiYoYz1kW2QubGVuZ3RoLTFdLGRbZC5sZW5ndGgtMV09ZFtkLmxlbmd0aC0xLXNdLGRbZC5sZW5ndGgtMS1zXT1jKX1lbHNle3ZhciBnPXQtK3RoaXMuX3guY2FsbChudWxsLHYuZGF0YSksbT1uLSt0aGlzLl95LmNhbGwobnVsbCx2LmRhdGEpLHg9ZypnK20qbTtpZih4PGUpe3ZhciBiPU1hdGguc3FydChlPXgpO2Y9dC1iLGw9bi1iLGg9dCtiLHA9bitiLHI9di5kYXRhfX1yZXR1cm4gcn0sdXY9ZnVuY3Rpb24odCl7aWYoaXNOYU4obz0rdGhpcy5feC5jYWxsKG51bGwsdCkpfHxpc05hTih1PSt0aGlzLl95LmNhbGwobnVsbCx0KSkpcmV0dXJuIHRoaXM7dmFyIG4sZSxyLGksbyx1LGEsYyxzLGYsbCxoLHA9dGhpcy5fcm9vdCxkPXRoaXMuX3gwLHY9dGhpcy5feTAsXz10aGlzLl94MSx5PXRoaXMuX3kxO2lmKCFwKXJldHVybiB0aGlzO2lmKHAubGVuZ3RoKWZvcig7Oyl7aWYoKHM9bz49KGE9KGQrXykvMikpP2Q9YTpfPWEsKGY9dT49KGM9KHYreSkvMikpP3Y9Yzp5PWMsbj1wLCEocD1wW2w9Zjw8MXxzXSkpcmV0dXJuIHRoaXM7aWYoIXAubGVuZ3RoKWJyZWFrOyhuW2wrMSYzXXx8bltsKzImM118fG5bbCszJjNdKSYmKGU9bixoPWwpfWZvcig7cC5kYXRhIT09dDspaWYocj1wLCEocD1wLm5leHQpKXJldHVybiB0aGlzO3JldHVybihpPXAubmV4dCkmJmRlbGV0ZSBwLm5leHQscj8oaT9yLm5leHQ9aTpkZWxldGUgci5uZXh0LHRoaXMpOm4/KGk/bltsXT1pOmRlbGV0ZSBuW2xdLChwPW5bMF18fG5bMV18fG5bMl18fG5bM10pJiZwPT09KG5bM118fG5bMl18fG5bMV18fG5bMF0pJiYhcC5sZW5ndGgmJihlP2VbaF09cDp0aGlzLl9yb290PXApLHRoaXMpOih0aGlzLl9yb290PWksdGhpcyl9LGF2PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jvb3R9LGN2PWZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gdGhpcy52aXNpdChmdW5jdGlvbihuKXtpZighbi5sZW5ndGgpZG8rK3Q7d2hpbGUobj1uLm5leHQpfSksdH0sc3Y9ZnVuY3Rpb24odCl7dmFyIG4sZSxyLGksbyx1LGE9W10sYz10aGlzLl9yb290O2ZvcihjJiZhLnB1c2gobmV3IGl2KGMsdGhpcy5feDAsdGhpcy5feTAsdGhpcy5feDEsdGhpcy5feTEpKTtuPWEucG9wKCk7KWlmKCF0KGM9bi5ub2RlLHI9bi54MCxpPW4ueTAsbz1uLngxLHU9bi55MSkmJmMubGVuZ3RoKXt2YXIgcz0ocitvKS8yLGY9KGkrdSkvMjsoZT1jWzNdKSYmYS5wdXNoKG5ldyBpdihlLHMsZixvLHUpKSwoZT1jWzJdKSYmYS5wdXNoKG5ldyBpdihlLHIsZixzLHUpKSwoZT1jWzFdKSYmYS5wdXNoKG5ldyBpdihlLHMsaSxvLGYpKSwoZT1jWzBdKSYmYS5wdXNoKG5ldyBpdihlLHIsaSxzLGYpKX1yZXR1cm4gdGhpc30sZnY9ZnVuY3Rpb24odCl7dmFyIG4sZT1bXSxyPVtdO2Zvcih0aGlzLl9yb290JiZlLnB1c2gobmV3IGl2KHRoaXMuX3Jvb3QsdGhpcy5feDAsdGhpcy5feTAsdGhpcy5feDEsdGhpcy5feTEpKTtuPWUucG9wKCk7KXt2YXIgaT1uLm5vZGU7aWYoaS5sZW5ndGgpe3ZhciBvLHU9bi54MCxhPW4ueTAsYz1uLngxLHM9bi55MSxmPSh1K2MpLzIsbD0oYStzKS8yOyhvPWlbMF0pJiZlLnB1c2gobmV3IGl2KG8sdSxhLGYsbCkpLChvPWlbMV0pJiZlLnB1c2gobmV3IGl2KG8sZixhLGMsbCkpLChvPWlbMl0pJiZlLnB1c2gobmV3IGl2KG8sdSxsLGYscykpLChvPWlbM10pJiZlLnB1c2gobmV3IGl2KG8sZixsLGMscykpfXIucHVzaChuKX1mb3IoO249ci5wb3AoKTspdChuLm5vZGUsbi54MCxuLnkwLG4ueDEsbi55MSk7cmV0dXJuIHRoaXN9LGx2PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl94PXQsdGhpcyk6dGhpcy5feH0saHY9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX3k9dCx0aGlzKTp0aGlzLl95fSxwdj1uci5wcm90b3R5cGU9ZXIucHJvdG90eXBlO3B2LmNvcHk9ZnVuY3Rpb24oKXt2YXIgdCxuLGU9bmV3IGVyKHRoaXMuX3gsdGhpcy5feSx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkscj10aGlzLl9yb290O2lmKCFyKXJldHVybiBlO2lmKCFyLmxlbmd0aClyZXR1cm4gZS5fcm9vdD1ycihyKSxlO2Zvcih0PVt7c291cmNlOnIsdGFyZ2V0OmUuX3Jvb3Q9bmV3IEFycmF5KDQpfV07cj10LnBvcCgpOylmb3IodmFyIGk9MDtpPDQ7KytpKShuPXIuc291cmNlW2ldKSYmKG4ubGVuZ3RoP3QucHVzaCh7c291cmNlOm4sdGFyZ2V0OnIudGFyZ2V0W2ldPW5ldyBBcnJheSg0KX0pOnIudGFyZ2V0W2ldPXJyKG4pKTtyZXR1cm4gZX0scHYuYWRkPXR2LHB2LmFkZEFsbD1KZSxwdi5jb3Zlcj1udixwdi5kYXRhPWV2LHB2LmV4dGVudD1ydixwdi5maW5kPW92LHB2LnJlbW92ZT11dixwdi5yZW1vdmVBbGw9UWUscHYucm9vdD1hdixwdi5zaXplPWN2LHB2LnZpc2l0PXN2LHB2LnZpc2l0QWZ0ZXI9ZnYscHYueD1sdixwdi55PWh2O3ZhciBkdix2dj1mdW5jdGlvbih0KXtmdW5jdGlvbiBuKCl7ZnVuY3Rpb24gdCh0LG4sZSxyLGkpe3ZhciBvPXQuZGF0YSxhPXQucixwPWwrYTt7aWYoIW8pcmV0dXJuIG4+cytwfHxyPHMtcHx8ZT5mK3B8fGk8Zi1wO2lmKG8uaW5kZXg+Yy5pbmRleCl7dmFyIGQ9cy1vLngtby52eCx2PWYtby55LW8udnksXz1kKmQrdip2O188cCpwJiYoMD09PWQmJihkPUtkKCksXys9ZCpkKSwwPT09diYmKHY9S2QoKSxfKz12KnYpLF89KHAtKF89TWF0aC5zcXJ0KF8pKSkvXyp1LGMudngrPShkKj1fKSoocD0oYSo9YSkvKGgrYSkpLGMudnkrPSh2Kj1fKSpwLG8udngtPWQqKHA9MS1wKSxvLnZ5LT12KnApfX19Zm9yKHZhciBuLHIsYyxzLGYsbCxoLHA9aS5sZW5ndGgsZD0wO2Q8YTsrK2QpZm9yKHI9bnIoaSxpcixvcikudmlzaXRBZnRlcihlKSxuPTA7bjxwOysrbiljPWlbbl0sbD1vW2MuaW5kZXhdLGg9bCpsLHM9Yy54K2MudngsZj1jLnkrYy52eSxyLnZpc2l0KHQpfWZ1bmN0aW9uIGUodCl7aWYodC5kYXRhKXJldHVybiB0LnI9b1t0LmRhdGEuaW5kZXhdO2Zvcih2YXIgbj10LnI9MDtuPDQ7KytuKXRbbl0mJnRbbl0ucj50LnImJih0LnI9dFtuXS5yKX1mdW5jdGlvbiByKCl7aWYoaSl7dmFyIG4sZSxyPWkubGVuZ3RoO2ZvcihvPW5ldyBBcnJheShyKSxuPTA7bjxyOysrbillPWlbbl0sb1tlLmluZGV4XT0rdChlLG4saSl9fXZhciBpLG8sdT0xLGE9MTtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9UWQobnVsbD09dD8xOit0KSksbi5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe2k9dCxyKCl9LG4uaXRlcmF0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rdCxuKTphfSxuLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSt0LG4pOnV9LG4ucmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6UWQoK2UpLHIoKSxuKTp0fSxufSxfdj1mdW5jdGlvbih0KXtmdW5jdGlvbiBuKHQpe3JldHVybiAxL01hdGgubWluKHNbdC5zb3VyY2UuaW5kZXhdLHNbdC50YXJnZXQuaW5kZXhdKX1mdW5jdGlvbiBlKG4pe2Zvcih2YXIgZT0wLHI9dC5sZW5ndGg7ZTxkOysrZSlmb3IodmFyIGksbyxjLHMsbCxoLHAsdj0wO3Y8cjsrK3YpaT10W3ZdLG89aS5zb3VyY2UsYz1pLnRhcmdldCxzPWMueCtjLnZ4LW8ueC1vLnZ4fHxLZCgpLGw9Yy55K2Mudnktby55LW8udnl8fEtkKCksaD1NYXRoLnNxcnQocypzK2wqbCksaD0oaC1hW3ZdKS9oKm4qdVt2XSxzKj1oLGwqPWgsYy52eC09cyoocD1mW3ZdKSxjLnZ5LT1sKnAsby52eCs9cyoocD0xLXApLG8udnkrPWwqcH1mdW5jdGlvbiByKCl7aWYoYyl7dmFyIG4sZSxyPWMubGVuZ3RoLGg9dC5sZW5ndGgscD1JZShjLGwpO2ZvcihuPTAscz1uZXcgQXJyYXkocik7bjxoOysrbillPXRbbl0sZS5pbmRleD1uLCJvYmplY3QiIT10eXBlb2YgZS5zb3VyY2UmJihlLnNvdXJjZT1hcihwLGUuc291cmNlKSksIm9iamVjdCIhPXR5cGVvZiBlLnRhcmdldCYmKGUudGFyZ2V0PWFyKHAsZS50YXJnZXQpKSxzW2Uuc291cmNlLmluZGV4XT0oc1tlLnNvdXJjZS5pbmRleF18fDApKzEsc1tlLnRhcmdldC5pbmRleF09KHNbZS50YXJnZXQuaW5kZXhdfHwwKSsxO2ZvcihuPTAsZj1uZXcgQXJyYXkoaCk7bjxoOysrbillPXRbbl0sZltuXT1zW2Uuc291cmNlLmluZGV4XS8oc1tlLnNvdXJjZS5pbmRleF0rc1tlLnRhcmdldC5pbmRleF0pO3U9bmV3IEFycmF5KGgpLGkoKSxhPW5ldyBBcnJheShoKSxvKCl9fWZ1bmN0aW9uIGkoKXtpZihjKWZvcih2YXIgbj0wLGU9dC5sZW5ndGg7bjxlOysrbil1W25dPStoKHRbbl0sbix0KX1mdW5jdGlvbiBvKCl7aWYoYylmb3IodmFyIG49MCxlPXQubGVuZ3RoO248ZTsrK24pYVtuXT0rcCh0W25dLG4sdCl9dmFyIHUsYSxjLHMsZixsPXVyLGg9bixwPVFkKDMwKSxkPTE7cmV0dXJuIG51bGw9PXQmJih0PVtdKSxlLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7Yz10LHIoKX0sZS5saW5rcz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1uLHIoKSxlKTp0fSxlLmlkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPXQsZSk6bH0sZS5pdGVyYXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPSt0LGUpOmR9LGUuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpRZCgrdCksaSgpLGUpOmh9LGUuZGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpRZCgrdCksbygpLGUpOnB9LGV9LHl2PTEwLGd2PU1hdGguUEkqKDMtTWF0aC5zcXJ0KDUpKSxtdj1mdW5jdGlvbih0KXtmdW5jdGlvbiBuKCl7ZSgpLGQuY2FsbCgidGljayIsbyksdTxhJiYoaC5zdG9wKCksZC5jYWxsKCJlbmQiLG8pKX1mdW5jdGlvbiBlKCl7dmFyIG4sZSxyPXQubGVuZ3RoO2Zvcih1Kz0ocy11KSpjLGwuZWFjaChmdW5jdGlvbih0KXt0KHUpfSksbj0wO248cjsrK24pZT10W25dLG51bGw9PWUuZng/ZS54Kz1lLnZ4Kj1mOihlLng9ZS5meCxlLnZ4PTApLG51bGw9PWUuZnk/ZS55Kz1lLnZ5Kj1mOihlLnk9ZS5meSxlLnZ5PTApfWZ1bmN0aW9uIHIoKXtmb3IodmFyIG4sZT0wLHI9dC5sZW5ndGg7ZTxyOysrZSl7aWYobj10W2VdLG4uaW5kZXg9ZSxpc05hTihuLngpfHxpc05hTihuLnkpKXt2YXIgaT15dipNYXRoLnNxcnQoZSksbz1lKmd2O24ueD1pKk1hdGguY29zKG8pLG4ueT1pKk1hdGguc2luKG8pfShpc05hTihuLnZ4KXx8aXNOYU4obi52eSkpJiYobi52eD1uLnZ5PTApfX1mdW5jdGlvbiBpKG4pe3JldHVybiBuLmluaXRpYWxpemUmJm4uaW5pdGlhbGl6ZSh0KSxufXZhciBvLHU9MSxhPS4wMDEsYz0xLU1hdGgucG93KGEsMS8zMDApLHM9MCxmPS42LGw9SWUoKSxoPV9uKG4pLGQ9cCgidGljayIsImVuZCIpO3JldHVybiBudWxsPT10JiYodD1bXSkscigpLG89e3RpY2s6ZSxyZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIGgucmVzdGFydChuKSxvfSxzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIGguc3RvcCgpLG99LG5vZGVzOmZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW4scigpLGwuZWFjaChpKSxvKTp0fSxhbHBoYTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0rdCxvKTp1fSxhbHBoYU1pbjpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rdCxvKTphfSxhbHBoYURlY2F5OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPSt0LG8pOitjfSxhbHBoYVRhcmdldDpmdW5jdGlvbih0KXsNCnJldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSt0LG8pOnN9LHZlbG9jaXR5RGVjYXk6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9MS10LG8pOjEtZn0sZm9yY2U6ZnVuY3Rpb24odCxuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xPyhudWxsPT1uP2wucmVtb3ZlKHQpOmwuc2V0KHQsaShuKSksbyk6bC5nZXQodCl9LGZpbmQ6ZnVuY3Rpb24obixlLHIpe3ZhciBpLG8sdSxhLGMscz0wLGY9dC5sZW5ndGg7Zm9yKG51bGw9PXI/cj0xLzA6cio9cixzPTA7czxmOysrcylhPXRbc10saT1uLWEueCxvPWUtYS55LHU9aSppK28qbyx1PHImJihjPWEscj11KTtyZXR1cm4gY30sb246ZnVuY3Rpb24odCxuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xPyhkLm9uKHQsbiksbyk6ZC5vbih0KX19fSx4dj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dmFyIG4sYT1pLmxlbmd0aCxjPW5yKGksY3Isc3IpLnZpc2l0QWZ0ZXIoZSk7Zm9yKHU9dCxuPTA7bjxhOysrbilvPWlbbl0sYy52aXNpdChyKX1mdW5jdGlvbiBuKCl7aWYoaSl7dmFyIHQsbixlPWkubGVuZ3RoO2ZvcihhPW5ldyBBcnJheShlKSx0PTA7dDxlOysrdCluPWlbdF0sYVtuLmluZGV4XT0rYyhuLHQsaSl9fWZ1bmN0aW9uIGUodCl7dmFyIG4sZSxyLGksbyx1PTA7aWYodC5sZW5ndGgpe2ZvcihyPWk9bz0wO288NDsrK28pKG49dFtvXSkmJihlPW4udmFsdWUpJiYodSs9ZSxyKz1lKm4ueCxpKz1lKm4ueSk7dC54PXIvdSx0Lnk9aS91fWVsc2V7bj10LG4ueD1uLmRhdGEueCxuLnk9bi5kYXRhLnk7ZG8gdSs9YVtuLmRhdGEuaW5kZXhdO3doaWxlKG49bi5uZXh0KX10LnZhbHVlPXV9ZnVuY3Rpb24gcih0LG4sZSxyKXtpZighdC52YWx1ZSlyZXR1cm4hMDt2YXIgaT10Lngtby54LGM9dC55LW8ueSxoPXItbixwPWkqaStjKmM7aWYoaCpoL2w8cClyZXR1cm4gcDxmJiYoMD09PWkmJihpPUtkKCkscCs9aSppKSwwPT09YyYmKGM9S2QoKSxwKz1jKmMpLHA8cyYmKHA9TWF0aC5zcXJ0KHMqcCkpLG8udngrPWkqdC52YWx1ZSp1L3Asby52eSs9Yyp0LnZhbHVlKnUvcCksITA7aWYoISh0Lmxlbmd0aHx8cD49Zikpeyh0LmRhdGEhPT1vfHx0Lm5leHQpJiYoMD09PWkmJihpPUtkKCkscCs9aSppKSwwPT09YyYmKGM9S2QoKSxwKz1jKmMpLHA8cyYmKHA9TWF0aC5zcXJ0KHMqcCkpKTtkbyB0LmRhdGEhPT1vJiYoaD1hW3QuZGF0YS5pbmRleF0qdS9wLG8udngrPWkqaCxvLnZ5Kz1jKmgpO3doaWxlKHQ9dC5uZXh0KX19dmFyIGksbyx1LGEsYz1RZCgtMzApLHM9MSxmPTEvMCxsPS44MTtyZXR1cm4gdC5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe2k9dCxuKCl9LHQuc3RyZW5ndGg9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpRZCgrZSksbigpLHQpOmN9LHQuZGlzdGFuY2VNaW49ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9bipuLHQpOk1hdGguc3FydChzKX0sdC5kaXN0YW5jZU1heD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj1uKm4sdCk6TWF0aC5zcXJ0KGYpfSx0LnRoZXRhPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPW4qbix0KTpNYXRoLnNxcnQobCl9LHR9LGJ2PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4odCl7Zm9yKHZhciBuLGU9MCx1PXIubGVuZ3RoO2U8dTsrK2Upbj1yW2VdLG4udngrPShvW2VdLW4ueCkqaVtlXSp0fWZ1bmN0aW9uIGUoKXtpZihyKXt2YXIgbixlPXIubGVuZ3RoO2ZvcihpPW5ldyBBcnJheShlKSxvPW5ldyBBcnJheShlKSxuPTA7bjxlOysrbilpW25dPWlzTmFOKG9bbl09K3QocltuXSxuLHIpKT8wOit1KHJbbl0sbixyKX19dmFyIHIsaSxvLHU9UWQoLjEpO3JldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1RZChudWxsPT10PzA6K3QpKSxuLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7cj10LGUoKX0sbi5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlFkKCt0KSxlKCksbik6dX0sbi54PWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiByP3I6UWQoK3IpLGUoKSxuKTp0fSxufSx3dj1mdW5jdGlvbih0KXtmdW5jdGlvbiBuKHQpe2Zvcih2YXIgbixlPTAsdT1yLmxlbmd0aDtlPHU7KytlKW49cltlXSxuLnZ5Kz0ob1tlXS1uLnkpKmlbZV0qdH1mdW5jdGlvbiBlKCl7aWYocil7dmFyIG4sZT1yLmxlbmd0aDtmb3IoaT1uZXcgQXJyYXkoZSksbz1uZXcgQXJyYXkoZSksbj0wO248ZTsrK24paVtuXT1pc05hTihvW25dPSt0KHJbbl0sbixyKSk/MDordShyW25dLG4scil9fXZhciByLGksbyx1PVFkKC4xKTtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9UWQobnVsbD09dD8wOit0KSksbi5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe3I9dCxlKCl9LG4uc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpRZCgrdCksZSgpLG4pOnV9LG4ueT1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2Ygcj9yOlFkKCtyKSxlKCksbik6dH0sbn0sTXY9ZnVuY3Rpb24odCxuKXtpZigoZT0odD1uP3QudG9FeHBvbmVudGlhbChuLTEpOnQudG9FeHBvbmVudGlhbCgpKS5pbmRleE9mKCJlIikpPDApcmV0dXJuIG51bGw7dmFyIGUscj10LnNsaWNlKDAsZSk7cmV0dXJuW3IubGVuZ3RoPjE/clswXStyLnNsaWNlKDIpOnIsK3Quc2xpY2UoZSsxKV19LFR2PWZ1bmN0aW9uKHQpe3JldHVybiB0PU12KE1hdGguYWJzKHQpKSx0P3RbMV06TmFOfSxOdj1mdW5jdGlvbih0LG4pe3JldHVybiBmdW5jdGlvbihlLHIpe2Zvcih2YXIgaT1lLmxlbmd0aCxvPVtdLHU9MCxhPXRbMF0sYz0wO2k+MCYmYT4wJiYoYythKzE+ciYmKGE9TWF0aC5tYXgoMSxyLWMpKSxvLnB1c2goZS5zdWJzdHJpbmcoaS09YSxpK2EpKSwhKChjKz1hKzEpPnIpKTspYT10W3U9KHUrMSkldC5sZW5ndGhdO3JldHVybiBvLnJldmVyc2UoKS5qb2luKG4pfX0sa3Y9ZnVuY3Rpb24odCxuKXt0PXQudG9QcmVjaXNpb24obik7dDpmb3IodmFyIGUscj10Lmxlbmd0aCxpPTEsbz0tMTtpPHI7KytpKXN3aXRjaCh0W2ldKXtjYXNlIi4iOm89ZT1pO2JyZWFrO2Nhc2UiMCI6MD09PW8mJihvPWkpLGU9aTticmVhaztjYXNlImUiOmJyZWFrIHQ7ZGVmYXVsdDpvPjAmJihvPTApfXJldHVybiBvPjA/dC5zbGljZSgwLG8pK3Quc2xpY2UoZSsxKTp0fSxTdj1mdW5jdGlvbih0LG4pe3ZhciBlPU12KHQsbik7aWYoIWUpcmV0dXJuIHQrIiI7dmFyIHI9ZVswXSxpPWVbMV0sbz1pLShkdj0zKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihpLzMpKSkpKzEsdT1yLmxlbmd0aDtyZXR1cm4gbz09PXU/cjpvPnU/cituZXcgQXJyYXkoby11KzEpLmpvaW4oIjAiKTpvPjA/ci5zbGljZSgwLG8pKyIuIityLnNsaWNlKG8pOiIwLiIrbmV3IEFycmF5KDEtbykuam9pbigiMCIpK012KHQsTWF0aC5tYXgoMCxuK28tMSkpWzBdfSxFdj1mdW5jdGlvbih0LG4pe3ZhciBlPU12KHQsbik7aWYoIWUpcmV0dXJuIHQrIiI7dmFyIHI9ZVswXSxpPWVbMV07cmV0dXJuIGk8MD8iMC4iK25ldyBBcnJheSgtaSkuam9pbigiMCIpK3I6ci5sZW5ndGg+aSsxP3Iuc2xpY2UoMCxpKzEpKyIuIityLnNsaWNlKGkrMSk6cituZXcgQXJyYXkoaS1yLmxlbmd0aCsyKS5qb2luKCIwIil9LEF2PXsiIjprdiwiJSI6ZnVuY3Rpb24odCxuKXtyZXR1cm4oMTAwKnQpLnRvRml4ZWQobil9LGI6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMil9LGM6ZnVuY3Rpb24odCl7cmV0dXJuIHQrIiJ9LGQ6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMTApfSxlOmZ1bmN0aW9uKHQsbil7cmV0dXJuIHQudG9FeHBvbmVudGlhbChuKX0sZjpmdW5jdGlvbih0LG4pe3JldHVybiB0LnRvRml4ZWQobil9LGc6ZnVuY3Rpb24odCxuKXtyZXR1cm4gdC50b1ByZWNpc2lvbihuKX0sbzpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZyg4KX0scDpmdW5jdGlvbih0LG4pe3JldHVybiBFdigxMDAqdCxuKX0scjpFdixzOlN2LFg6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9LHg6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMTYpfX0sQ3Y9L14oPzooLik/KFs8Pj1eXSkpPyhbK1wtXCggXSk/KFskI10pPygwKT8oXGQrKT8oLCk/KFwuXGQrKT8oW2EteiVdKT8kL2ksenY9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBmcih0KX07ZnIucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsbCt0aGlzLmFsaWduK3RoaXMuc2lnbit0aGlzLnN5bWJvbCsodGhpcy56ZXJvPyIwIjoiIikrKG51bGw9PXRoaXMud2lkdGg/IiI6TWF0aC5tYXgoMSwwfHRoaXMud2lkdGgpKSsodGhpcy5jb21tYT8iLCI6IiIpKyhudWxsPT10aGlzLnByZWNpc2lvbj8iIjoiLiIrTWF0aC5tYXgoMCwwfHRoaXMucHJlY2lzaW9uKSkrdGhpcy50eXBlfTt2YXIgUHYsUnY9WyJ5IiwieiIsImEiLCJmIiwicCIsIm4iLCLCtSIsIm0iLCIiLCJrIiwiTSIsIkciLCJUIiwiUCIsIkUiLCJaIiwiWSJdLHF2PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4odCl7ZnVuY3Rpb24gbih0KXt2YXIgbixpLGMsZz1kLG09djtpZigiYyI9PT1wKW09Xyh0KSttLHQ9IiI7ZWxzZXt0PSt0O3ZhciB4PSh0PDB8fDEvdDwwKSYmKHQqPS0xLCEwKTtpZih0PV8odCxoKSx4KWZvcihuPS0xLGk9dC5sZW5ndGgseD0hMTsrK248aTspaWYoYz10LmNoYXJDb2RlQXQobiksNDg8YyYmYzw1OHx8IngiPT09cCYmOTY8YyYmYzwxMDN8fCJYIj09PXAmJjY0PGMmJmM8NzEpe3g9ITA7YnJlYWt9aWYoZz0oeD8iKCI9PT1hP2E6Ii0iOiItIj09PWF8fCIoIj09PWE/IiI6YSkrZyxtPW0rKCJzIj09PXA/UnZbOCtkdi8zXToiIikrKHgmJiIoIj09PWE/IikiOiIiKSx5KWZvcihuPS0xLGk9dC5sZW5ndGg7KytuPGk7KWlmKGM9dC5jaGFyQ29kZUF0KG4pLDQ4PmN8fGM+NTcpe209KDQ2PT09Yz9vK3Quc2xpY2UobisxKTp0LnNsaWNlKG4pKSttLHQ9dC5zbGljZSgwLG4pO2JyZWFrfX1sJiYhcyYmKHQ9cih0LDEvMCkpO3ZhciBiPWcubGVuZ3RoK3QubGVuZ3RoK20ubGVuZ3RoLHc9YjxmP25ldyBBcnJheShmLWIrMSkuam9pbihlKToiIjtzd2l0Y2gobCYmcyYmKHQ9cih3K3Qsdy5sZW5ndGg/Zi1tLmxlbmd0aDoxLzApLHc9IiIpLHUpe2Nhc2UiPCI6cmV0dXJuIGcrdCttK3c7Y2FzZSI9IjpyZXR1cm4gZyt3K3QrbTtjYXNlIl4iOnJldHVybiB3LnNsaWNlKDAsYj13Lmxlbmd0aD4+MSkrZyt0K20rdy5zbGljZShiKX1yZXR1cm4gdytnK3QrbX10PXp2KHQpO3ZhciBlPXQuZmlsbCx1PXQuYWxpZ24sYT10LnNpZ24sYz10LnN5bWJvbCxzPXQuemVybyxmPXQud2lkdGgsbD10LmNvbW1hLGg9dC5wcmVjaXNpb24scD10LnR5cGUsZD0iJCI9PT1jP2lbMF06IiMiPT09YyYmL1tib3hYXS8udGVzdChwKT8iMCIrcC50b0xvd2VyQ2FzZSgpOiIiLHY9IiQiPT09Yz9pWzFdOi9bJXBdLy50ZXN0KHApPyIlIjoiIixfPUF2W3BdLHk9IXB8fC9bZGVmZ3BycyVdLy50ZXN0KHApO3JldHVybiBoPW51bGw9PWg/cD82OjEyOi9bZ3Byc10vLnRlc3QocCk/TWF0aC5tYXgoMSxNYXRoLm1pbigyMSxoKSk6TWF0aC5tYXgoMCxNYXRoLm1pbigyMCxoKSksbi50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0KyIifSxufWZ1bmN0aW9uIGUodCxlKXt2YXIgcj1uKCh0PXp2KHQpLHQudHlwZT0iZiIsdCkpLGk9MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoVHYoZSkvMykpKSxvPU1hdGgucG93KDEwLC1pKSx1PVJ2WzgraS8zXTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHIobyp0KSt1fX12YXIgcj10Lmdyb3VwaW5nJiZ0LnRob3VzYW5kcz9Odih0Lmdyb3VwaW5nLHQudGhvdXNhbmRzKTpscixpPXQuY3VycmVuY3ksbz10LmRlY2ltYWw7cmV0dXJue2Zvcm1hdDpuLGZvcm1hdFByZWZpeDplfX07aHIoe2RlY2ltYWw6Ii4iLHRob3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdfSk7dmFyIEx2PWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heCgwLC1UdihNYXRoLmFicyh0KSkpfSxVdj1mdW5jdGlvbih0LG4pe3JldHVybiBNYXRoLm1heCgwLDMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKFR2KG4pLzMpKSktVHYoTWF0aC5hYnModCkpKX0sRHY9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdD1NYXRoLmFicyh0KSxuPU1hdGguYWJzKG4pLXQsTWF0aC5tYXgoMCxUdihuKS1Udih0KSkrMX0sT3Y9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHByfTtwci5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnByLHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5zPXRoaXMudD0wfSxhZGQ6ZnVuY3Rpb24odCl7ZHIoX18sdCx0aGlzLnQpLGRyKHRoaXMsX18ucyx0aGlzLnMpLHRoaXMucz90aGlzLnQrPV9fLnQ6dGhpcy5zPV9fLnR9LHZhbHVlT2Y6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zfX07dmFyIEZ2LEl2LFl2LEJ2LGp2LEh2LFh2LFZ2LFd2LCR2LFp2LEd2LEp2LFF2LEt2LHRfLG5fLGVfLHJfLGlfLG9fLHVfLGFfLGNfLHNfLGZfLGxfLGhfLHBfLGRfLHZfLF9fPW5ldyBwcix5Xz0xZS02LGdfPTFlLTEyLG1fPU1hdGguUEkseF89bV8vMixiXz1tXy80LHdfPTIqbV8sTV89MTgwL21fLFRfPW1fLzE4MCxOXz1NYXRoLmFicyxrXz1NYXRoLmF0YW4sU189TWF0aC5hdGFuMixFXz1NYXRoLmNvcyxBXz1NYXRoLmNlaWwsQ189TWF0aC5leHAsel89TWF0aC5sb2csUF89TWF0aC5wb3csUl89TWF0aC5zaW4scV89TWF0aC5zaWdufHxmdW5jdGlvbih0KXtyZXR1cm4gdD4wPzE6dDwwPy0xOjB9LExfPU1hdGguc3FydCxVXz1NYXRoLnRhbixEXz17RmVhdHVyZTpmdW5jdGlvbih0LG4pe21yKHQuZ2VvbWV0cnksbil9LEZlYXR1cmVDb2xsZWN0aW9uOmZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlPXQuZmVhdHVyZXMscj0tMSxpPWUubGVuZ3RoOysrcjxpOyltcihlW3JdLmdlb21ldHJ5LG4pfX0sT189e1NwaGVyZTpmdW5jdGlvbih0LG4pe24uc3BoZXJlKCl9LFBvaW50OmZ1bmN0aW9uKHQsbil7dD10LmNvb3JkaW5hdGVzLG4ucG9pbnQodFswXSx0WzFdLHRbMl0pfSxNdWx0aVBvaW50OmZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlPXQuY29vcmRpbmF0ZXMscj0tMSxpPWUubGVuZ3RoOysrcjxpOyl0PWVbcl0sbi5wb2ludCh0WzBdLHRbMV0sdFsyXSl9LExpbmVTdHJpbmc6ZnVuY3Rpb24odCxuKXt4cih0LmNvb3JkaW5hdGVzLG4sMCl9LE11bHRpTGluZVN0cmluZzpmdW5jdGlvbih0LG4pe2Zvcih2YXIgZT10LmNvb3JkaW5hdGVzLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspeHIoZVtyXSxuLDApfSxQb2x5Z29uOmZ1bmN0aW9uKHQsbil7YnIodC5jb29yZGluYXRlcyxuKX0sTXVsdGlQb2x5Z29uOmZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlPXQuY29vcmRpbmF0ZXMscj0tMSxpPWUubGVuZ3RoOysrcjxpOylicihlW3JdLG4pfSxHZW9tZXRyeUNvbGxlY3Rpb246ZnVuY3Rpb24odCxuKXtmb3IodmFyIGU9dC5nZW9tZXRyaWVzLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspbXIoZVtyXSxuKX19LEZfPWZ1bmN0aW9uKHQsbil7dCYmRF8uaGFzT3duUHJvcGVydHkodC50eXBlKT9EX1t0LnR5cGVdKHQsbik6bXIodCxuKX0sSV89T3YoKSxZXz1PdigpLEJfPXtwb2ludDpncixsaW5lU3RhcnQ6Z3IsbGluZUVuZDpncixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtJXy5yZXNldCgpLEJfLmxpbmVTdGFydD13cixCXy5saW5lRW5kPU1yfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dmFyIHQ9K0lfO1lfLmFkZCh0PDA/d18rdDp0KSx0aGlzLmxpbmVTdGFydD10aGlzLmxpbmVFbmQ9dGhpcy5wb2ludD1ncn0sc3BoZXJlOmZ1bmN0aW9uKCl7WV8uYWRkKHdfKX19LGpfPWZ1bmN0aW9uKHQpe3JldHVybiBZXy5yZXNldCgpLEZfKHQsQl8pLDIqWV99LEhfPU92KCksWF89e3BvaW50OlJyLGxpbmVTdGFydDpMcixsaW5lRW5kOlVyLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe1hfLnBvaW50PURyLFhfLmxpbmVTdGFydD1PcixYXy5saW5lRW5kPUZyLEhfLnJlc2V0KCksQl8ucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtCXy5wb2x5Z29uRW5kKCksWF8ucG9pbnQ9UnIsWF8ubGluZVN0YXJ0PUxyLFhfLmxpbmVFbmQ9VXIsSV88MD8oSHY9LShWdj0xODApLFh2PS0oV3Y9OTApKTpIXz55Xz9Xdj05MDpIXzwteV8mJihYdj0tOTApLEt2WzBdPUh2LEt2WzFdPVZ2fX0sVl89ZnVuY3Rpb24odCl7dmFyIG4sZSxyLGksbyx1LGE7aWYoV3Y9VnY9LShIdj1Ydj0xLzApLFF2PVtdLEZfKHQsWF8pLGU9UXYubGVuZ3RoKXtmb3IoUXYuc29ydChZciksbj0xLHI9UXZbMF0sbz1bcl07bjxlOysrbilpPVF2W25dLEJyKHIsaVswXSl8fEJyKHIsaVsxXSk/KElyKHJbMF0saVsxXSk+SXIoclswXSxyWzFdKSYmKHJbMV09aVsxXSksSXIoaVswXSxyWzFdKT5JcihyWzBdLHJbMV0pJiYoclswXT1pWzBdKSk6by5wdXNoKHI9aSk7Zm9yKHU9LSgxLzApLGU9by5sZW5ndGgtMSxuPTAscj1vW2VdO248PWU7cj1pLCsrbilpPW9bbl0sKGE9SXIoclsxXSxpWzBdKSk+dSYmKHU9YSxIdj1pWzBdLFZ2PXJbMV0pfXJldHVybiBRdj1Ldj1udWxsLEh2PT09MS8wfHxYdj09PTEvMD9bW05hTixOYU5dLFtOYU4sTmFOXV06W1tIdixYdl0sW1Z2LFd2XV19LFdfPXtzcGhlcmU6Z3IscG9pbnQ6anIsbGluZVN0YXJ0OlhyLGxpbmVFbmQ6JHIscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7V18ubGluZVN0YXJ0PVpyLFdfLmxpbmVFbmQ9R3J9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtXXy5saW5lU3RhcnQ9WHIsV18ubGluZUVuZD0kcn19LCRfPWZ1bmN0aW9uKHQpe3RfPW5fPWVfPXJfPWlfPW9fPXVfPWFfPWNfPXNfPWZfPTAsRl8odCxXXyk7dmFyIG49Y18sZT1zXyxyPWZfLGk9bipuK2UqZStyKnI7cmV0dXJuIGk8Z18mJihuPW9fLGU9dV8scj1hXyxuXzx5XyYmKG49ZV8sZT1yXyxyPWlfKSxpPW4qbitlKmUrcipyLGk8Z18pP1tOYU4sTmFOXTpbU18oZSxuKSpNXyxfcihyL0xfKGkpKSpNX119LFpfPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0sR189ZnVuY3Rpb24odCxuKXtmdW5jdGlvbiBlKGUscil7cmV0dXJuIGU9dChlLHIpLG4oZVswXSxlWzFdKX1yZXR1cm4gdC5pbnZlcnQmJm4uaW52ZXJ0JiYoZS5pbnZlcnQ9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gZT1uLmludmVydChlLHIpLGUmJnQuaW52ZXJ0KGVbMF0sZVsxXSl9KSxlfTtLci5pbnZlcnQ9S3I7dmFyIEpfLFFfLEtfLHR5LG55LGV5LHJ5LGl5LG95LHV5LGF5LGN5PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4obil7cmV0dXJuIG49dChuWzBdKlRfLG5bMV0qVF8pLG5bMF0qPU1fLG5bMV0qPU1fLG59cmV0dXJuIHQ9dGkodFswXSpUXyx0WzFdKlRfLHQubGVuZ3RoPjI/dFsyXSpUXzowKSxuLmludmVydD1mdW5jdGlvbihuKXtyZXR1cm4gbj10LmludmVydChuWzBdKlRfLG5bMV0qVF8pLG5bMF0qPU1fLG5bMV0qPU1fLG59LG59LHN5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LG4pe2UucHVzaCh0PXIodCxuKSksdFswXSo9TV8sdFsxXSo9TV99ZnVuY3Rpb24gbigpe3ZhciB0PWkuYXBwbHkodGhpcyxhcmd1bWVudHMpLG49by5hcHBseSh0aGlzLGFyZ3VtZW50cykqVF8sYz11LmFwcGx5KHRoaXMsYXJndW1lbnRzKSpUXztyZXR1cm4gZT1bXSxyPXRpKC10WzBdKlRfLC10WzFdKlRfLDApLmludmVydCxpaShhLG4sYywxKSx0PXt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbZV19LGU9cj1udWxsLHR9dmFyIGUscixpPVpfKFswLDBdKSxvPVpfKDkwKSx1PVpfKDYpLGE9e3BvaW50OnR9O3JldHVybiBuLmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlpfKFsrdFswXSwrdFsxXV0pLG4pOml9LG4ucmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6Wl8oK3QpLG4pOm99LG4ucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6Wl8oK3QpLG4pOnV9LG59LGZ5PWZ1bmN0aW9uKCl7dmFyIHQsbj1bXTtyZXR1cm57cG9pbnQ6ZnVuY3Rpb24obixlKXt0LnB1c2goW24sZV0pfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtuLnB1c2godD1bXSl9LGxpbmVFbmQ6Z3IscmVqb2luOmZ1bmN0aW9uKCl7bi5sZW5ndGg+MSYmbi5wdXNoKG4ucG9wKCkuY29uY2F0KG4uc2hpZnQoKSkpfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgZT1uO3JldHVybiBuPVtdLHQ9bnVsbCxlfX19LGx5PWZ1bmN0aW9uKHQsbixlLHIsaSxvKXt2YXIgdSxhPXRbMF0sYz10WzFdLHM9blswXSxmPW5bMV0sbD0wLGg9MSxwPXMtYSxkPWYtYztpZih1PWUtYSxwfHwhKHU+MCkpe2lmKHUvPXAscDwwKXtpZih1PGwpcmV0dXJuO3U8aCYmKGg9dSl9ZWxzZSBpZihwPjApe2lmKHU+aClyZXR1cm47dT5sJiYobD11KX1pZih1PWktYSxwfHwhKHU8MCkpe2lmKHUvPXAscDwwKXtpZih1PmgpcmV0dXJuO3U+bCYmKGw9dSl9ZWxzZSBpZihwPjApe2lmKHU8bClyZXR1cm47dTxoJiYoaD11KX1pZih1PXItYyxkfHwhKHU+MCkpe2lmKHUvPWQsZDwwKXtpZih1PGwpcmV0dXJuO3U8aCYmKGg9dSl9ZWxzZSBpZihkPjApe2lmKHU+aClyZXR1cm47dT5sJiYobD11KX1pZih1PW8tYyxkfHwhKHU8MCkpe2lmKHUvPWQsZDwwKXtpZih1PmgpcmV0dXJuO3U+bCYmKGw9dSl9ZWxzZSBpZihkPjApe2lmKHU8bClyZXR1cm47dTxoJiYoaD11KX1yZXR1cm4gbD4wJiYodFswXT1hK2wqcCx0WzFdPWMrbCpkKSxoPDEmJihuWzBdPWEraCpwLG5bMV09YytoKmQpLCEwfX19fX0saHk9ZnVuY3Rpb24odCxuKXtyZXR1cm4gTl8odFswXS1uWzBdKTx5XyYmTl8odFsxXS1uWzFdKTx5X30scHk9ZnVuY3Rpb24odCxuLGUscixpKXt2YXIgbyx1LGE9W10sYz1bXTtpZih0LmZvckVhY2goZnVuY3Rpb24odCl7aWYoISgobj10Lmxlbmd0aC0xKTw9MCkpe3ZhciBuLGUscj10WzBdLHU9dFtuXTtpZihoeShyLHUpKXtmb3IoaS5saW5lU3RhcnQoKSxvPTA7bzxuOysrbylpLnBvaW50KChyPXRbb10pWzBdLHJbMV0pO3JldHVybiB2b2lkIGkubGluZUVuZCgpfWEucHVzaChlPW5ldyB1aShyLHQsbnVsbCwhMCkpLGMucHVzaChlLm89bmV3IHVpKHIsbnVsbCxlLCExKSksYS5wdXNoKGU9bmV3IHVpKHUsdCxudWxsLCExKSksYy5wdXNoKGUubz1uZXcgdWkodSxudWxsLGUsITApKX19KSxhLmxlbmd0aCl7Zm9yKGMuc29ydChuKSxhaShhKSxhaShjKSxvPTAsdT1jLmxlbmd0aDtvPHU7KytvKWNbb10uZT1lPSFlO2Zvcih2YXIgcyxmLGw9YVswXTs7KXtmb3IodmFyIGg9bCxwPSEwO2gudjspaWYoKGg9aC5uKT09PWwpcmV0dXJuO3M9aC56LGkubGluZVN0YXJ0KCk7ZG97aWYoaC52PWguby52PSEwLGguZSl7aWYocClmb3Iobz0wLHU9cy5sZW5ndGg7bzx1OysrbylpLnBvaW50KChmPXNbb10pWzBdLGZbMV0pO2Vsc2UgcihoLngsaC5uLngsMSxpKTtoPWgubn1lbHNle2lmKHApZm9yKHM9aC5wLnosbz1zLmxlbmd0aC0xO28+PTA7LS1vKWkucG9pbnQoKGY9c1tvXSlbMF0sZlsxXSk7ZWxzZSByKGgueCxoLnAueCwtMSxpKTtoPWgucH1oPWgubyxzPWgueixwPSFwfXdoaWxlKCFoLnYpO2kubGluZUVuZCgpfX19LGR5PTFlOSx2eT0tZHksX3k9ZnVuY3Rpb24oKXt2YXIgdCxuLGUscj0wLGk9MCxvPTk2MCx1PTUwMDtyZXR1cm4gZT17c3RyZWFtOmZ1bmN0aW9uKGUpe3JldHVybiB0JiZuPT09ZT90OnQ9Y2kocixpLG8sdSkobj1lKX0sZXh0ZW50OmZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSthWzBdWzBdLGk9K2FbMF1bMV0sbz0rYVsxXVswXSx1PSthWzFdWzFdLHQ9bj1udWxsLGUpOltbcixpXSxbbyx1XV19fX0seXk9T3YoKSxneT17c3BoZXJlOmdyLHBvaW50OmdyLGxpbmVTdGFydDpzaSxsaW5lRW5kOmdyLHBvbHlnb25TdGFydDpncixwb2x5Z29uRW5kOmdyfSxteT1mdW5jdGlvbih0KXtyZXR1cm4geXkucmVzZXQoKSxGXyh0LGd5KSwreXl9LHh5PVtudWxsLG51bGxdLGJ5PXt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczp4eX0sd3k9ZnVuY3Rpb24odCxuKXtyZXR1cm4geHlbMF09dCx4eVsxXT1uLG15KGJ5KX0sTXk9ZnVuY3Rpb24odCxuKXt2YXIgZT10WzBdKlRfLHI9dFsxXSpUXyxpPW5bMF0qVF8sbz1uWzFdKlRfLHU9RV8ociksYT1SXyhyKSxjPUVfKG8pLHM9Ul8obyksZj11KkVfKGUpLGw9dSpSXyhlKSxoPWMqRV8oaSkscD1jKlJfKGkpLGQ9MipfcihMXyh5cihvLXIpK3UqYyp5cihpLWUpKSksdj1SXyhkKSxfPWQ/ZnVuY3Rpb24odCl7dmFyIG49Ul8odCo9ZCkvdixlPVJfKGQtdCkvdixyPWUqZituKmgsaT1lKmwrbipwLG89ZSphK24qcztyZXR1cm5bU18oaSxyKSpNXyxTXyhvLExfKHIqcitpKmkpKSpNX119OmZ1bmN0aW9uKCl7cmV0dXJuW2UqTV8scipNX119O3JldHVybiBfLmRpc3RhbmNlPWQsX30sVHk9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LE55PU92KCksa3k9T3YoKSxTeT17cG9pbnQ6Z3IsbGluZVN0YXJ0OmdyLGxpbmVFbmQ6Z3IscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7U3kubGluZVN0YXJ0PXlpLFN5LmxpbmVFbmQ9eGl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtTeS5saW5lU3RhcnQ9U3kubGluZUVuZD1TeS5wb2ludD1ncixOeS5hZGQoTl8oa3kpKSxreS5yZXNldCgpfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD1OeS8yO3JldHVybiBOeS5yZXNldCgpLHR9fSxFeT0xLzAsQXk9RXksQ3k9LUV5LHp5PUN5LFB5PXtwb2ludDpiaSxsaW5lU3RhcnQ6Z3IsbGluZUVuZDpncixwb2x5Z29uU3RhcnQ6Z3IscG9seWdvbkVuZDpncixyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD1bW0V5LEF5XSxbQ3ksenldXTtyZXR1cm4gQ3k9enk9LShBeT1FeT0xLzApLHR9fSxSeT0wLHF5PTAsTHk9MCxVeT0wLER5PTAsT3k9MCxGeT0wLEl5PTAsWXk9MCxCeT17cG9pbnQ6d2ksbGluZVN0YXJ0Ok1pLGxpbmVFbmQ6a2kscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7QnkubGluZVN0YXJ0PVNpLEJ5LmxpbmVFbmQ9RWl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtCeS5wb2ludD13aSxCeS5saW5lU3RhcnQ9TWksQnkubGluZUVuZD1raX0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9WXk/W0Z5L1l5LEl5L1l5XTpPeT9bVXkvT3ksRHkvT3ldOkx5P1tSeS9MeSxxeS9MeV06W05hTixOYU5dO3JldHVybiBSeT1xeT1MeT1VeT1EeT1PeT1GeT1JeT1ZeT0wLHR9fTt6aS5wcm90b3R5cGU9e19yYWRpdXM6NC41LHBvaW50UmFkaXVzOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9yYWRpdXM9dCx0aGlzfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpezA9PT10aGlzLl9saW5lJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX3BvaW50PU5hTn0scG9pbnQ6ZnVuY3Rpb24odCxuKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LG4pLHRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX2NvbnRleHQubGluZVRvKHQsbik7YnJlYWs7ZGVmYXVsdDp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0K3RoaXMuX3JhZGl1cyxuKSx0aGlzLl9jb250ZXh0LmFyYyh0LG4sdGhpcy5fcmFkaXVzLDAsd18pfX0scmVzdWx0OmdyfSxQaS5wcm90b3R5cGU9e19jaXJjbGU6UmkoNC41KSxwb2ludFJhZGl1czpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY2lyY2xlPVJpKHQpLHRoaXN9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7MD09PXRoaXMuX2xpbmUmJnRoaXMuX3N0cmluZy5wdXNoKCJaIiksdGhpcy5fcG9pbnQ9TmFOfSxwb2ludDpmdW5jdGlvbih0LG4pe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3N0cmluZy5wdXNoKCJNIix0LCIsIixuKSx0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9zdHJpbmcucHVzaCgiTCIsdCwiLCIsbik7YnJlYWs7ZGVmYXVsdDp0aGlzLl9zdHJpbmcucHVzaCgiTSIsdCwiLCIsbix0aGlzLl9jaXJjbGUpfX0scmVzdWx0OmZ1bmN0aW9uKCl7aWYodGhpcy5fc3RyaW5nLmxlbmd0aCl7dmFyIHQ9dGhpcy5fc3RyaW5nLmpvaW4oIiIpO3JldHVybiB0aGlzLl9zdHJpbmc9W10sdH19fTt2YXIgank9ZnVuY3Rpb24odCxuKXtmdW5jdGlvbiBlKHQpe3JldHVybiB0JiYoImZ1bmN0aW9uIj09dHlwZW9mIG8mJmkucG9pbnRSYWRpdXMoK28uYXBwbHkodGhpcyxhcmd1bWVudHMpKSxGXyh0LHIoaSkpKSxpLnJlc3VsdCgpfXZhciByLGksbz00LjU7cmV0dXJuIGUuYXJlYT1mdW5jdGlvbih0KXtyZXR1cm4gRl8odCxyKFN5KSksU3kucmVzdWx0KCl9LGUuYm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiBGXyh0LHIoUHkpKSxQeS5yZXN1bHQoKX0sZS5jZW50cm9pZD1mdW5jdGlvbih0KXtyZXR1cm4gRl8odCxyKEJ5KSksQnkucmVzdWx0KCl9LGUucHJvamVjdGlvbj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1udWxsPT1uPyh0PW51bGwsVHkpOih0PW4pLnN0cmVhbSxlKTp0fSxlLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bnVsbD09dD8obj1udWxsLG5ldyBQaSk6bmV3IHppKG49dCksImZ1bmN0aW9uIiE9dHlwZW9mIG8mJmkucG9pbnRSYWRpdXMobyksZSk6bn0sZS5wb2ludFJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OihpLnBvaW50UmFkaXVzKCt0KSwrdCksZSk6b30sZS5wcm9qZWN0aW9uKHQpLmNvbnRleHQobil9LEh5PU92KCksWHk9ZnVuY3Rpb24odCxuKXt2YXIgZT1uWzBdLHI9blsxXSxpPVtSXyhlKSwtRV8oZSksMF0sbz0wLHU9MDtIeS5yZXNldCgpO2Zvcih2YXIgYT0wLGM9dC5sZW5ndGg7YTxjOysrYSlpZihmPShzPXRbYV0pLmxlbmd0aClmb3IodmFyIHMsZixsPXNbZi0xXSxoPWxbMF0scD1sWzFdLzIrYl8sZD1SXyhwKSx2PUVfKHApLF89MDtfPGY7KytfLGg9ZyxkPXgsdj1iLGw9eSl7dmFyIHk9c1tfXSxnPXlbMF0sbT15WzFdLzIrYl8seD1SXyhtKSxiPUVfKG0pLHc9Zy1oLE09dz49MD8xOi0xLFQ9TSp3LE49VD5tXyxrPWQqeDtpZihIeS5hZGQoU18oaypNKlJfKFQpLHYqYitrKkVfKFQpKSksbys9Tj93K00qd186dyxOXmg+PWVeZz49ZSl7dmFyIFM9QXIoU3IobCksU3IoeSkpO1ByKFMpO3ZhciBFPUFyKGksUyk7UHIoRSk7dmFyIEE9KE5edz49MD8tMToxKSpfcihFWzJdKTsocj5BfHxyPT09QSYmKFNbMF18fFNbMV0pKSYmKHUrPU5edz49MD8xOi0xKX19cmV0dXJuKG88LXlffHxvPHlfJiZIeTwteV8pXjEmdX0sVnk9ZnVuY3Rpb24odCxuLGUscil7cmV0dXJuIGZ1bmN0aW9uKGksbyl7ZnVuY3Rpb24gdShuLGUpe3ZhciByPWkobixlKTt0KG49clswXSxlPXJbMV0pJiZvLnBvaW50KG4sZSl9ZnVuY3Rpb24gYSh0LG4pe3ZhciBlPWkodCxuKTtfLnBvaW50KGVbMF0sZVsxXSl9ZnVuY3Rpb24gYygpe2IucG9pbnQ9YSxfLmxpbmVTdGFydCgpfWZ1bmN0aW9uIHMoKXtiLnBvaW50PXUsXy5saW5lRW5kKCl9ZnVuY3Rpb24gZih0LG4pe3YucHVzaChbdCxuXSk7dmFyIGU9aSh0LG4pO20ucG9pbnQoZVswXSxlWzFdKX1mdW5jdGlvbiBsKCl7bS5saW5lU3RhcnQoKSx2PVtdfWZ1bmN0aW9uIGgoKXtmKHZbMF1bMF0sdlswXVsxXSksbS5saW5lRW5kKCk7dmFyIHQsbixlLHIsaT1tLmNsZWFuKCksdT1nLnJlc3VsdCgpLGE9dS5sZW5ndGg7aWYodi5wb3AoKSxwLnB1c2godiksdj1udWxsLGEpaWYoMSZpKXtpZihlPXVbMF0sKG49ZS5sZW5ndGgtMSk+MCl7Zm9yKHh8fChvLnBvbHlnb25TdGFydCgpLHg9ITApLG8ubGluZVN0YXJ0KCksdD0wO3Q8bjsrK3Qpby5wb2ludCgocj1lW3RdKVswXSxyWzFdKTtvLmxpbmVFbmQoKX19ZWxzZSBhPjEmJjImaSYmdS5wdXNoKHUucG9wKCkuY29uY2F0KHUuc2hpZnQoKSkpLGQucHVzaCh1LmZpbHRlcihxaSkpfXZhciBwLGQsdixfPW4obykseT1pLmludmVydChyWzBdLHJbMV0pLGc9ZnkoKSxtPW4oZykseD0hMSxiPXtwb2ludDp1LGxpbmVTdGFydDpjLGxpbmVFbmQ6cyxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtiLnBvaW50PWYsYi5saW5lU3RhcnQ9bCxiLmxpbmVFbmQ9aCxkPVtdLHA9W119LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtiLnBvaW50PXUsYi5saW5lU3RhcnQ9YyxiLmxpbmVFbmQ9cyxkPUtzKGQpO3ZhciB0PVh5KHAseSk7ZC5sZW5ndGg/KHh8fChvLnBvbHlnb25TdGFydCgpLHg9ITApLHB5KGQsTGksdCxlLG8pKTp0JiYoeHx8KG8ucG9seWdvblN0YXJ0KCkseD0hMCksby5saW5lU3RhcnQoKSxlKG51bGwsbnVsbCwxLG8pLG8ubGluZUVuZCgpKSx4JiYoby5wb2x5Z29uRW5kKCkseD0hMSksZD1wPW51bGx9LHNwaGVyZTpmdW5jdGlvbigpe28ucG9seWdvblN0YXJ0KCksby5saW5lU3RhcnQoKSxlKG51bGwsbnVsbCwxLG8pLG8ubGluZUVuZCgpLG8ucG9seWdvbkVuZCgpfX07cmV0dXJuIGJ9fSxXeT1WeShmdW5jdGlvbigpe3JldHVybiEwfSxVaSxPaSxbLW1fLC14X10pLCR5PWZ1bmN0aW9uKHQsbil7ZnVuY3Rpb24gZShlLHIsaSxvKXtpaShvLHQsbixpLGUscil9ZnVuY3Rpb24gcih0LG4pe3JldHVybiBFXyh0KSpFXyhuKT5hfWZ1bmN0aW9uIGkodCl7dmFyIG4sZSxpLGEsZjtyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7YT1pPSExLGY9MX0scG9pbnQ6ZnVuY3Rpb24obCxoKXt2YXIgcCxkPVtsLGhdLHY9cihsLGgpLF89Yz92PzA6dShsLGgpOnY/dShsKyhsPDA/bV86LW1fKSxoKTowO2lmKCFuJiYoYT1pPXYpJiZ0LmxpbmVTdGFydCgpLHYhPT1pJiYocD1vKG4sZCksKGh5KG4scCl8fGh5KGQscCkpJiYoZFswXSs9eV8sZFsxXSs9eV8sdj1yKGRbMF0sZFsxXSkpKSx2IT09aSlmPTAsdj8odC5saW5lU3RhcnQoKSxwPW8oZCxuKSx0LnBvaW50KHBbMF0scFsxXSkpOihwPW8obixkKSx0LnBvaW50KHBbMF0scFsxXSksdC5saW5lRW5kKCkpLG49cDtlbHNlIGlmKHMmJm4mJmNedil7dmFyIHk7XyZlfHwhKHk9byhkLG4sITApKXx8KGY9MCxjPyh0LmxpbmVTdGFydCgpLHQucG9pbnQoeVswXVswXSx5WzBdWzFdKSx0LnBvaW50KHlbMV1bMF0seVsxXVsxXSksdC5saW5lRW5kKCkpOih0LnBvaW50KHlbMV1bMF0seVsxXVsxXSksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KHlbMF1bMF0seVswXVsxXSkpKX0hdnx8biYmaHkobixkKXx8dC5wb2ludChkWzBdLGRbMV0pLG49ZCxpPXYsZT1ffSxsaW5lRW5kOmZ1bmN0aW9uKCl7aSYmdC5saW5lRW5kKCksbj1udWxsfSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiBmfChhJiZpKTw8MX19fWZ1bmN0aW9uIG8odCxuLGUpe3ZhciByPVNyKHQpLGk9U3Iobiksbz1bMSwwLDBdLHU9QXIocixpKSxjPUVyKHUsdSkscz11WzBdLGY9Yy1zKnM7aWYoIWYpcmV0dXJuIWUmJnQ7dmFyIGw9YSpjL2YsaD0tYSpzL2YscD1BcihvLHUpLGQ9enIobyxsKSx2PXpyKHUsaCk7Q3IoZCx2KTt2YXIgXz1wLHk9RXIoZCxfKSxnPUVyKF8sXyksbT15KnktZyooRXIoZCxkKS0xKTtpZighKG08MCkpe3ZhciB4PUxfKG0pLGI9enIoXywoLXkteCkvZyk7aWYoQ3IoYixkKSxiPWtyKGIpLCFlKXJldHVybiBiO3ZhciB3LE09dFswXSxUPW5bMF0sTj10WzFdLGs9blsxXTtUPE0mJih3PU0sTT1ULFQ9dyk7dmFyIFM9VC1NLEU9Tl8oUy1tXyk8eV8sQT1FfHxTPHlfO2lmKCFFJiZrPE4mJih3PU4sTj1rLGs9dyksQT9FP04raz4wXmJbMV08KE5fKGJbMF0tTSk8eV8/TjprKTpOPD1iWzFdJiZiWzFdPD1rOlM+bV9eKE08PWJbMF0mJmJbMF08PVQpKXt2YXIgQz16cihfLCgteSt4KS9nKTtyZXR1cm4gQ3IoQyxkKSxbYixrcihDKV19fX1mdW5jdGlvbiB1KG4sZSl7dmFyIHI9Yz90Om1fLXQsaT0wO3JldHVybiBuPC1yP2l8PTE6bj5yJiYoaXw9MiksZTwtcj9pfD00OmU+ciYmKGl8PTgpLGl9dmFyIGE9RV8odCksYz1hPjAscz1OXyhhKT55XztyZXR1cm4gVnkocixpLGUsYz9bMCwtdF06Wy1tXyx0LW1fXSl9LFp5PWZ1bmN0aW9uKHQpe3JldHVybntzdHJlYW06RmkodCl9fTtJaS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOklpLHBvaW50OmZ1bmN0aW9uKHQsbil7dGhpcy5zdHJlYW0ucG9pbnQodCxuKX0sc3BoZXJlOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25FbmQoKX19O3ZhciBHeT0xNixKeT1FXygzMCpUXyksUXk9ZnVuY3Rpb24odCxuKXtyZXR1cm4rbj9IaSh0LG4pOmppKHQpfSxLeT1GaSh7cG9pbnQ6ZnVuY3Rpb24odCxuKXt0aGlzLnN0cmVhbS5wb2ludCh0KlRfLG4qVF8pfX0pLHRnPWZ1bmN0aW9uKCl7cmV0dXJuIFdpKFppKS5zY2FsZSgxNTUuNDI0KS5jZW50ZXIoWzAsMzMuNjQ0Ml0pfSxuZz1mdW5jdGlvbigpe3JldHVybiB0ZygpLnBhcmFsbGVscyhbMjkuNSw0NS41XSkuc2NhbGUoMTA3MCkudHJhbnNsYXRlKFs0ODAsMjUwXSkucm90YXRlKFs5NiwwXSkuY2VudGVyKFstLjYsMzguN10pfSxlZz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dmFyIG49dFswXSxlPXRbMV07cmV0dXJuIGE9bnVsbCxpLnBvaW50KG4sZSksYXx8KG8ucG9pbnQobixlKSxhKXx8KHUucG9pbnQobixlKSxhKX1mdW5jdGlvbiBuKCl7cmV0dXJuIGU9cj1udWxsLHR9dmFyIGUscixpLG8sdSxhLGM9bmcoKSxzPXRnKCkucm90YXRlKFsxNTQsMF0pLmNlbnRlcihbLTIsNTguNV0pLnBhcmFsbGVscyhbNTUsNjVdKSxmPXRnKCkucm90YXRlKFsxNTcsMF0pLmNlbnRlcihbLTMsMTkuOV0pLnBhcmFsbGVscyhbOCwxOF0pLGw9e3BvaW50OmZ1bmN0aW9uKHQsbil7YT1bdCxuXX19O3JldHVybiB0LmludmVydD1mdW5jdGlvbih0KXt2YXIgbj1jLnNjYWxlKCksZT1jLnRyYW5zbGF0ZSgpLHI9KHRbMF0tZVswXSkvbixpPSh0WzFdLWVbMV0pL247cmV0dXJuKGk+PS4xMiYmaTwuMjM0JiZyPj0tLjQyNSYmcjwtLjIxND9zOmk+PS4xNjYmJmk8LjIzNCYmcj49LS4yMTQmJnI8LS4xMTU/ZjpjKS5pbnZlcnQodCl9LHQuc3RyZWFtPWZ1bmN0aW9uKHQpe3JldHVybiBlJiZyPT09dD9lOmU9R2koW2Muc3RyZWFtKHI9dCkscy5zdHJlYW0odCksZi5zdHJlYW0odCldKX0sdC5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGMucHJlY2lzaW9uKHQpLHMucHJlY2lzaW9uKHQpLGYucHJlY2lzaW9uKHQpLG4oKSk6Yy5wcmVjaXNpb24oKX0sdC5zY2FsZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYy5zY2FsZShuKSxzLnNjYWxlKC4zNSpuKSxmLnNjYWxlKG4pLHQudHJhbnNsYXRlKGMudHJhbnNsYXRlKCkpKTpjLnNjYWxlKCl9LHQudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBjLnRyYW5zbGF0ZSgpO3ZhciBlPWMuc2NhbGUoKSxyPSt0WzBdLGE9K3RbMV07cmV0dXJuIGk9Yy50cmFuc2xhdGUodCkuY2xpcEV4dGVudChbW3ItLjQ1NSplLGEtLjIzOCplXSxbcisuNDU1KmUsYSsuMjM4KmVdXSkuc3RyZWFtKGwpLG89cy50cmFuc2xhdGUoW3ItLjMwNyplLGErLjIwMSplXSkuY2xpcEV4dGVudChbW3ItLjQyNSplK3lfLGErLjEyKmUreV9dLFtyLS4yMTQqZS15XyxhKy4yMzQqZS15X11dKS5zdHJlYW0obCksdT1mLnRyYW5zbGF0ZShbci0uMjA1KmUsYSsuMjEyKmVdKS5jbGlwRXh0ZW50KFtbci0uMjE0KmUreV8sYSsuMTY2KmUreV9dLFtyLS4xMTUqZS15XyxhKy4yMzQqZS15X11dKS5zdHJlYW0obCksbigpfSx0LmZpdEV4dGVudD1mdW5jdGlvbihuLGUpe3JldHVybiBZaSh0LG4sZSl9LHQuZml0U2l6ZT1mdW5jdGlvbihuLGUpe3JldHVybiBCaSh0LG4sZSl9LHQuc2NhbGUoMTA3MCl9LHJnPUppKGZ1bmN0aW9uKHQpe3JldHVybiBMXygyLygxK3QpKX0pO3JnLmludmVydD1RaShmdW5jdGlvbih0KXtyZXR1cm4gMipfcih0LzIpfSk7dmFyIGlnPWZ1bmN0aW9uKCl7cmV0dXJuIFhpKHJnKS5zY2FsZSgxMjQuNzUpLmNsaXBBbmdsZSgxNzkuOTk5KX0sb2c9SmkoZnVuY3Rpb24odCl7cmV0dXJuKHQ9dnIodCkpJiZ0L1JfKHQpfSk7b2cuaW52ZXJ0PVFpKGZ1bmN0aW9uKHQpe3JldHVybiB0fSk7dmFyIHVnPWZ1bmN0aW9uKCl7cmV0dXJuIFhpKG9nKS5zY2FsZSg3OS40MTg4KS5jbGlwQW5nbGUoMTc5Ljk5OSl9O0tpLmludmVydD1mdW5jdGlvbih0LG4pe3JldHVyblt0LDIqa18oQ18obikpLXhfXX07dmFyIGFnPWZ1bmN0aW9uKCl7cmV0dXJuIHRvKEtpKS5zY2FsZSg5NjEvd18pfSxjZz1mdW5jdGlvbigpe3JldHVybiBXaShlbykuc2NhbGUoMTA5LjUpLnBhcmFsbGVscyhbMzAsMzBdKX07cm8uaW52ZXJ0PXJvO3ZhciBzZz1mdW5jdGlvbigpe3JldHVybiBYaShybykuc2NhbGUoMTUyLjYzKX0sZmc9ZnVuY3Rpb24oKXtyZXR1cm4gV2koaW8pLnNjYWxlKDEzMS4xNTQpLmNlbnRlcihbMCwxMy45Mzg5XSl9O29vLmludmVydD1RaShrXyk7dmFyIGxnPWZ1bmN0aW9uKCl7cmV0dXJuIFhpKG9vKS5zY2FsZSgxNDQuMDQ5KS5jbGlwQW5nbGUoNjApfSxoZz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gaT1vPW51bGwsdX12YXIgbixlLHIsaSxvLHUsYT0xLGM9MCxzPTAsZj0xLGw9MSxoPVR5LHA9bnVsbCxkPVR5O3JldHVybiB1PXtzdHJlYW06ZnVuY3Rpb24odCl7cmV0dXJuIGkmJm89PT10P2k6aT1oKGQobz10KSl9LGNsaXBFeHRlbnQ6ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9bnVsbD09aT8ocD1uPWU9cj1udWxsLFR5KTpjaShwPStpWzBdWzBdLG49K2lbMF1bMV0sZT0raVsxXVswXSxyPStpWzFdWzFdKSx0KCkpOm51bGw9PXA/bnVsbDpbW3Asbl0sW2Uscl1dfSxzY2FsZTpmdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD11bygoYT0rbikqZixhKmwsYyxzKSx0KCkpOmF9LHRyYW5zbGF0ZTpmdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD11byhhKmYsYSpsLGM9K25bMF0scz0rblsxXSksdCgpKTpbYyxzXX0scmVmbGVjdFg6ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9dW8oYSooZj1uPy0xOjEpLGEqbCxjLHMpLHQoKSk6ZjwwfSxyZWZsZWN0WTpmdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD11byhhKmYsYSoobD1uPy0xOjEpLGMscyksdCgpKTpsPDB9LGZpdEV4dGVudDpmdW5jdGlvbih0LG4pe3JldHVybiBZaSh1LHQsbil9LGZpdFNpemU6ZnVuY3Rpb24odCxuKXtyZXR1cm4gQmkodSx0LG4pfX19O2FvLmludmVydD1RaShfcik7dmFyIHBnPWZ1bmN0aW9uKCl7cmV0dXJuIFhpKGFvKS5zY2FsZSgyNDkuNSkuY2xpcEFuZ2xlKDkwK3lfKX07Y28uaW52ZXJ0PVFpKGZ1bmN0aW9uKHQpe3JldHVybiAyKmtfKHQpfSk7dmFyIGRnPWZ1bmN0aW9uKCl7cmV0dXJuIFhpKGNvKS5zY2FsZSgyNTApLmNsaXBBbmdsZSgxNDIpfTtzby5pbnZlcnQ9ZnVuY3Rpb24odCxuKXtyZXR1cm5bLW4sMiprXyhDXyh0KSkteF9dfTt2YXIgdmc9ZnVuY3Rpb24oKXt2YXIgdD10byhzbyksbj10LmNlbnRlcixlPXQucm90YXRlO3JldHVybiB0LmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKFstdFsxXSx0WzBdXSk6KHQ9bigpLFt0WzFdLC10WzBdXSl9LHQucm90YXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2UoW3RbMF0sdFsxXSx0Lmxlbmd0aD4yP3RbMl0rOTA6OTBdKToodD1lKCksW3RbMF0sdFsxXSx0WzJdLTkwXSl9LGUoWzAsMCw5MF0pLnNjYWxlKDE1OS4xNTUpfSxfZz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dmFyIG8sdT0wO3QuZWFjaEFmdGVyKGZ1bmN0aW9uKHQpe3ZhciBlPXQuY2hpbGRyZW47ZT8odC54PWxvKGUpLHQueT1wbyhlKSk6KHQueD1vP3UrPW4odCxvKTowLHQueT0wLG89dCl9KTt2YXIgYT1fbyh0KSxjPXlvKHQpLHM9YS54LW4oYSxjKS8yLGY9Yy54K24oYyxhKS8yO3JldHVybiB0LmVhY2hBZnRlcihpP2Z1bmN0aW9uKG4pe24ueD0obi54LXQueCkqZSxuLnk9KHQueS1uLnkpKnJ9OmZ1bmN0aW9uKG4pe24ueD0obi54LXMpLyhmLXMpKmUsbi55PSgxLSh0Lnk/bi55L3QueToxKSkqcn0pfXZhciBuPWZvLGU9MSxyPTEsaT0hMTtyZXR1cm4gdC5zZXBhcmF0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWUsdCk6bn0sdC5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSExLGU9K25bMF0scj0rblsxXSx0KTppP251bGw6W2Uscl19LHQubm9kZVNpemU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ITAsZT0rblswXSxyPStuWzFdLHQpOmk/W2Uscl06bnVsbH0sdH0seWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoQWZ0ZXIoZ28pfSxnZz1mdW5jdGlvbih0KXt2YXIgbixlLHIsaSxvPXRoaXMsdT1bb107ZG8gZm9yKG49dS5yZXZlcnNlKCksdT1bXTtvPW4ucG9wKCk7KWlmKHQobyksZT1vLmNoaWxkcmVuKWZvcihyPTAsaT1lLmxlbmd0aDtyPGk7KytyKXUucHVzaChlW3JdKTt3aGlsZSh1Lmxlbmd0aCk7cmV0dXJuIHRoaXN9LG1nPWZ1bmN0aW9uKHQpe2Zvcih2YXIgbixlLHI9dGhpcyxpPVtyXTtyPWkucG9wKCk7KWlmKHQociksbj1yLmNoaWxkcmVuKWZvcihlPW4ubGVuZ3RoLTE7ZT49MDstLWUpaS5wdXNoKG5bZV0pO3JldHVybiB0aGlzfSx4Zz1mdW5jdGlvbih0KXtmb3IodmFyIG4sZSxyLGk9dGhpcyxvPVtpXSx1PVtdO2k9by5wb3AoKTspaWYodS5wdXNoKGkpLG49aS5jaGlsZHJlbilmb3IoZT0wLHI9bi5sZW5ndGg7ZTxyOysrZSlvLnB1c2gobltlXSk7Zm9yKDtpPXUucG9wKCk7KXQoaSk7cmV0dXJuIHRoaXN9LGJnPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2hBZnRlcihmdW5jdGlvbihuKXtmb3IodmFyIGU9K3Qobi5kYXRhKXx8MCxyPW4uY2hpbGRyZW4saT1yJiZyLmxlbmd0aDstLWk+PTA7KWUrPXJbaV0udmFsdWU7bi52YWx1ZT1lfSl9LHdnPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24obil7bi5jaGlsZHJlbiYmbi5jaGlsZHJlbi5zb3J0KHQpfSl9LE1nPWZ1bmN0aW9uKHQpe2Zvcih2YXIgbj10aGlzLGU9bW8obix0KSxyPVtuXTtuIT09ZTspbj1uLnBhcmVudCxyLnB1c2gobik7Zm9yKHZhciBpPXIubGVuZ3RoO3QhPT1lOylyLnNwbGljZShpLDAsdCksdD10LnBhcmVudDtyZXR1cm4gcn0sVGc9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxuPVt0XTt0PXQucGFyZW50OyluLnB1c2godCk7cmV0dXJuIG59LE5nPWZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihuKXt0LnB1c2gobil9KSx0fSxrZz1mdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24obil7bi5jaGlsZHJlbnx8dC5wdXNoKG4pfSksdH0sU2c9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLG49W107cmV0dXJuIHQuZWFjaChmdW5jdGlvbihlKXtlIT09dCYmbi5wdXNoKHtzb3VyY2U6ZS5wYXJlbnQsdGFyZ2V0OmV9KX0pLG59O05vLnByb3RvdHlwZT14by5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOk5vLGNvdW50OnlnLGVhY2g6Z2csZWFjaEFmdGVyOnhnLGVhY2hCZWZvcmU6bWcsc3VtOmJnLHNvcnQ6d2cscGF0aDpNZyxhbmNlc3RvcnM6VGcsZGVzY2VuZGFudHM6TmcsbGVhdmVzOmtnLGxpbmtzOlNnLGNvcHk6Ym99O3ZhciBFZz1mdW5jdGlvbih0KXtmb3IodmFyIG4sZT0odD10LnNsaWNlKCkpLmxlbmd0aCxyPW51bGwsaT1yO2U7KXt2YXIgbz1uZXcga28odFtlLTFdKTtpPWk/aS5uZXh0PW86cj1vLHRbbl09dFstLWVdfXJldHVybntoZWFkOnIsdGFpbDppfX0sQWc9ZnVuY3Rpb24odCl7cmV0dXJuIEVvKEVnKHQpLFtdKX0sQ2c9ZnVuY3Rpb24odCl7cmV0dXJuIERvKHQpLHR9LHpnPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0sUGc9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3JldHVybiB0Lng9ZS8yLHQueT1yLzIsbj90LmVhY2hCZWZvcmUoQm8obikpLmVhY2hBZnRlcihqbyhpLC41KSkuZWFjaEJlZm9yZShIbygxKSk6dC5lYWNoQmVmb3JlKEJvKFlvKSkuZWFjaEFmdGVyKGpvKElvLDEpKS5lYWNoQWZ0ZXIoam8oaSx0LnIvTWF0aC5taW4oZSxyKSkpLmVhY2hCZWZvcmUoSG8oTWF0aC5taW4oZSxyKS8oMip0LnIpKSksdH12YXIgbj1udWxsLGU9MSxyPTEsaT1JbztyZXR1cm4gdC5yYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49T28oZSksdCk6bn0sdC5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPStuWzBdLHI9K25bMV0sdCk6W2Uscl19LHQucGFkZGluZz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOnpnKCtuKSx0KTppfSx0fSxSZz1mdW5jdGlvbih0KXt0LngwPU1hdGgucm91bmQodC54MCksdC55MD1NYXRoLnJvdW5kKHQueTApLHQueDE9TWF0aC5yb3VuZCh0LngxKSx0LnkxPU1hdGgucm91bmQodC55MSl9LHFnPWZ1bmN0aW9uKHQsbixlLHIsaSl7Zm9yKHZhciBvLHU9dC5jaGlsZHJlbixhPS0xLGM9dS5sZW5ndGgscz10LnZhbHVlJiYoci1uKS90LnZhbHVlOysrYTxjOylvPXVbYV0sby55MD1lLG8ueTE9aSxvLngwPW4sby54MT1uKz1vLnZhbHVlKnN9LExnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2YXIgdT10LmhlaWdodCsxO3JldHVybiB0LngwPXQueTA9aSx0LngxPWUsdC55MT1yL3UsdC5lYWNoQmVmb3JlKG4ocix1KSksbyYmdC5lYWNoQmVmb3JlKFJnKSx0fWZ1bmN0aW9uIG4odCxuKXtyZXR1cm4gZnVuY3Rpb24oZSl7ZS5jaGlsZHJlbiYmcWcoZSxlLngwLHQqKGUuZGVwdGgrMSkvbixlLngxLHQqKGUuZGVwdGgrMikvbik7dmFyIHI9ZS54MCxvPWUueTAsdT1lLngxLWksYT1lLnkxLWk7dTxyJiYocj11PShyK3UpLzIpLGE8byYmKG89YT0obythKS8yKSxlLngwPXIsZS55MD1vLGUueDE9dSxlLnkxPWF9fXZhciBlPTEscj0xLGk9MCxvPSExO3JldHVybiB0LnJvdW5kPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSEhbix0KTpvfSx0LnNpemU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K25bMF0scj0rblsxXSx0KTpbZSxyXX0sdC5wYWRkaW5nPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPStuLHQpOml9LHR9LFVnPSIkIixEZz17ZGVwdGg6LTF9LE9nPXt9LEZnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2YXIgcixpLG8sdSxhLGMscyxmPXQubGVuZ3RoLGw9bmV3IEFycmF5KGYpLGg9e307Zm9yKGk9MDtpPGY7KytpKXI9dFtpXSxhPWxbaV09bmV3IE5vKHIpLG51bGwhPShjPW4ocixpLHQpKSYmKGMrPSIiKSYmKHM9VWcrKGEuaWQ9YyksaFtzXT1zIGluIGg/T2c6YSk7Zm9yKGk9MDtpPGY7KytpKWlmKGE9bFtpXSxjPWUodFtpXSxpLHQpLG51bGwhPWMmJihjKz0iIikpe2lmKHU9aFtVZytjXSwhdSl0aHJvdyBuZXcgRXJyb3IoIm1pc3Npbmc6ICIrYyk7aWYodT09PU9nKXRocm93IG5ldyBFcnJvcigiYW1iaWd1b3VzOiAiK2MpO3UuY2hpbGRyZW4/dS5jaGlsZHJlbi5wdXNoKGEpOnUuY2hpbGRyZW49W2FdLGEucGFyZW50PXV9ZWxzZXtpZihvKXRocm93IG5ldyBFcnJvcigibXVsdGlwbGUgcm9vdHMiKTtvPWF9aWYoIW8pdGhyb3cgbmV3IEVycm9yKCJubyByb290Iik7aWYoby5wYXJlbnQ9RGcsby5lYWNoQmVmb3JlKGZ1bmN0aW9uKHQpe3QuZGVwdGg9dC5wYXJlbnQuZGVwdGgrMSwtLWZ9KS5lYWNoQmVmb3JlKFRvKSxvLnBhcmVudD1udWxsLGY+MCl0aHJvdyBuZXcgRXJyb3IoImN5Y2xlIik7cmV0dXJuIG99dmFyIG49WG8sZT1WbztyZXR1cm4gdC5pZD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1GbyhlKSx0KTpufSx0LnBhcmVudElkPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPUZvKG4pLHQpOmV9LHR9O0tvLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE5vLnByb3RvdHlwZSk7dmFyIElnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2YXIgcj10dSh0KTtpZihyLmVhY2hBZnRlcihuKSxyLnBhcmVudC5tPS1yLnosci5lYWNoQmVmb3JlKGUpLGMpdC5lYWNoQmVmb3JlKGkpO2Vsc2V7dmFyIHM9dCxmPXQsbD10O3QuZWFjaEJlZm9yZShmdW5jdGlvbih0KXt0Lng8cy54JiYocz10KSx0Lng+Zi54JiYoZj10KSx0LmRlcHRoPmwuZGVwdGgmJihsPXQpfSk7dmFyIGg9cz09PWY/MTpvKHMsZikvMixwPWgtcy54LGQ9dS8oZi54K2grcCksdj1hLyhsLmRlcHRofHwxKTt0LmVhY2hCZWZvcmUoZnVuY3Rpb24odCl7dC54PSh0LngrcCkqZCx0Lnk9dC5kZXB0aCp2fSl9cmV0dXJuIHR9ZnVuY3Rpb24gbih0KXt2YXIgbj10LmNoaWxkcmVuLGU9dC5wYXJlbnQuY2hpbGRyZW4saT10Lmk/ZVt0LmktMV06bnVsbDtpZihuKXtKbyh0KTt2YXIgdT0oblswXS56K25bbi5sZW5ndGgtMV0ueikvMjtpPyh0Lno9aS56K28odC5fLGkuXyksdC5tPXQuei11KTp0Lno9dX1lbHNlIGkmJih0Lno9aS56K28odC5fLGkuXykpO3QucGFyZW50LkE9cih0LGksdC5wYXJlbnQuQXx8ZVswXSl9ZnVuY3Rpb24gZSh0KXt0Ll8ueD10LnordC5wYXJlbnQubSx0Lm0rPXQucGFyZW50Lm19ZnVuY3Rpb24gcih0LG4sZSl7aWYobil7Zm9yKHZhciByLGk9dCx1PXQsYT1uLGM9aS5wYXJlbnQuY2hpbGRyZW5bMF0scz1pLm0sZj11Lm0sbD1hLm0saD1jLm07YT1abyhhKSxpPSRvKGkpLGEmJmk7KWM9JG8oYyksdT1abyh1KSx1LmE9dCxyPWEueitsLWkuei1zK28oYS5fLGkuXykscj4wJiYoR28oUW8oYSx0LGUpLHQscikscys9cixmKz1yKSxsKz1hLm0scys9aS5tLGgrPWMubSxmKz11Lm07YSYmIVpvKHUpJiYodS50PWEsdS5tKz1sLWYpLGkmJiEkbyhjKSYmKGMudD1pLGMubSs9cy1oLGU9dCl9cmV0dXJuIGV9ZnVuY3Rpb24gaSh0KXt0LngqPXUsdC55PXQuZGVwdGgqYX12YXIgbz1Xbyx1PTEsYT0xLGM9bnVsbDtyZXR1cm4gdC5zZXBhcmF0aW9uPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPW4sdCk6b30sdC5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPSExLHU9K25bMF0sYT0rblsxXSx0KTpjP251bGw6W3UsYV19LHQubm9kZVNpemU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ITAsdT0rblswXSxhPStuWzFdLHQpOmM/W3UsYV06bnVsbH0sdH0sWWc9ZnVuY3Rpb24odCxuLGUscixpKXtmb3IodmFyIG8sdT10LmNoaWxkcmVuLGE9LTEsYz11Lmxlbmd0aCxzPXQudmFsdWUmJihpLWUpL3QudmFsdWU7KythPGM7KW89dVthXSxvLngwPW4sby54MT1yLG8ueTA9ZSxvLnkxPWUrPW8udmFsdWUqc30sQmc9KDErTWF0aC5zcXJ0KDUpKS8yLGpnPWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0LGUscixpLG8pe251KG4sdCxlLHIsaSxvKX1yZXR1cm4gZS5yYXRpbz1mdW5jdGlvbihuKXtyZXR1cm4gdCgobj0rbik+MT9uOjEpfSxlfShCZyksSGc9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3JldHVybiB0LngwPXQueTA9MCx0LngxPWksdC55MT1vLHQuZWFjaEJlZm9yZShuKSx1PVswXSxyJiZ0LmVhY2hCZWZvcmUoUmcpLHR9ZnVuY3Rpb24gbih0KXt2YXIgbj11W3QuZGVwdGhdLHI9dC54MCtuLGk9dC55MCtuLG89dC54MS1uLGg9dC55MS1uO288ciYmKHI9bz0ocitvKS8yKSxoPGkmJihpPWg9KGkraCkvMiksdC54MD1yLHQueTA9aSx0LngxPW8sdC55MT1oLHQuY2hpbGRyZW4mJihuPXVbdC5kZXB0aCsxXT1hKHQpLzIscis9bCh0KS1uLGkrPWModCktbixvLT1zKHQpLW4saC09Zih0KS1uLG88ciYmKHI9bz0ocitvKS8yKSxoPGkmJihpPWg9KGkraCkvMiksZSh0LHIsaSxvLGgpKX12YXIgZT1qZyxyPSExLGk9MSxvPTEsdT1bMF0sYT1JbyxjPUlvLHM9SW8sZj1JbyxsPUlvO3JldHVybiB0LnJvdW5kPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSEhbix0KTpyfSx0LnNpemU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K25bMF0sbz0rblsxXSx0KTpbaSxvXX0sdC50aWxlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPUZvKG4pLHQpOmV9LHQucGFkZGluZz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90LnBhZGRpbmdJbm5lcihuKS5wYWRkaW5nT3V0ZXIobik6dC5wYWRkaW5nSW5uZXIoKX0sdC5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjp6ZygrbiksdCk6YX0sdC5wYWRkaW5nT3V0ZXI9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dC5wYWRkaW5nVG9wKG4pLnBhZGRpbmdSaWdodChuKS5wYWRkaW5nQm90dG9tKG4pLnBhZGRpbmdMZWZ0KG4pOnQucGFkZGluZ1RvcCgpfSx0LnBhZGRpbmdUb3A9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjp6ZygrbiksdCk6Y30sdC5wYWRkaW5nUmlnaHQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjp6ZygrbiksdCk6c30sdC5wYWRkaW5nQm90dG9tPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246emcoK24pLHQpOmZ9LHQucGFkZGluZ0xlZnQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjp6ZygrbiksdCk6bH0sdH0sWGc9ZnVuY3Rpb24odCxuLGUscixpKXtmdW5jdGlvbiBvKHQsbixlLHIsaSx1LGEpe2lmKHQ+PW4tMSl7dmFyIHM9Y1t0XTtyZXR1cm4gcy54MD1yLHMueTA9aSxzLngxPXUscy55MT1hLHZvaWQgMH1mb3IodmFyIGw9Zlt0XSxoPWUvMitsLHA9dCsxLGQ9bi0xO3A8ZDspe3ZhciB2PXArZD4+PjE7Zlt2XTxoP3A9disxOmQ9dn12YXIgXz1mW3BdLWwseT1lLV87aWYoYS1pPnUtcil7dmFyIGc9KGkqeSthKl8pL2U7byh0LHAsXyxyLGksdSxnKSxvKHAsbix5LHIsZyx1LGEpfWVsc2V7dmFyIG09KHIqeSt1Kl8pL2U7byh0LHAsXyxyLGksbSxhKSxvKHAsbix5LG0saSx1LGEpfX12YXIgdSxhLGM9dC5jaGlsZHJlbixzPWMubGVuZ3RoLGY9bmV3IEFycmF5KHMrMSk7Zm9yKGZbMF09YT11PTA7dTxzOysrdSlmW3UrMV09YSs9Y1t1XS52YWx1ZTtvKDAscyx0LnZhbHVlLG4sZSxyLGkpfSxWZz1mdW5jdGlvbih0LG4sZSxyLGkpeygxJnQuZGVwdGg/WWc6cWcpKHQsbixlLHIsaSl9LFdnPWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0LGUscixpLG8pe2lmKCh1PXQuX3NxdWFyaWZ5KSYmdS5yYXRpbz09PW4pZm9yKHZhciB1LGEsYyxzLGYsbD0tMSxoPXUubGVuZ3RoLHA9dC52YWx1ZTsrK2w8aDspe2ZvcihhPXVbbF0sYz1hLmNoaWxkcmVuLHM9YS52YWx1ZT0wLGY9Yy5sZW5ndGg7czxmOysrcylhLnZhbHVlKz1jW3NdLnZhbHVlO2EuZGljZT9xZyhhLGUscixpLHIrPShvLXIpKmEudmFsdWUvcCk6WWcoYSxlLHIsZSs9KGktZSkqYS52YWx1ZS9wLG8pLHAtPWEudmFsdWV9ZWxzZSB0Ll9zcXVhcmlmeT11PW51KG4sdCxlLHIsaSxvKSx1LnJhdGlvPW59cmV0dXJuIGUucmF0aW89ZnVuY3Rpb24obil7cmV0dXJuIHQoKG49K24pPjE/bjoxKX0sZX0oQmcpLCRnPWZ1bmN0aW9uKHQpe2Zvcih2YXIgbixlPS0xLHI9dC5sZW5ndGgsaT10W3ItMV0sbz0wOysrZTxyOyluPWksaT10W2VdLG8rPW5bMV0qaVswXS1uWzBdKmlbMV07cmV0dXJuIG8vMn0sWmc9ZnVuY3Rpb24odCl7Zm9yKHZhciBuLGUscj0tMSxpPXQubGVuZ3RoLG89MCx1PTAsYT10W2ktMV0sYz0wOysrcjxpOyluPWEsYT10W3JdLGMrPWU9blswXSphWzFdLWFbMF0qblsxXSxvKz0oblswXSthWzBdKSplLHUrPShuWzFdK2FbMV0pKmU7cmV0dXJuIGMqPTMsW28vYyx1L2NdfSxHZz1mdW5jdGlvbih0LG4sZSl7cmV0dXJuKG5bMF0tdFswXSkqKGVbMV0tdFsxXSktKG5bMV0tdFsxXSkqKGVbMF0tdFswXSl9LEpnPWZ1bmN0aW9uKHQpe2lmKChlPXQubGVuZ3RoKTwzKXJldHVybiBudWxsO3ZhciBuLGUscj1uZXcgQXJyYXkoZSksaT1uZXcgQXJyYXkoZSk7Zm9yKG49MDtuPGU7KytuKXJbbl09Wyt0W25dWzBdLCt0W25dWzFdLG5dO2ZvcihyLnNvcnQoZXUpLG49MDtuPGU7KytuKWlbbl09W3Jbbl1bMF0sLXJbbl1bMV1dO3ZhciBvPXJ1KHIpLHU9cnUoaSksYT11WzBdPT09b1swXSxjPXVbdS5sZW5ndGgtMV09PT1vW28ubGVuZ3RoLTFdLHM9W107Zm9yKG49by5sZW5ndGgtMTtuPj0wOy0tbilzLnB1c2godFtyW29bbl1dWzJdXSk7Zm9yKG49K2E7bjx1Lmxlbmd0aC1jOysrbilzLnB1c2godFtyW3Vbbl1dWzJdXSk7cmV0dXJuIHN9LFFnPWZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlLHIsaT10Lmxlbmd0aCxvPXRbaS0xXSx1PW5bMF0sYT1uWzFdLGM9b1swXSxzPW9bMV0sZj0hMSxsPTA7bDxpOysrbClvPXRbbF0sZT1vWzBdLHI9b1sxXSxyPmEhPXM+YSYmdTwoYy1lKSooYS1yKS8ocy1yKStlJiYoZj0hZiksYz1lLHM9cjtyZXR1cm4gZn0sS2c9ZnVuY3Rpb24odCl7Zm9yKHZhciBuLGUscj0tMSxpPXQubGVuZ3RoLG89dFtpLTFdLHU9b1swXSxhPW9bMV0sYz0wOysrcjxpOyluPXUsZT1hLG89dFtyXSx1PW9bMF0sYT1vWzFdLG4tPXUsZS09YSxjKz1NYXRoLnNxcnQobipuK2UqZSk7cmV0dXJuIGN9LHRtPVtdLnNsaWNlLG5tPXt9O2l1LnByb3RvdHlwZT1mdS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOml1LGRlZmVyOmZ1bmN0aW9uKHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0fHx0aGlzLl9jYWxsKXRocm93IG5ldyBFcnJvcjtpZihudWxsIT10aGlzLl9lcnJvcilyZXR1cm4gdGhpczt2YXIgbj10bS5jYWxsKGFyZ3VtZW50cywxKTtyZXR1cm4gbi5wdXNoKHQpLCsrdGhpcy5fd2FpdGluZyx0aGlzLl90YXNrcy5wdXNoKG4pLG91KHRoaXMpLHRoaXN9LGFib3J0OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PXRoaXMuX2Vycm9yJiZjdSh0aGlzLG5ldyBFcnJvcigiYWJvcnQiKSksdGhpc30sYXdhaXQ6ZnVuY3Rpb24odCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHR8fHRoaXMuX2NhbGwpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLl9jYWxsPWZ1bmN0aW9uKG4sZSl7dC5hcHBseShudWxsLFtuXS5jb25jYXQoZSkpfSxzdSh0aGlzKSx0aGlzfSxhd2FpdEFsbDpmdW5jdGlvbih0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdHx8dGhpcy5fY2FsbCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMuX2NhbGw9dCxzdSh0aGlzKSx0aGlzfX07dmFyIGVtPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHQ9bnVsbD09dD8wOit0LG49bnVsbD09bj8xOituLDE9PT1hcmd1bWVudHMubGVuZ3RoPyhuPXQsdD0wKTpuLT10LGZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgucmFuZG9tKCkqbit0fX0scm09ZnVuY3Rpb24odCxuKXt2YXIgZSxyO3JldHVybiB0PW51bGw9PXQ/MDordCxuPW51bGw9PW4/MTorbixmdW5jdGlvbigpe3ZhciBpO2lmKG51bGwhPWUpaT1lLGU9bnVsbDtlbHNlIGRvIGU9MipNYXRoLnJhbmRvbSgpLTEsaT0yKk1hdGgucmFuZG9tKCktMSxyPWUqZStpKmk7d2hpbGUoIXJ8fHI+MSk7cmV0dXJuIHQrbippKk1hdGguc3FydCgtMipNYXRoLmxvZyhyKS9yKX19LGltPWZ1bmN0aW9uKCl7dmFyIHQ9cm0uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBNYXRoLmV4cCh0KCkpfX0sb209ZnVuY3Rpb24odCl7DQpyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIG49MCxlPTA7ZTx0OysrZSluKz1NYXRoLnJhbmRvbSgpO3JldHVybiBufX0sdW09ZnVuY3Rpb24odCl7dmFyIG49b20odCk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG4oKS90fX0sYW09ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuLU1hdGgubG9nKDEtTWF0aC5yYW5kb20oKSkvdH19LGNtPWZ1bmN0aW9uKHQsbil7ZnVuY3Rpb24gZSh0KXt2YXIgbixlPXMuc3RhdHVzO2lmKCFlJiZodShzKXx8ZT49MjAwJiZlPDMwMHx8MzA0PT09ZSl7aWYobyl0cnl7bj1vLmNhbGwocixzKX1jYXRjaCh0KXtyZXR1cm4gdm9pZCBhLmNhbGwoImVycm9yIixyLHQpfWVsc2Ugbj1zO2EuY2FsbCgibG9hZCIscixuKX1lbHNlIGEuY2FsbCgiZXJyb3IiLHIsdCl9dmFyIHIsaSxvLHUsYT1wKCJiZWZvcmVzZW5kIiwicHJvZ3Jlc3MiLCJsb2FkIiwiZXJyb3IiKSxjPUllKCkscz1uZXcgWE1MSHR0cFJlcXVlc3QsZj1udWxsLGw9bnVsbCxoPTA7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBYRG9tYWluUmVxdWVzdHx8IndpdGhDcmVkZW50aWFscyJpbiBzfHwhL14oaHR0cChzKT86KT9cL1wvLy50ZXN0KHQpfHwocz1uZXcgWERvbWFpblJlcXVlc3QpLCJvbmxvYWQiaW4gcz9zLm9ubG9hZD1zLm9uZXJyb3I9cy5vbnRpbWVvdXQ9ZTpzLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbih0KXtzLnJlYWR5U3RhdGU+MyYmZSh0KX0scy5vbnByb2dyZXNzPWZ1bmN0aW9uKHQpe2EuY2FsbCgicHJvZ3Jlc3MiLHIsdCl9LHI9e2hlYWRlcjpmdW5jdGlvbih0LG4pe3JldHVybiB0PSh0KyIiKS50b0xvd2VyQ2FzZSgpLGFyZ3VtZW50cy5sZW5ndGg8Mj9jLmdldCh0KToobnVsbD09bj9jLnJlbW92ZSh0KTpjLnNldCh0LG4rIiIpLHIpfSxtaW1lVHlwZTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1udWxsPT10P251bGw6dCsiIixyKTppfSxyZXNwb25zZVR5cGU6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dCxyKTp1fSx0aW1lb3V0OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPSt0LHIpOmh9LHVzZXI6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MT9mOihmPW51bGw9PXQ/bnVsbDp0KyIiLHIpfSxwYXNzd29yZDpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwxP2w6KGw9bnVsbD09dD9udWxsOnQrIiIscil9LHJlc3BvbnNlOmZ1bmN0aW9uKHQpe3JldHVybiBvPXQscn0sZ2V0OmZ1bmN0aW9uKHQsbil7cmV0dXJuIHIuc2VuZCgiR0VUIix0LG4pfSxwb3N0OmZ1bmN0aW9uKHQsbil7cmV0dXJuIHIuc2VuZCgiUE9TVCIsdCxuKX0sc2VuZDpmdW5jdGlvbihuLGUsbyl7cmV0dXJuIHMub3BlbihuLHQsITAsZixsKSxudWxsPT1pfHxjLmhhcygiYWNjZXB0Iil8fGMuc2V0KCJhY2NlcHQiLGkrIiwqLyoiKSxzLnNldFJlcXVlc3RIZWFkZXImJmMuZWFjaChmdW5jdGlvbih0LG4pe3Muc2V0UmVxdWVzdEhlYWRlcihuLHQpfSksbnVsbCE9aSYmcy5vdmVycmlkZU1pbWVUeXBlJiZzLm92ZXJyaWRlTWltZVR5cGUoaSksbnVsbCE9dSYmKHMucmVzcG9uc2VUeXBlPXUpLGg+MCYmKHMudGltZW91dD1oKSxudWxsPT1vJiYiZnVuY3Rpb24iPT10eXBlb2YgZSYmKG89ZSxlPW51bGwpLG51bGwhPW8mJjE9PT1vLmxlbmd0aCYmKG89bHUobykpLG51bGwhPW8mJnIub24oImVycm9yIixvKS5vbigibG9hZCIsZnVuY3Rpb24odCl7byhudWxsLHQpfSksYS5jYWxsKCJiZWZvcmVzZW5kIixyLHMpLHMuc2VuZChudWxsPT1lP251bGw6ZSkscn0sYWJvcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5hYm9ydCgpLHJ9LG9uOmZ1bmN0aW9uKCl7dmFyIHQ9YS5vbi5hcHBseShhLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT1hP3I6dH19LG51bGwhPW4pe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIituKTtyZXR1cm4gci5nZXQobil9cmV0dXJuIHJ9LHNtPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGZ1bmN0aW9uKGUscil7dmFyIGk9Y20oZSkubWltZVR5cGUodCkucmVzcG9uc2Uobik7aWYobnVsbCE9cil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHIpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK3IpO3JldHVybiBpLmdldChyKX1yZXR1cm4gaX19LGZtPXNtKCJ0ZXh0L2h0bWwiLGZ1bmN0aW9uKHQpe3JldHVybiBkb2N1bWVudC5jcmVhdGVSYW5nZSgpLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCh0LnJlc3BvbnNlVGV4dCl9KSxsbT1zbSgiYXBwbGljYXRpb24vanNvbiIsZnVuY3Rpb24odCl7cmV0dXJuIEpTT04ucGFyc2UodC5yZXNwb25zZVRleHQpfSksaG09c20oInRleHQvcGxhaW4iLGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlc3BvbnNlVGV4dH0pLHBtPXNtKCJhcHBsaWNhdGlvbi94bWwiLGZ1bmN0aW9uKHQpe3ZhciBuPXQucmVzcG9uc2VYTUw7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJwYXJzZSBlcnJvciIpO3JldHVybiBufSksZG09ZnVuY3Rpb24odCxuKXtyZXR1cm4gZnVuY3Rpb24oZSxyLGkpe2FyZ3VtZW50cy5sZW5ndGg8MyYmKGk9cixyPW51bGwpO3ZhciBvPWNtKGUpLm1pbWVUeXBlKHQpO3JldHVybiBvLnJvdz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9vLnJlc3BvbnNlKHB1KG4scj10KSk6cn0sby5yb3cociksaT9vLmdldChpKTpvfX0sdm09ZG0oInRleHQvY3N2IixCZCksX209ZG0oInRleHQvdGFiLXNlcGFyYXRlZC12YWx1ZXMiLFdkKSx5bT1BcnJheS5wcm90b3R5cGUsZ209eW0ubWFwLG1tPXltLnNsaWNlLHhtPXtuYW1lOiJpbXBsaWNpdCJ9LGJtPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0sd209ZnVuY3Rpb24odCl7cmV0dXJuK3R9LE1tPVswLDFdLFRtPWZ1bmN0aW9uKG4scixpKXt2YXIgbyx1PW5bMF0sYT1uW24ubGVuZ3RoLTFdLGM9ZSh1LGEsbnVsbD09cj8xMDpyKTtzd2l0Y2goaT16dihudWxsPT1pPyIsZiI6aSksaS50eXBlKXtjYXNlInMiOnZhciBzPU1hdGgubWF4KE1hdGguYWJzKHUpLE1hdGguYWJzKGEpKTtyZXR1cm4gbnVsbCE9aS5wcmVjaXNpb258fGlzTmFOKG89VXYoYyxzKSl8fChpLnByZWNpc2lvbj1vKSx0LmZvcm1hdFByZWZpeChpLHMpO2Nhc2UiIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJwIjpjYXNlInIiOm51bGwhPWkucHJlY2lzaW9ufHxpc05hTihvPUR2KGMsTWF0aC5tYXgoTWF0aC5hYnModSksTWF0aC5hYnMoYSkpKSl8fChpLnByZWNpc2lvbj1vLSgiZSI9PT1pLnR5cGUpKTticmVhaztjYXNlImYiOmNhc2UiJSI6bnVsbCE9aS5wcmVjaXNpb258fGlzTmFOKG89THYoYykpfHwoaS5wcmVjaXNpb249by0yKigiJSI9PT1pLnR5cGUpKX1yZXR1cm4gdC5mb3JtYXQoaSl9LE5tPWZ1bmN0aW9uKHQsbil7dD10LnNsaWNlKCk7dmFyIGUscj0wLGk9dC5sZW5ndGgtMSxvPXRbcl0sdT10W2ldO3JldHVybiB1PG8mJihlPXIscj1pLGk9ZSxlPW8sbz11LHU9ZSksdFtyXT1uLmZsb29yKG8pLHRbaV09bi5jZWlsKHUpLHR9LGttPW5ldyBEYXRlLFNtPW5ldyBEYXRlLEVtPVl1KGZ1bmN0aW9uKCl7fSxmdW5jdGlvbih0LG4pe3Quc2V0VGltZSgrdCtuKX0sZnVuY3Rpb24odCxuKXtyZXR1cm4gbi10fSk7RW0uZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9TWF0aC5mbG9vcih0KSxpc0Zpbml0ZSh0KSYmdD4wP3Q+MT9ZdShmdW5jdGlvbihuKXtuLnNldFRpbWUoTWF0aC5mbG9vcihuL3QpKnQpfSxmdW5jdGlvbihuLGUpe24uc2V0VGltZSgrbitlKnQpfSxmdW5jdGlvbihuLGUpe3JldHVybihlLW4pL3R9KTpFbTpudWxsfTt2YXIgQW09RW0ucmFuZ2UsQ209MWUzLHptPTZlNCxQbT0zNmU1LFJtPTg2NGU1LHFtPTYwNDhlNSxMbT1ZdShmdW5jdGlvbih0KXt0LnNldFRpbWUoTWF0aC5mbG9vcih0L0NtKSpDbSl9LGZ1bmN0aW9uKHQsbil7dC5zZXRUaW1lKCt0K24qQ20pfSxmdW5jdGlvbih0LG4pe3JldHVybihuLXQpL0NtfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENTZWNvbmRzKCl9KSxVbT1MbS5yYW5nZSxEbT1ZdShmdW5jdGlvbih0KXt0LnNldFRpbWUoTWF0aC5mbG9vcih0L3ptKSp6bSl9LGZ1bmN0aW9uKHQsbil7dC5zZXRUaW1lKCt0K24qem0pfSxmdW5jdGlvbih0LG4pe3JldHVybihuLXQpL3ptfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNaW51dGVzKCl9KSxPbT1EbS5yYW5nZSxGbT1ZdShmdW5jdGlvbih0KXt2YXIgbj10LmdldFRpbWV6b25lT2Zmc2V0KCkqem0lUG07bjwwJiYobis9UG0pLHQuc2V0VGltZShNYXRoLmZsb29yKCgrdC1uKS9QbSkqUG0rbil9LGZ1bmN0aW9uKHQsbil7dC5zZXRUaW1lKCt0K24qUG0pfSxmdW5jdGlvbih0LG4pe3JldHVybihuLXQpL1BtfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRIb3VycygpfSksSW09Rm0ucmFuZ2UsWW09WXUoZnVuY3Rpb24odCl7dC5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxuKXt0LnNldERhdGUodC5nZXREYXRlKCkrbil9LGZ1bmN0aW9uKHQsbil7cmV0dXJuKG4tdC0obi5nZXRUaW1lem9uZU9mZnNldCgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkqem0pL1JtfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXRlKCktMX0pLEJtPVltLnJhbmdlLGptPUJ1KDApLEhtPUJ1KDEpLFhtPUJ1KDIpLFZtPUJ1KDMpLFdtPUJ1KDQpLCRtPUJ1KDUpLFptPUJ1KDYpLEdtPWptLnJhbmdlLEptPUhtLnJhbmdlLFFtPVhtLnJhbmdlLEttPVZtLnJhbmdlLHR4PVdtLnJhbmdlLG54PSRtLnJhbmdlLGV4PVptLnJhbmdlLHJ4PVl1KGZ1bmN0aW9uKHQpe3Quc2V0RGF0ZSgxKSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LG4pe3Quc2V0TW9udGgodC5nZXRNb250aCgpK24pfSxmdW5jdGlvbih0LG4pe3JldHVybiBuLmdldE1vbnRoKCktdC5nZXRNb250aCgpKzEyKihuLmdldEZ1bGxZZWFyKCktdC5nZXRGdWxsWWVhcigpKX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TW9udGgoKX0pLGl4PXJ4LnJhbmdlLG94PVl1KGZ1bmN0aW9uKHQpe3Quc2V0TW9udGgoMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LG4pe3Quc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpK24pfSxmdW5jdGlvbih0LG4pe3JldHVybiBuLmdldEZ1bGxZZWFyKCktdC5nZXRGdWxsWWVhcigpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRGdWxsWWVhcigpfSk7b3guZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIGlzRmluaXRlKHQ9TWF0aC5mbG9vcih0KSkmJnQ+MD9ZdShmdW5jdGlvbihuKXtuLnNldEZ1bGxZZWFyKE1hdGguZmxvb3Iobi5nZXRGdWxsWWVhcigpL3QpKnQpLG4uc2V0TW9udGgoMCwxKSxuLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihuLGUpe24uc2V0RnVsbFllYXIobi5nZXRGdWxsWWVhcigpK2UqdCl9KTpudWxsfTt2YXIgdXg9b3gucmFuZ2UsYXg9WXUoZnVuY3Rpb24odCl7dC5zZXRVVENTZWNvbmRzKDAsMCl9LGZ1bmN0aW9uKHQsbil7dC5zZXRUaW1lKCt0K24qem0pfSxmdW5jdGlvbih0LG4pe3JldHVybihuLXQpL3ptfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENNaW51dGVzKCl9KSxjeD1heC5yYW5nZSxzeD1ZdShmdW5jdGlvbih0KXt0LnNldFVUQ01pbnV0ZXMoMCwwLDApfSxmdW5jdGlvbih0LG4pe3Quc2V0VGltZSgrdCtuKlBtKX0sZnVuY3Rpb24odCxuKXtyZXR1cm4obi10KS9QbX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDSG91cnMoKX0pLGZ4PXN4LnJhbmdlLGx4PVl1KGZ1bmN0aW9uKHQpe3Quc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsbil7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK24pfSxmdW5jdGlvbih0LG4pe3JldHVybihuLXQpL1JtfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENEYXRlKCktMX0pLGh4PWx4LnJhbmdlLHB4PWp1KDApLGR4PWp1KDEpLHZ4PWp1KDIpLF94PWp1KDMpLHl4PWp1KDQpLGd4PWp1KDUpLG14PWp1KDYpLHh4PXB4LnJhbmdlLGJ4PWR4LnJhbmdlLHd4PXZ4LnJhbmdlLE14PV94LnJhbmdlLFR4PXl4LnJhbmdlLE54PWd4LnJhbmdlLGt4PW14LnJhbmdlLFN4PVl1KGZ1bmN0aW9uKHQpe3Quc2V0VVRDRGF0ZSgxKSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LG4pe3Quc2V0VVRDTW9udGgodC5nZXRVVENNb250aCgpK24pfSxmdW5jdGlvbih0LG4pe3JldHVybiBuLmdldFVUQ01vbnRoKCktdC5nZXRVVENNb250aCgpKzEyKihuLmdldFVUQ0Z1bGxZZWFyKCktdC5nZXRVVENGdWxsWWVhcigpKX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDTW9udGgoKX0pLEV4PVN4LnJhbmdlLEF4PVl1KGZ1bmN0aW9uKHQpe3Quc2V0VVRDTW9udGgoMCwxKSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LG4pe3Quc2V0VVRDRnVsbFllYXIodC5nZXRVVENGdWxsWWVhcigpK24pfSxmdW5jdGlvbih0LG4pe3JldHVybiBuLmdldFVUQ0Z1bGxZZWFyKCktdC5nZXRVVENGdWxsWWVhcigpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENGdWxsWWVhcigpfSk7QXguZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIGlzRmluaXRlKHQ9TWF0aC5mbG9vcih0KSkmJnQ+MD9ZdShmdW5jdGlvbihuKXtuLnNldFVUQ0Z1bGxZZWFyKE1hdGguZmxvb3Iobi5nZXRVVENGdWxsWWVhcigpL3QpKnQpLG4uc2V0VVRDTW9udGgoMCwxKSxuLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihuLGUpe24uc2V0VVRDRnVsbFllYXIobi5nZXRVVENGdWxsWWVhcigpK2UqdCl9KTpudWxsfTt2YXIgQ3gseng9QXgucmFuZ2UsUHg9eyItIjoiIixfOiIgIiwwOiIwIn0sUng9L15ccypcZCsvLHF4PS9eJS8sTHg9L1tcXFxeXCRcKlwrXD9cfFxbXF1cKFwpXC5ce1x9XS9nO1lhKHtkYXRlVGltZToiJXgsICVYIixkYXRlOiIlLW0vJS1kLyVZIix0aW1lOiIlLUk6JU06JVMgJXAiLHBlcmlvZHM6WyJBTSIsIlBNIl0sZGF5czpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sc2hvcnREYXlzOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sbW9udGhzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxzaG9ydE1vbnRoczpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdfSk7dmFyIFV4PSIlWS0lbS0lZFQlSDolTTolUy4lTFoiLER4PURhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nP0JhOnQudXRjRm9ybWF0KFV4KSxPeD0rbmV3IERhdGUoIjIwMDAtMDEtMDFUMDA6MDA6MDAuMDAwWiIpP2phOnQudXRjUGFyc2UoVXgpLEZ4PTFlMyxJeD02MCpGeCxZeD02MCpJeCxCeD0yNCpZeCxqeD03KkJ4LEh4PTMwKkJ4LFh4PTM2NSpCeCxWeD1mdW5jdGlvbigpe3JldHVybiBWYShveCxyeCxqbSxZbSxGbSxEbSxMbSxFbSx0LnRpbWVGb3JtYXQpLmRvbWFpbihbbmV3IERhdGUoMmUzLDAsMSksbmV3IERhdGUoMmUzLDAsMildKX0sV3g9ZnVuY3Rpb24oKXtyZXR1cm4gVmEoQXgsU3gscHgsbHgsc3gsYXgsTG0sRW0sdC51dGNGb3JtYXQpLmRvbWFpbihbRGF0ZS5VVEMoMmUzLDAsMSksRGF0ZS5VVEMoMmUzLDAsMildKX0sJHg9ZnVuY3Rpb24odCl7cmV0dXJuIHQubWF0Y2goLy57Nn0vZykubWFwKGZ1bmN0aW9uKHQpe3JldHVybiIjIit0fSl9LFp4PSR4KCIxZjc3YjRmZjdmMGUyY2EwMmNkNjI3Mjg5NDY3YmQ4YzU2NGJlMzc3YzI3ZjdmN2ZiY2JkMjIxN2JlY2YiKSxHeD0keCgiMzkzYjc5NTI1NGEzNmI2ZWNmOWM5ZWRlNjM3OTM5OGNhMjUyYjVjZjZiY2VkYjljOGM2ZDMxYmQ5ZTM5ZTdiYTUyZTdjYjk0ODQzYzM5YWQ0OTRhZDY2MTZiZTc5NjljN2I0MTczYTU1MTk0Y2U2ZGJkZGU5ZWQ2IiksSng9JHgoIjMxODJiZDZiYWVkNjllY2FlMWM2ZGJlZmU2NTUwZGZkOGQzY2ZkYWU2YmZkZDBhMjMxYTM1NDc0YzQ3NmExZDk5YmM3ZTljMDc1NmJiMTllOWFjOGJjYmRkY2RhZGFlYjYzNjM2Mzk2OTY5NmJkYmRiZGQ5ZDlkOSIpLFF4PSR4KCIxZjc3YjRhZWM3ZThmZjdmMGVmZmJiNzgyY2EwMmM5OGRmOGFkNjI3MjhmZjk4OTY5NDY3YmRjNWIwZDU4YzU2NGJjNDljOTRlMzc3YzJmN2I2ZDI3ZjdmN2ZjN2M3YzdiY2JkMjJkYmRiOGQxN2JlY2Y5ZWRhZTUiKSxLeD1VaChYdCgzMDAsLjUsMCksWHQoLTI0MCwuNSwxKSksdGI9VWgoWHQoLTEwMCwuNzUsLjM1KSxYdCg4MCwxLjUsLjgpKSxuYj1VaChYdCgyNjAsLjc1LC4zNSksWHQoODAsMS41LC44KSksZWI9WHQoKSxyYj1mdW5jdGlvbih0KXsodDwwfHx0PjEpJiYodC09TWF0aC5mbG9vcih0KSk7dmFyIG49TWF0aC5hYnModC0uNSk7cmV0dXJuIGViLmg9MzYwKnQtMTAwLGViLnM9MS41LTEuNSpuLGViLmw9LjgtLjkqbixlYisiIn0saWI9V2EoJHgoIjQ0MDE1NDQ0MDI1NjQ1MDQ1NzQ1MDU1OTQ2MDc1YTQ2MDg1YzQ2MGE1ZDQ2MGI1ZTQ3MGQ2MDQ3MGU2MTQ3MTA2MzQ3MTE2NDQ3MTM2NTQ4MTQ2NzQ4MTY2ODQ4MTc2OTQ4MTg2YTQ4MWE2YzQ4MWI2ZDQ4MWM2ZTQ4MWQ2ZjQ4MWY3MDQ4MjA3MTQ4MjE3MzQ4MjM3NDQ4MjQ3NTQ4MjU3NjQ4MjY3NzQ4Mjg3ODQ4Mjk3OTQ3MmE3YTQ3MmM3YTQ3MmQ3YjQ3MmU3YzQ3MmY3ZDQ2MzA3ZTQ2MzI3ZTQ2MzM3ZjQ2MzQ4MDQ1MzU4MTQ1Mzc4MTQ1Mzg4MjQ0Mzk4MzQ0M2E4MzQ0M2I4NDQzM2Q4NDQzM2U4NTQyM2Y4NTQyNDA4NjQyNDE4NjQxNDI4NzQxNDQ4NzQwNDU4ODQwNDY4ODNmNDc4ODNmNDg4OTNlNDk4OTNlNGE4OTNlNGM4YTNkNGQ4YTNkNGU4YTNjNGY4YTNjNTA4YjNiNTE4YjNiNTI4YjNhNTM4YjNhNTQ4YzM5NTU4YzM5NTY4YzM4NTg4YzM4NTk4YzM3NWE4YzM3NWI4ZDM2NWM4ZDM2NWQ4ZDM1NWU4ZDM1NWY4ZDM0NjA4ZDM0NjE4ZDMzNjI4ZDMzNjM4ZDMyNjQ4ZTMyNjU4ZTMxNjY4ZTMxNjc4ZTMxNjg4ZTMwNjk4ZTMwNmE4ZTJmNmI4ZTJmNmM4ZTJlNmQ4ZTJlNmU4ZTJlNmY4ZTJkNzA4ZTJkNzE4ZTJjNzE4ZTJjNzI4ZTJjNzM4ZTJiNzQ4ZTJiNzU4ZTJhNzY4ZTJhNzc4ZTJhNzg4ZTI5Nzk4ZTI5N2E4ZTI5N2I4ZTI4N2M4ZTI4N2Q4ZTI3N2U4ZTI3N2Y4ZTI3ODA4ZTI2ODE4ZTI2ODI4ZTI2ODI4ZTI1ODM4ZTI1ODQ4ZTI1ODU4ZTI0ODY4ZTI0ODc4ZTIzODg4ZTIzODk4ZTIzOGE4ZDIyOGI4ZDIyOGM4ZDIyOGQ4ZDIxOGU4ZDIxOGY4ZDIxOTA4ZDIxOTE4YzIwOTI4YzIwOTI4YzIwOTM4YzFmOTQ4YzFmOTU4YjFmOTY4YjFmOTc4YjFmOTg4YjFmOTk4YTFmOWE4YTFlOWI4YTFlOWM4OTFlOWQ4OTFmOWU4OTFmOWY4ODFmYTA4ODFmYTE4ODFmYTE4NzFmYTI4NzIwYTM4NjIwYTQ4NjIxYTU4NTIxYTY4NTIyYTc4NTIyYTg4NDIzYTk4MzI0YWE4MzI1YWI4MjI1YWM4MjI2YWQ4MTI3YWQ4MTI4YWU4MDI5YWY3ZjJhYjA3ZjJjYjE3ZTJkYjI3ZDJlYjM3YzJmYjQ3YzMxYjU3YjMyYjY3YTM0YjY3OTM1Yjc3OTM3Yjg3ODM4Yjk3NzNhYmE3NjNiYmI3NTNkYmM3NDNmYmM3MzQwYmQ3MjQyYmU3MTQ0YmY3MDQ2YzA2ZjQ4YzE2ZTRhYzE2ZDRjYzI2YzRlYzM2YjUwYzQ2YTUyYzU2OTU0YzU2ODU2YzY2NzU4Yzc2NTVhYzg2NDVjYzg2MzVlYzk2MjYwY2E2MDYzY2I1ZjY1Y2I1ZTY3Y2M1YzY5Y2Q1YjZjY2Q1YTZlY2U1ODcwY2Y1NzczZDA1Njc1ZDA1NDc3ZDE1MzdhZDE1MTdjZDI1MDdmZDM0ZTgxZDM0ZDg0ZDQ0Yjg2ZDU0OTg5ZDU0ODhiZDY0NjhlZDY0NTkwZDc0MzkzZDc0MTk1ZDg0MDk4ZDgzZTliZDkzYzlkZDkzYmEwZGEzOWEyZGEzN2E1ZGIzNmE4ZGIzNGFhZGMzMmFkZGMzMGIwZGQyZmIyZGQyZGI1ZGUyYmI4ZGUyOWJhZGUyOGJkZGYyNmMwZGYyNWMyZGYyM2M1ZTAyMWM4ZTAyMGNhZTExZmNkZTExZGQwZTExY2QyZTIxYmQ1ZTIxYWQ4ZTIxOWRhZTMxOWRkZTMxOGRmZTMxOGUyZTQxOGU1ZTQxOWU3ZTQxOWVhZTUxYWVjZTUxYmVmZTUxY2YxZTUxZGY0ZTYxZWY2ZTYyMGY4ZTYyMWZiZTcyM2ZkZTcyNSIpKSxvYj1XYSgkeCgiMDAwMDA0MDEwMDA1MDEwMTA2MDEwMTA4MDIwMTA5MDIwMjBiMDIwMjBkMDMwMzBmMDMwMzEyMDQwNDE0MDUwNDE2MDYwNTE4MDYwNTFhMDcwNjFjMDgwNzFlMDkwNzIwMGEwODIyMGIwOTI0MGMwOTI2MGQwYTI5MGUwYjJiMTAwYjJkMTEwYzJmMTIwZDMxMTMwZDM0MTQwZTM2MTUwZTM4MTYwZjNiMTgwZjNkMTkxMDNmMWExMDQyMWMxMDQ0MWQxMTQ3MWUxMTQ5MjAxMTRiMjExMTRlMjIxMTUwMjQxMjUzMjUxMjU1MjcxMjU4MjkxMTVhMmExMTVjMmMxMTVmMmQxMTYxMmYxMTYzMzExMTY1MzMxMDY3MzQxMDY5MzYxMDZiMzgxMDZjMzkwZjZlM2IwZjcwM2QwZjcxM2YwZjcyNDAwZjc0NDIwZjc1NDQwZjc2NDUxMDc3NDcxMDc4NDkxMDc4NGExMDc5NGMxMTdhNGUxMTdiNGYxMjdiNTExMjdjNTIxMzdjNTQxMzdkNTYxNDdkNTcxNTdlNTkxNTdlNWExNjdlNWMxNjdmNWQxNzdmNWYxODdmNjAxODgwNjIxOTgwNjQxYTgwNjUxYTgwNjcxYjgwNjgxYzgxNmExYzgxNmIxZDgxNmQxZDgxNmUxZTgxNzAxZjgxNzIxZjgxNzMyMDgxNzUyMTgxNzYyMTgxNzgyMjgxNzkyMjgyN2IyMzgyN2MyMzgyN2UyNDgyODAyNTgyODEyNTgxODMyNjgxODQyNjgxODYyNzgxODgyNzgxODkyODgxOGIyOTgxOGMyOTgxOGUyYTgxOTAyYTgxOTEyYjgxOTMyYjgwOTQyYzgwOTYyYzgwOTgyZDgwOTkyZDgwOWIyZTdmOWMyZTdmOWUyZjdmYTAyZjdmYTEzMDdlYTMzMDdlYTUzMTdlYTYzMTdkYTgzMjdkYWEzMzdkYWIzMzdjYWQzNDdjYWUzNDdiYjAzNTdiYjIzNTdiYjMzNjdhYjUzNjdhYjczNzc5YjgzNzc5YmEzODc4YmMzOTc4YmQzOTc3YmYzYTc3YzAzYTc2YzIzYjc1YzQzYzc1YzUzYzc0YzczZDczYzgzZTczY2EzZTcyY2MzZjcxY2Q0MDcxY2Y0MDcwZDA0MTZmZDI0MjZmZDM0MzZlZDU0NDZkZDY0NTZjZDg0NTZjZDk0NjZiZGI0NzZhZGM0ODY5ZGU0OTY4ZGY0YTY4ZTA0YzY3ZTI0ZDY2ZTM0ZTY1ZTQ0ZjY0ZTU1MDY0ZTc1MjYzZTg1MzYyZTk1NDYyZWE1NjYxZWI1NzYwZWM1ODYwZWQ1YTVmZWU1YjVlZWY1ZDVlZjA1ZjVlZjE2MDVkZjI2MjVkZjI2NDVjZjM2NTVjZjQ2NzVjZjQ2OTVjZjU2YjVjZjY2YzVjZjY2ZTVjZjc3MDVjZjc3MjVjZjg3NDVjZjg3NjVjZjk3ODVkZjk3OTVkZjk3YjVkZmE3ZDVlZmE3ZjVlZmE4MTVmZmI4MzVmZmI4NTYwZmI4NzYxZmM4OTYxZmM4YTYyZmM4YzYzZmM4ZTY0ZmM5MDY1ZmQ5MjY2ZmQ5NDY3ZmQ5NjY4ZmQ5ODY5ZmQ5YTZhZmQ5YjZiZmU5ZDZjZmU5ZjZkZmVhMTZlZmVhMzZmZmVhNTcxZmVhNzcyZmVhOTczZmVhYTc0ZmVhYzc2ZmVhZTc3ZmViMDc4ZmViMjdhZmViNDdiZmViNjdjZmViNzdlZmViOTdmZmViYjgxZmViZDgyZmViZjg0ZmVjMTg1ZmVjMjg3ZmVjNDg4ZmVjNjhhZmVjODhjZmVjYThkZmVjYzhmZmVjZDkwZmVjZjkyZmVkMTk0ZmVkMzk1ZmVkNTk3ZmVkNzk5ZmVkODlhZmRkYTljZmRkYzllZmRkZWEwZmRlMGExZmRlMmEzZmRlM2E1ZmRlNWE3ZmRlN2E5ZmRlOWFhZmRlYmFjZmNlY2FlZmNlZWIwZmNmMGIyZmNmMmI0ZmNmNGI2ZmNmNmI4ZmNmN2I5ZmNmOWJiZmNmYmJkZmNmZGJmIikpLHViPVdhKCR4KCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMGEwMjAyMGMwMjAyMGUwMzAyMTAwNDAzMTIwNDAzMTQwNTA0MTcwNjA0MTkwNzA1MWIwODA1MWQwOTA2MWYwYTA3MjIwYjA3MjQwYzA4MjYwZDA4MjkwZTA5MmIxMDA5MmQxMTBhMzAxMjBhMzIxNDBiMzQxNTBiMzcxNjBiMzkxODBjM2MxOTBjM2UxYjBjNDExYzBjNDMxZTBjNDUxZjBjNDgyMTBjNGEyMzBjNGMyNDBjNGYyNjBjNTEyODBiNTMyOTBiNTUyYjBiNTcyZDBiNTkyZjBhNWIzMTBhNWMzMjBhNWUzNDBhNWYzNjA5NjEzODA5NjIzOTA5NjMzYjA5NjQzZDA5NjUzZTA5NjY0MDBhNjc0MjBhNjg0NDBhNjg0NTBhNjk0NzBiNmE0OTBiNmE0YTBjNmI0YzBjNmI0ZDBkNmM0ZjBkNmM1MTBlNmM1MjBlNmQ1NDBmNmQ1NTBmNmQ1NzEwNmU1OTEwNmU1YTExNmU1YzEyNmU1ZDEyNmU1ZjEzNmU2MTEzNmU2MjE0NmU2NDE1NmU2NTE1NmU2NzE2NmU2OTE2NmU2YTE3NmU2YzE4NmU2ZDE4NmU2ZjE5NmU3MTE5NmU3MjFhNmU3NDFhNmU3NTFiNmU3NzFjNmQ3ODFjNmQ3YTFkNmQ3YzFkNmQ3ZDFlNmQ3ZjFlNmM4MDFmNmM4MjIwNmM4NDIwNmI4NTIxNmI4NzIxNmI4ODIyNmE4YTIyNmE4YzIzNjk4ZDIzNjk4ZjI0Njk5MDI1Njg5MjI1Njg5MzI2Njc5NTI2Njc5NzI3NjY5ODI3NjY5YTI4NjU5YjI5NjQ5ZDI5NjQ5ZjJhNjNhMDJhNjNhMjJiNjJhMzJjNjFhNTJjNjBhNjJkNjBhODJlNWZhOTJlNWVhYjJmNWVhZDMwNWRhZTMwNWNiMDMxNWJiMTMyNWFiMzMyNWFiNDMzNTliNjM0NThiNzM1NTdiOTM1NTZiYTM2NTViYzM3NTRiZDM4NTNiZjM5NTJjMDNhNTFjMTNhNTBjMzNiNGZjNDNjNGVjNjNkNGRjNzNlNGNjODNmNGJjYTQwNGFjYjQxNDljYzQyNDhjZTQzNDdjZjQ0NDZkMDQ1NDVkMjQ2NDRkMzQ3NDNkNDQ4NDJkNTRhNDFkNzRiM2ZkODRjM2VkOTRkM2RkYTRlM2NkYjUwM2JkZDUxM2FkZTUyMzhkZjUzMzdlMDU1MzZlMTU2MzVlMjU3MzRlMzU5MzNlNDVhMzFlNTVjMzBlNjVkMmZlNzVlMmVlODYwMmRlOTYxMmJlYTYzMmFlYjY0MjllYjY2MjhlYzY3MjZlZDY5MjVlZTZhMjRlZjZjMjNlZjZlMjFmMDZmMjBmMTcxMWZmMTczMWRmMjc0MWNmMzc2MWJmMzc4MTlmNDc5MThmNTdiMTdmNTdkMTVmNjdlMTRmNjgwMTNmNzgyMTJmNzg0MTBmODg1MGZmODg3MGVmODg5MGNmOThiMGJmOThjMGFmOThlMDlmYTkwMDhmYTkyMDdmYTk0MDdmYjk2MDZmYjk3MDZmYjk5MDZmYjliMDZmYjlkMDdmYzlmMDdmY2ExMDhmY2EzMDlmY2E1MGFmY2E2MGNmY2E4MGRmY2FhMGZmY2FjMTFmY2FlMTJmY2IwMTRmY2IyMTZmY2I0MThmYmI2MWFmYmI4MWRmYmJhMWZmYmJjMjFmYmJlMjNmYWMwMjZmYWMyMjhmYWM0MmFmYWM2MmRmOWM3MmZmOWM5MzJmOWNiMzVmOGNkMzdmOGNmM2FmN2QxM2RmN2QzNDBmNmQ1NDNmNmQ3NDZmNWQ5NDlmNWRiNGNmNGRkNGZmNGRmNTNmNGUxNTZmM2UzNWFmM2U1NWRmMmU2NjFmMmU4NjVmMmVhNjlmMWVjNmRmMWVkNzFmMWVmNzVmMWYxNzlmMmYyN2RmMmY0ODJmM2Y1ODZmM2Y2OGFmNGY4OGVmNWY5OTJmNmZhOTZmOGZiOWFmOWZjOWRmYWZkYTFmY2ZmYTQiKSksYWI9V2EoJHgoIjBkMDg4NzEwMDc4ODEzMDc4OTE2MDc4YTE5MDY4YzFiMDY4ZDFkMDY4ZTIwMDY4ZjIyMDY5MDI0MDY5MTI2MDU5MTI4MDU5MjJhMDU5MzJjMDU5NDJlMDU5NTJmMDU5NjMxMDU5NzMzMDU5NzM1MDQ5ODM3MDQ5OTM4MDQ5YTNhMDQ5YTNjMDQ5YjNlMDQ5YzNmMDQ5YzQxMDQ5ZDQzMDM5ZTQ0MDM5ZTQ2MDM5ZjQ4MDM5ZjQ5MDNhMDRiMDNhMTRjMDJhMTRlMDJhMjUwMDJhMjUxMDJhMzUzMDJhMzU1MDJhNDU2MDFhNDU4MDFhNDU5MDFhNTViMDFhNTVjMDFhNjVlMDFhNjYwMDFhNjYxMDBhNzYzMDBhNzY0MDBhNzY2MDBhNzY3MDBhODY5MDBhODZhMDBhODZjMDBhODZlMDBhODZmMDBhODcxMDBhODcyMDFhODc0MDFhODc1MDFhODc3MDFhODc4MDFhODdhMDJhODdiMDJhODdkMDNhODdlMDNhODgwMDRhODgxMDRhNzgzMDVhNzg0MDVhNzg2MDZhNjg3MDdhNjg4MDhhNjhhMDlhNThiMGFhNThkMGJhNThlMGNhNDhmMGRhNDkxMGVhMzkyMGZhMzk0MTBhMjk1MTFhMTk2MTNhMTk4MTRhMDk5MTU5ZjlhMTY5ZjljMTc5ZTlkMTg5ZDllMTk5ZGEwMWE5Y2ExMWI5YmEyMWQ5YWEzMWU5YWE1MWY5OWE2MjA5OGE3MjE5N2E4MjI5NmFhMjM5NWFiMjQ5NGFjMjY5NGFkMjc5M2FlMjg5MmIwMjk5MWIxMmE5MGIyMmI4ZmIzMmM4ZWI0MmU4ZGI1MmY4Y2I2MzA4YmI3MzE4YWI4MzI4OWJhMzM4OGJiMzQ4OGJjMzU4N2JkMzc4NmJlMzg4NWJmMzk4NGMwM2E4M2MxM2I4MmMyM2M4MWMzM2Q4MGM0M2U3ZmM1NDA3ZWM2NDE3ZGM3NDI3Y2M4NDM3YmM5NDQ3YWNhNDU3YWNiNDY3OWNjNDc3OGNjNDk3N2NkNGE3NmNlNGI3NWNmNGM3NGQwNGQ3M2QxNGU3MmQyNGY3MWQzNTE3MWQ0NTI3MGQ1NTM2ZmQ1NTQ2ZWQ2NTU2ZGQ3NTY2Y2Q4NTc2YmQ5NTg2YWRhNWE2YWRhNWI2OWRiNWM2OGRjNWQ2N2RkNWU2NmRlNWY2NWRlNjE2NGRmNjI2M2UwNjM2M2UxNjQ2MmUyNjU2MWUyNjY2MGUzNjg1ZmU0Njk1ZWU1NmE1ZGU1NmI1ZGU2NmM1Y2U3NmU1YmU3NmY1YWU4NzA1OWU5NzE1OGU5NzI1N2VhNzQ1N2ViNzU1NmViNzY1NWVjNzc1NGVkNzk1M2VkN2E1MmVlN2I1MWVmN2M1MWVmN2U1MGYwN2Y0ZmYwODA0ZWYxODE0ZGYxODM0Y2YyODQ0YmYzODU0YmYzODc0YWY0ODg0OWY0ODk0OGY1OGI0N2Y1OGM0NmY2OGQ0NWY2OGY0NGY3OTA0NGY3OTE0M2Y3OTM0MmY4OTQ0MWY4OTU0MGY5OTczZmY5OTgzZWY5OWEzZWZhOWIzZGZhOWMzY2ZhOWUzYmZiOWYzYWZiYTEzOWZiYTIzOGZjYTMzOGZjYTUzN2ZjYTYzNmZjYTgzNWZjYTkzNGZkYWIzM2ZkYWMzM2ZkYWUzMmZkYWYzMWZkYjEzMGZkYjIyZmZkYjQyZmZkYjUyZWZlYjcyZGZlYjgyY2ZlYmEyY2ZlYmIyYmZlYmQyYWZlYmUyYWZlYzAyOWZkYzIyOWZkYzMyOGZkYzUyN2ZkYzYyN2ZkYzgyN2ZkY2EyNmZkY2IyNmZjY2QyNWZjY2UyNWZjZDAyNWZjZDIyNWZiZDMyNGZiZDUyNGZiZDcyNGZhZDgyNGZhZGEyNGY5ZGMyNGY5ZGQyNWY4ZGYyNWY4ZTEyNWY3ZTIyNWY3ZTQyNWY2ZTYyNmY2ZTgyNmY1ZTkyNmY1ZWIyN2Y0ZWQyN2YzZWUyN2YzZjAyN2YyZjIyN2YxZjQyNmYxZjUyNWYwZjcyNGYwZjkyMSIpKSxjYj1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LHNiPTFlLTEyLGZiPU1hdGguUEksbGI9ZmIvMixoYj0yKmZiLHBiPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3ZhciB0LHMsZj0rbi5hcHBseSh0aGlzLGFyZ3VtZW50cyksbD0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksaD1vLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1sYixwPXUuYXBwbHkodGhpcyxhcmd1bWVudHMpLWxiLGQ9TWF0aC5hYnMocC1oKSx2PXA+aDtpZihjfHwoYz10PVJlKCkpLGw8ZiYmKHM9bCxsPWYsZj1zKSxsPnNiKWlmKGQ+aGItc2IpYy5tb3ZlVG8obCpNYXRoLmNvcyhoKSxsKk1hdGguc2luKGgpKSxjLmFyYygwLDAsbCxoLHAsIXYpLGY+c2ImJihjLm1vdmVUbyhmKk1hdGguY29zKHApLGYqTWF0aC5zaW4ocCkpLGMuYXJjKDAsMCxmLHAsaCx2KSk7ZWxzZXt2YXIgXyx5LGc9aCxtPXAseD1oLGI9cCx3PWQsTT1kLFQ9YS5hcHBseSh0aGlzLGFyZ3VtZW50cykvMixOPVQ+c2ImJihpPytpLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpNYXRoLnNxcnQoZipmK2wqbCkpLGs9TWF0aC5taW4oTWF0aC5hYnMobC1mKS8yLCtyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksUz1rLEU9aztpZihOPnNiKXt2YXIgQT10YyhOL2YqTWF0aC5zaW4oVCkpLEM9dGMoTi9sKk1hdGguc2luKFQpKTsody09MipBKT5zYj8oQSo9dj8xOi0xLHgrPUEsYi09QSk6KHc9MCx4PWI9KGgrcCkvMiksKE0tPTIqQyk+c2I/KEMqPXY/MTotMSxnKz1DLG0tPUMpOihNPTAsZz1tPShoK3ApLzIpfXZhciB6PWwqTWF0aC5jb3MoZyksUD1sKk1hdGguc2luKGcpLFI9ZipNYXRoLmNvcyhiKSxxPWYqTWF0aC5zaW4oYik7aWYoaz5zYil7dmFyIEw9bCpNYXRoLmNvcyhtKSxVPWwqTWF0aC5zaW4obSksRD1mKk1hdGguY29zKHgpLE89ZipNYXRoLnNpbih4KTtpZihkPGZiKXt2YXIgRj13PnNiP25jKHosUCxELE8sTCxVLFIscSk6W1IscV0sST16LUZbMF0sWT1QLUZbMV0sQj1MLUZbMF0saj1VLUZbMV0sSD0xL01hdGguc2luKE1hdGguYWNvcygoSSpCK1kqaikvKE1hdGguc3FydChJKkkrWSpZKSpNYXRoLnNxcnQoQipCK2oqaikpKS8yKSxYPU1hdGguc3FydChGWzBdKkZbMF0rRlsxXSpGWzFdKTtTPU1hdGgubWluKGssKGYtWCkvKEgtMSkpLEU9TWF0aC5taW4oaywobC1YKS8oSCsxKSl9fU0+c2I/RT5zYj8oXz1lYyhELE8seixQLGwsRSx2KSx5PWVjKEwsVSxSLHEsbCxFLHYpLGMubW92ZVRvKF8uY3grXy54MDEsXy5jeStfLnkwMSksRTxrP2MuYXJjKF8uY3gsXy5jeSxFLE1hdGguYXRhbjIoXy55MDEsXy54MDEpLE1hdGguYXRhbjIoeS55MDEseS54MDEpLCF2KTooYy5hcmMoXy5jeCxfLmN5LEUsTWF0aC5hdGFuMihfLnkwMSxfLngwMSksTWF0aC5hdGFuMihfLnkxMSxfLngxMSksIXYpLGMuYXJjKDAsMCxsLE1hdGguYXRhbjIoXy5jeStfLnkxMSxfLmN4K18ueDExKSxNYXRoLmF0YW4yKHkuY3kreS55MTEseS5jeCt5LngxMSksIXYpLGMuYXJjKHkuY3gseS5jeSxFLE1hdGguYXRhbjIoeS55MTEseS54MTEpLE1hdGguYXRhbjIoeS55MDEseS54MDEpLCF2KSkpOihjLm1vdmVUbyh6LFApLGMuYXJjKDAsMCxsLGcsbSwhdikpOmMubW92ZVRvKHosUCksZj5zYiYmdz5zYj9TPnNiPyhfPWVjKFIscSxMLFUsZiwtUyx2KSx5PWVjKHosUCxELE8sZiwtUyx2KSxjLmxpbmVUbyhfLmN4K18ueDAxLF8uY3krXy55MDEpLFM8az9jLmFyYyhfLmN4LF8uY3ksUyxNYXRoLmF0YW4yKF8ueTAxLF8ueDAxKSxNYXRoLmF0YW4yKHkueTAxLHkueDAxKSwhdik6KGMuYXJjKF8uY3gsXy5jeSxTLE1hdGguYXRhbjIoXy55MDEsXy54MDEpLE1hdGguYXRhbjIoXy55MTEsXy54MTEpLCF2KSxjLmFyYygwLDAsZixNYXRoLmF0YW4yKF8uY3krXy55MTEsXy5jeCtfLngxMSksTWF0aC5hdGFuMih5LmN5K3kueTExLHkuY3greS54MTEpLHYpLGMuYXJjKHkuY3gseS5jeSxTLE1hdGguYXRhbjIoeS55MTEseS54MTEpLE1hdGguYXRhbjIoeS55MDEseS54MDEpLCF2KSkpOmMuYXJjKDAsMCxmLGIseCx2KTpjLmxpbmVUbyhSLHEpfWVsc2UgYy5tb3ZlVG8oMCwwKTtpZihjLmNsb3NlUGF0aCgpLHQpcmV0dXJuIGM9bnVsbCx0KyIifHxudWxsfXZhciBuPVphLGU9R2Escj1jYigwKSxpPW51bGwsbz1KYSx1PVFhLGE9S2EsYz1udWxsO3JldHVybiB0LmNlbnRyb2lkPWZ1bmN0aW9uKCl7dmFyIHQ9KCtuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK2UuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLHI9KCtvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK3UuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLWZiLzI7cmV0dXJuW01hdGguY29zKHIpKnQsTWF0aC5zaW4ocikqdF19LHQuaW5uZXJSYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpjYigrZSksdCk6bn0sdC5vdXRlclJhZGl1cz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOmNiKCtuKSx0KTplfSx0LmNvcm5lclJhZGl1cz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOmNiKCtuKSx0KTpyfSx0LnBhZFJhZGl1cz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1udWxsPT1uP251bGw6ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpjYigrbiksdCk6aX0sdC5zdGFydEFuZ2xlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246Y2IoK24pLHQpOm99LHQuZW5kQW5nbGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpjYigrbiksdCk6dX0sdC5wYWRBbmdsZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOmNiKCtuKSx0KTphfSx0LmNvbnRleHQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9bnVsbD09bj9udWxsOm4sdCk6Y30sdH07cmMucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxuKXtzd2l0Y2godD0rdCxuPStuLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsbik6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxuKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OnRoaXMuX2NvbnRleHQubGluZVRvKHQsbil9fX07dmFyIGRiPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgcmModCl9LHZiPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2YXIgYSxjLHMsZj10Lmxlbmd0aCxsPSExO2ZvcihudWxsPT1pJiYodT1vKHM9UmUoKSkpLGE9MDthPD1mOysrYSkhKGE8ZiYmcihjPXRbYV0sYSx0KSk9PT1sJiYoKGw9IWwpP3UubGluZVN0YXJ0KCk6dS5saW5lRW5kKCkpLGwmJnUucG9pbnQoK24oYyxhLHQpLCtlKGMsYSx0KSk7aWYocylyZXR1cm4gdT1udWxsLHMrIiJ8fG51bGx9dmFyIG49aWMsZT1vYyxyPWNiKCEwKSxpPW51bGwsbz1kYix1PW51bGw7cmV0dXJuIHQueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOmNiKCtlKSx0KTpufSx0Lnk9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpjYigrbiksdCk6ZX0sdC5kZWZpbmVkPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246Y2IoISFuKSx0KTpyfSx0LmN1cnZlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPW4sbnVsbCE9aSYmKHU9byhpKSksdCk6b30sdC5jb250ZXh0PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT1uP2k9dT1udWxsOnU9byhpPW4pLHQpOml9LHR9LF9iPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2YXIgbixmLGwsaCxwLGQ9dC5sZW5ndGgsdj0hMSxfPW5ldyBBcnJheShkKSx5PW5ldyBBcnJheShkKTtmb3IobnVsbD09YSYmKHM9YyhwPVJlKCkpKSxuPTA7bjw9ZDsrK24pe2lmKCEobjxkJiZ1KGg9dFtuXSxuLHQpKT09PXYpaWYodj0hdilmPW4scy5hcmVhU3RhcnQoKSxzLmxpbmVTdGFydCgpO2Vsc2V7Zm9yKHMubGluZUVuZCgpLHMubGluZVN0YXJ0KCksbD1uLTE7bD49ZjstLWwpcy5wb2ludChfW2xdLHlbbF0pO3MubGluZUVuZCgpLHMuYXJlYUVuZCgpfXYmJihfW25dPStlKGgsbix0KSx5W25dPStpKGgsbix0KSxzLnBvaW50KHI/K3IoaCxuLHQpOl9bbl0sbz8rbyhoLG4sdCk6eVtuXSkpfWlmKHApcmV0dXJuIHM9bnVsbCxwKyIifHxudWxsfWZ1bmN0aW9uIG4oKXtyZXR1cm4gdmIoKS5kZWZpbmVkKHUpLmN1cnZlKGMpLmNvbnRleHQoYSl9dmFyIGU9aWMscj1udWxsLGk9Y2IoMCksbz1vYyx1PWNiKCEwKSxhPW51bGwsYz1kYixzPW51bGw7cmV0dXJuIHQueD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOmNiKCtuKSxyPW51bGwsdCk6ZX0sdC54MD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOmNiKCtuKSx0KTplfSx0LngxPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW51bGw9PW4/bnVsbDoiZnVuY3Rpb24iPT10eXBlb2Ygbj9uOmNiKCtuKSx0KTpyfSx0Lnk9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpjYigrbiksbz1udWxsLHQpOml9LHQueTA9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpjYigrbiksdCk6aX0sdC55MT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1udWxsPT1uP251bGw6ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpjYigrbiksdCk6b30sdC5saW5lWDA9dC5saW5lWTA9ZnVuY3Rpb24oKXtyZXR1cm4gbigpLngoZSkueShpKX0sdC5saW5lWTE9ZnVuY3Rpb24oKXtyZXR1cm4gbigpLngoZSkueShvKX0sdC5saW5lWDE9ZnVuY3Rpb24oKXtyZXR1cm4gbigpLngocikueShpKX0sdC5kZWZpbmVkPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSJmdW5jdGlvbiI9PXR5cGVvZiBuP246Y2IoISFuKSx0KTp1fSx0LmN1cnZlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPW4sbnVsbCE9YSYmKHM9YyhhKSksdCk6Y30sdC5jb250ZXh0PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT1uP2E9cz1udWxsOnM9YyhhPW4pLHQpOmF9LHR9LHliPWZ1bmN0aW9uKHQsbil7cmV0dXJuIG48dD8tMTpuPnQ/MTpuPj10PzA6TmFOfSxnYj1mdW5jdGlvbih0KXtyZXR1cm4gdH0sbWI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZhciBhLGMscyxmLGwsaD10Lmxlbmd0aCxwPTAsZD1uZXcgQXJyYXkoaCksdj1uZXcgQXJyYXkoaCksXz0raS5hcHBseSh0aGlzLGFyZ3VtZW50cykseT1NYXRoLm1pbihoYixNYXRoLm1heCgtaGIsby5hcHBseSh0aGlzLGFyZ3VtZW50cyktXykpLGc9TWF0aC5taW4oTWF0aC5hYnMoeSkvaCx1LmFwcGx5KHRoaXMsYXJndW1lbnRzKSksbT1nKih5PDA/LTE6MSk7Zm9yKGE9MDthPGg7KythKShsPXZbZFthXT1hXT0rbih0W2FdLGEsdCkpPjAmJihwKz1sKTtmb3IobnVsbCE9ZT9kLnNvcnQoZnVuY3Rpb24odCxuKXtyZXR1cm4gZSh2W3RdLHZbbl0pfSk6bnVsbCE9ciYmZC5zb3J0KGZ1bmN0aW9uKG4sZSl7cmV0dXJuIHIodFtuXSx0W2VdKX0pLGE9MCxzPXA/KHktaCptKS9wOjA7YTxoOysrYSxfPWYpYz1kW2FdLGw9dltjXSxmPV8rKGw+MD9sKnM6MCkrbSx2W2NdPXtkYXRhOnRbY10saW5kZXg6YSx2YWx1ZTpsLHN0YXJ0QW5nbGU6XyxlbmRBbmdsZTpmLHBhZEFuZ2xlOmd9O3JldHVybiB2fXZhciBuPWdiLGU9eWIscj1udWxsLGk9Y2IoMCksbz1jYihoYiksdT1jYigwKTtyZXR1cm4gdC52YWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOmNiKCtlKSx0KTpufSx0LnNvcnRWYWx1ZXM9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bixyPW51bGwsdCk6ZX0sdC5zb3J0PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW4sZT1udWxsLHQpOnJ9LHQuc3RhcnRBbmdsZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOmNiKCtuKSx0KTppfSx0LmVuZEFuZ2xlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246Y2IoK24pLHQpOm99LHQucGFkQW5nbGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpjYigrbiksdCk6dX0sdH0seGI9YWMoZGIpO3VjLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUuYXJlYVN0YXJ0KCl9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5hcmVhRW5kKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbih0LG4pe3RoaXMuX2N1cnZlLnBvaW50KG4qTWF0aC5zaW4odCksbiotTWF0aC5jb3ModCkpfX07dmFyIGJiPWZ1bmN0aW9uKCl7cmV0dXJuIGNjKHZiKCkuY3VydmUoeGIpKX0sd2I9ZnVuY3Rpb24oKXt2YXIgdD1fYigpLmN1cnZlKHhiKSxuPXQuY3VydmUsZT10LmxpbmVYMCxyPXQubGluZVgxLGk9dC5saW5lWTAsbz10LmxpbmVZMTtyZXR1cm4gdC5hbmdsZT10LngsZGVsZXRlIHQueCx0LnN0YXJ0QW5nbGU9dC54MCxkZWxldGUgdC54MCx0LmVuZEFuZ2xlPXQueDEsZGVsZXRlIHQueDEsdC5yYWRpdXM9dC55LGRlbGV0ZSB0LnksdC5pbm5lclJhZGl1cz10LnkwLGRlbGV0ZSB0LnkwLHQub3V0ZXJSYWRpdXM9dC55MSxkZWxldGUgdC55MSx0LmxpbmVTdGFydEFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIGNjKGUoKSl9LGRlbGV0ZSB0LmxpbmVYMCx0LmxpbmVFbmRBbmdsZT1mdW5jdGlvbigpe3JldHVybiBjYyhyKCkpfSxkZWxldGUgdC5saW5lWDEsdC5saW5lSW5uZXJSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gY2MoaSgpKX0sZGVsZXRlIHQubGluZVkwLHQubGluZU91dGVyUmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIGNjKG8oKSl9LGRlbGV0ZSB0LmxpbmVZMSx0LmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP24oYWModCkpOm4oKS5fY3VydmV9LHR9LE1iPXtkcmF3OmZ1bmN0aW9uKHQsbil7dmFyIGU9TWF0aC5zcXJ0KG4vZmIpO3QubW92ZVRvKGUsMCksdC5hcmMoMCwwLGUsMCxoYil9fSxUYj17ZHJhdzpmdW5jdGlvbih0LG4pe3ZhciBlPU1hdGguc3FydChuLzUpLzI7dC5tb3ZlVG8oLTMqZSwtZSksdC5saW5lVG8oLWUsLWUpLHQubGluZVRvKC1lLC0zKmUpLHQubGluZVRvKGUsLTMqZSksdC5saW5lVG8oZSwtZSksdC5saW5lVG8oMyplLC1lKSx0LmxpbmVUbygzKmUsZSksdC5saW5lVG8oZSxlKSx0LmxpbmVUbyhlLDMqZSksdC5saW5lVG8oLWUsMyplKSx0LmxpbmVUbygtZSxlKSx0LmxpbmVUbygtMyplLGUpLHQuY2xvc2VQYXRoKCl9fSxOYj1NYXRoLnNxcnQoMS8zKSxrYj0yKk5iLFNiPXtkcmF3OmZ1bmN0aW9uKHQsbil7dmFyIGU9TWF0aC5zcXJ0KG4va2IpLHI9ZSpOYjt0Lm1vdmVUbygwLC1lKSx0LmxpbmVUbyhyLDApLHQubGluZVRvKDAsZSksdC5saW5lVG8oLXIsMCksdC5jbG9zZVBhdGgoKX19LEViPS44OTA4MTMwOTE1MjkyODUyLEFiPU1hdGguc2luKGZiLzEwKS9NYXRoLnNpbig3KmZiLzEwKSxDYj1NYXRoLnNpbihoYi8xMCkqQWIsemI9LU1hdGguY29zKGhiLzEwKSpBYixQYj17ZHJhdzpmdW5jdGlvbih0LG4pe3ZhciBlPU1hdGguc3FydChuKkViKSxyPUNiKmUsaT16YiplO3QubW92ZVRvKDAsLWUpLHQubGluZVRvKHIsaSk7Zm9yKHZhciBvPTE7bzw1Oysrbyl7dmFyIHU9aGIqby81LGE9TWF0aC5jb3ModSksYz1NYXRoLnNpbih1KTt0LmxpbmVUbyhjKmUsLWEqZSksdC5saW5lVG8oYSpyLWMqaSxjKnIrYSppKX10LmNsb3NlUGF0aCgpfX0sUmI9e2RyYXc6ZnVuY3Rpb24odCxuKXt2YXIgZT1NYXRoLnNxcnQobikscj0tZS8yO3QucmVjdChyLHIsZSxlKX19LHFiPU1hdGguc3FydCgzKSxMYj17ZHJhdzpmdW5jdGlvbih0LG4pe3ZhciBlPS1NYXRoLnNxcnQobi8oMypxYikpO3QubW92ZVRvKDAsMiplKSx0LmxpbmVUbygtcWIqZSwtZSksdC5saW5lVG8ocWIqZSwtZSksdC5jbG9zZVBhdGgoKX19LFViPS0uNSxEYj1NYXRoLnNxcnQoMykvMixPYj0xL01hdGguc3FydCgxMiksRmI9MyooT2IvMisxKSxJYj17ZHJhdzpmdW5jdGlvbih0LG4pe3ZhciBlPU1hdGguc3FydChuL0ZiKSxyPWUvMixpPWUqT2Isbz1yLHU9ZSpPYitlLGE9LW8sYz11O3QubW92ZVRvKHIsaSksdC5saW5lVG8obyx1KSx0LmxpbmVUbyhhLGMpLHQubGluZVRvKFViKnItRGIqaSxEYipyK1ViKmkpLHQubGluZVRvKFViKm8tRGIqdSxEYipvK1ViKnUpLHQubGluZVRvKFViKmEtRGIqYyxEYiphK1ViKmMpLHQubGluZVRvKFViKnIrRGIqaSxVYippLURiKnIpLHQubGluZVRvKFViKm8rRGIqdSxVYip1LURiKm8pLHQubGluZVRvKFViKmErRGIqYyxVYipjLURiKmEpLHQuY2xvc2VQYXRoKCl9fSxZYj1bTWIsVGIsU2IsUmIsUGIsTGIsSWJdLEJiPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3ZhciB0O2lmKHJ8fChyPXQ9UmUoKSksbi5hcHBseSh0aGlzLGFyZ3VtZW50cykuZHJhdyhyLCtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksdClyZXR1cm4gcj1udWxsLHQrIiJ8fG51bGx9dmFyIG49Y2IoTWIpLGU9Y2IoNjQpLHI9bnVsbDtyZXR1cm4gdC50eXBlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6Y2IoZSksdCk6bn0sdC5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246Y2IoK24pLHQpOmV9LHQuY29udGV4dD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1udWxsPT1uP251bGw6bix0KTpyfSx0fSxqYj1mdW5jdGlvbigpe307ZmMucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMzpzYyh0aGlzLHRoaXMuX3gxLHRoaXMuX3kxKTtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDEsdGhpcy5feTEpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxuKXtzd2l0Y2godD0rdCxuPStuLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsbik6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxuKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9jb250ZXh0LmxpbmVUbygoNSp0aGlzLl94MCt0aGlzLl94MSkvNiwoNSp0aGlzLl95MCt0aGlzLl95MSkvNik7ZGVmYXVsdDpzYyh0aGlzLHQsbil9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1ufX07dmFyIEhiPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZmModCl9O2xjLnByb3RvdHlwZT17YXJlYVN0YXJ0OmpiLGFyZWFFbmQ6amIsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gyKzIqdGhpcy5feDMpLzMsKHRoaXMuX3kyKzIqdGhpcy5feTMpLzMpLHRoaXMuX2NvbnRleHQubGluZVRvKCh0aGlzLl94MysyKnRoaXMuX3gyKS8zLCh0aGlzLl95MysyKnRoaXMuX3kyKS8zKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKSx0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KX19LHBvaW50OmZ1bmN0aW9uKHQsbil7c3dpdGNoKHQ9K3Qsbj0rbix0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDI9dCx0aGlzLl95Mj1uO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gzPXQsdGhpcy5feTM9bjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94ND10LHRoaXMuX3k0PW4sdGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gwKzQqdGhpcy5feDErdCkvNiwodGhpcy5feTArNCp0aGlzLl95MStuKS82KTticmVhaztkZWZhdWx0OnNjKHRoaXMsdCxuKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPW59fTt2YXIgWGI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBsYyh0KX07aGMucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjM9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsbil7c3dpdGNoKHQ9K3Qsbj0rbix0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7dmFyIGU9KHRoaXMuX3gwKzQqdGhpcy5feDErdCkvNixyPSh0aGlzLl95MCs0KnRoaXMuX3kxK24pLzY7dGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHIpOnRoaXMuX2NvbnRleHQubW92ZVRvKGUscik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpzYyh0aGlzLHQsbil9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1ufX07dmFyIFZiPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgaGModCl9O3BjLnByb3RvdHlwZT17bGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdLHRoaXMuX2Jhc2lzLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5feCxuPXRoaXMuX3ksZT10Lmxlbmd0aC0xO2lmKGU+MClmb3IodmFyIHIsaT10WzBdLG89blswXSx1PXRbZV0taSxhPW5bZV0tbyxjPS0xOysrYzw9ZTspcj1jL2UsdGhpcy5fYmFzaXMucG9pbnQodGhpcy5fYmV0YSp0W2NdKygxLXRoaXMuX2JldGEpKihpK3IqdSksdGhpcy5fYmV0YSpuW2NdKygxLXRoaXMuX2JldGEpKihvK3IqYSkpO3RoaXMuX3g9dGhpcy5feT1udWxsLHRoaXMuX2Jhc2lzLmxpbmVFbmQoKX0scG9pbnQ6ZnVuY3Rpb24odCxuKXt0aGlzLl94LnB1c2goK3QpLHRoaXMuX3kucHVzaCgrbil9fTt2YXIgV2I9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQpe3JldHVybiAxPT09bj9uZXcgZmModCk6bmV3IHBjKHQsbil9cmV0dXJuIGUuYmV0YT1mdW5jdGlvbihuKXtyZXR1cm4gdCgrbil9LGV9KC44NSk7dmMucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOmRjKHRoaXMsdGhpcy5feDEsdGhpcy5feTEpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxuKXtzd2l0Y2godD0rdCxuPStuLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsbik6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxuKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl94MT10LHRoaXMuX3kxPW47YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7ZGVmYXVsdDpkYyh0aGlzLHQsbil9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1ufX07dmFyICRiPWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gbmV3IHZjKHQsbil9cmV0dXJuIGUudGVuc2lvbj1mdW5jdGlvbihuKXtyZXR1cm4gdCgrbil9LGV9KDApO19jLnByb3RvdHlwZT17YXJlYVN0YXJ0OmpiLGFyZWFFbmQ6amIsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feDU9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9dGhpcy5feTU9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpLHRoaXMucG9pbnQodGhpcy5feDUsdGhpcy5feTUpfX0scG9pbnQ6ZnVuY3Rpb24odCxuKXtzd2l0Y2godD0rdCxuPStuLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz10LHRoaXMuX3kzPW47YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9dCx0aGlzLl95ND1uKTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT10LHRoaXMuX3k1PW47YnJlYWs7ZGVmYXVsdDpkYyh0aGlzLHQsbil9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1ufX07dmFyIFpiPWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gbmV3IF9jKHQsbil9cmV0dXJuIGUudGVuc2lvbj1mdW5jdGlvbihuKXtyZXR1cm4gdCgrbil9LGV9KDApO3ljLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYzPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LG4pe3N3aXRjaCh0PSt0LG49K24sdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OmRjKHRoaXMsdCxuKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPW59fTt2YXIgR2I9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQpe3JldHVybiBuZXcgeWModCxuKX1yZXR1cm4gZS50ZW5zaW9uPWZ1bmN0aW9uKG4pe3JldHVybiB0KCtuKX0sZX0oMCk7bWMucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDIsdGhpcy5feTIpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxuKXtpZih0PSt0LG49K24sdGhpcy5fcG9pbnQpe3ZhciBlPXRoaXMuX3gyLXQscj10aGlzLl95Mi1uO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3coZSplK3Iqcix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LG4pOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsbik7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7ZGVmYXVsdDpnYyh0aGlzLHQsbil9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9bn19O3ZhciBKYj1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuIG4/bmV3IG1jKHQsbik6bmV3IHZjKHQsMCl9cmV0dXJuIGUuYWxwaGE9ZnVuY3Rpb24obil7cmV0dXJuIHQoK24pfSxlfSguNSk7eGMucHJvdG90eXBlPXthcmVhU3RhcnQ6amIsYXJlYUVuZDpqYixsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl94NT10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND10aGlzLl95NT1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCksdGhpcy5wb2ludCh0aGlzLl94NSx0aGlzLl95NSl9fSxwb2ludDpmdW5jdGlvbih0LG4pe2lmKHQ9K3Qsbj0rbix0aGlzLl9wb2ludCl7dmFyIGU9dGhpcy5feDItdCxyPXRoaXMuX3kyLW47dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhlKmUrcipyLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz10LHRoaXMuX3kzPW47YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9dCx0aGlzLl95ND1uKTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT10LHRoaXMuX3k1PW47YnJlYWs7ZGVmYXVsdDpnYyh0aGlzLHQsbil9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9bn19O3ZhciBRYj1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuIG4/bmV3IHhjKHQsbik6bmV3IF9jKHQsMCl9cmV0dXJuIGUuYWxwaGE9ZnVuY3Rpb24obil7cmV0dXJuIHQoK24pfSxlfSguNSk7YmMucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTA7DQp9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjM9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsbil7aWYodD0rdCxuPStuLHRoaXMuX3BvaW50KXt2YXIgZT10aGlzLl94Mi10LHI9dGhpcy5feTItbjt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KGUqZStyKnIsdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OmdjKHRoaXMsdCxuKX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1ufX07dmFyIEtiPWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gbj9uZXcgYmModCxuKTpuZXcgeWModCwwKX1yZXR1cm4gZS5hbHBoYT1mdW5jdGlvbihuKXtyZXR1cm4gdCgrbil9LGV9KC41KTt3Yy5wcm90b3R5cGU9e2FyZWFTdGFydDpqYixhcmVhRW5kOmpiLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludCYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKX0scG9pbnQ6ZnVuY3Rpb24odCxuKXt0PSt0LG49K24sdGhpcy5fcG9pbnQ/dGhpcy5fY29udGV4dC5saW5lVG8odCxuKToodGhpcy5fcG9pbnQ9MSx0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LG4pKX19O3ZhciB0dz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHdjKHQpfTtTYy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT10aGlzLl90MD1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKTticmVhaztjYXNlIDM6a2ModGhpcyx0aGlzLl90MCxOYyh0aGlzLHRoaXMuX3QwKSl9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LG4pe3ZhciBlPU5hTjtpZih0PSt0LG49K24sdCE9PXRoaXMuX3gxfHxuIT09dGhpcy5feTEpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LG4pOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsbik7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsa2ModGhpcyxOYyh0aGlzLGU9VGModGhpcyx0LG4pKSxlKTticmVhaztkZWZhdWx0OmtjKHRoaXMsdGhpcy5fdDAsZT1UYyh0aGlzLHQsbikpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9bix0aGlzLl90MD1lfX19LChFYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShTYy5wcm90b3R5cGUpKS5wb2ludD1mdW5jdGlvbih0LG4pe1NjLnByb3RvdHlwZS5wb2ludC5jYWxsKHRoaXMsbix0KX0sQWMucHJvdG90eXBlPXttb3ZlVG86ZnVuY3Rpb24odCxuKXt0aGlzLl9jb250ZXh0Lm1vdmVUbyhuLHQpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxsaW5lVG86ZnVuY3Rpb24odCxuKXt0aGlzLl9jb250ZXh0LmxpbmVUbyhuLHQpfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKHQsbixlLHIsaSxvKXt0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8obix0LHIsZSxvLGkpfX0sUGMucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5feCxuPXRoaXMuX3ksZT10Lmxlbmd0aDtpZihlKWlmKHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odFswXSxuWzBdKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0WzBdLG5bMF0pLDI9PT1lKXRoaXMuX2NvbnRleHQubGluZVRvKHRbMV0sblsxXSk7ZWxzZSBmb3IodmFyIHI9UmModCksaT1SYyhuKSxvPTAsdT0xO3U8ZTsrK28sKyt1KXRoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhyWzBdW29dLGlbMF1bb10sclsxXVtvXSxpWzFdW29dLHRbdV0sblt1XSk7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09ZSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUsdGhpcy5feD10aGlzLl95PW51bGx9LHBvaW50OmZ1bmN0aW9uKHQsbil7dGhpcy5feC5wdXNoKCt0KSx0aGlzLl95LnB1c2goK24pfX07dmFyIG53PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgUGModCl9O3FjLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9dGhpcy5feT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpezA8dGhpcy5fdCYmdGhpcy5fdDwxJiYyPT09dGhpcy5fcG9pbnQmJnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsdGhpcy5feSksKHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU+PTAmJih0aGlzLl90PTEtdGhpcy5fdCx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSl9LHBvaW50OmZ1bmN0aW9uKHQsbil7c3dpdGNoKHQ9K3Qsbj0rbix0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LG4pOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsbik7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDppZih0aGlzLl90PD0wKXRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsbiksdGhpcy5fY29udGV4dC5saW5lVG8odCxuKTtlbHNle3ZhciBlPXRoaXMuX3gqKDEtdGhpcy5fdCkrdCp0aGlzLl90O3RoaXMuX2NvbnRleHQubGluZVRvKGUsdGhpcy5feSksdGhpcy5fY29udGV4dC5saW5lVG8oZSxuKX19dGhpcy5feD10LHRoaXMuX3k9bn19O3ZhciBldz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHFjKHQsLjUpfSxydz1BcnJheS5wcm90b3R5cGUuc2xpY2UsaXc9ZnVuY3Rpb24odCxuKXtpZigocj10Lmxlbmd0aCk+MSlmb3IodmFyIGUscixpPTEsbz10W25bMF1dLHU9by5sZW5ndGg7aTxyOysraSl7ZT1vLG89dFtuW2ldXTtmb3IodmFyIGE9MDthPHU7KythKW9bYV1bMV0rPW9bYV1bMF09aXNOYU4oZVthXVsxXSk/ZVthXVswXTplW2FdWzFdfX0sb3c9ZnVuY3Rpb24odCl7Zm9yKHZhciBuPXQubGVuZ3RoLGU9bmV3IEFycmF5KG4pOy0tbj49MDspZVtuXT1uO3JldHVybiBlfSx1dz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dmFyIG8sdSxhPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpLGM9dC5sZW5ndGgscz1hLmxlbmd0aCxmPW5ldyBBcnJheShzKTtmb3Iobz0wO288czsrK28pe2Zvcih2YXIgbCxoPWFbb10scD1mW29dPW5ldyBBcnJheShjKSxkPTA7ZDxjOysrZClwW2RdPWw9WzAsK2kodFtkXSxoLGQsdCldLGwuZGF0YT10W2RdO3Aua2V5PWh9Zm9yKG89MCx1PWUoZik7bzxzOysrbylmW3Vbb11dLmluZGV4PW87cmV0dXJuIHIoZix1KSxmfXZhciBuPWNiKFtdKSxlPW93LHI9aXcsaT1EYztyZXR1cm4gdC5rZXlzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6Y2IocncuY2FsbChlKSksdCk6bn0sdC52YWx1ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOmNiKCtuKSx0KTppfSx0Lm9yZGVyPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW51bGw9PW4/b3c6ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpjYihydy5jYWxsKG4pKSx0KTplfSx0Lm9mZnNldD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1udWxsPT1uP2l3Om4sdCk6cn0sdH0sYXc9ZnVuY3Rpb24odCxuKXtpZigocj10Lmxlbmd0aCk+MCl7Zm9yKHZhciBlLHIsaSxvPTAsdT10WzBdLmxlbmd0aDtvPHU7KytvKXtmb3IoaT1lPTA7ZTxyOysrZSlpKz10W2VdW29dWzFdfHwwO2lmKGkpZm9yKGU9MDtlPHI7KytlKXRbZV1bb11bMV0vPWl9aXcodCxuKX19LGN3PWZ1bmN0aW9uKHQsbil7aWYoKGU9dC5sZW5ndGgpPjApe2Zvcih2YXIgZSxyPTAsaT10W25bMF1dLG89aS5sZW5ndGg7cjxvOysrcil7Zm9yKHZhciB1PTAsYT0wO3U8ZTsrK3UpYSs9dFt1XVtyXVsxXXx8MDtpW3JdWzFdKz1pW3JdWzBdPS1hLzJ9aXcodCxuKX19LHN3PWZ1bmN0aW9uKHQsbil7aWYoKGk9dC5sZW5ndGgpPjAmJihyPShlPXRbblswXV0pLmxlbmd0aCk+MCl7Zm9yKHZhciBlLHIsaSxvPTAsdT0xO3U8cjsrK3Upe2Zvcih2YXIgYT0wLGM9MCxzPTA7YTxpOysrYSl7Zm9yKHZhciBmPXRbblthXV0sbD1mW3VdWzFdfHwwLGg9Zlt1LTFdWzFdfHwwLHA9KGwtaCkvMixkPTA7ZDxhOysrZCl7dmFyIHY9dFtuW2RdXSxfPXZbdV1bMV18fDAseT12W3UtMV1bMV18fDA7cCs9Xy15fWMrPWwscys9cCpsfWVbdS0xXVsxXSs9ZVt1LTFdWzBdPW8sYyYmKG8tPXMvYyl9ZVt1LTFdWzFdKz1lW3UtMV1bMF09byxpdyh0LG4pfX0sZnc9ZnVuY3Rpb24odCl7dmFyIG49dC5tYXAoT2MpO3JldHVybiBvdyh0KS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5bdF0tbltlXX0pfSxsdz1mdW5jdGlvbih0KXtyZXR1cm4gZncodCkucmV2ZXJzZSgpfSxodz1mdW5jdGlvbih0KXt2YXIgbixlLHI9dC5sZW5ndGgsaT10Lm1hcChPYyksbz1vdyh0KS5zb3J0KGZ1bmN0aW9uKHQsbil7cmV0dXJuIGlbbl0taVt0XX0pLHU9MCxhPTAsYz1bXSxzPVtdO2ZvcihuPTA7bjxyOysrbillPW9bbl0sdTxhPyh1Kz1pW2VdLGMucHVzaChlKSk6KGErPWlbZV0scy5wdXNoKGUpKTtyZXR1cm4gcy5yZXZlcnNlKCkuY29uY2F0KGMpfSxwdz1mdW5jdGlvbih0KXtyZXR1cm4gb3codCkucmV2ZXJzZSgpfSxkdz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19O1ljLnByb3RvdHlwZT17Y29uc3RydWN0b3I6WWMsaW5zZXJ0OmZ1bmN0aW9uKHQsbil7dmFyIGUscixpO2lmKHQpe2lmKG4uUD10LG4uTj10Lk4sdC5OJiYodC5OLlA9biksdC5OPW4sdC5SKXtmb3IodD10LlI7dC5MOyl0PXQuTDt0Lkw9bn1lbHNlIHQuUj1uO2U9dH1lbHNlIHRoaXMuXz8odD1YYyh0aGlzLl8pLG4uUD1udWxsLG4uTj10LHQuUD10Lkw9bixlPXQpOihuLlA9bi5OPW51bGwsdGhpcy5fPW4sZT1udWxsKTtmb3Iobi5MPW4uUj1udWxsLG4uVT1lLG4uQz0hMCx0PW47ZSYmZS5DOylyPWUuVSxlPT09ci5MPyhpPXIuUixpJiZpLkM/KGUuQz1pLkM9ITEsci5DPSEwLHQ9cik6KHQ9PT1lLlImJihqYyh0aGlzLGUpLHQ9ZSxlPXQuVSksZS5DPSExLHIuQz0hMCxIYyh0aGlzLHIpKSk6KGk9ci5MLGkmJmkuQz8oZS5DPWkuQz0hMSxyLkM9ITAsdD1yKToodD09PWUuTCYmKEhjKHRoaXMsZSksdD1lLGU9dC5VKSxlLkM9ITEsci5DPSEwLGpjKHRoaXMscikpKSxlPXQuVTt0aGlzLl8uQz0hMX0scmVtb3ZlOmZ1bmN0aW9uKHQpe3QuTiYmKHQuTi5QPXQuUCksdC5QJiYodC5QLk49dC5OKSx0Lk49dC5QPW51bGw7dmFyIG4sZSxyLGk9dC5VLG89dC5MLHU9dC5SO2lmKGU9bz91P1hjKHUpOm86dSxpP2kuTD09PXQ/aS5MPWU6aS5SPWU6dGhpcy5fPWUsbyYmdT8ocj1lLkMsZS5DPXQuQyxlLkw9byxvLlU9ZSxlIT09dT8oaT1lLlUsZS5VPXQuVSx0PWUuUixpLkw9dCxlLlI9dSx1LlU9ZSk6KGUuVT1pLGk9ZSx0PWUuUikpOihyPXQuQyx0PWUpLHQmJih0LlU9aSksIXIpe2lmKHQmJnQuQylyZXR1cm4gdm9pZCh0LkM9ITEpO2Rve2lmKHQ9PT10aGlzLl8pYnJlYWs7aWYodD09PWkuTCl7aWYobj1pLlIsbi5DJiYobi5DPSExLGkuQz0hMCxqYyh0aGlzLGkpLG49aS5SKSxuLkwmJm4uTC5DfHxuLlImJm4uUi5DKXtuLlImJm4uUi5DfHwobi5MLkM9ITEsbi5DPSEwLEhjKHRoaXMsbiksbj1pLlIpLG4uQz1pLkMsaS5DPW4uUi5DPSExLGpjKHRoaXMsaSksdD10aGlzLl87YnJlYWt9fWVsc2UgaWYobj1pLkwsbi5DJiYobi5DPSExLGkuQz0hMCxIYyh0aGlzLGkpLG49aS5MKSxuLkwmJm4uTC5DfHxuLlImJm4uUi5DKXtuLkwmJm4uTC5DfHwobi5SLkM9ITEsbi5DPSEwLGpjKHRoaXMsbiksbj1pLkwpLG4uQz1pLkMsaS5DPW4uTC5DPSExLEhjKHRoaXMsaSksdD10aGlzLl87YnJlYWt9bi5DPSEwLHQ9aSxpPWkuVX13aGlsZSghdC5DKTt0JiYodC5DPSExKX19fTt2YXIgdncsX3cseXcsZ3csbXcseHc9W10sYnc9W10sd3c9MWUtNixNdz0xZS0xMjtfcy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOl9zLHBvbHlnb25zOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lZGdlcztyZXR1cm4gdGhpcy5jZWxscy5tYXAoZnVuY3Rpb24obil7dmFyIGU9bi5oYWxmZWRnZXMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0cyhuLHRbZV0pfSk7cmV0dXJuIGUuZGF0YT1uLnNpdGUuZGF0YSxlfSl9LHRyaWFuZ2xlczpmdW5jdGlvbigpe3ZhciB0PVtdLG49dGhpcy5lZGdlcztyZXR1cm4gdGhpcy5jZWxscy5mb3JFYWNoKGZ1bmN0aW9uKGUscil7aWYobz0oaT1lLmhhbGZlZGdlcykubGVuZ3RoKWZvcih2YXIgaSxvLHUsYT1lLnNpdGUsYz0tMSxzPW5baVtvLTFdXSxmPXMubGVmdD09PWE/cy5yaWdodDpzLmxlZnQ7KytjPG87KXU9ZixzPW5baVtjXV0sZj1zLmxlZnQ9PT1hP3MucmlnaHQ6cy5sZWZ0LHUmJmYmJnI8dS5pbmRleCYmcjxmLmluZGV4JiZkcyhhLHUsZik8MCYmdC5wdXNoKFthLmRhdGEsdS5kYXRhLGYuZGF0YV0pfSksdH0sbGlua3M6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGdlcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQucmlnaHR9KS5tYXAoZnVuY3Rpb24odCl7cmV0dXJue3NvdXJjZTp0LmxlZnQuZGF0YSx0YXJnZXQ6dC5yaWdodC5kYXRhfX0pfSxmaW5kOmZ1bmN0aW9uKHQsbixlKXtmb3IodmFyIHIsaSxvPXRoaXMsdT1vLl9mb3VuZHx8MCxhPW8uY2VsbHMubGVuZ3RoOyEoaT1vLmNlbGxzW3VdKTspaWYoKyt1Pj1hKXJldHVybiBudWxsO3ZhciBjPXQtaS5zaXRlWzBdLHM9bi1pLnNpdGVbMV0sZj1jKmMrcypzO2RvIGk9by5jZWxsc1tyPXVdLHU9bnVsbCxpLmhhbGZlZGdlcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciByPW8uZWRnZXNbZV0sYT1yLmxlZnQ7aWYoYSE9PWkuc2l0ZSYmYXx8KGE9ci5yaWdodCkpe3ZhciBjPXQtYVswXSxzPW4tYVsxXSxsPWMqYytzKnM7bDxmJiYoZj1sLHU9YS5pbmRleCl9fSk7d2hpbGUobnVsbCE9PXUpO3JldHVybiBvLl9mb3VuZD1yLG51bGw9PWV8fGY8PWUqZT9pLnNpdGU6bnVsbH19O3ZhciBUdz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7cmV0dXJuIG5ldyBfcyh0Lm1hcChmdW5jdGlvbihyLGkpe3ZhciBvPVtNYXRoLnJvdW5kKG4ocixpLHQpL3d3KSp3dyxNYXRoLnJvdW5kKGUocixpLHQpL3d3KSp3d107cmV0dXJuIG8uaW5kZXg9aSxvLmRhdGE9cixvfSkscil9dmFyIG49RmMsZT1JYyxyPW51bGw7cmV0dXJuIHQucG9seWdvbnM9ZnVuY3Rpb24obil7cmV0dXJuIHQobikucG9seWdvbnMoKX0sdC5saW5rcz1mdW5jdGlvbihuKXtyZXR1cm4gdChuKS5saW5rcygpfSx0LnRyaWFuZ2xlcz1mdW5jdGlvbihuKXtyZXR1cm4gdChuKS50cmlhbmdsZXMoKX0sdC54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6ZHcoK2UpLHQpOm59LHQueT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOmR3KCtuKSx0KTplfSx0LmV4dGVudD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1udWxsPT1uP251bGw6W1srblswXVswXSwrblswXVsxXV0sWytuWzFdWzBdLCtuWzFdWzFdXV0sdCk6ciYmW1tyWzBdWzBdLHJbMF1bMV1dLFtyWzFdWzBdLHJbMV1bMV1dXX0sdC5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW51bGw9PW4/bnVsbDpbWzAsMF0sWytuWzBdLCtuWzFdXV0sdCk6ciYmW3JbMV1bMF0tclswXVswXSxyWzFdWzFdLXJbMF1bMV1dfSx0fSxOdz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19O2dzLnByb3RvdHlwZT17Y29uc3RydWN0b3I6Z3Msc2NhbGU6ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10P3RoaXM6bmV3IGdzKHRoaXMuayp0LHRoaXMueCx0aGlzLnkpfSx0cmFuc2xhdGU6ZnVuY3Rpb24odCxuKXtyZXR1cm4gMD09PXQmMD09PW4/dGhpczpuZXcgZ3ModGhpcy5rLHRoaXMueCt0aGlzLmsqdCx0aGlzLnkrdGhpcy5rKm4pfSxhcHBseTpmdW5jdGlvbih0KXtyZXR1cm5bdFswXSp0aGlzLmsrdGhpcy54LHRbMV0qdGhpcy5rK3RoaXMueV19LGFwcGx5WDpmdW5jdGlvbih0KXtyZXR1cm4gdCp0aGlzLmsrdGhpcy54fSxhcHBseVk6ZnVuY3Rpb24odCl7cmV0dXJuIHQqdGhpcy5rK3RoaXMueX0saW52ZXJ0OmZ1bmN0aW9uKHQpe3JldHVyblsodFswXS10aGlzLngpL3RoaXMuaywodFsxXS10aGlzLnkpL3RoaXMua119LGludmVydFg6ZnVuY3Rpb24odCl7cmV0dXJuKHQtdGhpcy54KS90aGlzLmt9LGludmVydFk6ZnVuY3Rpb24odCl7cmV0dXJuKHQtdGhpcy55KS90aGlzLmt9LHJlc2NhbGVYOmZ1bmN0aW9uKHQpe3JldHVybiB0LmNvcHkoKS5kb21haW4odC5yYW5nZSgpLm1hcCh0aGlzLmludmVydFgsdGhpcykubWFwKHQuaW52ZXJ0LHQpKX0scmVzY2FsZVk6ZnVuY3Rpb24odCl7cmV0dXJuIHQuY29weSgpLmRvbWFpbih0LnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WSx0aGlzKS5tYXAodC5pbnZlcnQsdCkpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJ0cmFuc2xhdGUoIit0aGlzLngrIiwiK3RoaXMueSsiKSBzY2FsZSgiK3RoaXMuaysiKSJ9fTt2YXIga3c9bmV3IGdzKDEsMCwwKTttcy5wcm90b3R5cGU9Z3MucHJvdG90eXBlO3ZhciBTdz1mdW5jdGlvbigpe3QuZXZlbnQucHJldmVudERlZmF1bHQoKSx0LmV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfSxFdz1mdW5jdGlvbigpe2Z1bmN0aW9uIG4odCl7dC5vbigid2hlZWwuem9vbSIscykub24oIm1vdXNlZG93bi56b29tIixmKS5vbigiZGJsY2xpY2suem9vbSIsbCkub24oInRvdWNoc3RhcnQuem9vbSIsaCkub24oInRvdWNobW92ZS56b29tIixkKS5vbigidG91Y2hlbmQuem9vbSB0b3VjaGNhbmNlbC56b29tIix2KS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpLnByb3BlcnR5KCJfX3pvb20iLE1zKX1mdW5jdGlvbiBlKHQsbil7cmV0dXJuIG49TWF0aC5tYXgoeCxNYXRoLm1pbihiLG4pKSxuPT09dC5rP3Q6bmV3IGdzKG4sdC54LHQueSl9ZnVuY3Rpb24gcih0LG4sZSl7dmFyIHI9blswXS1lWzBdKnQuayxpPW5bMV0tZVsxXSp0Lms7cmV0dXJuIHI9PT10LngmJmk9PT10Lnk/dDpuZXcgZ3ModC5rLHIsaSl9ZnVuY3Rpb24gaSh0LG4pe3ZhciBlPXQuaW52ZXJ0WChuWzBdWzBdKS13LHI9dC5pbnZlcnRYKG5bMV1bMF0pLU0saT10LmludmVydFkoblswXVsxXSktVCxvPXQuaW52ZXJ0WShuWzFdWzFdKS1OO3JldHVybiB0LnRyYW5zbGF0ZShyPmU/KGUrcikvMjpNYXRoLm1pbigwLGUpfHxNYXRoLm1heCgwLHIpLG8+aT8oaStvKS8yOk1hdGgubWluKDAsaSl8fE1hdGgubWF4KDAsbykpfWZ1bmN0aW9uIG8odCl7cmV0dXJuWygrdFswXVswXSsgK3RbMV1bMF0pLzIsKCt0WzBdWzFdKyArdFsxXVsxXSkvMl19ZnVuY3Rpb24gdSh0LG4sZSl7dC5vbigic3RhcnQuem9vbSIsZnVuY3Rpb24oKXthKHRoaXMsYXJndW1lbnRzKS5zdGFydCgpfSkub24oImludGVycnVwdC56b29tIGVuZC56b29tIixmdW5jdGlvbigpe2EodGhpcyxhcmd1bWVudHMpLmVuZCgpfSkudHdlZW4oInpvb20iLGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxyPWFyZ3VtZW50cyxpPWEodCxyKSx1PW0uYXBwbHkodCxyKSxjPWV8fG8odSkscz1NYXRoLm1heCh1WzFdWzBdLXVbMF1bMF0sdVsxXVsxXS11WzBdWzFdKSxmPXQuX196b29tLGw9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5hcHBseSh0LHIpOm4saD1FKGYuaW52ZXJ0KGMpLmNvbmNhdChzL2YuayksbC5pbnZlcnQoYykuY29uY2F0KHMvbC5rKSk7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKDE9PT10KXQ9bDtlbHNle3ZhciBuPWgodCksZT1zL25bMl07dD1uZXcgZ3MoZSxjWzBdLW5bMF0qZSxjWzFdLW5bMV0qZSl9aS56b29tKG51bGwsdCl9fSl9ZnVuY3Rpb24gYSh0LG4pe2Zvcih2YXIgZSxyPTAsaT1BLmxlbmd0aDtyPGk7KytyKWlmKChlPUFbcl0pLnRoYXQ9PT10KXJldHVybiBlO3JldHVybiBuZXcgYyh0LG4pfWZ1bmN0aW9uIGModCxuKXt0aGlzLnRoYXQ9dCx0aGlzLmFyZ3M9bix0aGlzLmluZGV4PS0xLHRoaXMuYWN0aXZlPTAsdGhpcy5leHRlbnQ9bS5hcHBseSh0LG4pfWZ1bmN0aW9uIHMoKXtmdW5jdGlvbiBuKCl7by53aGVlbD1udWxsLG8uZW5kKCl9aWYoZy5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBvPWEodGhpcyxhcmd1bWVudHMpLHU9dGhpcy5fX3pvb20sYz1NYXRoLm1heCh4LE1hdGgubWluKGIsdS5rKk1hdGgucG93KDIsLXQuZXZlbnQuZGVsdGFZKih0LmV2ZW50LmRlbHRhTW9kZT8xMjA6MSkvNTAwKSkpLHM9emYodGhpcyk7aWYoby53aGVlbClvLm1vdXNlWzBdWzBdPT09c1swXSYmby5tb3VzZVswXVsxXT09PXNbMV18fChvLm1vdXNlWzFdPXUuaW52ZXJ0KG8ubW91c2VbMF09cykpLGNsZWFyVGltZW91dChvLndoZWVsKTtlbHNle2lmKHUuaz09PWMpcmV0dXJuO28ubW91c2U9W3MsdS5pbnZlcnQocyldLG9wKHRoaXMpLG8uc3RhcnQoKX1TdygpLG8ud2hlZWw9c2V0VGltZW91dChuLFApLG8uem9vbSgibW91c2UiLGkocihlKHUsYyksby5tb3VzZVswXSxvLm1vdXNlWzFdKSxvLmV4dGVudCkpfX1mdW5jdGlvbiBmKCl7ZnVuY3Rpb24gbigpe1N3KCksby5tb3ZlZD0hMCxvLnpvb20oIm1vdXNlIixpKHIoby50aGF0Ll9fem9vbSxvLm1vdXNlWzBdPXpmKG8udGhhdCksby5tb3VzZVsxXSksby5leHRlbnQpKX1mdW5jdGlvbiBlKCl7dS5vbigibW91c2Vtb3ZlLnpvb20gbW91c2V1cC56b29tIixudWxsKSxfdCh0LmV2ZW50LnZpZXcsby5tb3ZlZCksU3coKSxvLmVuZCgpfWlmKCF5JiZnLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIG89YSh0aGlzLGFyZ3VtZW50cyksdT1wbCh0LmV2ZW50LnZpZXcpLm9uKCJtb3VzZW1vdmUuem9vbSIsbiwhMCkub24oIm1vdXNldXAuem9vbSIsZSwhMCksYz16Zih0aGlzKTtnbCh0LmV2ZW50LnZpZXcpLHhzKCksby5tb3VzZT1bYyx0aGlzLl9fem9vbS5pbnZlcnQoYyldLG9wKHRoaXMpLG8uc3RhcnQoKX19ZnVuY3Rpb24gbCgpe2lmKGcuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgbz10aGlzLl9fem9vbSxhPXpmKHRoaXMpLGM9by5pbnZlcnQoYSkscz1vLmsqKHQuZXZlbnQuc2hpZnRLZXk/LjU6MiksZj1pKHIoZShvLHMpLGEsYyksbS5hcHBseSh0aGlzLGFyZ3VtZW50cykpO1N3KCksaz4wP3BsKHRoaXMpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihrKS5jYWxsKHUsZixhKTpwbCh0aGlzKS5jYWxsKG4udHJhbnNmb3JtLGYpfX1mdW5jdGlvbiBoKCl7aWYoZy5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBuLGUscixpLG89YSh0aGlzLGFyZ3VtZW50cyksdT10LmV2ZW50LmNoYW5nZWRUb3VjaGVzLGM9dS5sZW5ndGg7Zm9yKHhzKCksZT0wO2U8YzsrK2Upcj11W2VdLGk9dmwodGhpcyx1LHIuaWRlbnRpZmllciksaT1baSx0aGlzLl9fem9vbS5pbnZlcnQoaSksci5pZGVudGlmaWVyXSxvLnRvdWNoMD9vLnRvdWNoMXx8KG8udG91Y2gxPWkpOihvLnRvdWNoMD1pLG49ITApO3JldHVybiBfJiYoXz1jbGVhclRpbWVvdXQoXyksIW8udG91Y2gxKT8oby5lbmQoKSxpPXBsKHRoaXMpLm9uKCJkYmxjbGljay56b29tIiksdm9pZChpJiZpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkpOnZvaWQobiYmKF89c2V0VGltZW91dChmdW5jdGlvbigpe189bnVsbH0seiksb3AodGhpcyksby5zdGFydCgpKSl9fWZ1bmN0aW9uIGQoKXt2YXIgbixvLHUsYyxzPWEodGhpcyxhcmd1bWVudHMpLGY9dC5ldmVudC5jaGFuZ2VkVG91Y2hlcyxsPWYubGVuZ3RoO2ZvcihTdygpLF8mJihfPWNsZWFyVGltZW91dChfKSksbj0wO248bDsrK24pbz1mW25dLHU9dmwodGhpcyxmLG8uaWRlbnRpZmllcikscy50b3VjaDAmJnMudG91Y2gwWzJdPT09by5pZGVudGlmaWVyP3MudG91Y2gwWzBdPXU6cy50b3VjaDEmJnMudG91Y2gxWzJdPT09by5pZGVudGlmaWVyJiYocy50b3VjaDFbMF09dSk7aWYobz1zLnRoYXQuX196b29tLHMudG91Y2gxKXt2YXIgaD1zLnRvdWNoMFswXSxwPXMudG91Y2gwWzFdLGQ9cy50b3VjaDFbMF0sdj1zLnRvdWNoMVsxXSx5PSh5PWRbMF0taFswXSkqeSsoeT1kWzFdLWhbMV0pKnksZz0oZz12WzBdLXBbMF0pKmcrKGc9dlsxXS1wWzFdKSpnO289ZShvLE1hdGguc3FydCh5L2cpKSx1PVsoaFswXStkWzBdKS8yLChoWzFdK2RbMV0pLzJdLGM9WyhwWzBdK3ZbMF0pLzIsKHBbMV0rdlsxXSkvMl19ZWxzZXtpZighcy50b3VjaDApcmV0dXJuO3U9cy50b3VjaDBbMF0sYz1zLnRvdWNoMFsxXX1zLnpvb20oInRvdWNoIixpKHIobyx1LGMpLHMuZXh0ZW50KSl9ZnVuY3Rpb24gdigpe3ZhciBuLGUscj1hKHRoaXMsYXJndW1lbnRzKSxpPXQuZXZlbnQuY2hhbmdlZFRvdWNoZXMsbz1pLmxlbmd0aDtmb3IoeHMoKSx5JiZjbGVhclRpbWVvdXQoeSkseT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7eT1udWxsfSx6KSxuPTA7bjxvOysrbillPWlbbl0sci50b3VjaDAmJnIudG91Y2gwWzJdPT09ZS5pZGVudGlmaWVyP2RlbGV0ZSByLnRvdWNoMDpyLnRvdWNoMSYmci50b3VjaDFbMl09PT1lLmlkZW50aWZpZXImJmRlbGV0ZSByLnRvdWNoMTtyLnRvdWNoMSYmIXIudG91Y2gwJiYoci50b3VjaDA9ci50b3VjaDEsZGVsZXRlIHIudG91Y2gxKSxyLnRvdWNoMHx8ci5lbmQoKX12YXIgXyx5LGc9YnMsbT13cyx4PTAsYj0xLzAsdz0tYixNPWIsVD13LE49TSxrPTI1MCxFPUNoLEE9W10sQz1wKCJzdGFydCIsInpvb20iLCJlbmQiKSx6PTUwMCxQPTE1MDtyZXR1cm4gbi50cmFuc2Zvcm09ZnVuY3Rpb24odCxuKXt2YXIgZT10LnNlbGVjdGlvbj90LnNlbGVjdGlvbigpOnQ7ZS5wcm9wZXJ0eSgiX196b29tIixNcyksdCE9PWU/dSh0LG4pOmUuaW50ZXJydXB0KCkuZWFjaChmdW5jdGlvbigpe2EodGhpcyxhcmd1bWVudHMpLnN0YXJ0KCkuem9vbShudWxsLCJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOm4pLmVuZCgpfSl9LG4uc2NhbGVCeT1mdW5jdGlvbih0LGUpe24uc2NhbGVUbyh0LGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fX3pvb20uayxuPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOmU7cmV0dXJuIHQqbn0pfSxuLnNjYWxlVG89ZnVuY3Rpb24odCx1KXtuLnRyYW5zZm9ybSh0LGZ1bmN0aW9uKCl7dmFyIHQ9bS5hcHBseSh0aGlzLGFyZ3VtZW50cyksbj10aGlzLl9fem9vbSxhPW8odCksYz1uLmludmVydChhKSxzPSJmdW5jdGlvbiI9PXR5cGVvZiB1P3UuYXBwbHkodGhpcyxhcmd1bWVudHMpOnU7cmV0dXJuIGkocihlKG4scyksYSxjKSx0KX0pfSxuLnRyYW5zbGF0ZUJ5PWZ1bmN0aW9uKHQsZSxyKXtuLnRyYW5zZm9ybSh0LGZ1bmN0aW9uKCl7cmV0dXJuIGkodGhpcy5fX3pvb20udHJhbnNsYXRlKCJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOmUsImZ1bmN0aW9uIj09dHlwZW9mIHI/ci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ciksbS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSl9LGMucHJvdG90eXBlPXtzdGFydDpmdW5jdGlvbigpe3JldHVybiAxPT09Kyt0aGlzLmFjdGl2ZSYmKHRoaXMuaW5kZXg9QS5wdXNoKHRoaXMpLTEsdGhpcy5lbWl0KCJzdGFydCIpKSx0aGlzfSx6b29tOmZ1bmN0aW9uKHQsbil7cmV0dXJuIHRoaXMubW91c2UmJiJtb3VzZSIhPT10JiYodGhpcy5tb3VzZVsxXT1uLmludmVydCh0aGlzLm1vdXNlWzBdKSksdGhpcy50b3VjaDAmJiJ0b3VjaCIhPT10JiYodGhpcy50b3VjaDBbMV09bi5pbnZlcnQodGhpcy50b3VjaDBbMF0pKSx0aGlzLnRvdWNoMSYmInRvdWNoIiE9PXQmJih0aGlzLnRvdWNoMVsxXT1uLmludmVydCh0aGlzLnRvdWNoMVswXSkpLHRoaXMudGhhdC5fX3pvb209bix0aGlzLmVtaXQoInpvb20iKSx0aGlzfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PS0tdGhpcy5hY3RpdmUmJihBLnNwbGljZSh0aGlzLmluZGV4LDEpLHRoaXMuaW5kZXg9LTEsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbih0KXtTKG5ldyB5cyhuLHQsdGhpcy50aGF0Ll9fem9vbSksQy5hcHBseSxDLFt0LHRoaXMudGhhdCx0aGlzLmFyZ3NdKX19LG4uZmlsdGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6TncoISF0KSxuKTpnfSxuLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ok53KFtbK3RbMF1bMF0sK3RbMF1bMV1dLFsrdFsxXVswXSwrdFsxXVsxXV1dKSxuKTptfSxuLnNjYWxlRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh4PSt0WzBdLGI9K3RbMV0sbik6W3gsYl19LG4udHJhbnNsYXRlRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh3PSt0WzBdWzBdLE09K3RbMV1bMF0sVD0rdFswXVsxXSxOPSt0WzFdWzFdLG4pOltbdyxUXSxbTSxOXV19LG4uZHVyYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGs9K3Qsbik6a30sbi5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oRT10LG4pOkV9LG4ub249ZnVuY3Rpb24oKXt2YXIgdD1DLm9uLmFwcGx5KEMsYXJndW1lbnRzKTtyZXR1cm4gdD09PUM/bjp0fSxufTt0LnZlcnNpb249VHMsdC5iaXNlY3Q9RXMsdC5iaXNlY3RSaWdodD1Fcyx0LmJpc2VjdExlZnQ9QXMsdC5hc2NlbmRpbmc9TnMsdC5iaXNlY3Rvcj1rcyx0LmRlc2NlbmRpbmc9Q3MsdC5kZXZpYXRpb249UnMsdC5leHRlbnQ9cXMsdC5oaXN0b2dyYW09VnMsdC50aHJlc2hvbGRGcmVlZG1hbkRpYWNvbmlzPSRzLHQudGhyZXNob2xkU2NvdHQ9WnMsdC50aHJlc2hvbGRTdHVyZ2VzPVhzLHQubWF4PUdzLHQubWVhbj1Kcyx0Lm1lZGlhbj1Rcyx0Lm1lcmdlPUtzLHQubWluPXRmLHQucGFpcnM9bmYsdC5wZXJtdXRlPWVmLHQucXVhbnRpbGU9V3MsdC5yYW5nZT1Jcyx0LnNjYW49cmYsdC5zaHVmZmxlPW9mLHQuc3VtPXVmLHQudGlja3M9SHMsdC50aWNrU3RlcD1lLHQudHJhbnNwb3NlPWFmLHQudmFyaWFuY2U9UHMsdC56aXA9Y2YsdC5heGlzVG9wPXMsdC5heGlzUmlnaHQ9Zix0LmF4aXNCb3R0b209bCx0LmF4aXNMZWZ0PWgsdC5icnVzaD1tZCx0LmJydXNoWD1FZSx0LmJydXNoWT1BZSx0LmJydXNoU2VsZWN0aW9uPVNlLHQuY2hvcmQ9a2QsdC5yaWJib249UmQsdC5uZXN0PUxkLHQuc2V0PVZlLHQubWFwPUllLHQua2V5cz1EZCx0LnZhbHVlcz1PZCx0LmVudHJpZXM9RmQsdC5jb2xvcj1NdCx0LnJnYj1TdCx0LmhzbD16dCx0LmxhYj1MdCx0LmhjbD1CdCx0LmN1YmVoZWxpeD1YdCx0LmRpc3BhdGNoPXAsdC5kcmFnPXhsLHQuZHJhZ0Rpc2FibGU9Z2wsdC5kcmFnRW5hYmxlPV90LHQuZHN2Rm9ybWF0PUlkLHQuY3N2UGFyc2U9QmQsdC5jc3ZQYXJzZVJvd3M9amQsdC5jc3ZGb3JtYXQ9SGQsdC5jc3ZGb3JtYXRSb3dzPVhkLHQudHN2UGFyc2U9V2QsdC50c3ZQYXJzZVJvd3M9JGQsdC50c3ZGb3JtYXQ9WmQsdC50c3ZGb3JtYXRSb3dzPUdkLHQuZWFzZUxpbmVhcj1uZSx0LmVhc2VRdWFkPWllLHQuZWFzZVF1YWRJbj1lZSx0LmVhc2VRdWFkT3V0PXJlLHQuZWFzZVF1YWRJbk91dD1pZSx0LmVhc2VDdWJpYz1hZSx0LmVhc2VDdWJpY0luPW9lLHQuZWFzZUN1YmljT3V0PXVlLHQuZWFzZUN1YmljSW5PdXQ9YWUsdC5lYXNlUG9seT16cCx0LmVhc2VQb2x5SW49QXAsdC5lYXNlUG9seU91dD1DcCx0LmVhc2VQb2x5SW5PdXQ9enAsdC5lYXNlU2luPWZlLHQuZWFzZVNpbkluPWNlLHQuZWFzZVNpbk91dD1zZSx0LmVhc2VTaW5Jbk91dD1mZSx0LmVhc2VFeHA9cGUsdC5lYXNlRXhwSW49bGUsdC5lYXNlRXhwT3V0PWhlLHQuZWFzZUV4cEluT3V0PXBlLHQuZWFzZUNpcmNsZT1fZSx0LmVhc2VDaXJjbGVJbj1kZSx0LmVhc2VDaXJjbGVPdXQ9dmUsdC5lYXNlQ2lyY2xlSW5PdXQ9X2UsdC5lYXNlQm91bmNlPWdlLHQuZWFzZUJvdW5jZUluPXllLHQuZWFzZUJvdW5jZU91dD1nZSx0LmVhc2VCb3VuY2VJbk91dD1tZSx0LmVhc2VCYWNrPVdwLHQuZWFzZUJhY2tJbj1YcCx0LmVhc2VCYWNrT3V0PVZwLHQuZWFzZUJhY2tJbk91dD1XcCx0LmVhc2VFbGFzdGljPVFwLHQuZWFzZUVsYXN0aWNJbj1KcCx0LmVhc2VFbGFzdGljT3V0PVFwLHQuZWFzZUVsYXN0aWNJbk91dD1LcCx0LmZvcmNlQ2VudGVyPUpkLHQuZm9yY2VDb2xsaWRlPXZ2LHQuZm9yY2VMaW5rPV92LHQuZm9yY2VNYW55Qm9keT14dix0LmZvcmNlU2ltdWxhdGlvbj1tdix0LmZvcmNlWD1idix0LmZvcmNlWT13dix0LmZvcm1hdERlZmF1bHRMb2NhbGU9aHIsdC5mb3JtYXRMb2NhbGU9cXYsdC5mb3JtYXRTcGVjaWZpZXI9enYsdC5wcmVjaXNpb25GaXhlZD1Mdix0LnByZWNpc2lvblByZWZpeD1Vdix0LnByZWNpc2lvblJvdW5kPUR2LHQuZ2VvQXJlYT1qXyx0Lmdlb0JvdW5kcz1WXyx0Lmdlb0NlbnRyb2lkPSRfLHQuZ2VvQ2lyY2xlPXN5LHQuZ2VvQ2xpcEV4dGVudD1feSx0Lmdlb0Rpc3RhbmNlPXd5LHQuZ2VvR3JhdGljdWxlPXZpLHQuZ2VvR3JhdGljdWxlMTA9X2ksdC5nZW9JbnRlcnBvbGF0ZT1NeSx0Lmdlb0xlbmd0aD1teSx0Lmdlb1BhdGg9anksdC5nZW9BbGJlcnM9bmcsdC5nZW9BbGJlcnNVc2E9ZWcsdC5nZW9BemltdXRoYWxFcXVhbEFyZWE9aWcsdC5nZW9BemltdXRoYWxFcXVhbEFyZWFSYXc9cmcsdC5nZW9BemltdXRoYWxFcXVpZGlzdGFudD11Zyx0Lmdlb0F6aW11dGhhbEVxdWlkaXN0YW50UmF3PW9nLHQuZ2VvQ29uaWNDb25mb3JtYWw9Y2csdC5nZW9Db25pY0NvbmZvcm1hbFJhdz1lbyx0Lmdlb0NvbmljRXF1YWxBcmVhPXRnLHQuZ2VvQ29uaWNFcXVhbEFyZWFSYXc9WmksdC5nZW9Db25pY0VxdWlkaXN0YW50PWZnLHQuZ2VvQ29uaWNFcXVpZGlzdGFudFJhdz1pbyx0Lmdlb0VxdWlyZWN0YW5ndWxhcj1zZyx0Lmdlb0VxdWlyZWN0YW5ndWxhclJhdz1ybyx0Lmdlb0dub21vbmljPWxnLHQuZ2VvR25vbW9uaWNSYXc9b28sdC5nZW9JZGVudGl0eT1oZyx0Lmdlb1Byb2plY3Rpb249WGksdC5nZW9Qcm9qZWN0aW9uTXV0YXRvcj1WaSx0Lmdlb01lcmNhdG9yPWFnLHQuZ2VvTWVyY2F0b3JSYXc9S2ksdC5nZW9PcnRob2dyYXBoaWM9cGcsdC5nZW9PcnRob2dyYXBoaWNSYXc9YW8sdC5nZW9TdGVyZW9ncmFwaGljPWRnLHQuZ2VvU3RlcmVvZ3JhcGhpY1Jhdz1jbyx0Lmdlb1RyYW5zdmVyc2VNZXJjYXRvcj12Zyx0Lmdlb1RyYW5zdmVyc2VNZXJjYXRvclJhdz1zbyx0Lmdlb1JvdGF0aW9uPWN5LHQuZ2VvU3RyZWFtPUZfLHQuZ2VvVHJhbnNmb3JtPVp5LHQuY2x1c3Rlcj1fZyx0LmhpZXJhcmNoeT14byx0LnBhY2s9UGcsdC5wYWNrU2libGluZ3M9Q2csdC5wYWNrRW5jbG9zZT1BZyx0LnBhcnRpdGlvbj1MZyx0LnN0cmF0aWZ5PUZnLHQudHJlZT1JZyx0LnRyZWVtYXA9SGcsdC50cmVlbWFwQmluYXJ5PVhnLHQudHJlZW1hcERpY2U9cWcsdC50cmVlbWFwU2xpY2U9WWcsdC50cmVlbWFwU2xpY2VEaWNlPVZnLHQudHJlZW1hcFNxdWFyaWZ5PWpnLHQudHJlZW1hcFJlc3F1YXJpZnk9V2csdC5pbnRlcnBvbGF0ZT1taCx0LmludGVycG9sYXRlQXJyYXk9aGgsdC5pbnRlcnBvbGF0ZUJhc2lzPXVoLHQuaW50ZXJwb2xhdGVCYXNpc0Nsb3NlZD1haCx0LmludGVycG9sYXRlRGF0ZT1waCx0LmludGVycG9sYXRlTnVtYmVyPWRoLHQuaW50ZXJwb2xhdGVPYmplY3Q9dmgsdC5pbnRlcnBvbGF0ZVJvdW5kPXhoLHQuaW50ZXJwb2xhdGVTdHJpbmc9Z2gsdC5pbnRlcnBvbGF0ZVRyYW5zZm9ybUNzcz1UaCx0LmludGVycG9sYXRlVHJhbnNmb3JtU3ZnPU5oLHQuaW50ZXJwb2xhdGVab29tPUNoLHQuaW50ZXJwb2xhdGVSZ2I9c2gsdC5pbnRlcnBvbGF0ZVJnYkJhc2lzPWZoLHQuaW50ZXJwb2xhdGVSZ2JCYXNpc0Nsb3NlZD1saCx0LmludGVycG9sYXRlSHNsPXpoLHQuaW50ZXJwb2xhdGVIc2xMb25nPVBoLHQuaW50ZXJwb2xhdGVMYWI9Zm4sdC5pbnRlcnBvbGF0ZUhjbD1SaCx0LmludGVycG9sYXRlSGNsTG9uZz1xaCx0LmludGVycG9sYXRlQ3ViZWhlbGl4PUxoLHQuaW50ZXJwb2xhdGVDdWJlaGVsaXhMb25nPVVoLHQucXVhbnRpemU9RGgsdC5wYXRoPVJlLHQucG9seWdvbkFyZWE9JGcsdC5wb2x5Z29uQ2VudHJvaWQ9WmcsdC5wb2x5Z29uSHVsbD1KZyx0LnBvbHlnb25Db250YWlucz1RZyx0LnBvbHlnb25MZW5ndGg9S2c7dC5xdWFkdHJlZT1ucjt0LnF1ZXVlPWZ1LHQucmFuZG9tVW5pZm9ybT1lbSx0LnJhbmRvbU5vcm1hbD1ybSx0LnJhbmRvbUxvZ05vcm1hbD1pbSx0LnJhbmRvbUJhdGVzPXVtLHQucmFuZG9tSXJ3aW5IYWxsPW9tLHQucmFuZG9tRXhwb25lbnRpYWw9YW0sdC5yZXF1ZXN0PWNtLHQuaHRtbD1mbSx0Lmpzb249bG0sdC50ZXh0PWhtLHQueG1sPXBtLHQuY3N2PXZtLHQudHN2PV9tLHQuc2NhbGVCYW5kPXZ1LHQuc2NhbGVQb2ludD15dSx0LnNjYWxlSWRlbnRpdHk9U3UsdC5zY2FsZUxpbmVhcj1rdSx0LnNjYWxlTG9nPXF1LHQuc2NhbGVPcmRpbmFsPWR1LHQuc2NhbGVJbXBsaWNpdD14bSx0LnNjYWxlUG93PVV1LHQuc2NhbGVTcXJ0PUR1LHQuc2NhbGVRdWFudGlsZT1PdSx0LnNjYWxlUXVhbnRpemU9RnUsdC5zY2FsZVRocmVzaG9sZD1JdSx0LnNjYWxlVGltZT1WeCx0LnNjYWxlVXRjPVd4LHQuc2NoZW1lQ2F0ZWdvcnkxMD1aeCx0LnNjaGVtZUNhdGVnb3J5MjBiPUd4LHQuc2NoZW1lQ2F0ZWdvcnkyMGM9SngsdC5zY2hlbWVDYXRlZ29yeTIwPVF4LHQuaW50ZXJwb2xhdGVDdWJlaGVsaXhEZWZhdWx0PUt4LHQuaW50ZXJwb2xhdGVSYWluYm93PXJiLHQuaW50ZXJwb2xhdGVXYXJtPXRiLHQuaW50ZXJwb2xhdGVDb29sPW5iLHQuaW50ZXJwb2xhdGVWaXJpZGlzPWliLHQuaW50ZXJwb2xhdGVNYWdtYT1vYix0LmludGVycG9sYXRlSW5mZXJubz11Yix0LmludGVycG9sYXRlUGxhc21hPWFiLHQuc2NhbGVTZXF1ZW50aWFsPSRhLHQuY3JlYXRvcj14Zix0LmxvY2FsPXgsdC5tYXRjaGVyPU5mLHQubW91c2U9emYsdC5uYW1lc3BhY2U9bWYsdC5uYW1lc3BhY2VzPWdmLHQuc2VsZWN0PXBsLHQuc2VsZWN0QWxsPWRsLHQuc2VsZWN0aW9uPWR0LHQuc2VsZWN0b3I9UGYsdC5zZWxlY3RvckFsbD1xZix0LnRvdWNoPXZsLHQudG91Y2hlcz1fbCx0LndpbmRvdz1LZix0LmN1c3RvbUV2ZW50PVMsdC5hcmM9cGIsdC5hcmVhPV9iLHQubGluZT12Yix0LnBpZT1tYix0LnJhZGlhbEFyZWE9d2IsdC5yYWRpYWxMaW5lPWJiLHQuc3ltYm9sPUJiLHQuc3ltYm9scz1ZYix0LnN5bWJvbENpcmNsZT1NYix0LnN5bWJvbENyb3NzPVRiLHQuc3ltYm9sRGlhbW9uZD1TYix0LnN5bWJvbFNxdWFyZT1SYix0LnN5bWJvbFN0YXI9UGIsdC5zeW1ib2xUcmlhbmdsZT1MYix0LnN5bWJvbFd5ZT1JYix0LmN1cnZlQmFzaXNDbG9zZWQ9WGIsdC5jdXJ2ZUJhc2lzT3Blbj1WYix0LmN1cnZlQmFzaXM9SGIsdC5jdXJ2ZUJ1bmRsZT1XYix0LmN1cnZlQ2FyZGluYWxDbG9zZWQ9WmIsdC5jdXJ2ZUNhcmRpbmFsT3Blbj1HYix0LmN1cnZlQ2FyZGluYWw9JGIsdC5jdXJ2ZUNhdG11bGxSb21DbG9zZWQ9UWIsdC5jdXJ2ZUNhdG11bGxSb21PcGVuPUtiLHQuY3VydmVDYXRtdWxsUm9tPUpiLHQuY3VydmVMaW5lYXJDbG9zZWQ9dHcsdC5jdXJ2ZUxpbmVhcj1kYix0LmN1cnZlTW9ub3RvbmVYPUNjLHQuY3VydmVNb25vdG9uZVk9emMsdC5jdXJ2ZU5hdHVyYWw9bncsdC5jdXJ2ZVN0ZXA9ZXcsdC5jdXJ2ZVN0ZXBBZnRlcj1VYyx0LmN1cnZlU3RlcEJlZm9yZT1MYyx0LnN0YWNrPXV3LHQuc3RhY2tPZmZzZXRFeHBhbmQ9YXcsdC5zdGFja09mZnNldE5vbmU9aXcsdC5zdGFja09mZnNldFNpbGhvdWV0dGU9Y3csdC5zdGFja09mZnNldFdpZ2dsZT1zdyx0LnN0YWNrT3JkZXJBc2NlbmRpbmc9ZncsdC5zdGFja09yZGVyRGVzY2VuZGluZz1sdyx0LnN0YWNrT3JkZXJJbnNpZGVPdXQ9aHcsdC5zdGFja09yZGVyTm9uZT1vdyx0LnN0YWNrT3JkZXJSZXZlcnNlPXB3LHQudGltZUludGVydmFsPVl1LHQudGltZU1pbGxpc2Vjb25kPUVtLHQudGltZU1pbGxpc2Vjb25kcz1BbSx0LnV0Y01pbGxpc2Vjb25kPUVtLHQudXRjTWlsbGlzZWNvbmRzPUFtLHQudGltZVNlY29uZD1MbSx0LnRpbWVTZWNvbmRzPVVtLHQudXRjU2Vjb25kPUxtLHQudXRjU2Vjb25kcz1VbSx0LnRpbWVNaW51dGU9RG0sdC50aW1lTWludXRlcz1PbSx0LnRpbWVIb3VyPUZtLHQudGltZUhvdXJzPUltLHQudGltZURheT1ZbSx0LnRpbWVEYXlzPUJtLHQudGltZVdlZWs9am0sdC50aW1lV2Vla3M9R20sdC50aW1lU3VuZGF5PWptLHQudGltZVN1bmRheXM9R20sdC50aW1lTW9uZGF5PUhtLHQudGltZU1vbmRheXM9Sm0sdC50aW1lVHVlc2RheT1YbSx0LnRpbWVUdWVzZGF5cz1RbSx0LnRpbWVXZWRuZXNkYXk9Vm0sdC50aW1lV2VkbmVzZGF5cz1LbSx0LnRpbWVUaHVyc2RheT1XbSx0LnRpbWVUaHVyc2RheXM9dHgsdC50aW1lRnJpZGF5PSRtLHQudGltZUZyaWRheXM9bngsdC50aW1lU2F0dXJkYXk9Wm0sdC50aW1lU2F0dXJkYXlzPWV4LHQudGltZU1vbnRoPXJ4LHQudGltZU1vbnRocz1peCx0LnRpbWVZZWFyPW94LHQudGltZVllYXJzPXV4LHQudXRjTWludXRlPWF4LHQudXRjTWludXRlcz1jeCx0LnV0Y0hvdXI9c3gsdC51dGNIb3Vycz1meCx0LnV0Y0RheT1seCx0LnV0Y0RheXM9aHgsdC51dGNXZWVrPXB4LHQudXRjV2Vla3M9eHgsdC51dGNTdW5kYXk9cHgsdC51dGNTdW5kYXlzPXh4LHQudXRjTW9uZGF5PWR4LHQudXRjTW9uZGF5cz1ieCx0LnV0Y1R1ZXNkYXk9dngsdC51dGNUdWVzZGF5cz13eCx0LnV0Y1dlZG5lc2RheT1feCx0LnV0Y1dlZG5lc2RheXM9TXgsdC51dGNUaHVyc2RheT15eCx0LnV0Y1RodXJzZGF5cz1UeCx0LnV0Y0ZyaWRheT1neCx0LnV0Y0ZyaWRheXM9TngsdC51dGNTYXR1cmRheT1teCx0LnV0Y1NhdHVyZGF5cz1reCx0LnV0Y01vbnRoPVN4LHQudXRjTW9udGhzPUV4LHQudXRjWWVhcj1BeCx0LnV0Y1llYXJzPXp4LHQudGltZUZvcm1hdERlZmF1bHRMb2NhbGU9WWEsdC50aW1lRm9ybWF0TG9jYWxlPVd1LHQuaXNvRm9ybWF0PUR4LHQuaXNvUGFyc2U9T3gsdC5ub3c9cG4sdC50aW1lcj1fbix0LnRpbWVyRmx1c2g9eW4sdC50aW1lb3V0PVdoLHQuaW50ZXJ2YWw9JGgsdC50cmFuc2l0aW9uPUtuLHQuYWN0aXZlPXJkLHQuaW50ZXJydXB0PW9wLHQudm9yb25vaT1Udyx0Lnpvb209RXcsdC56b29tVHJhbnNmb3JtPW1zLHQuem9vbUlkZW50aXR5PWt3LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pOw=="></script>
<script src="data:application/x-javascript;base64,ZDMuc2Fua2V5ID0gZnVuY3Rpb24oKSB7DQogIHZhciBzYW5rZXkgPSB7fSwNCiAgICAgIG5vZGVXaWR0aCA9IDI0LA0KICAgICAgbm9kZVBhZGRpbmcgPSA4LA0KICAgICAgc2l6ZSA9IFsxLCAxXSwNCiAgICAgIG5vZGVzID0gW10sDQogICAgICBsaW5rcyA9IFtdLA0KICAgICAgc2lua3NSaWdodCA9IHRydWU7DQoNCiAgc2Fua2V5Lm5vZGVXaWR0aCA9IGZ1bmN0aW9uKF8pIHsNCiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBub2RlV2lkdGg7DQogICAgbm9kZVdpZHRoID0gK187DQogICAgcmV0dXJuIHNhbmtleTsNCiAgfTsNCg0KICBzYW5rZXkubm9kZVBhZGRpbmcgPSBmdW5jdGlvbihfKSB7DQogICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gbm9kZVBhZGRpbmc7DQogICAgbm9kZVBhZGRpbmcgPSArXzsNCiAgICByZXR1cm4gc2Fua2V5Ow0KICB9Ow0KDQogIHNhbmtleS5ub2RlcyA9IGZ1bmN0aW9uKF8pIHsNCiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBub2RlczsNCiAgICBub2RlcyA9IF87DQogICAgcmV0dXJuIHNhbmtleTsNCiAgfTsNCg0KICBzYW5rZXkubGlua3MgPSBmdW5jdGlvbihfKSB7DQogICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gbGlua3M7DQogICAgbGlua3MgPSBfOw0KICAgIHJldHVybiBzYW5rZXk7DQogIH07DQoNCiAgc2Fua2V5LnNpemUgPSBmdW5jdGlvbihfKSB7DQogICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gc2l6ZTsNCiAgICBzaXplID0gXzsNCiAgICByZXR1cm4gc2Fua2V5Ow0KICB9Ow0KDQogc2Fua2V5LnNpbmtzUmlnaHQgPSBmdW5jdGlvbiAoXykgew0KICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHNpbmtzUmlnaHQ7DQogICAgc2lua3NSaWdodCA9IF87DQogICAgcmV0dXJuIHNhbmtleTsNCiB9Ow0KDQogIHNhbmtleS5sYXlvdXQgPSBmdW5jdGlvbihpdGVyYXRpb25zKSB7DQogICAgY29tcHV0ZU5vZGVMaW5rcygpOw0KICAgIGNvbXB1dGVOb2RlVmFsdWVzKCk7DQogICAgY29tcHV0ZU5vZGVCcmVhZHRocygpOw0KICAgIGNvbXB1dGVOb2RlRGVwdGhzKGl0ZXJhdGlvbnMpOw0KICAgIHJldHVybiBzYW5rZXk7DQogIH07DQoNCiAgc2Fua2V5LnJlbGF5b3V0ID0gZnVuY3Rpb24oKSB7DQogICAgY29tcHV0ZUxpbmtEZXB0aHMoKTsNCiAgICByZXR1cm4gc2Fua2V5Ow0KICB9Ow0KDQogIC8vIFNWRyBwYXRoIGRhdGEgZ2VuZXJhdG9yLCB0byBiZSB1c2VkIGFzICJkIiBhdHRyaWJ1dGUgb24gInBhdGgiIGVsZW1lbnQgc2VsZWN0aW9uLg0KICBzYW5rZXkubGluayA9IGZ1bmN0aW9uKCkgew0KICAgIHZhciBjdXJ2YXR1cmUgPSAuNTsNCg0KICAgIGZ1bmN0aW9uIGxpbmsoZCkgew0KICAgICAgdmFyIHhzID0gZC5zb3VyY2UueCArIGQuc291cmNlLmR4LA0KICAgICAgICAgIHh0ID0gZC50YXJnZXQueCwNCiAgICAgICAgICB4aSA9IGQzLmludGVycG9sYXRlTnVtYmVyKHhzLCB4dCksDQogICAgICAgICAgeHNjID0geGkoY3VydmF0dXJlKSwNCiAgICAgICAgICB4dGMgPSB4aSgxIC0gY3VydmF0dXJlKSwNCiAgICAgICAgICB5cyA9IGQuc291cmNlLnkgKyBkLnN5ICsgZC5keSAvIDIsDQogICAgICAgICAgeXQgPSBkLnRhcmdldC55ICsgZC50eSArIGQuZHkgLyAyOw0KDQogICAgICBpZiAoIWQuY3ljbGVCcmVha2VyKSB7DQogICAgICAgIHJldHVybiAiTSIgKyB4cyArICIsIiArIHlzDQogICAgICAgICAgICAgKyAiQyIgKyB4c2MgKyAiLCIgKyB5cw0KICAgICAgICAgICAgICsgIiAiICsgeHRjICsgIiwiICsgeXQNCiAgICAgICAgICAgICArICIgIiArIHh0ICsgIiwiICsgeXQ7DQogICAgICB9IGVsc2Ugew0KICAgICAgICB2YXIgeGRlbHRhID0gKDEuNSAqIGQuZHkgKyAwLjA1ICogTWF0aC5hYnMoeHMgLSB4dCkpOw0KICAgICAgICB4c2MgPSB4cyArIHhkZWx0YTsNCiAgICAgICAgeHRjID0geHQgLSB4ZGVsdGE7DQogICAgICAgIHZhciB4bSA9IHhpKDAuNSk7DQogICAgICAgIHZhciB5bSA9IGQzLmludGVycG9sYXRlTnVtYmVyKHlzLCB5dCkoMC41KTsNCiAgICAgICAgdmFyIHlkZWx0YSA9ICgyICogZC5keSArIDAuMSAqIE1hdGguYWJzKHhzIC0geHQpICsgMC4xICogTWF0aC5hYnMoeXMgLSB5dCkpICogKHltIDwgKHNpemVbMV0gLyAyKSA/IC0xIDogMSk7DQogICAgICAgIHJldHVybiAiTSIgKyB4cyArICIsIiArIHlzDQogICAgICAgICAgICAgKyAiQyIgKyB4c2MgKyAiLCIgKyB5cw0KICAgICAgICAgICAgICsgIiAiICsgeHNjICsgIiwiICsgKHlzICsgeWRlbHRhKQ0KICAgICAgICAgICAgICsgIiAiICsgeG0gKyAiLCIgKyAoeW0gKyB5ZGVsdGEpDQogICAgICAgICAgICAgKyAiUyIgKyB4dGMgKyAiLCIgKyB5dA0KICAgICAgICAgICAgICsgIiAiICsgeHQgKyAiLCIgKyB5dDsNCg0KICAgICAgfQ0KICAgIH0NCg0KICAgIGxpbmsuY3VydmF0dXJlID0gZnVuY3Rpb24oXykgew0KICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gY3VydmF0dXJlOw0KICAgICAgY3VydmF0dXJlID0gK187DQogICAgICByZXR1cm4gbGluazsNCiAgICB9Ow0KDQogICAgcmV0dXJuIGxpbms7DQogIH07DQoNCiAgLy8gUG9wdWxhdGUgdGhlIHNvdXJjZUxpbmtzIGFuZCB0YXJnZXRMaW5rcyBmb3IgZWFjaCBub2RlLg0KICAvLyBBbHNvLCBpZiB0aGUgc291cmNlIGFuZCB0YXJnZXQgYXJlIG5vdCBvYmplY3RzLCBhc3N1bWUgdGhleSBhcmUgaW5kaWNlcy4NCiAgZnVuY3Rpb24gY29tcHV0ZU5vZGVMaW5rcygpIHsNCiAgICBub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKG5vZGUpIHsNCiAgICAgIC8vIExpbmtzIHRoYXQgaGF2ZSB0aGlzIG5vZGUgYXMgc291cmNlLg0KICAgICAgbm9kZS5zb3VyY2VMaW5rcyA9IFtdOw0KICAgICAgLy8gTGlua3MgdGhhdCBoYXZlIHRoaXMgbm9kZSBhcyB0YXJnZXQuDQogICAgICBub2RlLnRhcmdldExpbmtzID0gW107DQogICAgfSk7DQogICAgbGlua3MuZm9yRWFjaChmdW5jdGlvbihsaW5rKSB7DQogICAgICB2YXIgc291cmNlID0gbGluay5zb3VyY2UsDQogICAgICAgICAgdGFyZ2V0ID0gbGluay50YXJnZXQ7DQogICAgICBpZiAodHlwZW9mIHNvdXJjZSA9PT0gIm51bWJlciIpIHNvdXJjZSA9IGxpbmsuc291cmNlID0gbm9kZXNbbGluay5zb3VyY2VdOw0KICAgICAgaWYgKHR5cGVvZiB0YXJnZXQgPT09ICJudW1iZXIiKSB0YXJnZXQgPSBsaW5rLnRhcmdldCA9IG5vZGVzW2xpbmsudGFyZ2V0XTsNCiAgICAgIHNvdXJjZS5zb3VyY2VMaW5rcy5wdXNoKGxpbmspOw0KICAgICAgdGFyZ2V0LnRhcmdldExpbmtzLnB1c2gobGluayk7DQogICAgfSk7DQogIH0NCg0KICAvLyBDb21wdXRlIHRoZSB2YWx1ZSAoc2l6ZSkgb2YgZWFjaCBub2RlIGJ5IHN1bW1pbmcgdGhlIGFzc29jaWF0ZWQgbGlua3MuDQogIGZ1bmN0aW9uIGNvbXB1dGVOb2RlVmFsdWVzKCkgew0KICAgIG5vZGVzLmZvckVhY2goZnVuY3Rpb24obm9kZSkgew0KICAgICAgbm9kZS52YWx1ZSA9IE1hdGgubWF4KA0KICAgICAgICBkMy5zdW0obm9kZS5zb3VyY2VMaW5rcywgdmFsdWUpLA0KICAgICAgICBkMy5zdW0obm9kZS50YXJnZXRMaW5rcywgdmFsdWUpDQogICAgICApOw0KICAgIH0pOw0KICB9DQoNCiAgLy8gSXRlcmF0aXZlbHkgYXNzaWduIHRoZSBicmVhZHRoICh4LXBvc2l0aW9uKSBmb3IgZWFjaCBub2RlLg0KICAvLyBOb2RlcyBhcmUgYXNzaWduZWQgdGhlIG1heGltdW0gYnJlYWR0aCBvZiBpbmNvbWluZyBuZWlnaGJvcnMgcGx1cyBvbmU7DQogIC8vIG5vZGVzIHdpdGggbm8gaW5jb21pbmcgbGlua3MgYXJlIGFzc2lnbmVkIGJyZWFkdGggemVybywgd2hpbGUNCiAgLy8gbm9kZXMgd2l0aCBubyBvdXRnb2luZyBsaW5rcyBhcmUgYXNzaWduZWQgdGhlIG1heGltdW0gYnJlYWR0aC4NCiAgZnVuY3Rpb24gY29tcHV0ZU5vZGVCcmVhZHRocygpIHsNCiAgICB2YXIgcmVtYWluaW5nTm9kZXMgPSBub2RlcywNCiAgICAgICAgbmV4dE5vZGVzLA0KICAgICAgICB4ID0gMDsNCg0KICAgIC8vIFdvcmsgZnJvbSBsZWZ0IHRvIHJpZ2h0Lg0KICAgIC8vIEtlZXAgdXBkYXRpbmcgdGhlIGJyZWF0aCAoeC1wb3NpdGlvbikgb2Ygbm9kZXMgdGhhdCBhcmUgdGFyZ2V0IG9mIHJlY2VudGx5IHVwZGF0ZWQgbm9kZXMuDQogICAgd2hpbGUgKHJlbWFpbmluZ05vZGVzLmxlbmd0aCAmJiB4IDwgbm9kZXMubGVuZ3RoKSB7DQogICAgICBuZXh0Tm9kZXMgPSBbXTsNCiAgICAgIHJlbWFpbmluZ05vZGVzLmZvckVhY2goZnVuY3Rpb24obm9kZSkgew0KICAgICAgICBub2RlLnggPSB4Ow0KICAgICAgICBub2RlLmR4ID0gbm9kZVdpZHRoOw0KICAgICAgICBub2RlLnNvdXJjZUxpbmtzLmZvckVhY2goZnVuY3Rpb24obGluaykgew0KICAgICAgICAgIGlmIChuZXh0Tm9kZXMuaW5kZXhPZihsaW5rLnRhcmdldCkgPCAwICYmICFsaW5rLmN5Y2xlQnJlYWtlcikgew0KICAgICAgICAgICAgbmV4dE5vZGVzLnB1c2gobGluay50YXJnZXQpOw0KICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICB9KTsNCiAgICAgIGlmIChuZXh0Tm9kZXMubGVuZ3RoID09IHJlbWFpbmluZ05vZGVzLmxlbmd0aCkgew0KICAgICAgICAvLyBUaGVyZSBtdXN0IGJlIGEgY3ljbGUgaGVyZS4gTGV0J3Mgc2VhcmNoIGZvciBhIGxpbmsgdGhhdCBicmVha3MgaXQuDQogICAgICAgIGZpbmRBbmRNYXJrQ3ljbGVCcmVha2VyKG5leHROb2Rlcyk7DQogICAgICAgIC8vIFN0YXJ0IG92ZXIuDQogICAgICAgIC8vIFRPRE86IG1ha2UgdGhpcyBvcHRpb25hbD8NCiAgICAgICAgcmV0dXJuIGNvbXB1dGVOb2RlQnJlYWR0aHMoKTsNCiAgICAgIH0NCiAgICAgIGVsc2Ugew0KICAgICAgICByZW1haW5pbmdOb2RlcyA9IG5leHROb2RlczsNCiAgICAgICAgKyt4Ow0KICAgICAgfQ0KICAgIH0NCg0KICAgIC8vIE9wdGlvbmFsbHkgbW92ZSBwdXJlIHNpbmtzIGFsd2F5cyB0byB0aGUgcmlnaHQsIGFuZCBzY2FsZSBub2RlIGJyZWFkdGhzDQogICAgaWYgKHNpbmtzUmlnaHQpIHsNCiAgICAgIG1vdmVTaW5rc1JpZ2h0KHgpOw0KICAgICAgc2NhbGVOb2RlQnJlYWR0aHMoKHNpemVbMF0gLSBub2RlV2lkdGgpIC8gKHggLSAxKSk7DQogICAgfSBlbHNlIHsNCiAgICAgIHNjYWxlTm9kZUJyZWFkdGhzKChzaXplWzBdIC0gbm9kZVdpZHRoKSAvIHgpOw0KICAgIH0NCg0KICAgIA0KICB9DQoNCiAgLy8gRmluZCBhIGxpbmsgdGhhdCBicmVha3MgYSBjeWNsZSBpbiB0aGUgZ3JhcGggKGlmIGFueSkuDQogIGZ1bmN0aW9uIGZpbmRBbmRNYXJrQ3ljbGVCcmVha2VyKG5vZGVzKSB7DQogIC8vIEdvIHRocm91Z2ggYWxsIG5vZGVzIGZyb20gdGhlIGdpdmVuIHN1YnNldCBhbmQgdHJhdmVyc2UgbGlua3Mgc2VhcmNoaW5nIGZvciBjeWNsZXMuDQogICAgdmFyIGxpbms7DQogICAgZm9yICh2YXIgbj1ub2Rlcy5sZW5ndGggLSAxOyBuID49IDA7IG4tLSkgew0KICAgICAgbGluayA9IGRlcHRoRmlyc3RDeWNsZVNlYXJjaChub2Rlc1tuXSwgW10pOw0KICAgICAgaWYgKGxpbmspIHsNCiAgICAgICAgcmV0dXJuIGxpbms7DQogICAgICB9DQogICAgfQ0KDQogICAgLy8gRGVwdGgtZmlyc3Qgc2VhcmNoIHRvIGZpbmQgYSBsaW5rIHRoYXQgaXMgcGFydCBvZiBhIGN5Y2xlLg0KICAgIGZ1bmN0aW9uIGRlcHRoRmlyc3RDeWNsZVNlYXJjaChjdXJzb3JOb2RlLCBwYXRoKSB7DQogICAgICB2YXIgdGFyZ2V0LCBsaW5rOw0KICAgICAgZm9yICh2YXIgbiA9IGN1cnNvck5vZGUuc291cmNlTGlua3MubGVuZ3RoIC0gMTsgbiA+PSAwOyBuLS0pIHsNCiAgICAgICAgbGluayA9IGN1cnNvck5vZGUuc291cmNlTGlua3Nbbl07DQogICAgICAgIGlmIChsaW5rLmN5Y2xlQnJlYWtlcikgew0KICAgICAgICAgIC8vIFNraXAgYWxyZWFkeSBrbm93biBjeWNsZSBicmVha2Vycy4NCiAgICAgICAgICBjb250aW51ZTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8vIENoZWNrIGlmIHRhcmdldCBvZiBsaW5rIG1ha2VzIGEgY3ljbGUgaW4gY3VycmVudCBwYXRoLg0KICAgICAgICB0YXJnZXQgPSBsaW5rLnRhcmdldDsNCiAgICAgICAgZm9yICh2YXIgbCA9IDA7IGwgPCBwYXRoLmxlbmd0aDsgbCsrKSB7DQogICAgICAgICAgaWYgKHBhdGhbbF0uc291cmNlID09IHRhcmdldCkgew0KICAgICAgICAgICAgLy8gV2UgZm91bmQgYSBjeWNsZS4gU2VhcmNoIGZvciB3ZWFrZXN0IGxpbmsgaW4gY3ljbGUNCiAgICAgICAgICAgIHZhciB3ZWFrZXN0ID0gbGluazsNCiAgICAgICAgICAgIGZvciAoOyBsIDwgcGF0aC5sZW5ndGg7IGwrKykgew0KICAgICAgICAgICAgICBpZiAocGF0aFtsXS52YWx1ZSA8IHdlYWtlc3QudmFsdWUpIHsNCiAgICAgICAgICAgICAgICB3ZWFrZXN0ID0gcGF0aFtsXTsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgLy8gTWFyayB3ZWFrZXN0IGxpbmsgYXMgKGtub3duKSBjeWNsZSBicmVha2VyIGFuZCBhYm9ydCBzZWFyY2guDQogICAgICAgICAgICB3ZWFrZXN0LmN5Y2xlQnJlYWtlciA9IHRydWU7DQogICAgICAgICAgICByZXR1cm4gd2Vha2VzdDsNCiAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICAvLyBSZWN1cnNlIGRlZXBlci4NCiAgICAgICAgcGF0aC5wdXNoKGxpbmspOw0KICAgICAgICBsaW5rID0gZGVwdGhGaXJzdEN5Y2xlU2VhcmNoKHRhcmdldCwgcGF0aCk7DQogICAgICAgIHBhdGgucG9wKCk7DQogICAgICAgIC8vIFN0b3AgZnVydGhlciBzZWFyY2ggaWYgd2UgZm91bmQgYSBjeWNsZSBicmVha2VyLg0KICAgICAgICBpZiAobGluaykgew0KICAgICAgICAgIHJldHVybiBsaW5rOw0KICAgICAgICB9DQogICAgICB9DQogICAgfQ0KICB9DQoNCg0KICBmdW5jdGlvbiBtb3ZlU291cmNlc1JpZ2h0KCkgew0KICAgIG5vZGVzLmZvckVhY2goZnVuY3Rpb24obm9kZSkgew0KICAgICAgaWYgKCFub2RlLnRhcmdldExpbmtzLmxlbmd0aCkgew0KICAgICAgICBub2RlLnggPSBkMy5taW4obm9kZS5zb3VyY2VMaW5rcywgZnVuY3Rpb24oZCkgeyByZXR1cm4gZC50YXJnZXQueDsgfSkgLSAxOw0KICAgICAgfQ0KICAgIH0pOw0KICB9DQoNCiAgZnVuY3Rpb24gbW92ZVNpbmtzUmlnaHQoeCkgew0KICAgIG5vZGVzLmZvckVhY2goZnVuY3Rpb24obm9kZSkgew0KICAgICAgaWYgKCFub2RlLnNvdXJjZUxpbmtzLmxlbmd0aCkgew0KICAgICAgICBub2RlLnggPSB4IC0gMTsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIC8vbW92ZSBub2RlIHRvIHNlY29uZCBmcm9tIHJpZ2h0IA0KICAgICAgICB2YXIgbm9kZXNfdG9fcmlnaHQgPSAwOw0KICAgICAgICBub2RlLnNvdXJjZUxpbmtzLmZvckVhY2goZnVuY3Rpb24obikgew0KICAgICAgICAgIG5vZGVzX3RvX3JpZ2h0ID0gTWF0aC5tYXgobm9kZXNfdG9fcmlnaHQsbi50YXJnZXQuc291cmNlTGlua3MubGVuZ3RoKQ0KICAgICAgICAgIC8vY29uc29sZS5sb2cobm9kZS5uYW1lLG4pDQogICAgICAgIH0pDQogICAgICAgICAvL2NvbnNvbGUubG9nKG5vZGUubmFtZSxub2Rlc190b19yaWdodCkNCiAgICAgICAgIGlmIChub2Rlc190b19yaWdodD09MClub2RlLnggPSB4IC0gMjsNCiAgICAgIH0NCiAgICAgIA0KICAgIH0pOw0KICB9DQoNCiAgZnVuY3Rpb24gc2NhbGVOb2RlQnJlYWR0aHMoa3gpIHsNCiAgICBub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKG5vZGUpIHsNCiAgICAgIG5vZGUueCAqPSBreDsNCiAgICB9KTsNCiAgfQ0KDQogIC8vIENvbXB1dGUgdGhlIGRlcHRoICh5LXBvc2l0aW9uKSBmb3IgZWFjaCBub2RlLg0KICBmdW5jdGlvbiBjb21wdXRlTm9kZURlcHRocyhpdGVyYXRpb25zKSB7DQogICAgLy8gR3JvdXAgbm9kZXMgYnkgYnJlYXRoLg0KICAgIHZhciBub2Rlc0J5QnJlYWR0aCA9IGQzLm5lc3QoKQ0KICAgICAgICAua2V5KGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGQueDsgfSkNCiAgICAgICAgLnNvcnRLZXlzKGQzLmFzY2VuZGluZykNCiAgICAgICAgLmVudHJpZXMobm9kZXMpDQogICAgICAgIC5tYXAoZnVuY3Rpb24oZCkgeyByZXR1cm4gZC52YWx1ZXM7IH0pOw0KDQogICAgLy8NCiAgICBpbml0aWFsaXplTm9kZURlcHRoKCk7DQogICAgcmVzb2x2ZUNvbGxpc2lvbnMoKTsNCiAgICBjb21wdXRlTGlua0RlcHRocygpOw0KICAgIGZvciAodmFyIGFscGhhID0gMTsgaXRlcmF0aW9ucyA+IDA7IC0taXRlcmF0aW9ucykgew0KICAgICAgcmVsYXhSaWdodFRvTGVmdChhbHBoYSAqPSAuOTkpOw0KICAgICAgcmVzb2x2ZUNvbGxpc2lvbnMoKTsNCiAgICAgIGNvbXB1dGVMaW5rRGVwdGhzKCk7DQogICAgICByZWxheExlZnRUb1JpZ2h0KGFscGhhKTsNCiAgICAgIHJlc29sdmVDb2xsaXNpb25zKCk7DQogICAgICBjb21wdXRlTGlua0RlcHRocygpOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGluaXRpYWxpemVOb2RlRGVwdGgoKSB7DQogICAgICAvLyBDYWxjdWxhdGUgdmVydGljYWwgc2NhbGluZyBmYWN0b3IuDQogICAgICB2YXIga3kgPSBkMy5taW4obm9kZXNCeUJyZWFkdGgsIGZ1bmN0aW9uKG5vZGVzKSB7DQogICAgICAgIHJldHVybiAoc2l6ZVsxXSAtIChub2Rlcy5sZW5ndGggLSAxKSAqIG5vZGVQYWRkaW5nKSAvIGQzLnN1bShub2RlcywgdmFsdWUpOw0KICAgICAgfSk7DQoNCiAgICAgIG5vZGVzQnlCcmVhZHRoLmZvckVhY2goZnVuY3Rpb24obm9kZXMpIHsNCiAgICAgICAgbm9kZXMuZm9yRWFjaChmdW5jdGlvbihub2RlLCBpKSB7DQogICAgICAgICAgbm9kZS55ID0gaTsNCiAgICAgICAgICBub2RlLmR5ID0gbm9kZS52YWx1ZSAqIGt5Ow0KICAgICAgICB9KTsNCiAgICAgIH0pOw0KDQogICAgICBsaW5rcy5mb3JFYWNoKGZ1bmN0aW9uKGxpbmspIHsNCiAgICAgICAgbGluay5keSA9IGxpbmsudmFsdWUgKiBreTsNCiAgICAgIH0pOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIHJlbGF4TGVmdFRvUmlnaHQoYWxwaGEpIHsNCiAgICAgIG5vZGVzQnlCcmVhZHRoLmZvckVhY2goZnVuY3Rpb24obm9kZXMsIGJyZWFkdGgpIHsNCiAgICAgICAgbm9kZXMuZm9yRWFjaChmdW5jdGlvbihub2RlKSB7DQogICAgICAgICAgaWYgKG5vZGUudGFyZ2V0TGlua3MubGVuZ3RoKSB7DQogICAgICAgICAgICAvLyBWYWx1ZS13ZWlnaHRlZCBhdmVyYWdlIG9mIHRoZSB5LXBvc2l0aW9uIG9mIHNvdXJjZSBub2RlIGNlbnRlcnMgbGlua2VkIHRvIHRoaXMgbm9kZS4NCiAgICAgICAgICAgIHZhciB5ID0gZDMuc3VtKG5vZGUudGFyZ2V0TGlua3MsIHdlaWdodGVkU291cmNlKSAvIGQzLnN1bShub2RlLnRhcmdldExpbmtzLCB2YWx1ZSk7DQogICAgICAgICAgICBub2RlLnkgKz0gKHkgLSBjZW50ZXIobm9kZSkpICogYWxwaGE7DQogICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICAgIH0pOw0KDQogICAgICBmdW5jdGlvbiB3ZWlnaHRlZFNvdXJjZShsaW5rKSB7DQogICAgICAgIHJldHVybiAobGluay5zb3VyY2UueSArIGxpbmsuc3kgKyBsaW5rLmR5IC8gMikgKiBsaW5rLnZhbHVlOw0KICAgICAgfQ0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIHJlbGF4UmlnaHRUb0xlZnQoYWxwaGEpIHsNCiAgICAgIG5vZGVzQnlCcmVhZHRoLnNsaWNlKCkucmV2ZXJzZSgpLmZvckVhY2goZnVuY3Rpb24obm9kZXMpIHsNCiAgICAgICAgbm9kZXMuZm9yRWFjaChmdW5jdGlvbihub2RlKSB7DQogICAgICAgICAgaWYgKG5vZGUuc291cmNlTGlua3MubGVuZ3RoKSB7DQogICAgICAgICAgICAvLyBWYWx1ZS13ZWlnaHRlZCBhdmVyYWdlIG9mIHRoZSB5LXBvc2l0aW9ucyBvZiB0YXJnZXQgbm9kZXMgbGlua2VkIHRvIHRoaXMgbm9kZS4NCiAgICAgICAgICAgIHZhciB5ID0gZDMuc3VtKG5vZGUuc291cmNlTGlua3MsIHdlaWdodGVkVGFyZ2V0KSAvIGQzLnN1bShub2RlLnNvdXJjZUxpbmtzLCB2YWx1ZSk7DQogICAgICAgICAgICBub2RlLnkgKz0gKHkgLSBjZW50ZXIobm9kZSkpICogYWxwaGE7DQogICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICAgIH0pOw0KDQogICAgICBmdW5jdGlvbiB3ZWlnaHRlZFRhcmdldChsaW5rKSB7DQogICAgICAgIHJldHVybiAobGluay50YXJnZXQueSArIGxpbmsudHkgKyBsaW5rLmR5IC8gMikgKiBsaW5rLnZhbHVlOw0KICAgICAgfQ0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIHJlc29sdmVDb2xsaXNpb25zKCkgew0KICAgICAgbm9kZXNCeUJyZWFkdGguZm9yRWFjaChmdW5jdGlvbihub2Rlcykgew0KICAgICAgICB2YXIgbm9kZSwNCiAgICAgICAgICAgIGR5LA0KICAgICAgICAgICAgeTAgPSAwLA0KICAgICAgICAgICAgbiA9IG5vZGVzLmxlbmd0aCwNCiAgICAgICAgICAgIGk7DQoNCiAgICAgICAgLy8gUHVzaCBhbnkgb3ZlcmxhcHBpbmcgbm9kZXMgZG93bi4NCiAgICAgICAgbm9kZXMuc29ydChhc2NlbmRpbmdEZXB0aCk7DQogICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHsNCiAgICAgICAgICBub2RlID0gbm9kZXNbaV07DQogICAgICAgICAgZHkgPSB5MCAtIG5vZGUueTsNCiAgICAgICAgICBpZiAoZHkgPiAwKSBub2RlLnkgKz0gZHk7DQogICAgICAgICAgeTAgPSBub2RlLnkgKyBub2RlLmR5ICsgbm9kZVBhZGRpbmc7DQogICAgICAgIH0NCg0KICAgICAgICAvLyBJZiB0aGUgYm90dG9tbW9zdCBub2RlIGdvZXMgb3V0c2lkZSB0aGUgYm91bmRzLCBwdXNoIGl0IGJhY2sgdXAuDQogICAgICAgIGR5ID0geTAgLSBub2RlUGFkZGluZyAtIHNpemVbMV07DQogICAgICAgIGlmIChkeSA+IDApIHsNCiAgICAgICAgICB5MCA9IG5vZGUueSAtPSBkeTsNCg0KICAgICAgICAgIC8vIFB1c2ggYW55IG92ZXJsYXBwaW5nIG5vZGVzIGJhY2sgdXAuDQogICAgICAgICAgZm9yIChpID0gbiAtIDI7IGkgPj0gMDsgLS1pKSB7DQogICAgICAgICAgICBub2RlID0gbm9kZXNbaV07DQogICAgICAgICAgICBkeSA9IG5vZGUueSArIG5vZGUuZHkgKyBub2RlUGFkZGluZyAtIHkwOw0KICAgICAgICAgICAgaWYgKGR5ID4gMCkgbm9kZS55IC09IGR5Ow0KICAgICAgICAgICAgeTAgPSBub2RlLnk7DQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICB9KTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBhc2NlbmRpbmdEZXB0aChhLCBiKSB7DQogICAgICByZXR1cm4gYS55IC0gYi55Ow0KICAgIH0NCiAgfQ0KDQogIC8vIENvbXB1dGUgeS1vZmZzZXQgb2YgdGhlIHNvdXJjZSBlbmRwb2ludCAoc3kpIGFuZCB0YXJnZXQgZW5kcG9pbnRzICh0eSkgb2YgbGlua3MsDQogIC8vIHJlbGF0aXZlIHRvIHRoZSBzb3VyY2UvdGFyZ2V0IG5vZGUncyB5LXBvc2l0aW9uLg0KICBmdW5jdGlvbiBjb21wdXRlTGlua0RlcHRocygpIHsNCiAgICBub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKG5vZGUpIHsNCiAgICAgIG5vZGUuc291cmNlTGlua3Muc29ydChhc2NlbmRpbmdUYXJnZXREZXB0aCk7DQogICAgICBub2RlLnRhcmdldExpbmtzLnNvcnQoYXNjZW5kaW5nU291cmNlRGVwdGgpOw0KICAgIH0pOw0KICAgIG5vZGVzLmZvckVhY2goZnVuY3Rpb24obm9kZSkgew0KICAgICAgdmFyIHN5ID0gMCwgdHkgPSAwOw0KICAgICAgbm9kZS5zb3VyY2VMaW5rcy5mb3JFYWNoKGZ1bmN0aW9uKGxpbmspIHsNCiAgICAgICAgbGluay5zeSA9IHN5Ow0KICAgICAgICBzeSArPSBsaW5rLmR5Ow0KICAgICAgfSk7DQogICAgICBub2RlLnRhcmdldExpbmtzLmZvckVhY2goZnVuY3Rpb24obGluaykgew0KICAgICAgICBsaW5rLnR5ID0gdHk7DQogICAgICAgIHR5ICs9IGxpbmsuZHk7DQogICAgICB9KTsNCiAgICB9KTsNCg0KICAgIGZ1bmN0aW9uIGFzY2VuZGluZ1NvdXJjZURlcHRoKGEsIGIpIHsNCiAgICAgIHJldHVybiBhLnNvdXJjZS55IC0gYi5zb3VyY2UueTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBhc2NlbmRpbmdUYXJnZXREZXB0aChhLCBiKSB7DQogICAgICByZXR1cm4gYS50YXJnZXQueSAtIGIudGFyZ2V0Lnk7DQogICAgfQ0KICB9DQoNCiAgLy8gWS1wb3NpdGlvbiBvZiB0aGUgbWlkZGxlIG9mIGEgbm9kZS4NCiAgZnVuY3Rpb24gY2VudGVyKG5vZGUpIHsNCiAgICByZXR1cm4gbm9kZS55ICsgbm9kZS5keSAvIDI7DQogIH0NCg0KICAvLyBWYWx1ZSBwcm9wZXJ0eSBhY2Nlc3Nvci4NCiAgZnVuY3Rpb24gdmFsdWUoeCkgew0KICAgIHJldHVybiB4LnZhbHVlOw0KICB9DQoNCiAgcmV0dXJuIHNhbmtleTsNCn07"></script>
<script src="data:application/x-javascript;base64,SFRNTFdpZGdldHMud2lkZ2V0KHsNCg0KICAgIG5hbWU6ICJzYW5rZXlOZXR3b3JrIiwNCg0KICAgIHR5cGU6ICJvdXRwdXQiLA0KDQogICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oZWwsIHdpZHRoLCBoZWlnaHQpIHsNCg0KICAgICAgICBkMy5zZWxlY3QoZWwpLmFwcGVuZCgic3ZnIikNCiAgICAgICAgICAgIC5zdHlsZSgid2lkdGgiLCAiMTAwJSIpDQogICAgICAgICAgICAuc3R5bGUoImhlaWdodCIsICIxMDAlIik7DQoNCiAgICAgICAgcmV0dXJuIHsNCiAgICAgICAgICBzYW5rZXk6IGQzLnNhbmtleSgpLA0KICAgICAgICAgIHg6IG51bGwNCiAgICAgICAgfTsNCiAgICB9LA0KDQogICAgcmVzaXplOiBmdW5jdGlvbihlbCwgd2lkdGgsIGhlaWdodCwgaW5zdGFuY2UpIHsNCiAgICAgICAgLyogIGhhbmRsZSByZXNpemluZyBub3cgdGhyb3VnaCB0aGUgdmlld0JveA0KICAgICAgICBkMy5zZWxlY3QoZWwpLnNlbGVjdCgic3ZnIikNCiAgICAgICAgICAgIC5hdHRyKCJ3aWR0aCIsIHdpZHRoKQ0KICAgICAgICAgICAgLmF0dHIoImhlaWdodCIsIGhlaWdodCArIGhlaWdodCAqIDAuMDUpOw0KDQogICAgICAgIHRoaXMucmVuZGVyVmFsdWUoZWwsIGluc3RhbmNlLngsIGluc3RhbmNlKTsNCiAgICAgICAgKi8NCiAgICAgICAgDQogICAgICAgIC8vIHdpdGggZmxleGRhc2hib2FyZCBhbmQgc2xpZGVzDQogICAgICAgIC8vICAgc2Fua2V5IG1pZ2h0IGJlIGhpZGRlbiBzbyBoZWlnaHQgYW5kIHdpZHRoIDANCiAgICAgICAgLy8gICBpbiB0aGlzIGluc3RhbmNlIHJlLXJlbmRlciBvbiByZXNpemUNCiAgICAgICAgaWYoIGQzLm1pbihpbnN0YW5jZS5zYW5rZXkuc2l6ZSgpKSA8PSAwICkgew0KICAgICAgICAgIHRoaXMucmVuZGVyVmFsdWUoZWwsIGluc3RhbmNlLngsIGluc3RhbmNlKTsNCiAgICAgICAgfQ0KICAgIH0sDQoNCiAgICByZW5kZXJWYWx1ZTogZnVuY3Rpb24oZWwsIHgsIGluc3RhbmNlKSB7DQoNCiAgICAgICAgLy8gc2F2ZSB0aGUgeCBpbiBvdXIgaW5zdGFuY2UgKGZvciBjYWxsaW5nIGJhY2sgZnJvbSByZXNpemUpDQogICAgICAgIGluc3RhbmNlLnggPSB4Ow0KDQogICAgICAgIC8vIGFsaWFzIHNhbmtleSBhbmQgb3B0aW9ucw0KICAgICAgICB2YXIgc2Fua2V5ID0gaW5zdGFuY2Uuc2Fua2V5Ow0KICAgICAgICB2YXIgb3B0aW9ucyA9IHgub3B0aW9uczsNCg0KICAgICAgICAvLyBjb252ZXJ0IGxpbmtzIGFuZCBub2RlcyBkYXRhIGZyYW1lcyB0byBkMyBmcmllbmRseSBmb3JtYXQNCiAgICAgICAgdmFyIGxpbmtzID0gSFRNTFdpZGdldHMuZGF0YWZyYW1lVG9EMyh4LmxpbmtzKTsNCiAgICAgICAgdmFyIG5vZGVzID0gSFRNTFdpZGdldHMuZGF0YWZyYW1lVG9EMyh4Lm5vZGVzKTsNCg0KDQogICAgICAgIC8vIG1hcmdpbiBoYW5kbGluZw0KICAgICAgICAvLyAgIHNldCBvdXIgZGVmYXVsdCBtYXJnaW4gdG8gYmUgMjANCiAgICAgICAgLy8gICB3aWxsIG92ZXJyaWRlIHdpdGggeC5vcHRpb25zLm1hcmdpbiBpZiBwcm92aWRlZA0KICAgICAgICB2YXIgbWFyZ2luID0ge3RvcDogMjAsIHJpZ2h0OiAyMCwgYm90dG9tOiAyMCwgbGVmdDogMjB9Ow0KICAgICAgICAvLyAgIGdvIHRocm91Z2ggZWFjaCBrZXkgb2YgeC5vcHRpb25zLm1hcmdpbg0KICAgICAgICAvLyAgIHVzZSB0aGlzIHZhbHVlIGlmIHByb3ZpZGVkIGZyb20gdGhlIFIgc2lkZQ0KICAgICAgICBPYmplY3Qua2V5cyh4Lm9wdGlvbnMubWFyZ2luKS5tYXAoZnVuY3Rpb24oa3kpew0KICAgICAgICAgIGlmKHgub3B0aW9ucy5tYXJnaW5ba3ldICE9PSBudWxsKSB7DQogICAgICAgICAgICBtYXJnaW5ba3ldID0geC5vcHRpb25zLm1hcmdpbltreV07DQogICAgICAgICAgfQ0KICAgICAgICAgIC8vIHNldCB0aGUgbWFyZ2luIG9uIHRoZSBzdmcgd2l0aCBjc3Mgc3R5bGUNCiAgICAgICAgICAvLyBjb21tZW50aW5nIHRoaXMgb3V0IHNpbmNlIG5vdCBjb3JyZWN0DQogICAgICAgICAgLy8gcy5zdHlsZShbIm1hcmdpbiIsa3ldLmpvaW4oIi0iKSwgbWFyZ2luW2t5XSk7DQogICAgICAgIH0pOw0KDQogICAgICAgIC8vIGdldCB0aGUgd2lkdGggYW5kIGhlaWdodA0KICAgICAgICB2YXIgd2lkdGggPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCAtIG1hcmdpbi5yaWdodCAtIG1hcmdpbi5sZWZ0Ow0KICAgICAgICB2YXIgaGVpZ2h0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0IC0gbWFyZ2luLnRvcCAtIG1hcmdpbi5ib3R0b207DQoNCiAgICAgICAgdmFyIGNvbG9yID0gZXZhbChvcHRpb25zLmNvbG91clNjYWxlKTsNCg0KICAgICAgICB2YXIgY29sb3Jfbm9kZSA9IGZ1bmN0aW9uIGNvbG9yX25vZGUoZCl7DQogICAgICAgICAgaWYgKGQuZ3JvdXApew0KICAgICAgICAgICAgcmV0dXJuIGNvbG9yKGQuZ3JvdXAucmVwbGFjZSgvIC4qLywgIiIpKTsNCiAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgcmV0dXJuICIjY2NjY2NjIjsNCiAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICB2YXIgY29sb3JfbGluayA9IGZ1bmN0aW9uIGNvbG9yX2xpbmsoZCl7DQogICAgICAgICAgaWYgKGQuZ3JvdXApew0KICAgICAgICAgICAgcmV0dXJuIGNvbG9yKGQuZ3JvdXAucmVwbGFjZSgvIC4qLywgIiIpKTsNCiAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgcmV0dXJuICIjMDAwMDAwIjsNCiAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICB2YXIgb3BhY2l0eV9saW5rID0gZnVuY3Rpb24gb3BhY2l0eV9saW5rKGQpew0KICAgICAgICAgIGlmIChkLmdyb3VwKXsNCiAgICAgICAgICAgIHJldHVybiAwLjc7DQogICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHJldHVybiAwLjI7DQogICAgICAgICAgfQ0KICAgICAgICB9DQoNCg0KICAgICAgICB2YXIgZm9ybWF0TnVtYmVyID0gZDMuZm9ybWF0KCIsLjBmIiksDQogICAgICAgIGZvcm1hdCA9IGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGZvcm1hdE51bWJlcihkKTsgfQ0KDQogICAgICAgIC8vIGNyZWF0ZSBkMyBzYW5rZXkgbGF5b3V0DQogICAgICAgIHNhbmtleQ0KICAgICAgICAgICAgLm5vZGVzKG5vZGVzKQ0KICAgICAgICAgICAgLmxpbmtzKGxpbmtzKQ0KICAgICAgICAgICAgLnNpemUoW3dpZHRoLCBoZWlnaHRdKQ0KICAgICAgICAgICAgLm5vZGVXaWR0aChvcHRpb25zLm5vZGVXaWR0aCkNCiAgICAgICAgICAgIC5ub2RlUGFkZGluZyhvcHRpb25zLm5vZGVQYWRkaW5nKQ0KICAgICAgICAgICAgLnNpbmtzUmlnaHQob3B0aW9ucy5zaW5rc1JpZ2h0KQ0KICAgICAgICAgICAgLmxheW91dChvcHRpb25zLml0ZXJhdGlvbnMpOw0KDQogICAgICAgIC8vIHNlbGVjdCB0aGUgc3ZnIGVsZW1lbnQgYW5kIHJlbW92ZSBleGlzdGluZyBjaGlsZHJlbg0KICAgICAgICBkMy5zZWxlY3QoZWwpLnNlbGVjdCgic3ZnIikuc2VsZWN0QWxsKCIqIikucmVtb3ZlKCk7DQogICAgICAgIC8vIHJlbW92ZSBhbnkgcHJldmlvdXNseSBzZXQgdmlld0JveCBhdHRyaWJ1dGUNCiAgICAgICAgZDMuc2VsZWN0KGVsKS5zZWxlY3QoInN2ZyIpLmF0dHIoInZpZXdCb3giLCBudWxsKTsNCiAgICAgICAgLy8gYXBwZW5kIGcgZm9yIG91ciBjb250YWluZXIgdG8gdHJhbnNmb3JtIGJ5IG1hcmdpbg0KICAgICAgICB2YXIgc3ZnID0gZDMuc2VsZWN0KGVsKS5zZWxlY3QoInN2ZyIpLmFwcGVuZCgiZyIpDQogICAgICAgICAgICAuYXR0cigidHJhbnNmb3JtIiwgInRyYW5zbGF0ZSgiICsgbWFyZ2luLmxlZnQgKyAiLCIgKyBtYXJnaW4udG9wICsgIikiKTsNCg0KICAgICAgICAvLyBkcmF3IHBhdGgNCiAgICAgICAgdmFyIHBhdGggPSBzYW5rZXkubGluaygpOw0KDQogICAgICAgIC8vIGRyYXcgbGlua3MNCiAgICAgICAgdmFyIGxpbmsgPSBzdmcuc2VsZWN0QWxsKCIubGluayIpDQogICAgICAgICAgICAuZGF0YShsaW5rcykNCiAgICAgICAgICAgIC5lbnRlcigpLmFwcGVuZCgicGF0aCIpDQogICAgICAgICAgICAuYXR0cigiY2xhc3MiLCAibGluayIpDQogICAgICAgICAgICAuYXR0cigiZCIsIHBhdGgpDQogICAgICAgICAgICAuc3R5bGUoInN0cm9rZS13aWR0aCIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIE1hdGgubWF4KDEsIGQuZHkpOyB9KQ0KICAgICAgICAgICAgLnN0eWxlKCJmaWxsIiwgIm5vbmUiKQ0KICAgICAgICAgICAgLnN0eWxlKCJzdHJva2UiLCBjb2xvcl9saW5rKQ0KICAgICAgICAgICAgLnN0eWxlKCJzdHJva2Utb3BhY2l0eSIsIG9wYWNpdHlfbGluaykNCiAgICAgICAgICAgIC5zb3J0KGZ1bmN0aW9uKGEsIGIpIHsgcmV0dXJuIGIuZHkgLSBhLmR5OyB9KQ0KICAgICAgICAgICAgLm9uKCJtb3VzZW92ZXIiLCBmdW5jdGlvbihkKSB7DQogICAgICAgICAgICAgICAgZDMuc2VsZWN0KHRoaXMpDQogICAgICAgICAgICAgICAgLnN0eWxlKCJzdHJva2Utb3BhY2l0eSIsIGZ1bmN0aW9uKGQpe3JldHVybiBvcGFjaXR5X2xpbmsoZCkgKyAwLjN9KTsNCiAgICAgICAgICAgIH0pDQogICAgICAgICAgICAub24oIm1vdXNlb3V0IiwgZnVuY3Rpb24oZCkgew0KICAgICAgICAgICAgICAgIGQzLnNlbGVjdCh0aGlzKQ0KICAgICAgICAgICAgICAgIC5zdHlsZSgic3Ryb2tlLW9wYWNpdHkiLCBvcGFjaXR5X2xpbmspOw0KICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgLy8gYWRkIGJhY2t3YXJkcyBjbGFzcyB0byBjeWNsZXMNCiAgICAgICAgbGluay5jbGFzc2VkKCdiYWNrd2FyZHMnLCBmdW5jdGlvbiAoZCkgeyByZXR1cm4gZC50YXJnZXQueCA8IGQuc291cmNlLng7IH0pOw0KDQogICAgICAgIHN2Zy5zZWxlY3RBbGwoIi5saW5rLmJhY2t3YXJkcyIpDQogICAgICAgICAgICAuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCI5LDEiKQ0KICAgICAgICAgICAgLnN0eWxlKCJzdHJva2UiLCIjNDAyIikNCg0KICAgICAgICAvLyBkcmF3IG5vZGVzDQogICAgICAgIHZhciBub2RlID0gc3ZnLnNlbGVjdEFsbCgiLm5vZGUiKQ0KICAgICAgICAgICAgLmRhdGEobm9kZXMpDQogICAgICAgICAgICAuZW50ZXIoKS5hcHBlbmQoImciKQ0KICAgICAgICAgICAgLmF0dHIoImNsYXNzIiwgIm5vZGUiKQ0KICAgICAgICAgICAgLmF0dHIoInRyYW5zZm9ybSIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuICJ0cmFuc2xhdGUoIiArDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQueCArICIsIiArIGQueSArICIpIjsgfSkNCiAgICAgICAgICAgIC5jYWxsKGQzLmRyYWcoKQ0KICAgICAgICAgICAgLnN1YmplY3QoZnVuY3Rpb24oZCkgeyByZXR1cm4gZDsgfSkNCiAgICAgICAgICAgIC5vbigic3RhcnQiLCBmdW5jdGlvbigpIHsgdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpOyB9KQ0KICAgICAgICAgICAgLm9uKCJkcmFnIiwgZHJhZ21vdmUpKQ0KICAgICAgICAgICAgLm9uKCJtb3VzZW92ZXIiLCBmdW5jdGlvbihkKSB7DQogICAgICAgICAgICAgICAgbGluay5maWx0ZXIoZnVuY3Rpb24oZDEsIGkpIHsgcmV0dXJuIGQudGFyZ2V0TGlua3MuaW5jbHVkZXMoZDEpIHwgZC5zb3VyY2VMaW5rcy5pbmNsdWRlcyhkMSk7IH0pDQogICAgICAgICAgICAgICAgIC5zdHlsZSgic3Ryb2tlLW9wYWNpdHkiLCBmdW5jdGlvbihkKXtyZXR1cm4gb3BhY2l0eV9saW5rKGQpICsgMC4zfSk7DQogICAgICAgICAgICB9KQ0KICAgICAgICAgICAgLm9uKCJtb3VzZW91dCIsIGZ1bmN0aW9uKGQpIHsNCiAgICAgICAgICAgICAgICBsaW5rLmZpbHRlcihmdW5jdGlvbihkMSwgaSkgeyByZXR1cm4gZC50YXJnZXRMaW5rcy5pbmNsdWRlcyhkMSkgfCBkLnNvdXJjZUxpbmtzLmluY2x1ZGVzKGQxKTsgfSkNCiAgICAgICAgICAgICAgICAuc3R5bGUoInN0cm9rZS1vcGFjaXR5Iiwgb3BhY2l0eV9saW5rKTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICAvLyBub3RlOiB1MjE5MiBpcyByaWdodC1hcnJvdw0KICAgICAgICBsaW5rLmFwcGVuZCgidGl0bGUiKQ0KICAgICAgICAgICAgLmFwcGVuZCgiZm9yZWlnbk9iamVjdCIpDQogICAgICAgICAgICAuYXBwZW5kKCJ4aHRtbDpib2R5IikNCiAgICAgICAgICAgIC5odG1sKGZ1bmN0aW9uKGQpIHsgcmV0dXJuICI8cHJlPiIgKyBkLnNvdXJjZS5uYW1lICsgIiBcdTIxOTIgIiArIGQudGFyZ2V0Lm5hbWUgKw0KICAgICAgICAgICAgICAgICJcbiIgKyBmb3JtYXQoZC52YWx1ZSkgKyAiICIgKyBvcHRpb25zLnVuaXRzICsgIjwvcHJlPiI7IH0pOw0KDQogICAgICAgIG5vZGUuYXBwZW5kKCJyZWN0IikNCiAgICAgICAgICAgIC5hdHRyKCJoZWlnaHQiLCBmdW5jdGlvbihkKSB7IHJldHVybiBkLmR5OyB9KQ0KICAgICAgICAgICAgLmF0dHIoIndpZHRoIiwgc2Fua2V5Lm5vZGVXaWR0aCgpKQ0KICAgICAgICAgICAgLnN0eWxlKCJmaWxsIiwgZnVuY3Rpb24oZCkgew0KICAgICAgICAgICAgICAgIHJldHVybiBkLmNvbG9yID0gY29sb3Jfbm9kZShkKTsgfSkNCiAgICAgICAgICAgIC5zdHlsZSgic3Ryb2tlIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gZDMucmdiKGQuY29sb3IpLmRhcmtlcigyKTsgfSkNCiAgICAgICAgICAgIC5zdHlsZSgib3BhY2l0eSIsIDAuOSkNCiAgICAgICAgICAgIC5zdHlsZSgiY3Vyc29yIiwgIm1vdmUiKQ0KICAgICAgICAgICAgLmFwcGVuZCgidGl0bGUiKQ0KICAgICAgICAgICAgLmFwcGVuZCgiZm9yZWlnbk9iamVjdCIpDQogICAgICAgICAgICAuYXBwZW5kKCJ4aHRtbDpib2R5IikNCiAgICAgICAgICAgIC5odG1sKGZ1bmN0aW9uKGQpIHsgcmV0dXJuICI8cHJlPiIgKyBkLm5hbWUgKyAiPGJyPiIgKyBmb3JtYXQoZC52YWx1ZSkgKyANCiAgICAgICAgICAgICAgICAiICIgKyBvcHRpb25zLnVuaXRzICsgIjwvcHJlPiI7IH0pOw0KDQogICAgICAgIG5vZGUuYXBwZW5kKCJ0ZXh0IikNCiAgICAgICAgICAgIC5hdHRyKCJ4IiwgLTYpDQogICAgICAgICAgICAuYXR0cigieSIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGQuZHkgLyAyOyB9KQ0KICAgICAgICAgICAgLmF0dHIoImR5IiwgIi4zNWVtIikNCiAgICAgICAgICAgIC5hdHRyKCJ0ZXh0LWFuY2hvciIsICJlbmQiKQ0KICAgICAgICAgICAgLmF0dHIoInRyYW5zZm9ybSIsIG51bGwpDQogICAgICAgICAgICAudGV4dChmdW5jdGlvbihkKSB7IHJldHVybiBkLm5hbWU7IH0pDQogICAgICAgICAgICAuc3R5bGUoImZvbnQtc2l6ZSIsIG9wdGlvbnMuZm9udFNpemUgKyAicHgiKQ0KICAgICAgICAgICAgLnN0eWxlKCJmb250LWZhbWlseSIsIG9wdGlvbnMuZm9udEZhbWlseSA/IG9wdGlvbnMuZm9udEZhbWlseSA6ICJpbmhlcml0IikNCiAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24oZCkgeyByZXR1cm4gZC54IDwgd2lkdGggLyAyIHx8ICFvcHRpb25zLnNpbmtzUmlnaHQ7IH0pDQogICAgICAgICAgICAuYXR0cigieCIsIDYgKyBzYW5rZXkubm9kZVdpZHRoKCkpDQogICAgICAgICAgICAuYXR0cigidGV4dC1hbmNob3IiLCAic3RhcnQiKTsNCg0KDQogICAgICAgIC8vIGFkanVzdCB2aWV3Qm94IHRvIGZpdCB0aGUgYm91bmRzIG9mIG91ciB0cmVlDQogICAgICAgIHZhciBzID0gZDMuc2VsZWN0KHN2Zy5ub2RlKCkucGFyZW50Tm9kZSk7DQogICAgICAgIHMuYXR0cigNCiAgICAgICAgICAgICJ2aWV3Qm94IiwNCiAgICAgICAgICAgIFsNCiAgICAgICAgICAgICAgZDMubWluKA0KICAgICAgICAgICAgICAgIHMuc2VsZWN0QWxsKCdnJykubm9kZXMoKS5tYXAoZnVuY3Rpb24oZCl7DQogICAgICAgICAgICAgICAgICByZXR1cm4gZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0DQogICAgICAgICAgICAgICAgfSkNCiAgICAgICAgICAgICAgKSAtIHMubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLSBtYXJnaW4ucmlnaHQsDQogICAgICAgICAgICAgIGQzLm1pbigNCiAgICAgICAgICAgICAgICBzLnNlbGVjdEFsbCgnZycpLm5vZGVzKCkubWFwKGZ1bmN0aW9uKGQpew0KICAgICAgICAgICAgICAgICAgcmV0dXJuIGQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wDQogICAgICAgICAgICAgICAgfSkNCiAgICAgICAgICAgICAgKSAtIHMubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCAtIG1hcmdpbi50b3AsDQogICAgICAgICAgICAgIGQzLm1heCgNCiAgICAgICAgICAgICAgICBzLnNlbGVjdEFsbCgnZycpLm5vZGVzKCkubWFwKGZ1bmN0aW9uKGQpew0KICAgICAgICAgICAgICAgICAgcmV0dXJuIGQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQNCiAgICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgICApIC0NCiAgICAgICAgICAgICAgZDMubWluKA0KICAgICAgICAgICAgICAgIHMuc2VsZWN0QWxsKCdnJykubm9kZXMoKS5tYXAoZnVuY3Rpb24oZCl7DQogICAgICAgICAgICAgICAgICByZXR1cm4gZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0DQogICAgICAgICAgICAgICAgfSkNCiAgICAgICAgICAgICAgKSAgKyBtYXJnaW4ubGVmdCArIG1hcmdpbi5yaWdodCwNCiAgICAgICAgICAgICAgZDMubWF4KA0KICAgICAgICAgICAgICAgIHMuc2VsZWN0QWxsKCdnJykubm9kZXMoKS5tYXAoZnVuY3Rpb24oZCl7DQogICAgICAgICAgICAgICAgICByZXR1cm4gZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b20NCiAgICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgICApIC0NCiAgICAgICAgICAgICAgZDMubWluKA0KICAgICAgICAgICAgICAgIHMuc2VsZWN0QWxsKCdnJykubm9kZXMoKS5tYXAoZnVuY3Rpb24oZCl7DQogICAgICAgICAgICAgICAgICByZXR1cm4gZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3ANCiAgICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgICApICsgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b20NCiAgICAgICAgICAgIF0uam9pbigiLCIpDQogICAgICAgICAgKTsNCg0KDQogICAgICAgIGZ1bmN0aW9uIGRyYWdtb3ZlKGQpIHsNCiAgICAgICAgICAgIGQzLnNlbGVjdCh0aGlzKS5hdHRyKCJ0cmFuc2Zvcm0iLCAidHJhbnNsYXRlKCIgKyBkLnggKyAiLCIgKw0KICAgICAgICAgICAgKGQueSA9IE1hdGgubWF4KDAsIE1hdGgubWluKGhlaWdodCAtIGQuZHksIGQzLmV2ZW50LnkpKSkgKyAiKSIpOw0KICAgICAgICAgICAgc2Fua2V5LnJlbGF5b3V0KCk7DQogICAgICAgICAgICBsaW5rLmF0dHIoImQiLCBwYXRoKTsNCiAgICAgICAgfQ0KICAgIH0sDQp9KTsNCg=="></script>
<link href="data:text/css;charset=utf-8,%2Evis%20%2Eoverlay%20%7B%0Aposition%3A%20absolute%3B%0Atop%3A%200%3B%0Aleft%3A%200%3B%0Awidth%3A%20100%25%3B%0Aheight%3A%20100%25%3B%0A%0Az%2Dindex%3A%2010%3B%0A%7D%0A%2Evis%2Dactive%20%7B%0Abox%2Dshadow%3A%200%200%2010px%20%2386d5f8%3B%0A%7D%0A%0A%2Evis%20%5Bclass%2A%3D%22span%22%5D%20%7B%0Amin%2Dheight%3A%200%3B%0Awidth%3A%20auto%3B%0A%7D%0Adiv%2Evis%2Dconfiguration%20%7B%0Aposition%3Arelative%3B%0Adisplay%3Ablock%3B%0Afloat%3Aleft%3B%0Afont%2Dsize%3A12px%3B%0A%7D%0Adiv%2Evis%2Dconfiguration%2Dwrapper%20%7B%0Adisplay%3Ablock%3B%0Awidth%3A700px%3B%0A%7D%0Adiv%2Evis%2Dconfiguration%2Dwrapper%3A%3Aafter%20%7B%0Aclear%3A%20both%3B%0Acontent%3A%20%22%22%3B%0Adisplay%3A%20block%3B%0A%7D%0Adiv%2Evis%2Dconfiguration%2Evis%2Dconfig%2Doption%2Dcontainer%7B%0Adisplay%3Ablock%3B%0Awidth%3A495px%3B%0Abackground%2Dcolor%3A%20%23ffffff%3B%0Aborder%3A2px%20solid%20%23f7f8fa%3B%0Aborder%2Dradius%3A4px%3B%0Amargin%2Dtop%3A20px%3B%0Aleft%3A10px%3B%0Apadding%2Dleft%3A5px%3B%0A%7D%0Adiv%2Evis%2Dconfiguration%2Evis%2Dconfig%2Dbutton%7B%0Adisplay%3Ablock%3B%0Awidth%3A495px%3B%0Aheight%3A25px%3B%0Avertical%2Dalign%3A%20middle%3B%0Aline%2Dheight%3A25px%3B%0Abackground%2Dcolor%3A%20%23f7f8fa%3B%0Aborder%3A2px%20solid%20%23ceced0%3B%0Aborder%2Dradius%3A4px%3B%0Amargin%2Dtop%3A20px%3B%0Aleft%3A10px%3B%0Apadding%2Dleft%3A5px%3B%0Acursor%3A%20pointer%3B%0Amargin%2Dbottom%3A30px%3B%0A%7D%0Adiv%2Evis%2Dconfiguration%2Evis%2Dconfig%2Dbutton%2Ehover%7B%0Abackground%2Dcolor%3A%20%234588e6%3B%0Aborder%3A2px%20solid%20%23214373%3B%0Acolor%3A%23ffffff%3B%0A%7D%0Adiv%2Evis%2Dconfiguration%2Evis%2Dconfig%2Ditem%7B%0Adisplay%3Ablock%3B%0Afloat%3Aleft%3B%0Awidth%3A495px%3B%0Aheight%3A25px%3B%0Avertical%2Dalign%3A%20middle%3B%0Aline%2Dheight%3A25px%3B%0A%7D%0Adiv%2Evis%2Dconfiguration%2Evis%2Dconfig%2Ditem%2Evis%2Dconfig%2Ds2%7B%0Aleft%3A10px%3B%0Abackground%2Dcolor%3A%20%23f7f8fa%3B%0Apadding%2Dleft%3A5px%3B%0Aborder%2Dradius%3A3px%3B%0A%7D%0Adiv%2Evis%2Dconfiguration%2Evis%2Dconfig%2Ditem%2Evis%2Dconfig%2Ds3%7B%0Aleft%3A20px%3B%0Abackground%2Dcolor%3A%20%23e4e9f0%3B%0Apadding%2Dleft%3A5px%3B%0Aborder%2Dradius%3A3px%3B%0A%7D%0Adiv%2Evis%2Dconfiguration%2Evis%2Dconfig%2Ditem%2Evis%2Dconfig%2Ds4%7B%0Aleft%3A30px%3B%0Abackground%2Dcolor%3A%20%23cfd8e6%3B%0Apadding%2Dleft%3A5px%3B%0Aborder%2Dradius%3A3px%3B%0A%7D%0Adiv%2Evis%2Dconfiguration%2Evis%2Dconfig%2Dheader%7B%0Afont%2Dsize%3A18px%3B%0Afont%2Dweight%3A%20bold%3B%0A%7D%0Adiv%2Evis%2Dconfiguration%2Evis%2Dconfig%2Dlabel%7B%0Awidth%3A120px%3B%0Aheight%3A25px%3B%0Aline%2Dheight%3A%2025px%3B%0A%7D%0Adiv%2Evis%2Dconfiguration%2Evis%2Dconfig%2Dlabel%2Evis%2Dconfig%2Ds3%7B%0Awidth%3A110px%3B%0A%7D%0Adiv%2Evis%2Dconfiguration%2Evis%2Dconfig%2Dlabel%2Evis%2Dconfig%2Ds4%7B%0Awidth%3A100px%3B%0A%7D%0Adiv%2Evis%2Dconfiguration%2Evis%2Dconfig%2DcolorBlock%7B%0Atop%3A1px%3B%0Awidth%3A30px%3B%0Aheight%3A19px%3B%0Aborder%3A1px%20solid%20%23444444%3B%0Aborder%2Dradius%3A2px%3B%0Apadding%3A0px%3B%0Amargin%3A0px%3B%0Acursor%3Apointer%3B%0A%7D%0Ainput%2Evis%2Dconfiguration%2Evis%2Dconfig%2Dcheckbox%20%7B%0Aleft%3A%2D5px%3B%0A%7D%0Ainput%2Evis%2Dconfiguration%2Evis%2Dconfig%2Drangeinput%7B%0Aposition%3Arelative%3B%0Atop%3A%2D5px%3B%0Awidth%3A60px%3B%0A%0Apadding%3A1px%3B%0Amargin%3A0%3B%0Apointer%2Devents%3Anone%3B%0A%7D%0Ainput%2Evis%2Dconfiguration%2Evis%2Dconfig%2Drange%7B%0A%0A%2Dwebkit%2Dappearance%3A%20none%3B%0A%0Aborder%3A%200px%20solid%20white%3B%0Abackground%2Dcolor%3Argba%280%2C0%2C0%2C0%29%3B%0A%0Awidth%3A%20300px%3B%0Aheight%3A20px%3B%0A%7D%0Ainput%2Evis%2Dconfiguration%2Evis%2Dconfig%2Drange%3A%3A%2Dwebkit%2Dslider%2Drunnable%2Dtrack%20%7B%0Awidth%3A%20300px%3B%0Aheight%3A%205px%3B%0Abackground%3A%20%23dedede%3B%20%0Abackground%3A%20%2Dmoz%2Dlinear%2Dgradient%28top%2C%20%23dedede%200%25%2C%20%23c8c8c8%2099%25%29%3B%20%0Abackground%3A%20%2Dwebkit%2Dgradient%28linear%2C%20left%20top%2C%20left%20bottom%2C%20color%2Dstop%280%25%2C%23dedede%29%2C%20color%2Dstop%2899%25%2C%23c8c8c8%29%29%3B%20%0Abackground%3A%20%2Dwebkit%2Dlinear%2Dgradient%28top%2C%20%23dedede%200%25%2C%23c8c8c8%2099%25%29%3B%20%0Abackground%3A%20%2Do%2Dlinear%2Dgradient%28top%2C%20%23dedede%200%25%2C%20%23c8c8c8%2099%25%29%3B%20%0Abackground%3A%20%2Dms%2Dlinear%2Dgradient%28top%2C%20%23dedede%200%25%2C%23c8c8c8%2099%25%29%3B%20%0Abackground%3A%20linear%2Dgradient%28to%20bottom%2C%20%23dedede%200%25%2C%23c8c8c8%2099%25%29%3B%20%0Afilter%3A%20progid%3ADXImageTransform%2EMicrosoft%2Egradient%28%20startColorstr%3D%27%23dedede%27%2C%20endColorstr%3D%27%23c8c8c8%27%2CGradientType%3D0%20%29%3B%20%0Aborder%3A%201px%20solid%20%23999999%3B%0Abox%2Dshadow%3A%20%23aaaaaa%200px%200px%203px%200px%3B%0Aborder%2Dradius%3A%203px%3B%0A%7D%0Ainput%2Evis%2Dconfiguration%2Evis%2Dconfig%2Drange%3A%3A%2Dwebkit%2Dslider%2Dthumb%20%7B%0A%2Dwebkit%2Dappearance%3A%20none%3B%0Aborder%3A%201px%20solid%20%2314334b%3B%0Aheight%3A%2017px%3B%0Awidth%3A%2017px%3B%0Aborder%2Dradius%3A%2050%25%3B%0Abackground%3A%20%233876c2%3B%20%0Abackground%3A%20%2Dmoz%2Dlinear%2Dgradient%28top%2C%20%233876c2%200%25%2C%20%23385380%20100%25%29%3B%20%0Abackground%3A%20%2Dwebkit%2Dgradient%28linear%2C%20left%20top%2C%20left%20bottom%2C%20color%2Dstop%280%25%2C%233876c2%29%2C%20color%2Dstop%28100%25%2C%23385380%29%29%3B%20%0Abackground%3A%20%2Dwebkit%2Dlinear%2Dgradient%28top%2C%20%233876c2%200%25%2C%23385380%20100%25%29%3B%20%0Abackground%3A%20%2Do%2Dlinear%2Dgradient%28top%2C%20%233876c2%200%25%2C%23385380%20100%25%29%3B%20%0Abackground%3A%20%2Dms%2Dlinear%2Dgradient%28top%2C%20%233876c2%200%25%2C%23385380%20100%25%29%3B%20%0Abackground%3A%20linear%2Dgradient%28to%20bottom%2C%20%233876c2%200%25%2C%23385380%20100%25%29%3B%20%0Afilter%3A%20progid%3ADXImageTransform%2EMicrosoft%2Egradient%28%20startColorstr%3D%27%233876c2%27%2C%20endColorstr%3D%27%23385380%27%2CGradientType%3D0%20%29%3B%20%0Abox%2Dshadow%3A%20%23111927%200px%200px%201px%200px%3B%0Amargin%2Dtop%3A%20%2D7px%3B%0A%7D%0Ainput%2Evis%2Dconfiguration%2Evis%2Dconfig%2Drange%3Afocus%20%7B%0Aoutline%3A%20none%3B%0A%7D%0Ainput%2Evis%2Dconfiguration%2Evis%2Dconfig%2Drange%3Afocus%3A%3A%2Dwebkit%2Dslider%2Drunnable%2Dtrack%20%7B%0Abackground%3A%20%239d9d9d%3B%20%0Abackground%3A%20%2Dmoz%2Dlinear%2Dgradient%28top%2C%20%239d9d9d%200%25%2C%20%23c8c8c8%2099%25%29%3B%20%0Abackground%3A%20%2Dwebkit%2Dgradient%28linear%2C%20left%20top%2C%20left%20bottom%2C%20color%2Dstop%280%25%2C%239d9d9d%29%2C%20color%2Dstop%2899%25%2C%23c8c8c8%29%29%3B%20%0Abackground%3A%20%2Dwebkit%2Dlinear%2Dgradient%28top%2C%20%239d9d9d%200%25%2C%23c8c8c8%2099%25%29%3B%20%0Abackground%3A%20%2Do%2Dlinear%2Dgradient%28top%2C%20%239d9d9d%200%25%2C%23c8c8c8%2099%25%29%3B%20%0Abackground%3A%20%2Dms%2Dlinear%2Dgradient%28top%2C%20%239d9d9d%200%25%2C%23c8c8c8%2099%25%29%3B%20%0Abackground%3A%20linear%2Dgradient%28to%20bottom%2C%20%239d9d9d%200%25%2C%23c8c8c8%2099%25%29%3B%20%0Afilter%3A%20progid%3ADXImageTransform%2EMicrosoft%2Egradient%28%20startColorstr%3D%27%239d9d9d%27%2C%20endColorstr%3D%27%23c8c8c8%27%2CGradientType%3D0%20%29%3B%20%0A%7D%0Ainput%2Evis%2Dconfiguration%2Evis%2Dconfig%2Drange%3A%3A%2Dmoz%2Drange%2Dtrack%20%7B%0Awidth%3A%20300px%3B%0Aheight%3A%2010px%3B%0Abackground%3A%20%23dedede%3B%20%0Abackground%3A%20%2Dmoz%2Dlinear%2Dgradient%28top%2C%20%23dedede%200%25%2C%20%23c8c8c8%2099%25%29%3B%20%0Abackground%3A%20%2Dwebkit%2Dgradient%28linear%2C%20left%20top%2C%20left%20bottom%2C%20color%2Dstop%280%25%2C%23dedede%29%2C%20color%2Dstop%2899%25%2C%23c8c8c8%29%29%3B%20%0Abackground%3A%20%2Dwebkit%2Dlinear%2Dgradient%28top%2C%20%23dedede%200%25%2C%23c8c8c8%2099%25%29%3B%20%0Abackground%3A%20%2Do%2Dlinear%2Dgradient%28top%2C%20%23dedede%200%25%2C%20%23c8c8c8%2099%25%29%3B%20%0Abackground%3A%20%2Dms%2Dlinear%2Dgradient%28top%2C%20%23dedede%200%25%2C%23c8c8c8%2099%25%29%3B%20%0Abackground%3A%20linear%2Dgradient%28to%20bottom%2C%20%23dedede%200%25%2C%23c8c8c8%2099%25%29%3B%20%0Afilter%3A%20progid%3ADXImageTransform%2EMicrosoft%2Egradient%28%20startColorstr%3D%27%23dedede%27%2C%20endColorstr%3D%27%23c8c8c8%27%2CGradientType%3D0%20%29%3B%20%0Aborder%3A%201px%20solid%20%23999999%3B%0Abox%2Dshadow%3A%20%23aaaaaa%200px%200px%203px%200px%3B%0Aborder%2Dradius%3A%203px%3B%0A%7D%0Ainput%2Evis%2Dconfiguration%2Evis%2Dconfig%2Drange%3A%3A%2Dmoz%2Drange%2Dthumb%20%7B%0Aborder%3A%20none%3B%0Aheight%3A%2016px%3B%0Awidth%3A%2016px%3B%0Aborder%2Dradius%3A%2050%25%3B%0Abackground%3A%20%23385380%3B%0A%7D%0A%0Ainput%2Evis%2Dconfiguration%2Evis%2Dconfig%2Drange%3A%2Dmoz%2Dfocusring%7B%0Aoutline%3A%201px%20solid%20white%3B%0Aoutline%2Doffset%3A%20%2D1px%3B%0A%7D%0Ainput%2Evis%2Dconfiguration%2Evis%2Dconfig%2Drange%3A%3A%2Dms%2Dtrack%20%7B%0Awidth%3A%20300px%3B%0Aheight%3A%205px%3B%0A%0Abackground%3A%20transparent%3B%0A%0Aborder%2Dcolor%3A%20transparent%3B%0Aborder%2Dwidth%3A%206px%200%3B%0A%0Acolor%3A%20transparent%3B%0A%7D%0Ainput%2Evis%2Dconfiguration%2Evis%2Dconfig%2Drange%3A%3A%2Dms%2Dfill%2Dlower%20%7B%0Abackground%3A%20%23777%3B%0Aborder%2Dradius%3A%2010px%3B%0A%7D%0Ainput%2Evis%2Dconfiguration%2Evis%2Dconfig%2Drange%3A%3A%2Dms%2Dfill%2Dupper%20%7B%0Abackground%3A%20%23ddd%3B%0Aborder%2Dradius%3A%2010px%3B%0A%7D%0Ainput%2Evis%2Dconfiguration%2Evis%2Dconfig%2Drange%3A%3A%2Dms%2Dthumb%20%7B%0Aborder%3A%20none%3B%0Aheight%3A%2016px%3B%0Awidth%3A%2016px%3B%0Aborder%2Dradius%3A%2050%25%3B%0Abackground%3A%20%23385380%3B%0A%7D%0Ainput%2Evis%2Dconfiguration%2Evis%2Dconfig%2Drange%3Afocus%3A%3A%2Dms%2Dfill%2Dlower%20%7B%0Abackground%3A%20%23888%3B%0A%7D%0Ainput%2Evis%2Dconfiguration%2Evis%2Dconfig%2Drange%3Afocus%3A%3A%2Dms%2Dfill%2Dupper%20%7B%0Abackground%3A%20%23ccc%3B%0A%7D%0A%2Evis%2Dconfiguration%2Dpopup%20%7B%0Aposition%3A%20absolute%3B%0Abackground%3A%20rgba%2857%2C%2076%2C%2089%2C%200%2E85%29%3B%0Aborder%3A%202px%20solid%20%23f2faff%3B%0Aline%2Dheight%3A30px%3B%0Aheight%3A30px%3B%0Awidth%3A150px%3B%0Atext%2Dalign%3Acenter%3B%0Acolor%3A%20%23ffffff%3B%0Afont%2Dsize%3A14px%3B%0Aborder%2Dradius%3A4px%3B%0A%2Dwebkit%2Dtransition%3A%20opacity%200%2E3s%20ease%2Din%2Dout%3B%0A%2Dmoz%2Dtransition%3A%20opacity%200%2E3s%20ease%2Din%2Dout%3B%0Atransition%3A%20opacity%200%2E3s%20ease%2Din%2Dout%3B%0A%7D%0A%2Evis%2Dconfiguration%2Dpopup%3Aafter%2C%20%2Evis%2Dconfiguration%2Dpopup%3Abefore%20%7B%0Aleft%3A%20100%25%3B%0Atop%3A%2050%25%3B%0Aborder%3A%20solid%20transparent%3B%0Acontent%3A%20%22%20%22%3B%0Aheight%3A%200%3B%0Awidth%3A%200%3B%0Aposition%3A%20absolute%3B%0Apointer%2Devents%3A%20none%3B%0A%7D%0A%2Evis%2Dconfiguration%2Dpopup%3Aafter%20%7B%0Aborder%2Dcolor%3A%20rgba%28136%2C%20183%2C%20213%2C%200%29%3B%0Aborder%2Dleft%2Dcolor%3A%20rgba%2857%2C%2076%2C%2089%2C%200%2E85%29%3B%0Aborder%2Dwidth%3A%208px%3B%0Amargin%2Dtop%3A%20%2D8px%3B%0A%7D%0A%2Evis%2Dconfiguration%2Dpopup%3Abefore%20%7B%0Aborder%2Dcolor%3A%20rgba%28194%2C%20225%2C%20245%2C%200%29%3B%0Aborder%2Dleft%2Dcolor%3A%20%23f2faff%3B%0Aborder%2Dwidth%3A%2012px%3B%0Amargin%2Dtop%3A%20%2D12px%3B%0A%7D%0Adiv%2Evis%2Dcolor%2Dpicker%20%7B%0Aposition%3Aabsolute%3B%0Atop%3A%200px%3B%0Aleft%3A%2030px%3B%0Amargin%2Dtop%3A%2D140px%3B%0Amargin%2Dleft%3A30px%3B%0Awidth%3A310px%3B%0Aheight%3A444px%3B%0Az%2Dindex%3A%201%3B%0Apadding%3A%2010px%3B%0Aborder%2Dradius%3A15px%3B%0Abackground%2Dcolor%3A%23ffffff%3B%0Adisplay%3A%20none%3B%0Abox%2Dshadow%3A%20rgba%280%2C0%2C0%2C0%2E5%29%200px%200px%2010px%200px%3B%0A%7D%0Adiv%2Evis%2Dcolor%2Dpicker%20div%2Evis%2Darrow%20%7B%0Aposition%3A%20absolute%3B%0Atop%3A147px%3B%0Aleft%3A5px%3B%0A%7D%0Adiv%2Evis%2Dcolor%2Dpicker%20div%2Evis%2Darrow%3A%3Aafter%2C%0Adiv%2Evis%2Dcolor%2Dpicker%20div%2Evis%2Darrow%3A%3Abefore%20%7B%0Aright%3A%20100%25%3B%0Atop%3A%2050%25%3B%0Aborder%3A%20solid%20transparent%3B%0Acontent%3A%20%22%20%22%3B%0Aheight%3A%200%3B%0Awidth%3A%200%3B%0Aposition%3A%20absolute%3B%0Apointer%2Devents%3A%20none%3B%0A%7D%0Adiv%2Evis%2Dcolor%2Dpicker%20div%2Evis%2Darrow%3Aafter%20%7B%0Aborder%2Dcolor%3A%20rgba%28255%2C%20255%2C%20255%2C%200%29%3B%0Aborder%2Dright%2Dcolor%3A%20%23ffffff%3B%0Aborder%2Dwidth%3A%2030px%3B%0Amargin%2Dtop%3A%20%2D30px%3B%0A%7D%0Adiv%2Evis%2Dcolor%2Dpicker%20div%2Evis%2Dcolor%20%7B%0Aposition%3Aabsolute%3B%0Awidth%3A%20289px%3B%0Aheight%3A%20289px%3B%0Acursor%3A%20pointer%3B%0A%7D%0Adiv%2Evis%2Dcolor%2Dpicker%20div%2Evis%2Dbrightness%20%7B%0Aposition%3A%20absolute%3B%0Atop%3A313px%3B%0A%7D%0Adiv%2Evis%2Dcolor%2Dpicker%20div%2Evis%2Dopacity%20%7B%0Aposition%3Aabsolute%3B%0Atop%3A350px%3B%0A%7D%0Adiv%2Evis%2Dcolor%2Dpicker%20div%2Evis%2Dselector%20%7B%0Aposition%3Aabsolute%3B%0Atop%3A137px%3B%0Aleft%3A137px%3B%0Awidth%3A15px%3B%0Aheight%3A15px%3B%0Aborder%2Dradius%3A15px%3B%0Aborder%3A1px%20solid%20%23ffffff%3B%0Abackground%3A%20%234c4c4c%3B%20%0Abackground%3A%20%2Dmoz%2Dlinear%2Dgradient%28top%2C%20%234c4c4c%200%25%2C%20%23595959%2012%25%2C%20%23666666%2025%25%2C%20%23474747%2039%25%2C%20%232c2c2c%2050%25%2C%20%23000000%2051%25%2C%20%23111111%2060%25%2C%20%232b2b2b%2076%25%2C%20%231c1c1c%2091%25%2C%20%23131313%20100%25%29%3B%20%0Abackground%3A%20%2Dwebkit%2Dgradient%28linear%2C%20left%20top%2C%20left%20bottom%2C%20color%2Dstop%280%25%2C%234c4c4c%29%2C%20color%2Dstop%2812%25%2C%23595959%29%2C%20color%2Dstop%2825%25%2C%23666666%29%2C%20color%2Dstop%2839%25%2C%23474747%29%2C%20color%2Dstop%2850%25%2C%232c2c2c%29%2C%20color%2Dstop%2851%25%2C%23000000%29%2C%20color%2Dstop%2860%25%2C%23111111%29%2C%20color%2Dstop%2876%25%2C%232b2b2b%29%2C%20color%2Dstop%2891%25%2C%231c1c1c%29%2C%20color%2Dstop%28100%25%2C%23131313%29%29%3B%20%0Abackground%3A%20%2Dwebkit%2Dlinear%2Dgradient%28top%2C%20%234c4c4c%200%25%2C%23595959%2012%25%2C%23666666%2025%25%2C%23474747%2039%25%2C%232c2c2c%2050%25%2C%23000000%2051%25%2C%23111111%2060%25%2C%232b2b2b%2076%25%2C%231c1c1c%2091%25%2C%23131313%20100%25%29%3B%20%0Abackground%3A%20%2Do%2Dlinear%2Dgradient%28top%2C%20%234c4c4c%200%25%2C%23595959%2012%25%2C%23666666%2025%25%2C%23474747%2039%25%2C%232c2c2c%2050%25%2C%23000000%2051%25%2C%23111111%2060%25%2C%232b2b2b%2076%25%2C%231c1c1c%2091%25%2C%23131313%20100%25%29%3B%20%0Abackground%3A%20%2Dms%2Dlinear%2Dgradient%28top%2C%20%234c4c4c%200%25%2C%23595959%2012%25%2C%23666666%2025%25%2C%23474747%2039%25%2C%232c2c2c%2050%25%2C%23000000%2051%25%2C%23111111%2060%25%2C%232b2b2b%2076%25%2C%231c1c1c%2091%25%2C%23131313%20100%25%29%3B%20%0Abackground%3A%20linear%2Dgradient%28to%20bottom%2C%20%234c4c4c%200%25%2C%23595959%2012%25%2C%23666666%2025%25%2C%23474747%2039%25%2C%232c2c2c%2050%25%2C%23000000%2051%25%2C%23111111%2060%25%2C%232b2b2b%2076%25%2C%231c1c1c%2091%25%2C%23131313%20100%25%29%3B%20%0Afilter%3A%20progid%3ADXImageTransform%2EMicrosoft%2Egradient%28%20startColorstr%3D%27%234c4c4c%27%2C%20endColorstr%3D%27%23131313%27%2CGradientType%3D0%20%29%3B%20%0A%7D%0Adiv%2Evis%2Dcolor%2Dpicker%20div%2Evis%2Dnew%2Dcolor%20%7B%0Aposition%3Aabsolute%3B%0Awidth%3A140px%3B%0Aheight%3A20px%3B%0Aborder%3A1px%20solid%20rgba%280%2C0%2C0%2C0%2E1%29%3B%0Aborder%2Dradius%3A5px%3B%0Atop%3A380px%3B%0Aleft%3A159px%3B%0Atext%2Dalign%3Aright%3B%0Apadding%2Dright%3A2px%3B%0Afont%2Dsize%3A10px%3B%0Acolor%3Argba%280%2C0%2C0%2C0%2E4%29%3B%0Avertical%2Dalign%3Amiddle%3B%0Aline%2Dheight%3A20px%3B%0A%7D%0Adiv%2Evis%2Dcolor%2Dpicker%20div%2Evis%2Dinitial%2Dcolor%20%7B%0Aposition%3Aabsolute%3B%0Awidth%3A140px%3B%0Aheight%3A20px%3B%0Aborder%3A1px%20solid%20rgba%280%2C0%2C0%2C0%2E1%29%3B%0Aborder%2Dradius%3A5px%3B%0Atop%3A380px%3B%0Aleft%3A10px%3B%0Atext%2Dalign%3Aleft%3B%0Apadding%2Dleft%3A2px%3B%0Afont%2Dsize%3A10px%3B%0Acolor%3Argba%280%2C0%2C0%2C0%2E4%29%3B%0Avertical%2Dalign%3Amiddle%3B%0Aline%2Dheight%3A20px%3B%0A%7D%0Adiv%2Evis%2Dcolor%2Dpicker%20div%2Evis%2Dlabel%20%7B%0Aposition%3Aabsolute%3B%0Awidth%3A300px%3B%0Aleft%3A10px%3B%0A%7D%0Adiv%2Evis%2Dcolor%2Dpicker%20div%2Evis%2Dlabel%2Evis%2Dbrightness%20%7B%0Atop%3A300px%3B%0A%7D%0Adiv%2Evis%2Dcolor%2Dpicker%20div%2Evis%2Dlabel%2Evis%2Dopacity%20%7B%0Atop%3A338px%3B%0A%7D%0Adiv%2Evis%2Dcolor%2Dpicker%20div%2Evis%2Dbutton%20%7B%0Aposition%3Aabsolute%3B%0Awidth%3A68px%3B%0Aheight%3A25px%3B%0Aborder%2Dradius%3A10px%3B%0Avertical%2Dalign%3A%20middle%3B%0Atext%2Dalign%3Acenter%3B%0Aline%2Dheight%3A%2025px%3B%0Atop%3A410px%3B%0Aborder%3A2px%20solid%20%23d9d9d9%3B%0Abackground%2Dcolor%3A%20%23f7f7f7%3B%0Acursor%3Apointer%3B%0A%7D%0Adiv%2Evis%2Dcolor%2Dpicker%20div%2Evis%2Dbutton%2Evis%2Dcancel%20%7B%0A%0A%0Aleft%3A5px%3B%0A%7D%0Adiv%2Evis%2Dcolor%2Dpicker%20div%2Evis%2Dbutton%2Evis%2Dload%20%7B%0A%0A%0Aleft%3A82px%3B%0A%7D%0Adiv%2Evis%2Dcolor%2Dpicker%20div%2Evis%2Dbutton%2Evis%2Dapply%20%7B%0A%0A%0Aleft%3A159px%3B%0A%7D%0Adiv%2Evis%2Dcolor%2Dpicker%20div%2Evis%2Dbutton%2Evis%2Dsave%20%7B%0A%0A%0Aleft%3A236px%3B%0A%7D%0Adiv%2Evis%2Dcolor%2Dpicker%20input%2Evis%2Drange%20%7B%0Awidth%3A%20290px%3B%0Aheight%3A20px%3B%0A%7D%0A%0Adiv%2Evis%2Dnetwork%20div%2Evis%2Dmanipulation%20%7B%0Aborder%2Dwidth%3A%200%3B%0Aborder%2Dbottom%3A%201px%3B%0Aborder%2Dstyle%3Asolid%3B%0Aborder%2Dcolor%3A%20%23d6d9d8%3B%0Abackground%3A%20%23ffffff%3B%20%0Abackground%3A%20%2Dmoz%2Dlinear%2Dgradient%28top%2C%20%23ffffff%200%25%2C%20%23fcfcfc%2048%25%2C%20%23fafafa%2050%25%2C%20%23fcfcfc%20100%25%29%3B%20%0Abackground%3A%20%2Dwebkit%2Dgradient%28linear%2C%20left%20top%2C%20left%20bottom%2C%20color%2Dstop%280%25%2C%23ffffff%29%2C%20color%2Dstop%2848%25%2C%23fcfcfc%29%2C%20color%2Dstop%2850%25%2C%23fafafa%29%2C%20color%2Dstop%28100%25%2C%23fcfcfc%29%29%3B%20%0Abackground%3A%20%2Dwebkit%2Dlinear%2Dgradient%28top%2C%20%23ffffff%200%25%2C%23fcfcfc%2048%25%2C%23fafafa%2050%25%2C%23fcfcfc%20100%25%29%3B%20%0Abackground%3A%20%2Do%2Dlinear%2Dgradient%28top%2C%20%23ffffff%200%25%2C%23fcfcfc%2048%25%2C%23fafafa%2050%25%2C%23fcfcfc%20100%25%29%3B%20%0Abackground%3A%20%2Dms%2Dlinear%2Dgradient%28top%2C%20%23ffffff%200%25%2C%23fcfcfc%2048%25%2C%23fafafa%2050%25%2C%23fcfcfc%20100%25%29%3B%20%0Abackground%3A%20linear%2Dgradient%28to%20bottom%2C%20%23ffffff%200%25%2C%23fcfcfc%2048%25%2C%23fafafa%2050%25%2C%23fcfcfc%20100%25%29%3B%20%0Afilter%3A%20progid%3ADXImageTransform%2EMicrosoft%2Egradient%28%20startColorstr%3D%27%23ffffff%27%2C%20endColorstr%3D%27%23fcfcfc%27%2CGradientType%3D0%20%29%3B%20%0Apadding%2Dtop%3A4px%3B%0Aposition%3A%20absolute%3B%0Aleft%3A%200%3B%0Atop%3A%200%3B%0Awidth%3A%20100%25%3B%0Aheight%3A%2028px%3B%0A%7D%0Adiv%2Evis%2Dnetwork%20div%2Evis%2Dedit%2Dmode%20%7B%0Aposition%3Aabsolute%3B%0Aleft%3A%200%3B%0Atop%3A%205px%3B%0Aheight%3A%2030px%3B%0A%7D%0A%0Adiv%2Evis%2Dnetwork%20div%2Evis%2Dclose%20%7B%0Aposition%3Aabsolute%3B%0Aright%3A%200%3B%0Atop%3A%200%3B%0Awidth%3A%2030px%3B%0Aheight%3A%2030px%3B%0Abackground%2Dposition%3A%2020px%203px%3B%0Abackground%2Drepeat%3A%20no%2Drepeat%3B%0Abackground%2Dimage%3A%20url%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAAcAAAAHCAYAAADEUlfTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89%2BbN%2FrXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz%2FSMBAPh%2BPDwrIsAHvgABeNMLCADATZvAMByH%2Fw%2FqQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf%2BbTAICd%2BJl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA%2Fg88wAAKCRFRHgg%2FP9eM4Ors7ONo62Dl8t6r8G%2FyJiYuP%2B5c%2BrcEAAAOF0ftH%2BLC%2BzGoA7BoBt%2FqIl7gRoXgugdfeLZrIPQLUAoOnaV%2FNw%2BH48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl%2FAV%2F1s%2BX48%2FPf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H%2FLcL%2F%2Fwd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s%2BwM%2B3zUAsGo%2BAXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93%2F%2B8%2F%2FUegJQCAZkmScQAAXkQkLlTKsz%2FHCAAARKCBKrBBG%2FTBGCzABhzBBdzBC%2FxgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD%2FphCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8%2BQ8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8%2BxdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR%2BcQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI%2BksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG%2BQh8lsKnWJAcaT4U%2BIoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr%2Bh0uhHdlR5Ol9BX0svpR%2BiX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK%2BYTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI%2BpXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q%2FpH5Z%2FYkGWcNMw09DpFGgsV%2FjvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY%2FR27iz2qqaE5QzNKM1ezUvOUZj8H45hx%2BJx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4%2FOBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up%2B6Ynr5egJ5Mb6feeb3n%2Bhx9L%2F1U%2FW36p%2FVHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm%2Beb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw%2B6TvZN9un2N%2FT0HDYfZDqsdWh1%2Bc7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc%2BLpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26%2FuNu5p7ofcn8w0nymeWTNz0MPIQ%2BBR5dE%2FC5%2BVMGvfrH5PQ0%2BBZ7XnIy9jL5FXrdewt6V3qvdh7xc%2B9j5yn%2BM%2B4zw33jLeWV%2FMN8C3yLfLT8Nvnl%2BF30N%2FI%2F9k%2F3r%2F0QCngCUBZwOJgUGBWwL7%2BHp8Ib%2BOPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo%2Bqi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt%2F87fOH4p3iC%2BN7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi%2FRNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z%2Bpn5mZ2y6xlhbL%2BxW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a%2FzYnKOZarnivN7cyzytuQN5zvn%2F%2FtEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1%2B1dT1gvWd%2B1YfqGnRs%2BFYmKrhTbF5cVf9go3HjlG4dvyr%2BZ3JS0qavEuWTPZtJm6ebeLZ5bDpaql%2BaXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO%2FPLi8ZafJzs07P1SkVPRU%2BlQ27tLdtWHX%2BG7R7ht7vPY07NXbW7z3%2FT7JvttVAVVN1WbVZftJ%2B7P3P66Jqun4lvttXa1ObXHtxwPSA%2F0HIw6217nU1R3SPVRSj9Yr60cOxx%2B%2B%2Fp3vdy0NNg1VjZzG4iNwRHnk6fcJ3%2FceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w%2B0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb%2B%2B6EHTh0kX%2Fi%2Bc7vDvOXPK4dPKy2%2BUTV7hXmq86X23qdOo8%2FpPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb%2F1tWeOT3dvfN6b%2FfF9%2FXfFt1%2Bcif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v%2B3Njv3H9qwHeg89HcR%2FcGhYPP%2FpH1jw9DBY%2BZj8uGDYbrnjg%2BOTniP3L96fynQ89kzyaeF%2F6i%2FsuuFxYvfvjV69fO0ZjRoZfyl5O%2FbXyl%2FerA6xmv28bCxh6%2ByXgzMV70VvvtwXfcdx3vo98PT%2BR8IH8o%2F2j5sfVT0Kf7kxmTk%2F8EA5jz%2FGMzLdsAADvGaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu%2B7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI%2FPgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjUtYzAyMSA3OS4xNTQ5MTEsIDIwMTMvMTAvMjktMTE6NDc6MTYgICAgICAgICI%2BCiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI%2BCiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgICAgICAgICAgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iCiAgICAgICAgICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iPgogICAgICAgICA8eG1wOkNyZWF0b3JUb29sPkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cyk8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgICAgPHhtcDpDcmVhdGVEYXRlPjIwMTQtMDItMTRUMTE6NTU6MzUrMDE6MDA8L3htcDpDcmVhdGVEYXRlPgogICAgICAgICA8eG1wOk1ldGFkYXRhRGF0ZT4yMDE0LTAyLTE0VDEyOjA1OjE3KzAxOjAwPC94bXA6TWV0YWRhdGFEYXRlPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU%2BMjAxNC0wMi0xNFQxMjowNToxNyswMTowMDwveG1wOk1vZGlmeURhdGU%2BCiAgICAgICAgIDx4bXBNTTpJbnN0YW5jZUlEPnhtcC5paWQ6NjU0YmM5YmQtMWI2Yi1jYjRhLTllOWQtNWY2MzgxNDVjZjk0PC94bXBNTTpJbnN0YW5jZUlEPgogICAgICAgICA8eG1wTU06RG9jdW1lbnRJRD54bXAuZGlkOjk4MmM2MGIwLWUzZjMtMDk0MC04MjU0LTFiZTliNWE0ZTE4MzwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjk4MmM2MGIwLWUzZjMtMDk0MC04MjU0LTFiZTliNWE0ZTE4MzwveG1wTU06T3JpZ2luYWxEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SGlzdG9yeT4KICAgICAgICAgICAgPHJkZjpTZXE%2BCiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPmNyZWF0ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ%2BeG1wLmlpZDo5ODJjNjBiMC1lM2YzLTA5NDAtODI1NC0xYmU5YjVhNGUxODM8L3N0RXZ0Omluc3RhbmNlSUQ%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTQtMDItMTRUMTE6NTU6MzUrMDE6MDA8L3N0RXZ0OndoZW4%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ%2BCiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjIxODYxNmM2LTM1MWMtNDI0OS04YWFkLWJkZDQ2ZTczNWE0NDwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4%2BMjAxNC0wMi0xNFQxMTo1NTozNSswMTowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ%2BQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ%2BLzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk%2BCiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6NjU0YmM5YmQtMWI2Yi1jYjRhLTllOWQtNWY2MzgxNDVjZjk0PC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE0LTAyLTE0VDEyOjA1OjE3KzAxOjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L3htcE1NOkhpc3Rvcnk%2BCiAgICAgICAgIDxkYzpmb3JtYXQ%2BaW1hZ2UvcG5nPC9kYzpmb3JtYXQ%2BCiAgICAgICAgIDxwaG90b3Nob3A6Q29sb3JNb2RlPjM8L3Bob3Rvc2hvcDpDb2xvck1vZGU%2BCiAgICAgICAgIDxwaG90b3Nob3A6SUNDUHJvZmlsZT5zUkdCIElFQzYxOTY2LTIuMTwvcGhvdG9zaG9wOklDQ1Byb2ZpbGU%2BCiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24%2BCiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjcyMDAwMC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24%2BNzIwMDAwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjc8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24%2BNzwvZXhpZjpQaXhlbFlEaW1lbnNpb24%2BCiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY%2BCjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8%2BcZUZMwAAACBjSFJNAAB6JQAAgIMAAPn%2FAACA6QAAdTAAAOpgAAA6mAAAF2%2BSX8VGAAAA2ElEQVR42gDLADT%2FAS0tLUQFBQUVFxcXtPHx8fPl5eUNCAgITCkpKesEHx8fGgYGBjH%2B%2Fv4a%2BPj4qgQEBFU6OjodMTExzwQUFBSvEBAQEfX19SD19fVqNDQ0CElJSd%2F9%2Ff2vAwEBAfrn5%2BfkBwcHLRYWFgsXFxfz29vbo9LS0uwDDQ0NDfPz81orKysXIyMj%2BODg4Avh4eEa%2Ff391gMkJCRYPz8%2FKUhISOMCAgKh8fHxHRsbGx4UFBQQBDk5OeY7Ozv7CAgItPb29vMEBASaJSUlTQ0NDesDAEwpT0Ko8Ri2AAAAAElFTkSuQmCC%29%3B%0Acursor%3A%20pointer%3B%0A%2Dwebkit%2Dtouch%2Dcallout%3A%20none%3B%0A%2Dwebkit%2Duser%2Dselect%3A%20none%3B%0A%2Dkhtml%2Duser%2Dselect%3A%20none%3B%0A%2Dmoz%2Duser%2Dselect%3A%20none%3B%0A%2Dms%2Duser%2Dselect%3A%20none%3B%0Auser%2Dselect%3A%20none%3B%0A%7D%0Adiv%2Evis%2Dnetwork%20div%2Evis%2Dclose%3Ahover%20%7B%0Aopacity%3A%200%2E6%3B%0A%7D%0Adiv%2Evis%2Dnetwork%20div%2Evis%2Dmanipulation%20div%2Evis%2Dbutton%2C%0Adiv%2Evis%2Dnetwork%20div%2Evis%2Dedit%2Dmode%20div%2Evis%2Dbutton%20%7B%0Afloat%3Aleft%3B%0Afont%2Dfamily%3A%20verdana%3B%0Afont%2Dsize%3A%2012px%3B%0A%2Dmoz%2Dborder%2Dradius%3A%2015px%3B%0Aborder%2Dradius%3A%2015px%3B%0Adisplay%3Ainline%2Dblock%3B%0Abackground%2Dposition%3A%200px%200px%3B%0Abackground%2Drepeat%3Ano%2Drepeat%3B%0Aheight%3A24px%3B%0Amargin%2Dleft%3A%2010px%3B%0A%0Acursor%3A%20pointer%3B%0Apadding%3A%200px%208px%200px%208px%3B%0A%2Dwebkit%2Dtouch%2Dcallout%3A%20none%3B%0A%2Dwebkit%2Duser%2Dselect%3A%20none%3B%0A%2Dkhtml%2Duser%2Dselect%3A%20none%3B%0A%2Dmoz%2Duser%2Dselect%3A%20none%3B%0A%2Dms%2Duser%2Dselect%3A%20none%3B%0Auser%2Dselect%3A%20none%3B%0A%7D%0Adiv%2Evis%2Dnetwork%20div%2Evis%2Dmanipulation%20div%2Evis%2Dbutton%3Ahover%20%7B%0Abox%2Dshadow%3A%201px%201px%208px%20rgba%280%2C%200%2C%200%2C%200%2E20%29%3B%0A%7D%0Adiv%2Evis%2Dnetwork%20div%2Evis%2Dmanipulation%20div%2Evis%2Dbutton%3Aactive%20%7B%0Abox%2Dshadow%3A%201px%201px%208px%20rgba%280%2C%200%2C%200%2C%200%2E50%29%3B%0A%7D%0Adiv%2Evis%2Dnetwork%20div%2Evis%2Dmanipulation%20div%2Evis%2Dbutton%2Evis%2Dback%20%7B%0Abackground%2Dimage%3A%20url%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89%2BbN%2FrXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz%2FSMBAPh%2BPDwrIsAHvgABeNMLCADATZvAMByH%2Fw%2FqQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf%2BbTAICd%2BJl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA%2Fg88wAAKCRFRHgg%2FP9eM4Ors7ONo62Dl8t6r8G%2FyJiYuP%2B5c%2BrcEAAAOF0ftH%2BLC%2BzGoA7BoBt%2FqIl7gRoXgugdfeLZrIPQLUAoOnaV%2FNw%2BH48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl%2FAV%2F1s%2BX48%2FPf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H%2FLcL%2F%2Fwd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s%2BwM%2B3zUAsGo%2BAXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93%2F%2B8%2F%2FUegJQCAZkmScQAAXkQkLlTKsz%2FHCAAARKCBKrBBG%2FTBGCzABhzBBdzBC%2FxgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD%2FphCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8%2BQ8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8%2BxdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR%2BcQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI%2BksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG%2BQh8lsKnWJAcaT4U%2BIoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr%2Bh0uhHdlR5Ol9BX0svpR%2BiX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK%2BYTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI%2BpXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q%2FpH5Z%2FYkGWcNMw09DpFGgsV%2FjvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY%2FR27iz2qqaE5QzNKM1ezUvOUZj8H45hx%2BJx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4%2FOBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up%2B6Ynr5egJ5Mb6feeb3n%2Bhx9L%2F1U%2FW36p%2FVHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm%2Beb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw%2B6TvZN9un2N%2FT0HDYfZDqsdWh1%2Bc7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc%2BLpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26%2FuNu5p7ofcn8w0nymeWTNz0MPIQ%2BBR5dE%2FC5%2BVMGvfrH5PQ0%2BBZ7XnIy9jL5FXrdewt6V3qvdh7xc%2B9j5yn%2BM%2B4zw33jLeWV%2FMN8C3yLfLT8Nvnl%2BF30N%2FI%2F9k%2F3r%2F0QCngCUBZwOJgUGBWwL7%2BHp8Ib%2BOPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo%2Bqi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt%2F87fOH4p3iC%2BN7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi%2FRNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z%2Bpn5mZ2y6xlhbL%2BxW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a%2FzYnKOZarnivN7cyzytuQN5zvn%2F%2FtEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1%2B1dT1gvWd%2B1YfqGnRs%2BFYmKrhTbF5cVf9go3HjlG4dvyr%2BZ3JS0qavEuWTPZtJm6ebeLZ5bDpaql%2BaXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO%2FPLi8ZafJzs07P1SkVPRU%2BlQ27tLdtWHX%2BG7R7ht7vPY07NXbW7z3%2FT7JvttVAVVN1WbVZftJ%2B7P3P66Jqun4lvttXa1ObXHtxwPSA%2F0HIw6217nU1R3SPVRSj9Yr60cOxx%2B%2B%2Fp3vdy0NNg1VjZzG4iNwRHnk6fcJ3%2FceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w%2B0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb%2B%2B6EHTh0kX%2Fi%2Bc7vDvOXPK4dPKy2%2BUTV7hXmq86X23qdOo8%2FpPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb%2F1tWeOT3dvfN6b%2FfF9%2FXfFt1%2Bcif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v%2B3Njv3H9qwHeg89HcR%2FcGhYPP%2FpH1jw9DBY%2BZj8uGDYbrnjg%2BOTniP3L96fynQ89kzyaeF%2F6i%2FsuuFxYvfvjV69fO0ZjRoZfyl5O%2FbXyl%2FerA6xmv28bCxh6%2ByXgzMV70VvvtwXfcdx3vo98PT%2BR8IH8o%2F2j5sfVT0Kf7kxmTk%2F8EA5jz%2FGMzLdsAAEEOaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu%2B7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI%2FPgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjUtYzAyMSA3OS4xNTQ5MTEsIDIwMTMvMTAvMjktMTE6NDc6MTYgICAgICAgICI%2BCiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI%2BCiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiCiAgICAgICAgICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC94bXA6Q3JlYXRvclRvb2w%2BCiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDE0LTAxLTIyVDE5OjI0OjUxKzAxOjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU%2BMjAxNC0wMi0wNFQxNTowMTowOSswMTowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTQtMDItMDRUMTU6MDE6MDkrMDE6MDA8L3htcDpNb2RpZnlEYXRlPgogICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3BuZzwvZGM6Zm9ybWF0PgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOmI2YjQwMjVkLTAxNjQtMzU0OC1hOTdlLTQ4ZmYxMWM3NTYzMzwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ%2BeG1wLmRpZDpFQTc2MkY5Njc0ODNFMzExOTQ4QkQxM0UyQkU3OTlBMTwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC94bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ%2BCiAgICAgICAgIDx4bXBNTTpIaXN0b3J5PgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24%2BY3JlYXRlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE0LTAxLTIyVDE5OjI0OjUxKzAxOjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgPC9yZGY6bGk%2BCiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6RUE2MEEyNEUxOTg0RTMxMUFEQUZFRkU2RUMzMzNFMDM8L3N0RXZ0Omluc3RhbmNlSUQ%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTQtMDEtMjNUMTk6MTg6MDcrMDE6MDA8L3N0RXZ0OndoZW4%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24%2Bc2F2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ%2BeG1wLmlpZDpmOWQ3OGY4ZC1lNzY0LTc1NDgtODZiNy1iNmQ1OGMzZDg2OTc8L3N0RXZ0Omluc3RhbmNlSUQ%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTQtMDItMDRUMTU6MDE6MDkrMDE6MDA8L3N0RXZ0OndoZW4%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ%2BCiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5jb252ZXJ0ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnBhcmFtZXRlcnM%2BZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZzwvc3RFdnQ6cGFyYW1ldGVycz4KICAgICAgICAgICAgICAgPC9yZGY6bGk%2BCiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPmRlcml2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnBhcmFtZXRlcnM%2BY29udmVydGVkIGZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9wbmc8L3N0RXZ0OnBhcmFtZXRlcnM%2BCiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOmI2YjQwMjVkLTAxNjQtMzU0OC1hOTdlLTQ4ZmYxMWM3NTYzMzwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4%2BMjAxNC0wMi0wNFQxNTowMTowOSswMTowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ%2BQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ%2BLzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk%2BCiAgICAgICAgICAgIDwvcmRmOlNlcT4KICAgICAgICAgPC94bXBNTTpIaXN0b3J5PgogICAgICAgICA8eG1wTU06RGVyaXZlZEZyb20gcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICA8c3RSZWY6aW5zdGFuY2VJRD54bXAuaWlkOmY5ZDc4ZjhkLWU3NjQtNzU0OC04NmI3LWI2ZDU4YzNkODY5Nzwvc3RSZWY6aW5zdGFuY2VJRD4KICAgICAgICAgICAgPHN0UmVmOmRvY3VtZW50SUQ%2BeG1wLmRpZDpFQTc2MkY5Njc0ODNFMzExOTQ4QkQxM0UyQkU3OTlBMTwvc3RSZWY6ZG9jdW1lbnRJRD4KICAgICAgICAgICAgPHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC9zdFJlZjpvcmlnaW5hbERvY3VtZW50SUQ%2BCiAgICAgICAgIDwveG1wTU06RGVyaXZlZEZyb20%2BCiAgICAgICAgIDxwaG90b3Nob3A6Q29sb3JNb2RlPjM8L3Bob3Rvc2hvcDpDb2xvck1vZGU%2BCiAgICAgICAgIDxwaG90b3Nob3A6SUNDUHJvZmlsZT5zUkdCIElFQzYxOTY2LTIuMTwvcGhvdG9zaG9wOklDQ1Byb2ZpbGU%2BCiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24%2BCiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjcyMDA5MC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24%2BNzIwMDkwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjI0PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjI0PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24%2BCiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE%2BCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw%2FeHBhY2tldCBlbmQ9InciPz4jq1U%2FAAAAIGNIUk0AAHolAACAgwAA%2Bf8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAVTSURBVHjanFVfTFNnFP%2Bd77ve8qeVFbBrpcVgRrCRFikFByLxwSAaE32oRCHD6JMxxhhn8G2RxxH3MsOTbyYsmCAxPMmMMYtkIUYmK60OO0qAK23BFlNob0uh3x7WS5jLZPpLbm6%2Bk%2FP9zrm5v9855PF4UFhYCABgjIExBgAgIqRSqRIi6gDQRkQ1RGTB3wgR0e8AHgH4Sa%2FXR%2FEBiAiJRAJ04cIF5Ofng4g2n0gkUkxENwF0c843LzHGQEQQQkCLExEA9ALotVgsUQAQQmgNQhJCbF5kjCEUCl0moj4t5na7fTU1NUpVVVXUYrEkASAcDhe8efOmxOfzWScmJqoBdBNR99LS0hWz2dynNSSEAF28eBGFhYVgjCEcDn9HRD1EhIMHD3o9Hs9kWVlZAh9BKBQqGB4edr58%2BdKZ%2B6JbJpOpBwBWV1fB6%2BrqIMsyIpHIFcZYL2MMra2tY5cuXRrfuXNnBtvAYDBk3G63oqpqZm5uzgrgSDKZjBoMhueZTAbc5XIhFouVEtFTxhiOHTs2dv78eS8%2BEfv374%2BoqpqZnZ21cs5PJJPJPlmWkyynnBuMMTQ0NHi7uro%2BmVyDx%2BPxulwu71ZOlkqlSonoJhGhvb39s8k1nDx50ss5hyRJN9PpdKlERB2aWjSVaEilUvzBgwcORVEs5eXloXPnzk1sV8BkMiUdDofP7%2FdXZ7PZDilnIhw4cGBeS1pbW2P37t1zBwKBikQiUUREWFhYsHHO0d7evm0Ru90%2B%2F%2BrVq2rO%2BXGJiJxEhMrKyhgAjI6OWoeHh5tWVla%2B4JzDZrO9bW5unhwcHGzz%2B%2F32np4e%2BxaDbfoHAMxmc6ijo2O0oqIiJkkSNjY2HBIRmRljMJvNyWfPnln7%2B%2FtPMMZQXl6%2B0NbW9qK2tjYcj8floaEhqKpq%2BHCkbD3PzMwYBgYG0NXV9UuusFna2kEgELAQEQ4dOvSis7PzN41Ar9dnrl27NqCNkv%2FC3bt3zy4tLVmICJxzEBFJRBQmorLFxcWCqqqq0Pj4eO3Y2JhbUZTdra2tL2pra8OJRGLHnTt3zkqS9K%2BhuHU4EhHMZnMoGo0W5OIh7nK5jjLGKq1W69vDhw8rRqMxMjc3t2t5eXnX5ORklc%2FnM%2Bfl5SWnpqa%2B0uv1K%2Fn5%2BWs6nW5NluXNd15e3ppOp1uz2WyzZ86cGQ0Gg6ZAIFCZzWZ%2FlYjokRDiuN%2Fvt7W0tMw3NTUpbrd78P79%2B%2B5gMFgRiUTKHj58WMYYQ3V19etTp05tq6Lp6Wkb5xxCiEfc7XZPM8a6FxcXTfX19a%2F1en2Gcy5qamreNjY2%2FqGq6joRZe12%2B9Tp06e3JY%2FFYgWPHz8%2Bmhvr3%2FCWlpbk%2Bvp6PmOseWVlBS6XS9GSJUkSdrs93NDQ8Oe%2BffvC%2F8fJIyMjddFo9Esi6pVleVjT2m0A8Hq9zqGhIefnjoknT544A4GAM%2FeDbxMReFNTE0pKSpKqqsaI6Pj8%2FLxVVdWM3W6PfCr5xMTE1zllXS0uLn6aSqXAGxsbodPpoNfrn6uqCs75EUVRrJFIZMfevXsXdTrdxseIE4mEPDIyUu%2F3%2B%2Btynd8yGo29RIR0Og26fv06ioqKwBgD5xzv3r27zBjrIyJIkgSHwzFZWVmp7NmzJ1ZaWpoAgGg0WqgoSvHMzIw1GAw6tvjhitFo7NPW5fv370Hd3d0oKCgA53zTQMvLy%2BVCiKuSJH0rSdLmztZytIWv5RPRD0T0Y3Fx8dzWfby6ugopHo%2F%2Fw4mcc8iyPMc5v5FOp7%2FPZrOdQohWInIC2C2EgBBigYi8Qoifs9lsv06nWyIiaFxagXg8jr8GAGxuIe7LBeWhAAAAAElFTkSuQmCC%29%3B%0A%7D%0Adiv%2Evis%2Dnetwork%20div%2Evis%2Dmanipulation%20div%2Evis%2Dbutton%2Evis%2Dnone%3Ahover%20%7B%0Abox%2Dshadow%3A%201px%201px%208px%20rgba%280%2C%200%2C%200%2C%200%2E0%29%3B%0Acursor%3A%20default%3B%0A%7D%0Adiv%2Evis%2Dnetwork%20div%2Evis%2Dmanipulation%20div%2Evis%2Dbutton%2Evis%2Dnone%3Aactive%20%7B%0Abox%2Dshadow%3A%201px%201px%208px%20rgba%280%2C%200%2C%200%2C%200%2E0%29%3B%0A%7D%0Adiv%2Evis%2Dnetwork%20div%2Evis%2Dmanipulation%20div%2Evis%2Dbutton%2Evis%2Dnone%20%7B%0Apadding%3A%200%3B%0A%7D%0Adiv%2Evis%2Dnetwork%20div%2Evis%2Dmanipulation%20div%2Enotification%20%7B%0Amargin%3A%202px%3B%0Afont%2Dweight%3A%20bold%3B%0A%7D%0Adiv%2Evis%2Dnetwork%20div%2Evis%2Dmanipulation%20div%2Evis%2Dbutton%2Evis%2Dadd%20%7B%0Abackground%2Dimage%3A%20url%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89%2BbN%2FrXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz%2FSMBAPh%2BPDwrIsAHvgABeNMLCADATZvAMByH%2Fw%2FqQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf%2BbTAICd%2BJl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA%2Fg88wAAKCRFRHgg%2FP9eM4Ors7ONo62Dl8t6r8G%2FyJiYuP%2B5c%2BrcEAAAOF0ftH%2BLC%2BzGoA7BoBt%2FqIl7gRoXgugdfeLZrIPQLUAoOnaV%2FNw%2BH48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl%2FAV%2F1s%2BX48%2FPf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H%2FLcL%2F%2Fwd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s%2BwM%2B3zUAsGo%2BAXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93%2F%2B8%2F%2FUegJQCAZkmScQAAXkQkLlTKsz%2FHCAAARKCBKrBBG%2FTBGCzABhzBBdzBC%2FxgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD%2FphCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8%2BQ8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8%2BxdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR%2BcQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI%2BksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG%2BQh8lsKnWJAcaT4U%2BIoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr%2Bh0uhHdlR5Ol9BX0svpR%2BiX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK%2BYTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI%2BpXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q%2FpH5Z%2FYkGWcNMw09DpFGgsV%2FjvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY%2FR27iz2qqaE5QzNKM1ezUvOUZj8H45hx%2BJx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4%2FOBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up%2B6Ynr5egJ5Mb6feeb3n%2Bhx9L%2F1U%2FW36p%2FVHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm%2Beb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw%2B6TvZN9un2N%2FT0HDYfZDqsdWh1%2Bc7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc%2BLpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26%2FuNu5p7ofcn8w0nymeWTNz0MPIQ%2BBR5dE%2FC5%2BVMGvfrH5PQ0%2BBZ7XnIy9jL5FXrdewt6V3qvdh7xc%2B9j5yn%2BM%2B4zw33jLeWV%2FMN8C3yLfLT8Nvnl%2BF30N%2FI%2F9k%2F3r%2F0QCngCUBZwOJgUGBWwL7%2BHp8Ib%2BOPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo%2Bqi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt%2F87fOH4p3iC%2BN7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi%2FRNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z%2Bpn5mZ2y6xlhbL%2BxW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a%2FzYnKOZarnivN7cyzytuQN5zvn%2F%2FtEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1%2B1dT1gvWd%2B1YfqGnRs%2BFYmKrhTbF5cVf9go3HjlG4dvyr%2BZ3JS0qavEuWTPZtJm6ebeLZ5bDpaql%2BaXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO%2FPLi8ZafJzs07P1SkVPRU%2BlQ27tLdtWHX%2BG7R7ht7vPY07NXbW7z3%2FT7JvttVAVVN1WbVZftJ%2B7P3P66Jqun4lvttXa1ObXHtxwPSA%2F0HIw6217nU1R3SPVRSj9Yr60cOxx%2B%2B%2Fp3vdy0NNg1VjZzG4iNwRHnk6fcJ3%2FceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w%2B0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb%2B%2B6EHTh0kX%2Fi%2Bc7vDvOXPK4dPKy2%2BUTV7hXmq86X23qdOo8%2FpPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb%2F1tWeOT3dvfN6b%2FfF9%2FXfFt1%2Bcif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v%2B3Njv3H9qwHeg89HcR%2FcGhYPP%2FpH1jw9DBY%2BZj8uGDYbrnjg%2BOTniP3L96fynQ89kzyaeF%2F6i%2FsuuFxYvfvjV69fO0ZjRoZfyl5O%2FbXyl%2FerA6xmv28bCxh6%2ByXgzMV70VvvtwXfcdx3vo98PT%2BR8IH8o%2F2j5sfVT0Kf7kxmTk%2F8EA5jz%2FGMzLdsAAEEOaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu%2B7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI%2FPgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjUtYzAyMSA3OS4xNTQ5MTEsIDIwMTMvMTAvMjktMTE6NDc6MTYgICAgICAgICI%2BCiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI%2BCiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiCiAgICAgICAgICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC94bXA6Q3JlYXRvclRvb2w%2BCiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDE0LTAxLTIyVDE5OjI0OjUxKzAxOjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU%2BMjAxNC0wMi0wNFQxNDo0MDoyOSswMTowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTQtMDItMDRUMTQ6NDA6MjkrMDE6MDA8L3htcDpNb2RpZnlEYXRlPgogICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3BuZzwvZGM6Zm9ybWF0PgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOjVkNWIwNmQwLTVmMjAtOGE0NC1hMzIwLWZmMTEzMzQwNDc0YjwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ%2BeG1wLmRpZDpFQTc2MkY5Njc0ODNFMzExOTQ4QkQxM0UyQkU3OTlBMTwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC94bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ%2BCiAgICAgICAgIDx4bXBNTTpIaXN0b3J5PgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24%2BY3JlYXRlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE0LTAxLTIyVDE5OjI0OjUxKzAxOjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgPC9yZGY6bGk%2BCiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6RUE2MEEyNEUxOTg0RTMxMUFEQUZFRkU2RUMzMzNFMDM8L3N0RXZ0Omluc3RhbmNlSUQ%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTQtMDEtMjNUMTk6MTg6MDcrMDE6MDA8L3N0RXZ0OndoZW4%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24%2Bc2F2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ%2BeG1wLmlpZDo2OWVmYWE1NS01ZTI5LTIzNGUtYTUzMy0xNDkxYjM1NDNmYmE8L3N0RXZ0Omluc3RhbmNlSUQ%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTQtMDItMDRUMTQ6NDA6MjkrMDE6MDA8L3N0RXZ0OndoZW4%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ%2BCiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5jb252ZXJ0ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnBhcmFtZXRlcnM%2BZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZzwvc3RFdnQ6cGFyYW1ldGVycz4KICAgICAgICAgICAgICAgPC9yZGY6bGk%2BCiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPmRlcml2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnBhcmFtZXRlcnM%2BY29udmVydGVkIGZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9wbmc8L3N0RXZ0OnBhcmFtZXRlcnM%2BCiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjVkNWIwNmQwLTVmMjAtOGE0NC1hMzIwLWZmMTEzMzQwNDc0Yjwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4%2BMjAxNC0wMi0wNFQxNDo0MDoyOSswMTowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ%2BQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ%2BLzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk%2BCiAgICAgICAgICAgIDwvcmRmOlNlcT4KICAgICAgICAgPC94bXBNTTpIaXN0b3J5PgogICAgICAgICA8eG1wTU06RGVyaXZlZEZyb20gcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICA8c3RSZWY6aW5zdGFuY2VJRD54bXAuaWlkOjY5ZWZhYTU1LTVlMjktMjM0ZS1hNTMzLTE0OTFiMzU0M2ZiYTwvc3RSZWY6aW5zdGFuY2VJRD4KICAgICAgICAgICAgPHN0UmVmOmRvY3VtZW50SUQ%2BeG1wLmRpZDpFQTc2MkY5Njc0ODNFMzExOTQ4QkQxM0UyQkU3OTlBMTwvc3RSZWY6ZG9jdW1lbnRJRD4KICAgICAgICAgICAgPHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC9zdFJlZjpvcmlnaW5hbERvY3VtZW50SUQ%2BCiAgICAgICAgIDwveG1wTU06RGVyaXZlZEZyb20%2BCiAgICAgICAgIDxwaG90b3Nob3A6Q29sb3JNb2RlPjM8L3Bob3Rvc2hvcDpDb2xvck1vZGU%2BCiAgICAgICAgIDxwaG90b3Nob3A6SUNDUHJvZmlsZT5zUkdCIElFQzYxOTY2LTIuMTwvcGhvdG9zaG9wOklDQ1Byb2ZpbGU%2BCiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24%2BCiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjcyMDA5MC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24%2BNzIwMDkwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjI0PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjI0PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24%2BCiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE%2BCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw%2FeHBhY2tldCBlbmQ9InciPz5WKqp9AAAAIGNIUk0AAHolAACAgwAA%2Bf8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAYXSURBVHjafFZtUFTXGX7e9z27sveuMCwYV8ElrA7YSFYHtJUPkaaI0aRqG8wP00zUzljDINNSA%2F2ROtpO24SxnahlxjYd7SSjmUkymcxYlDhQPzHGisEVp8HwYWCVVVgEsrsuLnL74%2B5uqTF9Z%2B7cO%2Fd8PO95zvO851BlZSV0XQcAMDOYGQBARDhX3JRmMDYZwLPMWAzGHACYIgwS46oBNBNwtOL8CwE8EkSEUCgE2rJlC2w2G4go8Zwo%2FbMDgnoG6gxLfAAAYvPDMCCszKTAMIAGAhrWnf15AAAMwwARIRKJgDZv3gy73Q4iAjPjxIr9VVOMRhbAYKB8zvrO0llrfEsdKwLZek6YAPSFvtSu3GtLawu0ZJ6625SHGBQB1T88t6MxvopgMAjaunUrdF0HM%2BP4yv27DMYeJmB1RqW3Jnf3tQX2p0L4P9EXuqEd7PmDp%2BXuMU9sRbvXnnt1TxxACgoKYLVacbzsQDUJGkSATe6qi28uPtzusM6Kxie6NHLGUX3lxVUNX9StPHnn4wy3njuUYcu6n2pNi66avcEXnByP%2Fnv8aiaIyrqz2gO5A9%2B9FI1GIfn5%2BWhZdTAdjFMkwMvZOy7uWnTAOz3L4Yk71m3t69fdfTDoUGTBeHTUfiHQ6lo7Z2OXJvpDAChKe%2BaOCdKRKWxZ2%2B1qb3yyd3GYmRkQ7GQBVs99wfv6on3eR2k4PdTkDEbH7IuS8%2Fsvld%2F561PJS%2FpDk1%2Fbzwx94pze7xc5v%2FH%2BYPY6r5BAkdrJzODTK46lE6PeYEJt7u%2B8j%2BOZwCBiEAgAoNgKJoEQf6PvNvdrXgtZoNhSf7q0KZ3B2AQmVMze0Jmt54S%2FDcDCVig2NcvEUGxJAE4Pl%2BYOr0iv6BRSIPAmBeBZAmHlE2sH4p1uhrq1s0MnnEQMBsf8wRASAICQQCCITN1X7%2FsOuc0kgOVp3%2FfPs2WHv%2BcoG7gQOJUnLGsUCTxEjPzUohEA%2BNfIWUdtx0%2BefzA1kSSkIGyBAQNCKgHAEBAJ3u79U7kiAcWoem%2Fgb5Fd33nrH3kp%2BSMWtuAB%2BGllMJxMjCx9QRgA3uiqL5kwHiTlpxb3smlfMDGYGPP1hcMAkJvs8ScpfdJspdj%2BMK6Pf%2B5%2Bu29vyb4lR4%2BBGEziVESAkEpw6Av1OhUpHCz4qOXbzFWz4Ncdj%2Fv%2Fo08Lt92ODDgZDCEFJYoUGH4mzugP92puPTf0pD3H7wvfdFZdqSxnMtWjoGAAmG9fOLxjwesdjT2%2FXzIQ7ks3sycYMSEwGHNtWf5bkX5NkYCJBxUBXiGV0XHvosOt54Zey33j%2FK%2B8P33%2B%2BvjnbiGJbbLE%2BJ9SANAb6nJ2B79wcUwETAwQQ7fMjPzMvfP8ja87HUIKMOiaAqMZhrGmLdAy78eZrwwsTS0eObTs%2BIdtgVanxBUExqGbb5VzrIISGIoUXsmqbgEhJldCQWqRf27SvPAn%2Fo8XmgLhZsUkR4ll37mhk3n94Z4OlzY%2F7NLcYZfm7o1z2zT4vsvUNSXqprBCkmiTFbPX90%2Ffh8GIT2sf%2BzTPdDMf4dVnNg4z%2BE0ixsGeBs9jd5ViSgLHjCb%2FpeaR%2BMD3d4%2FZJg2llyuG2Vwy7QWAs8PNnn1f7vkGSGxAzE6mk%2Bkxkx%2Fp%2F4unffSCR0hAoL1EBCYiPNdWNcwkNQTCR7feWX6g%2B7f%2FA7I8rcw%2FU6UEe0Ndrhc%2FW7mtL9ztmqlSgstSS%2FzTJ28dalpOpkRryrwbhwBACgsLMWPGDOT4ll3qyeqAkJTdCF7P%2FCrUY%2FGkLL1rE%2B2hTbSH8%2B0Lb%2FWEuhzhyaA905blf9Vd%2F895WnZwLHrPevir%2FcvOB1oLYpTtLrm6oYGIMDExAaqtrUVKSgqYGSKCk0WHq5ikkWEWtNL0imv5qUW%2BRclLRjJsrhBAuH1%2FQL8R7HR4xy5nescuP23E6hOA6mLv%2Bsb4uTw6Ogqqq6uDpmkQkcStorX4XRcM1FjZ%2BkvFFjCJKU1WpkNJJUqIMtX1RyLeX3JtQ0JRhmGYZ%2FL27duRnJycuFGISOJ9pqh5lrB6iYgqGOxRrOaa54DcZmKvkJxk8JHC9rKh%2BKVhOsD4%2BDj%2BMwADIf8n5m4xGwAAAABJRU5ErkJggg%3D%3D%29%3B%0A%7D%0Adiv%2Evis%2Dnetwork%20div%2Evis%2Dmanipulation%20div%2Evis%2Dbutton%2Evis%2Dedit%2C%0Adiv%2Evis%2Dnetwork%20div%2Evis%2Dedit%2Dmode%20div%2Evis%2Dbutton%2Evis%2Dedit%20%7B%0Abackground%2Dimage%3A%20url%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89%2BbN%2FrXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz%2FSMBAPh%2BPDwrIsAHvgABeNMLCADATZvAMByH%2Fw%2FqQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf%2BbTAICd%2BJl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA%2Fg88wAAKCRFRHgg%2FP9eM4Ors7ONo62Dl8t6r8G%2FyJiYuP%2B5c%2BrcEAAAOF0ftH%2BLC%2BzGoA7BoBt%2FqIl7gRoXgugdfeLZrIPQLUAoOnaV%2FNw%2BH48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl%2FAV%2F1s%2BX48%2FPf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H%2FLcL%2F%2Fwd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s%2BwM%2B3zUAsGo%2BAXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93%2F%2B8%2F%2FUegJQCAZkmScQAAXkQkLlTKsz%2FHCAAARKCBKrBBG%2FTBGCzABhzBBdzBC%2FxgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD%2FphCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8%2BQ8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8%2BxdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR%2BcQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI%2BksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG%2BQh8lsKnWJAcaT4U%2BIoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr%2Bh0uhHdlR5Ol9BX0svpR%2BiX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK%2BYTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI%2BpXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q%2FpH5Z%2FYkGWcNMw09DpFGgsV%2FjvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY%2FR27iz2qqaE5QzNKM1ezUvOUZj8H45hx%2BJx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4%2FOBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up%2B6Ynr5egJ5Mb6feeb3n%2Bhx9L%2F1U%2FW36p%2FVHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm%2Beb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw%2B6TvZN9un2N%2FT0HDYfZDqsdWh1%2Bc7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc%2BLpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26%2FuNu5p7ofcn8w0nymeWTNz0MPIQ%2BBR5dE%2FC5%2BVMGvfrH5PQ0%2BBZ7XnIy9jL5FXrdewt6V3qvdh7xc%2B9j5yn%2BM%2B4zw33jLeWV%2FMN8C3yLfLT8Nvnl%2BF30N%2FI%2F9k%2F3r%2F0QCngCUBZwOJgUGBWwL7%2BHp8Ib%2BOPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo%2Bqi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt%2F87fOH4p3iC%2BN7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi%2FRNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z%2Bpn5mZ2y6xlhbL%2BxW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a%2FzYnKOZarnivN7cyzytuQN5zvn%2F%2FtEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1%2B1dT1gvWd%2B1YfqGnRs%2BFYmKrhTbF5cVf9go3HjlG4dvyr%2BZ3JS0qavEuWTPZtJm6ebeLZ5bDpaql%2BaXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO%2FPLi8ZafJzs07P1SkVPRU%2BlQ27tLdtWHX%2BG7R7ht7vPY07NXbW7z3%2FT7JvttVAVVN1WbVZftJ%2B7P3P66Jqun4lvttXa1ObXHtxwPSA%2F0HIw6217nU1R3SPVRSj9Yr60cOxx%2B%2B%2Fp3vdy0NNg1VjZzG4iNwRHnk6fcJ3%2FceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w%2B0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb%2B%2B6EHTh0kX%2Fi%2Bc7vDvOXPK4dPKy2%2BUTV7hXmq86X23qdOo8%2FpPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb%2F1tWeOT3dvfN6b%2FfF9%2FXfFt1%2Bcif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v%2B3Njv3H9qwHeg89HcR%2FcGhYPP%2FpH1jw9DBY%2BZj8uGDYbrnjg%2BOTniP3L96fynQ89kzyaeF%2F6i%2FsuuFxYvfvjV69fO0ZjRoZfyl5O%2FbXyl%2FerA6xmv28bCxh6%2ByXgzMV70VvvtwXfcdx3vo98PT%2BR8IH8o%2F2j5sfVT0Kf7kxmTk%2F8EA5jz%2FGMzLdsAAEEOaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu%2B7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI%2FPgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjUtYzAyMSA3OS4xNTQ5MTEsIDIwMTMvMTAvMjktMTE6NDc6MTYgICAgICAgICI%2BCiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI%2BCiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiCiAgICAgICAgICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC94bXA6Q3JlYXRvclRvb2w%2BCiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDE0LTAxLTIyVDE5OjI0OjUxKzAxOjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU%2BMjAxNC0wMi0wNVQxNDoxMjoyNSswMTowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTQtMDItMDVUMTQ6MTI6MjUrMDE6MDA8L3htcDpNb2RpZnlEYXRlPgogICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3BuZzwvZGM6Zm9ybWF0PgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOjY5OTM3ZGZjLTJjNzQtYTU0YS05OTIzLTQyMmZhNDNkMjljNDwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ%2BeG1wLmRpZDpFQTc2MkY5Njc0ODNFMzExOTQ4QkQxM0UyQkU3OTlBMTwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC94bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ%2BCiAgICAgICAgIDx4bXBNTTpIaXN0b3J5PgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24%2BY3JlYXRlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE0LTAxLTIyVDE5OjI0OjUxKzAxOjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgPC9yZGY6bGk%2BCiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6RUE2MEEyNEUxOTg0RTMxMUFEQUZFRkU2RUMzMzNFMDM8L3N0RXZ0Omluc3RhbmNlSUQ%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTQtMDEtMjNUMTk6MTg6MDcrMDE6MDA8L3N0RXZ0OndoZW4%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24%2Bc2F2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ%2BeG1wLmlpZDozOWNhNzE5ZC03YzNlLTUyNGEtYmY1NS03NGVmMmM1MzE0YTc8L3N0RXZ0Omluc3RhbmNlSUQ%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTQtMDItMDVUMTQ6MTI6MjUrMDE6MDA8L3N0RXZ0OndoZW4%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ%2BCiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5jb252ZXJ0ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnBhcmFtZXRlcnM%2BZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZzwvc3RFdnQ6cGFyYW1ldGVycz4KICAgICAgICAgICAgICAgPC9yZGY6bGk%2BCiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPmRlcml2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnBhcmFtZXRlcnM%2BY29udmVydGVkIGZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9wbmc8L3N0RXZ0OnBhcmFtZXRlcnM%2BCiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjY5OTM3ZGZjLTJjNzQtYTU0YS05OTIzLTQyMmZhNDNkMjljNDwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4%2BMjAxNC0wMi0wNVQxNDoxMjoyNSswMTowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ%2BQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ%2BLzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk%2BCiAgICAgICAgICAgIDwvcmRmOlNlcT4KICAgICAgICAgPC94bXBNTTpIaXN0b3J5PgogICAgICAgICA8eG1wTU06RGVyaXZlZEZyb20gcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICA8c3RSZWY6aW5zdGFuY2VJRD54bXAuaWlkOjM5Y2E3MTlkLTdjM2UtNTI0YS1iZjU1LTc0ZWYyYzUzMTRhNzwvc3RSZWY6aW5zdGFuY2VJRD4KICAgICAgICAgICAgPHN0UmVmOmRvY3VtZW50SUQ%2BeG1wLmRpZDpFQTc2MkY5Njc0ODNFMzExOTQ4QkQxM0UyQkU3OTlBMTwvc3RSZWY6ZG9jdW1lbnRJRD4KICAgICAgICAgICAgPHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC9zdFJlZjpvcmlnaW5hbERvY3VtZW50SUQ%2BCiAgICAgICAgIDwveG1wTU06RGVyaXZlZEZyb20%2BCiAgICAgICAgIDxwaG90b3Nob3A6Q29sb3JNb2RlPjM8L3Bob3Rvc2hvcDpDb2xvck1vZGU%2BCiAgICAgICAgIDxwaG90b3Nob3A6SUNDUHJvZmlsZT5zUkdCIElFQzYxOTY2LTIuMTwvcGhvdG9zaG9wOklDQ1Byb2ZpbGU%2BCiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24%2BCiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjcyMDA5MC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24%2BNzIwMDkwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjI0PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjI0PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24%2BCiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE%2BCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw%2FeHBhY2tldCBlbmQ9InciPz4ykninAAAAIGNIUk0AAHolAACAgwAA%2Bf8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAYpSURBVHjafFZtTFvnFX7Oea%2BNudiY2Hwam4CBlgQwXdKREDKUoYg0jbRJ29RJ2VZ1mjRFUxSpA3VTfkzJfkQbS7spU6rtx5Z2UtppScjaHxvLuiatWi2jLEoMIUDCh23g2gbj7%2BtPuPvhOurawPl1dc99n%2Bc55z33fV46ceIEZFkGADAziAgAQERoe%2F9ZK4GPM%2FAcgbsIXAcABCgMvkfAqAa89eDoJyF8LogIqqqChoaGYDAYHr8kItS8uc8iIH6iAa9IkAo5EAQX8pqmgUVBCBggYFgDhv0%2FGAsBgKZpICJkMhnQ4OAgZFkGEYGZUXmp%2B0cS%2BCKBwWA0DVRPOg5Zl2q6zaHyJlnVAMQXVTkwHrUqH0Xsvn%2BtdQAAMQDgpPLS2MViFY8rkGUZzIzaS%2Ft%2FxqCzGggtz9e697zsnKhoLUtim4jOq%2FLE6x7X0nsh16dEZ5a%2FO3a2SCAOHjwInU6Hujd6ThJ4mCDQ%2Bb2G232v7v6vwarPbQn8MGlMr%2BX0kpE3Wr5Zt5hL5HPhqYSdQIfKJ%2ByhxDPKWC6Xg%2Bjt7UXD5b5KBt1kCHS85Ljd8%2FOn3NupfnhFaZj4rWff1B98B1R%2FhnUmKd36bdtCNl4g0en4edNE%2FcXwLq8qMTMIPAQwmo%2FWuHvObA8%2B9c58k%2FdKtD0TyZWXN5YGA7ej7epKxspM%2F%2F7SoNOdWc%2FJyq2wiwhDzPxT8cP0jys3VMM7OmL0%2F77zn4Ydui3b8uiK0jD7RrA77c9Wd57cefPpF%2B2T6bWsFPWkaiPTCWvTsZpHFU%2BXrS%2B8G3AR08F6X%2B1FJvBxQQzHQOWk2SmrW4FPX%2FU2LVwPuDZj%2BfJKl2khPpeyAqA9rzR%2FYqwuiWXX8taN%2FCabGkrVuq9YJlkQQDjOAJ5jAhz9Vt9W4N5%2FrNp8I%2BvtMV%2FaZm4zLnUNNt0urdYnF68HWoJj4Wo1mLGUNRr8LEgDgNqeCh8xQIKOsgC7iAjVe83rT9zQa8uNM28u70kspessu8q8zq%2FV3NcZpVzb9%2B0zmVhOvvvrhaMVzrJg0zeq7xMVCCwdpnWSGBqjUyJwLTFgbvxie3w31uoWR1Y74r60rdxZqrR8q85t2W2MGCp12bm%2FKC3hyaSTiMhxuGrKcahqpbjOaDOoEhOEoFqJQCCJvqA85I6bfTdDjQlf2lbxVNlS6wt19yy7jRHZZlDnrinNj%2F6sHMhnNw2Ogco7O79e5fm%2FxQywRBBCEAuwn4gQ96bkYj4Vyuq9N1Z3Bj4Od5bs0MXt%2FdZZ21ctiqFan174q985P%2BLfp%2BU1g7XDON%2F1ctP458WlVjLyJhOISZE0wM0S1QfuRC3lTjkJAKKEtNC9eIOhSh9xHLZOJRZTFuXDsEoStLkR%2F768ummsaJG9Pb9oe%2B9J%2BxaeSVokiQDSJphAo5uaBuWjiKP4QTqS1cUWU7ayesN66wu22frD1vmVW6GW6T8u9eVjGyZzs%2Bw78Nqu0a2mbvVu1KEJQAgeZRL0liQYyx%2BGOmKeQpu0rMYsAJPNEFGD2dLodLIy6c9Ys7G8yeSUl3tf2%2FX3rcBVJSOv34l3sCBogi7z1LH%2FrBHjl4IJ93%2FncQFAnjeImJD0Z8zuCwu9q3djDXqTlAKID5xv%2B9t2R8n8VcUFBljQ8Gyfe40BYBM4DwDLt8Kue79ZcFkbzfEdbUbv%2BoN4c9KTtsfm1MbYQqqh%2B2zrVZYKs%2F7Ef%2Bbyimt1POYiJhDhPBFBIiIEXhxfs7%2FdfYoIF%2BauBfYTE%2Fpebx%2FV8hqBP2ODvD34yvuh%2FWCAmU75Bx6sIgaI%2Fv5%2B6PV6JLqUsYr7dpDAoehs0h73pHTWrvKgThYbRSt9UmSjef3MpaUvBz4O72UmADgTOPJguGiZor%2B%2FHyUlJWBmJFz%2BD8xTtlUiOpbwpmrmrweeSXrT%2Bg11k4SBN3RGKUcAVCVdFhyP1nreDbY%2F%2FNPyEXUlU%2FPp4XYycGT6V0Ux2WwWdO7cOZSWlkII8diX7SPPNgDaKdbxoNAxwATBAEkEEgSWCEQAqPAMwqvMdCEwMO0tVqZpWsGTT58%2BDaPR%2BPhGIYQAAAgh0P7B3ioW%2FB0iGiCGiwXbCuOHFSJys6AbYFye2T%2BxWhT3WYJEIoH%2FDQBMw3kes8OJPgAAAABJRU5ErkJggg%3D%3D%29%3B%0A%7D%0Adiv%2Evis%2Dnetwork%20div%2Evis%2Dedit%2Dmode%20div%2Evis%2Dbutton%2Evis%2Dedit%2Evis%2Dedit%2Dmode%20%7B%0Abackground%2Dcolor%3A%20%23fcfcfc%3B%0Aborder%3A%201px%20solid%20%23cccccc%3B%0A%7D%0Adiv%2Evis%2Dnetwork%20div%2Evis%2Dmanipulation%20div%2Evis%2Dbutton%2Evis%2Dconnect%20%7B%0Abackground%2Dimage%3A%20url%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89%2BbN%2FrXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz%2FSMBAPh%2BPDwrIsAHvgABeNMLCADATZvAMByH%2Fw%2FqQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf%2BbTAICd%2BJl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA%2Fg88wAAKCRFRHgg%2FP9eM4Ors7ONo62Dl8t6r8G%2FyJiYuP%2B5c%2BrcEAAAOF0ftH%2BLC%2BzGoA7BoBt%2FqIl7gRoXgugdfeLZrIPQLUAoOnaV%2FNw%2BH48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl%2FAV%2F1s%2BX48%2FPf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H%2FLcL%2F%2Fwd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s%2BwM%2B3zUAsGo%2BAXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93%2F%2B8%2F%2FUegJQCAZkmScQAAXkQkLlTKsz%2FHCAAARKCBKrBBG%2FTBGCzABhzBBdzBC%2FxgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD%2FphCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8%2BQ8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8%2BxdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR%2BcQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI%2BksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG%2BQh8lsKnWJAcaT4U%2BIoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr%2Bh0uhHdlR5Ol9BX0svpR%2BiX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK%2BYTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI%2BpXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q%2FpH5Z%2FYkGWcNMw09DpFGgsV%2FjvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY%2FR27iz2qqaE5QzNKM1ezUvOUZj8H45hx%2BJx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4%2FOBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up%2B6Ynr5egJ5Mb6feeb3n%2Bhx9L%2F1U%2FW36p%2FVHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm%2Beb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw%2B6TvZN9un2N%2FT0HDYfZDqsdWh1%2Bc7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc%2BLpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26%2FuNu5p7ofcn8w0nymeWTNz0MPIQ%2BBR5dE%2FC5%2BVMGvfrH5PQ0%2BBZ7XnIy9jL5FXrdewt6V3qvdh7xc%2B9j5yn%2BM%2B4zw33jLeWV%2FMN8C3yLfLT8Nvnl%2BF30N%2FI%2F9k%2F3r%2F0QCngCUBZwOJgUGBWwL7%2BHp8Ib%2BOPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo%2Bqi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt%2F87fOH4p3iC%2BN7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi%2FRNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z%2Bpn5mZ2y6xlhbL%2BxW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a%2FzYnKOZarnivN7cyzytuQN5zvn%2F%2FtEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1%2B1dT1gvWd%2B1YfqGnRs%2BFYmKrhTbF5cVf9go3HjlG4dvyr%2BZ3JS0qavEuWTPZtJm6ebeLZ5bDpaql%2BaXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO%2FPLi8ZafJzs07P1SkVPRU%2BlQ27tLdtWHX%2BG7R7ht7vPY07NXbW7z3%2FT7JvttVAVVN1WbVZftJ%2B7P3P66Jqun4lvttXa1ObXHtxwPSA%2F0HIw6217nU1R3SPVRSj9Yr60cOxx%2B%2B%2Fp3vdy0NNg1VjZzG4iNwRHnk6fcJ3%2FceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w%2B0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb%2B%2B6EHTh0kX%2Fi%2Bc7vDvOXPK4dPKy2%2BUTV7hXmq86X23qdOo8%2FpPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb%2F1tWeOT3dvfN6b%2FfF9%2FXfFt1%2Bcif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v%2B3Njv3H9qwHeg89HcR%2FcGhYPP%2FpH1jw9DBY%2BZj8uGDYbrnjg%2BOTniP3L96fynQ89kzyaeF%2F6i%2FsuuFxYvfvjV69fO0ZjRoZfyl5O%2FbXyl%2FerA6xmv28bCxh6%2ByXgzMV70VvvtwXfcdx3vo98PT%2BR8IH8o%2F2j5sfVT0Kf7kxmTk%2F8EA5jz%2FGMzLdsAAEEOaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu%2B7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI%2FPgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjUtYzAyMSA3OS4xNTQ5MTEsIDIwMTMvMTAvMjktMTE6NDc6MTYgICAgICAgICI%2BCiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI%2BCiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiCiAgICAgICAgICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC94bXA6Q3JlYXRvclRvb2w%2BCiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDE0LTAxLTIyVDE5OjI0OjUxKzAxOjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU%2BMjAxNC0wMi0wNFQxNDozODo1NyswMTowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTQtMDItMDRUMTQ6Mzg6NTcrMDE6MDA8L3htcDpNb2RpZnlEYXRlPgogICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3BuZzwvZGM6Zm9ybWF0PgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOjlmYjUwMDU0LWE3ODEtMWQ0OC05ZTllLTU2ZWQ5YzhlYjdjNjwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ%2BeG1wLmRpZDpFQTc2MkY5Njc0ODNFMzExOTQ4QkQxM0UyQkU3OTlBMTwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC94bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ%2BCiAgICAgICAgIDx4bXBNTTpIaXN0b3J5PgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24%2BY3JlYXRlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE0LTAxLTIyVDE5OjI0OjUxKzAxOjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgPC9yZGY6bGk%2BCiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6RUE2MEEyNEUxOTg0RTMxMUFEQUZFRkU2RUMzMzNFMDM8L3N0RXZ0Omluc3RhbmNlSUQ%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTQtMDEtMjNUMTk6MTg6MDcrMDE6MDA8L3N0RXZ0OndoZW4%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24%2Bc2F2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ%2BeG1wLmlpZDo3ZWRhMjI0MC0yYTQxLTNlNDQtYWM2My1iNzNiYTE5OWI3Y2E8L3N0RXZ0Omluc3RhbmNlSUQ%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTQtMDItMDRUMTQ6Mzg6NTcrMDE6MDA8L3N0RXZ0OndoZW4%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ%2BCiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5jb252ZXJ0ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnBhcmFtZXRlcnM%2BZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZzwvc3RFdnQ6cGFyYW1ldGVycz4KICAgICAgICAgICAgICAgPC9yZGY6bGk%2BCiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPmRlcml2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnBhcmFtZXRlcnM%2BY29udmVydGVkIGZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9wbmc8L3N0RXZ0OnBhcmFtZXRlcnM%2BCiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjlmYjUwMDU0LWE3ODEtMWQ0OC05ZTllLTU2ZWQ5YzhlYjdjNjwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4%2BMjAxNC0wMi0wNFQxNDozODo1NyswMTowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ%2BQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ%2BLzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk%2BCiAgICAgICAgICAgIDwvcmRmOlNlcT4KICAgICAgICAgPC94bXBNTTpIaXN0b3J5PgogICAgICAgICA8eG1wTU06RGVyaXZlZEZyb20gcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICA8c3RSZWY6aW5zdGFuY2VJRD54bXAuaWlkOjdlZGEyMjQwLTJhNDEtM2U0NC1hYzYzLWI3M2JhMTk5YjdjYTwvc3RSZWY6aW5zdGFuY2VJRD4KICAgICAgICAgICAgPHN0UmVmOmRvY3VtZW50SUQ%2BeG1wLmRpZDpFQTc2MkY5Njc0ODNFMzExOTQ4QkQxM0UyQkU3OTlBMTwvc3RSZWY6ZG9jdW1lbnRJRD4KICAgICAgICAgICAgPHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC9zdFJlZjpvcmlnaW5hbERvY3VtZW50SUQ%2BCiAgICAgICAgIDwveG1wTU06RGVyaXZlZEZyb20%2BCiAgICAgICAgIDxwaG90b3Nob3A6Q29sb3JNb2RlPjM8L3Bob3Rvc2hvcDpDb2xvck1vZGU%2BCiAgICAgICAgIDxwaG90b3Nob3A6SUNDUHJvZmlsZT5zUkdCIElFQzYxOTY2LTIuMTwvcGhvdG9zaG9wOklDQ1Byb2ZpbGU%2BCiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24%2BCiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjcyMDA5MC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24%2BNzIwMDkwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjI0PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjI0PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24%2BCiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE%2BCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw%2FeHBhY2tldCBlbmQ9InciPz4ubxs%2BAAAAIGNIUk0AAHolAACAgwAA%2Bf8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAUtSURBVHjajJZ%2FbNT1Gcdfz%2FP53PV6B4W7VltLqdAaplIOiMOoyxxJCSs%2FGv%2FyB4gzJroAosmmDklwkYWR0bQsdmkykoojTpcsWYLxD%2FlRZdMQkTHRtkLZRqG0tIVe7662vTu43n32x%2FVKZ%2Fjh89cn38%2FzvN7P5%2Fl88zwf2blzJz6fDwARQUSm1n8s31CM0%2FVAnbNmsUPuAsDpgEO%2BBg4C7%2F%2Fiyv5hvmMiQiqVQpqamvB6vVNwEeG1JZtCBrYi%2FMrkAwDNgjhwAlbzICBLA0rDb0%2B%2F839C6XQaaWxspLCw8Dp86cbNmqVFJQddE6KzdjZ9D89g%2BB6fSyCOcyn1nxil%2BO9xKg5HqWFSHGXLjrP7W%2FICqVQK2bNnDz6fDxFh65KNvxbHDhF4rJj2bXPo%2BIGfcW5h5xL4f99P%2BFCEMIAob75x9t0dAMlkElNXV4e1lteXbNqiQoMaeOFOjrdU868SD2luYyEP6dUh%2BsYmSHeOU6GO5Z8VLx5%2BNNZxIpPJ5AS2L3upROCoCvz8Lo7vnkf77cAHhpiz%2FzIL9vWz8L8p%2FNvupmM0Q7pjnAoLqz8tDrc8MnQqYVUVhVdF4LEg7b%2BrvDn8wDDlH0WoPpukLJImSBaMwjcJqmwWts2jPZLG%2F8kwYVFeVdXXZcFf4yVDc2cNKfBFmD9X%2B0ncCP58F48eG%2BFeo2CAUkvs4dl0V%2FuJvdXLiiV%2But%2B%2Bn7YLSfxPfMMG54ChzB3WIesVWB2i82bw1AR6fJR7C4VsfYiv6u%2Fk3A9nEgP4zXke8DiYHyAOMK%2BQxPIgnZ9GqSHr1itQJ8DK2fTerDQ%2BS%2FbHRXQJaHSCwNIZ2Xh%2B7%2BS3VAmwNMBA%2FtuPZtErgKquUmdMWIFlRURvdamRNEXGwIWrlP47pTMzLiunxghGMwTLvcTWlHAp77s4QNSrYMQtss6ZMgWqCm5cHoDHO1nbk6K8zEN8%2B3zatv2Hn1b59EqJZdxmYUERg9P9KwpIiAOTdWUWBXuLzB%2FvZG3P1Un4PNp2d1MbmyD45TWCxuCsQm0x56bHGHFYEZwxok7toAA9Sfw3hCcoL%2FNOwi9QO5wmWO1j4JEgZxTkodmcWRGkf3pcX0r8xoAaBixKu4U5%2FxwndM%2B0tpAvS6mP%2BPZK2nb1UBvPEKwKMLDvPj4ESGc55lGy303sdJKQdZB2rkMdctAB%2F4gzN%2B%2FQ2ENNd4LyUi%2FxN%2BbTtquX2thk5nk4wI3gAF%2BOMNcA1nFQDfK%2BBY5GqbkwWabTY5QZhXWlnNx1ntrY1Rz87fuvw29m%2FSn8J%2BPUGAFj5T19baA1IspuBZp7cx1x4SwG1cEf%2BlgRSROs8jGwb%2BHt4QB%2FGSSsAhYano39LWIBxNEIbP14hPDuiyS2VtJuHXQlKKvxM%2FjiXDq%2FD%2FxPlwifGMkJZB2NIoKpr69nxeiZxLHicFSFVWfGqBidIP3LSjrWltD94CyufF%2F4kQgPuVz2Lz93%2BdDRa9eu5QQ8Hg8%2FiXee%2BDy4CKMs7xqn4nwKz9IirhQqmVuB42m8ey%2Bx7LMoD6iAON782eChhqmRuXfvXgKBAKqKqtI0%2F8nNKrQI4BVYXkzHgzPpC88gWuHL%2FcaXrhLoGiN0apSKr0ZZRBZM7q2w5ZnLR1oAnHOMjY0hra2tFBQUYIyZmstvVT1Z6eDlAuEVq7merxmwueNPDXy9PvybjKP5mctHLk4%2FXTKZRJqbm%2FH7%2FVNw1VyEMYbW4FN3WNWnnchKoy5sHeVGBRX6VWi3ymFx7r11Ix8MTX%2Fy5C2RSPC%2FAQB61erowbpqSwAAAABJRU5ErkJggg%3D%3D%29%3B%0A%7D%0Adiv%2Evis%2Dnetwork%20div%2Evis%2Dmanipulation%20div%2Evis%2Dbutton%2Evis%2Ddelete%20%7B%0Abackground%2Dimage%3A%20url%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89%2BbN%2FrXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz%2FSMBAPh%2BPDwrIsAHvgABeNMLCADATZvAMByH%2Fw%2FqQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf%2BbTAICd%2BJl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA%2Fg88wAAKCRFRHgg%2FP9eM4Ors7ONo62Dl8t6r8G%2FyJiYuP%2B5c%2BrcEAAAOF0ftH%2BLC%2BzGoA7BoBt%2FqIl7gRoXgugdfeLZrIPQLUAoOnaV%2FNw%2BH48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl%2FAV%2F1s%2BX48%2FPf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H%2FLcL%2F%2Fwd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s%2BwM%2B3zUAsGo%2BAXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93%2F%2B8%2F%2FUegJQCAZkmScQAAXkQkLlTKsz%2FHCAAARKCBKrBBG%2FTBGCzABhzBBdzBC%2FxgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD%2FphCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8%2BQ8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8%2BxdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR%2BcQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI%2BksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG%2BQh8lsKnWJAcaT4U%2BIoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr%2Bh0uhHdlR5Ol9BX0svpR%2BiX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK%2BYTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI%2BpXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q%2FpH5Z%2FYkGWcNMw09DpFGgsV%2FjvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY%2FR27iz2qqaE5QzNKM1ezUvOUZj8H45hx%2BJx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4%2FOBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up%2B6Ynr5egJ5Mb6feeb3n%2Bhx9L%2F1U%2FW36p%2FVHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm%2Beb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw%2B6TvZN9un2N%2FT0HDYfZDqsdWh1%2Bc7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc%2BLpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26%2FuNu5p7ofcn8w0nymeWTNz0MPIQ%2BBR5dE%2FC5%2BVMGvfrH5PQ0%2BBZ7XnIy9jL5FXrdewt6V3qvdh7xc%2B9j5yn%2BM%2B4zw33jLeWV%2FMN8C3yLfLT8Nvnl%2BF30N%2FI%2F9k%2F3r%2F0QCngCUBZwOJgUGBWwL7%2BHp8Ib%2BOPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo%2Bqi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt%2F87fOH4p3iC%2BN7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi%2FRNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z%2Bpn5mZ2y6xlhbL%2BxW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a%2FzYnKOZarnivN7cyzytuQN5zvn%2F%2FtEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1%2B1dT1gvWd%2B1YfqGnRs%2BFYmKrhTbF5cVf9go3HjlG4dvyr%2BZ3JS0qavEuWTPZtJm6ebeLZ5bDpaql%2BaXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO%2FPLi8ZafJzs07P1SkVPRU%2BlQ27tLdtWHX%2BG7R7ht7vPY07NXbW7z3%2FT7JvttVAVVN1WbVZftJ%2B7P3P66Jqun4lvttXa1ObXHtxwPSA%2F0HIw6217nU1R3SPVRSj9Yr60cOxx%2B%2B%2Fp3vdy0NNg1VjZzG4iNwRHnk6fcJ3%2FceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w%2B0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb%2B%2B6EHTh0kX%2Fi%2Bc7vDvOXPK4dPKy2%2BUTV7hXmq86X23qdOo8%2FpPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb%2F1tWeOT3dvfN6b%2FfF9%2FXfFt1%2Bcif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v%2B3Njv3H9qwHeg89HcR%2FcGhYPP%2FpH1jw9DBY%2BZj8uGDYbrnjg%2BOTniP3L96fynQ89kzyaeF%2F6i%2FsuuFxYvfvjV69fO0ZjRoZfyl5O%2FbXyl%2FerA6xmv28bCxh6%2ByXgzMV70VvvtwXfcdx3vo98PT%2BR8IH8o%2F2j5sfVT0Kf7kxmTk%2F8EA5jz%2FGMzLdsAAEEOaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu%2B7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI%2FPgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjUtYzAyMSA3OS4xNTQ5MTEsIDIwMTMvMTAvMjktMTE6NDc6MTYgICAgICAgICI%2BCiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI%2BCiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiCiAgICAgICAgICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC94bXA6Q3JlYXRvclRvb2w%2BCiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDE0LTAxLTIyVDE5OjI0OjUxKzAxOjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU%2BMjAxNC0wMi0wNFQxNDo0MTowNCswMTowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTQtMDItMDRUMTQ6NDE6MDQrMDE6MDA8L3htcDpNb2RpZnlEYXRlPgogICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3BuZzwvZGM6Zm9ybWF0PgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOjc3NDkzYmUxLTEyZGItOTg0NC1iNDYyLTg2NGVmNGIzMzM3MTwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ%2BeG1wLmRpZDpFQTc2MkY5Njc0ODNFMzExOTQ4QkQxM0UyQkU3OTlBMTwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC94bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ%2BCiAgICAgICAgIDx4bXBNTTpIaXN0b3J5PgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24%2BY3JlYXRlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE0LTAxLTIyVDE5OjI0OjUxKzAxOjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgPC9yZGY6bGk%2BCiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6RUE2MEEyNEUxOTg0RTMxMUFEQUZFRkU2RUMzMzNFMDM8L3N0RXZ0Omluc3RhbmNlSUQ%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTQtMDEtMjNUMTk6MTg6MDcrMDE6MDA8L3N0RXZ0OndoZW4%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24%2Bc2F2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ%2BeG1wLmlpZDowNmE3NWYwMy04MDdhLWUzNGYtYjk1Zi1jZGU2MjM0Mzg4OGY8L3N0RXZ0Omluc3RhbmNlSUQ%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTQtMDItMDRUMTQ6NDE6MDQrMDE6MDA8L3N0RXZ0OndoZW4%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ%2BCiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5jb252ZXJ0ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnBhcmFtZXRlcnM%2BZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZzwvc3RFdnQ6cGFyYW1ldGVycz4KICAgICAgICAgICAgICAgPC9yZGY6bGk%2BCiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPmRlcml2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnBhcmFtZXRlcnM%2BY29udmVydGVkIGZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9wbmc8L3N0RXZ0OnBhcmFtZXRlcnM%2BCiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjc3NDkzYmUxLTEyZGItOTg0NC1iNDYyLTg2NGVmNGIzMzM3MTwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4%2BMjAxNC0wMi0wNFQxNDo0MTowNCswMTowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ%2BQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ%2BLzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk%2BCiAgICAgICAgICAgIDwvcmRmOlNlcT4KICAgICAgICAgPC94bXBNTTpIaXN0b3J5PgogICAgICAgICA8eG1wTU06RGVyaXZlZEZyb20gcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICA8c3RSZWY6aW5zdGFuY2VJRD54bXAuaWlkOjA2YTc1ZjAzLTgwN2EtZTM0Zi1iOTVmLWNkZTYyMzQzODg4Zjwvc3RSZWY6aW5zdGFuY2VJRD4KICAgICAgICAgICAgPHN0UmVmOmRvY3VtZW50SUQ%2BeG1wLmRpZDpFQTc2MkY5Njc0ODNFMzExOTQ4QkQxM0UyQkU3OTlBMTwvc3RSZWY6ZG9jdW1lbnRJRD4KICAgICAgICAgICAgPHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC9zdFJlZjpvcmlnaW5hbERvY3VtZW50SUQ%2BCiAgICAgICAgIDwveG1wTU06RGVyaXZlZEZyb20%2BCiAgICAgICAgIDxwaG90b3Nob3A6Q29sb3JNb2RlPjM8L3Bob3Rvc2hvcDpDb2xvck1vZGU%2BCiAgICAgICAgIDxwaG90b3Nob3A6SUNDUHJvZmlsZT5zUkdCIElFQzYxOTY2LTIuMTwvcGhvdG9zaG9wOklDQ1Byb2ZpbGU%2BCiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24%2BCiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjcyMDA5MC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24%2BNzIwMDkwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjI0PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjI0PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24%2BCiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE%2BCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw%2FeHBhY2tldCBlbmQ9InciPz4aYJzYAAAAIGNIUk0AAHolAACAgwAA%2Bf8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAYGSURBVHjalJZ7UJTnFcZ%2F73m%2F72PdJY1RbhoQp6lkXRAvmIYxdCUadLVOozPNtGObap1JsKipjiShbdoRbeKEiQHpQK3xj0xa03aamTbaTGyAYV1QGeqFi%2BJyiZFLAlmESBkWRmS3fyzslGkmnZ5%2Fv%2FM873Oe75zzvqqoqAibzQaAiKCUAkApRdHIK%2FNFsx2NR91nOSILADDoJyzNaM4xxbtvPHh0iC%2BJiYkJ1OHDh4mJiUEpFSXPv%2FziPC28TIiXDCOSrAClQDSEpsCwJPIhrEBRQpiSytXlQwDhcBilFPfu3UMVFxdjt9ujFTzfcLBADCoEEAFr1ZbrrNjch2vtEImPBgHob7fTcWE%2BbVXJNJ%2FNiFQlEGLvieXHKmYqGB8fRx05cgSbzYaIsPvywV8pKFaA7fGtLTzz61YWpo%2FxVTHQbufsq5lcez9zWuWhk5mvFwMEg0H0%2BvXrMU2Tn1wp3CtCiQ5DjGd3A%2Fm%2Fv8IDCZP8r4iNmyRrWx%2Fj%2F5qktykZpXKzAjVDVxPzGqemptDr1q1jX3NRnIJarcDKK2hgR2ULXRfncv7UYv7xpovhnhiW5Mz%2BkefeSKO6LJ1A1xzEuk%2FOjm4mRibpuZaMZW3OCtRUND60NmiICCIUShisx7a2sLMiQn4s77uEQgIabnqdfHIlgT1%2FqQeg8vs5dHhdCNB1wYn3RIiC995j26stjAbsNH%2BYiZJCESnS1Y%2FXxIXu8r4YIPv%2FVkVs3CTnTy2ms34xro1%2Bsp9po6sxlTu34ultmsPVvy6is86FCHgO%2BDDs49zpjufBpCG%2BseYOC9OHaTidieicb9ouVAhKtouAseI710ma7pLuqwmgYfHqAFt%2B6WdLoQ%2FLBl11Lm7VudAa8vb72PCin9TlAWIsGGhLACD%2BkSAZnusYBii1XQAPYWDllt6ov2lrBkDBR2%2B6Ofuak2%2F%2F3M%2BG%2FT4wAAPW7fPhKfRTVeqk9qQbFKRmDUTxS3N7QYGYmwzCkqklBGlPDEcTNv%2Bsg9tNCbTXuvBWujE0bHrZj9JE1B%2FwU1Pm5PwJN6YBS9a2kVvQEcWnrh5GTFD3lxkYkqRMgYQlwVldUvDnen73LHTUuqitdKM0eAr9AFQfd1J%2Fyo2aJn%2B2sn4Wdn5qEFODJskgBIjx5T0uCrQA08pnIjS9PERDjPnfOKXAMEBECUoGEIHBj%2B2zkt76UQ6dXheGAev3%2Bcg74Kf6uJPqcicbfuond7cPy4SOiy7%2BtD9nFvZurx00KOk3CNEC%2BmE%2BvjSPBc7IWqgqTaPT60IMcO%2FxsXGa3HfKjRgRdbl7%2FKDg0jtubje6aHj7c7J3dgLQ2zoPwwQ91SooOQdAW1VKVMHty0kA5Bb48BycJn%2FLjWFGbLv4thvvb53kFvjJ%2BXEdWkPfjQVR%2FCcNKYgGMc8JWt5Fa2j%2BMIPPuyI2pa4IoHSkt6vLIuRaQ9q32khzt4GCxtNu6k46GeiIR2lIfDQQsafPzq1LGRGL9Gk9d%2BvrwewvfHPQOoexQVjxdB%2Fauk%2FzmaUMdsfz6bVUtIalT7bxveP1ZHh6GPDPYeSzeD69kcpIfxymFWLNrka%2BljhBTWkWwz2JiJT84YHnz2iPx0P20PkmRF5i6HYiwZFJsn%2FYzdezbzE3cQibY5xV266z6RfXohakb%2BxB9CjanCD9qTbW7Grk4WV38VZm0l6dhQiEw9taHSuDqrS0FIfDwXM3X9mHMsvRAk%2FsauDpQy38P%2BGtzOTGB9mEpkD0C2dS8n8zOjqK9ng8WJZFU%2BJTjasGvaCNXPpvJBPoMlm0OoDNMfWVxONfWNSUPUZ7TUQ56tCZlPwSgMnJSVRpaSmxsbFE1raw82ZxAZZRQUiBYUKGp5UlOX2krBzmoUVjiIKhHge9rfPo%2BWcy3ZeXIYASgL1%2FX5RfMXMvj46OosrLy7HZbGitUUohIuzoem0RofALaOsghgWGjky0MiJTL8b0lOvI8hN1DKXKP0jd3TNTWDgcJhgMoo4ePYrD4Yi%2BKmaeLlprnrtXFo9h%2FAAlG1AqE8yFmBrC%2BjO0bgH9EVpO%2F1F2Dc5g%2F%2FOAsbEx%2Fj0Af%2BUSsQynL1UAAAAASUVORK5CYII%3D%29%3B%0A%7D%0A%0Adiv%2Evis%2Dnetwork%20div%2Evis%2Dmanipulation%20div%2Evis%2Dlabel%2C%0Adiv%2Evis%2Dnetwork%20div%2Evis%2Dedit%2Dmode%20div%2Evis%2Dlabel%20%7B%0Amargin%3A%200%200%200%2023px%3B%0Aline%2Dheight%3A%2025px%3B%0A%7D%0Adiv%2Evis%2Dnetwork%20div%2Evis%2Dmanipulation%20div%2Evis%2Dseparator%2Dline%20%7B%0Afloat%3Aleft%3B%0Adisplay%3Ainline%2Dblock%3B%0Awidth%3A1px%3B%0Aheight%3A21px%3B%0Abackground%2Dcolor%3A%20%23bdbdbd%3B%0Amargin%3A%200px%207px%200%2015px%3B%20%0A%7D%0A%0Adiv%2Evis%2Dnetwork%20div%2Evis%2Dnavigation%20div%2Evis%2Dbutton%20%7B%0Awidth%3A34px%3B%0Aheight%3A34px%3B%0A%2Dmoz%2Dborder%2Dradius%3A%2017px%3B%0Aborder%2Dradius%3A%2017px%3B%0Aposition%3Aabsolute%3B%0Adisplay%3Ainline%2Dblock%3B%0Abackground%2Dposition%3A%202px%202px%3B%0Abackground%2Drepeat%3Ano%2Drepeat%3B%0Acursor%3A%20pointer%3B%0A%2Dwebkit%2Dtouch%2Dcallout%3A%20none%3B%0A%2Dwebkit%2Duser%2Dselect%3A%20none%3B%0A%2Dkhtml%2Duser%2Dselect%3A%20none%3B%0A%2Dmoz%2Duser%2Dselect%3A%20none%3B%0A%2Dms%2Duser%2Dselect%3A%20none%3B%0Auser%2Dselect%3A%20none%3B%0A%7D%0Adiv%2Evis%2Dnetwork%20div%2Evis%2Dnavigation%20div%2Evis%2Dbutton%3Ahover%20%7B%0Abox%2Dshadow%3A%200%200%203px%203px%20rgba%2856%2C%20207%2C%2021%2C%200%2E30%29%3B%0A%7D%0Adiv%2Evis%2Dnetwork%20div%2Evis%2Dnavigation%20div%2Evis%2Dbutton%3Aactive%20%7B%0Abox%2Dshadow%3A%200%200%201px%203px%20rgba%2856%2C%20207%2C%2021%2C%200%2E95%29%3B%0A%7D%0Adiv%2Evis%2Dnetwork%20div%2Evis%2Dnavigation%20div%2Evis%2Dbutton%2Evis%2Dup%20%7B%0Abackground%2Dimage%3A%20url%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89%2BbN%2FrXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz%2FSMBAPh%2BPDwrIsAHvgABeNMLCADATZvAMByH%2Fw%2FqQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf%2BbTAICd%2BJl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA%2Fg88wAAKCRFRHgg%2FP9eM4Ors7ONo62Dl8t6r8G%2FyJiYuP%2B5c%2BrcEAAAOF0ftH%2BLC%2BzGoA7BoBt%2FqIl7gRoXgugdfeLZrIPQLUAoOnaV%2FNw%2BH48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl%2FAV%2F1s%2BX48%2FPf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H%2FLcL%2F%2Fwd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s%2BwM%2B3zUAsGo%2BAXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93%2F%2B8%2F%2FUegJQCAZkmScQAAXkQkLlTKsz%2FHCAAARKCBKrBBG%2FTBGCzABhzBBdzBC%2FxgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD%2FphCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8%2BQ8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8%2BxdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR%2BcQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI%2BksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG%2BQh8lsKnWJAcaT4U%2BIoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr%2Bh0uhHdlR5Ol9BX0svpR%2BiX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK%2BYTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI%2BpXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q%2FpH5Z%2FYkGWcNMw09DpFGgsV%2FjvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY%2FR27iz2qqaE5QzNKM1ezUvOUZj8H45hx%2BJx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4%2FOBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up%2B6Ynr5egJ5Mb6feeb3n%2Bhx9L%2F1U%2FW36p%2FVHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm%2Beb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw%2B6TvZN9un2N%2FT0HDYfZDqsdWh1%2Bc7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc%2BLpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26%2FuNu5p7ofcn8w0nymeWTNz0MPIQ%2BBR5dE%2FC5%2BVMGvfrH5PQ0%2BBZ7XnIy9jL5FXrdewt6V3qvdh7xc%2B9j5yn%2BM%2B4zw33jLeWV%2FMN8C3yLfLT8Nvnl%2BF30N%2FI%2F9k%2F3r%2F0QCngCUBZwOJgUGBWwL7%2BHp8Ib%2BOPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo%2Bqi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt%2F87fOH4p3iC%2BN7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi%2FRNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z%2Bpn5mZ2y6xlhbL%2BxW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a%2FzYnKOZarnivN7cyzytuQN5zvn%2F%2FtEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1%2B1dT1gvWd%2B1YfqGnRs%2BFYmKrhTbF5cVf9go3HjlG4dvyr%2BZ3JS0qavEuWTPZtJm6ebeLZ5bDpaql%2BaXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO%2FPLi8ZafJzs07P1SkVPRU%2BlQ27tLdtWHX%2BG7R7ht7vPY07NXbW7z3%2FT7JvttVAVVN1WbVZftJ%2B7P3P66Jqun4lvttXa1ObXHtxwPSA%2F0HIw6217nU1R3SPVRSj9Yr60cOxx%2B%2B%2Fp3vdy0NNg1VjZzG4iNwRHnk6fcJ3%2FceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w%2B0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb%2B%2B6EHTh0kX%2Fi%2Bc7vDvOXPK4dPKy2%2BUTV7hXmq86X23qdOo8%2FpPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb%2F1tWeOT3dvfN6b%2FfF9%2FXfFt1%2Bcif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v%2B3Njv3H9qwHeg89HcR%2FcGhYPP%2FpH1jw9DBY%2BZj8uGDYbrnjg%2BOTniP3L96fynQ89kzyaeF%2F6i%2FsuuFxYvfvjV69fO0ZjRoZfyl5O%2FbXyl%2FerA6xmv28bCxh6%2ByXgzMV70VvvtwXfcdx3vo98PT%2BR8IH8o%2F2j5sfVT0Kf7kxmTk%2F8EA5jz%2FGMzLdsAAAAgY0hSTQAAeiUAAICDAAD5%2FwAAgOkAAHUwAADqYAAAOpgAABdvkl%2FFRgAABphJREFUeNqcV2twU9cR%2FnbPlVTHxpKRbNnBLyEbPyJisLEcPwgwUMKQtjNJAzNJZkgNNJOmJaZAaDKlxaXDTIBAcJtOOzSYKSkdiimhAdIMjyT4bYgBYxA2BgcUQPLrCiGDR4qt2x%2ByXTASFt1%2F957d7zt3z3d39xDCMQWUfgAz%2FRI%2FT4pSTAJpAGL8rECAXX7QFQGq9wOHOxYO1oCgjAdJj1wtB095Giv9TFuZAIWHAziATMPhTAwiHgUkYPXFJu92lMP%2F2MTpB1AKUCVEgNAcleUo1M%2B2F8TO6crSTncb1QleAOj2OTSX3Ge1p%2BVa42m5JrnzbnsCE8Ov%2BEHgpa0LPLvCJjZ%2FwhuIlN8wAcXG%2Be1LUn9hm238QU84p1Ld83nsXvuO7Lq%2BLzKYGAT6%2Fdn58m%2FHJTYf4O3EShkT8Irpzab1Uz9sGevT5%2BtWn%2Bj6NB4A5hp%2F5NSr43xjfd5rW5tT9e3OAhCBiCua5%2FWsDEls%2FhdvYklZSwDefmrT8eXmtzuDkb5YZ33p9ndylICAVjWxf39xw%2F5g5Luv%2F9H84ZWNcwNEypZT87rXjqyJB85UYDMJYN3U7UdLJ6%2F6JlgqV517teRqf9uTlug8e1zEk27HgD22o98WsTBh8fWxvjm6ApdONbGvse8LM5NUPOm1Cfabuz3nACAgxX0QEFTJAnjNvLJ%2BSepb14KRHnN%2BEv%2B1XJOhZs3Qu1mbG97J2NQgsXroa1dtxrGuf8cHi1mUtPTay0lv1DMJSCRVLtoX%2BFgGgDQNysBAcez89l9nbbsQSji7rlXkEhjPxb%2FQatHOcFu0M9zz419oFSRhj%2F3PuaHiyqasv1Con9NGxHAYUsoCxAqImbYSgCWmFbZQwdsur7N0eC4m6tT6%2FjUZ750Zeb82c%2BOZGLWh%2F2p%2FW%2BKfrmy0hIp%2FaVKpTSIJEqu2QgFx2iE8CwDp0RbH7Ljng%2F4yXr%2BXT3QdyhYsodS0slGr0g2OrEUK7eCrKW82SqzCVz3%2Fyfb6vRwM4xn9rN7JkRkOQRLmfJn2LBPxQjDBqp9lD7XbX7X8pKTP160zR2bdeiX5jYeU%2FnLSTztNkem3XL5eXbltRUkonBxdgZ2IIUmahUxERQSCVT%2BrK5hzQ89xQ6P8VaaK1f5VmRvqQ4G%2Blba%2Bnlnlb5brMhvlk7FBiaPzuwQEmEQhg5BOxMjWTncHc2501cQLkjDTsMCWpyuRQxFP0xXIJfp5FyVW4Zy7KajC06ItbiIGg6ZITBxDxIgbrr1jTSM0fibGIHz8O9sKK0GAibEua9spANh4aY2VmcEg%2BDEkiBgR%2FL2hYFgGtcErkQQAMVJgBxyy9hboZzv32v%2BKpr7qbEECTAIMAoaJa3qPTmNiiAAgJAjk6J5xhu6HDAIgQYGLmI29PocmMcI8MNYvT1ckfzD9H%2Fub5br4e4Me9WfOKqtyX6Ud2cwC449PRamifDm6Auc0rTXokci%2BXo1EAgBckiDuYGLjpTvntcGIA%2BSFcp6uUAaAI879VhWrRteYAqn%2Fedq758brXJ1327QMhgJcZjA3EBjNrgZjOG1PkAjyTGENMjZPq5ECQ0MDE9ERBqFZrk0OJ3i4x%2F7vyIjBxGERt3takgVJEAp9xq3f769WiPDNvSsJdT3HDOEASPelmoBRYT3Kzt5uMtwauJEgSOCpwrk1DIJCoNUMwj9v7MweP9XSQ8%2FhJPp496fZTAICvLqcyv2B7nRbrgCA03JN5h8ub7A8VqpB437xHvsOy3l3cyaB4L2uqxhti1WLMcSgZQCw7%2BbOooO3Pk4JBZIYYXISMV5sKH59UePM10GESRGpIf%2FbE92HU452HywSJIGIllctrhp6YAK5%2BfHds0lLtJFMXNwkV6fFqA29mROefqiMJj1h6um4a5vY%2F92dKGaBxIhU5zJTWW2cJmEgGOmeb3c8FxAfb9mdf2RzyGGv5MvU7QwuEySwKHFp%2Fc%2FM71zA%2F2F7b1RajnYdLAqMukMVu2YcfmDYE2MD7H%2B7%2FXlq6cRIJqm4zXM%2Bqd3TGjVBir43KSLlXjiELe5TsX%2B3%2FyW%2FST45PaAHbKmccWh12AP93JNZywj0kSABIobpiXRHjtZ6faout2tyZMadGLXBCxBcvl6NfaAz%2BtKdFmObpzWl2%2BtIIBACYy0t%2Fyj34M7HvsKUK%2BCGassvicX7alYDwwq%2BvykIEqPVa%2BQ9gdYk5%2BV%2BUE7lj3%2BFGbuBM%2FX5JUT8QwIVSSSZiTgmoFR2MfiqYFFPfjpkyrfWPopwxP47AP1pK1g9%2FdqeAAAAAElFTkSuQmCC%29%3B%0Abottom%3A50px%3B%0Aleft%3A55px%3B%0A%7D%0Adiv%2Evis%2Dnetwork%20div%2Evis%2Dnavigation%20div%2Evis%2Dbutton%2Evis%2Ddown%20%7B%0Abackground%2Dimage%3A%20url%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89%2BbN%2FrXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz%2FSMBAPh%2BPDwrIsAHvgABeNMLCADATZvAMByH%2Fw%2FqQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf%2BbTAICd%2BJl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA%2Fg88wAAKCRFRHgg%2FP9eM4Ors7ONo62Dl8t6r8G%2FyJiYuP%2B5c%2BrcEAAAOF0ftH%2BLC%2BzGoA7BoBt%2FqIl7gRoXgugdfeLZrIPQLUAoOnaV%2FNw%2BH48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl%2FAV%2F1s%2BX48%2FPf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H%2FLcL%2F%2Fwd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s%2BwM%2B3zUAsGo%2BAXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93%2F%2B8%2F%2FUegJQCAZkmScQAAXkQkLlTKsz%2FHCAAARKCBKrBBG%2FTBGCzABhzBBdzBC%2FxgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD%2FphCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8%2BQ8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8%2BxdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR%2BcQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI%2BksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG%2BQh8lsKnWJAcaT4U%2BIoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr%2Bh0uhHdlR5Ol9BX0svpR%2BiX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK%2BYTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI%2BpXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q%2FpH5Z%2FYkGWcNMw09DpFGgsV%2FjvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY%2FR27iz2qqaE5QzNKM1ezUvOUZj8H45hx%2BJx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4%2FOBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up%2B6Ynr5egJ5Mb6feeb3n%2Bhx9L%2F1U%2FW36p%2FVHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm%2Beb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw%2B6TvZN9un2N%2FT0HDYfZDqsdWh1%2Bc7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc%2BLpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26%2FuNu5p7ofcn8w0nymeWTNz0MPIQ%2BBR5dE%2FC5%2BVMGvfrH5PQ0%2BBZ7XnIy9jL5FXrdewt6V3qvdh7xc%2B9j5yn%2BM%2B4zw33jLeWV%2FMN8C3yLfLT8Nvnl%2BF30N%2FI%2F9k%2F3r%2F0QCngCUBZwOJgUGBWwL7%2BHp8Ib%2BOPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo%2Bqi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt%2F87fOH4p3iC%2BN7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi%2FRNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z%2Bpn5mZ2y6xlhbL%2BxW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a%2FzYnKOZarnivN7cyzytuQN5zvn%2F%2FtEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1%2B1dT1gvWd%2B1YfqGnRs%2BFYmKrhTbF5cVf9go3HjlG4dvyr%2BZ3JS0qavEuWTPZtJm6ebeLZ5bDpaql%2BaXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO%2FPLi8ZafJzs07P1SkVPRU%2BlQ27tLdtWHX%2BG7R7ht7vPY07NXbW7z3%2FT7JvttVAVVN1WbVZftJ%2B7P3P66Jqun4lvttXa1ObXHtxwPSA%2F0HIw6217nU1R3SPVRSj9Yr60cOxx%2B%2B%2Fp3vdy0NNg1VjZzG4iNwRHnk6fcJ3%2FceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w%2B0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb%2B%2B6EHTh0kX%2Fi%2Bc7vDvOXPK4dPKy2%2BUTV7hXmq86X23qdOo8%2FpPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb%2F1tWeOT3dvfN6b%2FfF9%2FXfFt1%2Bcif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v%2B3Njv3H9qwHeg89HcR%2FcGhYPP%2FpH1jw9DBY%2BZj8uGDYbrnjg%2BOTniP3L96fynQ89kzyaeF%2F6i%2FsuuFxYvfvjV69fO0ZjRoZfyl5O%2FbXyl%2FerA6xmv28bCxh6%2ByXgzMV70VvvtwXfcdx3vo98PT%2BR8IH8o%2F2j5sfVT0Kf7kxmTk%2F8EA5jz%2FGMzLdsAAAAgY0hSTQAAeiUAAICDAAD5%2FwAAgOkAAHUwAADqYAAAOpgAABdvkl%2FFRgAABpdJREFUeNqcV21QlNcVfp5zX9ikoAvLEsAIIgsoHwpqWAQUNKLNaNv8iZ1JMkNG6%2FQj%2FdDUyCSTtCHpmEkwVk3TToZRMjXj5MOG2KidjIkxQYSAQUAtX6IgIN8su8KCoOzbH4sk4q5g77%2F33uee555z7rnneYmZDB2MKcJKlyYbqOsZVIgGEOgSHQoy4AKbFFjqAo5dWn%2FrNAh9OpO852oeJHYxtrmEu4WALhMbxG2ZE9uFAlImDRLY%2Ft%2Fy0b3Ig%2Bu%2BiWOKsAlgIZSb0OIf15kWtKo1NXh1d5xxiSPEN2wUAHrGOg11jirjWVtJyFnb6YgrzoYwocClu0DI5guPDb43Y2LLp%2FIaqf9JCGSErGvIifxd7aqQn%2FTOJCvFvZ8Hf9haEH%2Bm%2F6sFQgHBv1Sts%2F15WmJLkeyl6FuFwFPzny1%2FZdE7Nfg%2Fxhv1uUmH2w6kggQp%2Byqze7d5JbZ8Im%2BKpucSwI6EN7%2FcYtlxZarBCts3ptfrtq9odjaGKihE%2BsV0vRC3u8RqWmmbij149W%2BWd5p2rnET6bsqsntyb6%2BpO3KqkE8FvLxo74lNUX9s9uTJb8%2F9fG2L81KoogJFYfCm3b9usNq0MXxzw1RsUkDqQICPqf%2Fb%2Fq8sQi3j4WdmtV47OFgNAO6r%2BDEUFAtFAc9YtpXmRP6hxVsI24cvhyoqnFtrK6jM7isgBa3Dl0O94TeGb255MvzXpUIFjVrhxo%2FdzgoARBuwFQJkBK9reCnurxfvXX8CRW3yW1G749vT2Br7ysW0oNX1pKDTPG%2Brm1gHRbibAHLm%2F7522sKnQCZqFgCUaBCqaS%2FbEw9vqtWoQROf3dBBiT6KTACImZ3YueqhDdOWjDbFQ4IzIl4elNUX5begU1HD6lPRmULKeghhDcpqnUmZuD3%2BnkgTH6gZEE9ctlZSoGmG9UIynSCsQVndMyX%2BIZGiBoHMjHh2SreCglClaSBiSEG8cYnD24bv7CWms%2F3FocO3hnw13plTggAFb196NdlPM44tC0zrSg5ItXmyEz070UEKCMRqQgkkBQ9NvL2eSJ%2BrevoJTORSpoT6do4%2F7%2F7UShBFHQexM%2BHdfyUHWO8iN%2FuaRzX3%2FQjUSLlnqM72F4cCRIY5u9Zf%2BY%2BBAv4AvzpkQ7WAIBRujA%2F7Vg6cia9xlId6InafVEAAGnQMUCSkb6zTMPdBy8hU3JjrphIq%2BCrD%2BMvxeyumrr%2B4IH9y7o2GF5eDghuuGx4L2zbWZ9Dc0RoQRbkkFNRdP2%2F0BH7EtLJLKCjr%2Bzqh2l5u8haZ847vTBW24kRFQXKAtcsT5oqz3igQENIoECkjBJUDZSGewBlBj%2FammjLrdX1c%2Ft70ero34gMte9IByLLAjPrUwKweT5jawQshdIuGMiF5XEBU2koivBl9NeEfJeYHwuxtI81zPrn2z6ip60c6DkV1jLTOCTaE2HNjd5Z4s9MwWBOhqEHp%2FI9cWDtUrJNoHm4KO9P7hdnTBoMYXI8Gb6gVCg63FS53jg9O5tA57tSOdHywnCAygrJrfcTgUe5U2cvNHSPtYYoKCWlrTgsIneB2AfFR%2B4F4b6f9ZdTzF6P8Ytud407%2Fdy%2FnL7k9X9i8J9l5y%2BEf6RfbnjPvWa8N5suez%2BKFCgqyPY95Lnd3stv2AcBZ2%2BmFbze%2Blui1xc3dXCUUlPafXNx4%2FaKxcajWWNp%2FMklRw8%2FmPFntbd%2Bh1oLE847KhQQxejVg36QQqD0MPTzHv42Ux%2BuGasJNBnPfwllJd71kkX7RQ3WDNf7dox3BLcNNs6vt34bbbvYHJhlTGp6O%2BJVHb0%2F2HJtX1PH%2BaqECqG%2F5YN1nlXcokGvvO6vCc4x%2BQskotxVHB%2Fqa%2BxbOWuzw8NB3nuo%2BHt0z2hHsuGU3GrWAoZfi3jrxgHpw3BPpobaCH7vbqOw6mHI836vYW3Eqcq9AtioqbJy7ufQ3lhfu8sR%2Bs9%2B3vL8klACsQSu7AnxMY1MxH7YXJp7oPpLulrrj%2B9575Ni2aeVt1teWfEWfHQLCaspseHzOU7VWU%2BaM5G2NoyL4i%2B6j8XWDNQsmGsKu%2Fcv%2BnTtjQb%2Fmm7hfENyvqEAK5v8opjPJaL26KGBpd5TfguuBvuZRgBgY6zO0jlyZXXe9JqR%2B8MK8ntHOMHfHIkhu2b%2F0yIH7%2FoXJ0yFlxYnPUdRbvuILgO7%2By%2B91l6Ka6M%2BcnCf4fMSypXvymHf%2FvzBTD3CuNGUFKT8lmK5Rs5ASqKiBlAGBXFaiSuni0fkp1pJ7Ed4e%2FxsAqLk46EWsG1EAAAAASUVORK5CYII%3D%29%3B%0Abottom%3A10px%3B%0Aleft%3A55px%3B%0A%7D%0Adiv%2Evis%2Dnetwork%20div%2Evis%2Dnavigation%20div%2Evis%2Dbutton%2Evis%2Dleft%20%7B%0Abackground%2Dimage%3A%20url%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89%2BbN%2FrXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz%2FSMBAPh%2BPDwrIsAHvgABeNMLCADATZvAMByH%2Fw%2FqQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf%2BbTAICd%2BJl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA%2Fg88wAAKCRFRHgg%2FP9eM4Ors7ONo62Dl8t6r8G%2FyJiYuP%2B5c%2BrcEAAAOF0ftH%2BLC%2BzGoA7BoBt%2FqIl7gRoXgugdfeLZrIPQLUAoOnaV%2FNw%2BH48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl%2FAV%2F1s%2BX48%2FPf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H%2FLcL%2F%2Fwd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s%2BwM%2B3zUAsGo%2BAXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93%2F%2B8%2F%2FUegJQCAZkmScQAAXkQkLlTKsz%2FHCAAARKCBKrBBG%2FTBGCzABhzBBdzBC%2FxgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD%2FphCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8%2BQ8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8%2BxdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR%2BcQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI%2BksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG%2BQh8lsKnWJAcaT4U%2BIoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr%2Bh0uhHdlR5Ol9BX0svpR%2BiX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK%2BYTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI%2BpXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q%2FpH5Z%2FYkGWcNMw09DpFGgsV%2FjvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY%2FR27iz2qqaE5QzNKM1ezUvOUZj8H45hx%2BJx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4%2FOBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up%2B6Ynr5egJ5Mb6feeb3n%2Bhx9L%2F1U%2FW36p%2FVHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm%2Beb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw%2B6TvZN9un2N%2FT0HDYfZDqsdWh1%2Bc7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc%2BLpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26%2FuNu5p7ofcn8w0nymeWTNz0MPIQ%2BBR5dE%2FC5%2BVMGvfrH5PQ0%2BBZ7XnIy9jL5FXrdewt6V3qvdh7xc%2B9j5yn%2BM%2B4zw33jLeWV%2FMN8C3yLfLT8Nvnl%2BF30N%2FI%2F9k%2F3r%2F0QCngCUBZwOJgUGBWwL7%2BHp8Ib%2BOPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo%2Bqi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt%2F87fOH4p3iC%2BN7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi%2FRNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z%2Bpn5mZ2y6xlhbL%2BxW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a%2FzYnKOZarnivN7cyzytuQN5zvn%2F%2FtEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1%2B1dT1gvWd%2B1YfqGnRs%2BFYmKrhTbF5cVf9go3HjlG4dvyr%2BZ3JS0qavEuWTPZtJm6ebeLZ5bDpaql%2BaXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO%2FPLi8ZafJzs07P1SkVPRU%2BlQ27tLdtWHX%2BG7R7ht7vPY07NXbW7z3%2FT7JvttVAVVN1WbVZftJ%2B7P3P66Jqun4lvttXa1ObXHtxwPSA%2F0HIw6217nU1R3SPVRSj9Yr60cOxx%2B%2B%2Fp3vdy0NNg1VjZzG4iNwRHnk6fcJ3%2FceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w%2B0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb%2B%2B6EHTh0kX%2Fi%2Bc7vDvOXPK4dPKy2%2BUTV7hXmq86X23qdOo8%2FpPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb%2F1tWeOT3dvfN6b%2FfF9%2FXfFt1%2Bcif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v%2B3Njv3H9qwHeg89HcR%2FcGhYPP%2FpH1jw9DBY%2BZj8uGDYbrnjg%2BOTniP3L96fynQ89kzyaeF%2F6i%2FsuuFxYvfvjV69fO0ZjRoZfyl5O%2FbXyl%2FerA6xmv28bCxh6%2ByXgzMV70VvvtwXfcdx3vo98PT%2BR8IH8o%2F2j5sfVT0Kf7kxmTk%2F8EA5jz%2FGMzLdsAAAAgY0hSTQAAeiUAAICDAAD5%2FwAAgOkAAHUwAADqYAAAOpgAABdvkl%2FFRgAABt5JREFUeNqsl2lUlOcVx%2F%2F3Pi9DZRsGBgYiS2RYBQKIjAhEJW4pNrXNMbZpWtTGNkttYmJMG5soSZckRk%2B0p%2BdYPYY0Gk0ihlhRj63GhVUgBhDD5oIOy8AAMwzD4lCYtx%2BGqCQKuNyP7%2FPc%2B3u2%2B7%2F3JUzEZFBYLh62S7yIZDmVBEIBqOwsQ4DNdtBFASq2A4cuZAwVgCCPF5LGHM0Chz%2BE1XamzUyAzCMO7IhMI%2B5MDCK%2BHpCANd%2BU2rYgC%2FY7BoflYgVA2RAOoNYtyjDTe45%2Bhk96e5QywaJR%2BNsAwDhocK61VCjLTYWaclNB0OW%2Ben8mhl22g8C%2Frn7U%2BuGEwdov%2BC0i%2BQ0mIFWzoD7zwVU1czQ%2F6pjIreR3HPX5VL9jalHXiQgmBoH%2BXLHAtH5csDaXtxDLLzIBv5jyfOmG2H9U4S7snbpX43KaPpgBIhDx1rPzOlbfPC5GQT%2Fnd1mS1zABa6PfPf5y5F%2FrcJeWpp7fPkly6f7KXBRCoOSATFfXll19x74HDsvFCghsJAG8HrvlvytCXm7EPVqc5wyzp5NX15muE1omKXXyMnd9yy5r5Q3wPghvJzrLAlimXV38%2B7D1DbhPFq1M6O4b6rPVWKsCBfHi5EWWv9TkQBYAEPpLvERMC9N8FtRvjt9dPl6wwo5jPvuas7WV5jNqEjz8wA%2BCBsaan%2Bw9x1hrrXJtuaZX97ooLfqPLCUEGRR%2BiOwAsF2X98Uc30W3fb02u41frVqeVmo6FUkkwCAwCWxJ2Ls%2F0TPFNBb8TNdp9WvnVz4OAKdmX2QOzcMsAAjziDGMBd3asCF6SXHyknJTfqQTK%2BzpvhnVKT5zawCgzFTgN94pJXvP7gxxjTAIkpB%2BMnSWRMQZYEDnPVt%2FK4ejbZ%2F77726Lb6h95tAAiPELaJ1bcTbRfGeM8xv1azWSeyEa0P9igk%2BNr1%2BoNFfkpwzJCJKIQA679ntN08yDXYo3qh%2BLuUrc0E4EcNL4dP7VNDzpU8FP3vpekoQQ5CEw4bPdEfa9%2BsAgEZUmkmAAAS5hLQ9p11XGO%2BpM8V5JLUfMeQARDMlEMKIGFOVCZYb0C7Fz0oeXmIZ6nZzYoV9od%2FjVS%2BGbahUOnn9b7T6sEOviUGyA8bMDlUa0W79wBW%2FbZf%2BlrY98cDBUI8YCxGDgHCJiVVEDN8R7QWAE8Z%2F%2B1mGut2i3eP1r0S%2BXRztkdBzq6NbF7WpbF3UprKxjvfHxbrfttla%2FQBArVDbJJIAQCURMRg8ugrKIAKBSNxzHtN3VdmxY0iQYSZmTeegwTlgknYAAB7RZBh2Nm7urbeeC1r19ROT52kWn3shfH2Fu1AO3RxjY%2F0fdac7%2FhPPJMDE11GC%2BHpBJmIEuAS3Oa6w01lybMbMgvgCE6O255zy24DeCr%2FBvckn9%2Bu8ZjXYIYvjxoMJy8oeXZrT9GHIqMWTwA2oI6cFMeDIcAiSEOyibXsmZG0hAFzuq1OyY6xBAnMJgdPOmks08zU%2FbbsB9x18P37PqS%2Fb8%2Bo%2Fa96ZcLm3PmBH46Z5x40HW1eFvl4Uq0w0MwiCBOb7%2FqTsd6GvVY537DXWas1Iw1AiNJnOgwJi%2BbXhAbE08OnvaXSIW0TvYw88eaF%2FuM%2FWNdju3m5r9TlhPBzVNNDoPGC%2F5tRma%2FGJ80xqjPPUjVuvP2narrMOWd1Jlv%2FE1fN782UiNPZf9C%2FqOKa%2BndOz2j%2Bcz046sn%2B6KrVOsODirpOxld0lUxmEBK%2FktvGgFd2l6taBZn9BAtEz5xYIvAn4%2F8rFKkgstAyZ6Yf%2BS67ezlkiSU73XXRV6xqh93TyssR4JF75efBvymLdE03jgT%2FWb5tutLWpGbTm7wHZxQQAT%2ByDuKLyHRIk4cnAZ4pfCF9%2FHvfR9uh3xBxtz00BANsVDylnac6wAICaHMiBmW5NRLy4trcq0MtZ3RnpHme5H9AvjYeCc1t3pzMJgOSVnyw4eHZUB9Kyu68iMFPpysSppab8UJVC3Rnp%2FpDlXqF7mnYsdKQbv7cr6fDGW%2FZczbt6jgUtV6kIlFxuyg%2FtH%2B6zJXmlGe8G%2BmlzdsyB1j3pTAwZ9q3%2FSspbc9tmDwD0H3UffXCFlyuTlFpnPRdYb612c5c8%2BidPCu6fCLDKUubzsf6fSaWm0wmO9hbvZU8fDR2zoZ97OuppAu0UJEDEmOISZohT6q7Gek5rD3GN6FEp1DaAYB7sdNYPXPao7anS1Fmrg402g7%2BjYhGIaOXOaQc%2BuONfmCwZXJIf8xKx2KRgxYgOS%2BCROuyoyQKCxIhkOr4T6JWgxGnvZ1HWnf%2FCfHcBXxcnpRHxYwRKkUjSErFKkAQiNjP4kmBRTHbKm5KkKxwL%2BK39fwDX1XGF8ct%2B%2BQAAAABJRU5ErkJggg%3D%3D%29%3B%0Abottom%3A10px%3B%0Aleft%3A15px%3B%0A%7D%0Adiv%2Evis%2Dnetwork%20div%2Evis%2Dnavigation%20div%2Evis%2Dbutton%2Evis%2Dright%20%7B%0Abackground%2Dimage%3A%20url%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89%2BbN%2FrXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz%2FSMBAPh%2BPDwrIsAHvgABeNMLCADATZvAMByH%2Fw%2FqQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf%2BbTAICd%2BJl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA%2Fg88wAAKCRFRHgg%2FP9eM4Ors7ONo62Dl8t6r8G%2FyJiYuP%2B5c%2BrcEAAAOF0ftH%2BLC%2BzGoA7BoBt%2FqIl7gRoXgugdfeLZrIPQLUAoOnaV%2FNw%2BH48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl%2FAV%2F1s%2BX48%2FPf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H%2FLcL%2F%2Fwd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s%2BwM%2B3zUAsGo%2BAXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93%2F%2B8%2F%2FUegJQCAZkmScQAAXkQkLlTKsz%2FHCAAARKCBKrBBG%2FTBGCzABhzBBdzBC%2FxgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD%2FphCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8%2BQ8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8%2BxdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR%2BcQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI%2BksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG%2BQh8lsKnWJAcaT4U%2BIoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr%2Bh0uhHdlR5Ol9BX0svpR%2BiX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK%2BYTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI%2BpXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q%2FpH5Z%2FYkGWcNMw09DpFGgsV%2FjvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY%2FR27iz2qqaE5QzNKM1ezUvOUZj8H45hx%2BJx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4%2FOBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up%2B6Ynr5egJ5Mb6feeb3n%2Bhx9L%2F1U%2FW36p%2FVHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm%2Beb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw%2B6TvZN9un2N%2FT0HDYfZDqsdWh1%2Bc7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc%2BLpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26%2FuNu5p7ofcn8w0nymeWTNz0MPIQ%2BBR5dE%2FC5%2BVMGvfrH5PQ0%2BBZ7XnIy9jL5FXrdewt6V3qvdh7xc%2B9j5yn%2BM%2B4zw33jLeWV%2FMN8C3yLfLT8Nvnl%2BF30N%2FI%2F9k%2F3r%2F0QCngCUBZwOJgUGBWwL7%2BHp8Ib%2BOPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo%2Bqi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt%2F87fOH4p3iC%2BN7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi%2FRNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z%2Bpn5mZ2y6xlhbL%2BxW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a%2FzYnKOZarnivN7cyzytuQN5zvn%2F%2FtEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1%2B1dT1gvWd%2B1YfqGnRs%2BFYmKrhTbF5cVf9go3HjlG4dvyr%2BZ3JS0qavEuWTPZtJm6ebeLZ5bDpaql%2BaXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO%2FPLi8ZafJzs07P1SkVPRU%2BlQ27tLdtWHX%2BG7R7ht7vPY07NXbW7z3%2FT7JvttVAVVN1WbVZftJ%2B7P3P66Jqun4lvttXa1ObXHtxwPSA%2F0HIw6217nU1R3SPVRSj9Yr60cOxx%2B%2B%2Fp3vdy0NNg1VjZzG4iNwRHnk6fcJ3%2FceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w%2B0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb%2B%2B6EHTh0kX%2Fi%2Bc7vDvOXPK4dPKy2%2BUTV7hXmq86X23qdOo8%2FpPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb%2F1tWeOT3dvfN6b%2FfF9%2FXfFt1%2Bcif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v%2B3Njv3H9qwHeg89HcR%2FcGhYPP%2FpH1jw9DBY%2BZj8uGDYbrnjg%2BOTniP3L96fynQ89kzyaeF%2F6i%2FsuuFxYvfvjV69fO0ZjRoZfyl5O%2FbXyl%2FerA6xmv28bCxh6%2ByXgzMV70VvvtwXfcdx3vo98PT%2BR8IH8o%2F2j5sfVT0Kf7kxmTk%2F8EA5jz%2FGMzLdsAAAAgY0hSTQAAeiUAAICDAAD5%2FwAAgOkAAHUwAADqYAAAOpgAABdvkl%2FFRgAABs1JREFUeNqsl3tQlOcVxp9z3m%2BXygK7C4sLxkW5o4CAkYssFSkRjabjJEOSJm1IbZx2krapiZdeprW0NVVJ0pqMM0kYJQlqkoZImGioE1ItiCAgIsFwE4Es99vCslwChf36xy5EW1A0Pn9%2B73fO772e93kJC5EMCszFd20SbyFZNpJAAACtjWUI8KAN1CRAJTbg9LXNU%2BdBkG%2BXkm7Zmg4OWoUdNqZXmQCZHQFsz0yOcCYGEc8mJGDnl2UTh5AO2x2DA3OxDaAsCDvQ32VF11qP9aZYz6SeFeooi17pPQEAvZNdTnWWKnWFuVhfYT7v0zza4M3EsMk2EPgnNZusby8Y7P8x%2F5lI%2FgMTYNSnNKQt%2F0Xtev1DfQtZlaK%2BM54fmDJXXhg4G8zEINBfqlLMe28L9s%2FlQ8Tyr5iAJ32fK%2Ftj%2BOFq3IUO1O%2BJyGk7GgsiEPFrlQ%2F07bixXdwEPckHWZJ3MgG7Qw9%2B%2FmLIS%2FW4SyXoNvQskpyHLg1e8CNQ3NI0laoje7Tg%2F8CBudgGgQwSwO%2FDD322ze%2FFFnxLRWhiBzUK94GLA2f9mSTjfU%2B7mjqyrVe%2BAX8I4aGgShbA0%2F47Sn4ZuLcR90ih6qih0anRiVprtUEQb43bYtlXmwNZAEDAj%2FACMW1M8ExpeDXyWMVCEl4yF7vntR%2FzLeov8JJlWfZR%2BY3N92%2Bcx%2FreOmu1quNrk27EWW0xvWspJcigoNNkA4C3Yk59vH7xltvu3ktDxe7PX34ilQCQfeci1j2xfn94ZrGCneY8uxcHCnW%2Fvbr9EQD4d2ITc8AprAOAQLewroVAAaB8oMiLiRHvmVy7znNTjWCFrXKoJOSHFQ%2BkvnF9f%2Bjco07s91MFdwmSkHQuYB0T8WYwIcYj0bTQdRufGlFKJMFVaCb%2FGvZW6aGI4yeXOwd2mr%2Fu05zsyDY%2BW5X64Nm%2BfO85NpuJiCFJTpslIoonADEeiT2zIzIXuh%2Bo25PQNtbsNVMOBUn2g08MiSTHN3uZjNTEDr4dnX%2F6H%2B1H%2FXPasmKvW%2BsMGfW%2FMXzende4K3h%2FibvSYxIAItyie%2FK7cgCitQxCIBFjpTrKMgM%2BWPfrhLbxFi9iMQtlYjAJSCSBSYBAIPBNI3p86TPXj8bk56R4PVylFE626uFLQc9efiTVPDmgBIAAtzALEYNBQRITa4kYix21FwBax655CVagPLk7806Pj1qo%2F7MraF%2FFQ14%2FaMhszYhvGqn3KTef89rklWrSKXUTkn3mtJK9Bzf3XJA0e%2FPcrdgxIwSCDPmbZMQgABJkDBKzvn%2Byy2npIv9xAPB1Ceo2jTZ7Gc8afipIgEhAkACDwcSQQZBIIGnx5it7gg%2BU3wgcnbZKR1r%2BFnW%2Bv2DVtDwtXCXNSKz797oAwDzZ7ySRAIBBFsTXmBh1w1%2BoZ4J3h%2Bwv9lUFdbMDOrO%2B5IAqWIGZthuV13nC77nKRx8r7PssyibLIkoT1%2Fh65HsfzWyu5tF6NYNB4EYJzKUETqgcLNVv0D%2FcDQBrNAnm9%2BLOfTLfNB5u2hf5z%2B6TMexYji%2BtVdrM5leMbWOtSwQx%2FF1C2rcuebIqwSO568a4WmuN3mEYSiUi%2BpRl2l1pLvYBsKArUKVwnZRYgdHpMWVG4%2B%2FWXhwoDBXE7OmkHzJ6JNemLfv51bniGqzVPoIkyLbpfK7ZMFIkE6FlrMn7Ql%2BBbiHg%2BzXGbgLjylDpyosD58KZmKM0cfWHI9%2F%2FaD5o1VCZrnO83VuQQOja5PMCfwK8n3K2ChIbLVOD9KB36le3A%2Bu%2Fs2Q81C2yRavQmQNdVnamLnmq4nHD9jpB0rwm77jpjTW9E906Bu18fWlWCQHAox9CtGoXTwmS8IThZyXPB%2B29inuoE6bMsDM9ufEAMNHqJuU8ljMtAKA2B7IhzaWNiLfWjVQb3J10%2FSGuEZZ7Af1X7%2BlluZ3HkpgEQPL291M%2BqbzJgXQcG60ypKlVTGwsMxcFaJW6%2FhDXVZZvCz3RlrmRiQHwy9nRn2bM6bnas4cLfH6s1RIorsJcFDA2PToR7Z7QezfQD9qzwvI6TyTZC47ttXeiT%2B2c1%2BwBgOndoTPLt7mrmCRjvfULQ4O1xsVVchu7b9GysYUAqy3lnsdNb0aXmQuj7PYWL2etuRl6S0OfXLjiGQIdEY6K5esc2BWhjvkqXLO6x08VPKxV6iYAwuBkv5NpvNmtbrhaX2%2BtWdY70eVNINhtLW0%2Fsjrv6B0%2FYdJlcGlR2AvE4hUlKwHQ7BU5cz8LRx0HaPY7gXb53L%2F67%2BmUfudPmP%2FtwOWS6AQi%2Fj6B4iWS%2FIlYK%2ByGYJDB1wWLErLRKd%2FomOJbAWf03wEAyO9m%2B%2FTtS3AAAAAASUVORK5CYII%3D%29%3B%0Abottom%3A10px%3B%0Aleft%3A95px%3B%0A%7D%0Adiv%2Evis%2Dnetwork%20div%2Evis%2Dnavigation%20div%2Evis%2Dbutton%2Evis%2DzoomIn%20%7B%0Abackground%2Dimage%3A%20url%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89%2BbN%2FrXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz%2FSMBAPh%2BPDwrIsAHvgABeNMLCADATZvAMByH%2Fw%2FqQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf%2BbTAICd%2BJl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA%2Fg88wAAKCRFRHgg%2FP9eM4Ors7ONo62Dl8t6r8G%2FyJiYuP%2B5c%2BrcEAAAOF0ftH%2BLC%2BzGoA7BoBt%2FqIl7gRoXgugdfeLZrIPQLUAoOnaV%2FNw%2BH48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl%2FAV%2F1s%2BX48%2FPf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H%2FLcL%2F%2Fwd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s%2BwM%2B3zUAsGo%2BAXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93%2F%2B8%2F%2FUegJQCAZkmScQAAXkQkLlTKsz%2FHCAAARKCBKrBBG%2FTBGCzABhzBBdzBC%2FxgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD%2FphCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8%2BQ8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8%2BxdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR%2BcQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI%2BksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG%2BQh8lsKnWJAcaT4U%2BIoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr%2Bh0uhHdlR5Ol9BX0svpR%2BiX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK%2BYTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI%2BpXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q%2FpH5Z%2FYkGWcNMw09DpFGgsV%2FjvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY%2FR27iz2qqaE5QzNKM1ezUvOUZj8H45hx%2BJx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4%2FOBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up%2B6Ynr5egJ5Mb6feeb3n%2Bhx9L%2F1U%2FW36p%2FVHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm%2Beb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw%2B6TvZN9un2N%2FT0HDYfZDqsdWh1%2Bc7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc%2BLpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26%2FuNu5p7ofcn8w0nymeWTNz0MPIQ%2BBR5dE%2FC5%2BVMGvfrH5PQ0%2BBZ7XnIy9jL5FXrdewt6V3qvdh7xc%2B9j5yn%2BM%2B4zw33jLeWV%2FMN8C3yLfLT8Nvnl%2BF30N%2FI%2F9k%2F3r%2F0QCngCUBZwOJgUGBWwL7%2BHp8Ib%2BOPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo%2Bqi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt%2F87fOH4p3iC%2BN7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi%2FRNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z%2Bpn5mZ2y6xlhbL%2BxW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a%2FzYnKOZarnivN7cyzytuQN5zvn%2F%2FtEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1%2B1dT1gvWd%2B1YfqGnRs%2BFYmKrhTbF5cVf9go3HjlG4dvyr%2BZ3JS0qavEuWTPZtJm6ebeLZ5bDpaql%2BaXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO%2FPLi8ZafJzs07P1SkVPRU%2BlQ27tLdtWHX%2BG7R7ht7vPY07NXbW7z3%2FT7JvttVAVVN1WbVZftJ%2B7P3P66Jqun4lvttXa1ObXHtxwPSA%2F0HIw6217nU1R3SPVRSj9Yr60cOxx%2B%2B%2Fp3vdy0NNg1VjZzG4iNwRHnk6fcJ3%2FceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w%2B0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb%2B%2B6EHTh0kX%2Fi%2Bc7vDvOXPK4dPKy2%2BUTV7hXmq86X23qdOo8%2FpPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb%2F1tWeOT3dvfN6b%2FfF9%2FXfFt1%2Bcif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v%2B3Njv3H9qwHeg89HcR%2FcGhYPP%2FpH1jw9DBY%2BZj8uGDYbrnjg%2BOTniP3L96fynQ89kzyaeF%2F6i%2FsuuFxYvfvjV69fO0ZjRoZfyl5O%2FbXyl%2FerA6xmv28bCxh6%2ByXgzMV70VvvtwXfcdx3vo98PT%2BR8IH8o%2F2j5sfVT0Kf7kxmTk%2F8EA5jz%2FGMzLdsAAAAgY0hSTQAAeiUAAICDAAD5%2FwAAgOkAAHUwAADqYAAAOpgAABdvkl%2FFRgAABiBJREFUeNqkV2tQlOcVfp7zvgvDRe66y8htXUBR1GoFI%2BBtFJvRtjPJBGeaH2a8DGmbttgSTWbSJEw6TWOsrbbpTIeJZGqaTipTa6LJZDTVUTYQdNAohoso6qLucnERN0Axcb%2F8%2BHaJUHDX9Pz6vnnPe57vXJ5zzkeEIwaYcwBL%2FVrW0TCKqZANINEvBhSk3w9eUmC9HzjcsfarOhBGKJN84GkVJHcetvqFu4SAIYELYlpm4LpQQMqoQQKVnzeO7EYV%2FA8NnHMAGwHWQJmAjtg895LkFa7FU1d258UvGLBGpI4AQM9dd2TrwNn4016n9bS3LqNzsD1VKPAbfhCyqflR31thAzv%2BLa%2BQxotCoNi6pn1D1s9aVli%2F3xtOVk72fjT1XVf17E9uHZspFBD8zdk13pdCAjsOyG6KUSEEnrT%2FtPHluW%2Bcw7eQ19q2z6%2Ft2rsYJEjZ07S6d%2BukwI5%2FyQ7RxnYC2DZnx8dbHNs6xxs85T2R9GprZcmVwYs2BYWsmBzP83m7nIVJS73jdfdd%2B7PjjUu%2FXWUCGTtPre7ZHjxTY3Kq8DoV8Ou5u49snPGrKxN58syZ9aVXBztsigoUBd%2BXt2NbfZ8llaVvah%2BvOz9hcX%2BCJenWp7eOOYS6ePpTU1w39vk%2BAwCzFPdDQbFGFPCUY2v9hqxfXJ0shNeHLtsUFc6UequbVvdVkwLX0GXbZPpl6Zuu%2Fij9x%2FVCBU1dU7bfdFYAIDsSFRCgeOqa9hfy%2FnDhwfwTKOrRd0U95n0iqch9%2BcKS5JVtpMCdkllhAhugCHcRwAb7z1tCEp8CCXAWAJRoCFXIYnti%2BsYWTQ0tll0wQMk%2BhGUAkBOX714xbV1IyuhxHhIMC%2FiR5OV9M2JmuhU1Vh7PXiakrIUQhcnLXeHQxPT4GyAtFqgwgAPF5iIFWkeu1SSLCKAweXn3%2FZR5rXV7SddQpy3YDoNems9qTI5hGCitm1MOAAx0aaFCerTd84zjBed3Egq9ADA%2FrqD7Q3ctQC4REDmkYHb8goGgsR2tz5V0DV%2BxUdQoqAQ81RybU4IgFWgACgpaLLCIBUo0bv63y%2FaXy6%2BWBHWz4%2FIHSIGAuVooiaRgWqD3AsDVoQ6bEgtOrfJUhwrf0WUtk%2Br8sL6wvHvk5ijVUiJSRrQZuURtfoGMuaCoRyfP%2FyMy0XykgAA0DPRTxNp31x2ZFuUYBgB7bK7HNdhpKz6WXq6oQCooKghMKhkgji77vBoA1jkXlAvVfRQjFMUcmxSkRWd6gpjeu32R2kxTvyhKh1DQeud8fFBh26zfOe0xuR4JgAbzywCoRSzfeDUKatJKUQK%2BCjKiHZ6nZ2xzBnU7B9vixTy7qCHSQEhJU3%2BDtdT6mAcAFiWUeP%2FxyPH3Jwrfo3XzysemRcEA8F5RY8h6aPE1WwMLQ4OQ%2FEBANHmdGWHlzZyxk3ayB0m771yGooYy%2BKE0l35x0iBxZehS6ie9R1PCMaDvCzWDXA4hZ283ptwcvp6qqDBnyao6AWEQrBQQ%2F7y%2Bd3YoA%2BNBTAaElo973p8tVFCQyipW%2Bc3pdNu7BwBOe%2Btm%2FeniK%2FkPFWowpMfvuKrzzw80zSKIkWsJe0bHYu163BNwMwDsv7G36ODNtzMnM5IWZfeQgscbisvLPl1aDhLTo7I8k%2Bn%2Fp%2Bdw5pGeg0WKGiS31K6vvTdmA7nx9uDZ9A3xMUIpbvSezE6MSOmbNWXewHhD6dH23o7BlqQvvrwTK6KQFpXl2WyvcE6LTB2eCPSdrurvmcUnO%2FcVfPD6pMteyfGs3QKpUFQoS9tU%2FxPH8xe%2BTdd693pN%2FpHug0Xmqntvz1uLDo9Z9v5nnrn%2BdvujrI1JMUJd3OY7n97ua46douOGpkdlDoUDeG7g1NS%2Fu%2F5a0Og9scCsB%2BysWXSoMuyFftWJvM0E31SBjmWPznHPjy%2B8NjdhYfeMmJl3EiNSRgCi%2F25fpGu4M671zjlrm685s2fEnUoQ5lrLLW8uPLj3oX9hqgxIw8n8X1LU7yMkItCHzREZrGQV6ONmy5TggHk247sL%2F1jFqof%2FhRn%2FAWfqC0pI%2BQHBIk3tICXRrFTpF8hlJaqefh6yFxQ6HwQYlK8HAKyt3WsWxl7fAAAAAElFTkSuQmCC%29%3B%0Abottom%3A10px%3B%0Aright%3A15px%3B%0A%7D%0Adiv%2Evis%2Dnetwork%20div%2Evis%2Dnavigation%20div%2Evis%2Dbutton%2Evis%2DzoomOut%20%7B%0Abackground%2Dimage%3A%20url%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89%2BbN%2FrXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz%2FSMBAPh%2BPDwrIsAHvgABeNMLCADATZvAMByH%2Fw%2FqQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf%2BbTAICd%2BJl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA%2Fg88wAAKCRFRHgg%2FP9eM4Ors7ONo62Dl8t6r8G%2FyJiYuP%2B5c%2BrcEAAAOF0ftH%2BLC%2BzGoA7BoBt%2FqIl7gRoXgugdfeLZrIPQLUAoOnaV%2FNw%2BH48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl%2FAV%2F1s%2BX48%2FPf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H%2FLcL%2F%2Fwd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s%2BwM%2B3zUAsGo%2BAXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93%2F%2B8%2F%2FUegJQCAZkmScQAAXkQkLlTKsz%2FHCAAARKCBKrBBG%2FTBGCzABhzBBdzBC%2FxgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD%2FphCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8%2BQ8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8%2BxdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR%2BcQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI%2BksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG%2BQh8lsKnWJAcaT4U%2BIoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr%2Bh0uhHdlR5Ol9BX0svpR%2BiX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK%2BYTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI%2BpXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q%2FpH5Z%2FYkGWcNMw09DpFGgsV%2FjvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY%2FR27iz2qqaE5QzNKM1ezUvOUZj8H45hx%2BJx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4%2FOBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up%2B6Ynr5egJ5Mb6feeb3n%2Bhx9L%2F1U%2FW36p%2FVHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm%2Beb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw%2B6TvZN9un2N%2FT0HDYfZDqsdWh1%2Bc7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc%2BLpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26%2FuNu5p7ofcn8w0nymeWTNz0MPIQ%2BBR5dE%2FC5%2BVMGvfrH5PQ0%2BBZ7XnIy9jL5FXrdewt6V3qvdh7xc%2B9j5yn%2BM%2B4zw33jLeWV%2FMN8C3yLfLT8Nvnl%2BF30N%2FI%2F9k%2F3r%2F0QCngCUBZwOJgUGBWwL7%2BHp8Ib%2BOPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo%2Bqi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt%2F87fOH4p3iC%2BN7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi%2FRNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z%2Bpn5mZ2y6xlhbL%2BxW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a%2FzYnKOZarnivN7cyzytuQN5zvn%2F%2FtEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1%2B1dT1gvWd%2B1YfqGnRs%2BFYmKrhTbF5cVf9go3HjlG4dvyr%2BZ3JS0qavEuWTPZtJm6ebeLZ5bDpaql%2BaXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO%2FPLi8ZafJzs07P1SkVPRU%2BlQ27tLdtWHX%2BG7R7ht7vPY07NXbW7z3%2FT7JvttVAVVN1WbVZftJ%2B7P3P66Jqun4lvttXa1ObXHtxwPSA%2F0HIw6217nU1R3SPVRSj9Yr60cOxx%2B%2B%2Fp3vdy0NNg1VjZzG4iNwRHnk6fcJ3%2FceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w%2B0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb%2B%2B6EHTh0kX%2Fi%2Bc7vDvOXPK4dPKy2%2BUTV7hXmq86X23qdOo8%2FpPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb%2F1tWeOT3dvfN6b%2FfF9%2FXfFt1%2Bcif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v%2B3Njv3H9qwHeg89HcR%2FcGhYPP%2FpH1jw9DBY%2BZj8uGDYbrnjg%2BOTniP3L96fynQ89kzyaeF%2F6i%2FsuuFxYvfvjV69fO0ZjRoZfyl5O%2FbXyl%2FerA6xmv28bCxh6%2ByXgzMV70VvvtwXfcdx3vo98PT%2BR8IH8o%2F2j5sfVT0Kf7kxmTk%2F8EA5jz%2FGMzLdsAAAAgY0hSTQAAeiUAAICDAAD5%2FwAAgOkAAHUwAADqYAAAOpgAABdvkl%2FFRgAABV5JREFUeNq0l2tQVVUYht%2F3W%2FvACMr16IFRQDiAgChpgiikMqY1WjnN9KsfGOXYTOVgkvbDUsZuXrK0qZmGUSvNspjI8TZOmo6AGBoZYly8YB6Qw80DBwQ6jJ3dj30OZZmiwvtv77XW96y91l7v9y1iMNLBuCI84tZkIXU9gwqxAILdokNBOtzgJQWWuYEDFxfcLAGh3y0k79iaD4mfjOVu4WYhoItngBiR6RkuFJAyEJBA3m%2Flri3Ih%2FuewXFFyAG4A8oAWkcm2meEzrFNH53Vkhg4xWnxCXcBQGu%2F3bfGeTbwjKPUcsZRElnfUxcuFLh1Nwh5vurx7s8GDbZ%2BL%2BtI%2FU0hkGGZX5c9%2FpXqOZYn2gazK8Vth0fvsRUknbx%2BbIJQQPCts%2FMda%2B4KthbJFoqeKwSejX6pfO2kjytxH1pfuyqlsGH7dJAgZWvFo23L%2F9muboF%2BJxtE0%2FOEwMqJG46uSHinFvepTPO8lhGaX%2BfPHSdjCKaPy%2Fb3v7az58h%2FwHFFyIHCRirgjUlbfsiJWXEFD6iUoOkdQaaQ6z9dP2YVahljF4%2ByXdvZ%2Fevf4G%2BhQk2sEAUsti4vWxa35gKGSBMDp3T23OxxVXdXRijKovSFzrerC6ELAMT6IhcCZIyeX7c68YPzGGLlxq89PyM0q5YU2M1RuQAg0EERbiaA7Ohl1RgmPTM2p1qjBk1Mm6GDErsfswAgLiDZPmfMwrbhAqeHzm6P8Z9gV9SQdTx2lpCyAEKkhc62YZiVEjTdRgo0zXeBRnImAaSFzm7xdjjtOBGyvmZVZkNvfZjXDhU14%2BBToFEDKRAQpAJ0HRTjP6XHpYUKEX7RzS9bV5c%2BFJTmAICUgNSWQ%2FZCgJwhIOJIQVLgFKcXvKHm9cyGvithFDUAFQqECho1CBUIggYapAJ1QEFBExNMYoISDU1%2FNIR9cvndTG%2Fc2IBkp2fC8ZpQgknBGI%2F3AsDvvRfDlJhwem5zwYMs7VNlaUtbXE1h3mezj9mlGSsXrBkzkFsGKGoDmedBJLfLjxQQgAYdHRSxtPfbfceNsPYBQPTI%2BGZbT31YxrGIpYoKpIKigkAgFOggNBrbQBBCBaEM2L%2BiGGmTgnF%2BUc1epqO%2F3VejAoAOUZSLQkFN17lAb4eVCe%2BVRvvHN4sH6t1feqAmMUGoPHvvhdLzTjzfKoj0sza%2FGLOy1Bu3vqc20Pgl5YIGkVOEZFZ0nLLMszzdDADTgjIdX6Uf3zfUx6m6u8riKRhOCcmDAqLCURo53Oe4rrsyUlGD0nlIqubdKNZJXOm9FH6y7Yh5uKBnO8vNTX2N4YoKE2fMLREQOsE8AfFN4%2Fak4QIfbd2XJFRQkLx85ruN7NTp2AoAZxwlCR9dWJc81NDdtoLkc86KBIJwXQ3aOpCPqwuhR2SPbCBlUc2NyogQX3N7wqgU51BAf2w9EFXUtCtLqADqS76ev6%2Filgrk2q6esxHZgf5CySh3FMcG%2B5jbE0ZNdj4odHdDwWPGcZNNO1MPbrxtzdW4s%2BtI5HPBwQTTzziKY3v%2F7HGlhmS23g90T%2BOO5L1Nu7MMw3Fv%2FTx1f97%2FFnsAYPui8%2FD4nBB%2FoZZR230uoq67auQoLaB37Iio3sEAK52nR39p%2BzS13HFiilHeYtOOabdC71jQzz2R%2BALBbcrjWNF%2BcfaUwLSrk4KmtsT4T%2BgK9jG7AKKjv93X1lcfUNNVaantropqddnDCcIoa7lk29S92%2B%2F5CpOvQ04VJ79KUe%2F7iI%2FHh40U6c3PyuPjhmWKN8G8Fvnw1A%2FzmX%2FvV5h%2FT%2BCXstRMUp4kOFOjZiUlWBkFQYdALitRZXRzf3RqWumdgF79NQDBOa2V%2FiYSHAAAAABJRU5ErkJggg%3D%3D%29%3B%0Abottom%3A10px%3B%0Aright%3A55px%3B%0A%7D%0Adiv%2Evis%2Dnetwork%20div%2Evis%2Dnavigation%20div%2Evis%2Dbutton%2Evis%2DzoomExtends%20%7B%0Abackground%2Dimage%3A%20url%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89%2BbN%2FrXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz%2FSMBAPh%2BPDwrIsAHvgABeNMLCADATZvAMByH%2Fw%2FqQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf%2BbTAICd%2BJl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA%2Fg88wAAKCRFRHgg%2FP9eM4Ors7ONo62Dl8t6r8G%2FyJiYuP%2B5c%2BrcEAAAOF0ftH%2BLC%2BzGoA7BoBt%2FqIl7gRoXgugdfeLZrIPQLUAoOnaV%2FNw%2BH48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl%2FAV%2F1s%2BX48%2FPf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H%2FLcL%2F%2Fwd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s%2BwM%2B3zUAsGo%2BAXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93%2F%2B8%2F%2FUegJQCAZkmScQAAXkQkLlTKsz%2FHCAAARKCBKrBBG%2FTBGCzABhzBBdzBC%2FxgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD%2FphCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8%2BQ8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8%2BxdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR%2BcQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI%2BksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG%2BQh8lsKnWJAcaT4U%2BIoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr%2Bh0uhHdlR5Ol9BX0svpR%2BiX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK%2BYTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI%2BpXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q%2FpH5Z%2FYkGWcNMw09DpFGgsV%2FjvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY%2FR27iz2qqaE5QzNKM1ezUvOUZj8H45hx%2BJx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4%2FOBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up%2B6Ynr5egJ5Mb6feeb3n%2Bhx9L%2F1U%2FW36p%2FVHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm%2Beb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw%2B6TvZN9un2N%2FT0HDYfZDqsdWh1%2Bc7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc%2BLpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26%2FuNu5p7ofcn8w0nymeWTNz0MPIQ%2BBR5dE%2FC5%2BVMGvfrH5PQ0%2BBZ7XnIy9jL5FXrdewt6V3qvdh7xc%2B9j5yn%2BM%2B4zw33jLeWV%2FMN8C3yLfLT8Nvnl%2BF30N%2FI%2F9k%2F3r%2F0QCngCUBZwOJgUGBWwL7%2BHp8Ib%2BOPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo%2Bqi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt%2F87fOH4p3iC%2BN7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi%2FRNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z%2Bpn5mZ2y6xlhbL%2BxW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a%2FzYnKOZarnivN7cyzytuQN5zvn%2F%2FtEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1%2B1dT1gvWd%2B1YfqGnRs%2BFYmKrhTbF5cVf9go3HjlG4dvyr%2BZ3JS0qavEuWTPZtJm6ebeLZ5bDpaql%2BaXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO%2FPLi8ZafJzs07P1SkVPRU%2BlQ27tLdtWHX%2BG7R7ht7vPY07NXbW7z3%2FT7JvttVAVVN1WbVZftJ%2B7P3P66Jqun4lvttXa1ObXHtxwPSA%2F0HIw6217nU1R3SPVRSj9Yr60cOxx%2B%2B%2Fp3vdy0NNg1VjZzG4iNwRHnk6fcJ3%2FceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w%2B0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb%2B%2B6EHTh0kX%2Fi%2Bc7vDvOXPK4dPKy2%2BUTV7hXmq86X23qdOo8%2FpPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb%2F1tWeOT3dvfN6b%2FfF9%2FXfFt1%2Bcif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v%2B3Njv3H9qwHeg89HcR%2FcGhYPP%2FpH1jw9DBY%2BZj8uGDYbrnjg%2BOTniP3L96fynQ89kzyaeF%2F6i%2FsuuFxYvfvjV69fO0ZjRoZfyl5O%2FbXyl%2FerA6xmv28bCxh6%2ByXgzMV70VvvtwXfcdx3vo98PT%2BR8IH8o%2F2j5sfVT0Kf7kxmTk%2F8EA5jz%2FGMzLdsAAAAgY0hSTQAAeiUAAICDAAD5%2FwAAgOkAAHUwAADqYAAAOpgAABdvkl%2FFRgAABptJREFUeNqsl21QlNcVx%2F%2F%2Fcx9hIipuAJHasgHlRdw0xay7yK7smg6sb2DSdtqZduLUNENmOk1tQuM4U7UzTvshSRlFZzoNCWSSSTJp%2B6VNkLCAeQHBoCCgqNBE0wUqL%2BKuwIiiZZ9%2BeHa3aAS3Sf8zO8%2FL3nt%2B95x7z7n3YWlpKUQEJAEgch9%2BJola9xEC2ADBVgAOKqwCYAqKDgUJBIHPBWwFWQNdbyZFBwAC0GGIAHQSj3%2F8HHRdhzYbdDfwg4IjAsGvICgXAroYBiCEDkBBACBZoyST4gDwQqh7mQ4cEkhQD0EBIIggRMQAh2EiEvEYAGrdR3YSqIYCIEDaotVDeYnu%2FryEjSOr43PHl8WmTBPA6PRQ7IWJrvhT%2FubkU%2F7m1EvX%2B1KEUh7Ug%2BWkPEXgdUSkR%2Bxrd0NJ4qjr8AEI9pGAI7mo78mHfnF%2BY%2FK2K7iHUheuvJG6cOUNz%2FLvDwPobrpSl%2FRuf2VOy9UPs4RSTSANwH4Y449EVdnt9ojHIeghCHYLgR%2Bn%2F7zt4Np32tIWZU4hSpnjVk1t%2FcaPfOO3%2Ff%2B%2BMNH5TVJcisoEoo4ksgbsXwYfdR1%2BkQplQuCFNS82Pp%2F9%2B158RTkTC0ce0OKutQeOp5PME0qcUBqyBmwGOC8vz4AWVOyE4CUqYO%2FDh%2Bp3pj%2F%2FBb6mHllqCyxd8ODVT69%2BuFKoOYTSnzFg7SJpzHFNQYWiQrUIsCN9V%2BuOh375zz179pSGI1FSUuK12%2B2%2BaGDt7e3muro6T%2Fh57969lZdvDrT%2BZbA6n0B1nfPVN7e0PjMjIgIIdkEAR1JR329yDvaE0%2Bl%2FhQKA1Wr1bd682SsikUW7K%2BO3PesTNvaSAiXaLhGBvO86RFEoJ4Adac%2BeDxsgiZKSEm9NTY3n5MmT5mjBHR0d5vr6es%2BmTZu8SqnI%2Bx%2Bs%2BOl5jRo0auX1jtepQaEAADKWWIbcy7ZGUmb79u1eu93uI%2Bmtra31HLj5TGDs9rBJICCNn1GRCKGCUJAUuzzw6CfbTB6Px7t27VofAG%2FYXl6Ceyw9LmvIN3UxZUafKRACWyCELcHVP3vk4fDabDZf%2B2N%2FD9g%2BfsLEEFSooFGDogZNFkBRgSCsTcWm066jgRAU4et%2FF5u9nxRosmCLRmE%2BQdgSXCNzhW%2Fs9rDJ63wVJx77V%2BV8YS6UNaW8BdOcqzx%2B3Ujt0F8Bcr1GMIMU5CzJHZ%2Brg6IGCYV2PimoyIK6lzIWrxkPTVGmRoqJFCyLTZmeq4MB5f3BVADnbpcQkzStUQMAk0YKBPfzxlhA95NQQe43QBotBECAFFyZHo6dz6CKCizAPFPivzUWqxm2AqIgnwkFvZNn4uczGK3Hah7wpet98UZ85R8aKScIcXYEWpMLkx8fvleHpNjlAWtTsakQa0pVKGcJQqMGUqCHBvfdjp%2FgTP6xwFzg85PdyaH2J4SUowKiw3889e4KBACnT582W5uKTV2uusAdUFlgzBcFQoFGDT35HwW%2B82mhqaenxwwA4WtYfRNnUkMZUqsJpEkn8cXU5yktYw2JjsTCMQDwer0ekt6GhgZPUVGRd3fu7qjqdU9Mj7mlpcVD0tvS0uKxWCyVANB5rS3x8s3BFEUFgTTLtuZndQHLBMSfB6pyZtfqMDQ3NzfqTcJisficTqc3BI%2B8bxh9L8corarM3fnDoIT%2BrACAU%2F7m7MOfHbCEwQDQ2Njo6erqinqTOHfuXNjjiI23%2BystZ8c7smmkWgVJcN%2B%2BfRARfLDhlacEUqVEQ1nm77xPrHjSh%2F%2BDjo3WmN%2Fs%2F6OHEOgIPr2h63tVuq5Dud1ukETWoK3zorkzTiiONn%2FTKlNM4lj24m%2BPf13o2wOVHqGA5MsAXjKPrDaqnMvlQnjTzhy0Nlw0d5oI5p3yN62amrk%2Bve5B5%2BhXgb47WGX52%2BV3NgoFOvQKAGUkkTqcbZy5XC7XHYf4zEFr3aXU7jih5uidPPOtvsmzixZr8VMrHjBHddLsHj%2BZ9Fb%2Fn9a1%2BT%2FJDaXey0IpEzEKkHnU8Jj79%2B%2BPeEwSSimQRGP%2BGz8j5DVFBVKQtjBj6JGlNt%2FD8Y%2BOpMdlTphiEqcB4tqtsVjfjUtLLkx0J%2FdOnjWPTg%2BlEARIEHwaQJVQIYggACC%2Fqxi6rn8ZHL4XETSsf0MU1HOk%2FCFGYgAwskUqY5eBitRxzn7%2Fa0V1EEBwdqkN6jPI7y4xPmHmC5unbWdQRMqP2d86qANOksU6gvmArNQRNClqABnQgYuK0krI%2BwCOAyH3DK%2FvqOXhaf3PAO7mIRjDNV25AAAAAElFTkSuQmCC%29%3B%0Abottom%3A50px%3B%0Aright%3A15px%3B%0A%7D%0A%0A%2Evis%2Dtimeline%20%7B%0A%0A%7D%0A%2Evis%2Dpanel%20%7B%0A%0A%7D%0A%2Evis%2Daxis%20%7B%0A%0A%7D%0A%0A%2Evis%2Dcurrent%2Dtime%20%7B%0Abackground%2Dcolor%3A%20%23FF7F6E%3B%0Awidth%3A%202px%3B%0Az%2Dindex%3A%201%3B%0A%7D%0A%2Evis%2Dcustom%2Dtime%20%7B%0Abackground%2Dcolor%3A%20%236E94FF%3B%0Awidth%3A%202px%3B%0Acursor%3A%20move%3B%0Az%2Dindex%3A%201%3B%0A%7D%0A%2Evis%2Dpanel%2Evis%2Dbackground%2Evis%2Dhorizontal%20%2Evis%2Dgrid%2Evis%2Dhorizontal%20%7B%0Aposition%3A%20absolute%3B%0Awidth%3A%20100%25%3B%0Aheight%3A%200%3B%0Aborder%2Dbottom%3A%201px%20solid%3B%0A%7D%0A%2Evis%2Dpanel%2Evis%2Dbackground%2Evis%2Dhorizontal%20%2Evis%2Dgrid%2Evis%2Dminor%20%7B%0Aborder%2Dcolor%3A%20%23e5e5e5%3B%0A%7D%0A%2Evis%2Dpanel%2Evis%2Dbackground%2Evis%2Dhorizontal%20%2Evis%2Dgrid%2Evis%2Dmajor%20%7B%0Aborder%2Dcolor%3A%20%23bfbfbf%3B%0A%7D%0A%2Evis%2Ddata%2Daxis%20%2Evis%2Dy%2Daxis%2Evis%2Dmajor%20%7B%0Awidth%3A%20100%25%3B%0Aposition%3A%20absolute%3B%0Acolor%3A%20%234d4d4d%3B%0Awhite%2Dspace%3A%20nowrap%3B%0A%7D%0A%2Evis%2Ddata%2Daxis%20%2Evis%2Dy%2Daxis%2Evis%2Dmajor%2Evis%2Dmeasure%20%7B%0Apadding%3A%200%3B%0Amargin%3A%200%3B%0Aborder%3A%200%3B%0Avisibility%3A%20hidden%3B%0Awidth%3A%20auto%3B%0A%7D%0A%2Evis%2Ddata%2Daxis%20%2Evis%2Dy%2Daxis%2Evis%2Dminor%20%7B%0Aposition%3A%20absolute%3B%0Awidth%3A%20100%25%3B%0Acolor%3A%20%23bebebe%3B%0Awhite%2Dspace%3A%20nowrap%3B%0A%7D%0A%2Evis%2Ddata%2Daxis%20%2Evis%2Dy%2Daxis%2Evis%2Dminor%2Evis%2Dmeasure%20%7B%0Apadding%3A%200%3B%0Amargin%3A%200%3B%0Aborder%3A%200%3B%0Avisibility%3A%20hidden%3B%0Awidth%3A%20auto%3B%0A%7D%0A%2Evis%2Ddata%2Daxis%20%2Evis%2Dy%2Daxis%2Evis%2Dtitle%20%7B%0Aposition%3A%20absolute%3B%0Acolor%3A%20%234d4d4d%3B%0Awhite%2Dspace%3A%20nowrap%3B%0Abottom%3A%2020px%3B%0Atext%2Dalign%3A%20center%3B%0A%7D%0A%2Evis%2Ddata%2Daxis%20%2Evis%2Dy%2Daxis%2Evis%2Dtitle%2Evis%2Dmeasure%20%7B%0Apadding%3A%200%3B%0Amargin%3A%200%3B%0Avisibility%3A%20hidden%3B%0Awidth%3A%20auto%3B%0A%7D%0A%2Evis%2Ddata%2Daxis%20%2Evis%2Dy%2Daxis%2Evis%2Dtitle%2Evis%2Dleft%20%7B%0Abottom%3A%200%3B%0A%2Dwebkit%2Dtransform%2Dorigin%3A%20left%20top%3B%0A%2Dmoz%2Dtransform%2Dorigin%3A%20left%20top%3B%0A%2Dms%2Dtransform%2Dorigin%3A%20left%20top%3B%0A%2Do%2Dtransform%2Dorigin%3A%20left%20top%3B%0Atransform%2Dorigin%3A%20left%20bottom%3B%0A%2Dwebkit%2Dtransform%3A%20rotate%28%2D90deg%29%3B%0A%2Dmoz%2Dtransform%3A%20rotate%28%2D90deg%29%3B%0A%2Dms%2Dtransform%3A%20rotate%28%2D90deg%29%3B%0A%2Do%2Dtransform%3A%20rotate%28%2D90deg%29%3B%0Atransform%3A%20rotate%28%2D90deg%29%3B%0A%7D%0A%2Evis%2Ddata%2Daxis%20%2Evis%2Dy%2Daxis%2Evis%2Dtitle%2Evis%2Dright%20%7B%0Abottom%3A%200%3B%0A%2Dwebkit%2Dtransform%2Dorigin%3A%20right%20bottom%3B%0A%2Dmoz%2Dtransform%2Dorigin%3A%20right%20bottom%3B%0A%2Dms%2Dtransform%2Dorigin%3A%20right%20bottom%3B%0A%2Do%2Dtransform%2Dorigin%3A%20right%20bottom%3B%0Atransform%2Dorigin%3A%20right%20bottom%3B%0A%2Dwebkit%2Dtransform%3A%20rotate%2890deg%29%3B%0A%2Dmoz%2Dtransform%3A%20rotate%2890deg%29%3B%0A%2Dms%2Dtransform%3A%20rotate%2890deg%29%3B%0A%2Do%2Dtransform%3A%20rotate%2890deg%29%3B%0Atransform%3A%20rotate%2890deg%29%3B%0A%7D%0A%2Evis%2Dlegend%20%7B%0Abackground%2Dcolor%3A%20rgba%28247%2C%20252%2C%20255%2C%200%2E65%29%3B%0Apadding%3A%205px%3B%0Aborder%3A%201px%20solid%20%23b3b3b3%3B%0Abox%2Dshadow%3A%202px%202px%2010px%20rgba%28154%2C%20154%2C%20154%2C%200%2E55%29%3B%0A%7D%0A%2Evis%2Dlegend%2Dtext%20%7B%0A%0Awhite%2Dspace%3A%20nowrap%3B%0Adisplay%3A%20inline%2Dblock%0A%7D%0A%2Evis%2Ditem%20%7B%0Aposition%3A%20absolute%3B%0Acolor%3A%20%231A1A1A%3B%0Aborder%2Dcolor%3A%20%2397B0F8%3B%0Aborder%2Dwidth%3A%201px%3B%0Abackground%2Dcolor%3A%20%23D5DDF6%3B%0Adisplay%3A%20inline%2Dblock%3B%0A%0A%7D%0A%2Evis%2Ditem%2Evis%2Dselected%20%7B%0Aborder%2Dcolor%3A%20%23FFC200%3B%0Abackground%2Dcolor%3A%20%23FFF785%3B%0A%0Az%2Dindex%3A%202%3B%0A%7D%0A%2Evis%2Deditable%2Evis%2Dselected%20%7B%0Acursor%3A%20move%3B%0A%7D%0A%2Evis%2Ditem%2Evis%2Dpoint%2Evis%2Dselected%20%7B%0Abackground%2Dcolor%3A%20%23FFF785%3B%0A%7D%0A%2Evis%2Ditem%2Evis%2Dbox%20%7B%0Atext%2Dalign%3A%20center%3B%0Aborder%2Dstyle%3A%20solid%3B%0Aborder%2Dradius%3A%202px%3B%0A%7D%0A%2Evis%2Ditem%2Evis%2Dpoint%20%7B%0Abackground%3A%20none%3B%0A%7D%0A%2Evis%2Ditem%2Evis%2Ddot%20%7B%0Aposition%3A%20absolute%3B%0Apadding%3A%200%3B%0Aborder%2Dwidth%3A%204px%3B%0Aborder%2Dstyle%3A%20solid%3B%0Aborder%2Dradius%3A%204px%3B%0A%7D%0A%2Evis%2Ditem%2Evis%2Drange%20%7B%0Aborder%2Dstyle%3A%20solid%3B%0Aborder%2Dradius%3A%202px%3B%0Abox%2Dsizing%3A%20border%2Dbox%3B%0A%7D%0A%2Evis%2Ditem%2Evis%2Dbackground%20%7B%0Aborder%3A%20none%3B%0Abackground%2Dcolor%3A%20rgba%28213%2C%20221%2C%20246%2C%200%2E4%29%3B%0Abox%2Dsizing%3A%20border%2Dbox%3B%0Apadding%3A%200%3B%0Amargin%3A%200%3B%0A%7D%0A%2Evis%2Ditem%20%2Evis%2Ditem%2Doverflow%20%7B%0Aposition%3A%20relative%3B%0Awidth%3A%20100%25%3B%0Aheight%3A%20100%25%3B%0Apadding%3A%200%3B%0Amargin%3A%200%3B%0Aoverflow%3A%20hidden%3B%0A%7D%0A%2Evis%2Ditem%2Evis%2Drange%20%2Evis%2Ditem%2Dcontent%20%7B%0Aposition%3A%20relative%3B%0Adisplay%3A%20inline%2Dblock%3B%0A%7D%0A%2Evis%2Ditem%2Evis%2Dbackground%20%2Evis%2Ditem%2Dcontent%20%7B%0Aposition%3A%20absolute%3B%0Adisplay%3A%20inline%2Dblock%3B%0A%7D%0A%2Evis%2Ditem%2Evis%2Dline%20%7B%0Apadding%3A%200%3B%0Aposition%3A%20absolute%3B%0Awidth%3A%200%3B%0Aborder%2Dleft%2Dwidth%3A%201px%3B%0Aborder%2Dleft%2Dstyle%3A%20solid%3B%0A%7D%0A%2Evis%2Ditem%20%2Evis%2Ditem%2Dcontent%20%7B%0Awhite%2Dspace%3A%20nowrap%3B%0Abox%2Dsizing%3A%20border%2Dbox%3B%0Apadding%3A%205px%3B%0A%7D%0A%2Evis%2Ditem%20%2Evis%2DonUpdateTime%2Dtooltip%20%7B%0Aposition%3A%20absolute%3B%0Abackground%3A%20%234f81bd%3B%0Acolor%3A%20white%3B%0Awidth%3A%20200px%3B%0Atext%2Dalign%3A%20center%3B%0Awhite%2Dspace%3A%20nowrap%3B%0Apadding%3A%205px%3B%0Aborder%2Dradius%3A%201px%3B%0A%7D%0A%2Evis%2Ditem%20%2Evis%2Ddelete%2C%20%2Evis%2Ditem%20%2Evis%2Ddelete%2Drtl%20%7B%0Aposition%3A%20absolute%3B%0Atop%3A%200px%3B%0Awidth%3A%2024px%3B%0Aheight%3A%2024px%3B%0Abox%2Dsizing%3A%20border%2Dbox%3B%0Apadding%3A%200px%205px%3B%0Acursor%3A%20pointer%3B%0A%2Dwebkit%2Dtransition%3A%20background%200%2E2s%20linear%3B%0A%2Dmoz%2Dtransition%3A%20background%200%2E2s%20linear%3B%0A%2Dms%2Dtransition%3A%20background%200%2E2s%20linear%3B%0A%2Do%2Dtransition%3A%20background%200%2E2s%20linear%3B%0Atransition%3A%20background%200%2E2s%20linear%3B%0A%7D%0A%2Evis%2Ditem%20%2Evis%2Ddelete%20%7B%0Aright%3A%20%2D24px%3B%0A%7D%0A%2Evis%2Ditem%20%2Evis%2Ddelete%2Drtl%20%7B%0Aleft%3A%20%2D24px%3B%0A%7D%0A%2Evis%2Ditem%20%2Evis%2Ddelete%3Aafter%2C%20%2Evis%2Ditem%20%2Evis%2Ddelete%2Drtl%3Aafter%20%7B%0Acontent%3A%20%22%5C00D7%22%3B%20%0Acolor%3A%20red%3B%0Afont%2Dfamily%3A%20arial%2C%20sans%2Dserif%3B%0Afont%2Dsize%3A%2022px%3B%0Afont%2Dweight%3A%20bold%3B%0A%2Dwebkit%2Dtransition%3A%20color%200%2E2s%20linear%3B%0A%2Dmoz%2Dtransition%3A%20color%200%2E2s%20linear%3B%0A%2Dms%2Dtransition%3A%20color%200%2E2s%20linear%3B%0A%2Do%2Dtransition%3A%20color%200%2E2s%20linear%3B%0Atransition%3A%20color%200%2E2s%20linear%3B%0A%7D%0A%2Evis%2Ditem%20%2Evis%2Ddelete%3Ahover%2C%20%2Evis%2Ditem%20%2Evis%2Ddelete%2Drtl%3Ahover%20%7B%0Abackground%3A%20red%3B%0A%7D%0A%2Evis%2Ditem%20%2Evis%2Ddelete%3Ahover%3Aafter%2C%20%2Evis%2Ditem%20%2Evis%2Ddelete%2Drtl%3Ahover%3Aafter%20%7B%0Acolor%3A%20white%3B%0A%7D%0A%2Evis%2Ditem%20%2Evis%2Ddrag%2Dcenter%20%7B%0Aposition%3A%20absolute%3B%0Awidth%3A%20100%25%3B%0Aheight%3A%20100%25%3B%0Atop%3A%200%3B%0Aleft%3A%200px%3B%0Acursor%3A%20move%3B%0A%7D%0A%2Evis%2Ditem%2Evis%2Drange%20%2Evis%2Ddrag%2Dleft%20%7B%0Aposition%3A%20absolute%3B%0Awidth%3A%2024px%3B%0Amax%2Dwidth%3A%2020%25%3B%0Amin%2Dwidth%3A%202px%3B%0Aheight%3A%20100%25%3B%0Atop%3A%200%3B%0Aleft%3A%20%2D4px%3B%0Acursor%3A%20w%2Dresize%3B%0A%7D%0A%2Evis%2Ditem%2Evis%2Drange%20%2Evis%2Ddrag%2Dright%20%7B%0Aposition%3A%20absolute%3B%0Awidth%3A%2024px%3B%0Amax%2Dwidth%3A%2020%25%3B%0Amin%2Dwidth%3A%202px%3B%0Aheight%3A%20100%25%3B%0Atop%3A%200%3B%0Aright%3A%20%2D4px%3B%0Acursor%3A%20e%2Dresize%3B%0A%7D%0A%2Evis%2Drange%2Evis%2Ditem%2Evis%2Dreadonly%20%2Evis%2Ddrag%2Dleft%2C%0A%2Evis%2Drange%2Evis%2Ditem%2Evis%2Dreadonly%20%2Evis%2Ddrag%2Dright%20%7B%0Acursor%3A%20auto%3B%0A%7D%0A%2Evis%2Ditemset%20%7B%0Aposition%3A%20relative%3B%0Apadding%3A%200%3B%0Amargin%3A%200%3B%0Abox%2Dsizing%3A%20border%2Dbox%3B%0A%7D%0A%2Evis%2Ditemset%20%2Evis%2Dbackground%2C%0A%2Evis%2Ditemset%20%2Evis%2Dforeground%20%7B%0Aposition%3A%20absolute%3B%0Awidth%3A%20100%25%3B%0Aheight%3A%20100%25%3B%0Aoverflow%3A%20visible%3B%0A%7D%0A%2Evis%2Daxis%20%7B%0Aposition%3A%20absolute%3B%0Awidth%3A%20100%25%3B%0Aheight%3A%200%3B%0Aleft%3A%200%3B%0Az%2Dindex%3A%201%3B%0A%7D%0A%2Evis%2Dforeground%20%2Evis%2Dgroup%20%7B%0Aposition%3A%20relative%3B%0Abox%2Dsizing%3A%20border%2Dbox%3B%0Aborder%2Dbottom%3A%201px%20solid%20%23bfbfbf%3B%0A%7D%0A%2Evis%2Dforeground%20%2Evis%2Dgroup%3Alast%2Dchild%20%7B%0Aborder%2Dbottom%3A%20none%3B%0A%7D%0A%2Evis%2Doverlay%20%7B%0Aposition%3A%20absolute%3B%0Atop%3A%200%3B%0Aleft%3A%200%3B%0Awidth%3A%20100%25%3B%0Aheight%3A%20100%25%3B%0Az%2Dindex%3A%2010%3B%0A%7D%0A%2Evis%2Dlabelset%20%7B%0Aposition%3A%20relative%3B%0Aoverflow%3A%20hidden%3B%0Abox%2Dsizing%3A%20border%2Dbox%3B%0A%7D%0A%2Evis%2Dlabelset%20%2Evis%2Dlabel%20%7B%0Aposition%3A%20relative%3B%0Aleft%3A%200%3B%0Atop%3A%200%3B%0Awidth%3A%20100%25%3B%0Acolor%3A%20%234d4d4d%3B%0Abox%2Dsizing%3A%20border%2Dbox%3B%0A%7D%0A%2Evis%2Dlabelset%20%2Evis%2Dlabel%20%7B%0Aborder%2Dbottom%3A%201px%20solid%20%23bfbfbf%3B%0A%7D%0A%2Evis%2Dlabelset%20%2Evis%2Dlabel%2Edraggable%20%7B%0Acursor%3A%20pointer%3B%0A%7D%0A%2Evis%2Dlabelset%20%2Evis%2Dlabel%3Alast%2Dchild%20%7B%0Aborder%2Dbottom%3A%20none%3B%0A%7D%0A%2Evis%2Dlabelset%20%2Evis%2Dlabel%20%2Evis%2Dinner%20%7B%0Adisplay%3A%20inline%2Dblock%3B%0Apadding%3A%205px%3B%0A%7D%0A%2Evis%2Dlabelset%20%2Evis%2Dlabel%20%2Evis%2Dinner%2Evis%2Dhidden%20%7B%0Apadding%3A%200%3B%0A%7D%0A%2Evis%2Dpanel%20%7B%0Aposition%3A%20absolute%3B%0Apadding%3A%200%3B%0Amargin%3A%200%3B%0Abox%2Dsizing%3A%20border%2Dbox%3B%0A%7D%0A%2Evis%2Dpanel%2Evis%2Dcenter%2C%0A%2Evis%2Dpanel%2Evis%2Dleft%2C%0A%2Evis%2Dpanel%2Evis%2Dright%2C%0A%2Evis%2Dpanel%2Evis%2Dtop%2C%0A%2Evis%2Dpanel%2Evis%2Dbottom%20%7B%0Aborder%3A%201px%20%23bfbfbf%3B%0A%7D%0A%2Evis%2Dpanel%2Evis%2Dcenter%2C%0A%2Evis%2Dpanel%2Evis%2Dleft%2C%0A%2Evis%2Dpanel%2Evis%2Dright%20%7B%0Aborder%2Dtop%2Dstyle%3A%20solid%3B%0Aborder%2Dbottom%2Dstyle%3A%20solid%3B%0Aoverflow%3A%20hidden%3B%0A%7D%0A%2Evis%2Dleft%2Evis%2Dpanel%2Evis%2Dvertical%2Dscroll%2C%20%2Evis%2Dright%2Evis%2Dpanel%2Evis%2Dvertical%2Dscroll%20%7B%0Aheight%3A%20100%25%3B%0Aoverflow%2Dx%3A%20hidden%3B%0Aoverflow%2Dy%3A%20scroll%3B%0A%7D%20%2Evis%2Dleft%2Evis%2Dpanel%2Evis%2Dvertical%2Dscroll%20%7B%0Adirection%3A%20rtl%3B%0A%7D%0A%2Evis%2Dleft%2Evis%2Dpanel%2Evis%2Dvertical%2Dscroll%20%2Evis%2Dcontent%20%7B%0Adirection%3A%20ltr%3B%0A%7D%0A%2Evis%2Dright%2Evis%2Dpanel%2Evis%2Dvertical%2Dscroll%20%7B%0Adirection%3A%20ltr%3B%0A%7D%0A%2Evis%2Dright%2Evis%2Dpanel%2Evis%2Dvertical%2Dscroll%20%2Evis%2Dcontent%20%7B%0Adirection%3A%20rtl%3B%0A%7D%0A%2Evis%2Dpanel%2Evis%2Dcenter%2C%0A%2Evis%2Dpanel%2Evis%2Dtop%2C%0A%2Evis%2Dpanel%2Evis%2Dbottom%20%7B%0Aborder%2Dleft%2Dstyle%3A%20solid%3B%0Aborder%2Dright%2Dstyle%3A%20solid%3B%0A%7D%0A%2Evis%2Dbackground%20%7B%0Aoverflow%3A%20hidden%3B%0A%7D%0A%2Evis%2Dpanel%20%3E%20%2Evis%2Dcontent%20%7B%0Aposition%3A%20relative%3B%0A%7D%0A%2Evis%2Dpanel%20%2Evis%2Dshadow%20%7B%0Aposition%3A%20absolute%3B%0Awidth%3A%20100%25%3B%0Aheight%3A%201px%3B%0Abox%2Dshadow%3A%200%200%2010px%20rgba%280%2C0%2C0%2C0%2E8%29%3B%0A%0A%7D%0A%2Evis%2Dpanel%20%2Evis%2Dshadow%2Evis%2Dtop%20%7B%0Atop%3A%20%2D1px%3B%0Aleft%3A%200%3B%0A%7D%0A%2Evis%2Dpanel%20%2Evis%2Dshadow%2Evis%2Dbottom%20%7B%0Abottom%3A%20%2D1px%3B%0Aleft%3A%200%3B%0A%7D%0A%2Evis%2Dgraph%2Dgroup0%20%7B%0Afill%3A%234f81bd%3B%0Afill%2Dopacity%3A0%3B%0Astroke%2Dwidth%3A2px%3B%0Astroke%3A%20%234f81bd%3B%0A%7D%0A%2Evis%2Dgraph%2Dgroup1%20%7B%0Afill%3A%23f79646%3B%0Afill%2Dopacity%3A0%3B%0Astroke%2Dwidth%3A2px%3B%0Astroke%3A%20%23f79646%3B%0A%7D%0A%2Evis%2Dgraph%2Dgroup2%20%7B%0Afill%3A%20%238c51cf%3B%0Afill%2Dopacity%3A0%3B%0Astroke%2Dwidth%3A2px%3B%0Astroke%3A%20%238c51cf%3B%0A%7D%0A%2Evis%2Dgraph%2Dgroup3%20%7B%0Afill%3A%20%2375c841%3B%0Afill%2Dopacity%3A0%3B%0Astroke%2Dwidth%3A2px%3B%0Astroke%3A%20%2375c841%3B%0A%7D%0A%2Evis%2Dgraph%2Dgroup4%20%7B%0Afill%3A%20%23ff0100%3B%0Afill%2Dopacity%3A0%3B%0Astroke%2Dwidth%3A2px%3B%0Astroke%3A%20%23ff0100%3B%0A%7D%0A%2Evis%2Dgraph%2Dgroup5%20%7B%0Afill%3A%20%2337d8e6%3B%0Afill%2Dopacity%3A0%3B%0Astroke%2Dwidth%3A2px%3B%0Astroke%3A%20%2337d8e6%3B%0A%7D%0A%2Evis%2Dgraph%2Dgroup6%20%7B%0Afill%3A%20%23042662%3B%0Afill%2Dopacity%3A0%3B%0Astroke%2Dwidth%3A2px%3B%0Astroke%3A%20%23042662%3B%0A%7D%0A%2Evis%2Dgraph%2Dgroup7%20%7B%0Afill%3A%2300ff26%3B%0Afill%2Dopacity%3A0%3B%0Astroke%2Dwidth%3A2px%3B%0Astroke%3A%20%2300ff26%3B%0A%7D%0A%2Evis%2Dgraph%2Dgroup8%20%7B%0Afill%3A%23ff00ff%3B%0Afill%2Dopacity%3A0%3B%0Astroke%2Dwidth%3A2px%3B%0Astroke%3A%20%23ff00ff%3B%0A%7D%0A%2Evis%2Dgraph%2Dgroup9%20%7B%0Afill%3A%20%238f3938%3B%0Afill%2Dopacity%3A0%3B%0Astroke%2Dwidth%3A2px%3B%0Astroke%3A%20%238f3938%3B%0A%7D%0A%2Evis%2Dtimeline%20%2Evis%2Dfill%20%7B%0Afill%2Dopacity%3A0%2E1%3B%0Astroke%3A%20none%3B%0A%7D%0A%2Evis%2Dtimeline%20%2Evis%2Dbar%20%7B%0Afill%2Dopacity%3A0%2E5%3B%0Astroke%2Dwidth%3A1px%3B%0A%7D%0A%2Evis%2Dtimeline%20%2Evis%2Dpoint%20%7B%0Astroke%2Dwidth%3A2px%3B%0Afill%2Dopacity%3A1%2E0%3B%0A%7D%0A%2Evis%2Dtimeline%20%2Evis%2Dlegend%2Dbackground%20%7B%0Astroke%2Dwidth%3A1px%3B%0Afill%2Dopacity%3A0%2E9%3B%0Afill%3A%20%23ffffff%3B%0Astroke%3A%20%23c2c2c2%3B%0A%7D%0A%2Evis%2Dtimeline%20%2Evis%2Doutline%20%7B%0Astroke%2Dwidth%3A1px%3B%0Afill%2Dopacity%3A1%3B%0Afill%3A%20%23ffffff%3B%0Astroke%3A%20%23e5e5e5%3B%0A%7D%0A%2Evis%2Dtimeline%20%2Evis%2Dicon%2Dfill%20%7B%0Afill%2Dopacity%3A0%2E3%3B%0Astroke%3A%20none%3B%0A%7D%0A%2Evis%2Dtime%2Daxis%20%7B%0Aposition%3A%20relative%3B%0Aoverflow%3A%20hidden%3B%0A%7D%0A%2Evis%2Dtime%2Daxis%2Evis%2Dforeground%20%7B%0Atop%3A%200%3B%0Aleft%3A%200%3B%0Awidth%3A%20100%25%3B%0A%7D%0A%2Evis%2Dtime%2Daxis%2Evis%2Dbackground%20%7B%0Aposition%3A%20absolute%3B%0Atop%3A%200%3B%0Aleft%3A%200%3B%0Awidth%3A%20100%25%3B%0Aheight%3A%20100%25%3B%0A%7D%0A%2Evis%2Dtime%2Daxis%20%2Evis%2Dtext%20%7B%0Aposition%3A%20absolute%3B%0Acolor%3A%20%234d4d4d%3B%0Apadding%3A%203px%3B%0Aoverflow%3A%20hidden%3B%0Abox%2Dsizing%3A%20border%2Dbox%3B%0Awhite%2Dspace%3A%20nowrap%3B%0A%7D%0A%2Evis%2Dtime%2Daxis%20%2Evis%2Dtext%2Evis%2Dmeasure%20%7B%0Aposition%3A%20absolute%3B%0Apadding%2Dleft%3A%200%3B%0Apadding%2Dright%3A%200%3B%0Amargin%2Dleft%3A%200%3B%0Amargin%2Dright%3A%200%3B%0Avisibility%3A%20hidden%3B%0A%7D%0A%2Evis%2Dtime%2Daxis%20%2Evis%2Dgrid%2Evis%2Dvertical%20%7B%0Aposition%3A%20absolute%3B%0Aborder%2Dleft%3A%201px%20solid%3B%0A%7D%0A%2Evis%2Dtime%2Daxis%20%2Evis%2Dgrid%2Evis%2Dvertical%2Drtl%20%7B%0Aposition%3A%20absolute%3B%0Aborder%2Dright%3A%201px%20solid%3B%0A%7D%0A%2Evis%2Dtime%2Daxis%20%2Evis%2Dgrid%2Evis%2Dminor%20%7B%0Aborder%2Dcolor%3A%20%23e5e5e5%3B%0A%7D%0A%2Evis%2Dtime%2Daxis%20%2Evis%2Dgrid%2Evis%2Dmajor%20%7B%0Aborder%2Dcolor%3A%20%23bfbfbf%3B%0A%7D%0A%2Evis%2Dtimeline%20%7B%0Aposition%3A%20relative%3B%0Aborder%3A%201px%20solid%20%23bfbfbf%3B%0Aoverflow%3A%20hidden%3B%0Apadding%3A%200%3B%0Amargin%3A%200%3B%0Abox%2Dsizing%3A%20border%2Dbox%3B%0A%7D%0A" rel="stylesheet" />
<script src="data:application/x-javascript;base64,LyoqCiAqIHZpcy5qcwogKiBodHRwczovL2dpdGh1Yi5jb20vYWxtZW5kZS92aXMKICoKICogQSBkeW5hbWljLCBicm93c2VyLWJhc2VkIHZpc3VhbGl6YXRpb24gbGlicmFyeS4KICoKICogQHZlcnNpb24gNC4xNy4wCiAqIEBkYXRlICAgIDIwMTYtMTEtMDUKICoKICogQGxpY2Vuc2UKICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTYgQWxtZW5kZSBCLlYsIGh0dHA6Ly9hbG1lbmRlLmNvbQogKgogKiBWaXMuanMgaXMgZHVhbCBsaWNlbnNlZCB1bmRlciBib3RoCiAqCiAqICogVGhlIEFwYWNoZSAyLjAgTGljZW5zZQogKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogKgogKiBhbmQKICoKICogKiBUaGUgTUlUIExpY2Vuc2UKICogICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUCiAqCiAqIFZpcy5qcyBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgZWl0aGVyIGxpY2Vuc2UuCiAqLwoidXNlIHN0cmljdCI7IWZ1bmN0aW9uKHQsZSl7Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1lKCk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW10sZSk6Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHMudmlzPWUoKTp0LnZpcz1lKCl9KHRoaXMsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShvKXtpZihpW29dKXJldHVybiBpW29dLmV4cG9ydHM7dmFyIG49aVtvXT17ZXhwb3J0czp7fSxpZDpvLGxvYWRlZDohMX07cmV0dXJuIHRbb10uY2FsbChuLmV4cG9ydHMsbixuLmV4cG9ydHMsZSksbi5sb2FkZWQ9ITAsbi5leHBvcnRzfXZhciBpPXt9O3JldHVybiBlLm09dCxlLmM9aSxlLnA9IiIsZSgwKX0oW2Z1bmN0aW9uKHQsZSxpKXt2YXIgbz1pKDEpO28uZXh0ZW5kKGUsaSg3KSksby5leHRlbmQoZSxpKDI2KSksby5leHRlbmQoZSxpKDYyKSl9LGZ1bmN0aW9uKHQsZSxpKXt2YXIgbz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0sbj1pKDIpLHM9aSg2KTtlLmlzTnVtYmVyPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgTnVtYmVyfHwibnVtYmVyIj09dHlwZW9mIHR9LGUucmVjdXJzaXZlRE9NRGVsZXRlPWZ1bmN0aW9uKHQpe2lmKHQpZm9yKDt0Lmhhc0NoaWxkTm9kZXMoKT09PSEwOyllLnJlY3Vyc2l2ZURPTURlbGV0ZSh0LmZpcnN0Q2hpbGQpLHQucmVtb3ZlQ2hpbGQodC5maXJzdENoaWxkKX0sZS5naXZlUmFuZ2U9ZnVuY3Rpb24odCxlLGksbyl7aWYoZT09dClyZXR1cm4uNTt2YXIgbj0xLyhlLXQpO3JldHVybiBNYXRoLm1heCgwLChvLXQpKm4pfSxlLmlzU3RyaW5nPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgU3RyaW5nfHwic3RyaW5nIj09dHlwZW9mIHR9LGUuaXNEYXRlPWZ1bmN0aW9uKHQpe2lmKHQgaW5zdGFuY2VvZiBEYXRlKXJldHVybiEwO2lmKGUuaXNTdHJpbmcodCkpe3ZhciBpPXIuZXhlYyh0KTtpZihpKXJldHVybiEwO2lmKCFpc05hTihEYXRlLnBhcnNlKHQpKSlyZXR1cm4hMH1yZXR1cm4hMX0sZS5yYW5kb21VVUlEPWZ1bmN0aW9uKCl7cmV0dXJuIHMudjQoKX0sZS5hc3NpZ25BbGxLZXlzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBpIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShpKSYmIm9iamVjdCIhPT1vKHRbaV0pJiYodFtpXT1lKX0sZS5maWxsSWZEZWZpbmVkPWZ1bmN0aW9uKHQsaSl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtmb3IodmFyIHMgaW4gdCl2b2lkIDAhPT1pW3NdJiYoIm9iamVjdCIhPT1vKGlbc10pP3ZvaWQgMCE9PWlbc10mJm51bGwhPT1pW3NdfHx2b2lkIDA9PT10W3NdfHxuIT09ITA/dFtzXT1pW3NdOmRlbGV0ZSB0W3NdOiJvYmplY3QiPT09byh0W3NdKSYmZS5maWxsSWZEZWZpbmVkKHRbc10saVtzXSxuKSl9LGUucHJvdG9FeHRlbmQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIGk9MTtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKXt2YXIgbz1hcmd1bWVudHNbaV07Zm9yKHZhciBuIGluIG8pdFtuXT1vW25dfXJldHVybiB0fSxlLmV4dGVuZD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgaT0xO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspe3ZhciBvPWFyZ3VtZW50c1tpXTtmb3IodmFyIG4gaW4gbylvLmhhc093blByb3BlcnR5KG4pJiYodFtuXT1vW25dKX1yZXR1cm4gdH0sZS5zZWxlY3RpdmVFeHRlbmQ9ZnVuY3Rpb24odCxlLGkpe2lmKCFBcnJheS5pc0FycmF5KHQpKXRocm93IG5ldyBFcnJvcigiQXJyYXkgd2l0aCBwcm9wZXJ0eSBuYW1lcyBleHBlY3RlZCBhcyBmaXJzdCBhcmd1bWVudCIpO2Zvcih2YXIgbz0yO288YXJndW1lbnRzLmxlbmd0aDtvKyspZm9yKHZhciBuPWFyZ3VtZW50c1tvXSxzPTA7czx0Lmxlbmd0aDtzKyspe3ZhciByPXRbc107bi5oYXNPd25Qcm9wZXJ0eShyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LGUuc2VsZWN0aXZlRGVlcEV4dGVuZD1mdW5jdGlvbih0LGksbyl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXTtpZihBcnJheS5pc0FycmF5KG8pKXRocm93IG5ldyBUeXBlRXJyb3IoIkFycmF5cyBhcmUgbm90IHN1cHBvcnRlZCBieSBkZWVwRXh0ZW5kIik7Zm9yKHZhciBzPTI7czxhcmd1bWVudHMubGVuZ3RoO3MrKylmb3IodmFyIHI9YXJndW1lbnRzW3NdLGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIGg9dFthXTtpZihyLmhhc093blByb3BlcnR5KGgpKWlmKG9baF0mJm9baF0uY29uc3RydWN0b3I9PT1PYmplY3Qpdm9pZCAwPT09aVtoXSYmKGlbaF09e30pLGlbaF0uY29uc3RydWN0b3I9PT1PYmplY3Q/ZS5kZWVwRXh0ZW5kKGlbaF0sb1toXSwhMSxuKTpudWxsPT09b1toXSYmdm9pZCAwIT09aVtoXSYmbj09PSEwP2RlbGV0ZSBpW2hdOmlbaF09b1toXTtlbHNle2lmKEFycmF5LmlzQXJyYXkob1toXSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IGRlZXBFeHRlbmQiKTtudWxsPT09b1toXSYmdm9pZCAwIT09aVtoXSYmbj09PSEwP2RlbGV0ZSBpW2hdOmlbaF09b1toXX19cmV0dXJuIGl9LGUuc2VsZWN0aXZlTm90RGVlcEV4dGVuZD1mdW5jdGlvbih0LGksbyl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXTtpZihBcnJheS5pc0FycmF5KG8pKXRocm93IG5ldyBUeXBlRXJyb3IoIkFycmF5cyBhcmUgbm90IHN1cHBvcnRlZCBieSBkZWVwRXh0ZW5kIik7Zm9yKHZhciBzIGluIG8paWYoby5oYXNPd25Qcm9wZXJ0eShzKSYmdC5pbmRleE9mKHMpPT0tMSlpZihvW3NdJiZvW3NdLmNvbnN0cnVjdG9yPT09T2JqZWN0KXZvaWQgMD09PWlbc10mJihpW3NdPXt9KSxpW3NdLmNvbnN0cnVjdG9yPT09T2JqZWN0P2UuZGVlcEV4dGVuZChpW3NdLG9bc10pOm51bGw9PT1vW3NdJiZ2b2lkIDAhPT1pW3NdJiZuPT09ITA/ZGVsZXRlIGlbc106aVtzXT1vW3NdO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShvW3NdKSl7aVtzXT1bXTtmb3IodmFyIHI9MDtyPG9bc10ubGVuZ3RoO3IrKylpW3NdLnB1c2gob1tzXVtyXSl9ZWxzZSBudWxsPT09b1tzXSYmdm9pZCAwIT09aVtzXSYmbj09PSEwP2RlbGV0ZSBpW3NdOmlbc109b1tzXTtyZXR1cm4gaX0sZS5kZWVwRXh0ZW5kPWZ1bmN0aW9uKHQsaSxvLG4pe2Zvcih2YXIgcyBpbiBpKWlmKGkuaGFzT3duUHJvcGVydHkocyl8fG89PT0hMClpZihpW3NdJiZpW3NdLmNvbnN0cnVjdG9yPT09T2JqZWN0KXZvaWQgMD09PXRbc10mJih0W3NdPXt9KSx0W3NdLmNvbnN0cnVjdG9yPT09T2JqZWN0P2UuZGVlcEV4dGVuZCh0W3NdLGlbc10sbyk6bnVsbD09PWlbc10mJnZvaWQgMCE9PXRbc10mJm49PT0hMD9kZWxldGUgdFtzXTp0W3NdPWlbc107ZWxzZSBpZihBcnJheS5pc0FycmF5KGlbc10pKXt0W3NdPVtdO2Zvcih2YXIgcj0wO3I8aVtzXS5sZW5ndGg7cisrKXRbc10ucHVzaChpW3NdW3JdKX1lbHNlIG51bGw9PT1pW3NdJiZ2b2lkIDAhPT10W3NdJiZuPT09ITA/ZGVsZXRlIHRbc106dFtzXT1pW3NdO3JldHVybiB0fSxlLmVxdWFsQXJyYXk9ZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aCE9ZS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBpPTAsbz10Lmxlbmd0aDtpPG87aSsrKWlmKHRbaV0hPWVbaV0pcmV0dXJuITE7cmV0dXJuITB9LGUuY29udmVydD1mdW5jdGlvbih0LGkpe3ZhciBvO2lmKHZvaWQgMCE9PXQpe2lmKG51bGw9PT10KXJldHVybiBudWxsO2lmKCFpKXJldHVybiB0O2lmKCJzdHJpbmciIT10eXBlb2YgaSYmIShpIGluc3RhbmNlb2YgU3RyaW5nKSl0aHJvdyBuZXcgRXJyb3IoIlR5cGUgbXVzdCBiZSBhIHN0cmluZyIpO3N3aXRjaChpKXtjYXNlImJvb2xlYW4iOmNhc2UiQm9vbGVhbiI6cmV0dXJuIEJvb2xlYW4odCk7Y2FzZSJudW1iZXIiOmNhc2UiTnVtYmVyIjpyZXR1cm4gaXNOYU4oRGF0ZS5wYXJzZSh0KSk/TnVtYmVyKHQudmFsdWVPZigpKTpuKHQpLnZhbHVlT2YoKTtjYXNlInN0cmluZyI6Y2FzZSJTdHJpbmciOnJldHVybiBTdHJpbmcodCk7Y2FzZSJEYXRlIjppZihlLmlzTnVtYmVyKHQpKXJldHVybiBuZXcgRGF0ZSh0KTtpZih0IGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gbmV3IERhdGUodC52YWx1ZU9mKCkpO2lmKG4uaXNNb21lbnQodCkpcmV0dXJuIG5ldyBEYXRlKHQudmFsdWVPZigpKTtpZihlLmlzU3RyaW5nKHQpKXJldHVybiBvPXIuZXhlYyh0KSxvP25ldyBEYXRlKE51bWJlcihvWzFdKSk6bihuZXcgRGF0ZSh0KSkudG9EYXRlKCk7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY29udmVydCBvYmplY3Qgb2YgdHlwZSAiK2UuZ2V0VHlwZSh0KSsiIHRvIHR5cGUgRGF0ZSIpO2Nhc2UiTW9tZW50IjppZihlLmlzTnVtYmVyKHQpKXJldHVybiBuKHQpO2lmKHQgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBuKHQudmFsdWVPZigpKTtpZihuLmlzTW9tZW50KHQpKXJldHVybiBuKHQpO2lmKGUuaXNTdHJpbmcodCkpcmV0dXJuIG89ci5leGVjKHQpLG4obz9OdW1iZXIob1sxXSk6dCk7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY29udmVydCBvYmplY3Qgb2YgdHlwZSAiK2UuZ2V0VHlwZSh0KSsiIHRvIHR5cGUgRGF0ZSIpO2Nhc2UiSVNPRGF0ZSI6aWYoZS5pc051bWJlcih0KSlyZXR1cm4gbmV3IERhdGUodCk7aWYodCBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIHQudG9JU09TdHJpbmcoKTtpZihuLmlzTW9tZW50KHQpKXJldHVybiB0LnRvRGF0ZSgpLnRvSVNPU3RyaW5nKCk7aWYoZS5pc1N0cmluZyh0KSlyZXR1cm4gbz1yLmV4ZWModCksbz9uZXcgRGF0ZShOdW1iZXIob1sxXSkpLnRvSVNPU3RyaW5nKCk6bih0KS5mb3JtYXQoKTt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjb252ZXJ0IG9iamVjdCBvZiB0eXBlICIrZS5nZXRUeXBlKHQpKyIgdG8gdHlwZSBJU09EYXRlIik7Y2FzZSJBU1BEYXRlIjppZihlLmlzTnVtYmVyKHQpKXJldHVybiIvRGF0ZSgiK3QrIikvIjtpZih0IGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4iL0RhdGUoIit0LnZhbHVlT2YoKSsiKS8iO2lmKGUuaXNTdHJpbmcodCkpe289ci5leGVjKHQpO3ZhciBzO3JldHVybiBzPW8/bmV3IERhdGUoTnVtYmVyKG9bMV0pKS52YWx1ZU9mKCk6bmV3IERhdGUodCkudmFsdWVPZigpLCIvRGF0ZSgiK3MrIikvIn10aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjb252ZXJ0IG9iamVjdCBvZiB0eXBlICIrZS5nZXRUeXBlKHQpKyIgdG8gdHlwZSBBU1BEYXRlIik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gdHlwZSAiJytpKyciJyl9fX07dmFyIHI9L15cLz9EYXRlXCgoXC0/XGQrKS9pO2UuZ2V0VHlwZT1mdW5jdGlvbih0KXt2YXIgZT0idW5kZWZpbmVkIj09dHlwZW9mIHQ/InVuZGVmaW5lZCI6byh0KTtyZXR1cm4ib2JqZWN0Ij09ZT9udWxsPT09dD8ibnVsbCI6dCBpbnN0YW5jZW9mIEJvb2xlYW4/IkJvb2xlYW4iOnQgaW5zdGFuY2VvZiBOdW1iZXI/Ik51bWJlciI6dCBpbnN0YW5jZW9mIFN0cmluZz8iU3RyaW5nIjpBcnJheS5pc0FycmF5KHQpPyJBcnJheSI6dCBpbnN0YW5jZW9mIERhdGU/IkRhdGUiOiJPYmplY3QiOiJudW1iZXIiPT1lPyJOdW1iZXIiOiJib29sZWFuIj09ZT8iQm9vbGVhbiI6InN0cmluZyI9PWU/IlN0cmluZyI6dm9pZCAwPT09ZT8idW5kZWZpbmVkIjplfSxlLmNvcHlBbmRFeHRlbmRBcnJheT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgaT1bXSxvPTA7bzx0Lmxlbmd0aDtvKyspaS5wdXNoKHRbb10pO3JldHVybiBpLnB1c2goZSksaX0sZS5jb3B5QXJyYXk9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLGk9MDtpPHQubGVuZ3RoO2krKyllLnB1c2godFtpXSk7cmV0dXJuIGV9LGUuZ2V0QWJzb2x1dGVMZWZ0PWZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnR9LGUuZ2V0QWJzb2x1dGVSaWdodD1mdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5yaWdodH0sZS5nZXRBYnNvbHV0ZVRvcD1mdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3B9LGUuYWRkQ2xhc3NOYW1lPWZ1bmN0aW9uKHQsZSl7dmFyIGk9dC5jbGFzc05hbWUuc3BsaXQoIiAiKTtpLmluZGV4T2YoZSk9PS0xJiYoaS5wdXNoKGUpLHQuY2xhc3NOYW1lPWkuam9pbigiICIpKX0sZS5yZW1vdmVDbGFzc05hbWU9ZnVuY3Rpb24odCxlKXt2YXIgaT10LmNsYXNzTmFtZS5zcGxpdCgiICIpLG89aS5pbmRleE9mKGUpO28hPS0xJiYoaS5zcGxpY2UobywxKSx0LmNsYXNzTmFtZT1pLmpvaW4oIiAiKSl9LGUuZm9yRWFjaD1mdW5jdGlvbih0LGUpe3ZhciBpLG87aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IoaT0wLG89dC5sZW5ndGg7aTxvO2krKyllKHRbaV0saSx0KTtlbHNlIGZvcihpIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShpKSYmZSh0W2ldLGksdCl9LGUudG9BcnJheT1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIGkgaW4gdCl0Lmhhc093blByb3BlcnR5KGkpJiZlLnB1c2godFtpXSk7cmV0dXJuIGV9LGUudXBkYXRlUHJvcGVydHk9ZnVuY3Rpb24odCxlLGkpe3JldHVybiB0W2VdIT09aSYmKHRbZV09aSwhMCl9LGUudGhyb3R0bGU9ZnVuY3Rpb24odCl7dmFyIGU9ITE7cmV0dXJuIGZ1bmN0aW9uKCl7ZXx8KGU9ITAscmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7ZT0hMSx0KCl9KSl9fSxlLmFkZEV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24odCxlLGksbyl7dC5hZGRFdmVudExpc3RlbmVyPyh2b2lkIDA9PT1vJiYobz0hMSksIm1vdXNld2hlZWwiPT09ZSYmbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJGaXJlZm94Iik+PTAmJihlPSJET01Nb3VzZVNjcm9sbCIpLHQuYWRkRXZlbnRMaXN0ZW5lcihlLGksbykpOnQuYXR0YWNoRXZlbnQoIm9uIitlLGkpfSxlLnJlbW92ZUV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24odCxlLGksbyl7dC5yZW1vdmVFdmVudExpc3RlbmVyPyh2b2lkIDA9PT1vJiYobz0hMSksIm1vdXNld2hlZWwiPT09ZSYmbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJGaXJlZm94Iik+PTAmJihlPSJET01Nb3VzZVNjcm9sbCIpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLGksbykpOnQuZGV0YWNoRXZlbnQoIm9uIitlLGkpfSxlLnByZXZlbnREZWZhdWx0PWZ1bmN0aW9uKHQpe3R8fCh0PXdpbmRvdy5ldmVudCksdC5wcmV2ZW50RGVmYXVsdD90LnByZXZlbnREZWZhdWx0KCk6dC5yZXR1cm5WYWx1ZT0hMX0sZS5nZXRUYXJnZXQ9ZnVuY3Rpb24odCl7dHx8KHQ9d2luZG93LmV2ZW50KTt2YXIgZTtyZXR1cm4gdC50YXJnZXQ/ZT10LnRhcmdldDp0LnNyY0VsZW1lbnQmJihlPXQuc3JjRWxlbWVudCksdm9pZCAwIT1lLm5vZGVUeXBlJiYzPT1lLm5vZGVUeXBlJiYoZT1lLnBhcmVudE5vZGUpLGV9LGUuaGFzUGFyZW50PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBpPXQ7aTspe2lmKGk9PT1lKXJldHVybiEwO2k9aS5wYXJlbnROb2RlfXJldHVybiExfSxlLm9wdGlvbj17fSxlLm9wdGlvbi5hc0Jvb2xlYW49ZnVuY3Rpb24odCxlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdCYmKHQ9dCgpKSxudWxsIT10PzAhPXQ6ZXx8bnVsbH0sZS5vcHRpb24uYXNOdW1iZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdCYmKHQ9dCgpKSxudWxsIT10P051bWJlcih0KXx8ZXx8bnVsbDplfHxudWxsfSxlLm9wdGlvbi5hc1N0cmluZz1mdW5jdGlvbih0LGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0JiYodD10KCkpLG51bGwhPXQ/U3RyaW5nKHQpOmV8fG51bGx9LGUub3B0aW9uLmFzU2l6ZT1mdW5jdGlvbih0LGkpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0JiYodD10KCkpLGUuaXNTdHJpbmcodCk/dDplLmlzTnVtYmVyKHQpP3QrInB4IjppfHxudWxsfSxlLm9wdGlvbi5hc0VsZW1lbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdCYmKHQ9dCgpKSx0fHxlfHxudWxsfSxlLmhleFRvUkdCPWZ1bmN0aW9uKHQpe3ZhciBlPS9eIz8oW2EtZlxkXSkoW2EtZlxkXSkoW2EtZlxkXSkkL2k7dD10LnJlcGxhY2UoZSxmdW5jdGlvbih0LGUsaSxvKXtyZXR1cm4gZStlK2kraStvK299KTt2YXIgaT0vXiM/KFthLWZcZF17Mn0pKFthLWZcZF17Mn0pKFthLWZcZF17Mn0pJC9pLmV4ZWModCk7cmV0dXJuIGk/e3I6cGFyc2VJbnQoaVsxXSwxNiksZzpwYXJzZUludChpWzJdLDE2KSxiOnBhcnNlSW50KGlbM10sMTYpfTpudWxsfSxlLm92ZXJyaWRlT3BhY2l0eT1mdW5jdGlvbih0LGkpe2lmKHQuaW5kZXhPZigicmdiYSIpIT0tMSlyZXR1cm4gdDtpZih0LmluZGV4T2YoInJnYiIpIT0tMSl7dmFyIG89dC5zdWJzdHIodC5pbmRleE9mKCIoIikrMSkucmVwbGFjZSgiKSIsIiIpLnNwbGl0KCIsIik7cmV0dXJuInJnYmEoIitvWzBdKyIsIitvWzFdKyIsIitvWzJdKyIsIitpKyIpIn12YXIgbz1lLmhleFRvUkdCKHQpO3JldHVybiBudWxsPT1vP3Q6InJnYmEoIitvLnIrIiwiK28uZysiLCIrby5iKyIsIitpKyIpIn0sZS5SR0JUb0hleD1mdW5jdGlvbih0LGUsaSl7cmV0dXJuIiMiKygoMTw8MjQpKyh0PDwxNikrKGU8PDgpK2kpLnRvU3RyaW5nKDE2KS5zbGljZSgxKX0sZS5wYXJzZUNvbG9yPWZ1bmN0aW9uKHQpe3ZhciBpO2lmKGUuaXNTdHJpbmcodCk9PT0hMCl7aWYoZS5pc1ZhbGlkUkdCKHQpPT09ITApe3ZhciBvPXQuc3Vic3RyKDQpLnN1YnN0cigwLHQubGVuZ3RoLTUpLnNwbGl0KCIsIikubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBwYXJzZUludCh0KX0pO3Q9ZS5SR0JUb0hleChvWzBdLG9bMV0sb1syXSl9aWYoZS5pc1ZhbGlkSGV4KHQpPT09ITApe3ZhciBuPWUuaGV4VG9IU1YodCkscz17aDpuLmgsczouOCpuLnMsdjpNYXRoLm1pbigxLDEuMDIqbi52KX0scj17aDpuLmgsczpNYXRoLm1pbigxLDEuMjUqbi5zKSx2Oi44Km4udn0sYT1lLkhTVlRvSGV4KHIuaCxyLnMsci52KSxoPWUuSFNWVG9IZXgocy5oLHMucyxzLnYpO2k9e2JhY2tncm91bmQ6dCxib3JkZXI6YSxoaWdobGlnaHQ6e2JhY2tncm91bmQ6aCxib3JkZXI6YX0saG92ZXI6e2JhY2tncm91bmQ6aCxib3JkZXI6YX19fWVsc2UgaT17YmFja2dyb3VuZDp0LGJvcmRlcjp0LGhpZ2hsaWdodDp7YmFja2dyb3VuZDp0LGJvcmRlcjp0fSxob3Zlcjp7YmFja2dyb3VuZDp0LGJvcmRlcjp0fX19ZWxzZSBpPXt9LGkuYmFja2dyb3VuZD10LmJhY2tncm91bmR8fHZvaWQgMCxpLmJvcmRlcj10LmJvcmRlcnx8dm9pZCAwLGUuaXNTdHJpbmcodC5oaWdobGlnaHQpP2kuaGlnaGxpZ2h0PXtib3JkZXI6dC5oaWdobGlnaHQsYmFja2dyb3VuZDp0LmhpZ2hsaWdodH06KGkuaGlnaGxpZ2h0PXt9LGkuaGlnaGxpZ2h0LmJhY2tncm91bmQ9dC5oaWdobGlnaHQmJnQuaGlnaGxpZ2h0LmJhY2tncm91bmR8fHZvaWQgMCxpLmhpZ2hsaWdodC5ib3JkZXI9dC5oaWdobGlnaHQmJnQuaGlnaGxpZ2h0LmJvcmRlcnx8dm9pZCAwKSxlLmlzU3RyaW5nKHQuaG92ZXIpP2kuaG92ZXI9e2JvcmRlcjp0LmhvdmVyLGJhY2tncm91bmQ6dC5ob3Zlcn06KGkuaG92ZXI9e30saS5ob3Zlci5iYWNrZ3JvdW5kPXQuaG92ZXImJnQuaG92ZXIuYmFja2dyb3VuZHx8dm9pZCAwLGkuaG92ZXIuYm9yZGVyPXQuaG92ZXImJnQuaG92ZXIuYm9yZGVyfHx2b2lkIDApO3JldHVybiBpfSxlLlJHQlRvSFNWPWZ1bmN0aW9uKHQsZSxpKXt0Lz0yNTUsZS89MjU1LGkvPTI1NTt2YXIgbz1NYXRoLm1pbih0LE1hdGgubWluKGUsaSkpLG49TWF0aC5tYXgodCxNYXRoLm1heChlLGkpKTtpZihvPT1uKXJldHVybntoOjAsczowLHY6b307dmFyIHM9dD09bz9lLWk6aT09bz90LWU6aS10LHI9dD09bz8zOmk9PW8/MTo1LGE9NjAqKHItcy8obi1vKSkvMzYwLGg9KG4tbykvbixkPW47cmV0dXJue2g6YSxzOmgsdjpkfX07dmFyIGE9e3NwbGl0OmZ1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiB0LnNwbGl0KCI7IikuZm9yRWFjaChmdW5jdGlvbih0KXtpZigiIiE9dC50cmltKCkpe3ZhciBpPXQuc3BsaXQoIjoiKSxvPWlbMF0udHJpbSgpLG49aVsxXS50cmltKCk7ZVtvXT1ufX0pLGV9LGpvaW46ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5rZXlzKHQpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZSsiOiAiK3RbZV19KS5qb2luKCI7ICIpfX07ZS5hZGRDc3NUZXh0PWZ1bmN0aW9uKHQsaSl7dmFyIG89YS5zcGxpdCh0LnN0eWxlLmNzc1RleHQpLG49YS5zcGxpdChpKSxzPWUuZXh0ZW5kKG8sbik7dC5zdHlsZS5jc3NUZXh0PWEuam9pbihzKX0sZS5yZW1vdmVDc3NUZXh0PWZ1bmN0aW9uKHQsZSl7dmFyIGk9YS5zcGxpdCh0LnN0eWxlLmNzc1RleHQpLG89YS5zcGxpdChlKTtmb3IodmFyIG4gaW4gbylvLmhhc093blByb3BlcnR5KG4pJiZkZWxldGUgaVtuXTt0LnN0eWxlLmNzc1RleHQ9YS5qb2luKGkpfSxlLkhTVlRvUkdCPWZ1bmN0aW9uKHQsZSxpKXt2YXIgbyxuLHMscj1NYXRoLmZsb29yKDYqdCksYT02KnQtcixoPWkqKDEtZSksZD1pKigxLWEqZSksbD1pKigxLSgxLWEpKmUpO3N3aXRjaChyJTYpe2Nhc2UgMDpvPWksbj1sLHM9aDticmVhaztjYXNlIDE6bz1kLG49aSxzPWg7YnJlYWs7Y2FzZSAyOm89aCxuPWkscz1sO2JyZWFrO2Nhc2UgMzpvPWgsbj1kLHM9aTticmVhaztjYXNlIDQ6bz1sLG49aCxzPWk7YnJlYWs7Y2FzZSA1Om89aSxuPWgscz1kfXJldHVybntyOk1hdGguZmxvb3IoMjU1Km8pLGc6TWF0aC5mbG9vcigyNTUqbiksYjpNYXRoLmZsb29yKDI1NSpzKX19LGUuSFNWVG9IZXg9ZnVuY3Rpb24odCxpLG8pe3ZhciBuPWUuSFNWVG9SR0IodCxpLG8pO3JldHVybiBlLlJHQlRvSGV4KG4ucixuLmcsbi5iKX0sZS5oZXhUb0hTVj1mdW5jdGlvbih0KXt2YXIgaT1lLmhleFRvUkdCKHQpO3JldHVybiBlLlJHQlRvSFNWKGkucixpLmcsaS5iKX0sZS5pc1ZhbGlkSGV4PWZ1bmN0aW9uKHQpe3ZhciBlPS8oXiNbMC05QS1GXXs2fSQpfCheI1swLTlBLUZdezN9JCkvaS50ZXN0KHQpO3JldHVybiBlfSxlLmlzVmFsaWRSR0I9ZnVuY3Rpb24odCl7dD10LnJlcGxhY2UoIiAiLCIiKTt2YXIgZT0vcmdiXCgoXGR7MSwzfSksKFxkezEsM30pLChcZHsxLDN9KVwpL2kudGVzdCh0KTtyZXR1cm4gZX0sZS5pc1ZhbGlkUkdCQT1mdW5jdGlvbih0KXt0PXQucmVwbGFjZSgiICIsIiIpO3ZhciBlPS9yZ2JhXCgoXGR7MSwzfSksKFxkezEsM30pLChcZHsxLDN9KSwoLnsxLDN9KVwpL2kudGVzdCh0KTtyZXR1cm4gZX0sZS5zZWxlY3RpdmVCcmlkZ2VPYmplY3Q9ZnVuY3Rpb24odCxpKXtpZigib2JqZWN0Ij09KCJ1bmRlZmluZWQiPT10eXBlb2YgaT8idW5kZWZpbmVkIjpvKGkpKSl7Zm9yKHZhciBuPU9iamVjdC5jcmVhdGUoaSkscz0wO3M8dC5sZW5ndGg7cysrKWkuaGFzT3duUHJvcGVydHkodFtzXSkmJiJvYmplY3QiPT1vKGlbdFtzXV0pJiYoblt0W3NdXT1lLmJyaWRnZU9iamVjdChpW3Rbc11dKSk7cmV0dXJuIG59cmV0dXJuIG51bGx9LGUuYnJpZGdlT2JqZWN0PWZ1bmN0aW9uKHQpe2lmKCJvYmplY3QiPT0oInVuZGVmaW5lZCI9PXR5cGVvZiB0PyJ1bmRlZmluZWQiOm8odCkpKXt2YXIgaT1PYmplY3QuY3JlYXRlKHQpO2Zvcih2YXIgbiBpbiB0KXQuaGFzT3duUHJvcGVydHkobikmJiJvYmplY3QiPT1vKHRbbl0pJiYoaVtuXT1lLmJyaWRnZU9iamVjdCh0W25dKSk7cmV0dXJuIGl9cmV0dXJuIG51bGx9LGUuaW5zZXJ0U29ydD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgaT0wO2k8dC5sZW5ndGg7aSsrKXtmb3IodmFyIG89dFtpXSxuPWk7bj4wJiZlKG8sdFtuLTFdKTwwO24tLSl0W25dPXRbbi0xXTt0W25dPW99cmV0dXJuIHR9LGUubWVyZ2VPcHRpb25zPWZ1bmN0aW9uKHQsZSxpKXt2YXIgbz0oYXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXSxhcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XT9hcmd1bWVudHNbNF06e30pO2lmKG51bGw9PT1lW2ldKXRbaV09T2JqZWN0LmNyZWF0ZShvW2ldKTtlbHNlIGlmKHZvaWQgMCE9PWVbaV0paWYoImJvb2xlYW4iPT10eXBlb2YgZVtpXSl0W2ldLmVuYWJsZWQ9ZVtpXTtlbHNle3ZvaWQgMD09PWVbaV0uZW5hYmxlZCYmKHRbaV0uZW5hYmxlZD0hMCk7Zm9yKHZhciBuIGluIGVbaV0pZVtpXS5oYXNPd25Qcm9wZXJ0eShuKSYmKHRbaV1bbl09ZVtpXVtuXSl9fSxlLmJpbmFyeVNlYXJjaEN1c3RvbT1mdW5jdGlvbih0LGUsaSxvKXtmb3IodmFyIG49MWU0LHM9MCxyPTAsYT10Lmxlbmd0aC0xO3I8PWEmJnM8bjspe3ZhciBoPU1hdGguZmxvb3IoKHIrYSkvMiksZD10W2hdLGw9dm9pZCAwPT09bz9kW2ldOmRbaV1bb10sYz1lKGwpO2lmKDA9PWMpcmV0dXJuIGg7Yz09LTE/cj1oKzE6YT1oLTEscysrfXJldHVybi0xfSxlLmJpbmFyeVNlYXJjaFZhbHVlPWZ1bmN0aW9uKHQsZSxpLG8sbil7Zm9yKHZhciBzLHIsYSxoLGQ9MWU0LGw9MCxjPTAsdT10Lmxlbmd0aC0xLG49dm9pZCAwIT1uP246ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD09ZT8wOnQ8ZT8tMToxfTtjPD11JiZsPGQ7KXtpZihoPU1hdGguZmxvb3IoLjUqKHUrYykpLHM9dFtNYXRoLm1heCgwLGgtMSldW2ldLHI9dFtoXVtpXSxhPXRbTWF0aC5taW4odC5sZW5ndGgtMSxoKzEpXVtpXSwwPT1uKHIsZSkpcmV0dXJuIGg7aWYobihzLGUpPDAmJm4ocixlKT4wKXJldHVybiJiZWZvcmUiPT1vP01hdGgubWF4KDAsaC0xKTpoO2lmKG4ocixlKTwwJiZuKGEsZSk+MClyZXR1cm4iYmVmb3JlIj09bz9oOk1hdGgubWluKHQubGVuZ3RoLTEsaCsxKTtuKHIsZSk8MD9jPWgrMTp1PWgtMSxsKyt9cmV0dXJuLTF9LGUuZWFzaW5nRnVuY3Rpb25zPXtsaW5lYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHR9LGVhc2VJblF1YWQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQqdH0sZWFzZU91dFF1YWQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQqKDItdCl9LGVhc2VJbk91dFF1YWQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQ8LjU/Mip0KnQ6LTErKDQtMip0KSp0fSxlYXNlSW5DdWJpYzpmdW5jdGlvbih0KXtyZXR1cm4gdCp0KnR9LGVhc2VPdXRDdWJpYzpmdW5jdGlvbih0KXtyZXR1cm4tLXQqdCp0KzF9LGVhc2VJbk91dEN1YmljOmZ1bmN0aW9uKHQpe3JldHVybiB0PC41PzQqdCp0KnQ6KHQtMSkqKDIqdC0yKSooMip0LTIpKzF9LGVhc2VJblF1YXJ0OmZ1bmN0aW9uKHQpe3JldHVybiB0KnQqdCp0fSxlYXNlT3V0UXVhcnQ6ZnVuY3Rpb24odCl7cmV0dXJuIDEtIC0tdCp0KnQqdH0sZWFzZUluT3V0UXVhcnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQ8LjU/OCp0KnQqdCp0OjEtOCotLXQqdCp0KnR9LGVhc2VJblF1aW50OmZ1bmN0aW9uKHQpe3JldHVybiB0KnQqdCp0KnR9LGVhc2VPdXRRdWludDpmdW5jdGlvbih0KXtyZXR1cm4gMSstLXQqdCp0KnQqdH0sZWFzZUluT3V0UXVpbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQ8LjU/MTYqdCp0KnQqdCp0OjErMTYqLS10KnQqdCp0KnR9fSxlLmdldFNjcm9sbEJhcldpZHRoPWZ1bmN0aW9uKCl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicCIpO3Quc3R5bGUud2lkdGg9IjEwMCUiLHQuc3R5bGUuaGVpZ2h0PSIyMDBweCI7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7ZS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGUuc3R5bGUudG9wPSIwcHgiLGUuc3R5bGUubGVmdD0iMHB4IixlLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIsZS5zdHlsZS53aWR0aD0iMjAwcHgiLGUuc3R5bGUuaGVpZ2h0PSIxNTBweCIsZS5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIixlLmFwcGVuZENoaWxkKHQpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZSk7dmFyIGk9dC5vZmZzZXRXaWR0aDtlLnN0eWxlLm92ZXJmbG93PSJzY3JvbGwiO3ZhciBvPXQub2Zmc2V0V2lkdGg7cmV0dXJuIGk9PW8mJihvPWUuY2xpZW50V2lkdGgpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZSksaS1vfX0sZnVuY3Rpb24odCxlLGkpe3QuZXhwb3J0cz0idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93Lm1vbWVudHx8aSgzKX0sZnVuY3Rpb24odCxlLGkpeyhmdW5jdGlvbih0KXshZnVuY3Rpb24oZSxpKXt0LmV4cG9ydHM9aSgpfSh0aGlzLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3JldHVybiBmby5hcHBseShudWxsLGFyZ3VtZW50cyl9ZnVuY3Rpb24gaSh0KXtmbz10fWZ1bmN0aW9uIG8odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBBcnJheXx8IltvYmplY3QgQXJyYXldIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiBuKHQpe3JldHVybiBudWxsIT10JiYiW29iamVjdCBPYmplY3RdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiBzKHQpe3ZhciBlO2ZvcihlIGluIHQpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gcih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIERhdGV8fCJbb2JqZWN0IERhdGVdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiBhKHQsZSl7dmFyIGksbz1bXTtmb3IoaT0wO2k8dC5sZW5ndGg7KytpKW8ucHVzaChlKHRbaV0saSkpO3JldHVybiBvfWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSl9ZnVuY3Rpb24gZCh0LGUpe2Zvcih2YXIgaSBpbiBlKWgoZSxpKSYmKHRbaV09ZVtpXSk7cmV0dXJuIGgoZSwidG9TdHJpbmciKSYmKHQudG9TdHJpbmc9ZS50b1N0cmluZyksaChlLCJ2YWx1ZU9mIikmJih0LnZhbHVlT2Y9ZS52YWx1ZU9mKSx0fWZ1bmN0aW9uIGwodCxlLGksbyl7cmV0dXJuIGdlKHQsZSxpLG8sITApLnV0YygpfWZ1bmN0aW9uIGMoKXtyZXR1cm57ZW1wdHk6ITEsdW51c2VkVG9rZW5zOltdLHVudXNlZElucHV0OltdLG92ZXJmbG93Oi0yLGNoYXJzTGVmdE92ZXI6MCxudWxsSW5wdXQ6ITEsaW52YWxpZE1vbnRoOm51bGwsaW52YWxpZEZvcm1hdDohMSx1c2VySW52YWxpZGF0ZWQ6ITEsaXNvOiExLHBhcnNlZERhdGVQYXJ0czpbXSxtZXJpZGllbTpudWxsfX1mdW5jdGlvbiB1KHQpe3JldHVybiBudWxsPT10Ll9wZiYmKHQuX3BmPWMoKSksdC5fcGZ9ZnVuY3Rpb24gcCh0KXtpZihudWxsPT10Ll9pc1ZhbGlkKXt2YXIgZT11KHQpLGk9bW8uY2FsbChlLnBhcnNlZERhdGVQYXJ0cyxmdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dH0pLG89IWlzTmFOKHQuX2QuZ2V0VGltZSgpKSYmZS5vdmVyZmxvdzwwJiYhZS5lbXB0eSYmIWUuaW52YWxpZE1vbnRoJiYhZS5pbnZhbGlkV2Vla2RheSYmIWUubnVsbElucHV0JiYhZS5pbnZhbGlkRm9ybWF0JiYhZS51c2VySW52YWxpZGF0ZWQmJighZS5tZXJpZGllbXx8ZS5tZXJpZGllbSYmaSk7aWYodC5fc3RyaWN0JiYobz1vJiYwPT09ZS5jaGFyc0xlZnRPdmVyJiYwPT09ZS51bnVzZWRUb2tlbnMubGVuZ3RoJiZ2b2lkIDA9PT1lLmJpZ0hvdXIpLG51bGwhPU9iamVjdC5pc0Zyb3plbiYmT2JqZWN0LmlzRnJvemVuKHQpKXJldHVybiBvO3QuX2lzVmFsaWQ9b31yZXR1cm4gdC5faXNWYWxpZH1mdW5jdGlvbiBmKHQpe3ZhciBlPWwoTmFOKTtyZXR1cm4gbnVsbCE9dD9kKHUoZSksdCk6dShlKS51c2VySW52YWxpZGF0ZWQ9ITAsZX1mdW5jdGlvbiBtKHQpe3JldHVybiB2b2lkIDA9PT10fWZ1bmN0aW9uIHYodCxlKXt2YXIgaSxvLG47aWYobShlLl9pc0FNb21lbnRPYmplY3QpfHwodC5faXNBTW9tZW50T2JqZWN0PWUuX2lzQU1vbWVudE9iamVjdCksbShlLl9pKXx8KHQuX2k9ZS5faSksbShlLl9mKXx8KHQuX2Y9ZS5fZiksbShlLl9sKXx8KHQuX2w9ZS5fbCksbShlLl9zdHJpY3QpfHwodC5fc3RyaWN0PWUuX3N0cmljdCksbShlLl90em0pfHwodC5fdHptPWUuX3R6bSksbShlLl9pc1VUQyl8fCh0Ll9pc1VUQz1lLl9pc1VUQyksbShlLl9vZmZzZXQpfHwodC5fb2Zmc2V0PWUuX29mZnNldCksbShlLl9wZil8fCh0Ll9wZj11KGUpKSxtKGUuX2xvY2FsZSl8fCh0Ll9sb2NhbGU9ZS5fbG9jYWxlKSx2by5sZW5ndGg+MClmb3IoaSBpbiB2bylvPXZvW2ldLG49ZVtvXSxtKG4pfHwodFtvXT1uKTtyZXR1cm4gdH1mdW5jdGlvbiBnKHQpe3YodGhpcyx0KSx0aGlzLl9kPW5ldyBEYXRlKG51bGwhPXQuX2Q/dC5fZC5nZXRUaW1lKCk6TmFOKSxnbz09PSExJiYoZ289ITAsZS51cGRhdGVPZmZzZXQodGhpcyksZ289ITEpfWZ1bmN0aW9uIHkodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBnfHxudWxsIT10JiZudWxsIT10Ll9pc0FNb21lbnRPYmplY3R9ZnVuY3Rpb24gYih0KXtyZXR1cm4gdDwwP01hdGguY2VpbCh0KXx8MDpNYXRoLmZsb29yKHQpfWZ1bmN0aW9uIF8odCl7dmFyIGU9K3QsaT0wO3JldHVybiAwIT09ZSYmaXNGaW5pdGUoZSkmJihpPWIoZSkpLGl9ZnVuY3Rpb24gdyh0LGUsaSl7dmFyIG8sbj1NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCkscz1NYXRoLmFicyh0Lmxlbmd0aC1lLmxlbmd0aCkscj0wO2ZvcihvPTA7bzxuO28rKykoaSYmdFtvXSE9PWVbb118fCFpJiZfKHRbb10pIT09XyhlW29dKSkmJnIrKztyZXR1cm4gcitzfWZ1bmN0aW9uIHgodCl7ZS5zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ3M9PT0hMSYmInVuZGVmaW5lZCIhPXR5cGVvZiBjb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybigiRGVwcmVjYXRpb24gd2FybmluZzogIit0KX1mdW5jdGlvbiBrKHQsaSl7dmFyIG89ITA7cmV0dXJuIGQoZnVuY3Rpb24oKXtpZihudWxsIT1lLmRlcHJlY2F0aW9uSGFuZGxlciYmZS5kZXByZWNhdGlvbkhhbmRsZXIobnVsbCx0KSxvKXtmb3IodmFyIG4scz1bXSxyPTA7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyl7aWYobj0iIiwib2JqZWN0Ij09dHlwZW9mIGFyZ3VtZW50c1tyXSl7bis9IlxuWyIrcisiXSAiO2Zvcih2YXIgYSBpbiBhcmd1bWVudHNbMF0pbis9YSsiOiAiK2FyZ3VtZW50c1swXVthXSsiLCAiO249bi5zbGljZSgwLC0yKX1lbHNlIG49YXJndW1lbnRzW3JdO3MucHVzaChuKX14KHQrIlxuQXJndW1lbnRzOiAiK0FycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHMpLmpvaW4oIiIpKyJcbiIrKG5ldyBFcnJvcikuc3RhY2spLG89ITF9cmV0dXJuIGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxpKX1mdW5jdGlvbiBPKHQsaSl7bnVsbCE9ZS5kZXByZWNhdGlvbkhhbmRsZXImJmUuZGVwcmVjYXRpb25IYW5kbGVyKHQsaSkseW9bdF18fCh4KGkpLHlvW3RdPSEwKX1mdW5jdGlvbiBEKHQpe3JldHVybiB0IGluc3RhbmNlb2YgRnVuY3Rpb258fCJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9ZnVuY3Rpb24gUyh0KXt2YXIgZSxpO2ZvcihpIGluIHQpZT10W2ldLEQoZSk/dGhpc1tpXT1lOnRoaXNbIl8iK2ldPWU7dGhpcy5fY29uZmlnPXQsdGhpcy5fb3JkaW5hbFBhcnNlTGVuaWVudD1uZXcgUmVnRXhwKHRoaXMuX29yZGluYWxQYXJzZS5zb3VyY2UrInwiKy9cZHsxLDJ9Ly5zb3VyY2UpfWZ1bmN0aW9uIEModCxlKXt2YXIgaSxvPWQoe30sdCk7Zm9yKGkgaW4gZSloKGUsaSkmJihuKHRbaV0pJiZuKGVbaV0pPyhvW2ldPXt9LGQob1tpXSx0W2ldKSxkKG9baV0sZVtpXSkpOm51bGwhPWVbaV0/b1tpXT1lW2ldOmRlbGV0ZSBvW2ldKTtmb3IoaSBpbiB0KWgodCxpKSYmIWgoZSxpKSYmbih0W2ldKSYmKG9baV09ZCh7fSxvW2ldKSk7cmV0dXJuIG99ZnVuY3Rpb24gVCh0KXtudWxsIT10JiZ0aGlzLnNldCh0KX1mdW5jdGlvbiBFKHQsZSxpKXt2YXIgbz10aGlzLl9jYWxlbmRhclt0XXx8dGhpcy5fY2FsZW5kYXIuc2FtZUVsc2U7cmV0dXJuIEQobyk/by5jYWxsKGUsaSk6b31mdW5jdGlvbiBNKHQpe3ZhciBlPXRoaXMuX2xvbmdEYXRlRm9ybWF0W3RdLGk9dGhpcy5fbG9uZ0RhdGVGb3JtYXRbdC50b1VwcGVyQ2FzZSgpXTtyZXR1cm4gZXx8IWk/ZToodGhpcy5fbG9uZ0RhdGVGb3JtYXRbdF09aS5yZXBsYWNlKC9NTU1NfE1NfEREfGRkZGQvZyxmdW5jdGlvbih0KXtyZXR1cm4gdC5zbGljZSgxKX0pLHRoaXMuX2xvbmdEYXRlRm9ybWF0W3RdKX1mdW5jdGlvbiBQKCl7cmV0dXJuIHRoaXMuX2ludmFsaWREYXRlfWZ1bmN0aW9uIEkodCl7cmV0dXJuIHRoaXMuX29yZGluYWwucmVwbGFjZSgiJWQiLHQpfWZ1bmN0aW9uIE4odCxlLGksbyl7dmFyIG49dGhpcy5fcmVsYXRpdmVUaW1lW2ldO3JldHVybiBEKG4pP24odCxlLGksbyk6bi5yZXBsYWNlKC8lZC9pLHQpfWZ1bmN0aW9uIFIodCxlKXt2YXIgaT10aGlzLl9yZWxhdGl2ZVRpbWVbdD4wPyJmdXR1cmUiOiJwYXN0Il07cmV0dXJuIEQoaSk/aShlKTppLnJlcGxhY2UoLyVzL2ksZSl9ZnVuY3Rpb24gTCh0LGUpe3ZhciBpPXQudG9Mb3dlckNhc2UoKTtDb1tpXT1Db1tpKyJzIl09Q29bZV09dH1mdW5jdGlvbiB6KHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD9Db1t0XXx8Q29bdC50b0xvd2VyQ2FzZSgpXTp2b2lkIDB9ZnVuY3Rpb24gQSh0KXt2YXIgZSxpLG89e307Zm9yKGkgaW4gdCloKHQsaSkmJihlPXooaSksZSYmKG9bZV09dFtpXSkpO3JldHVybiBvfWZ1bmN0aW9uIEIodCxlKXtUb1t0XT1lfWZ1bmN0aW9uIGoodCl7dmFyIGU9W107Zm9yKHZhciBpIGluIHQpZS5wdXNoKHt1bml0OmkscHJpb3JpdHk6VG9baV19KTtyZXR1cm4gZS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQucHJpb3JpdHktZS5wcmlvcml0eX0pLGV9ZnVuY3Rpb24gRih0LGkpe3JldHVybiBmdW5jdGlvbihvKXtyZXR1cm4gbnVsbCE9bz8oVyh0aGlzLHQsbyksZS51cGRhdGVPZmZzZXQodGhpcyxpKSx0aGlzKTpIKHRoaXMsdCl9fWZ1bmN0aW9uIEgodCxlKXtyZXR1cm4gdC5pc1ZhbGlkKCk/dC5fZFsiZ2V0IisodC5faXNVVEM/IlVUQyI6IiIpK2VdKCk6TmFOfWZ1bmN0aW9uIFcodCxlLGkpe3QuaXNWYWxpZCgpJiZ0Ll9kWyJzZXQiKyh0Ll9pc1VUQz8iVVRDIjoiIikrZV0oaSl9ZnVuY3Rpb24gWSh0KXtyZXR1cm4gdD16KHQpLEQodGhpc1t0XSk/dGhpc1t0XSgpOnRoaXN9ZnVuY3Rpb24gRyh0LGUpe2lmKCJvYmplY3QiPT10eXBlb2YgdCl7dD1BKHQpO2Zvcih2YXIgaT1qKHQpLG89MDtvPGkubGVuZ3RoO28rKyl0aGlzW2lbb10udW5pdF0odFtpW29dLnVuaXRdKX1lbHNlIGlmKHQ9eih0KSxEKHRoaXNbdF0pKXJldHVybiB0aGlzW3RdKGUpO3JldHVybiB0aGlzfWZ1bmN0aW9uIFYodCxlLGkpe3ZhciBvPSIiK01hdGguYWJzKHQpLG49ZS1vLmxlbmd0aCxzPXQ+PTA7cmV0dXJuKHM/aT8iKyI6IiI6Ii0iKStNYXRoLnBvdygxMCxNYXRoLm1heCgwLG4pKS50b1N0cmluZygpLnN1YnN0cigxKStvfWZ1bmN0aW9uIFUodCxlLGksbyl7dmFyIG49bzsic3RyaW5nIj09dHlwZW9mIG8mJihuPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbb10oKX0pLHQmJihJb1t0XT1uKSxlJiYoSW9bZVswXV09ZnVuY3Rpb24oKXtyZXR1cm4gVihuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxlWzFdLGVbMl0pfSksaSYmKElvW2ldPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm9yZGluYWwobi5hcHBseSh0aGlzLGFyZ3VtZW50cyksdCl9KX1mdW5jdGlvbiBxKHQpe3JldHVybiB0Lm1hdGNoKC9cW1tcc1xTXS8pP3QucmVwbGFjZSgvXlxbfFxdJC9nLCIiKTp0LnJlcGxhY2UoL1xcL2csIiIpfWZ1bmN0aW9uIFgodCl7dmFyIGUsaSxvPXQubWF0Y2goRW8pO2ZvcihlPTAsaT1vLmxlbmd0aDtlPGk7ZSsrKUlvW29bZV1dP29bZV09SW9bb1tlXV06b1tlXT1xKG9bZV0pO3JldHVybiBmdW5jdGlvbihlKXt2YXIgbixzPSIiO2ZvcihuPTA7bjxpO24rKylzKz1vW25daW5zdGFuY2VvZiBGdW5jdGlvbj9vW25dLmNhbGwoZSx0KTpvW25dO3JldHVybiBzfX1mdW5jdGlvbiBaKHQsZSl7cmV0dXJuIHQuaXNWYWxpZCgpPyhlPUsoZSx0LmxvY2FsZURhdGEoKSksUG9bZV09UG9bZV18fFgoZSksUG9bZV0odCkpOnQubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCl9ZnVuY3Rpb24gSyh0LGUpe2Z1bmN0aW9uIGkodCl7cmV0dXJuIGUubG9uZ0RhdGVGb3JtYXQodCl8fHR9dmFyIG89NTtmb3IoTW8ubGFzdEluZGV4PTA7bz49MCYmTW8udGVzdCh0KTspdD10LnJlcGxhY2UoTW8saSksTW8ubGFzdEluZGV4PTAsby09MTtyZXR1cm4gdH1mdW5jdGlvbiBKKHQsZSxpKXtLb1t0XT1EKGUpP2U6ZnVuY3Rpb24odCxvKXtyZXR1cm4gdCYmaT9pOmV9fWZ1bmN0aW9uIFEodCxlKXtyZXR1cm4gaChLbyx0KT9Lb1t0XShlLl9zdHJpY3QsZS5fbG9jYWxlKTpuZXcgUmVnRXhwKCQodCkpfWZ1bmN0aW9uICQodCl7cmV0dXJuIHR0KHQucmVwbGFjZSgiXFwiLCIiKS5yZXBsYWNlKC9cXChcWyl8XFwoXF0pfFxbKFteXF1cW10qKVxdfFxcKC4pL2csZnVuY3Rpb24odCxlLGksbyxuKXtyZXR1cm4gZXx8aXx8b3x8bn0pKX1mdW5jdGlvbiB0dCh0KXtyZXR1cm4gdC5yZXBsYWNlKC9bLVwvXFxeJCorPy4oKXxbXF17fV0vZywiXFwkJiIpfWZ1bmN0aW9uIGV0KHQsZSl7dmFyIGksbz1lO2Zvcigic3RyaW5nIj09dHlwZW9mIHQmJih0PVt0XSksIm51bWJlciI9PXR5cGVvZiBlJiYobz1mdW5jdGlvbih0LGkpe2lbZV09Xyh0KX0pLGk9MDtpPHQubGVuZ3RoO2krKylKb1t0W2ldXT1vfWZ1bmN0aW9uIGl0KHQsZSl7ZXQodCxmdW5jdGlvbih0LGksbyxuKXtvLl93PW8uX3d8fHt9LGUodCxvLl93LG8sbil9KX1mdW5jdGlvbiBvdCh0LGUsaSl7bnVsbCE9ZSYmaChKbyx0KSYmSm9bdF0oZSxpLl9hLGksdCl9ZnVuY3Rpb24gbnQodCxlKXtyZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEModCxlKzEsMCkpLmdldFVUQ0RhdGUoKX1mdW5jdGlvbiBzdCh0LGUpe3JldHVybiB0P28odGhpcy5fbW9udGhzKT90aGlzLl9tb250aHNbdC5tb250aCgpXTp0aGlzLl9tb250aHNbKHRoaXMuX21vbnRocy5pc0Zvcm1hdHx8aG4pLnRlc3QoZSk/ImZvcm1hdCI6InN0YW5kYWxvbmUiXVt0Lm1vbnRoKCldOnRoaXMuX21vbnRoc31mdW5jdGlvbiBydCh0LGUpe3JldHVybiB0P28odGhpcy5fbW9udGhzU2hvcnQpP3RoaXMuX21vbnRoc1Nob3J0W3QubW9udGgoKV06dGhpcy5fbW9udGhzU2hvcnRbaG4udGVzdChlKT8iZm9ybWF0Ijoic3RhbmRhbG9uZSJdW3QubW9udGgoKV06dGhpcy5fbW9udGhzU2hvcnR9ZnVuY3Rpb24gYXQodCxlLGkpe3ZhciBvLG4scyxyPXQudG9Mb2NhbGVMb3dlckNhc2UoKTtpZighdGhpcy5fbW9udGhzUGFyc2UpZm9yKHRoaXMuX21vbnRoc1BhcnNlPVtdLHRoaXMuX2xvbmdNb250aHNQYXJzZT1bXSx0aGlzLl9zaG9ydE1vbnRoc1BhcnNlPVtdLG89MDtvPDEyOysrbylzPWwoWzJlMyxvXSksdGhpcy5fc2hvcnRNb250aHNQYXJzZVtvXT10aGlzLm1vbnRoc1Nob3J0KHMsIiIpLnRvTG9jYWxlTG93ZXJDYXNlKCksdGhpcy5fbG9uZ01vbnRoc1BhcnNlW29dPXRoaXMubW9udGhzKHMsIiIpLnRvTG9jYWxlTG93ZXJDYXNlKCk7cmV0dXJuIGk/Ik1NTSI9PT1lPyhuPV9vLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSxyKSxuIT09LTE/bjpudWxsKToobj1fby5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSxyKSxuIT09LTE/bjpudWxsKToiTU1NIj09PWU/KG49X28uY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLHIpLG4hPT0tMT9uOihuPV9vLmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLHIpLG4hPT0tMT9uOm51bGwpKToobj1fby5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSxyKSxuIT09LTE/bjoobj1fby5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsciksbiE9PS0xP246bnVsbCkpfWZ1bmN0aW9uIGh0KHQsZSxpKXt2YXIgbyxuLHM7aWYodGhpcy5fbW9udGhzUGFyc2VFeGFjdClyZXR1cm4gYXQuY2FsbCh0aGlzLHQsZSxpKTtmb3IodGhpcy5fbW9udGhzUGFyc2V8fCh0aGlzLl9tb250aHNQYXJzZT1bXSx0aGlzLl9sb25nTW9udGhzUGFyc2U9W10sdGhpcy5fc2hvcnRNb250aHNQYXJzZT1bXSksbz0wO288MTI7bysrKXtpZihuPWwoWzJlMyxvXSksaSYmIXRoaXMuX2xvbmdNb250aHNQYXJzZVtvXSYmKHRoaXMuX2xvbmdNb250aHNQYXJzZVtvXT1uZXcgUmVnRXhwKCJeIit0aGlzLm1vbnRocyhuLCIiKS5yZXBsYWNlKCIuIiwiIikrIiQiLCJpIiksdGhpcy5fc2hvcnRNb250aHNQYXJzZVtvXT1uZXcgUmVnRXhwKCJeIit0aGlzLm1vbnRoc1Nob3J0KG4sIiIpLnJlcGxhY2UoIi4iLCIiKSsiJCIsImkiKSksaXx8dGhpcy5fbW9udGhzUGFyc2Vbb118fChzPSJeIit0aGlzLm1vbnRocyhuLCIiKSsifF4iK3RoaXMubW9udGhzU2hvcnQobiwiIiksdGhpcy5fbW9udGhzUGFyc2Vbb109bmV3IFJlZ0V4cChzLnJlcGxhY2UoIi4iLCIiKSwiaSIpKSxpJiYiTU1NTSI9PT1lJiZ0aGlzLl9sb25nTW9udGhzUGFyc2Vbb10udGVzdCh0KSlyZXR1cm4gbztpZihpJiYiTU1NIj09PWUmJnRoaXMuX3Nob3J0TW9udGhzUGFyc2Vbb10udGVzdCh0KSlyZXR1cm4gbztpZighaSYmdGhpcy5fbW9udGhzUGFyc2Vbb10udGVzdCh0KSlyZXR1cm4gb319ZnVuY3Rpb24gZHQodCxlKXt2YXIgaTtpZighdC5pc1ZhbGlkKCkpcmV0dXJuIHQ7aWYoInN0cmluZyI9PXR5cGVvZiBlKWlmKC9eXGQrJC8udGVzdChlKSllPV8oZSk7ZWxzZSBpZihlPXQubG9jYWxlRGF0YSgpLm1vbnRoc1BhcnNlKGUpLCJudW1iZXIiIT10eXBlb2YgZSlyZXR1cm4gdDtyZXR1cm4gaT1NYXRoLm1pbih0LmRhdGUoKSxudCh0LnllYXIoKSxlKSksdC5fZFsic2V0IisodC5faXNVVEM/IlVUQyI6IiIpKyJNb250aCJdKGUsaSksdH1mdW5jdGlvbiBsdCh0KXtyZXR1cm4gbnVsbCE9dD8oZHQodGhpcyx0KSxlLnVwZGF0ZU9mZnNldCh0aGlzLCEwKSx0aGlzKTpIKHRoaXMsIk1vbnRoIil9ZnVuY3Rpb24gY3QoKXtyZXR1cm4gbnQodGhpcy55ZWFyKCksdGhpcy5tb250aCgpKX1mdW5jdGlvbiB1dCh0KXtyZXR1cm4gdGhpcy5fbW9udGhzUGFyc2VFeGFjdD8oaCh0aGlzLCJfbW9udGhzUmVnZXgiKXx8ZnQuY2FsbCh0aGlzKSx0P3RoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXg6dGhpcy5fbW9udGhzU2hvcnRSZWdleCk6KGgodGhpcywiX21vbnRoc1Nob3J0UmVnZXgiKXx8KHRoaXMuX21vbnRoc1Nob3J0UmVnZXg9Y24pLHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXgmJnQ/dGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleDp0aGlzLl9tb250aHNTaG9ydFJlZ2V4KX1mdW5jdGlvbiBwdCh0KXtyZXR1cm4gdGhpcy5fbW9udGhzUGFyc2VFeGFjdD8oaCh0aGlzLCJfbW9udGhzUmVnZXgiKXx8ZnQuY2FsbCh0aGlzKSx0P3RoaXMuX21vbnRoc1N0cmljdFJlZ2V4OnRoaXMuX21vbnRoc1JlZ2V4KTooaCh0aGlzLCJfbW9udGhzUmVnZXgiKXx8KHRoaXMuX21vbnRoc1JlZ2V4PXVuKSx0aGlzLl9tb250aHNTdHJpY3RSZWdleCYmdD90aGlzLl9tb250aHNTdHJpY3RSZWdleDp0aGlzLl9tb250aHNSZWdleCl9ZnVuY3Rpb24gZnQoKXtmdW5jdGlvbiB0KHQsZSl7cmV0dXJuIGUubGVuZ3RoLXQubGVuZ3RofXZhciBlLGksbz1bXSxuPVtdLHM9W107Zm9yKGU9MDtlPDEyO2UrKylpPWwoWzJlMyxlXSksby5wdXNoKHRoaXMubW9udGhzU2hvcnQoaSwiIikpLG4ucHVzaCh0aGlzLm1vbnRocyhpLCIiKSkscy5wdXNoKHRoaXMubW9udGhzKGksIiIpKSxzLnB1c2godGhpcy5tb250aHNTaG9ydChpLCIiKSk7Zm9yKG8uc29ydCh0KSxuLnNvcnQodCkscy5zb3J0KHQpLGU9MDtlPDEyO2UrKylvW2VdPXR0KG9bZV0pLG5bZV09dHQobltlXSk7Zm9yKGU9MDtlPDI0O2UrKylzW2VdPXR0KHNbZV0pO3RoaXMuX21vbnRoc1JlZ2V4PW5ldyBSZWdFeHAoIl4oIitzLmpvaW4oInwiKSsiKSIsImkiKSx0aGlzLl9tb250aHNTaG9ydFJlZ2V4PXRoaXMuX21vbnRoc1JlZ2V4LHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4PW5ldyBSZWdFeHAoIl4oIituLmpvaW4oInwiKSsiKSIsImkiKSx0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4PW5ldyBSZWdFeHAoIl4oIitvLmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiBtdCh0KXtyZXR1cm4gdnQodCk/MzY2OjM2NX1mdW5jdGlvbiB2dCh0KXtyZXR1cm4gdCU0PT09MCYmdCUxMDAhPT0wfHx0JTQwMD09PTB9ZnVuY3Rpb24gZ3QoKXtyZXR1cm4gdnQodGhpcy55ZWFyKCkpfWZ1bmN0aW9uIHl0KHQsZSxpLG8sbixzLHIpe3ZhciBhPW5ldyBEYXRlKHQsZSxpLG8sbixzLHIpO3JldHVybiB0PDEwMCYmdD49MCYmaXNGaW5pdGUoYS5nZXRGdWxsWWVhcigpKSYmYS5zZXRGdWxsWWVhcih0KSxhfWZ1bmN0aW9uIGJ0KHQpe3ZhciBlPW5ldyBEYXRlKERhdGUuVVRDLmFwcGx5KG51bGwsYXJndW1lbnRzKSk7cmV0dXJuIHQ8MTAwJiZ0Pj0wJiZpc0Zpbml0ZShlLmdldFVUQ0Z1bGxZZWFyKCkpJiZlLnNldFVUQ0Z1bGxZZWFyKHQpLGV9ZnVuY3Rpb24gX3QodCxlLGkpe3ZhciBvPTcrZS1pLG49KDcrYnQodCwwLG8pLmdldFVUQ0RheSgpLWUpJTc7cmV0dXJuLW4rby0xfWZ1bmN0aW9uIHd0KHQsZSxpLG8sbil7dmFyIHMscixhPSg3K2ktbyklNyxoPV90KHQsbyxuKSxkPTErNyooZS0xKSthK2g7cmV0dXJuIGQ8PTA/KHM9dC0xLHI9bXQocykrZCk6ZD5tdCh0KT8ocz10KzEscj1kLW10KHQpKToocz10LHI9ZCkse3llYXI6cyxkYXlPZlllYXI6cn19ZnVuY3Rpb24geHQodCxlLGkpe3ZhciBvLG4scz1fdCh0LnllYXIoKSxlLGkpLHI9TWF0aC5mbG9vcigodC5kYXlPZlllYXIoKS1zLTEpLzcpKzE7cmV0dXJuIHI8MT8obj10LnllYXIoKS0xLG89citrdChuLGUsaSkpOnI+a3QodC55ZWFyKCksZSxpKT8obz1yLWt0KHQueWVhcigpLGUsaSksbj10LnllYXIoKSsxKToobj10LnllYXIoKSxvPXIpLHt3ZWVrOm8seWVhcjpufX1mdW5jdGlvbiBrdCh0LGUsaSl7dmFyIG89X3QodCxlLGkpLG49X3QodCsxLGUsaSk7cmV0dXJuKG10KHQpLW8rbikvN31mdW5jdGlvbiBPdCh0KXtyZXR1cm4geHQodCx0aGlzLl93ZWVrLmRvdyx0aGlzLl93ZWVrLmRveSkud2Vla31mdW5jdGlvbiBEdCgpe3JldHVybiB0aGlzLl93ZWVrLmRvd31mdW5jdGlvbiBTdCgpe3JldHVybiB0aGlzLl93ZWVrLmRveX1mdW5jdGlvbiBDdCh0KXt2YXIgZT10aGlzLmxvY2FsZURhdGEoKS53ZWVrKHRoaXMpO3JldHVybiBudWxsPT10P2U6dGhpcy5hZGQoNyoodC1lKSwiZCIpfWZ1bmN0aW9uIFR0KHQpe3ZhciBlPXh0KHRoaXMsMSw0KS53ZWVrO3JldHVybiBudWxsPT10P2U6dGhpcy5hZGQoNyoodC1lKSwiZCIpfWZ1bmN0aW9uIEV0KHQsZSl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiB0P3Q6aXNOYU4odCk/KHQ9ZS53ZWVrZGF5c1BhcnNlKHQpLCJudW1iZXIiPT10eXBlb2YgdD90Om51bGwpOnBhcnNlSW50KHQsMTApfWZ1bmN0aW9uIE10KHQsZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P2Uud2Vla2RheXNQYXJzZSh0KSU3fHw3OmlzTmFOKHQpP251bGw6dH1mdW5jdGlvbiBQdCh0LGUpe3JldHVybiB0P28odGhpcy5fd2Vla2RheXMpP3RoaXMuX3dlZWtkYXlzW3QuZGF5KCldOnRoaXMuX3dlZWtkYXlzW3RoaXMuX3dlZWtkYXlzLmlzRm9ybWF0LnRlc3QoZSk/ImZvcm1hdCI6InN0YW5kYWxvbmUiXVt0LmRheSgpXTp0aGlzLl93ZWVrZGF5c31mdW5jdGlvbiBJdCh0KXtyZXR1cm4gdD90aGlzLl93ZWVrZGF5c1Nob3J0W3QuZGF5KCldOnRoaXMuX3dlZWtkYXlzU2hvcnR9ZnVuY3Rpb24gTnQodCl7cmV0dXJuIHQ/dGhpcy5fd2Vla2RheXNNaW5bdC5kYXkoKV06dGhpcy5fd2Vla2RheXNNaW59ZnVuY3Rpb24gUnQodCxlLGkpe3ZhciBvLG4scyxyPXQudG9Mb2NhbGVMb3dlckNhc2UoKTtpZighdGhpcy5fd2Vla2RheXNQYXJzZSlmb3IodGhpcy5fd2Vla2RheXNQYXJzZT1bXSx0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2U9W10sdGhpcy5fbWluV2Vla2RheXNQYXJzZT1bXSxvPTA7bzw3OysrbylzPWwoWzJlMywxXSkuZGF5KG8pLHRoaXMuX21pbldlZWtkYXlzUGFyc2Vbb109dGhpcy53ZWVrZGF5c01pbihzLCIiKS50b0xvY2FsZUxvd2VyQ2FzZSgpLHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtvXT10aGlzLndlZWtkYXlzU2hvcnQocywiIikudG9Mb2NhbGVMb3dlckNhc2UoKSx0aGlzLl93ZWVrZGF5c1BhcnNlW29dPXRoaXMud2Vla2RheXMocywiIikudG9Mb2NhbGVMb3dlckNhc2UoKTtyZXR1cm4gaT8iZGRkZCI9PT1lPyhuPV9vLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSxyKSxuIT09LTE/bjpudWxsKToiZGRkIj09PWU/KG49X28uY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsciksbiE9PS0xP246bnVsbCk6KG49X28uY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLHIpLG4hPT0tMT9uOm51bGwpOiJkZGRkIj09PWU/KG49X28uY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLHIpLG4hPT0tMT9uOihuPV9vLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLHIpLG4hPT0tMT9uOihuPV9vLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSxyKSxuIT09LTE/bjpudWxsKSkpOiJkZGQiPT09ZT8obj1fby5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSxyKSxuIT09LTE/bjoobj1fby5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsciksbiE9PS0xP246KG49X28uY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLHIpLG4hPT0tMT9uOm51bGwpKSk6KG49X28uY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLHIpLG4hPT0tMT9uOihuPV9vLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSxyKSxuIT09LTE/bjoobj1fby5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSxyKSxuIT09LTE/bjpudWxsKSkpfWZ1bmN0aW9uIEx0KHQsZSxpKXt2YXIgbyxuLHM7aWYodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KXJldHVybiBSdC5jYWxsKHRoaXMsdCxlLGkpO2Zvcih0aGlzLl93ZWVrZGF5c1BhcnNlfHwodGhpcy5fd2Vla2RheXNQYXJzZT1bXSx0aGlzLl9taW5XZWVrZGF5c1BhcnNlPVtdLHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZT1bXSx0aGlzLl9mdWxsV2Vla2RheXNQYXJzZT1bXSksbz0wO288NztvKyspe2lmKG49bChbMmUzLDFdKS5kYXkobyksaSYmIXRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW29dJiYodGhpcy5fZnVsbFdlZWtkYXlzUGFyc2Vbb109bmV3IFJlZ0V4cCgiXiIrdGhpcy53ZWVrZGF5cyhuLCIiKS5yZXBsYWNlKCIuIiwiLj8iKSsiJCIsImkiKSx0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2Vbb109bmV3IFJlZ0V4cCgiXiIrdGhpcy53ZWVrZGF5c1Nob3J0KG4sIiIpLnJlcGxhY2UoIi4iLCIuPyIpKyIkIiwiaSIpLHRoaXMuX21pbldlZWtkYXlzUGFyc2Vbb109bmV3IFJlZ0V4cCgiXiIrdGhpcy53ZWVrZGF5c01pbihuLCIiKS5yZXBsYWNlKCIuIiwiLj8iKSsiJCIsImkiKSksdGhpcy5fd2Vla2RheXNQYXJzZVtvXXx8KHM9Il4iK3RoaXMud2Vla2RheXMobiwiIikrInxeIit0aGlzLndlZWtkYXlzU2hvcnQobiwiIikrInxeIit0aGlzLndlZWtkYXlzTWluKG4sIiIpLHRoaXMuX3dlZWtkYXlzUGFyc2Vbb109bmV3IFJlZ0V4cChzLnJlcGxhY2UoIi4iLCIiKSwiaSIpKSxpJiYiZGRkZCI9PT1lJiZ0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtvXS50ZXN0KHQpKXJldHVybiBvO2lmKGkmJiJkZGQiPT09ZSYmdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW29dLnRlc3QodCkpcmV0dXJuIG87aWYoaSYmImRkIj09PWUmJnRoaXMuX21pbldlZWtkYXlzUGFyc2Vbb10udGVzdCh0KSlyZXR1cm4gbztpZighaSYmdGhpcy5fd2Vla2RheXNQYXJzZVtvXS50ZXN0KHQpKXJldHVybiBvfX1mdW5jdGlvbiB6dCh0KXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIG51bGwhPXQ/dGhpczpOYU47dmFyIGU9dGhpcy5faXNVVEM/dGhpcy5fZC5nZXRVVENEYXkoKTp0aGlzLl9kLmdldERheSgpO3JldHVybiBudWxsIT10Pyh0PUV0KHQsdGhpcy5sb2NhbGVEYXRhKCkpLHRoaXMuYWRkKHQtZSwiZCIpKTplfWZ1bmN0aW9uIEF0KHQpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbnVsbCE9dD90aGlzOk5hTjt2YXIgZT0odGhpcy5kYXkoKSs3LXRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdyklNztyZXR1cm4gbnVsbD09dD9lOnRoaXMuYWRkKHQtZSwiZCIpfWZ1bmN0aW9uIEJ0KHQpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbnVsbCE9dD90aGlzOk5hTjtpZihudWxsIT10KXt2YXIgZT1NdCh0LHRoaXMubG9jYWxlRGF0YSgpKTtyZXR1cm4gdGhpcy5kYXkodGhpcy5kYXkoKSU3P2U6ZS03KX1yZXR1cm4gdGhpcy5kYXkoKXx8N31mdW5jdGlvbiBqdCh0KXtyZXR1cm4gdGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0PyhoKHRoaXMsIl93ZWVrZGF5c1JlZ2V4Iil8fFd0LmNhbGwodGhpcyksdD90aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4OnRoaXMuX3dlZWtkYXlzUmVnZXgpOihoKHRoaXMsIl93ZWVrZGF5c1JlZ2V4Iil8fCh0aGlzLl93ZWVrZGF5c1JlZ2V4PXluKSx0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4JiZ0P3RoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNSZWdleCl9ZnVuY3Rpb24gRnQodCl7cmV0dXJuIHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdD8oaCh0aGlzLCJfd2Vla2RheXNSZWdleCIpfHxXdC5jYWxsKHRoaXMpLHQ/dGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4OnRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleCk6KGgodGhpcywiX3dlZWtkYXlzU2hvcnRSZWdleCIpfHwodGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4PWJuKSx0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXgmJnQ/dGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4OnRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleCl9ZnVuY3Rpb24gSHQodCl7cmV0dXJuIHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdD8oaCh0aGlzLCJfd2Vla2RheXNSZWdleCIpfHxXdC5jYWxsKHRoaXMpLHQ/dGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleDp0aGlzLl93ZWVrZGF5c01pblJlZ2V4KTooaCh0aGlzLCJfd2Vla2RheXNNaW5SZWdleCIpfHwodGhpcy5fd2Vla2RheXNNaW5SZWdleD1fbiksdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleCYmdD90aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4OnRoaXMuX3dlZWtkYXlzTWluUmVnZXgpfWZ1bmN0aW9uIFd0KCl7ZnVuY3Rpb24gdCh0LGUpe3JldHVybiBlLmxlbmd0aC10Lmxlbmd0aH12YXIgZSxpLG8sbixzLHI9W10sYT1bXSxoPVtdLGQ9W107Zm9yKGU9MDtlPDc7ZSsrKWk9bChbMmUzLDFdKS5kYXkoZSksbz10aGlzLndlZWtkYXlzTWluKGksIiIpLG49dGhpcy53ZWVrZGF5c1Nob3J0KGksIiIpLHM9dGhpcy53ZWVrZGF5cyhpLCIiKSxyLnB1c2gobyksYS5wdXNoKG4pLGgucHVzaChzKSxkLnB1c2gobyksZC5wdXNoKG4pLGQucHVzaChzKTtmb3Ioci5zb3J0KHQpLGEuc29ydCh0KSxoLnNvcnQodCksZC5zb3J0KHQpLGU9MDtlPDc7ZSsrKWFbZV09dHQoYVtlXSksaFtlXT10dChoW2VdKSxkW2VdPXR0KGRbZV0pO3RoaXMuX3dlZWtkYXlzUmVnZXg9bmV3IFJlZ0V4cCgiXigiK2Quam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleD10aGlzLl93ZWVrZGF5c1JlZ2V4LHRoaXMuX3dlZWtkYXlzTWluUmVnZXg9dGhpcy5fd2Vla2RheXNSZWdleCx0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4PW5ldyBSZWdFeHAoIl4oIitoLmpvaW4oInwiKSsiKSIsImkiKSx0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXg9bmV3IFJlZ0V4cCgiXigiK2Euam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXg9bmV3IFJlZ0V4cCgiXigiK3Iuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIFl0KCl7cmV0dXJuIHRoaXMuaG91cnMoKSUxMnx8MTJ9ZnVuY3Rpb24gR3QoKXtyZXR1cm4gdGhpcy5ob3VycygpfHwyNH1mdW5jdGlvbiBWdCh0LGUpe1UodCwwLDAsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubWVyaWRpZW0odGhpcy5ob3VycygpLHRoaXMubWludXRlcygpLGUpfSl9ZnVuY3Rpb24gVXQodCxlKXtyZXR1cm4gZS5fbWVyaWRpZW1QYXJzZX1mdW5jdGlvbiBxdCh0KXtyZXR1cm4icCI9PT0odCsiIikudG9Mb3dlckNhc2UoKS5jaGFyQXQoMCl9ZnVuY3Rpb24gWHQodCxlLGkpe3JldHVybiB0PjExP2k/InBtIjoiUE0iOmk/ImFtIjoiQU0ifWZ1bmN0aW9uIFp0KHQpe3JldHVybiB0P3QudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCJfIiwiLSIpOnR9ZnVuY3Rpb24gS3QodCl7Zm9yKHZhciBlLGksbyxuLHM9MDtzPHQubGVuZ3RoOyl7Zm9yKG49WnQodFtzXSkuc3BsaXQoIi0iKSxlPW4ubGVuZ3RoLGk9WnQodFtzKzFdKSxpPWk/aS5zcGxpdCgiLSIpOm51bGw7ZT4wOyl7aWYobz1KdChuLnNsaWNlKDAsZSkuam9pbigiLSIpKSlyZXR1cm4gbztpZihpJiZpLmxlbmd0aD49ZSYmdyhuLGksITApPj1lLTEpYnJlYWs7ZS0tfXMrK31yZXR1cm4gbnVsbH1mdW5jdGlvbiBKdChlKXt2YXIgaT1udWxsO2lmKCFEbltlXSYmInVuZGVmaW5lZCIhPXR5cGVvZiB0JiZ0JiZ0LmV4cG9ydHMpdHJ5e2k9d24uX2FiYnIsIWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEVycm9yKCdDYW5ub3QgZmluZCBtb2R1bGUgIi4vbG9jYWxlIicpO3Rocm93IHQuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsdH0oKSxRdChpKX1jYXRjaCh0KXt9cmV0dXJuIERuW2VdfWZ1bmN0aW9uIFF0KHQsZSl7dmFyIGk7cmV0dXJuIHQmJihpPW0oZSk/ZWUodCk6JHQodCxlKSxpJiYod249aSkpLHduLl9hYmJyfWZ1bmN0aW9uICR0KHQsZSl7aWYobnVsbCE9PWUpe3ZhciBpPU9uO3JldHVybiBlLmFiYnI9dCxudWxsIT1Eblt0XT8oTygiZGVmaW5lTG9jYWxlT3ZlcnJpZGUiLCJ1c2UgbW9tZW50LnVwZGF0ZUxvY2FsZShsb2NhbGVOYW1lLCBjb25maWcpIHRvIGNoYW5nZSBhbiBleGlzdGluZyBsb2NhbGUuIG1vbWVudC5kZWZpbmVMb2NhbGUobG9jYWxlTmFtZSwgY29uZmlnKSBzaG91bGQgb25seSBiZSB1c2VkIGZvciBjcmVhdGluZyBhIG5ldyBsb2NhbGUgU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvZGVmaW5lLWxvY2FsZS8gZm9yIG1vcmUgaW5mby4iKSxpPURuW3RdLl9jb25maWcpOm51bGwhPWUucGFyZW50TG9jYWxlJiYobnVsbCE9RG5bZS5wYXJlbnRMb2NhbGVdP2k9RG5bZS5wYXJlbnRMb2NhbGVdLl9jb25maWc6TygicGFyZW50TG9jYWxlVW5kZWZpbmVkIiwic3BlY2lmaWVkIHBhcmVudExvY2FsZSBpcyBub3QgZGVmaW5lZCB5ZXQuIFNlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL3BhcmVudC1sb2NhbGUvIikpLERuW3RdPW5ldyBUKEMoaSxlKSksUXQodCksRG5bdF19cmV0dXJuIGRlbGV0ZSBEblt0XSxudWxsfWZ1bmN0aW9uIHRlKHQsZSl7aWYobnVsbCE9ZSl7dmFyIGksbz1PbjtudWxsIT1Eblt0XSYmKG89RG5bdF0uX2NvbmZpZyksZT1DKG8sZSksaT1uZXcgVChlKSxpLnBhcmVudExvY2FsZT1Eblt0XSxEblt0XT1pLFF0KHQpfWVsc2UgbnVsbCE9RG5bdF0mJihudWxsIT1Eblt0XS5wYXJlbnRMb2NhbGU/RG5bdF09RG5bdF0ucGFyZW50TG9jYWxlOm51bGwhPURuW3RdJiZkZWxldGUgRG5bdF0pO3JldHVybiBEblt0XX1mdW5jdGlvbiBlZSh0KXt2YXIgZTtpZih0JiZ0Ll9sb2NhbGUmJnQuX2xvY2FsZS5fYWJiciYmKHQ9dC5fbG9jYWxlLl9hYmJyKSwhdClyZXR1cm4gd247aWYoIW8odCkpe2lmKGU9SnQodCkpcmV0dXJuIGU7dD1bdF19cmV0dXJuIEt0KHQpfWZ1bmN0aW9uIGllKCl7cmV0dXJuIGJvKERuKX1mdW5jdGlvbiBvZSh0KXt2YXIgZSxpPXQuX2E7cmV0dXJuIGkmJnUodCkub3ZlcmZsb3c9PT0tMiYmKGU9aVskb108MHx8aVskb10+MTE/JG86aVt0bl08MXx8aVt0bl0+bnQoaVtRb10saVskb10pP3RuOmlbZW5dPDB8fGlbZW5dPjI0fHwyND09PWlbZW5dJiYoMCE9PWlbb25dfHwwIT09aVtubl18fDAhPT1pW3NuXSk/ZW46aVtvbl08MHx8aVtvbl0+NTk/b246aVtubl08MHx8aVtubl0+NTk/bm46aVtzbl08MHx8aVtzbl0+OTk5P3NuOi0xLHUodCkuX292ZXJmbG93RGF5T2ZZZWFyJiYoZTxRb3x8ZT50bikmJihlPXRuKSx1KHQpLl9vdmVyZmxvd1dlZWtzJiZlPT09LTEmJihlPXJuKSx1KHQpLl9vdmVyZmxvd1dlZWtkYXkmJmU9PT0tMSYmKGU9YW4pLHUodCkub3ZlcmZsb3c9ZSksdH1mdW5jdGlvbiBuZSh0KXt2YXIgZSxpLG8sbixzLHIsYT10Ll9pLGg9U24uZXhlYyhhKXx8Q24uZXhlYyhhKTtpZihoKXtmb3IodSh0KS5pc289ITAsZT0wLGk9RW4ubGVuZ3RoO2U8aTtlKyspaWYoRW5bZV1bMV0uZXhlYyhoWzFdKSl7Cm49RW5bZV1bMF0sbz1FbltlXVsyXSE9PSExO2JyZWFrfWlmKG51bGw9PW4pcmV0dXJuIHZvaWQodC5faXNWYWxpZD0hMSk7aWYoaFszXSl7Zm9yKGU9MCxpPU1uLmxlbmd0aDtlPGk7ZSsrKWlmKE1uW2VdWzFdLmV4ZWMoaFszXSkpe3M9KGhbMl18fCIgIikrTW5bZV1bMF07YnJlYWt9aWYobnVsbD09cylyZXR1cm4gdm9pZCh0Ll9pc1ZhbGlkPSExKX1pZighbyYmbnVsbCE9cylyZXR1cm4gdm9pZCh0Ll9pc1ZhbGlkPSExKTtpZihoWzRdKXtpZighVG4uZXhlYyhoWzRdKSlyZXR1cm4gdm9pZCh0Ll9pc1ZhbGlkPSExKTtyPSJaIn10Ll9mPW4rKHN8fCIiKSsocnx8IiIpLGxlKHQpfWVsc2UgdC5faXNWYWxpZD0hMX1mdW5jdGlvbiBzZSh0KXt2YXIgaT1Qbi5leGVjKHQuX2kpO3JldHVybiBudWxsIT09aT92b2lkKHQuX2Q9bmV3IERhdGUoK2lbMV0pKToobmUodCksdm9pZCh0Ll9pc1ZhbGlkPT09ITEmJihkZWxldGUgdC5faXNWYWxpZCxlLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrKHQpKSkpfWZ1bmN0aW9uIHJlKHQsZSxpKXtyZXR1cm4gbnVsbCE9dD90Om51bGwhPWU/ZTppfWZ1bmN0aW9uIGFlKHQpe3ZhciBpPW5ldyBEYXRlKGUubm93KCkpO3JldHVybiB0Ll91c2VVVEM/W2kuZ2V0VVRDRnVsbFllYXIoKSxpLmdldFVUQ01vbnRoKCksaS5nZXRVVENEYXRlKCldOltpLmdldEZ1bGxZZWFyKCksaS5nZXRNb250aCgpLGkuZ2V0RGF0ZSgpXX1mdW5jdGlvbiBoZSh0KXt2YXIgZSxpLG8sbixzPVtdO2lmKCF0Ll9kKXtmb3Iobz1hZSh0KSx0Ll93JiZudWxsPT10Ll9hW3RuXSYmbnVsbD09dC5fYVskb10mJmRlKHQpLHQuX2RheU9mWWVhciYmKG49cmUodC5fYVtRb10sb1tRb10pLHQuX2RheU9mWWVhcj5tdChuKSYmKHUodCkuX292ZXJmbG93RGF5T2ZZZWFyPSEwKSxpPWJ0KG4sMCx0Ll9kYXlPZlllYXIpLHQuX2FbJG9dPWkuZ2V0VVRDTW9udGgoKSx0Ll9hW3RuXT1pLmdldFVUQ0RhdGUoKSksZT0wO2U8MyYmbnVsbD09dC5fYVtlXTsrK2UpdC5fYVtlXT1zW2VdPW9bZV07Zm9yKDtlPDc7ZSsrKXQuX2FbZV09c1tlXT1udWxsPT10Ll9hW2VdPzI9PT1lPzE6MDp0Ll9hW2VdOzI0PT09dC5fYVtlbl0mJjA9PT10Ll9hW29uXSYmMD09PXQuX2Fbbm5dJiYwPT09dC5fYVtzbl0mJih0Ll9uZXh0RGF5PSEwLHQuX2FbZW5dPTApLHQuX2Q9KHQuX3VzZVVUQz9idDp5dCkuYXBwbHkobnVsbCxzKSxudWxsIT10Ll90em0mJnQuX2Quc2V0VVRDTWludXRlcyh0Ll9kLmdldFVUQ01pbnV0ZXMoKS10Ll90em0pLHQuX25leHREYXkmJih0Ll9hW2VuXT0yNCl9fWZ1bmN0aW9uIGRlKHQpe3ZhciBlLGksbyxuLHMscixhLGg7ZT10Ll93LG51bGwhPWUuR0d8fG51bGwhPWUuV3x8bnVsbCE9ZS5FPyhzPTEscj00LGk9cmUoZS5HRyx0Ll9hW1FvXSx4dCh5ZSgpLDEsNCkueWVhciksbz1yZShlLlcsMSksbj1yZShlLkUsMSksKG48MXx8bj43KSYmKGg9ITApKToocz10Ll9sb2NhbGUuX3dlZWsuZG93LHI9dC5fbG9jYWxlLl93ZWVrLmRveSxpPXJlKGUuZ2csdC5fYVtRb10seHQoeWUoKSxzLHIpLnllYXIpLG89cmUoZS53LDEpLG51bGwhPWUuZD8obj1lLmQsKG48MHx8bj42KSYmKGg9ITApKTpudWxsIT1lLmU/KG49ZS5lK3MsKGUuZTwwfHxlLmU+NikmJihoPSEwKSk6bj1zKSxvPDF8fG8+a3QoaSxzLHIpP3UodCkuX292ZXJmbG93V2Vla3M9ITA6bnVsbCE9aD91KHQpLl9vdmVyZmxvd1dlZWtkYXk9ITA6KGE9d3QoaSxvLG4scyxyKSx0Ll9hW1FvXT1hLnllYXIsdC5fZGF5T2ZZZWFyPWEuZGF5T2ZZZWFyKX1mdW5jdGlvbiBsZSh0KXtpZih0Ll9mPT09ZS5JU09fODYwMSlyZXR1cm4gdm9pZCBuZSh0KTt0Ll9hPVtdLHUodCkuZW1wdHk9ITA7dmFyIGksbyxuLHMscixhPSIiK3QuX2ksaD1hLmxlbmd0aCxkPTA7Zm9yKG49Syh0Ll9mLHQuX2xvY2FsZSkubWF0Y2goRW8pfHxbXSxpPTA7aTxuLmxlbmd0aDtpKyspcz1uW2ldLG89KGEubWF0Y2goUShzLHQpKXx8W10pWzBdLG8mJihyPWEuc3Vic3RyKDAsYS5pbmRleE9mKG8pKSxyLmxlbmd0aD4wJiZ1KHQpLnVudXNlZElucHV0LnB1c2gociksYT1hLnNsaWNlKGEuaW5kZXhPZihvKStvLmxlbmd0aCksZCs9by5sZW5ndGgpLElvW3NdPyhvP3UodCkuZW1wdHk9ITE6dSh0KS51bnVzZWRUb2tlbnMucHVzaChzKSxvdChzLG8sdCkpOnQuX3N0cmljdCYmIW8mJnUodCkudW51c2VkVG9rZW5zLnB1c2gocyk7dSh0KS5jaGFyc0xlZnRPdmVyPWgtZCxhLmxlbmd0aD4wJiZ1KHQpLnVudXNlZElucHV0LnB1c2goYSksdC5fYVtlbl08PTEyJiZ1KHQpLmJpZ0hvdXI9PT0hMCYmdC5fYVtlbl0+MCYmKHUodCkuYmlnSG91cj12b2lkIDApLHUodCkucGFyc2VkRGF0ZVBhcnRzPXQuX2Euc2xpY2UoMCksdSh0KS5tZXJpZGllbT10Ll9tZXJpZGllbSx0Ll9hW2VuXT1jZSh0Ll9sb2NhbGUsdC5fYVtlbl0sdC5fbWVyaWRpZW0pLGhlKHQpLG9lKHQpfWZ1bmN0aW9uIGNlKHQsZSxpKXt2YXIgbztyZXR1cm4gbnVsbD09aT9lOm51bGwhPXQubWVyaWRpZW1Ib3VyP3QubWVyaWRpZW1Ib3VyKGUsaSk6bnVsbCE9dC5pc1BNPyhvPXQuaXNQTShpKSxvJiZlPDEyJiYoZSs9MTIpLG98fDEyIT09ZXx8KGU9MCksZSk6ZX1mdW5jdGlvbiB1ZSh0KXt2YXIgZSxpLG8sbixzO2lmKDA9PT10Ll9mLmxlbmd0aClyZXR1cm4gdSh0KS5pbnZhbGlkRm9ybWF0PSEwLHZvaWQodC5fZD1uZXcgRGF0ZShOYU4pKTtmb3Iobj0wO248dC5fZi5sZW5ndGg7bisrKXM9MCxlPXYoe30sdCksbnVsbCE9dC5fdXNlVVRDJiYoZS5fdXNlVVRDPXQuX3VzZVVUQyksZS5fZj10Ll9mW25dLGxlKGUpLHAoZSkmJihzKz11KGUpLmNoYXJzTGVmdE92ZXIscys9MTAqdShlKS51bnVzZWRUb2tlbnMubGVuZ3RoLHUoZSkuc2NvcmU9cywobnVsbD09b3x8czxvKSYmKG89cyxpPWUpKTtkKHQsaXx8ZSl9ZnVuY3Rpb24gcGUodCl7aWYoIXQuX2Qpe3ZhciBlPUEodC5faSk7dC5fYT1hKFtlLnllYXIsZS5tb250aCxlLmRheXx8ZS5kYXRlLGUuaG91cixlLm1pbnV0ZSxlLnNlY29uZCxlLm1pbGxpc2Vjb25kXSxmdW5jdGlvbih0KXtyZXR1cm4gdCYmcGFyc2VJbnQodCwxMCl9KSxoZSh0KX19ZnVuY3Rpb24gZmUodCl7dmFyIGU9bmV3IGcob2UobWUodCkpKTtyZXR1cm4gZS5fbmV4dERheSYmKGUuYWRkKDEsImQiKSxlLl9uZXh0RGF5PXZvaWQgMCksZX1mdW5jdGlvbiBtZSh0KXt2YXIgZT10Ll9pLGk9dC5fZjtyZXR1cm4gdC5fbG9jYWxlPXQuX2xvY2FsZXx8ZWUodC5fbCksbnVsbD09PWV8fHZvaWQgMD09PWkmJiIiPT09ZT9mKHtudWxsSW5wdXQ6ITB9KTooInN0cmluZyI9PXR5cGVvZiBlJiYodC5faT1lPXQuX2xvY2FsZS5wcmVwYXJzZShlKSkseShlKT9uZXcgZyhvZShlKSk6KG8oaSk/dWUodCk6cihlKT90Ll9kPWU6aT9sZSh0KTp2ZSh0KSxwKHQpfHwodC5fZD1udWxsKSx0KSl9ZnVuY3Rpb24gdmUodCl7dmFyIGk9dC5faTt2b2lkIDA9PT1pP3QuX2Q9bmV3IERhdGUoZS5ub3coKSk6cihpKT90Ll9kPW5ldyBEYXRlKGkudmFsdWVPZigpKToic3RyaW5nIj09dHlwZW9mIGk/c2UodCk6byhpKT8odC5fYT1hKGkuc2xpY2UoMCksZnVuY3Rpb24odCl7cmV0dXJuIHBhcnNlSW50KHQsMTApfSksaGUodCkpOiJvYmplY3QiPT10eXBlb2YgaT9wZSh0KToibnVtYmVyIj09dHlwZW9mIGk/dC5fZD1uZXcgRGF0ZShpKTplLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrKHQpfWZ1bmN0aW9uIGdlKHQsZSxpLHIsYSl7dmFyIGg9e307cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgaSYmKHI9aSxpPXZvaWQgMCksKG4odCkmJnModCl8fG8odCkmJjA9PT10Lmxlbmd0aCkmJih0PXZvaWQgMCksaC5faXNBTW9tZW50T2JqZWN0PSEwLGguX3VzZVVUQz1oLl9pc1VUQz1hLGguX2w9aSxoLl9pPXQsaC5fZj1lLGguX3N0cmljdD1yLGZlKGgpfWZ1bmN0aW9uIHllKHQsZSxpLG8pe3JldHVybiBnZSh0LGUsaSxvLCExKX1mdW5jdGlvbiBiZSh0LGUpe3ZhciBpLG47aWYoMT09PWUubGVuZ3RoJiZvKGVbMF0pJiYoZT1lWzBdKSwhZS5sZW5ndGgpcmV0dXJuIHllKCk7Zm9yKGk9ZVswXSxuPTE7bjxlLmxlbmd0aDsrK24pZVtuXS5pc1ZhbGlkKCkmJiFlW25dW3RdKGkpfHwoaT1lW25dKTtyZXR1cm4gaX1mdW5jdGlvbiBfZSgpe3ZhciB0PVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApO3JldHVybiBiZSgiaXNCZWZvcmUiLHQpfWZ1bmN0aW9uIHdlKCl7dmFyIHQ9W10uc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7cmV0dXJuIGJlKCJpc0FmdGVyIix0KX1mdW5jdGlvbiB4ZSh0KXt2YXIgZT1BKHQpLGk9ZS55ZWFyfHwwLG89ZS5xdWFydGVyfHwwLG49ZS5tb250aHx8MCxzPWUud2Vla3x8MCxyPWUuZGF5fHwwLGE9ZS5ob3VyfHwwLGg9ZS5taW51dGV8fDAsZD1lLnNlY29uZHx8MCxsPWUubWlsbGlzZWNvbmR8fDA7dGhpcy5fbWlsbGlzZWNvbmRzPStsKzFlMypkKzZlNCpoKzFlMyphKjYwKjYwLHRoaXMuX2RheXM9K3IrNypzLHRoaXMuX21vbnRocz0rbiszKm8rMTIqaSx0aGlzLl9kYXRhPXt9LHRoaXMuX2xvY2FsZT1lZSgpLHRoaXMuX2J1YmJsZSgpfWZ1bmN0aW9uIGtlKHQpe3JldHVybiB0IGluc3RhbmNlb2YgeGV9ZnVuY3Rpb24gT2UodCl7cmV0dXJuIHQ8MD9NYXRoLnJvdW5kKC0xKnQpKi0xOk1hdGgucm91bmQodCl9ZnVuY3Rpb24gRGUodCxlKXtVKHQsMCwwLGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy51dGNPZmZzZXQoKSxpPSIrIjtyZXR1cm4gdDwwJiYodD0tdCxpPSItIiksaStWKH5+KHQvNjApLDIpK2UrVih+fnQlNjAsMil9KX1mdW5jdGlvbiBTZSh0LGUpe3ZhciBpPShlfHwiIikubWF0Y2godCl8fFtdLG89aVtpLmxlbmd0aC0xXXx8W10sbj0obysiIikubWF0Y2goTG4pfHxbIi0iLDAsMF0scz0rKDYwKm5bMV0pK18oblsyXSk7cmV0dXJuIisiPT09blswXT9zOi1zfWZ1bmN0aW9uIENlKHQsaSl7dmFyIG8sbjtyZXR1cm4gaS5faXNVVEM/KG89aS5jbG9uZSgpLG49KHkodCl8fHIodCk/dC52YWx1ZU9mKCk6eWUodCkudmFsdWVPZigpKS1vLnZhbHVlT2YoKSxvLl9kLnNldFRpbWUoby5fZC52YWx1ZU9mKCkrbiksZS51cGRhdGVPZmZzZXQobywhMSksbyk6eWUodCkubG9jYWwoKX1mdW5jdGlvbiBUZSh0KXtyZXR1cm4gMTUqLU1hdGgucm91bmQodC5fZC5nZXRUaW1lem9uZU9mZnNldCgpLzE1KX1mdW5jdGlvbiBFZSh0LGkpe3ZhciBvLG49dGhpcy5fb2Zmc2V0fHwwO3JldHVybiB0aGlzLmlzVmFsaWQoKT9udWxsIT10Pygic3RyaW5nIj09dHlwZW9mIHQ/dD1TZShxbyx0KTpNYXRoLmFicyh0KTwxNiYmKHQqPTYwKSwhdGhpcy5faXNVVEMmJmkmJihvPVRlKHRoaXMpKSx0aGlzLl9vZmZzZXQ9dCx0aGlzLl9pc1VUQz0hMCxudWxsIT1vJiZ0aGlzLmFkZChvLCJtIiksbiE9PXQmJighaXx8dGhpcy5fY2hhbmdlSW5Qcm9ncmVzcz9WZSh0aGlzLEZlKHQtbiwibSIpLDEsITEpOnRoaXMuX2NoYW5nZUluUHJvZ3Jlc3N8fCh0aGlzLl9jaGFuZ2VJblByb2dyZXNzPSEwLGUudXBkYXRlT2Zmc2V0KHRoaXMsITApLHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3M9bnVsbCkpLHRoaXMpOnRoaXMuX2lzVVRDP246VGUodGhpcyk6bnVsbCE9dD90aGlzOk5hTn1mdW5jdGlvbiBNZSh0LGUpe3JldHVybiBudWxsIT10Pygic3RyaW5nIiE9dHlwZW9mIHQmJih0PS10KSx0aGlzLnV0Y09mZnNldCh0LGUpLHRoaXMpOi10aGlzLnV0Y09mZnNldCgpfWZ1bmN0aW9uIFBlKHQpe3JldHVybiB0aGlzLnV0Y09mZnNldCgwLHQpfWZ1bmN0aW9uIEllKHQpe3JldHVybiB0aGlzLl9pc1VUQyYmKHRoaXMudXRjT2Zmc2V0KDAsdCksdGhpcy5faXNVVEM9ITEsdCYmdGhpcy5zdWJ0cmFjdChUZSh0aGlzKSwibSIpKSx0aGlzfWZ1bmN0aW9uIE5lKCl7aWYodGhpcy5fdHptKXRoaXMudXRjT2Zmc2V0KHRoaXMuX3R6bSk7ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIHRoaXMuX2kpe3ZhciB0PVNlKFVvLHRoaXMuX2kpOzA9PT10P3RoaXMudXRjT2Zmc2V0KDAsITApOnRoaXMudXRjT2Zmc2V0KFNlKFVvLHRoaXMuX2kpKX1yZXR1cm4gdGhpc31mdW5jdGlvbiBSZSh0KXtyZXR1cm4hIXRoaXMuaXNWYWxpZCgpJiYodD10P3llKHQpLnV0Y09mZnNldCgpOjAsKHRoaXMudXRjT2Zmc2V0KCktdCklNjA9PT0wKX1mdW5jdGlvbiBMZSgpe3JldHVybiB0aGlzLnV0Y09mZnNldCgpPnRoaXMuY2xvbmUoKS5tb250aCgwKS51dGNPZmZzZXQoKXx8dGhpcy51dGNPZmZzZXQoKT50aGlzLmNsb25lKCkubW9udGgoNSkudXRjT2Zmc2V0KCl9ZnVuY3Rpb24gemUoKXtpZighbSh0aGlzLl9pc0RTVFNoaWZ0ZWQpKXJldHVybiB0aGlzLl9pc0RTVFNoaWZ0ZWQ7dmFyIHQ9e307aWYodih0LHRoaXMpLHQ9bWUodCksdC5fYSl7dmFyIGU9dC5faXNVVEM/bCh0Ll9hKTp5ZSh0Ll9hKTt0aGlzLl9pc0RTVFNoaWZ0ZWQ9dGhpcy5pc1ZhbGlkKCkmJncodC5fYSxlLnRvQXJyYXkoKSk+MH1lbHNlIHRoaXMuX2lzRFNUU2hpZnRlZD0hMTtyZXR1cm4gdGhpcy5faXNEU1RTaGlmdGVkfWZ1bmN0aW9uIEFlKCl7cmV0dXJuISF0aGlzLmlzVmFsaWQoKSYmIXRoaXMuX2lzVVRDfWZ1bmN0aW9uIEJlKCl7cmV0dXJuISF0aGlzLmlzVmFsaWQoKSYmdGhpcy5faXNVVEN9ZnVuY3Rpb24gamUoKXtyZXR1cm4hIXRoaXMuaXNWYWxpZCgpJiYodGhpcy5faXNVVEMmJjA9PT10aGlzLl9vZmZzZXQpfWZ1bmN0aW9uIEZlKHQsZSl7dmFyIGksbyxuLHM9dCxyPW51bGw7cmV0dXJuIGtlKHQpP3M9e21zOnQuX21pbGxpc2Vjb25kcyxkOnQuX2RheXMsTTp0Ll9tb250aHN9OiJudW1iZXIiPT10eXBlb2YgdD8ocz17fSxlP3NbZV09dDpzLm1pbGxpc2Vjb25kcz10KToocj16bi5leGVjKHQpKT8oaT0iLSI9PT1yWzFdPy0xOjEscz17eTowLGQ6XyhyW3RuXSkqaSxoOl8ocltlbl0pKmksbTpfKHJbb25dKSppLHM6XyhyW25uXSkqaSxtczpfKE9lKDFlMypyW3NuXSkpKml9KToocj1Bbi5leGVjKHQpKT8oaT0iLSI9PT1yWzFdPy0xOjEscz17eTpIZShyWzJdLGkpLE06SGUoclszXSxpKSx3OkhlKHJbNF0saSksZDpIZShyWzVdLGkpLGg6SGUocls2XSxpKSxtOkhlKHJbN10saSksczpIZShyWzhdLGkpfSk6bnVsbD09cz9zPXt9OiJvYmplY3QiPT10eXBlb2YgcyYmKCJmcm9tImluIHN8fCJ0byJpbiBzKSYmKG49WWUoeWUocy5mcm9tKSx5ZShzLnRvKSkscz17fSxzLm1zPW4ubWlsbGlzZWNvbmRzLHMuTT1uLm1vbnRocyksbz1uZXcgeGUocyksa2UodCkmJmgodCwiX2xvY2FsZSIpJiYoby5fbG9jYWxlPXQuX2xvY2FsZSksb31mdW5jdGlvbiBIZSh0LGUpe3ZhciBpPXQmJnBhcnNlRmxvYXQodC5yZXBsYWNlKCIsIiwiLiIpKTtyZXR1cm4oaXNOYU4oaSk/MDppKSplfWZ1bmN0aW9uIFdlKHQsZSl7dmFyIGk9e21pbGxpc2Vjb25kczowLG1vbnRoczowfTtyZXR1cm4gaS5tb250aHM9ZS5tb250aCgpLXQubW9udGgoKSsxMiooZS55ZWFyKCktdC55ZWFyKCkpLHQuY2xvbmUoKS5hZGQoaS5tb250aHMsIk0iKS5pc0FmdGVyKGUpJiYtLWkubW9udGhzLGkubWlsbGlzZWNvbmRzPStlLSt0LmNsb25lKCkuYWRkKGkubW9udGhzLCJNIiksaX1mdW5jdGlvbiBZZSh0LGUpe3ZhciBpO3JldHVybiB0LmlzVmFsaWQoKSYmZS5pc1ZhbGlkKCk/KGU9Q2UoZSx0KSx0LmlzQmVmb3JlKGUpP2k9V2UodCxlKTooaT1XZShlLHQpLGkubWlsbGlzZWNvbmRzPS1pLm1pbGxpc2Vjb25kcyxpLm1vbnRocz0taS5tb250aHMpLGkpOnttaWxsaXNlY29uZHM6MCxtb250aHM6MH19ZnVuY3Rpb24gR2UodCxlKXtyZXR1cm4gZnVuY3Rpb24oaSxvKXt2YXIgbixzO3JldHVybiBudWxsPT09b3x8aXNOYU4oK28pfHwoTyhlLCJtb21lbnQoKS4iK2UrIihwZXJpb2QsIG51bWJlcikgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBtb21lbnQoKS4iK2UrIihudW1iZXIsIHBlcmlvZCkuIFNlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2FkZC1pbnZlcnRlZC1wYXJhbS8gZm9yIG1vcmUgaW5mby4iKSxzPWksaT1vLG89cyksaT0ic3RyaW5nIj09dHlwZW9mIGk/K2k6aSxuPUZlKGksbyksVmUodGhpcyxuLHQpLHRoaXN9fWZ1bmN0aW9uIFZlKHQsaSxvLG4pe3ZhciBzPWkuX21pbGxpc2Vjb25kcyxyPU9lKGkuX2RheXMpLGE9T2UoaS5fbW9udGhzKTt0LmlzVmFsaWQoKSYmKG49bnVsbD09bnx8bixzJiZ0Ll9kLnNldFRpbWUodC5fZC52YWx1ZU9mKCkrcypvKSxyJiZXKHQsIkRhdGUiLEgodCwiRGF0ZSIpK3IqbyksYSYmZHQodCxIKHQsIk1vbnRoIikrYSpvKSxuJiZlLnVwZGF0ZU9mZnNldCh0LHJ8fGEpKX1mdW5jdGlvbiBVZSh0LGUpe3ZhciBpPXQuZGlmZihlLCJkYXlzIiwhMCk7cmV0dXJuIGk8LTY/InNhbWVFbHNlIjppPC0xPyJsYXN0V2VlayI6aTwwPyJsYXN0RGF5IjppPDE/InNhbWVEYXkiOmk8Mj8ibmV4dERheSI6aTw3PyJuZXh0V2VlayI6InNhbWVFbHNlIn1mdW5jdGlvbiBxZSh0LGkpe3ZhciBvPXR8fHllKCksbj1DZShvLHRoaXMpLnN0YXJ0T2YoImRheSIpLHM9ZS5jYWxlbmRhckZvcm1hdCh0aGlzLG4pfHwic2FtZUVsc2UiLHI9aSYmKEQoaVtzXSk/aVtzXS5jYWxsKHRoaXMsbyk6aVtzXSk7cmV0dXJuIHRoaXMuZm9ybWF0KHJ8fHRoaXMubG9jYWxlRGF0YSgpLmNhbGVuZGFyKHMsdGhpcyx5ZShvKSkpfWZ1bmN0aW9uIFhlKCl7cmV0dXJuIG5ldyBnKHRoaXMpfWZ1bmN0aW9uIFplKHQsZSl7dmFyIGk9eSh0KT90OnllKHQpO3JldHVybiEoIXRoaXMuaXNWYWxpZCgpfHwhaS5pc1ZhbGlkKCkpJiYoZT16KG0oZSk/Im1pbGxpc2Vjb25kIjplKSwibWlsbGlzZWNvbmQiPT09ZT90aGlzLnZhbHVlT2YoKT5pLnZhbHVlT2YoKTppLnZhbHVlT2YoKTx0aGlzLmNsb25lKCkuc3RhcnRPZihlKS52YWx1ZU9mKCkpfWZ1bmN0aW9uIEtlKHQsZSl7dmFyIGk9eSh0KT90OnllKHQpO3JldHVybiEoIXRoaXMuaXNWYWxpZCgpfHwhaS5pc1ZhbGlkKCkpJiYoZT16KG0oZSk/Im1pbGxpc2Vjb25kIjplKSwibWlsbGlzZWNvbmQiPT09ZT90aGlzLnZhbHVlT2YoKTxpLnZhbHVlT2YoKTp0aGlzLmNsb25lKCkuZW5kT2YoZSkudmFsdWVPZigpPGkudmFsdWVPZigpKX1mdW5jdGlvbiBKZSh0LGUsaSxvKXtyZXR1cm4gbz1vfHwiKCkiLCgiKCI9PT1vWzBdP3RoaXMuaXNBZnRlcih0LGkpOiF0aGlzLmlzQmVmb3JlKHQsaSkpJiYoIikiPT09b1sxXT90aGlzLmlzQmVmb3JlKGUsaSk6IXRoaXMuaXNBZnRlcihlLGkpKX1mdW5jdGlvbiBRZSh0LGUpe3ZhciBpLG89eSh0KT90OnllKHQpO3JldHVybiEoIXRoaXMuaXNWYWxpZCgpfHwhby5pc1ZhbGlkKCkpJiYoZT16KGV8fCJtaWxsaXNlY29uZCIpLCJtaWxsaXNlY29uZCI9PT1lP3RoaXMudmFsdWVPZigpPT09by52YWx1ZU9mKCk6KGk9by52YWx1ZU9mKCksdGhpcy5jbG9uZSgpLnN0YXJ0T2YoZSkudmFsdWVPZigpPD1pJiZpPD10aGlzLmNsb25lKCkuZW5kT2YoZSkudmFsdWVPZigpKSl9ZnVuY3Rpb24gJGUodCxlKXtyZXR1cm4gdGhpcy5pc1NhbWUodCxlKXx8dGhpcy5pc0FmdGVyKHQsZSl9ZnVuY3Rpb24gdGkodCxlKXtyZXR1cm4gdGhpcy5pc1NhbWUodCxlKXx8dGhpcy5pc0JlZm9yZSh0LGUpfWZ1bmN0aW9uIGVpKHQsZSxpKXt2YXIgbyxuLHMscjtyZXR1cm4gdGhpcy5pc1ZhbGlkKCk/KG89Q2UodCx0aGlzKSxvLmlzVmFsaWQoKT8obj02ZTQqKG8udXRjT2Zmc2V0KCktdGhpcy51dGNPZmZzZXQoKSksZT16KGUpLCJ5ZWFyIj09PWV8fCJtb250aCI9PT1lfHwicXVhcnRlciI9PT1lPyhyPWlpKHRoaXMsbyksInF1YXJ0ZXIiPT09ZT9yLz0zOiJ5ZWFyIj09PWUmJihyLz0xMikpOihzPXRoaXMtbyxyPSJzZWNvbmQiPT09ZT9zLzFlMzoibWludXRlIj09PWU/cy82ZTQ6ImhvdXIiPT09ZT9zLzM2ZTU6ImRheSI9PT1lPyhzLW4pLzg2NGU1OiJ3ZWVrIj09PWU/KHMtbikvNjA0OGU1OnMpLGk/cjpiKHIpKTpOYU4pOk5hTn1mdW5jdGlvbiBpaSh0LGUpe3ZhciBpLG8sbj0xMiooZS55ZWFyKCktdC55ZWFyKCkpKyhlLm1vbnRoKCktdC5tb250aCgpKSxzPXQuY2xvbmUoKS5hZGQobiwibW9udGhzIik7cmV0dXJuIGUtczwwPyhpPXQuY2xvbmUoKS5hZGQobi0xLCJtb250aHMiKSxvPShlLXMpLyhzLWkpKTooaT10LmNsb25lKCkuYWRkKG4rMSwibW9udGhzIiksbz0oZS1zKS8oaS1zKSksLShuK28pfHwwfWZ1bmN0aW9uIG9pKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5sb2NhbGUoImVuIikuZm9ybWF0KCJkZGQgTU1NIEREIFlZWVkgSEg6bW06c3MgW0dNVF1aWiIpfWZ1bmN0aW9uIG5pKCl7dmFyIHQ9dGhpcy5jbG9uZSgpLnV0YygpO3JldHVybiAwPHQueWVhcigpJiZ0LnllYXIoKTw9OTk5OT9EKERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nKT90aGlzLnRvRGF0ZSgpLnRvSVNPU3RyaW5nKCk6Wih0LCJZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdIik6Wih0LCJZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NbWl0iKX1mdW5jdGlvbiBzaSh0KXt0fHwodD10aGlzLmlzVXRjKCk/ZS5kZWZhdWx0Rm9ybWF0VXRjOmUuZGVmYXVsdEZvcm1hdCk7dmFyIGk9Wih0aGlzLHQpO3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5wb3N0Zm9ybWF0KGkpfWZ1bmN0aW9uIHJpKHQsZSl7cmV0dXJuIHRoaXMuaXNWYWxpZCgpJiYoeSh0KSYmdC5pc1ZhbGlkKCl8fHllKHQpLmlzVmFsaWQoKSk/RmUoe3RvOnRoaXMsZnJvbTp0fSkubG9jYWxlKHRoaXMubG9jYWxlKCkpLmh1bWFuaXplKCFlKTp0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpfWZ1bmN0aW9uIGFpKHQpe3JldHVybiB0aGlzLmZyb20oeWUoKSx0KX1mdW5jdGlvbiBoaSh0LGUpe3JldHVybiB0aGlzLmlzVmFsaWQoKSYmKHkodCkmJnQuaXNWYWxpZCgpfHx5ZSh0KS5pc1ZhbGlkKCkpP0ZlKHtmcm9tOnRoaXMsdG86dH0pLmxvY2FsZSh0aGlzLmxvY2FsZSgpKS5odW1hbml6ZSghZSk6dGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKX1mdW5jdGlvbiBkaSh0KXtyZXR1cm4gdGhpcy50byh5ZSgpLHQpfWZ1bmN0aW9uIGxpKHQpe3ZhciBlO3JldHVybiB2b2lkIDA9PT10P3RoaXMuX2xvY2FsZS5fYWJicjooZT1lZSh0KSxudWxsIT1lJiYodGhpcy5fbG9jYWxlPWUpLHRoaXMpfWZ1bmN0aW9uIGNpKCl7cmV0dXJuIHRoaXMuX2xvY2FsZX1mdW5jdGlvbiB1aSh0KXtzd2l0Y2godD16KHQpKXtjYXNlInllYXIiOnRoaXMubW9udGgoMCk7Y2FzZSJxdWFydGVyIjpjYXNlIm1vbnRoIjp0aGlzLmRhdGUoMSk7Y2FzZSJ3ZWVrIjpjYXNlImlzb1dlZWsiOmNhc2UiZGF5IjpjYXNlImRhdGUiOnRoaXMuaG91cnMoMCk7Y2FzZSJob3VyIjp0aGlzLm1pbnV0ZXMoMCk7Y2FzZSJtaW51dGUiOnRoaXMuc2Vjb25kcygwKTtjYXNlInNlY29uZCI6dGhpcy5taWxsaXNlY29uZHMoMCl9cmV0dXJuIndlZWsiPT09dCYmdGhpcy53ZWVrZGF5KDApLCJpc29XZWVrIj09PXQmJnRoaXMuaXNvV2Vla2RheSgxKSwicXVhcnRlciI9PT10JiZ0aGlzLm1vbnRoKDMqTWF0aC5mbG9vcih0aGlzLm1vbnRoKCkvMykpLHRoaXN9ZnVuY3Rpb24gcGkodCl7cmV0dXJuIHQ9eih0KSx2b2lkIDA9PT10fHwibWlsbGlzZWNvbmQiPT09dD90aGlzOigiZGF0ZSI9PT10JiYodD0iZGF5IiksdGhpcy5zdGFydE9mKHQpLmFkZCgxLCJpc29XZWVrIj09PXQ/IndlZWsiOnQpLnN1YnRyYWN0KDEsIm1zIikpfWZ1bmN0aW9uIGZpKCl7cmV0dXJuIHRoaXMuX2QudmFsdWVPZigpLTZlNCoodGhpcy5fb2Zmc2V0fHwwKX1mdW5jdGlvbiBtaSgpe3JldHVybiBNYXRoLmZsb29yKHRoaXMudmFsdWVPZigpLzFlMyl9ZnVuY3Rpb24gdmkoKXtyZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkpfWZ1bmN0aW9uIGdpKCl7dmFyIHQ9dGhpcztyZXR1cm5bdC55ZWFyKCksdC5tb250aCgpLHQuZGF0ZSgpLHQuaG91cigpLHQubWludXRlKCksdC5zZWNvbmQoKSx0Lm1pbGxpc2Vjb25kKCldfWZ1bmN0aW9uIHlpKCl7dmFyIHQ9dGhpcztyZXR1cm57eWVhcnM6dC55ZWFyKCksbW9udGhzOnQubW9udGgoKSxkYXRlOnQuZGF0ZSgpLGhvdXJzOnQuaG91cnMoKSxtaW51dGVzOnQubWludXRlcygpLHNlY29uZHM6dC5zZWNvbmRzKCksbWlsbGlzZWNvbmRzOnQubWlsbGlzZWNvbmRzKCl9fWZ1bmN0aW9uIGJpKCl7cmV0dXJuIHRoaXMuaXNWYWxpZCgpP3RoaXMudG9JU09TdHJpbmcoKTpudWxsfWZ1bmN0aW9uIF9pKCl7cmV0dXJuIHAodGhpcyl9ZnVuY3Rpb24gd2koKXtyZXR1cm4gZCh7fSx1KHRoaXMpKX1mdW5jdGlvbiB4aSgpe3JldHVybiB1KHRoaXMpLm92ZXJmbG93fWZ1bmN0aW9uIGtpKCl7cmV0dXJue2lucHV0OnRoaXMuX2ksZm9ybWF0OnRoaXMuX2YsbG9jYWxlOnRoaXMuX2xvY2FsZSxpc1VUQzp0aGlzLl9pc1VUQyxzdHJpY3Q6dGhpcy5fc3RyaWN0fX1mdW5jdGlvbiBPaSh0LGUpe1UoMCxbdCx0Lmxlbmd0aF0sMCxlKX1mdW5jdGlvbiBEaSh0KXtyZXR1cm4gRWkuY2FsbCh0aGlzLHQsdGhpcy53ZWVrKCksdGhpcy53ZWVrZGF5KCksdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93LHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRveSl9ZnVuY3Rpb24gU2kodCl7cmV0dXJuIEVpLmNhbGwodGhpcyx0LHRoaXMuaXNvV2VlaygpLHRoaXMuaXNvV2Vla2RheSgpLDEsNCl9ZnVuY3Rpb24gQ2koKXtyZXR1cm4ga3QodGhpcy55ZWFyKCksMSw0KX1mdW5jdGlvbiBUaSgpe3ZhciB0PXRoaXMubG9jYWxlRGF0YSgpLl93ZWVrO3JldHVybiBrdCh0aGlzLnllYXIoKSx0LmRvdyx0LmRveSl9ZnVuY3Rpb24gRWkodCxlLGksbyxuKXt2YXIgcztyZXR1cm4gbnVsbD09dD94dCh0aGlzLG8sbikueWVhcjoocz1rdCh0LG8sbiksZT5zJiYoZT1zKSxNaS5jYWxsKHRoaXMsdCxlLGksbyxuKSl9ZnVuY3Rpb24gTWkodCxlLGksbyxuKXt2YXIgcz13dCh0LGUsaSxvLG4pLHI9YnQocy55ZWFyLDAscy5kYXlPZlllYXIpO3JldHVybiB0aGlzLnllYXIoci5nZXRVVENGdWxsWWVhcigpKSx0aGlzLm1vbnRoKHIuZ2V0VVRDTW9udGgoKSksdGhpcy5kYXRlKHIuZ2V0VVRDRGF0ZSgpKSx0aGlzfWZ1bmN0aW9uIFBpKHQpe3JldHVybiBudWxsPT10P01hdGguY2VpbCgodGhpcy5tb250aCgpKzEpLzMpOnRoaXMubW9udGgoMyoodC0xKSt0aGlzLm1vbnRoKCklMyl9ZnVuY3Rpb24gSWkodCl7dmFyIGU9TWF0aC5yb3VuZCgodGhpcy5jbG9uZSgpLnN0YXJ0T2YoImRheSIpLXRoaXMuY2xvbmUoKS5zdGFydE9mKCJ5ZWFyIikpLzg2NGU1KSsxO3JldHVybiBudWxsPT10P2U6dGhpcy5hZGQodC1lLCJkIil9ZnVuY3Rpb24gTmkodCxlKXtlW3NuXT1fKDFlMyooIjAuIit0KSl9ZnVuY3Rpb24gUmkoKXtyZXR1cm4gdGhpcy5faXNVVEM/IlVUQyI6IiJ9ZnVuY3Rpb24gTGkoKXtyZXR1cm4gdGhpcy5faXNVVEM/IkNvb3JkaW5hdGVkIFVuaXZlcnNhbCBUaW1lIjoiIn1mdW5jdGlvbiB6aSh0KXtyZXR1cm4geWUoMWUzKnQpfWZ1bmN0aW9uIEFpKCl7cmV0dXJuIHllLmFwcGx5KG51bGwsYXJndW1lbnRzKS5wYXJzZVpvbmUoKX1mdW5jdGlvbiBCaSh0KXtyZXR1cm4gdH1mdW5jdGlvbiBqaSh0LGUsaSxvKXt2YXIgbj1lZSgpLHM9bCgpLnNldChvLGUpO3JldHVybiBuW2ldKHMsdCl9ZnVuY3Rpb24gRmkodCxlLGkpe2lmKCJudW1iZXIiPT10eXBlb2YgdCYmKGU9dCx0PXZvaWQgMCksdD10fHwiIixudWxsIT1lKXJldHVybiBqaSh0LGUsaSwibW9udGgiKTt2YXIgbyxuPVtdO2ZvcihvPTA7bzwxMjtvKyspbltvXT1qaSh0LG8saSwibW9udGgiKTtyZXR1cm4gbn1mdW5jdGlvbiBIaSh0LGUsaSxvKXsiYm9vbGVhbiI9PXR5cGVvZiB0PygibnVtYmVyIj09dHlwZW9mIGUmJihpPWUsZT12b2lkIDApLGU9ZXx8IiIpOihlPXQsaT1lLHQ9ITEsIm51bWJlciI9PXR5cGVvZiBlJiYoaT1lLGU9dm9pZCAwKSxlPWV8fCIiKTt2YXIgbj1lZSgpLHM9dD9uLl93ZWVrLmRvdzowO2lmKG51bGwhPWkpcmV0dXJuIGppKGUsKGkrcyklNyxvLCJkYXkiKTt2YXIgcixhPVtdO2ZvcihyPTA7cjw3O3IrKylhW3JdPWppKGUsKHIrcyklNyxvLCJkYXkiKTtyZXR1cm4gYX1mdW5jdGlvbiBXaSh0LGUpe3JldHVybiBGaSh0LGUsIm1vbnRocyIpfWZ1bmN0aW9uIFlpKHQsZSl7cmV0dXJuIEZpKHQsZSwibW9udGhzU2hvcnQiKX1mdW5jdGlvbiBHaSh0LGUsaSl7cmV0dXJuIEhpKHQsZSxpLCJ3ZWVrZGF5cyIpfWZ1bmN0aW9uIFZpKHQsZSxpKXtyZXR1cm4gSGkodCxlLGksIndlZWtkYXlzU2hvcnQiKX1mdW5jdGlvbiBVaSh0LGUsaSl7cmV0dXJuIEhpKHQsZSxpLCJ3ZWVrZGF5c01pbiIpfWZ1bmN0aW9uIHFpKCl7dmFyIHQ9dGhpcy5fZGF0YTtyZXR1cm4gdGhpcy5fbWlsbGlzZWNvbmRzPVpuKHRoaXMuX21pbGxpc2Vjb25kcyksdGhpcy5fZGF5cz1abih0aGlzLl9kYXlzKSx0aGlzLl9tb250aHM9Wm4odGhpcy5fbW9udGhzKSx0Lm1pbGxpc2Vjb25kcz1abih0Lm1pbGxpc2Vjb25kcyksdC5zZWNvbmRzPVpuKHQuc2Vjb25kcyksdC5taW51dGVzPVpuKHQubWludXRlcyksdC5ob3Vycz1abih0LmhvdXJzKSx0Lm1vbnRocz1abih0Lm1vbnRocyksdC55ZWFycz1abih0LnllYXJzKSx0aGlzfWZ1bmN0aW9uIFhpKHQsZSxpLG8pe3ZhciBuPUZlKGUsaSk7cmV0dXJuIHQuX21pbGxpc2Vjb25kcys9bypuLl9taWxsaXNlY29uZHMsdC5fZGF5cys9bypuLl9kYXlzLHQuX21vbnRocys9bypuLl9tb250aHMsdC5fYnViYmxlKCl9ZnVuY3Rpb24gWmkodCxlKXtyZXR1cm4gWGkodGhpcyx0LGUsMSl9ZnVuY3Rpb24gS2kodCxlKXtyZXR1cm4gWGkodGhpcyx0LGUsLTEpfWZ1bmN0aW9uIEppKHQpe3JldHVybiB0PDA/TWF0aC5mbG9vcih0KTpNYXRoLmNlaWwodCl9ZnVuY3Rpb24gUWkoKXt2YXIgdCxlLGksbyxuLHM9dGhpcy5fbWlsbGlzZWNvbmRzLHI9dGhpcy5fZGF5cyxhPXRoaXMuX21vbnRocyxoPXRoaXMuX2RhdGE7cmV0dXJuIHM+PTAmJnI+PTAmJmE+PTB8fHM8PTAmJnI8PTAmJmE8PTB8fChzKz04NjRlNSpKaSh0byhhKStyKSxyPTAsYT0wKSxoLm1pbGxpc2Vjb25kcz1zJTFlMyx0PWIocy8xZTMpLGguc2Vjb25kcz10JTYwLGU9Yih0LzYwKSxoLm1pbnV0ZXM9ZSU2MCxpPWIoZS82MCksaC5ob3Vycz1pJTI0LHIrPWIoaS8yNCksbj1iKCRpKHIpKSxhKz1uLHItPUppKHRvKG4pKSxvPWIoYS8xMiksYSU9MTIsaC5kYXlzPXIsaC5tb250aHM9YSxoLnllYXJzPW8sdGhpc31mdW5jdGlvbiAkaSh0KXtyZXR1cm4gNDgwMCp0LzE0NjA5N31mdW5jdGlvbiB0byh0KXtyZXR1cm4gMTQ2MDk3KnQvNDgwMH1mdW5jdGlvbiBlbyh0KXt2YXIgZSxpLG89dGhpcy5fbWlsbGlzZWNvbmRzO2lmKHQ9eih0KSwibW9udGgiPT09dHx8InllYXIiPT09dClyZXR1cm4gZT10aGlzLl9kYXlzK28vODY0ZTUsaT10aGlzLl9tb250aHMrJGkoZSksIm1vbnRoIj09PXQ/aTppLzEyO3N3aXRjaChlPXRoaXMuX2RheXMrTWF0aC5yb3VuZCh0byh0aGlzLl9tb250aHMpKSx0KXtjYXNlIndlZWsiOnJldHVybiBlLzcrby82MDQ4ZTU7Y2FzZSJkYXkiOnJldHVybiBlK28vODY0ZTU7Y2FzZSJob3VyIjpyZXR1cm4gMjQqZStvLzM2ZTU7Y2FzZSJtaW51dGUiOnJldHVybiAxNDQwKmUrby82ZTQ7Y2FzZSJzZWNvbmQiOnJldHVybiA4NjQwMCplK28vMWUzO2Nhc2UibWlsbGlzZWNvbmQiOnJldHVybiBNYXRoLmZsb29yKDg2NGU1KmUpK287ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gdW5pdCAiK3QpfX1mdW5jdGlvbiBpbygpe3JldHVybiB0aGlzLl9taWxsaXNlY29uZHMrODY0ZTUqdGhpcy5fZGF5cyt0aGlzLl9tb250aHMlMTIqMjU5MmU2KzMxNTM2ZTYqXyh0aGlzLl9tb250aHMvMTIpfWZ1bmN0aW9uIG9vKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLmFzKHQpfX1mdW5jdGlvbiBubyh0KXtyZXR1cm4gdD16KHQpLHRoaXNbdCsicyJdKCl9ZnVuY3Rpb24gc28odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RhdGFbdF19fWZ1bmN0aW9uIHJvKCl7cmV0dXJuIGIodGhpcy5kYXlzKCkvNyl9ZnVuY3Rpb24gYW8odCxlLGksbyxuKXtyZXR1cm4gbi5yZWxhdGl2ZVRpbWUoZXx8MSwhIWksdCxvKX1mdW5jdGlvbiBobyh0LGUsaSl7dmFyIG89RmUodCkuYWJzKCksbj1jcyhvLmFzKCJzIikpLHM9Y3Moby5hcygibSIpKSxyPWNzKG8uYXMoImgiKSksYT1jcyhvLmFzKCJkIikpLGg9Y3Moby5hcygiTSIpKSxkPWNzKG8uYXMoInkiKSksbD1uPHVzLnMmJlsicyIsbl18fHM8PTEmJlsibSJdfHxzPHVzLm0mJlsibW0iLHNdfHxyPD0xJiZbImgiXXx8cjx1cy5oJiZbImhoIixyXXx8YTw9MSYmWyJkIl18fGE8dXMuZCYmWyJkZCIsYV18fGg8PTEmJlsiTSJdfHxoPHVzLk0mJlsiTU0iLGhdfHxkPD0xJiZbInkiXXx8WyJ5eSIsZF07cmV0dXJuIGxbMl09ZSxsWzNdPSt0PjAsbFs0XT1pLGFvLmFwcGx5KG51bGwsbCl9ZnVuY3Rpb24gbG8odCl7cmV0dXJuIHZvaWQgMD09PXQ/Y3M6ImZ1bmN0aW9uIj09dHlwZW9mIHQmJihjcz10LCEwKX1mdW5jdGlvbiBjbyh0LGUpe3JldHVybiB2b2lkIDAhPT11c1t0XSYmKHZvaWQgMD09PWU/dXNbdF06KHVzW3RdPWUsITApKX1mdW5jdGlvbiB1byh0KXt2YXIgZT10aGlzLmxvY2FsZURhdGEoKSxpPWhvKHRoaXMsIXQsZSk7cmV0dXJuIHQmJihpPWUucGFzdEZ1dHVyZSgrdGhpcyxpKSksZS5wb3N0Zm9ybWF0KGkpfWZ1bmN0aW9uIHBvKCl7dmFyIHQsZSxpLG89cHModGhpcy5fbWlsbGlzZWNvbmRzKS8xZTMsbj1wcyh0aGlzLl9kYXlzKSxzPXBzKHRoaXMuX21vbnRocyk7dD1iKG8vNjApLGU9Yih0LzYwKSxvJT02MCx0JT02MCxpPWIocy8xMikscyU9MTI7dmFyIHI9aSxhPXMsaD1uLGQ9ZSxsPXQsYz1vLHU9dGhpcy5hc1NlY29uZHMoKTtyZXR1cm4gdT8odTwwPyItIjoiIikrIlAiKyhyP3IrIlkiOiIiKSsoYT9hKyJNIjoiIikrKGg/aCsiRCI6IiIpKyhkfHxsfHxjPyJUIjoiIikrKGQ/ZCsiSCI6IiIpKyhsP2wrIk0iOiIiKSsoYz9jKyJTIjoiIik6IlAwRCJ9dmFyIGZvLG1vO21vPUFycmF5LnByb3RvdHlwZS5zb21lP0FycmF5LnByb3RvdHlwZS5zb21lOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1PYmplY3QodGhpcyksaT1lLmxlbmd0aD4+PjAsbz0wO288aTtvKyspaWYobyBpbiBlJiZ0LmNhbGwodGhpcyxlW29dLG8sZSkpcmV0dXJuITA7cmV0dXJuITF9O3ZhciB2bz1lLm1vbWVudFByb3BlcnRpZXM9W10sZ289ITEseW89e307ZS5zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ3M9ITEsZS5kZXByZWNhdGlvbkhhbmRsZXI9bnVsbDt2YXIgYm87Ym89T2JqZWN0LmtleXM/T2JqZWN0LmtleXM6ZnVuY3Rpb24odCl7dmFyIGUsaT1bXTtmb3IoZSBpbiB0KWgodCxlKSYmaS5wdXNoKGUpO3JldHVybiBpfTt2YXIgX28sd289e3NhbWVEYXk6IltUb2RheSBhdF0gTFQiLG5leHREYXk6IltUb21vcnJvdyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQgW2F0XSBMVCIsc2FtZUVsc2U6IkwifSx4bz17TFRTOiJoOm1tOnNzIEEiLExUOiJoOm1tIEEiLEw6Ik1NL0REL1lZWVkiLExMOiJNTU1NIEQsIFlZWVkiLExMTDoiTU1NTSBELCBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgTU1NTSBELCBZWVlZIGg6bW0gQSJ9LGtvPSJJbnZhbGlkIGRhdGUiLE9vPSIlZCIsRG89L1xkezEsMn0vLFNvPXtmdXR1cmU6ImluICVzIixwYXN0OiIlcyBhZ28iLHM6ImEgZmV3IHNlY29uZHMiLG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVkIGhvdXJzIixkOiJhIGRheSIsZGQ6IiVkIGRheXMiLE06ImEgbW9udGgiLE1NOiIlZCBtb250aHMiLHk6ImEgeWVhciIseXk6IiVkIHllYXJzIn0sQ289e30sVG89e30sRW89LyhcW1teXFtdKlxdKXwoXFwpPyhbSGhdbW0oc3MpP3xNb3xNTT9NP00/fERvfERERG98REQ/RD9EP3xkZGQ/ZD98ZG8/fHdbb3x3XT98V1tvfFddP3xRbz98WVlZWVlZfFlZWVlZfFlZWVl8WVl8Z2coZ2dnPyk/fEdHKEdHRz8pP3xlfEV8YXxBfGhoP3xISD98a2s/fG1tP3xzcz98U3sxLDl9fHh8WHx6ej98Wlo/fC4pL2csTW89LyhcW1teXFtdKlxdKXwoXFwpPyhMVFN8TFR8TEw/TD9MP3xsezEsNH0pL2csUG89e30sSW89e30sTm89L1xkLyxSbz0vXGRcZC8sTG89L1xkezN9Lyx6bz0vXGR7NH0vLEFvPS9bKy1dP1xkezZ9LyxCbz0vXGRcZD8vLGpvPS9cZFxkXGRcZD8vLEZvPS9cZFxkXGRcZFxkXGQ/LyxIbz0vXGR7MSwzfS8sV289L1xkezEsNH0vLFlvPS9bKy1dP1xkezEsNn0vLEdvPS9cZCsvLFZvPS9bKy1dP1xkKy8sVW89L1p8WystXVxkXGQ6P1xkXGQvZ2kscW89L1p8WystXVxkXGQoPzo6P1xkXGQpPy9naSxYbz0vWystXT9cZCsoXC5cZHsxLDN9KT8vLFpvPS9bMC05XSpbJ2Etelx1MDBBMC1cdTA1RkZcdTA3MDAtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGRUZdK3xbXHUwNjAwLVx1MDZGRlwvXSsoXHMqP1tcdTA2MDAtXHUwNkZGXSspezEsMn0vaSxLbz17fSxKbz17fSxRbz0wLCRvPTEsdG49Mixlbj0zLG9uPTQsbm49NSxzbj02LHJuPTcsYW49ODtfbz1BcnJheS5wcm90b3R5cGUuaW5kZXhPZj9BcnJheS5wcm90b3R5cGUuaW5kZXhPZjpmdW5jdGlvbih0KXt2YXIgZTtmb3IoZT0wO2U8dGhpcy5sZW5ndGg7KytlKWlmKHRoaXNbZV09PT10KXJldHVybiBlO3JldHVybi0xfSxVKCJNIixbIk1NIiwyXSwiTW8iLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubW9udGgoKSsxfSksVSgiTU1NIiwwLDAsZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1vbnRoc1Nob3J0KHRoaXMsdCl9KSxVKCJNTU1NIiwwLDAsZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1vbnRocyh0aGlzLHQpfSksTCgibW9udGgiLCJNIiksQigibW9udGgiLDgpLEooIk0iLEJvKSxKKCJNTSIsQm8sUm8pLEooIk1NTSIsZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5tb250aHNTaG9ydFJlZ2V4KHQpfSksSigiTU1NTSIsZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5tb250aHNSZWdleCh0KX0pLGV0KFsiTSIsIk1NIl0sZnVuY3Rpb24odCxlKXtlWyRvXT1fKHQpLTF9KSxldChbIk1NTSIsIk1NTU0iXSxmdW5jdGlvbih0LGUsaSxvKXt2YXIgbj1pLl9sb2NhbGUubW9udGhzUGFyc2UodCxvLGkuX3N0cmljdCk7bnVsbCE9bj9lWyRvXT1uOnUoaSkuaW52YWxpZE1vbnRoPXR9KTt2YXIgaG49L0Rbb0RdPyhcW1teXFtcXV0qXF18XHMpK01NTU0/Lyxkbj0iSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxsbj0iSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIiksY249Wm8sdW49Wm87VSgiWSIsMCwwLGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy55ZWFyKCk7cmV0dXJuIHQ8PTk5OTk/IiIrdDoiKyIrdH0pLFUoMCxbIllZIiwyXSwwLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueWVhcigpJTEwMH0pLFUoMCxbIllZWVkiLDRdLDAsInllYXIiKSxVKDAsWyJZWVlZWSIsNV0sMCwieWVhciIpLFUoMCxbIllZWVlZWSIsNiwhMF0sMCwieWVhciIpLEwoInllYXIiLCJ5IiksQigieWVhciIsMSksSigiWSIsVm8pLEooIllZIixCbyxSbyksSigiWVlZWSIsV28sem8pLEooIllZWVlZIixZbyxBbyksSigiWVlZWVlZIixZbyxBbyksZXQoWyJZWVlZWSIsIllZWVlZWSJdLFFvKSxldCgiWVlZWSIsZnVuY3Rpb24odCxpKXtpW1FvXT0yPT09dC5sZW5ndGg/ZS5wYXJzZVR3b0RpZ2l0WWVhcih0KTpfKHQpfSksZXQoIllZIixmdW5jdGlvbih0LGkpe2lbUW9dPWUucGFyc2VUd29EaWdpdFllYXIodCl9KSxldCgiWSIsZnVuY3Rpb24odCxlKXtlW1FvXT1wYXJzZUludCh0LDEwKX0pLGUucGFyc2VUd29EaWdpdFllYXI9ZnVuY3Rpb24odCl7cmV0dXJuIF8odCkrKF8odCk+Njg/MTkwMDoyZTMpfTt2YXIgcG49RigiRnVsbFllYXIiLCEwKTtVKCJ3IixbInd3IiwyXSwid28iLCJ3ZWVrIiksVSgiVyIsWyJXVyIsMl0sIldvIiwiaXNvV2VlayIpLEwoIndlZWsiLCJ3IiksTCgiaXNvV2VlayIsIlciKSxCKCJ3ZWVrIiw1KSxCKCJpc29XZWVrIiw1KSxKKCJ3IixCbyksSigid3ciLEJvLFJvKSxKKCJXIixCbyksSigiV1ciLEJvLFJvKSxpdChbInciLCJ3dyIsIlciLCJXVyJdLGZ1bmN0aW9uKHQsZSxpLG8pe2Vbby5zdWJzdHIoMCwxKV09Xyh0KX0pO3ZhciBmbj17ZG93OjAsZG95OjZ9O1UoImQiLDAsImRvIiwiZGF5IiksVSgiZGQiLDAsMCxmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXNNaW4odGhpcyx0KX0pLFUoImRkZCIsMCwwLGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5c1Nob3J0KHRoaXMsdCl9KSxVKCJkZGRkIiwwLDAsZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzKHRoaXMsdCl9KSxVKCJlIiwwLDAsIndlZWtkYXkiKSxVKCJFIiwwLDAsImlzb1dlZWtkYXkiKSxMKCJkYXkiLCJkIiksTCgid2Vla2RheSIsImUiKSxMKCJpc29XZWVrZGF5IiwiRSIpLEIoImRheSIsMTEpLEIoIndlZWtkYXkiLDExKSxCKCJpc29XZWVrZGF5IiwxMSksSigiZCIsQm8pLEooImUiLEJvKSxKKCJFIixCbyksSigiZGQiLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUud2Vla2RheXNNaW5SZWdleCh0KX0pLEooImRkZCIsZnVuY3Rpb24odCxlKXtyZXR1cm4gZS53ZWVrZGF5c1Nob3J0UmVnZXgodCl9KSxKKCJkZGRkIixmdW5jdGlvbih0LGUpe3JldHVybiBlLndlZWtkYXlzUmVnZXgodCl9KSxpdChbImRkIiwiZGRkIiwiZGRkZCJdLGZ1bmN0aW9uKHQsZSxpLG8pe3ZhciBuPWkuX2xvY2FsZS53ZWVrZGF5c1BhcnNlKHQsbyxpLl9zdHJpY3QpO251bGwhPW4/ZS5kPW46dShpKS5pbnZhbGlkV2Vla2RheT10fSksaXQoWyJkIiwiZSIsIkUiXSxmdW5jdGlvbih0LGUsaSxvKXtlW29dPV8odCl9KTt2YXIgbW49IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLHZuPSJTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQiLnNwbGl0KCJfIiksZ249IlN1X01vX1R1X1dlX1RoX0ZyX1NhIi5zcGxpdCgiXyIpLHluPVpvLGJuPVpvLF9uPVpvO1UoIkgiLFsiSEgiLDJdLDAsImhvdXIiKSxVKCJoIixbImhoIiwyXSwwLFl0KSxVKCJrIixbImtrIiwyXSwwLEd0KSxVKCJobW0iLDAsMCxmdW5jdGlvbigpe3JldHVybiIiK1l0LmFwcGx5KHRoaXMpK1YodGhpcy5taW51dGVzKCksMil9KSxVKCJobW1zcyIsMCwwLGZ1bmN0aW9uKCl7cmV0dXJuIiIrWXQuYXBwbHkodGhpcykrVih0aGlzLm1pbnV0ZXMoKSwyKStWKHRoaXMuc2Vjb25kcygpLDIpfSksVSgiSG1tIiwwLDAsZnVuY3Rpb24oKXtyZXR1cm4iIit0aGlzLmhvdXJzKCkrVih0aGlzLm1pbnV0ZXMoKSwyKX0pLFUoIkhtbXNzIiwwLDAsZnVuY3Rpb24oKXtyZXR1cm4iIit0aGlzLmhvdXJzKCkrVih0aGlzLm1pbnV0ZXMoKSwyKStWKHRoaXMuc2Vjb25kcygpLDIpfSksVnQoImEiLCEwKSxWdCgiQSIsITEpLEwoImhvdXIiLCJoIiksQigiaG91ciIsMTMpLEooImEiLFV0KSxKKCJBIixVdCksSigiSCIsQm8pLEooImgiLEJvKSxKKCJISCIsQm8sUm8pLEooImhoIixCbyxSbyksSigiaG1tIixqbyksSigiaG1tc3MiLEZvKSxKKCJIbW0iLGpvKSxKKCJIbW1zcyIsRm8pLGV0KFsiSCIsIkhIIl0sZW4pLGV0KFsiYSIsIkEiXSxmdW5jdGlvbih0LGUsaSl7aS5faXNQbT1pLl9sb2NhbGUuaXNQTSh0KSxpLl9tZXJpZGllbT10fSksZXQoWyJoIiwiaGgiXSxmdW5jdGlvbih0LGUsaSl7ZVtlbl09Xyh0KSx1KGkpLmJpZ0hvdXI9ITB9KSxldCgiaG1tIixmdW5jdGlvbih0LGUsaSl7dmFyIG89dC5sZW5ndGgtMjtlW2VuXT1fKHQuc3Vic3RyKDAsbykpLGVbb25dPV8odC5zdWJzdHIobykpLHUoaSkuYmlnSG91cj0hMH0pLGV0KCJobW1zcyIsZnVuY3Rpb24odCxlLGkpe3ZhciBvPXQubGVuZ3RoLTQsbj10Lmxlbmd0aC0yO2VbZW5dPV8odC5zdWJzdHIoMCxvKSksZVtvbl09Xyh0LnN1YnN0cihvLDIpKSxlW25uXT1fKHQuc3Vic3RyKG4pKSx1KGkpLmJpZ0hvdXI9ITB9KSxldCgiSG1tIixmdW5jdGlvbih0LGUsaSl7dmFyIG89dC5sZW5ndGgtMjtlW2VuXT1fKHQuc3Vic3RyKDAsbykpLGVbb25dPV8odC5zdWJzdHIobykpfSksZXQoIkhtbXNzIixmdW5jdGlvbih0LGUsaSl7dmFyIG89dC5sZW5ndGgtNCxuPXQubGVuZ3RoLTI7ZVtlbl09Xyh0LnN1YnN0cigwLG8pKSxlW29uXT1fKHQuc3Vic3RyKG8sMikpLGVbbm5dPV8odC5zdWJzdHIobikpfSk7dmFyIHduLHhuPS9bYXBdXC4/bT9cLj8vaSxrbj1GKCJIb3VycyIsITApLE9uPXtjYWxlbmRhcjp3byxsb25nRGF0ZUZvcm1hdDp4byxpbnZhbGlkRGF0ZTprbyxvcmRpbmFsOk9vLG9yZGluYWxQYXJzZTpEbyxyZWxhdGl2ZVRpbWU6U28sbW9udGhzOmRuLG1vbnRoc1Nob3J0OmxuLHdlZWs6Zm4sd2Vla2RheXM6bW4sd2Vla2RheXNNaW46Z24sd2Vla2RheXNTaG9ydDp2bixtZXJpZGllbVBhcnNlOnhufSxEbj17fSxTbj0vXlxzKigoPzpbKy1dXGR7Nn18XGR7NH0pLSg/OlxkXGQtXGRcZHxXXGRcZC1cZHxXXGRcZHxcZFxkXGR8XGRcZCkpKD86KFR8ICkoXGRcZCg/OjpcZFxkKD86OlxkXGQoPzpbLixdXGQrKT8pPyk/KShbXCtcLV1cZFxkKD86Oj9cZFxkKT98XHMqWik/KT8vLENuPS9eXHMqKCg/OlsrLV1cZHs2fXxcZHs0fSkoPzpcZFxkXGRcZHxXXGRcZFxkfFdcZFxkfFxkXGRcZHxcZFxkKSkoPzooVHwgKShcZFxkKD86XGRcZCg/OlxkXGQoPzpbLixdXGQrKT8pPyk/KShbXCtcLV1cZFxkKD86Oj9cZFxkKT98XHMqWik/KT8vLFRuPS9afFsrLV1cZFxkKD86Oj9cZFxkKT8vLEVuPVtbIllZWVlZWS1NTS1ERCIsL1srLV1cZHs2fS1cZFxkLVxkXGQvXSxbIllZWVktTU0tREQiLC9cZHs0fS1cZFxkLVxkXGQvXSxbIkdHR0ctW1ddV1ctRSIsL1xkezR9LVdcZFxkLVxkL10sWyJHR0dHLVtXXVdXIiwvXGR7NH0tV1xkXGQvLCExXSxbIllZWVktREREIiwvXGR7NH0tXGR7M30vXSxbIllZWVktTU0iLC9cZHs0fS1cZFxkLywhMV0sWyJZWVlZWVlNTUREIiwvWystXVxkezEwfS9dLFsiWVlZWU1NREQiLC9cZHs4fS9dLFsiR0dHR1tXXVdXRSIsL1xkezR9V1xkezN9L10sWyJHR0dHW1ddV1ciLC9cZHs0fVdcZHsyfS8sITFdLFsiWVlZWURERCIsL1xkezd9L11dLE1uPVtbIkhIOm1tOnNzLlNTU1MiLC9cZFxkOlxkXGQ6XGRcZFwuXGQrL10sWyJISDptbTpzcyxTU1NTIiwvXGRcZDpcZFxkOlxkXGQsXGQrL10sWyJISDptbTpzcyIsL1xkXGQ6XGRcZDpcZFxkL10sWyJISDptbSIsL1xkXGQ6XGRcZC9dLFsiSEhtbXNzLlNTU1MiLC9cZFxkXGRcZFxkXGRcLlxkKy9dLFsiSEhtbXNzLFNTU1MiLC9cZFxkXGRcZFxkXGQsXGQrL10sWyJISG1tc3MiLC9cZFxkXGRcZFxkXGQvXSxbIkhIbW0iLC9cZFxkXGRcZC9dLFsiSEgiLC9cZFxkL11dLFBuPS9eXC8/RGF0ZVwoKFwtP1xkKykvaTtlLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrPWsoInZhbHVlIHByb3ZpZGVkIGlzIG5vdCBpbiBhIHJlY29nbml6ZWQgSVNPIGZvcm1hdC4gbW9tZW50IGNvbnN0cnVjdGlvbiBmYWxscyBiYWNrIHRvIGpzIERhdGUoKSwgd2hpY2ggaXMgbm90IHJlbGlhYmxlIGFjcm9zcyBhbGwgYnJvd3NlcnMgYW5kIHZlcnNpb25zLiBOb24gSVNPIGRhdGUgZm9ybWF0cyBhcmUgZGlzY291cmFnZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhbiB1cGNvbWluZyBtYWpvciByZWxlYXNlLiBQbGVhc2UgcmVmZXIgdG8gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9qcy1kYXRlLyBmb3IgbW9yZSBpbmZvLiIsZnVuY3Rpb24odCl7dC5fZD1uZXcgRGF0ZSh0Ll9pKyh0Ll91c2VVVEM/IiBVVEMiOiIiKSl9KSxlLklTT184NjAxPWZ1bmN0aW9uKCl7fTt2YXIgSW49aygibW9tZW50KCkubWluIGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQubWF4IGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvbWluLW1heC8iLGZ1bmN0aW9uKCl7dmFyIHQ9eWUuYXBwbHkobnVsbCxhcmd1bWVudHMpO3JldHVybiB0aGlzLmlzVmFsaWQoKSYmdC5pc1ZhbGlkKCk/dDx0aGlzP3RoaXM6dDpmKCl9KSxObj1rKCJtb21lbnQoKS5tYXggaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5taW4gaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LyIsZnVuY3Rpb24oKXt2YXIgdD15ZS5hcHBseShudWxsLGFyZ3VtZW50cyk7cmV0dXJuIHRoaXMuaXNWYWxpZCgpJiZ0LmlzVmFsaWQoKT90PnRoaXM/dGhpczp0OmYoKX0pLFJuPWZ1bmN0aW9uKCl7cmV0dXJuIERhdGUubm93P0RhdGUubm93KCk6K25ldyBEYXRlfTtEZSgiWiIsIjoiKSxEZSgiWloiLCIiKSxKKCJaIixxbyksSigiWloiLHFvKSxldChbIloiLCJaWiJdLGZ1bmN0aW9uKHQsZSxpKXtpLl91c2VVVEM9ITAsaS5fdHptPVNlKHFvLHQpfSk7dmFyIExuPS8oW1wrXC1dfFxkXGQpL2dpO2UudXBkYXRlT2Zmc2V0PWZ1bmN0aW9uKCl7fTt2YXIgem49L14oXC0pPyg/OihcZCopWy4gXSk/KFxkKylcOihcZCspKD86XDooXGQrKShcLlxkKik/KT8kLyxBbj0vXigtKT9QKD86KC0/WzAtOSwuXSopWSk/KD86KC0/WzAtOSwuXSopTSk/KD86KC0/WzAtOSwuXSopVyk/KD86KC0/WzAtOSwuXSopRCk/KD86VCg/OigtP1swLTksLl0qKUgpPyg/OigtP1swLTksLl0qKU0pPyg/OigtP1swLTksLl0qKVMpPyk/JC87RmUuZm49eGUucHJvdG90eXBlO3ZhciBCbj1HZSgxLCJhZGQiKSxqbj1HZSgtMSwic3VidHJhY3QiKTtlLmRlZmF1bHRGb3JtYXQ9IllZWVktTU0tRERUSEg6bW06c3NaIixlLmRlZmF1bHRGb3JtYXRVdGM9IllZWVktTU0tRERUSEg6bW06c3NbWl0iO3ZhciBGbj1rKCJtb21lbnQoKS5sYW5nKCkgaXMgZGVwcmVjYXRlZC4gSW5zdGVhZCwgdXNlIG1vbWVudCgpLmxvY2FsZURhdGEoKSB0byBnZXQgdGhlIGxhbmd1YWdlIGNvbmZpZ3VyYXRpb24uIFVzZSBtb21lbnQoKS5sb2NhbGUoKSB0byBjaGFuZ2UgbGFuZ3VhZ2VzLiIsZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQ/dGhpcy5sb2NhbGVEYXRhKCk6dGhpcy5sb2NhbGUodCl9KTtVKDAsWyJnZyIsMl0sMCxmdW5jdGlvbigpe3JldHVybiB0aGlzLndlZWtZZWFyKCklMTAwfSksVSgwLFsiR0ciLDJdLDAsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc29XZWVrWWVhcigpJTEwMH0pLE9pKCJnZ2dnIiwid2Vla1llYXIiKSxPaSgiZ2dnZ2ciLCJ3ZWVrWWVhciIpLE9pKCJHR0dHIiwiaXNvV2Vla1llYXIiKSxPaSgiR0dHR0ciLCJpc29XZWVrWWVhciIpLEwoIndlZWtZZWFyIiwiZ2ciKSxMKCJpc29XZWVrWWVhciIsIkdHIiksQigid2Vla1llYXIiLDEpLEIoImlzb1dlZWtZZWFyIiwxKSxKKCJHIixWbyksSigiZyIsVm8pLEooIkdHIixCbyxSbyksSigiZ2ciLEJvLFJvKSxKKCJHR0dHIixXbyx6byksSigiZ2dnZyIsV28sem8pLEooIkdHR0dHIixZbyxBbyksSigiZ2dnZ2ciLFlvLEFvKSxpdChbImdnZ2ciLCJnZ2dnZyIsIkdHR0ciLCJHR0dHRyJdLGZ1bmN0aW9uKHQsZSxpLG8pe2Vbby5zdWJzdHIoMCwyKV09Xyh0KX0pLGl0KFsiZ2ciLCJHRyJdLGZ1bmN0aW9uKHQsaSxvLG4pe2lbbl09ZS5wYXJzZVR3b0RpZ2l0WWVhcih0KX0pLFUoIlEiLDAsIlFvIiwicXVhcnRlciIpLEwoInF1YXJ0ZXIiLCJRIiksQigicXVhcnRlciIsNyksSigiUSIsTm8pLGV0KCJRIixmdW5jdGlvbih0LGUpe2VbJG9dPTMqKF8odCktMSl9KSxVKCJEIixbIkREIiwyXSwiRG8iLCJkYXRlIiksTCgiZGF0ZSIsIkQiKSxCKCJkYXRlIiw5KSxKKCJEIixCbyksSigiREQiLEJvLFJvKSxKKCJEbyIsZnVuY3Rpb24odCxlKXtyZXR1cm4gdD9lLl9vcmRpbmFsUGFyc2U6ZS5fb3JkaW5hbFBhcnNlTGVuaWVudH0pLGV0KFsiRCIsIkREIl0sdG4pLGV0KCJEbyIsZnVuY3Rpb24odCxlKXtlW3RuXT1fKHQubWF0Y2goQm8pWzBdLDEwKX0pO3ZhciBIbj1GKCJEYXRlIiwhMCk7VSgiREREIixbIkREREQiLDNdLCJERERvIiwiZGF5T2ZZZWFyIiksTCgiZGF5T2ZZZWFyIiwiREREIiksQigiZGF5T2ZZZWFyIiw0KSxKKCJEREQiLEhvKSxKKCJEREREIixMbyksZXQoWyJEREQiLCJEREREIl0sZnVuY3Rpb24odCxlLGkpe2kuX2RheU9mWWVhcj1fKHQpfSksVSgibSIsWyJtbSIsMl0sMCwibWludXRlIiksTCgibWludXRlIiwibSIpLEIoIm1pbnV0ZSIsMTQpLEooIm0iLEJvKSxKKCJtbSIsQm8sUm8pLGV0KFsibSIsIm1tIl0sb24pO3ZhciBXbj1GKCJNaW51dGVzIiwhMSk7VSgicyIsWyJzcyIsMl0sMCwic2Vjb25kIiksTCgic2Vjb25kIiwicyIpLEIoInNlY29uZCIsMTUpLEooInMiLEJvKSxKKCJzcyIsQm8sUm8pLGV0KFsicyIsInNzIl0sbm4pO3ZhciBZbj1GKCJTZWNvbmRzIiwhMSk7VSgiUyIsMCwwLGZ1bmN0aW9uKCl7cmV0dXJufn4odGhpcy5taWxsaXNlY29uZCgpLzEwMCl9KSxVKDAsWyJTUyIsMl0sMCxmdW5jdGlvbigpe3JldHVybn5+KHRoaXMubWlsbGlzZWNvbmQoKS8xMCl9KSxVKDAsWyJTU1MiLDNdLDAsIm1pbGxpc2Vjb25kIiksVSgwLFsiU1NTUyIsNF0sMCxmdW5jdGlvbigpe3JldHVybiAxMCp0aGlzLm1pbGxpc2Vjb25kKCl9KSxVKDAsWyJTU1NTUyIsNV0sMCxmdW5jdGlvbigpe3JldHVybiAxMDAqdGhpcy5taWxsaXNlY29uZCgpfSksVSgwLFsiU1NTU1NTIiw2XSwwLGZ1bmN0aW9uKCl7cmV0dXJuIDFlMyp0aGlzLm1pbGxpc2Vjb25kKCl9KSxVKDAsWyJTU1NTU1NTIiw3XSwwLGZ1bmN0aW9uKCl7cmV0dXJuIDFlNCp0aGlzLm1pbGxpc2Vjb25kKCl9KSxVKDAsWyJTU1NTU1NTUyIsOF0sMCxmdW5jdGlvbigpe3JldHVybiAxZTUqdGhpcy5taWxsaXNlY29uZCgpfSksVSgwLFsiU1NTU1NTU1NTIiw5XSwwLGZ1bmN0aW9uKCl7cmV0dXJuIDFlNip0aGlzLm1pbGxpc2Vjb25kKCl9KSxMKCJtaWxsaXNlY29uZCIsIm1zIiksQigibWlsbGlzZWNvbmQiLDE2KSxKKCJTIixIbyxObyksSigiU1MiLEhvLFJvKSxKKCJTU1MiLEhvLExvKTt2YXIgR247Zm9yKEduPSJTU1NTIjtHbi5sZW5ndGg8PTk7R24rPSJTIilKKEduLEdvKTtmb3IoR249IlMiO0duLmxlbmd0aDw9OTtHbis9IlMiKWV0KEduLE5pKTt2YXIgVm49RigiTWlsbGlzZWNvbmRzIiwhMSk7VSgieiIsMCwwLCJ6b25lQWJiciIpLFUoInp6IiwwLDAsInpvbmVOYW1lIik7dmFyIFVuPWcucHJvdG90eXBlO1VuLmFkZD1CbixVbi5jYWxlbmRhcj1xZSxVbi5jbG9uZT1YZSxVbi5kaWZmPWVpLFVuLmVuZE9mPXBpLFVuLmZvcm1hdD1zaSxVbi5mcm9tPXJpLFVuLmZyb21Ob3c9YWksVW4udG89aGksVW4udG9Ob3c9ZGksVW4uZ2V0PVksVW4uaW52YWxpZEF0PXhpLFVuLmlzQWZ0ZXI9WmUsVW4uaXNCZWZvcmU9S2UsVW4uaXNCZXR3ZWVuPUplLFVuLmlzU2FtZT1RZSxVbi5pc1NhbWVPckFmdGVyPSRlLFVuLmlzU2FtZU9yQmVmb3JlPXRpLFVuLmlzVmFsaWQ9X2ksVW4ubGFuZz1GbixVbi5sb2NhbGU9bGksVW4ubG9jYWxlRGF0YT1jaSxVbi5tYXg9Tm4sVW4ubWluPUluLFVuLnBhcnNpbmdGbGFncz13aSxVbi5zZXQ9RyxVbi5zdGFydE9mPXVpLFVuLnN1YnRyYWN0PWpuLFVuLnRvQXJyYXk9Z2ksVW4udG9PYmplY3Q9eWksVW4udG9EYXRlPXZpLFVuLnRvSVNPU3RyaW5nPW5pLFVuLnRvSlNPTj1iaSxVbi50b1N0cmluZz1vaSxVbi51bml4PW1pLFVuLnZhbHVlT2Y9ZmksVW4uY3JlYXRpb25EYXRhPWtpLFVuLnllYXI9cG4sVW4uaXNMZWFwWWVhcj1ndCxVbi53ZWVrWWVhcj1EaSxVbi5pc29XZWVrWWVhcj1TaSxVbi5xdWFydGVyPVVuLnF1YXJ0ZXJzPVBpLFVuLm1vbnRoPWx0LFVuLmRheXNJbk1vbnRoPWN0LFVuLndlZWs9VW4ud2Vla3M9Q3QsVW4uaXNvV2Vlaz1Vbi5pc29XZWVrcz1UdCxVbi53ZWVrc0luWWVhcj1UaSxVbi5pc29XZWVrc0luWWVhcj1DaSxVbi5kYXRlPUhuLFVuLmRheT1Vbi5kYXlzPXp0LFVuLndlZWtkYXk9QXQsVW4uaXNvV2Vla2RheT1CdCxVbi5kYXlPZlllYXI9SWksVW4uaG91cj1Vbi5ob3Vycz1rbixVbi5taW51dGU9VW4ubWludXRlcz1XbixVbi5zZWNvbmQ9VW4uc2Vjb25kcz1ZbixVbi5taWxsaXNlY29uZD1Vbi5taWxsaXNlY29uZHM9Vm4sVW4udXRjT2Zmc2V0PUVlLFVuLnV0Yz1QZSxVbi5sb2NhbD1JZSxVbi5wYXJzZVpvbmU9TmUsVW4uaGFzQWxpZ25lZEhvdXJPZmZzZXQ9UmUsVW4uaXNEU1Q9TGUsVW4uaXNMb2NhbD1BZSxVbi5pc1V0Y09mZnNldD1CZSxVbi5pc1V0Yz1qZSxVbi5pc1VUQz1qZSxVbi56b25lQWJicj1SaSxVbi56b25lTmFtZT1MaSxVbi5kYXRlcz1rKCJkYXRlcyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgZGF0ZSBpbnN0ZWFkLiIsSG4pLFVuLm1vbnRocz1rKCJtb250aHMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbnRoIGluc3RlYWQiLGx0KSxVbi55ZWFycz1rKCJ5ZWFycyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgeWVhciBpbnN0ZWFkIixwbiksVW4uem9uZT1rKCJtb21lbnQoKS56b25lIGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQoKS51dGNPZmZzZXQgaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy96b25lLyIsTWUpLFVuLmlzRFNUU2hpZnRlZD1rKCJpc0RTVFNoaWZ0ZWQgaXMgZGVwcmVjYXRlZC4gU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvZHN0LXNoaWZ0ZWQvIGZvciBtb3JlIGluZm9ybWF0aW9uIix6ZSk7dmFyIHFuPVVuLFhuPVQucHJvdG90eXBlO1huLmNhbGVuZGFyPUUsWG4ubG9uZ0RhdGVGb3JtYXQ9TSxYbi5pbnZhbGlkRGF0ZT1QLFhuLm9yZGluYWw9SSxYbi5wcmVwYXJzZT1CaSxYbi5wb3N0Zm9ybWF0PUJpLFhuLnJlbGF0aXZlVGltZT1OLFhuLnBhc3RGdXR1cmU9UixYbi5zZXQ9UyxYbi5tb250aHM9c3QsWG4ubW9udGhzU2hvcnQ9cnQsWG4ubW9udGhzUGFyc2U9aHQsWG4ubW9udGhzUmVnZXg9cHQsWG4ubW9udGhzU2hvcnRSZWdleD11dCxYbi53ZWVrPU90LFhuLmZpcnN0RGF5T2ZZZWFyPVN0LFhuLmZpcnN0RGF5T2ZXZWVrPUR0LFhuLndlZWtkYXlzPVB0LFhuLndlZWtkYXlzTWluPU50LFhuLndlZWtkYXlzU2hvcnQ9SXQsWG4ud2Vla2RheXNQYXJzZT1MdCxYbi53ZWVrZGF5c1JlZ2V4PWp0LFhuLndlZWtkYXlzU2hvcnRSZWdleD1GdCxYbi53ZWVrZGF5c01pblJlZ2V4PUh0LFhuLmlzUE09cXQsWG4ubWVyaWRpZW09WHQsUXQoImVuIix7b3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHRofHN0fG5kfHJkKS8sb3JkaW5hbDpmdW5jdGlvbih0KXt2YXIgZT10JTEwLGk9MT09PV8odCUxMDAvMTApPyJ0aCI6MT09PWU/InN0IjoyPT09ZT8ibmQiOjM9PT1lPyJyZCI6InRoIjtyZXR1cm4gdCtpfX0pLGUubGFuZz1rKCJtb21lbnQubGFuZyBpcyBkZXByZWNhdGVkLiBVc2UgbW9tZW50LmxvY2FsZSBpbnN0ZWFkLiIsUXQpLGUubGFuZ0RhdGE9aygibW9tZW50LmxhbmdEYXRhIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb21lbnQubG9jYWxlRGF0YSBpbnN0ZWFkLiIsZWUpO3ZhciBabj1NYXRoLmFicyxLbj1vbygibXMiKSxKbj1vbygicyIpLFFuPW9vKCJtIiksJG49b28oImgiKSx0cz1vbygiZCIpLGVzPW9vKCJ3IiksaXM9b28oIk0iKSxvcz1vbygieSIpLG5zPXNvKCJtaWxsaXNlY29uZHMiKSxzcz1zbygic2Vjb25kcyIpLHJzPXNvKCJtaW51dGVzIiksYXM9c28oImhvdXJzIiksaHM9c28oImRheXMiKSxkcz1zbygibW9udGhzIiksbHM9c28oInllYXJzIiksY3M9TWF0aC5yb3VuZCx1cz17czo0NSxtOjQ1LGg6MjIsZDoyNixNOjExfSxwcz1NYXRoLmFicyxmcz14ZS5wcm90b3R5cGU7ZnMuYWJzPXFpLGZzLmFkZD1aaSxmcy5zdWJ0cmFjdD1LaSxmcy5hcz1lbyxmcy5hc01pbGxpc2Vjb25kcz1Lbixmcy5hc1NlY29uZHM9Sm4sZnMuYXNNaW51dGVzPVFuLGZzLmFzSG91cnM9JG4sZnMuYXNEYXlzPXRzLGZzLmFzV2Vla3M9ZXMsZnMuYXNNb250aHM9aXMsZnMuYXNZZWFycz1vcyxmcy52YWx1ZU9mPWlvLGZzLl9idWJibGU9UWksZnMuZ2V0PW5vLGZzLm1pbGxpc2Vjb25kcz1ucyxmcy5zZWNvbmRzPXNzLGZzLm1pbnV0ZXM9cnMsZnMuaG91cnM9YXMsZnMuZGF5cz1ocyxmcy53ZWVrcz1ybyxmcy5tb250aHM9ZHMsZnMueWVhcnM9bHMsZnMuaHVtYW5pemU9dW8sZnMudG9JU09TdHJpbmc9cG8sZnMudG9TdHJpbmc9cG8sZnMudG9KU09OPXBvLGZzLmxvY2FsZT1saSxmcy5sb2NhbGVEYXRhPWNpLGZzLnRvSXNvU3RyaW5nPWsoInRvSXNvU3RyaW5nKCkgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSB0b0lTT1N0cmluZygpIGluc3RlYWQgKG5vdGljZSB0aGUgY2FwaXRhbHMpIixwbyksZnMubGFuZz1GbixVKCJYIiwwLDAsInVuaXgiKSxVKCJ4IiwwLDAsInZhbHVlT2YiKSxKKCJ4IixWbyksSigiWCIsWG8pLGV0KCJYIixmdW5jdGlvbih0LGUsaSl7aS5fZD1uZXcgRGF0ZSgxZTMqcGFyc2VGbG9hdCh0LDEwKSl9KSxldCgieCIsZnVuY3Rpb24odCxlLGkpe2kuX2Q9bmV3IERhdGUoXyh0KSl9KSxlLnZlcnNpb249IjIuMTUuMiIsaSh5ZSksZS5mbj1xbixlLm1pbj1fZSxlLm1heD13ZSxlLm5vdz1SbixlLnV0Yz1sLGUudW5peD16aSxlLm1vbnRocz1XaSxlLmlzRGF0ZT1yLGUubG9jYWxlPVF0LGUuaW52YWxpZD1mLGUuZHVyYXRpb249RmUsZS5pc01vbWVudD15LGUud2Vla2RheXM9R2ksZS5wYXJzZVpvbmU9QWksZS5sb2NhbGVEYXRhPWVlLGUuaXNEdXJhdGlvbj1rZSxlLm1vbnRoc1Nob3J0PVlpLGUud2Vla2RheXNNaW49VWksZS5kZWZpbmVMb2NhbGU9JHQsZS51cGRhdGVMb2NhbGU9dGUsZS5sb2NhbGVzPWllLGUud2Vla2RheXNTaG9ydD1WaSxlLm5vcm1hbGl6ZVVuaXRzPXosZS5yZWxhdGl2ZVRpbWVSb3VuZGluZz1sbyxlLnJlbGF0aXZlVGltZVRocmVzaG9sZD1jbyxlLmNhbGVuZGFyRm9ybWF0PVVlLGUucHJvdG90eXBlPXFuO3ZhciBtcz1lO3JldHVybiBtc30pfSkuY2FsbChlLGkoNCkodCkpfSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdC53ZWJwYWNrUG9seWZpbGx8fCh0LmRlcHJlY2F0ZT1mdW5jdGlvbigpe30sdC5wYXRocz1bXSx0LmNoaWxkcmVuPVtdLHQud2VicGFja1BvbHlmaWxsPTEpLHR9fSxmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIGkodCl7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIrdCsiJy4iKX1pLmtleXM9ZnVuY3Rpb24oKXtyZXR1cm5bXX0saS5yZXNvbHZlPWksdC5leHBvcnRzPWksaS5pZD01fSxmdW5jdGlvbih0LGUpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBpKHQsZSxpKXt2YXIgbz1lJiZpfHwwLG49MDtmb3IoZT1lfHxbXSx0LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWzAtOWEtZl17Mn0vZyxmdW5jdGlvbih0KXtuPDE2JiYoZVtvK24rK109Y1t0XSl9KTtuPDE2OyllW28rbisrXT0wO3JldHVybiBlfWZ1bmN0aW9uIG8odCxlKXt2YXIgaT1lfHwwLG89bDtyZXR1cm4gb1t0W2krK11dK29bdFtpKytdXStvW3RbaSsrXV0rb1t0W2krK11dKyItIitvW3RbaSsrXV0rb1t0W2krK11dKyItIitvW3RbaSsrXV0rb1t0W2krK11dKyItIitvW3RbaSsrXV0rb1t0W2krK11dKyItIitvW3RbaSsrXV0rb1t0W2krK11dK29bdFtpKytdXStvW3RbaSsrXV0rb1t0W2krK11dK29bdFtpKytdXX1mdW5jdGlvbiBuKHQsZSxpKXt2YXIgbj1lJiZpfHwwLHM9ZXx8W107dD10fHx7fTt2YXIgcj12b2lkIDAhPT10LmNsb2Nrc2VxP3QuY2xvY2tzZXE6bSxhPXZvaWQgMCE9PXQubXNlY3M/dC5tc2VjczoobmV3IERhdGUpLmdldFRpbWUoKSxoPXZvaWQgMCE9PXQubnNlY3M/dC5uc2VjczpnKzEsZD1hLXYrKGgtZykvMWU0O2lmKGQ8MCYmdm9pZCAwPT09dC5jbG9ja3NlcSYmKHI9cisxJjE2MzgzKSwoZDwwfHxhPnYpJiZ2b2lkIDA9PT10Lm5zZWNzJiYoaD0wKSxoPj0xZTQpdGhyb3cgbmV3IEVycm9yKCJ1dWlkLnYxKCk6IENhbid0IGNyZWF0ZSBtb3JlIHRoYW4gMTBNIHV1aWRzL3NlYyIpO3Y9YSxnPWgsbT1yLGErPTEyMjE5MjkyOGU1O3ZhciBsPSgxZTQqKDI2ODQzNTQ1NSZhKStoKSU0Mjk0OTY3Mjk2O3NbbisrXT1sPj4+MjQmMjU1LHNbbisrXT1sPj4+MTYmMjU1LHNbbisrXT1sPj4+OCYyNTUsc1tuKytdPTI1NSZsO3ZhciBjPWEvNDI5NDk2NzI5NioxZTQmMjY4NDM1NDU1O3NbbisrXT1jPj4+OCYyNTUsc1tuKytdPTI1NSZjLHNbbisrXT1jPj4+MjQmMTV8MTYsc1tuKytdPWM+Pj4xNiYyNTUsc1tuKytdPXI+Pj44fDEyOCxzW24rK109MjU1JnI7Zm9yKHZhciB1PXQubm9kZXx8ZixwPTA7cDw2O3ArKylzW24rcF09dVtwXTtyZXR1cm4gZT9lOm8ocyl9ZnVuY3Rpb24gcyh0LGUsaSl7dmFyIG49ZSYmaXx8MDsic3RyaW5nIj09dHlwZW9mIHQmJihlPSJiaW5hcnkiPT10P25ldyBBcnJheSgxNik6bnVsbCwKdD1udWxsKSx0PXR8fHt9O3ZhciBzPXQucmFuZG9tfHwodC5ybmd8fHIpKCk7aWYoc1s2XT0xNSZzWzZdfDY0LHNbOF09NjMmc1s4XXwxMjgsZSlmb3IodmFyIGE9MDthPDE2O2ErKyllW24rYV09c1thXTtyZXR1cm4gZXx8byhzKX12YXIgcixhPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzoidW5kZWZpbmVkIiE9dHlwZW9mIGU/ZTpudWxsO2lmKGEmJmEuY3J5cHRvJiZjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKXt2YXIgaD1uZXcgVWludDhBcnJheSgxNik7cj1mdW5jdGlvbigpe3JldHVybiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGgpLGh9fWlmKCFyKXt2YXIgZD1uZXcgQXJyYXkoMTYpO3I9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZT0wO2U8MTY7ZSsrKTA9PT0oMyZlKSYmKHQ9NDI5NDk2NzI5NipNYXRoLnJhbmRvbSgpKSxkW2VdPXQ+Pj4oKDMmZSk8PDMpJjI1NTtyZXR1cm4gZH19Zm9yKHZhciBsPVtdLGM9e30sdT0wO3U8MjU2O3UrKylsW3VdPSh1KzI1NikudG9TdHJpbmcoMTYpLnN1YnN0cigxKSxjW2xbdV1dPXU7dmFyIHA9cigpLGY9WzF8cFswXSxwWzFdLHBbMl0scFszXSxwWzRdLHBbNV1dLG09MTYzODMmKHBbNl08PDh8cFs3XSksdj0wLGc9MCx5PXM7eS52MT1uLHkudjQ9cyx5LnBhcnNlPWkseS51bnBhcnNlPW8sdC5leHBvcnRzPXl9KS5jYWxsKGUsZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30oKSl9LGZ1bmN0aW9uKHQsZSxpKXtlLnV0aWw9aSgxKSxlLkRPTXV0aWw9aSg4KSxlLkRhdGFTZXQ9aSg5KSxlLkRhdGFWaWV3PWkoMTEpLGUuUXVldWU9aSgxMCksZS5HcmFwaDNkPWkoMTIpLGUuZ3JhcGgzZD17Q2FtZXJhOmkoMTYpLEZpbHRlcjppKDE3KSxQb2ludDJkOmkoMTUpLFBvaW50M2Q6aSgxNCksU2xpZGVyOmkoMTgpLFN0ZXBOdW1iZXI6aSgxOSl9LGUubW9tZW50PWkoMiksZS5IYW1tZXI9aSgyMiksZS5rZXljaGFybT1pKDI1KX0sZnVuY3Rpb24odCxlKXtlLnByZXBhcmVFbGVtZW50cz1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdCl0Lmhhc093blByb3BlcnR5KGUpJiYodFtlXS5yZWR1bmRhbnQ9dFtlXS51c2VkLHRbZV0udXNlZD1bXSl9LGUuY2xlYW51cEVsZW1lbnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0KWlmKHQuaGFzT3duUHJvcGVydHkoZSkmJnRbZV0ucmVkdW5kYW50KXtmb3IodmFyIGk9MDtpPHRbZV0ucmVkdW5kYW50Lmxlbmd0aDtpKyspdFtlXS5yZWR1bmRhbnRbaV0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0W2VdLnJlZHVuZGFudFtpXSk7dFtlXS5yZWR1bmRhbnQ9W119fSxlLnJlc2V0RWxlbWVudHM9ZnVuY3Rpb24odCl7ZS5wcmVwYXJlRWxlbWVudHModCksZS5jbGVhbnVwRWxlbWVudHModCksZS5wcmVwYXJlRWxlbWVudHModCl9LGUuZ2V0U1ZHRWxlbWVudD1mdW5jdGlvbih0LGUsaSl7dmFyIG87cmV0dXJuIGUuaGFzT3duUHJvcGVydHkodCk/ZVt0XS5yZWR1bmRhbnQubGVuZ3RoPjA/KG89ZVt0XS5yZWR1bmRhbnRbMF0sZVt0XS5yZWR1bmRhbnQuc2hpZnQoKSk6KG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsdCksaS5hcHBlbmRDaGlsZChvKSk6KG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsdCksZVt0XT17dXNlZDpbXSxyZWR1bmRhbnQ6W119LGkuYXBwZW5kQ2hpbGQobykpLGVbdF0udXNlZC5wdXNoKG8pLG99LGUuZ2V0RE9NRWxlbWVudD1mdW5jdGlvbih0LGUsaSxvKXt2YXIgbjtyZXR1cm4gZS5oYXNPd25Qcm9wZXJ0eSh0KT9lW3RdLnJlZHVuZGFudC5sZW5ndGg+MD8obj1lW3RdLnJlZHVuZGFudFswXSxlW3RdLnJlZHVuZGFudC5zaGlmdCgpKToobj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KHQpLHZvaWQgMCE9PW8/aS5pbnNlcnRCZWZvcmUobixvKTppLmFwcGVuZENoaWxkKG4pKToobj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KHQpLGVbdF09e3VzZWQ6W10scmVkdW5kYW50OltdfSx2b2lkIDAhPT1vP2kuaW5zZXJ0QmVmb3JlKG4sbyk6aS5hcHBlbmRDaGlsZChuKSksZVt0XS51c2VkLnB1c2gobiksbn0sZS5kcmF3UG9pbnQ9ZnVuY3Rpb24odCxpLG8sbixzLHIpe3ZhciBhO2lmKCJjaXJjbGUiPT1vLnN0eWxlPyhhPWUuZ2V0U1ZHRWxlbWVudCgiY2lyY2xlIixuLHMpLGEuc2V0QXR0cmlidXRlTlMobnVsbCwiY3giLHQpLGEuc2V0QXR0cmlidXRlTlMobnVsbCwiY3kiLGkpLGEuc2V0QXR0cmlidXRlTlMobnVsbCwiciIsLjUqby5zaXplKSk6KGE9ZS5nZXRTVkdFbGVtZW50KCJyZWN0IixuLHMpLGEuc2V0QXR0cmlidXRlTlMobnVsbCwieCIsdC0uNSpvLnNpemUpLGEuc2V0QXR0cmlidXRlTlMobnVsbCwieSIsaS0uNSpvLnNpemUpLGEuc2V0QXR0cmlidXRlTlMobnVsbCwid2lkdGgiLG8uc2l6ZSksYS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJoZWlnaHQiLG8uc2l6ZSkpLHZvaWQgMCE9PW8uc3R5bGVzJiZhLnNldEF0dHJpYnV0ZU5TKG51bGwsInN0eWxlIixvLnN0eWxlcyksYS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJjbGFzcyIsby5jbGFzc05hbWUrIiB2aXMtcG9pbnQiKSxyKXt2YXIgaD1lLmdldFNWR0VsZW1lbnQoInRleHQiLG4scyk7ci54T2Zmc2V0JiYodCs9ci54T2Zmc2V0KSxyLnlPZmZzZXQmJihpKz1yLnlPZmZzZXQpLHIuY29udGVudCYmKGgudGV4dENvbnRlbnQ9ci5jb250ZW50KSxyLmNsYXNzTmFtZSYmaC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJjbGFzcyIsci5jbGFzc05hbWUrIiB2aXMtbGFiZWwiKSxoLnNldEF0dHJpYnV0ZU5TKG51bGwsIngiLHQpLGguc2V0QXR0cmlidXRlTlMobnVsbCwieSIsaSl9cmV0dXJuIGF9LGUuZHJhd0Jhcj1mdW5jdGlvbih0LGksbyxuLHMscixhLGgpe2lmKDAhPW4pe248MCYmKG4qPS0xLGktPW4pO3ZhciBkPWUuZ2V0U1ZHRWxlbWVudCgicmVjdCIscixhKTtkLnNldEF0dHJpYnV0ZU5TKG51bGwsIngiLHQtLjUqbyksZC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ5IixpKSxkLnNldEF0dHJpYnV0ZU5TKG51bGwsIndpZHRoIixvKSxkLnNldEF0dHJpYnV0ZU5TKG51bGwsImhlaWdodCIsbiksZC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJjbGFzcyIscyksaCYmZC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJzdHlsZSIsaCl9fX0sZnVuY3Rpb24odCxlLGkpe2Z1bmN0aW9uIG8odCxlKXtpZih0JiYhQXJyYXkuaXNBcnJheSh0KSYmKGU9dCx0PW51bGwpLHRoaXMuX29wdGlvbnM9ZXx8e30sdGhpcy5fZGF0YT17fSx0aGlzLmxlbmd0aD0wLHRoaXMuX2ZpZWxkSWQ9dGhpcy5fb3B0aW9ucy5maWVsZElkfHwiaWQiLHRoaXMuX3R5cGU9e30sdGhpcy5fb3B0aW9ucy50eXBlKWZvcih2YXIgaT1PYmplY3Qua2V5cyh0aGlzLl9vcHRpb25zLnR5cGUpLG89MCxuPWkubGVuZ3RoO288bjtvKyspe3ZhciBzPWlbb10scj10aGlzLl9vcHRpb25zLnR5cGVbc107IkRhdGUiPT1yfHwiSVNPRGF0ZSI9PXJ8fCJBU1BEYXRlIj09cj90aGlzLl90eXBlW3NdPSJEYXRlIjp0aGlzLl90eXBlW3NdPXJ9aWYodGhpcy5fb3B0aW9ucy5jb252ZXJ0KXRocm93IG5ldyBFcnJvcignT3B0aW9uICJjb252ZXJ0IiBpcyBkZXByZWNhdGVkLiBVc2UgInR5cGUiIGluc3RlYWQuJyk7dGhpcy5fc3Vic2NyaWJlcnM9e30sdCYmdGhpcy5hZGQodCksdGhpcy5zZXRPcHRpb25zKGUpfXZhciBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxzPWkoMSkscj1pKDEwKTtvLnByb3RvdHlwZS5zZXRPcHRpb25zPWZ1bmN0aW9uKHQpe3QmJnZvaWQgMCE9PXQucXVldWUmJih0LnF1ZXVlPT09ITE/dGhpcy5fcXVldWUmJih0aGlzLl9xdWV1ZS5kZXN0cm95KCksZGVsZXRlIHRoaXMuX3F1ZXVlKToodGhpcy5fcXVldWV8fCh0aGlzLl9xdWV1ZT1yLmV4dGVuZCh0aGlzLHtyZXBsYWNlOlsiYWRkIiwidXBkYXRlIiwicmVtb3ZlIl19KSksIm9iamVjdCI9PT1uKHQucXVldWUpJiZ0aGlzLl9xdWV1ZS5zZXRPcHRpb25zKHQucXVldWUpKSl9LG8ucHJvdG90eXBlLm9uPWZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5fc3Vic2NyaWJlcnNbdF07aXx8KGk9W10sdGhpcy5fc3Vic2NyaWJlcnNbdF09aSksaS5wdXNoKHtjYWxsYmFjazplfSl9LG8ucHJvdG90eXBlLnN1YnNjcmliZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiRGF0YVNldC5zdWJzY3JpYmUgaXMgZGVwcmVjYXRlZC4gVXNlIERhdGFTZXQub24gaW5zdGVhZC4iKX0sby5wcm90b3R5cGUub2ZmPWZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5fc3Vic2NyaWJlcnNbdF07aSYmKHRoaXMuX3N1YnNjcmliZXJzW3RdPWkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNhbGxiYWNrIT1lfSkpfSxvLnByb3RvdHlwZS51bnN1YnNjcmliZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiRGF0YVNldC51bnN1YnNjcmliZSBpcyBkZXByZWNhdGVkLiBVc2UgRGF0YVNldC5vZmYgaW5zdGVhZC4iKX0sby5wcm90b3R5cGUuX3RyaWdnZXI9ZnVuY3Rpb24odCxlLGkpe2lmKCIqIj09dCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCB0cmlnZ2VyIGV2ZW50ICoiKTt2YXIgbz1bXTt0IGluIHRoaXMuX3N1YnNjcmliZXJzJiYobz1vLmNvbmNhdCh0aGlzLl9zdWJzY3JpYmVyc1t0XSkpLCIqImluIHRoaXMuX3N1YnNjcmliZXJzJiYobz1vLmNvbmNhdCh0aGlzLl9zdWJzY3JpYmVyc1siKiJdKSk7Zm9yKHZhciBuPTAscz1vLmxlbmd0aDtuPHM7bisrKXt2YXIgcj1vW25dO3IuY2FsbGJhY2smJnIuY2FsbGJhY2sodCxlLGl8fG51bGwpfX0sby5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQsZSl7dmFyIGksbz1bXSxuPXRoaXM7aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IodmFyIHM9MCxyPXQubGVuZ3RoO3M8cjtzKyspaT1uLl9hZGRJdGVtKHRbc10pLG8ucHVzaChpKTtlbHNle2lmKCEodCBpbnN0YW5jZW9mIE9iamVjdCkpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGRhdGFUeXBlIik7aT1uLl9hZGRJdGVtKHQpLG8ucHVzaChpKX1yZXR1cm4gby5sZW5ndGgmJnRoaXMuX3RyaWdnZXIoImFkZCIse2l0ZW1zOm99LGUpLG99LG8ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LGUpe3ZhciBpPVtdLG89W10sbj1bXSxyPVtdLGE9dGhpcyxoPWEuX2ZpZWxkSWQsZD1mdW5jdGlvbih0KXt2YXIgZT10W2hdO2lmKGEuX2RhdGFbZV0pe3ZhciBkPXMuZXh0ZW5kKHt9LGEuX2RhdGFbZV0pO2U9YS5fdXBkYXRlSXRlbSh0KSxvLnB1c2goZSksci5wdXNoKHQpLG4ucHVzaChkKX1lbHNlIGU9YS5fYWRkSXRlbSh0KSxpLnB1c2goZSl9O2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKHZhciBsPTAsYz10Lmxlbmd0aDtsPGM7bCsrKXRbbF1pbnN0YW5jZW9mIE9iamVjdD9kKHRbbF0pOmNvbnNvbGUud2FybigiSWdub3JpbmcgaW5wdXQgaXRlbSwgd2hpY2ggaXMgbm90IGFuIG9iamVjdCBhdCBpbmRleCAiK2wpO2Vsc2V7aWYoISh0IGluc3RhbmNlb2YgT2JqZWN0KSl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gZGF0YVR5cGUiKTtkKHQpfWlmKGkubGVuZ3RoJiZ0aGlzLl90cmlnZ2VyKCJhZGQiLHtpdGVtczppfSxlKSxvLmxlbmd0aCl7dmFyIHU9e2l0ZW1zOm8sb2xkRGF0YTpuLGRhdGE6cn07dGhpcy5fdHJpZ2dlcigidXBkYXRlIix1LGUpfXJldHVybiBpLmNvbmNhdChvKX0sby5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3ZhciBlLGksbyxuPXRoaXMscj1zLmdldFR5cGUoYXJndW1lbnRzWzBdKTsiU3RyaW5nIj09cnx8Ik51bWJlciI9PXI/KGU9YXJndW1lbnRzWzBdLG89YXJndW1lbnRzWzFdKToiQXJyYXkiPT1yPyhpPWFyZ3VtZW50c1swXSxvPWFyZ3VtZW50c1sxXSk6bz1hcmd1bWVudHNbMF07dmFyIGE7aWYobyYmby5yZXR1cm5UeXBlKXt2YXIgaD1bIkFycmF5IiwiT2JqZWN0Il07YT1oLmluZGV4T2Yoby5yZXR1cm5UeXBlKT09LTE/IkFycmF5IjpvLnJldHVyblR5cGV9ZWxzZSBhPSJBcnJheSI7dmFyIGQsbCxjLHUscCxmPW8mJm8udHlwZXx8dGhpcy5fb3B0aW9ucy50eXBlLG09byYmby5maWx0ZXIsdj1bXTtpZih2b2lkIDAhPWUpZD1uLl9nZXRJdGVtKGUsZiksZCYmbSYmIW0oZCkmJihkPW51bGwpO2Vsc2UgaWYodm9pZCAwIT1pKWZvcih1PTAscD1pLmxlbmd0aDt1PHA7dSsrKWQ9bi5fZ2V0SXRlbShpW3VdLGYpLG0mJiFtKGQpfHx2LnB1c2goZCk7ZWxzZSBmb3IobD1PYmplY3Qua2V5cyh0aGlzLl9kYXRhKSx1PTAscD1sLmxlbmd0aDt1PHA7dSsrKWM9bFt1XSxkPW4uX2dldEl0ZW0oYyxmKSxtJiYhbShkKXx8di5wdXNoKGQpO2lmKG8mJm8ub3JkZXImJnZvaWQgMD09ZSYmdGhpcy5fc29ydCh2LG8ub3JkZXIpLG8mJm8uZmllbGRzKXt2YXIgZz1vLmZpZWxkcztpZih2b2lkIDAhPWUpZD10aGlzLl9maWx0ZXJGaWVsZHMoZCxnKTtlbHNlIGZvcih1PTAscD12Lmxlbmd0aDt1PHA7dSsrKXZbdV09dGhpcy5fZmlsdGVyRmllbGRzKHZbdV0sZyl9aWYoIk9iamVjdCI9PWEpe3ZhciB5LGI9e307Zm9yKHU9MCxwPXYubGVuZ3RoO3U8cDt1KyspeT12W3VdLGJbeS5pZF09eTtyZXR1cm4gYn1yZXR1cm4gdm9pZCAwIT1lP2Q6dn0sby5wcm90b3R5cGUuZ2V0SWRzPWZ1bmN0aW9uKHQpe3ZhciBlLGksbyxuLHMscj10aGlzLl9kYXRhLGE9dCYmdC5maWx0ZXIsaD10JiZ0Lm9yZGVyLGQ9dCYmdC50eXBlfHx0aGlzLl9vcHRpb25zLnR5cGUsbD1PYmplY3Qua2V5cyhyKSxjPVtdO2lmKGEpaWYoaCl7Zm9yKHM9W10sZT0wLGk9bC5sZW5ndGg7ZTxpO2UrKylvPWxbZV0sbj10aGlzLl9nZXRJdGVtKG8sZCksYShuKSYmcy5wdXNoKG4pO2Zvcih0aGlzLl9zb3J0KHMsaCksZT0wLGk9cy5sZW5ndGg7ZTxpO2UrKyljLnB1c2goc1tlXVt0aGlzLl9maWVsZElkXSl9ZWxzZSBmb3IoZT0wLGk9bC5sZW5ndGg7ZTxpO2UrKylvPWxbZV0sbj10aGlzLl9nZXRJdGVtKG8sZCksYShuKSYmYy5wdXNoKG5bdGhpcy5fZmllbGRJZF0pO2Vsc2UgaWYoaCl7Zm9yKHM9W10sZT0wLGk9bC5sZW5ndGg7ZTxpO2UrKylvPWxbZV0scy5wdXNoKHJbb10pO2Zvcih0aGlzLl9zb3J0KHMsaCksZT0wLGk9cy5sZW5ndGg7ZTxpO2UrKyljLnB1c2goc1tlXVt0aGlzLl9maWVsZElkXSl9ZWxzZSBmb3IoZT0wLGk9bC5sZW5ndGg7ZTxpO2UrKylvPWxbZV0sbj1yW29dLGMucHVzaChuW3RoaXMuX2ZpZWxkSWRdKTtyZXR1cm4gY30sby5wcm90b3R5cGUuZ2V0RGF0YVNldD1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxvLnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKHQsZSl7dmFyIGksbyxuLHMscj1lJiZlLmZpbHRlcixhPWUmJmUudHlwZXx8dGhpcy5fb3B0aW9ucy50eXBlLGg9dGhpcy5fZGF0YSxkPU9iamVjdC5rZXlzKGgpO2lmKGUmJmUub3JkZXIpe3ZhciBsPXRoaXMuZ2V0KGUpO2ZvcihpPTAsbz1sLmxlbmd0aDtpPG87aSsrKW49bFtpXSxzPW5bdGhpcy5fZmllbGRJZF0sdChuLHMpfWVsc2UgZm9yKGk9MCxvPWQubGVuZ3RoO2k8bztpKyspcz1kW2ldLG49dGhpcy5fZ2V0SXRlbShzLGEpLHImJiFyKG4pfHx0KG4scyl9LG8ucHJvdG90eXBlLm1hcD1mdW5jdGlvbih0LGUpe3ZhciBpLG8sbixzLHI9ZSYmZS5maWx0ZXIsYT1lJiZlLnR5cGV8fHRoaXMuX29wdGlvbnMudHlwZSxoPVtdLGQ9dGhpcy5fZGF0YSxsPU9iamVjdC5rZXlzKGQpO2ZvcihpPTAsbz1sLmxlbmd0aDtpPG87aSsrKW49bFtpXSxzPXRoaXMuX2dldEl0ZW0obixhKSxyJiYhcihzKXx8aC5wdXNoKHQocyxuKSk7cmV0dXJuIGUmJmUub3JkZXImJnRoaXMuX3NvcnQoaCxlLm9yZGVyKSxofSxvLnByb3RvdHlwZS5fZmlsdGVyRmllbGRzPWZ1bmN0aW9uKHQsZSl7aWYoIXQpcmV0dXJuIHQ7dmFyIGksbyxuPXt9LHM9T2JqZWN0LmtleXModCkscj1zLmxlbmd0aDtpZihBcnJheS5pc0FycmF5KGUpKWZvcihpPTA7aTxyO2krKylvPXNbaV0sZS5pbmRleE9mKG8pIT0tMSYmKG5bb109dFtvXSk7ZWxzZSBmb3IoaT0wO2k8cjtpKyspbz1zW2ldLGUuaGFzT3duUHJvcGVydHkobykmJihuW2Vbb11dPXRbb10pO3JldHVybiBufSxvLnByb3RvdHlwZS5fc29ydD1mdW5jdGlvbih0LGUpe2lmKHMuaXNTdHJpbmcoZSkpe3ZhciBpPWU7dC5zb3J0KGZ1bmN0aW9uKHQsZSl7dmFyIG89dFtpXSxuPWVbaV07cmV0dXJuIG8+bj8xOm88bj8tMTowfSl9ZWxzZXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJPcmRlciBtdXN0IGJlIGEgZnVuY3Rpb24gb3IgYSBzdHJpbmciKTt0LnNvcnQoZSl9fSxvLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24odCxlKXt2YXIgaSxvLG4scyxyPVtdLGE9W10saD1bXTtmb3IoaD1BcnJheS5pc0FycmF5KHQpP3Q6W3RdLGk9MCxvPWgubGVuZ3RoO2k8bztpKyspcz10aGlzLl9yZW1vdmUoaFtpXSkscyYmKG49c1t0aGlzLl9maWVsZElkXSxuJiYoci5wdXNoKG4pLGEucHVzaChzKSkpO3JldHVybiByLmxlbmd0aCYmdGhpcy5fdHJpZ2dlcigicmVtb3ZlIix7aXRlbXM6cixvbGREYXRhOmF9LGUpLHJ9LG8ucHJvdG90eXBlLl9yZW1vdmU9ZnVuY3Rpb24odCl7dmFyIGUsaTtyZXR1cm4gcy5pc051bWJlcih0KXx8cy5pc1N0cmluZyh0KT9pPXQ6dCBpbnN0YW5jZW9mIE9iamVjdCYmKGk9dFt0aGlzLl9maWVsZElkXSksdm9pZCAwIT09aSYmdGhpcy5fZGF0YVtpXT8oZT10aGlzLl9kYXRhW2ldLGRlbGV0ZSB0aGlzLl9kYXRhW2ldLHRoaXMubGVuZ3RoLS0sZSk6bnVsbH0sby5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24odCl7dmFyIGUsaSxvPU9iamVjdC5rZXlzKHRoaXMuX2RhdGEpLG49W107Zm9yKGU9MCxpPW8ubGVuZ3RoO2U8aTtlKyspbi5wdXNoKHRoaXMuX2RhdGFbb1tlXV0pO3JldHVybiB0aGlzLl9kYXRhPXt9LHRoaXMubGVuZ3RoPTAsdGhpcy5fdHJpZ2dlcigicmVtb3ZlIix7aXRlbXM6byxvbGREYXRhOm59LHQpLG99LG8ucHJvdG90eXBlLm1heD1mdW5jdGlvbih0KXt2YXIgZSxpLG89dGhpcy5fZGF0YSxuPU9iamVjdC5rZXlzKG8pLHM9bnVsbCxyPW51bGw7Zm9yKGU9MCxpPW4ubGVuZ3RoO2U8aTtlKyspe3ZhciBhPW5bZV0saD1vW2FdLGQ9aFt0XTtudWxsIT1kJiYoIXN8fGQ+cikmJihzPWgscj1kKX1yZXR1cm4gc30sby5wcm90b3R5cGUubWluPWZ1bmN0aW9uKHQpe3ZhciBlLGksbz10aGlzLl9kYXRhLG49T2JqZWN0LmtleXMobykscz1udWxsLHI9bnVsbDtmb3IoZT0wLGk9bi5sZW5ndGg7ZTxpO2UrKyl7dmFyIGE9bltlXSxoPW9bYV0sZD1oW3RdO251bGwhPWQmJighc3x8ZDxyKSYmKHM9aCxyPWQpfXJldHVybiBzfSxvLnByb3RvdHlwZS5kaXN0aW5jdD1mdW5jdGlvbih0KXt2YXIgZSxpLG8sbj10aGlzLl9kYXRhLHI9T2JqZWN0LmtleXMobiksYT1bXSxoPXRoaXMuX29wdGlvbnMudHlwZSYmdGhpcy5fb3B0aW9ucy50eXBlW3RdfHxudWxsLGQ9MDtmb3IoZT0wLG89ci5sZW5ndGg7ZTxvO2UrKyl7dmFyIGw9cltlXSxjPW5bbF0sdT1jW3RdLHA9ITE7Zm9yKGk9MDtpPGQ7aSsrKWlmKGFbaV09PXUpe3A9ITA7YnJlYWt9cHx8dm9pZCAwPT09dXx8KGFbZF09dSxkKyspfWlmKGgpZm9yKGU9MCxvPWEubGVuZ3RoO2U8bztlKyspYVtlXT1zLmNvbnZlcnQoYVtlXSxoKTtyZXR1cm4gYX0sby5wcm90b3R5cGUuX2FkZEl0ZW09ZnVuY3Rpb24odCl7dmFyIGU9dFt0aGlzLl9maWVsZElkXTtpZih2b2lkIDAhPWUpe2lmKHRoaXMuX2RhdGFbZV0pdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgYWRkIGl0ZW06IGl0ZW0gd2l0aCBpZCAiK2UrIiBhbHJlYWR5IGV4aXN0cyIpfWVsc2UgZT1zLnJhbmRvbVVVSUQoKSx0W3RoaXMuX2ZpZWxkSWRdPWU7dmFyIGksbyxuPXt9LHI9T2JqZWN0LmtleXModCk7Zm9yKGk9MCxvPXIubGVuZ3RoO2k8bztpKyspe3ZhciBhPXJbaV0saD10aGlzLl90eXBlW2FdO25bYV09cy5jb252ZXJ0KHRbYV0saCl9cmV0dXJuIHRoaXMuX2RhdGFbZV09bix0aGlzLmxlbmd0aCsrLGV9LG8ucHJvdG90eXBlLl9nZXRJdGVtPWZ1bmN0aW9uKHQsZSl7dmFyIGksbyxuLHIsYT10aGlzLl9kYXRhW3RdO2lmKCFhKXJldHVybiBudWxsO3ZhciBoPXt9LGQ9T2JqZWN0LmtleXMoYSk7aWYoZSlmb3Iobj0wLHI9ZC5sZW5ndGg7bjxyO24rKylpPWRbbl0sbz1hW2ldLGhbaV09cy5jb252ZXJ0KG8sZVtpXSk7ZWxzZSBmb3Iobj0wLHI9ZC5sZW5ndGg7bjxyO24rKylpPWRbbl0sbz1hW2ldLGhbaV09bztyZXR1cm4gaH0sby5wcm90b3R5cGUuX3VwZGF0ZUl0ZW09ZnVuY3Rpb24odCl7dmFyIGU9dFt0aGlzLl9maWVsZElkXTtpZih2b2lkIDA9PWUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgdXBkYXRlIGl0ZW06IGl0ZW0gaGFzIG5vIGlkIChpdGVtOiAiK0pTT04uc3RyaW5naWZ5KHQpKyIpIik7dmFyIGk9dGhpcy5fZGF0YVtlXTtpZighaSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCB1cGRhdGUgaXRlbTogbm8gaXRlbSB3aXRoIGlkICIrZSsiIGZvdW5kIik7Zm9yKHZhciBvPU9iamVjdC5rZXlzKHQpLG49MCxyPW8ubGVuZ3RoO248cjtuKyspe3ZhciBhPW9bbl0saD10aGlzLl90eXBlW2FdO2lbYV09cy5jb252ZXJ0KHRbYV0saCl9cmV0dXJuIGV9LHQuZXhwb3J0cz1vfSxmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIGkodCl7dGhpcy5kZWxheT1udWxsLHRoaXMubWF4PTEvMCx0aGlzLl9xdWV1ZT1bXSx0aGlzLl90aW1lb3V0PW51bGwsdGhpcy5fZXh0ZW5kZWQ9bnVsbCx0aGlzLnNldE9wdGlvbnModCl9aS5wcm90b3R5cGUuc2V0T3B0aW9ucz1mdW5jdGlvbih0KXt0JiYidW5kZWZpbmVkIiE9dHlwZW9mIHQuZGVsYXkmJih0aGlzLmRlbGF5PXQuZGVsYXkpLHQmJiJ1bmRlZmluZWQiIT10eXBlb2YgdC5tYXgmJih0aGlzLm1heD10Lm1heCksdGhpcy5fZmx1c2hJZk5lZWRlZCgpfSxpLmV4dGVuZD1mdW5jdGlvbih0LGUpe3ZhciBvPW5ldyBpKGUpO2lmKHZvaWQgMCE9PXQuZmx1c2gpdGhyb3cgbmV3IEVycm9yKCJUYXJnZXQgb2JqZWN0IGFscmVhZHkgaGFzIGEgcHJvcGVydHkgZmx1c2giKTt0LmZsdXNoPWZ1bmN0aW9uKCl7by5mbHVzaCgpfTt2YXIgbj1be25hbWU6ImZsdXNoIixvcmlnaW5hbDp2b2lkIDB9XTtpZihlJiZlLnJlcGxhY2UpZm9yKHZhciBzPTA7czxlLnJlcGxhY2UubGVuZ3RoO3MrKyl7dmFyIHI9ZS5yZXBsYWNlW3NdO24ucHVzaCh7bmFtZTpyLG9yaWdpbmFsOnRbcl19KSxvLnJlcGxhY2UodCxyKX1yZXR1cm4gby5fZXh0ZW5kZWQ9e29iamVjdDp0LG1ldGhvZHM6bn0sb30saS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2lmKHRoaXMuZmx1c2goKSx0aGlzLl9leHRlbmRlZCl7Zm9yKHZhciB0PXRoaXMuX2V4dGVuZGVkLm9iamVjdCxlPXRoaXMuX2V4dGVuZGVkLm1ldGhvZHMsaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgbz1lW2ldO28ub3JpZ2luYWw/dFtvLm5hbWVdPW8ub3JpZ2luYWw6ZGVsZXRlIHRbby5uYW1lXX10aGlzLl9leHRlbmRlZD1udWxsfX0saS5wcm90b3R5cGUucmVwbGFjZT1mdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMsbz10W2VdO2lmKCFvKXRocm93IG5ldyBFcnJvcigiTWV0aG9kICIrZSsiIHVuZGVmaW5lZCIpO3RbZV09ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07aS5xdWV1ZSh7YXJnczp0LGZuOm8sY29udGV4dDp0aGlzfSl9fSxpLnByb3RvdHlwZS5xdWV1ZT1mdW5jdGlvbih0KXsiZnVuY3Rpb24iPT10eXBlb2YgdD90aGlzLl9xdWV1ZS5wdXNoKHtmbjp0fSk6dGhpcy5fcXVldWUucHVzaCh0KSx0aGlzLl9mbHVzaElmTmVlZGVkKCl9LGkucHJvdG90eXBlLl9mbHVzaElmTmVlZGVkPWZ1bmN0aW9uKCl7aWYodGhpcy5fcXVldWUubGVuZ3RoPnRoaXMubWF4JiZ0aGlzLmZsdXNoKCksY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpLHRoaXMucXVldWUubGVuZ3RoPjAmJiJudW1iZXIiPT10eXBlb2YgdGhpcy5kZWxheSl7dmFyIHQ9dGhpczt0aGlzLl90aW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXt0LmZsdXNoKCl9LHRoaXMuZGVsYXkpfX0saS5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXtmb3IoO3RoaXMuX3F1ZXVlLmxlbmd0aD4wOyl7dmFyIHQ9dGhpcy5fcXVldWUuc2hpZnQoKTt0LmZuLmFwcGx5KHQuY29udGV4dHx8dC5mbix0LmFyZ3N8fFtdKX19LHQuZXhwb3J0cz1pfSxmdW5jdGlvbih0LGUsaSl7ZnVuY3Rpb24gbyh0LGUpe3RoaXMuX2RhdGE9bnVsbCx0aGlzLl9pZHM9e30sdGhpcy5sZW5ndGg9MCx0aGlzLl9vcHRpb25zPWV8fHt9LHRoaXMuX2ZpZWxkSWQ9ImlkIix0aGlzLl9zdWJzY3JpYmVycz17fTt2YXIgaT10aGlzO3RoaXMubGlzdGVuZXI9ZnVuY3Rpb24oKXtpLl9vbkV2ZW50LmFwcGx5KGksYXJndW1lbnRzKX0sdGhpcy5zZXREYXRhKHQpfXZhciBuPWkoMSkscz1pKDkpO28ucHJvdG90eXBlLnNldERhdGE9ZnVuY3Rpb24odCl7dmFyIGUsaSxvLG4scztpZih0aGlzLl9kYXRhKXtmb3IodGhpcy5fZGF0YS5vZmYmJnRoaXMuX2RhdGEub2ZmKCIqIix0aGlzLmxpc3RlbmVyKSxlPXRoaXMuX2RhdGEuZ2V0SWRzKHtmaWx0ZXI6dGhpcy5fb3B0aW9ucyYmdGhpcy5fb3B0aW9ucy5maWx0ZXJ9KSxzPVtdLG89MCxuPWUubGVuZ3RoO288bjtvKyspcy5wdXNoKHRoaXMuX2RhdGEuX2RhdGFbZVtvXV0pO3RoaXMuX2lkcz17fSx0aGlzLmxlbmd0aD0wLHRoaXMuX3RyaWdnZXIoInJlbW92ZSIse2l0ZW1zOmUsb2xkRGF0YTpzfSl9aWYodGhpcy5fZGF0YT10LHRoaXMuX2RhdGEpe2Zvcih0aGlzLl9maWVsZElkPXRoaXMuX29wdGlvbnMuZmllbGRJZHx8dGhpcy5fZGF0YSYmdGhpcy5fZGF0YS5vcHRpb25zJiZ0aGlzLl9kYXRhLm9wdGlvbnMuZmllbGRJZHx8ImlkIixlPXRoaXMuX2RhdGEuZ2V0SWRzKHtmaWx0ZXI6dGhpcy5fb3B0aW9ucyYmdGhpcy5fb3B0aW9ucy5maWx0ZXJ9KSxvPTAsbj1lLmxlbmd0aDtvPG47bysrKWk9ZVtvXSx0aGlzLl9pZHNbaV09ITA7dGhpcy5sZW5ndGg9ZS5sZW5ndGgsdGhpcy5fdHJpZ2dlcigiYWRkIix7aXRlbXM6ZX0pLHRoaXMuX2RhdGEub24mJnRoaXMuX2RhdGEub24oIioiLHRoaXMubGlzdGVuZXIpfX0sby5wcm90b3R5cGUucmVmcmVzaD1mdW5jdGlvbigpe3ZhciB0LGUsaSxvPXRoaXMuX2RhdGEuZ2V0SWRzKHtmaWx0ZXI6dGhpcy5fb3B0aW9ucyYmdGhpcy5fb3B0aW9ucy5maWx0ZXJ9KSxuPU9iamVjdC5rZXlzKHRoaXMuX2lkcykscz17fSxyPVtdLGE9W10saD1bXTtmb3IoZT0wLGk9by5sZW5ndGg7ZTxpO2UrKyl0PW9bZV0sc1t0XT0hMCx0aGlzLl9pZHNbdF18fChyLnB1c2godCksdGhpcy5faWRzW3RdPSEwKTtmb3IoZT0wLGk9bi5sZW5ndGg7ZTxpO2UrKyl0PW5bZV0sc1t0XXx8KGEucHVzaCh0KSxoLnB1c2godGhpcy5fZGF0YVt0XSksZGVsZXRlIHRoaXMuX2lkc1t0XSk7dGhpcy5sZW5ndGgrPXIubGVuZ3RoLWEubGVuZ3RoLHIubGVuZ3RoJiZ0aGlzLl90cmlnZ2VyKCJhZGQiLHtpdGVtczpyfSksYS5sZW5ndGgmJnRoaXMuX3RyaWdnZXIoInJlbW92ZSIse2l0ZW1zOmEsb2xkRGF0YTpofSl9LG8ucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXt2YXIgZSxpLG8scz10aGlzLHI9bi5nZXRUeXBlKGFyZ3VtZW50c1swXSk7IlN0cmluZyI9PXJ8fCJOdW1iZXIiPT1yfHwiQXJyYXkiPT1yPyhlPWFyZ3VtZW50c1swXSxpPWFyZ3VtZW50c1sxXSxvPWFyZ3VtZW50c1syXSk6KGk9YXJndW1lbnRzWzBdLG89YXJndW1lbnRzWzFdKTt2YXIgYT1uLmV4dGVuZCh7fSx0aGlzLl9vcHRpb25zLGkpO3RoaXMuX29wdGlvbnMuZmlsdGVyJiZpJiZpLmZpbHRlciYmKGEuZmlsdGVyPWZ1bmN0aW9uKHQpe3JldHVybiBzLl9vcHRpb25zLmZpbHRlcih0KSYmaS5maWx0ZXIodCl9KTt2YXIgaD1bXTtyZXR1cm4gdm9pZCAwIT1lJiZoLnB1c2goZSksaC5wdXNoKGEpLGgucHVzaChvKSx0aGlzLl9kYXRhJiZ0aGlzLl9kYXRhLmdldC5hcHBseSh0aGlzLl9kYXRhLGgpfSxvLnByb3RvdHlwZS5nZXRJZHM9ZnVuY3Rpb24odCl7dmFyIGU7aWYodGhpcy5fZGF0YSl7dmFyIGksbz10aGlzLl9vcHRpb25zLmZpbHRlcjtpPXQmJnQuZmlsdGVyP28/ZnVuY3Rpb24oZSl7cmV0dXJuIG8oZSkmJnQuZmlsdGVyKGUpfTp0LmZpbHRlcjpvLGU9dGhpcy5fZGF0YS5nZXRJZHMoe2ZpbHRlcjppLG9yZGVyOnQmJnQub3JkZXJ9KX1lbHNlIGU9W107cmV0dXJuIGV9LG8ucHJvdG90eXBlLm1hcD1mdW5jdGlvbih0LGUpe3ZhciBpPVtdO2lmKHRoaXMuX2RhdGEpe3ZhciBvLG49dGhpcy5fb3B0aW9ucy5maWx0ZXI7bz1lJiZlLmZpbHRlcj9uP2Z1bmN0aW9uKHQpe3JldHVybiBuKHQpJiZlLmZpbHRlcih0KX06ZS5maWx0ZXI6bixpPXRoaXMuX2RhdGEubWFwKHQse2ZpbHRlcjpvLG9yZGVyOmUmJmUub3JkZXJ9KX1lbHNlIGk9W107cmV0dXJuIGl9LG8ucHJvdG90eXBlLmdldERhdGFTZXQ9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpczt0IGluc3RhbmNlb2YgbzspdD10Ll9kYXRhO3JldHVybiB0fHxudWxsfSxvLnByb3RvdHlwZS5fb25FdmVudD1mdW5jdGlvbih0LGUsaSl7dmFyIG8sbixzLHIsYT1lJiZlLml0ZW1zLGg9W10sZD1bXSxsPVtdLGM9W10sdT1bXSxwPVtdO2lmKGEmJnRoaXMuX2RhdGEpe3N3aXRjaCh0KXtjYXNlImFkZCI6Zm9yKG89MCxuPWEubGVuZ3RoO288bjtvKyspcz1hW29dLHI9dGhpcy5nZXQocyksciYmKHRoaXMuX2lkc1tzXT0hMCxoLnB1c2gocykpO2JyZWFrO2Nhc2UidXBkYXRlIjpmb3Iobz0wLG49YS5sZW5ndGg7bzxuO28rKylzPWFbb10scj10aGlzLmdldChzKSxyP3RoaXMuX2lkc1tzXT8oZC5wdXNoKHMpLHUucHVzaChlLmRhdGFbb10pLGMucHVzaChlLm9sZERhdGFbb10pKToodGhpcy5faWRzW3NdPSEwLGgucHVzaChzKSk6dGhpcy5faWRzW3NdJiYoZGVsZXRlIHRoaXMuX2lkc1tzXSxsLnB1c2gocykscC5wdXNoKGUub2xkRGF0YVtvXSkpO2JyZWFrO2Nhc2UicmVtb3ZlIjpmb3Iobz0wLG49YS5sZW5ndGg7bzxuO28rKylzPWFbb10sdGhpcy5faWRzW3NdJiYoZGVsZXRlIHRoaXMuX2lkc1tzXSxsLnB1c2gocykscC5wdXNoKGUub2xkRGF0YVtvXSkpfXRoaXMubGVuZ3RoKz1oLmxlbmd0aC1sLmxlbmd0aCxoLmxlbmd0aCYmdGhpcy5fdHJpZ2dlcigiYWRkIix7aXRlbXM6aH0saSksZC5sZW5ndGgmJnRoaXMuX3RyaWdnZXIoInVwZGF0ZSIse2l0ZW1zOmQsb2xkRGF0YTpjLGRhdGE6dX0saSksbC5sZW5ndGgmJnRoaXMuX3RyaWdnZXIoInJlbW92ZSIse2l0ZW1zOmwsb2xkRGF0YTpwfSxpKX19LG8ucHJvdG90eXBlLm9uPXMucHJvdG90eXBlLm9uLG8ucHJvdG90eXBlLm9mZj1zLnByb3RvdHlwZS5vZmYsby5wcm90b3R5cGUuX3RyaWdnZXI9cy5wcm90b3R5cGUuX3RyaWdnZXIsby5wcm90b3R5cGUuc3Vic2NyaWJlPW8ucHJvdG90eXBlLm9uLG8ucHJvdG90eXBlLnVuc3Vic2NyaWJlPW8ucHJvdG90eXBlLm9mZix0LmV4cG9ydHM9b30sZnVuY3Rpb24odCxlLGkpe2Z1bmN0aW9uIG8odCxlLGkpe2lmKCEodGhpcyBpbnN0YW5jZW9mIG8pKXRocm93IG5ldyBTeW50YXhFcnJvcigiQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yIik7dGhpcy5jb250YWluZXJFbGVtZW50PXQsdGhpcy5kYXRhVGFibGU9bnVsbCx0aGlzLmRhdGFQb2ludHM9bnVsbCx0aGlzLmNyZWF0ZSgpLHYuc2V0RGVmYXVsdHMoeSx0aGlzKSx0aGlzLmNvbFg9dm9pZCAwLHRoaXMuY29sWT12b2lkIDAsdGhpcy5jb2xaPXZvaWQgMCx0aGlzLmNvbFZhbHVlPXZvaWQgMCx0aGlzLmNvbEZpbHRlcj12b2lkIDAsdGhpcy5zZXRPcHRpb25zKGkpLGUmJnRoaXMuc2V0RGF0YShlKX1mdW5jdGlvbiBuKHQpe3JldHVybiJjbGllbnRYImluIHQ/dC5jbGllbnRYOnQudGFyZ2V0VG91Y2hlc1swXSYmdC50YXJnZXRUb3VjaGVzWzBdLmNsaWVudFh8fDB9ZnVuY3Rpb24gcyh0KXtyZXR1cm4iY2xpZW50WSJpbiB0P3QuY2xpZW50WTp0LnRhcmdldFRvdWNoZXNbMF0mJnQudGFyZ2V0VG91Y2hlc1swXS5jbGllbnRZfHwwfXZhciByPWkoMTMpLGE9aSg5KSxoPWkoMTEpLGQ9aSgxKSxsPWkoMTQpLGM9aSgxNSksdT0oaSgxNiksaSgxNykpLHA9aSgxOCksZj1pKDE5KSxtPWkoMjApLHY9aSgyMSk7by5TVFlMRT12LlNUWUxFO3ZhciBnPXZvaWQgMCx5PXt3aWR0aDoiNDAwcHgiLGhlaWdodDoiNDAwcHgiLGZpbHRlckxhYmVsOiJ0aW1lIixsZWdlbmRMYWJlbDoidmFsdWUiLHhMYWJlbDoieCIseUxhYmVsOiJ5Iix6TGFiZWw6InoiLHhWYWx1ZUxhYmVsOmZ1bmN0aW9uKHQpe3JldHVybiB0fSx5VmFsdWVMYWJlbDpmdW5jdGlvbih0KXtyZXR1cm4gdH0selZhbHVlTGFiZWw6ZnVuY3Rpb24odCl7cmV0dXJuIHR9LHNob3dHcmlkOiEwLHNob3dQZXJzcGVjdGl2ZTohMCxzaG93U2hhZG93OiExLGtlZXBBc3BlY3RSYXRpbzohMCx2ZXJ0aWNhbFJhdGlvOi41LGRvdFNpemVSYXRpbzouMDIsc2hvd0FuaW1hdGlvbkNvbnRyb2xzOmcsYW5pbWF0aW9uSW50ZXJ2YWw6MWUzLGFuaW1hdGlvblByZWxvYWQ6ITEsYW5pbWF0aW9uQXV0b1N0YXJ0OmcsYXhpc0NvbG9yOiIjNEQ0RDREIixncmlkQ29sb3I6IiNEM0QzRDMiLHhDZW50ZXI6IjU1JSIseUNlbnRlcjoiNTAlIixzdHlsZTpvLlNUWUxFLkRPVCx0b29sdGlwOiExLHNob3dMZWdlbmQ6ZyxiYWNrZ3JvdW5kQ29sb3I6ZyxkYXRhQ29sb3I6e2ZpbGw6IiM3REMxRkYiLHN0cm9rZToiIzMyNjdEMiIsc3Ryb2tlV2lkdGg6MX0sY2FtZXJhUG9zaXRpb246e2hvcml6b250YWw6MSx2ZXJ0aWNhbDouNSxkaXN0YW5jZToxLjd9LHhCYXJXaWR0aDpnLHlCYXJXaWR0aDpnLHZhbHVlTWluOmcsdmFsdWVNYXg6Zyx4TWluOmcseE1heDpnLHhTdGVwOmcseU1pbjpnLHlNYXg6Zyx5U3RlcDpnLHpNaW46Zyx6TWF4OmcselN0ZXA6Z307cihvLnByb3RvdHlwZSksby5wcm90b3R5cGUuX3NldFNjYWxlPWZ1bmN0aW9uKCl7dGhpcy5zY2FsZT1uZXcgbCgxL3RoaXMueFJhbmdlLnJhbmdlKCksMS90aGlzLnlSYW5nZS5yYW5nZSgpLDEvdGhpcy56UmFuZ2UucmFuZ2UoKSksdGhpcy5rZWVwQXNwZWN0UmF0aW8mJih0aGlzLnNjYWxlLng8dGhpcy5zY2FsZS55P3RoaXMuc2NhbGUueT10aGlzLnNjYWxlLng6dGhpcy5zY2FsZS54PXRoaXMuc2NhbGUueSksdGhpcy5zY2FsZS56Kj10aGlzLnZlcnRpY2FsUmF0aW8sdm9pZCAwIT09dGhpcy52YWx1ZVJhbmdlJiYodGhpcy5zY2FsZS52YWx1ZT0xL3RoaXMudmFsdWVSYW5nZS5yYW5nZSgpKTt2YXIgdD10aGlzLnhSYW5nZS5jZW50ZXIoKSp0aGlzLnNjYWxlLngsZT10aGlzLnlSYW5nZS5jZW50ZXIoKSp0aGlzLnNjYWxlLnksaT10aGlzLnpSYW5nZS5jZW50ZXIoKSp0aGlzLnNjYWxlLno7dGhpcy5jYW1lcmEuc2V0QXJtTG9jYXRpb24odCxlLGkpfSxvLnByb3RvdHlwZS5fY29udmVydDNEdG8yRD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9jb252ZXJ0UG9pbnRUb1RyYW5zbGF0aW9uKHQpO3JldHVybiB0aGlzLl9jb252ZXJ0VHJhbnNsYXRpb25Ub1NjcmVlbihlKX0sby5wcm90b3R5cGUuX2NvbnZlcnRQb2ludFRvVHJhbnNsYXRpb249ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jYW1lcmEuZ2V0Q2FtZXJhTG9jYXRpb24oKSxpPXRoaXMuY2FtZXJhLmdldENhbWVyYVJvdGF0aW9uKCksbz10LngqdGhpcy5zY2FsZS54LG49dC55KnRoaXMuc2NhbGUueSxzPXQueip0aGlzLnNjYWxlLnoscj1lLngsYT1lLnksaD1lLnosZD1NYXRoLnNpbihpLngpLGM9TWF0aC5jb3MoaS54KSx1PU1hdGguc2luKGkueSkscD1NYXRoLmNvcyhpLnkpLGY9TWF0aC5zaW4oaS56KSxtPU1hdGguY29zKGkueiksdj1wKihmKihuLWEpK20qKG8tcikpLXUqKHMtaCksZz1kKihwKihzLWgpK3UqKGYqKG4tYSkrbSooby1yKSkpK2MqKG0qKG4tYSktZiooby1yKSkseT1jKihwKihzLWgpK3UqKGYqKG4tYSkrbSooby1yKSkpLWQqKG0qKG4tYSktZiooby1yKSk7cmV0dXJuIG5ldyBsKHYsZyx5KX0sby5wcm90b3R5cGUuX2NvbnZlcnRUcmFuc2xhdGlvblRvU2NyZWVuPWZ1bmN0aW9uKHQpe3ZhciBlLGksbz10aGlzLmV5ZS54LG49dGhpcy5leWUueSxzPXRoaXMuZXllLnoscj10LngsYT10LnksaD10Lno7cmV0dXJuIHRoaXMuc2hvd1BlcnNwZWN0aXZlPyhlPShyLW8pKihzL2gpLGk9KGEtbikqKHMvaCkpOihlPXIqLShzL3RoaXMuY2FtZXJhLmdldEFybUxlbmd0aCgpKSxpPWEqLShzL3RoaXMuY2FtZXJhLmdldEFybUxlbmd0aCgpKSksbmV3IGModGhpcy5jdXJyZW50WENlbnRlcitlKnRoaXMuZnJhbWUuY2FudmFzLmNsaWVudFdpZHRoLHRoaXMuY3VycmVudFlDZW50ZXItaSp0aGlzLmZyYW1lLmNhbnZhcy5jbGllbnRXaWR0aCl9LG8ucHJvdG90eXBlLl9jYWxjVHJhbnNsYXRpb25zPWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9ITApO2Zvcih2YXIgaT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgbz10W2ldO28udHJhbnM9dGhpcy5fY29udmVydFBvaW50VG9UcmFuc2xhdGlvbihvLnBvaW50KSxvLnNjcmVlbj10aGlzLl9jb252ZXJ0VHJhbnNsYXRpb25Ub1NjcmVlbihvLnRyYW5zKTt2YXIgbj10aGlzLl9jb252ZXJ0UG9pbnRUb1RyYW5zbGF0aW9uKG8uYm90dG9tKTtvLmRpc3Q9dGhpcy5zaG93UGVyc3BlY3RpdmU/bi5sZW5ndGgoKTotbi56fWlmKGUpe3ZhciBzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZGlzdC10LmRpc3R9O3Quc29ydChzKX19LG8ucHJvdG90eXBlLmdldE51bWJlck9mUm93cz1mdW5jdGlvbih0KXtyZXR1cm4gdC5sZW5ndGh9LG8ucHJvdG90eXBlLmdldE51bWJlck9mQ29sdW1ucz1mdW5jdGlvbih0KXt2YXIgZT0wO2Zvcih2YXIgaSBpbiB0WzBdKXRbMF0uaGFzT3duUHJvcGVydHkoaSkmJmUrKztyZXR1cm4gZX0sby5wcm90b3R5cGUuZ2V0RGlzdGluY3RWYWx1ZXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIGk9W10sbz0wO288dC5sZW5ndGg7bysrKWkuaW5kZXhPZih0W29dW2VdKT09LTEmJmkucHVzaCh0W29dW2VdKTtyZXR1cm4gaX0sby5wcm90b3R5cGUuZ2V0Q29sdW1uUmFuZ2U9ZnVuY3Rpb24odCxlKXtmb3IodmFyIGk9bmV3IG0sbz0wO288dC5sZW5ndGg7bysrKXt2YXIgbj10W29dW2VdO2kuYWRqdXN0KG4pfXJldHVybiBpfSxvLnByb3RvdHlwZS5fY2hlY2tWYWx1ZUZpZWxkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc3R5bGU9PT1vLlNUWUxFLkJBUkNPTE9SfHx0aGlzLnN0eWxlPT09by5TVFlMRS5CQVJTSVpFfHx0aGlzLnN0eWxlPT09by5TVFlMRS5ET1RDT0xPUnx8dGhpcy5zdHlsZT09PW8uU1RZTEUuRE9UU0laRTtpZihlKXtpZih2b2lkIDA9PT10aGlzLmNvbFZhbHVlKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgZGF0YSB0byBoYXZlICBmaWVsZCAnc3R5bGUnICBmb3IgZ3JhcGggc3R5bGUgJyIrdGhpcy5zdHlsZSsiJyIpO2lmKHZvaWQgMD09PXRbMF1bdGhpcy5jb2xWYWx1ZV0pdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCBkYXRhIHRvIGhhdmUgIGZpZWxkICciK3RoaXMuY29sVmFsdWUrIicgIGZvciBncmFwaCBzdHlsZSAnIit0aGlzLnN0eWxlKyInIil9fSxvLnByb3RvdHlwZS5fc2V0UmFuZ2VEZWZhdWx0cz1mdW5jdGlvbih0LGUsaSl7dm9pZCAwIT09ZSYmKHQubWluPWUpLHZvaWQgMCE9PWkmJih0Lm1heD1pKSx0Lm1heDw9dC5taW4mJih0Lm1heD10Lm1pbisxKX0sby5wcm90b3R5cGUuX2RhdGFJbml0aWFsaXplPWZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcztpZih0aGlzLmRhdGFTZXQmJnRoaXMuZGF0YVNldC5vZmYoIioiLHRoaXMuX29uQ2hhbmdlKSx2b2lkIDAhPT10KXtBcnJheS5pc0FycmF5KHQpJiYodD1uZXcgYSh0KSk7dmFyIG47aWYoISh0IGluc3RhbmNlb2YgYXx8dCBpbnN0YW5jZW9mIGgpKXRocm93IG5ldyBFcnJvcigiQXJyYXksIERhdGFTZXQsIG9yIERhdGFWaWV3IGV4cGVjdGVkIik7aWYobj10LmdldCgpLDAhPW4ubGVuZ3RoKXt0aGlzLmRhdGFTZXQ9dCx0aGlzLmRhdGFUYWJsZT1uLHRoaXMuX29uQ2hhbmdlPWZ1bmN0aW9uKCl7aS5zZXREYXRhKGkuZGF0YVNldCl9LHRoaXMuZGF0YVNldC5vbigiKiIsdGhpcy5fb25DaGFuZ2UpLHRoaXMuY29sWD0ieCIsdGhpcy5jb2xZPSJ5Iix0aGlzLmNvbFo9InoiO3ZhciBzPXRoaXMuc3R5bGU9PW8uU1RZTEUuQkFSfHx0aGlzLnN0eWxlPT1vLlNUWUxFLkJBUkNPTE9SfHx0aGlzLnN0eWxlPT1vLlNUWUxFLkJBUlNJWkU7aWYocyl7aWYodm9pZCAwIT09dGhpcy5kZWZhdWx0WEJhcldpZHRoKXRoaXMueEJhcldpZHRoPXRoaXMuZGVmYXVsdFhCYXJXaWR0aDtlbHNle3ZhciByPXRoaXMuZ2V0RGlzdGluY3RWYWx1ZXMobix0aGlzLmNvbFgpO3RoaXMueEJhcldpZHRoPXJbMV0tclswXXx8MX1pZih2b2lkIDAhPT10aGlzLmRlZmF1bHRZQmFyV2lkdGgpdGhpcy55QmFyV2lkdGg9dGhpcy5kZWZhdWx0WUJhcldpZHRoO2Vsc2V7dmFyIGQ9dGhpcy5nZXREaXN0aW5jdFZhbHVlcyhuLHRoaXMuY29sWSk7dGhpcy55QmFyV2lkdGg9ZFsxXS1kWzBdfHwxfX12YXIgbD01LGM9dGhpcy5nZXRDb2x1bW5SYW5nZShuLHRoaXMuY29sWCk7cyYmYy5leHBhbmQodGhpcy54QmFyV2lkdGgvMiksdGhpcy5fc2V0UmFuZ2VEZWZhdWx0cyhjLHRoaXMuZGVmYXVsdFhNaW4sdGhpcy5kZWZhdWx0WE1heCksdGhpcy54UmFuZ2U9Yyx0aGlzLnhTdGVwPXZvaWQgMCE9PXRoaXMuZGVmYXVsdFhTdGVwP3RoaXMuZGVmYXVsdFhTdGVwOmMucmFuZ2UoKS9sO3ZhciBwPXRoaXMuZ2V0Q29sdW1uUmFuZ2Uobix0aGlzLmNvbFkpO3MmJnAuZXhwYW5kKHRoaXMueUJhcldpZHRoLzIpLHRoaXMuX3NldFJhbmdlRGVmYXVsdHMocCx0aGlzLmRlZmF1bHRZTWluLHRoaXMuZGVmYXVsdFlNYXgpLHRoaXMueVJhbmdlPXAsdGhpcy55U3RlcD12b2lkIDAhPT10aGlzLmRlZmF1bHRZU3RlcD90aGlzLmRlZmF1bHRZU3RlcDpwLnJhbmdlKCkvbDt2YXIgZj10aGlzLmdldENvbHVtblJhbmdlKG4sdGhpcy5jb2xaKTtpZih0aGlzLl9zZXRSYW5nZURlZmF1bHRzKGYsdGhpcy5kZWZhdWx0Wk1pbix0aGlzLmRlZmF1bHRaTWF4KSx0aGlzLnpSYW5nZT1mLHRoaXMuelN0ZXA9dm9pZCAwIT09dGhpcy5kZWZhdWx0WlN0ZXA/dGhpcy5kZWZhdWx0WlN0ZXA6Zi5yYW5nZSgpL2wsblswXS5oYXNPd25Qcm9wZXJ0eSgic3R5bGUiKSl7dGhpcy5jb2xWYWx1ZT0ic3R5bGUiO3ZhciBtPXRoaXMuZ2V0Q29sdW1uUmFuZ2Uobix0aGlzLmNvbFZhbHVlKTt0aGlzLl9zZXRSYW5nZURlZmF1bHRzKG0sdGhpcy5kZWZhdWx0VmFsdWVNaW4sdGhpcy5kZWZhdWx0VmFsdWVNYXgpLHRoaXMudmFsdWVSYW5nZT1tfW5bMF0uaGFzT3duUHJvcGVydHkoImZpbHRlciIpJiYodGhpcy5jb2xGaWx0ZXI9ImZpbHRlciIsdm9pZCAwPT09dGhpcy5kYXRhRmlsdGVyJiYodGhpcy5kYXRhRmlsdGVyPW5ldyB1KHQsdGhpcy5jb2xGaWx0ZXIsdGhpcyksdGhpcy5kYXRhRmlsdGVyLnNldE9uTG9hZENhbGxiYWNrKGZ1bmN0aW9uKCl7aS5yZWRyYXcoKX0pKSksdGhpcy5fc2V0U2NhbGUoKX19fSxvLnByb3RvdHlwZS5fZ2V0RGF0YVBvaW50cz1mdW5jdGlvbih0KXt2YXIgZSxpLG4scyxyLGEsaD1bXTtpZih0aGlzLnN0eWxlPT09by5TVFlMRS5HUklEfHx0aGlzLnN0eWxlPT09by5TVFlMRS5TVVJGQUNFKXt2YXIgZD1bXSxjPVtdO2ZvcihuPTA7bjx0aGlzLmdldE51bWJlck9mUm93cyh0KTtuKyspZT10W25dW3RoaXMuY29sWF18fDAsaT10W25dW3RoaXMuY29sWV18fDAsZC5pbmRleE9mKGUpPT09LTEmJmQucHVzaChlKSxjLmluZGV4T2YoaSk9PT0tMSYmYy5wdXNoKGkpO3ZhciB1PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX07ZC5zb3J0KHUpLGMuc29ydCh1KTt2YXIgcD1bXTtmb3Iobj0wO248dC5sZW5ndGg7bisrKXtlPXRbbl1bdGhpcy5jb2xYXXx8MCxpPXRbbl1bdGhpcy5jb2xZXXx8MCxzPXRbbl1bdGhpcy5jb2xaXXx8MDt2YXIgZj1kLmluZGV4T2YoZSksbT1jLmluZGV4T2YoaSk7dm9pZCAwPT09cFtmXSYmKHBbZl09W10pO3ZhciB2PW5ldyBsO3YueD1lLHYueT1pLHYuej1zLHYuZGF0YT10W25dLHI9e30sci5wb2ludD12LHIudHJhbnM9dm9pZCAwLHIuc2NyZWVuPXZvaWQgMCxyLmJvdHRvbT1uZXcgbChlLGksdGhpcy56UmFuZ2UubWluKSxwW2ZdW21dPXIsaC5wdXNoKHIpfWZvcihlPTA7ZTxwLmxlbmd0aDtlKyspZm9yKGk9MDtpPHBbZV0ubGVuZ3RoO2krKylwW2VdW2ldJiYocFtlXVtpXS5wb2ludFJpZ2h0PWU8cC5sZW5ndGgtMT9wW2UrMV1baV06dm9pZCAwLHBbZV1baV0ucG9pbnRUb3A9aTxwW2VdLmxlbmd0aC0xP3BbZV1baSsxXTp2b2lkIDAscFtlXVtpXS5wb2ludENyb3NzPWU8cC5sZW5ndGgtMSYmaTxwW2VdLmxlbmd0aC0xP3BbZSsxXVtpKzFdOnZvaWQgMCl9ZWxzZSBmb3IodGhpcy5fY2hlY2tWYWx1ZUZpZWxkKHQpLG49MDtuPHQubGVuZ3RoO24rKylhPW5ldyBsLGEueD10W25dW3RoaXMuY29sWF18fDAsYS55PXRbbl1bdGhpcy5jb2xZXXx8MCxhLno9dFtuXVt0aGlzLmNvbFpdfHwwLGEuZGF0YT10W25dLHZvaWQgMCE9PXRoaXMuY29sVmFsdWUmJihhLnZhbHVlPXRbbl1bdGhpcy5jb2xWYWx1ZV18fDApLHI9e30sci5wb2ludD1hLHIuYm90dG9tPW5ldyBsKGEueCxhLnksdGhpcy56UmFuZ2UubWluKSxyLnRyYW5zPXZvaWQgMCxyLnNjcmVlbj12b2lkIDAsdGhpcy5zdHlsZT09PW8uU1RZTEUuTElORSYmbj4wJiYoaFtuLTFdLnBvaW50TmV4dD1yKSxoLnB1c2gocik7cmV0dXJuIGh9LG8ucHJvdG90eXBlLmNyZWF0ZT1mdW5jdGlvbigpe2Zvcig7dGhpcy5jb250YWluZXJFbGVtZW50Lmhhc0NoaWxkTm9kZXMoKTspdGhpcy5jb250YWluZXJFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMuY29udGFpbmVyRWxlbWVudC5maXJzdENoaWxkKTt0aGlzLmZyYW1lPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuZnJhbWUuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIix0aGlzLmZyYW1lLnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iLHRoaXMuZnJhbWUuY2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLHRoaXMuZnJhbWUuY2FudmFzLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIsdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmZyYW1lLmNhbnZhcyk7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIik7dC5zdHlsZS5jb2xvcj0icmVkIix0LnN0eWxlLmZvbnRXZWlnaHQ9ImJvbGQiLHQuc3R5bGUucGFkZGluZz0iMTBweCIsdC5pbm5lckhUTUw9IkVycm9yOiB5b3VyIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBIVE1MIGNhbnZhcyIsdGhpcy5mcmFtZS5jYW52YXMuYXBwZW5kQ2hpbGQodCksdGhpcy5mcmFtZS5maWx0ZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5mcmFtZS5maWx0ZXIuc3R5bGUucG9zaXRpb249ImFic29sdXRlIix0aGlzLmZyYW1lLmZpbHRlci5zdHlsZS5ib3R0b209IjBweCIsdGhpcy5mcmFtZS5maWx0ZXIuc3R5bGUubGVmdD0iMHB4Iix0aGlzLmZyYW1lLmZpbHRlci5zdHlsZS53aWR0aD0iMTAwJSIsdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmZyYW1lLmZpbHRlcik7dmFyIGU9dGhpcyxpPWZ1bmN0aW9uKHQpe2UuX29uTW91c2VEb3duKHQpfSxvPWZ1bmN0aW9uKHQpe2UuX29uVG91Y2hTdGFydCh0KX0sbj1mdW5jdGlvbih0KXtlLl9vbldoZWVsKHQpfSxzPWZ1bmN0aW9uKHQpe2UuX29uVG9vbHRpcCh0KX07ZC5hZGRFdmVudExpc3RlbmVyKHRoaXMuZnJhbWUuY2FudmFzLCJrZXlkb3duIixvbmtleWRvd24pLGQuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmZyYW1lLmNhbnZhcywibW91c2Vkb3duIixpKSxkLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5mcmFtZS5jYW52YXMsInRvdWNoc3RhcnQiLG8pLGQuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmZyYW1lLmNhbnZhcywibW91c2V3aGVlbCIsbiksZC5hZGRFdmVudExpc3RlbmVyKHRoaXMuZnJhbWUuY2FudmFzLCJtb3VzZW1vdmUiLHMpLHRoaXMuY29udGFpbmVyRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmZyYW1lKX0sby5wcm90b3R5cGUuc2V0U2l6ZT1mdW5jdGlvbih0LGUpe3RoaXMuZnJhbWUuc3R5bGUud2lkdGg9dCx0aGlzLmZyYW1lLnN0eWxlLmhlaWdodD1lLHRoaXMuX3Jlc2l6ZUNhbnZhcygpfSxvLnByb3RvdHlwZS5fcmVzaXplQ2FudmFzPWZ1bmN0aW9uKCl7dGhpcy5mcmFtZS5jYW52YXMuc3R5bGUud2lkdGg9IjEwMCUiLHRoaXMuZnJhbWUuY2FudmFzLnN0eWxlLmhlaWdodD0iMTAwJSIsdGhpcy5mcmFtZS5jYW52YXMud2lkdGg9dGhpcy5mcmFtZS5jYW52YXMuY2xpZW50V2lkdGgsdGhpcy5mcmFtZS5jYW52YXMuaGVpZ2h0PXRoaXMuZnJhbWUuY2FudmFzLmNsaWVudEhlaWdodCx0aGlzLmZyYW1lLmZpbHRlci5zdHlsZS53aWR0aD10aGlzLmZyYW1lLmNhbnZhcy5jbGllbnRXaWR0aC0yMCsicHgifSxvLnByb3RvdHlwZS5hbmltYXRpb25TdGFydD1mdW5jdGlvbigpe2lmKCF0aGlzLmZyYW1lLmZpbHRlcnx8IXRoaXMuZnJhbWUuZmlsdGVyLnNsaWRlcil0aHJvdyBuZXcgRXJyb3IoIk5vIGFuaW1hdGlvbiBhdmFpbGFibGUiKTt0aGlzLmZyYW1lLmZpbHRlci5zbGlkZXIucGxheSgpfSxvLnByb3RvdHlwZS5hbmltYXRpb25TdG9wPWZ1bmN0aW9uKCl7dGhpcy5mcmFtZS5maWx0ZXImJnRoaXMuZnJhbWUuZmlsdGVyLnNsaWRlciYmdGhpcy5mcmFtZS5maWx0ZXIuc2xpZGVyLnN0b3AoKX0sby5wcm90b3R5cGUuX3Jlc2l6ZUNlbnRlcj1mdW5jdGlvbigpeyIlIj09PXRoaXMueENlbnRlci5jaGFyQXQodGhpcy54Q2VudGVyLmxlbmd0aC0xKT90aGlzLmN1cnJlbnRYQ2VudGVyPXBhcnNlRmxvYXQodGhpcy54Q2VudGVyKS8xMDAqdGhpcy5mcmFtZS5jYW52YXMuY2xpZW50V2lkdGg6dGhpcy5jdXJyZW50WENlbnRlcj1wYXJzZUZsb2F0KHRoaXMueENlbnRlciksIiUiPT09dGhpcy55Q2VudGVyLmNoYXJBdCh0aGlzLnlDZW50ZXIubGVuZ3RoLTEpP3RoaXMuY3VycmVudFlDZW50ZXI9cGFyc2VGbG9hdCh0aGlzLnlDZW50ZXIpLzEwMCoodGhpcy5mcmFtZS5jYW52YXMuY2xpZW50SGVpZ2h0LXRoaXMuZnJhbWUuZmlsdGVyLmNsaWVudEhlaWdodCk6dGhpcy5jdXJyZW50WUNlbnRlcj1wYXJzZUZsb2F0KHRoaXMueUNlbnRlcil9LG8ucHJvdG90eXBlLmdldENhbWVyYVBvc2l0aW9uPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jYW1lcmEuZ2V0QXJtUm90YXRpb24oKTtyZXR1cm4gdC5kaXN0YW5jZT10aGlzLmNhbWVyYS5nZXRBcm1MZW5ndGgoKSx0fSxvLnByb3RvdHlwZS5fcmVhZERhdGE9ZnVuY3Rpb24odCl7dGhpcy5fZGF0YUluaXRpYWxpemUodCx0aGlzLnN0eWxlKSx0aGlzLmRhdGFGaWx0ZXI/dGhpcy5kYXRhUG9pbnRzPXRoaXMuZGF0YUZpbHRlci5fZ2V0RGF0YVBvaW50cygpOnRoaXMuZGF0YVBvaW50cz10aGlzLl9nZXREYXRhUG9pbnRzKHRoaXMuZGF0YVRhYmxlKSx0aGlzLl9yZWRyYXdGaWx0ZXIoKX0sby5wcm90b3R5cGUuc2V0RGF0YT1mdW5jdGlvbih0KXt0aGlzLl9yZWFkRGF0YSh0KSx0aGlzLnJlZHJhdygpLHRoaXMuYW5pbWF0aW9uQXV0b1N0YXJ0JiZ0aGlzLmRhdGFGaWx0ZXImJnRoaXMuYW5pbWF0aW9uU3RhcnQoKX0sby5wcm90b3R5cGUuc2V0T3B0aW9ucz1mdW5jdGlvbih0KXt0aGlzLmFuaW1hdGlvblN0b3AoKSx2LnNldE9wdGlvbnModCx0aGlzKSx0aGlzLnNldFBvaW50RHJhd2luZ01ldGhvZCgpLHRoaXMuc2V0U2l6ZSh0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSx0aGlzLmRhdGFUYWJsZSYmdGhpcy5zZXREYXRhKHRoaXMuZGF0YVRhYmxlKSx0aGlzLmFuaW1hdGlvbkF1dG9TdGFydCYmdGhpcy5kYXRhRmlsdGVyJiZ0aGlzLmFuaW1hdGlvblN0YXJ0KCl9LG8ucHJvdG90eXBlLnNldFBvaW50RHJhd2luZ01ldGhvZD1mdW5jdGlvbigpe3ZhciB0PXZvaWQgMDtzd2l0Y2godGhpcy5zdHlsZSl7Y2FzZSBvLlNUWUxFLkJBUjp0PW8ucHJvdG90eXBlLl9yZWRyYXdCYXJHcmFwaFBvaW50O2JyZWFrO2Nhc2Ugby5TVFlMRS5CQVJDT0xPUjp0PW8ucHJvdG90eXBlLl9yZWRyYXdCYXJDb2xvckdyYXBoUG9pbnQ7YnJlYWs7Y2FzZSBvLlNUWUxFLkJBUlNJWkU6dD1vLnByb3RvdHlwZS5fcmVkcmF3QmFyU2l6ZUdyYXBoUG9pbnQ7YnJlYWs7Y2FzZSBvLlNUWUxFLkRPVDp0PW8ucHJvdG90eXBlLl9yZWRyYXdEb3RHcmFwaFBvaW50O2JyZWFrO2Nhc2Ugby5TVFlMRS5ET1RMSU5FOnQ9by5wcm90b3R5cGUuX3JlZHJhd0RvdExpbmVHcmFwaFBvaW50O2JyZWFrO2Nhc2Ugby5TVFlMRS5ET1RDT0xPUjp0PW8ucHJvdG90eXBlLl9yZWRyYXdEb3RDb2xvckdyYXBoUG9pbnQ7YnJlYWs7Y2FzZSBvLlNUWUxFLkRPVFNJWkU6dD1vLnByb3RvdHlwZS5fcmVkcmF3RG90U2l6ZUdyYXBoUG9pbnQ7YnJlYWs7Y2FzZSBvLlNUWUxFLlNVUkZBQ0U6dD1vLnByb3RvdHlwZS5fcmVkcmF3U3VyZmFjZUdyYXBoUG9pbnQ7YnJlYWs7Y2FzZSBvLlNUWUxFLkdSSUQ6dD1vLnByb3RvdHlwZS5fcmVkcmF3R3JpZEdyYXBoUG9pbnQ7YnJlYWs7Y2FzZSBvLlNUWUxFLkxJTkU6dD1vLnByb3RvdHlwZS5fcmVkcmF3TGluZUdyYXBoUG9pbnQ7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkNhbiBub3QgZGV0ZXJtaW5lIHBvaW50IGRyYXdpbmcgbWV0aG9kIGZvciBncmFwaCBzdHlsZSAnIit0aGlzLnN0eWxlKyInIil9dGhpcy5fcG9pbnREcmF3aW5nTWV0aG9kPXR9LG8ucHJvdG90eXBlLnJlZHJhdz1mdW5jdGlvbigpe2lmKHZvaWQgMD09PXRoaXMuZGF0YVBvaW50cyl0aHJvdyBuZXcgRXJyb3IoIkdyYXBoIGRhdGEgbm90IGluaXRpYWxpemVkIik7dGhpcy5fcmVzaXplQ2FudmFzKCksdGhpcy5fcmVzaXplQ2VudGVyKCksdGhpcy5fcmVkcmF3U2xpZGVyKCksdGhpcy5fcmVkcmF3Q2xlYXIoKSx0aGlzLl9yZWRyYXdBeGlzKCksdGhpcy5fcmVkcmF3RGF0YUdyYXBoKCksdGhpcy5fcmVkcmF3SW5mbygpLHRoaXMuX3JlZHJhd0xlZ2VuZCgpfSxvLnByb3RvdHlwZS5fZ2V0Q29udGV4dD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZnJhbWUuY2FudmFzLGU9dC5nZXRDb250ZXh0KCIyZCIpO3JldHVybiBlLmxpbmVKb2luPSJyb3VuZCIsZS5saW5lQ2FwPSJyb3VuZCIsZX0sby5wcm90b3R5cGUuX3JlZHJhd0NsZWFyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5mcmFtZS5jYW52YXMsZT10LmdldENvbnRleHQoIjJkIik7ZS5jbGVhclJlY3QoMCwwLHQud2lkdGgsdC5oZWlnaHQpfSxvLnByb3RvdHlwZS5fZG90U2l6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZyYW1lLmNsaWVudFdpZHRoKnRoaXMuZG90U2l6ZVJhdGlvfSxvLnByb3RvdHlwZS5fZ2V0TGVnZW5kV2lkdGg9ZnVuY3Rpb24oKXt2YXIgdDtpZih0aGlzLnN0eWxlPT09by5TVFlMRS5ET1RTSVpFKXt2YXIgZT10aGlzLl9kb3RTaXplKCk7dD1lLzIrMiplfWVsc2UgdD10aGlzLnN0eWxlPT09by5TVFlMRS5CQVJTSVpFP3RoaXMueEJhcldpZHRoOjIwO3JldHVybiB0fSxvLnByb3RvdHlwZS5fcmVkcmF3TGVnZW5kPWZ1bmN0aW9uKCl7aWYodGhpcy5zaG93TGVnZW5kPT09ITAmJnRoaXMuc3R5bGUhPT1vLlNUWUxFLkxJTkUmJnRoaXMuc3R5bGUhPT1vLlNUWUxFLkJBUlNJWkUpe3ZhciB0PXRoaXMuc3R5bGU9PT1vLlNUWUxFLkJBUlNJWkV8fHRoaXMuc3R5bGU9PT1vLlNUWUxFLkRPVFNJWkUsZT10aGlzLnN0eWxlPT09by5TVFlMRS5ET1RTSVpFfHx0aGlzLnN0eWxlPT09by5TVFlMRS5ET1RDT0xPUnx8dGhpcy5zdHlsZT09PW8uU1RZTEUuQkFSQ09MT1IsaT1NYXRoLm1heCguMjUqdGhpcy5mcmFtZS5jbGllbnRIZWlnaHQsMTAwKSxuPXRoaXMubWFyZ2luLHM9dGhpcy5fZ2V0TGVnZW5kV2lkdGgoKSxyPXRoaXMuZnJhbWUuY2xpZW50V2lkdGgtdGhpcy5tYXJnaW4sYT1yLXMsaD1uK2ksZD10aGlzLl9nZXRDb250ZXh0KCk7aWYoZC5saW5lV2lkdGg9MSxkLmZvbnQ9IjE0cHggYXJpYWwiLHQ9PT0hMSl7dmFyIGwsdT0wLHA9aTtmb3IobD11O2w8cDtsKyspe3ZhciBtPShsLXUpLyhwLXUpLHY9MjQwKm0sZz10aGlzLl9oc3YycmdiKHYsMSwxKTtkLnN0cm9rZVN0eWxlPWcsZC5iZWdpblBhdGgoKSxkLm1vdmVUbyhhLG4rbCksZC5saW5lVG8ocixuK2wpLGQuc3Ryb2tlKCl9ZC5zdHJva2VTdHlsZT10aGlzLmF4aXNDb2xvcixkLnN0cm9rZVJlY3QoYSxuLHMsaSl9ZWxzZXt2YXIgeTtpZih0aGlzLnN0eWxlPT09by5TVFlMRS5ET1RTSVpFKXt2YXIgYj10aGlzLl9kb3RTaXplKCk7eT1iLzJ9ZWxzZSB0aGlzLnN0eWxlPT09by5TVFlMRS5CQVJTSVpFO2Quc3Ryb2tlU3R5bGU9dGhpcy5heGlzQ29sb3IsZC5maWxsU3R5bGU9dGhpcy5kYXRhQ29sb3IuZmlsbCxkLmJlZ2luUGF0aCgpLGQubW92ZVRvKGEsbiksZC5saW5lVG8ocixuKSxkLmxpbmVUbyhyLXMreSxoKSxkLmxpbmVUbyhhLGgpLGQuY2xvc2VQYXRoKCksZC5maWxsKCksZC5zdHJva2UoKX12YXIgXz01LHc9ZT90aGlzLnZhbHVlUmFuZ2UubWluOnRoaXMuelJhbmdlLm1pbix4PWU/dGhpcy52YWx1ZVJhbmdlLm1heDp0aGlzLnpSYW5nZS5tYXgsaz1uZXcgZih3LHgsKHgtdykvNSwhMCk7ay5zdGFydCghMCk7Zm9yKHZhciBsLE8sRDshay5lbmQoKTspbD1oLShrLmdldEN1cnJlbnQoKS13KS8oeC13KSppLE89bmV3IGMoYS1fLGwpLEQ9bmV3IGMoYSxsKSx0aGlzLl9saW5lKGQsTyxEKSxkLnRleHRBbGlnbj0icmlnaHQiLGQudGV4dEJhc2VsaW5lPSJtaWRkbGUiLGQuZmlsbFN0eWxlPXRoaXMuYXhpc0NvbG9yLGQuZmlsbFRleHQoay5nZXRDdXJyZW50KCksYS0yKl8sbCksay5uZXh0KCk7ZC50ZXh0QWxpZ249InJpZ2h0IixkLnRleHRCYXNlbGluZT0idG9wIjt2YXIgUz10aGlzLmxlZ2VuZExhYmVsO2QuZmlsbFRleHQoUyxyLGgrdGhpcy5tYXJnaW4pfX0sby5wcm90b3R5cGUuX3JlZHJhd0ZpbHRlcj1mdW5jdGlvbigpe2lmKHRoaXMuZnJhbWUuZmlsdGVyLmlubmVySFRNTD0iIix0aGlzLmRhdGFGaWx0ZXIpe3ZhciB0PXt2aXNpYmxlOnRoaXMuc2hvd0FuaW1hdGlvbkNvbnRyb2xzfSxlPW5ldyBwKHRoaXMuZnJhbWUuZmlsdGVyLHQpO3RoaXMuZnJhbWUuZmlsdGVyLnNsaWRlcj1lLHRoaXMuZnJhbWUuZmlsdGVyLnN0eWxlLnBhZGRpbmc9IjEwcHgiLGUuc2V0VmFsdWVzKHRoaXMuZGF0YUZpbHRlci52YWx1ZXMpLGUuc2V0UGxheUludGVydmFsKHRoaXMuYW5pbWF0aW9uSW50ZXJ2YWwpO3ZhciBpPXRoaXMsbz1mdW5jdGlvbigpe3ZhciB0PWUuZ2V0SW5kZXgoKTtpLmRhdGFGaWx0ZXIuc2VsZWN0VmFsdWUodCksaS5kYXRhUG9pbnRzPWkuZGF0YUZpbHRlci5fZ2V0RGF0YVBvaW50cygpLGkucmVkcmF3KCl9O2Uuc2V0T25DaGFuZ2VDYWxsYmFjayhvKX1lbHNlIHRoaXMuZnJhbWUuZmlsdGVyLnNsaWRlcj12b2lkIDB9LG8ucHJvdG90eXBlLl9yZWRyYXdTbGlkZXI9ZnVuY3Rpb24oKXt2b2lkIDAhPT10aGlzLmZyYW1lLmZpbHRlci5zbGlkZXImJnRoaXMuZnJhbWUuZmlsdGVyLnNsaWRlci5yZWRyYXcoKX0sby5wcm90b3R5cGUuX3JlZHJhd0luZm89ZnVuY3Rpb24oKXtpZih0aGlzLmRhdGFGaWx0ZXIpe3ZhciB0PXRoaXMuX2dldENvbnRleHQoKTt0LmZvbnQ9IjE0cHggYXJpYWwiLHQubGluZVN0eWxlPSJncmF5Iix0LmZpbGxTdHlsZT0iZ3JheSIsdC50ZXh0QWxpZ249ImxlZnQiLHQudGV4dEJhc2VsaW5lPSJ0b3AiO3ZhciBlPXRoaXMubWFyZ2luLGk9dGhpcy5tYXJnaW47dC5maWxsVGV4dCh0aGlzLmRhdGFGaWx0ZXIuZ2V0TGFiZWwoKSsiOiAiK3RoaXMuZGF0YUZpbHRlci5nZXRTZWxlY3RlZFZhbHVlKCksZSxpKX19LG8ucHJvdG90eXBlLl9saW5lPWZ1bmN0aW9uKHQsZSxpLG8pe3ZvaWQgMCE9PW8mJih0LnN0cm9rZVN0eWxlPW8pLHQuYmVnaW5QYXRoKCksdC5tb3ZlVG8oZS54LGUueSksdC5saW5lVG8oaS54LGkueSksdC5zdHJva2UoKX0sby5wcm90b3R5cGUuZHJhd0F4aXNMYWJlbFg9ZnVuY3Rpb24odCxlLGksbyxuKXt2b2lkIDA9PT1uJiYobj0wKTt2YXIgcz10aGlzLl9jb252ZXJ0M0R0bzJEKGUpO01hdGguY29zKDIqbyk+MD8odC50ZXh0QWxpZ249ImNlbnRlciIsdC50ZXh0QmFzZWxpbmU9InRvcCIscy55Kz1uKTpNYXRoLnNpbigyKm8pPDA/KHQudGV4dEFsaWduPSJyaWdodCIsdC50ZXh0QmFzZWxpbmU9Im1pZGRsZSIpOih0LnRleHRBbGlnbj0ibGVmdCIsdC50ZXh0QmFzZWxpbmU9Im1pZGRsZSIpLHQuZmlsbFN0eWxlPXRoaXMuYXhpc0NvbG9yLHQuZmlsbFRleHQoaSxzLngscy55KX0sby5wcm90b3R5cGUuZHJhd0F4aXNMYWJlbFk9ZnVuY3Rpb24odCxlLGksbyxuKXt2b2lkIDA9PT1uJiYobj0wKTt2YXIgcz10aGlzLl9jb252ZXJ0M0R0bzJEKGUpO01hdGguY29zKDIqbyk8MD8odC50ZXh0QWxpZ249ImNlbnRlciIsdC50ZXh0QmFzZWxpbmU9InRvcCIscy55Kz1uKTpNYXRoLnNpbigyKm8pPjA/KHQudGV4dEFsaWduPSJyaWdodCIsdC50ZXh0QmFzZWxpbmU9Im1pZGRsZSIpOih0LnRleHRBbGlnbj0ibGVmdCIsdC50ZXh0QmFzZWxpbmU9Im1pZGRsZSIpLHQuZmlsbFN0eWxlPXRoaXMuYXhpc0NvbG9yLHQuZmlsbFRleHQoaSxzLngscy55KX0sby5wcm90b3R5cGUuZHJhd0F4aXNMYWJlbFo9ZnVuY3Rpb24odCxlLGksbyl7dm9pZCAwPT09byYmKG89MCk7dmFyIG49dGhpcy5fY29udmVydDNEdG8yRChlKTt0LnRleHRBbGlnbj0icmlnaHQiLHQudGV4dEJhc2VsaW5lPSJtaWRkbGUiLHQuZmlsbFN0eWxlPXRoaXMuYXhpc0NvbG9yLHQuZmlsbFRleHQoaSxuLngtbyxuLnkpfSxvLnByb3RvdHlwZS5fbGluZTNkPWZ1bmN0aW9uKHQsZSxpLG8pe3ZhciBuPXRoaXMuX2NvbnZlcnQzRHRvMkQoZSkscz10aGlzLl9jb252ZXJ0M0R0bzJEKGkpO3RoaXMuX2xpbmUodCxuLHMsbyl9LG8ucHJvdG90eXBlLl9yZWRyYXdBeGlzPWZ1bmN0aW9uKCl7dmFyIHQsZSxpLG8sbixzLHIsYSxoLGQsdSxwPXRoaXMuX2dldENvbnRleHQoKTtwLmZvbnQ9MjQvdGhpcy5jYW1lcmEuZ2V0QXJtTGVuZ3RoKCkrInB4IGFyaWFsIjt2YXIgbT0uMDI1L3RoaXMuc2NhbGUueCx2PS4wMjUvdGhpcy5zY2FsZS55LGc9NS90aGlzLmNhbWVyYS5nZXRBcm1MZW5ndGgoKSx5PXRoaXMuY2FtZXJhLmdldEFybVJvdGF0aW9uKCkuaG9yaXpvbnRhbCxiPW5ldyBjKE1hdGguY29zKHkpLE1hdGguc2luKHkpKSxfPXRoaXMueFJhbmdlLHc9dGhpcy55UmFuZ2UseD10aGlzLnpSYW5nZTtmb3IocC5saW5lV2lkdGg9MSxvPXZvaWQgMD09PXRoaXMuZGVmYXVsdFhTdGVwLGk9bmV3IGYoXy5taW4sXy5tYXgsdGhpcy54U3RlcCxvKSxpLnN0YXJ0KCEwKTshaS5lbmQoKTspe3ZhciBrPWkuZ2V0Q3VycmVudCgpO3RoaXMuc2hvd0dyaWQ/KHQ9bmV3IGwoayx3Lm1pbix4Lm1pbiksZT1uZXcgbChrLHcubWF4LHgubWluKSx0aGlzLl9saW5lM2QocCx0LGUsdGhpcy5ncmlkQ29sb3IpKToodD1uZXcgbChrLHcubWluLHgubWluKSxlPW5ldyBsKGssdy5taW4rbSx4Lm1pbiksdGhpcy5fbGluZTNkKHAsdCxlLHRoaXMuYXhpc0NvbG9yKSx0PW5ldyBsKGssdy5tYXgseC5taW4pLGU9bmV3IGwoayx3Lm1heC1tLHgubWluKSx0aGlzLl9saW5lM2QocCx0LGUsdGhpcy5heGlzQ29sb3IpKSxyPWIueD4wP3cubWluOncubWF4O3ZhciBPPW5ldyBsKGsscix4Lm1pbiksRD0iICAiK3RoaXMueFZhbHVlTGFiZWwoaykrIiAgIjt0aGlzLmRyYXdBeGlzTGFiZWxYKHAsTyxELHksZyksaS5uZXh0KCl9Zm9yKHAubGluZVdpZHRoPTEsbz12b2lkIDA9PT10aGlzLmRlZmF1bHRZU3RlcCxpPW5ldyBmKHcubWluLHcubWF4LHRoaXMueVN0ZXAsbyksaS5zdGFydCghMCk7IWkuZW5kKCk7KXt2YXIgUz1pLmdldEN1cnJlbnQoKTt0aGlzLnNob3dHcmlkPyh0PW5ldyBsKF8ubWluLFMseC5taW4pLGU9bmV3IGwoXy5tYXgsUyx4Lm1pbiksdGhpcy5fbGluZTNkKHAsdCxlLHRoaXMuZ3JpZENvbG9yKSk6KHQ9bmV3IGwoXy5taW4sUyx4Lm1pbiksZT1uZXcgbChfLm1pbit2LFMseC5taW4pLHRoaXMuX2xpbmUzZChwLHQsZSx0aGlzLmF4aXNDb2xvciksdD1uZXcgbChfLm1heCxTLHgubWluKSxlPW5ldyBsKF8ubWF4LXYsUyx4Lm1pbiksdGhpcy5fbGluZTNkKHAsdCxlLHRoaXMuYXhpc0NvbG9yKSkscz1iLnk+MD9fLm1pbjpfLm1heCxPPW5ldyBsKHMsUyx4Lm1pbik7dmFyIEQ9IiAgIit0aGlzLnlWYWx1ZUxhYmVsKFMpKyIgICI7dGhpcy5kcmF3QXhpc0xhYmVsWShwLE8sRCx5LGcpLGkubmV4dCgpfWZvcihwLmxpbmVXaWR0aD0xLG89dm9pZCAwPT09dGhpcy5kZWZhdWx0WlN0ZXAsaT1uZXcgZih4Lm1pbix4Lm1heCx0aGlzLnpTdGVwLG8pLAppLnN0YXJ0KCEwKSxzPWIueD4wP18ubWluOl8ubWF4LHI9Yi55PDA/dy5taW46dy5tYXg7IWkuZW5kKCk7KXt2YXIgQz1pLmdldEN1cnJlbnQoKSxUPW5ldyBsKHMscixDKSxFPXRoaXMuX2NvbnZlcnQzRHRvMkQoVCk7ZT1uZXcgYyhFLngtZyxFLnkpLHRoaXMuX2xpbmUocCxFLGUsdGhpcy5heGlzQ29sb3IpO3ZhciBEPXRoaXMuelZhbHVlTGFiZWwoQykrIiAiO3RoaXMuZHJhd0F4aXNMYWJlbFoocCxULEQsNSksaS5uZXh0KCl9cC5saW5lV2lkdGg9MSx0PW5ldyBsKHMscix4Lm1pbiksZT1uZXcgbChzLHIseC5tYXgpLHRoaXMuX2xpbmUzZChwLHQsZSx0aGlzLmF4aXNDb2xvcik7dmFyIE0sUDtwLmxpbmVXaWR0aD0xLE09bmV3IGwoXy5taW4sdy5taW4seC5taW4pLFA9bmV3IGwoXy5tYXgsdy5taW4seC5taW4pLHRoaXMuX2xpbmUzZChwLE0sUCx0aGlzLmF4aXNDb2xvciksTT1uZXcgbChfLm1pbix3Lm1heCx4Lm1pbiksUD1uZXcgbChfLm1heCx3Lm1heCx4Lm1pbiksdGhpcy5fbGluZTNkKHAsTSxQLHRoaXMuYXhpc0NvbG9yKSxwLmxpbmVXaWR0aD0xLHQ9bmV3IGwoXy5taW4sdy5taW4seC5taW4pLGU9bmV3IGwoXy5taW4sdy5tYXgseC5taW4pLHRoaXMuX2xpbmUzZChwLHQsZSx0aGlzLmF4aXNDb2xvciksdD1uZXcgbChfLm1heCx3Lm1pbix4Lm1pbiksZT1uZXcgbChfLm1heCx3Lm1heCx4Lm1pbiksdGhpcy5fbGluZTNkKHAsdCxlLHRoaXMuYXhpc0NvbG9yKTt2YXIgST10aGlzLnhMYWJlbDtJLmxlbmd0aD4wJiYodT0uMS90aGlzLnNjYWxlLnkscz1fLmNlbnRlcigpLzIscj1iLng+MD93Lm1pbi11OncubWF4K3Usbj1uZXcgbChzLHIseC5taW4pLHRoaXMuZHJhd0F4aXNMYWJlbFgocCxuLEkseSkpO3ZhciBOPXRoaXMueUxhYmVsO04ubGVuZ3RoPjAmJihkPS4xL3RoaXMuc2NhbGUueCxzPWIueT4wP18ubWluLWQ6Xy5tYXgrZCxyPXcuY2VudGVyKCkvMixuPW5ldyBsKHMscix4Lm1pbiksdGhpcy5kcmF3QXhpc0xhYmVsWShwLG4sTix5KSk7dmFyIFI9dGhpcy56TGFiZWw7Ui5sZW5ndGg+MCYmKGg9MzAscz1iLng+MD9fLm1pbjpfLm1heCxyPWIueTwwP3cubWluOncubWF4LGE9eC5jZW50ZXIoKS8yLG49bmV3IGwocyxyLGEpLHRoaXMuZHJhd0F4aXNMYWJlbFoocCxuLFIsaCkpfSxvLnByb3RvdHlwZS5faHN2MnJnYj1mdW5jdGlvbih0LGUsaSl7dmFyIG8sbixzLHIsYSxoO3N3aXRjaChyPWkqZSxhPU1hdGguZmxvb3IodC82MCksaD1yKigxLU1hdGguYWJzKHQvNjAlMi0xKSksYSl7Y2FzZSAwOm89cixuPWgscz0wO2JyZWFrO2Nhc2UgMTpvPWgsbj1yLHM9MDticmVhaztjYXNlIDI6bz0wLG49cixzPWg7YnJlYWs7Y2FzZSAzOm89MCxuPWgscz1yO2JyZWFrO2Nhc2UgNDpvPWgsbj0wLHM9cjticmVhaztjYXNlIDU6bz1yLG49MCxzPWg7YnJlYWs7ZGVmYXVsdDpvPTAsbj0wLHM9MH1yZXR1cm4iUkdCKCIrcGFyc2VJbnQoMjU1Km8pKyIsIitwYXJzZUludCgyNTUqbikrIiwiK3BhcnNlSW50KDI1NSpzKSsiKSJ9LG8ucHJvdG90eXBlLl9nZXRTdHJva2VXaWR0aD1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwIT09dD90aGlzLnNob3dQZXJzcGVjdGl2ZT8xLy10LnRyYW5zLnoqdGhpcy5kYXRhQ29sb3Iuc3Ryb2tlV2lkdGg6LSh0aGlzLmV5ZS56L3RoaXMuY2FtZXJhLmdldEFybUxlbmd0aCgpKSp0aGlzLmRhdGFDb2xvci5zdHJva2VXaWR0aDp0aGlzLmRhdGFDb2xvci5zdHJva2VXaWR0aH0sby5wcm90b3R5cGUuX3JlZHJhd0Jhcj1mdW5jdGlvbih0LGUsaSxvLG4scyl7dmFyIHIsYSxoPXRoaXMsZD1lLnBvaW50LGM9dGhpcy56UmFuZ2UubWluLHU9W3twb2ludDpuZXcgbChkLngtaSxkLnktbyxkLnopfSx7cG9pbnQ6bmV3IGwoZC54K2ksZC55LW8sZC56KX0se3BvaW50Om5ldyBsKGQueCtpLGQueStvLGQueil9LHtwb2ludDpuZXcgbChkLngtaSxkLnkrbyxkLnopfV0scD1be3BvaW50Om5ldyBsKGQueC1pLGQueS1vLGMpfSx7cG9pbnQ6bmV3IGwoZC54K2ksZC55LW8sYyl9LHtwb2ludDpuZXcgbChkLngraSxkLnkrbyxjKX0se3BvaW50Om5ldyBsKGQueC1pLGQueStvLGMpfV07dS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Quc2NyZWVuPWguX2NvbnZlcnQzRHRvMkQodC5wb2ludCl9KSxwLmZvckVhY2goZnVuY3Rpb24odCl7dC5zY3JlZW49aC5fY29udmVydDNEdG8yRCh0LnBvaW50KX0pO3ZhciBmPVt7Y29ybmVyczp1LGNlbnRlcjpsLmF2ZyhwWzBdLnBvaW50LHBbMl0ucG9pbnQpfSx7Y29ybmVyczpbdVswXSx1WzFdLHBbMV0scFswXV0sY2VudGVyOmwuYXZnKHBbMV0ucG9pbnQscFswXS5wb2ludCl9LHtjb3JuZXJzOlt1WzFdLHVbMl0scFsyXSxwWzFdXSxjZW50ZXI6bC5hdmcocFsyXS5wb2ludCxwWzFdLnBvaW50KX0se2Nvcm5lcnM6W3VbMl0sdVszXSxwWzNdLHBbMl1dLGNlbnRlcjpsLmF2ZyhwWzNdLnBvaW50LHBbMl0ucG9pbnQpfSx7Y29ybmVyczpbdVszXSx1WzBdLHBbMF0scFszXV0sY2VudGVyOmwuYXZnKHBbMF0ucG9pbnQscFszXS5wb2ludCl9XTtmb3IoZS5zdXJmYWNlcz1mLHI9MDtyPGYubGVuZ3RoO3IrKyl7YT1mW3JdO3ZhciBtPXRoaXMuX2NvbnZlcnRQb2ludFRvVHJhbnNsYXRpb24oYS5jZW50ZXIpO2EuZGlzdD10aGlzLnNob3dQZXJzcGVjdGl2ZT9tLmxlbmd0aCgpOi1tLnp9Zm9yKGYuc29ydChmdW5jdGlvbih0LGUpe3ZhciBpPWUuZGlzdC10LmRpc3Q7cmV0dXJuIGk/aTp0LmNvcm5lcnM9PT11PzE6ZS5jb3JuZXJzPT09dT8tMTowfSksdC5saW5lV2lkdGg9dGhpcy5fZ2V0U3Ryb2tlV2lkdGgoZSksdC5zdHJva2VTdHlsZT1zLHQuZmlsbFN0eWxlPW4scj0yO3I8Zi5sZW5ndGg7cisrKWE9ZltyXSx0aGlzLl9wb2x5Z29uKHQsYS5jb3JuZXJzKX0sby5wcm90b3R5cGUuX3BvbHlnb249ZnVuY3Rpb24odCxlLGksbyl7aWYoIShlLmxlbmd0aDwyKSl7dm9pZCAwIT09aSYmKHQuZmlsbFN0eWxlPWkpLHZvaWQgMCE9PW8mJih0LnN0cm9rZVN0eWxlPW8pLHQuYmVnaW5QYXRoKCksdC5tb3ZlVG8oZVswXS5zY3JlZW4ueCxlWzBdLnNjcmVlbi55KTtmb3IodmFyIG49MTtuPGUubGVuZ3RoOysrbil7dmFyIHM9ZVtuXTt0LmxpbmVUbyhzLnNjcmVlbi54LHMuc2NyZWVuLnkpfXQuY2xvc2VQYXRoKCksdC5maWxsKCksdC5zdHJva2UoKX19LG8ucHJvdG90eXBlLl9kcmF3Q2lyY2xlPWZ1bmN0aW9uKHQsZSxpLG8sbil7dmFyIHM9dGhpcy5fY2FsY1JhZGl1cyhlLG4pO3QubGluZVdpZHRoPXRoaXMuX2dldFN0cm9rZVdpZHRoKGUpLHQuc3Ryb2tlU3R5bGU9byx0LmZpbGxTdHlsZT1pLHQuYmVnaW5QYXRoKCksdC5hcmMoZS5zY3JlZW4ueCxlLnNjcmVlbi55LHMsMCwyKk1hdGguUEksITApLHQuZmlsbCgpLHQuc3Ryb2tlKCl9LG8ucHJvdG90eXBlLl9nZXRDb2xvcnNSZWd1bGFyPWZ1bmN0aW9uKHQpe3ZhciBlPTI0MCooMS0odC5wb2ludC56LXRoaXMuelJhbmdlLm1pbikqdGhpcy5zY2FsZS56L3RoaXMudmVydGljYWxSYXRpbyksaT10aGlzLl9oc3YycmdiKGUsMSwxKSxvPXRoaXMuX2hzdjJyZ2IoZSwxLC44KTtyZXR1cm57ZmlsbDppLGJvcmRlcjpvfX0sby5wcm90b3R5cGUuX2dldENvbG9yc0NvbG9yPWZ1bmN0aW9uKHQpe3ZhciBlPTI0MCooMS0odC5wb2ludC52YWx1ZS10aGlzLnZhbHVlUmFuZ2UubWluKSp0aGlzLnNjYWxlLnZhbHVlKSxpPXRoaXMuX2hzdjJyZ2IoZSwxLDEpLG89dGhpcy5faHN2MnJnYihlLDEsLjgpO3JldHVybntmaWxsOmksYm9yZGVyOm99fSxvLnByb3RvdHlwZS5fZ2V0Q29sb3JzU2l6ZT1mdW5jdGlvbigpe3JldHVybntmaWxsOnRoaXMuZGF0YUNvbG9yLmZpbGwsYm9yZGVyOnRoaXMuZGF0YUNvbG9yLnN0cm9rZX19LG8ucHJvdG90eXBlLl9jYWxjUmFkaXVzPWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9dGhpcy5fZG90U2l6ZSgpKTt2YXIgaTtyZXR1cm4gaT10aGlzLnNob3dQZXJzcGVjdGl2ZT9lLy10LnRyYW5zLno6ZSotKHRoaXMuZXllLnovdGhpcy5jYW1lcmEuZ2V0QXJtTGVuZ3RoKCkpLGk8MCYmKGk9MCksaX0sby5wcm90b3R5cGUuX3JlZHJhd0JhckdyYXBoUG9pbnQ9ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLnhCYXJXaWR0aC8yLG89dGhpcy55QmFyV2lkdGgvMixuPXRoaXMuX2dldENvbG9yc1JlZ3VsYXIoZSk7dGhpcy5fcmVkcmF3QmFyKHQsZSxpLG8sbi5maWxsLG4uYm9yZGVyKX0sby5wcm90b3R5cGUuX3JlZHJhd0JhckNvbG9yR3JhcGhQb2ludD1mdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMueEJhcldpZHRoLzIsbz10aGlzLnlCYXJXaWR0aC8yLG49dGhpcy5fZ2V0Q29sb3JzQ29sb3IoZSk7dGhpcy5fcmVkcmF3QmFyKHQsZSxpLG8sbi5maWxsLG4uYm9yZGVyKX0sby5wcm90b3R5cGUuX3JlZHJhd0JhclNpemVHcmFwaFBvaW50PWZ1bmN0aW9uKHQsZSl7dmFyIGk9KGUucG9pbnQudmFsdWUtdGhpcy52YWx1ZVJhbmdlLm1pbikvdGhpcy52YWx1ZVJhbmdlLnJhbmdlKCksbz10aGlzLnhCYXJXaWR0aC8yKiguOCppKy4yKSxuPXRoaXMueUJhcldpZHRoLzIqKC44KmkrLjIpLHM9dGhpcy5fZ2V0Q29sb3JzU2l6ZSgpO3RoaXMuX3JlZHJhd0Jhcih0LGUsbyxuLHMuZmlsbCxzLmJvcmRlcil9LG8ucHJvdG90eXBlLl9yZWRyYXdEb3RHcmFwaFBvaW50PWZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5fZ2V0Q29sb3JzUmVndWxhcihlKTt0aGlzLl9kcmF3Q2lyY2xlKHQsZSxpLmZpbGwsaS5ib3JkZXIpfSxvLnByb3RvdHlwZS5fcmVkcmF3RG90TGluZUdyYXBoUG9pbnQ9ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLl9jb252ZXJ0M0R0bzJEKGUuYm90dG9tKTt0LmxpbmVXaWR0aD0xLHRoaXMuX2xpbmUodCxpLGUuc2NyZWVuLHRoaXMuZ3JpZENvbG9yKSx0aGlzLl9yZWRyYXdEb3RHcmFwaFBvaW50KHQsZSl9LG8ucHJvdG90eXBlLl9yZWRyYXdEb3RDb2xvckdyYXBoUG9pbnQ9ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLl9nZXRDb2xvcnNDb2xvcihlKTt0aGlzLl9kcmF3Q2lyY2xlKHQsZSxpLmZpbGwsaS5ib3JkZXIpfSxvLnByb3RvdHlwZS5fcmVkcmF3RG90U2l6ZUdyYXBoUG9pbnQ9ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLl9kb3RTaXplKCksbz0oZS5wb2ludC52YWx1ZS10aGlzLnZhbHVlUmFuZ2UubWluKS90aGlzLnZhbHVlUmFuZ2UucmFuZ2UoKSxuPWkvMisyKmkqbyxzPXRoaXMuX2dldENvbG9yc1NpemUoKTt0aGlzLl9kcmF3Q2lyY2xlKHQsZSxzLmZpbGwscy5ib3JkZXIsbil9LG8ucHJvdG90eXBlLl9yZWRyYXdTdXJmYWNlR3JhcGhQb2ludD1mdW5jdGlvbih0LGUpe3ZhciBpPWUucG9pbnRSaWdodCxvPWUucG9pbnRUb3Asbj1lLnBvaW50Q3Jvc3M7aWYodm9pZCAwIT09ZSYmdm9pZCAwIT09aSYmdm9pZCAwIT09byYmdm9pZCAwIT09bil7dmFyIHMscixhPSEwO2lmKHRoaXMuc2hvd0dyYXlCb3R0b218fHRoaXMuc2hvd1NoYWRvdyl7dmFyIGg9bC5zdWJ0cmFjdChuLnRyYW5zLGUudHJhbnMpLGQ9bC5zdWJ0cmFjdChvLnRyYW5zLGkudHJhbnMpLGM9bC5jcm9zc1Byb2R1Y3QoaCxkKSx1PWMubGVuZ3RoKCk7YT1jLno+MH1pZihhKXt2YXIgcCxmPShlLnBvaW50LnoraS5wb2ludC56K28ucG9pbnQueituLnBvaW50LnopLzQsbT0yNDAqKDEtKGYtdGhpcy56UmFuZ2UubWluKSp0aGlzLnNjYWxlLnovdGhpcy52ZXJ0aWNhbFJhdGlvKSx2PTE7dGhpcy5zaG93U2hhZG93PyhwPU1hdGgubWluKDErYy54L3UvMiwxKSxzPXRoaXMuX2hzdjJyZ2IobSx2LHApLHI9cyk6KHA9MSxzPXRoaXMuX2hzdjJyZ2IobSx2LHApLHI9dGhpcy5heGlzQ29sb3IpfWVsc2Ugcz0iZ3JheSIscj10aGlzLmF4aXNDb2xvcjt0LmxpbmVXaWR0aD10aGlzLl9nZXRTdHJva2VXaWR0aChlKTt2YXIgZz1bZSxpLG4sb107dGhpcy5fcG9seWdvbih0LGcscyxyKX19LG8ucHJvdG90eXBlLl9kcmF3R3JpZExpbmU9ZnVuY3Rpb24odCxlLGkpe2lmKHZvaWQgMCE9PWUmJnZvaWQgMCE9PWkpe3ZhciBvPShlLnBvaW50LnoraS5wb2ludC56KS8yLG49MjQwKigxLShvLXRoaXMuelJhbmdlLm1pbikqdGhpcy5zY2FsZS56L3RoaXMudmVydGljYWxSYXRpbyk7dC5saW5lV2lkdGg9Mip0aGlzLl9nZXRTdHJva2VXaWR0aChlKSx0LnN0cm9rZVN0eWxlPXRoaXMuX2hzdjJyZ2IobiwxLDEpLHRoaXMuX2xpbmUodCxlLnNjcmVlbixpLnNjcmVlbil9fSxvLnByb3RvdHlwZS5fcmVkcmF3R3JpZEdyYXBoUG9pbnQ9ZnVuY3Rpb24odCxlKXt0aGlzLl9kcmF3R3JpZExpbmUodCxlLGUucG9pbnRSaWdodCksdGhpcy5fZHJhd0dyaWRMaW5lKHQsZSxlLnBvaW50VG9wKX0sby5wcm90b3R5cGUuX3JlZHJhd0xpbmVHcmFwaFBvaW50PWZ1bmN0aW9uKHQsZSl7dm9pZCAwIT09ZS5wb2ludE5leHQmJih0LmxpbmVXaWR0aD10aGlzLl9nZXRTdHJva2VXaWR0aChlKSx0LnN0cm9rZVN0eWxlPXRoaXMuZGF0YUNvbG9yLnN0cm9rZSx0aGlzLl9saW5lKHQsZS5zY3JlZW4sZS5wb2ludE5leHQuc2NyZWVuKSl9LG8ucHJvdG90eXBlLl9yZWRyYXdEYXRhR3JhcGg9ZnVuY3Rpb24oKXt2YXIgdCxlPXRoaXMuX2dldENvbnRleHQoKTtpZighKHZvaWQgMD09PXRoaXMuZGF0YVBvaW50c3x8dGhpcy5kYXRhUG9pbnRzLmxlbmd0aDw9MCkpZm9yKHRoaXMuX2NhbGNUcmFuc2xhdGlvbnModGhpcy5kYXRhUG9pbnRzKSx0PTA7dDx0aGlzLmRhdGFQb2ludHMubGVuZ3RoO3QrKyl7dmFyIGk9dGhpcy5kYXRhUG9pbnRzW3RdO3RoaXMuX3BvaW50RHJhd2luZ01ldGhvZC5jYWxsKHRoaXMsZSxpKX19LG8ucHJvdG90eXBlLl9vbk1vdXNlRG93bj1mdW5jdGlvbih0KXtpZih0PXR8fHdpbmRvdy5ldmVudCx0aGlzLmxlZnRCdXR0b25Eb3duJiZ0aGlzLl9vbk1vdXNlVXAodCksdGhpcy5sZWZ0QnV0dG9uRG93bj10LndoaWNoPzE9PT10LndoaWNoOjE9PT10LmJ1dHRvbix0aGlzLmxlZnRCdXR0b25Eb3dufHx0aGlzLnRvdWNoRG93bil7dGhpcy5zdGFydE1vdXNlWD1uKHQpLHRoaXMuc3RhcnRNb3VzZVk9cyh0KSx0aGlzLnN0YXJ0U3RhcnQ9bmV3IERhdGUodGhpcy5zdGFydCksdGhpcy5zdGFydEVuZD1uZXcgRGF0ZSh0aGlzLmVuZCksdGhpcy5zdGFydEFybVJvdGF0aW9uPXRoaXMuY2FtZXJhLmdldEFybVJvdGF0aW9uKCksdGhpcy5mcmFtZS5zdHlsZS5jdXJzb3I9Im1vdmUiO3ZhciBlPXRoaXM7dGhpcy5vbm1vdXNlbW92ZT1mdW5jdGlvbih0KXtlLl9vbk1vdXNlTW92ZSh0KX0sdGhpcy5vbm1vdXNldXA9ZnVuY3Rpb24odCl7ZS5fb25Nb3VzZVVwKHQpfSxkLmFkZEV2ZW50TGlzdGVuZXIoZG9jdW1lbnQsIm1vdXNlbW92ZSIsZS5vbm1vdXNlbW92ZSksZC5hZGRFdmVudExpc3RlbmVyKGRvY3VtZW50LCJtb3VzZXVwIixlLm9ubW91c2V1cCksZC5wcmV2ZW50RGVmYXVsdCh0KX19LG8ucHJvdG90eXBlLl9vbk1vdXNlTW92ZT1mdW5jdGlvbih0KXt0PXR8fHdpbmRvdy5ldmVudDt2YXIgZT1wYXJzZUZsb2F0KG4odCkpLXRoaXMuc3RhcnRNb3VzZVgsaT1wYXJzZUZsb2F0KHModCkpLXRoaXMuc3RhcnRNb3VzZVksbz10aGlzLnN0YXJ0QXJtUm90YXRpb24uaG9yaXpvbnRhbCtlLzIwMCxyPXRoaXMuc3RhcnRBcm1Sb3RhdGlvbi52ZXJ0aWNhbCtpLzIwMCxhPTQsaD1NYXRoLnNpbihhLzM2MCoyKk1hdGguUEkpO01hdGguYWJzKE1hdGguc2luKG8pKTxoJiYobz1NYXRoLnJvdW5kKG8vTWF0aC5QSSkqTWF0aC5QSS0uMDAxKSxNYXRoLmFicyhNYXRoLmNvcyhvKSk8aCYmKG89KE1hdGgucm91bmQoby9NYXRoLlBJLS41KSsuNSkqTWF0aC5QSS0uMDAxKSxNYXRoLmFicyhNYXRoLnNpbihyKSk8aCYmKHI9TWF0aC5yb3VuZChyL01hdGguUEkpKk1hdGguUEkpLE1hdGguYWJzKE1hdGguY29zKHIpKTxoJiYocj0oTWF0aC5yb3VuZChyL01hdGguUEktLjUpKy41KSpNYXRoLlBJKSx0aGlzLmNhbWVyYS5zZXRBcm1Sb3RhdGlvbihvLHIpLHRoaXMucmVkcmF3KCk7dmFyIGw9dGhpcy5nZXRDYW1lcmFQb3NpdGlvbigpO3RoaXMuZW1pdCgiY2FtZXJhUG9zaXRpb25DaGFuZ2UiLGwpLGQucHJldmVudERlZmF1bHQodCl9LG8ucHJvdG90eXBlLl9vbk1vdXNlVXA9ZnVuY3Rpb24odCl7dGhpcy5mcmFtZS5zdHlsZS5jdXJzb3I9ImF1dG8iLHRoaXMubGVmdEJ1dHRvbkRvd249ITEsZC5yZW1vdmVFdmVudExpc3RlbmVyKGRvY3VtZW50LCJtb3VzZW1vdmUiLHRoaXMub25tb3VzZW1vdmUpLGQucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb2N1bWVudCwibW91c2V1cCIsdGhpcy5vbm1vdXNldXApLGQucHJldmVudERlZmF1bHQodCl9LG8ucHJvdG90eXBlLl9vblRvb2x0aXA9ZnVuY3Rpb24odCl7dmFyIGU9MzAwLGk9dGhpcy5mcmFtZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvPW4odCktaS5sZWZ0LHI9cyh0KS1pLnRvcDtpZih0aGlzLnNob3dUb29sdGlwKXtpZih0aGlzLnRvb2x0aXBUaW1lb3V0JiZjbGVhclRpbWVvdXQodGhpcy50b29sdGlwVGltZW91dCksdGhpcy5sZWZ0QnV0dG9uRG93bilyZXR1cm4gdm9pZCB0aGlzLl9oaWRlVG9vbHRpcCgpO2lmKHRoaXMudG9vbHRpcCYmdGhpcy50b29sdGlwLmRhdGFQb2ludCl7dmFyIGE9dGhpcy5fZGF0YVBvaW50RnJvbVhZKG8scik7YSE9PXRoaXMudG9vbHRpcC5kYXRhUG9pbnQmJihhP3RoaXMuX3Nob3dUb29sdGlwKGEpOnRoaXMuX2hpZGVUb29sdGlwKCkpfWVsc2V7dmFyIGg9dGhpczt0aGlzLnRvb2x0aXBUaW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtoLnRvb2x0aXBUaW1lb3V0PW51bGw7dmFyIHQ9aC5fZGF0YVBvaW50RnJvbVhZKG8scik7dCYmaC5fc2hvd1Rvb2x0aXAodCl9LGUpfX19LG8ucHJvdG90eXBlLl9vblRvdWNoU3RhcnQ9ZnVuY3Rpb24odCl7dGhpcy50b3VjaERvd249ITA7dmFyIGU9dGhpczt0aGlzLm9udG91Y2htb3ZlPWZ1bmN0aW9uKHQpe2UuX29uVG91Y2hNb3ZlKHQpfSx0aGlzLm9udG91Y2hlbmQ9ZnVuY3Rpb24odCl7ZS5fb25Ub3VjaEVuZCh0KX0sZC5hZGRFdmVudExpc3RlbmVyKGRvY3VtZW50LCJ0b3VjaG1vdmUiLGUub250b3VjaG1vdmUpLGQuYWRkRXZlbnRMaXN0ZW5lcihkb2N1bWVudCwidG91Y2hlbmQiLGUub250b3VjaGVuZCksdGhpcy5fb25Nb3VzZURvd24odCl9LG8ucHJvdG90eXBlLl9vblRvdWNoTW92ZT1mdW5jdGlvbih0KXt0aGlzLl9vbk1vdXNlTW92ZSh0KX0sby5wcm90b3R5cGUuX29uVG91Y2hFbmQ9ZnVuY3Rpb24odCl7dGhpcy50b3VjaERvd249ITEsZC5yZW1vdmVFdmVudExpc3RlbmVyKGRvY3VtZW50LCJ0b3VjaG1vdmUiLHRoaXMub250b3VjaG1vdmUpLGQucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb2N1bWVudCwidG91Y2hlbmQiLHRoaXMub250b3VjaGVuZCksdGhpcy5fb25Nb3VzZVVwKHQpfSxvLnByb3RvdHlwZS5fb25XaGVlbD1mdW5jdGlvbih0KXt0fHwodD13aW5kb3cuZXZlbnQpO3ZhciBlPTA7aWYodC53aGVlbERlbHRhP2U9dC53aGVlbERlbHRhLzEyMDp0LmRldGFpbCYmKGU9LXQuZGV0YWlsLzMpLGUpe3ZhciBpPXRoaXMuY2FtZXJhLmdldEFybUxlbmd0aCgpLG89aSooMS1lLzEwKTt0aGlzLmNhbWVyYS5zZXRBcm1MZW5ndGgobyksdGhpcy5yZWRyYXcoKSx0aGlzLl9oaWRlVG9vbHRpcCgpfXZhciBuPXRoaXMuZ2V0Q2FtZXJhUG9zaXRpb24oKTt0aGlzLmVtaXQoImNhbWVyYVBvc2l0aW9uQ2hhbmdlIixuKSxkLnByZXZlbnREZWZhdWx0KHQpfSxvLnByb3RvdHlwZS5faW5zaWRlVHJpYW5nbGU9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBpKHQpe3JldHVybiB0PjA/MTp0PDA/LTE6MH12YXIgbz1lWzBdLG49ZVsxXSxzPWVbMl0scj1pKChuLngtby54KSoodC55LW8ueSktKG4ueS1vLnkpKih0Lngtby54KSksYT1pKChzLngtbi54KSoodC55LW4ueSktKHMueS1uLnkpKih0Lngtbi54KSksaD1pKChvLngtcy54KSoodC55LXMueSktKG8ueS1zLnkpKih0Lngtcy54KSk7cmV0dXJuISgwIT1yJiYwIT1hJiZyIT1hfHwwIT1hJiYwIT1oJiZhIT1ofHwwIT1yJiYwIT1oJiZyIT1oKX0sby5wcm90b3R5cGUuX2RhdGFQb2ludEZyb21YWT1mdW5jdGlvbih0LGUpe3ZhciBpLG49MTAwLHM9bnVsbCxyPW51bGwsYT1udWxsLGg9bmV3IGModCxlKTtpZih0aGlzLnN0eWxlPT09by5TVFlMRS5CQVJ8fHRoaXMuc3R5bGU9PT1vLlNUWUxFLkJBUkNPTE9SfHx0aGlzLnN0eWxlPT09by5TVFlMRS5CQVJTSVpFKWZvcihpPXRoaXMuZGF0YVBvaW50cy5sZW5ndGgtMTtpPj0wO2ktLSl7cz10aGlzLmRhdGFQb2ludHNbaV07dmFyIGQ9cy5zdXJmYWNlcztpZihkKWZvcih2YXIgbD1kLmxlbmd0aC0xO2w+PTA7bC0tKXt2YXIgdT1kW2xdLHA9dS5jb3JuZXJzLGY9W3BbMF0uc2NyZWVuLHBbMV0uc2NyZWVuLHBbMl0uc2NyZWVuXSxtPVtwWzJdLnNjcmVlbixwWzNdLnNjcmVlbixwWzBdLnNjcmVlbl07aWYodGhpcy5faW5zaWRlVHJpYW5nbGUoaCxmKXx8dGhpcy5faW5zaWRlVHJpYW5nbGUoaCxtKSlyZXR1cm4gc319ZWxzZSBmb3IoaT0wO2k8dGhpcy5kYXRhUG9pbnRzLmxlbmd0aDtpKyspe3M9dGhpcy5kYXRhUG9pbnRzW2ldO3ZhciB2PXMuc2NyZWVuO2lmKHYpe3ZhciBnPU1hdGguYWJzKHQtdi54KSx5PU1hdGguYWJzKGUtdi55KSxiPU1hdGguc3FydChnKmcreSp5KTsobnVsbD09PWF8fGI8YSkmJmI8biYmKGE9YixyPXMpfX1yZXR1cm4gcn0sby5wcm90b3R5cGUuX3Nob3dUb29sdGlwPWZ1bmN0aW9uKHQpe3ZhciBlLGksbzt0aGlzLnRvb2x0aXA/KGU9dGhpcy50b29sdGlwLmRvbS5jb250ZW50LGk9dGhpcy50b29sdGlwLmRvbS5saW5lLG89dGhpcy50b29sdGlwLmRvbS5kb3QpOihlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGUuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixlLnN0eWxlLnBhZGRpbmc9IjEwcHgiLGUuc3R5bGUuYm9yZGVyPSIxcHggc29saWQgIzRkNGQ0ZCIsZS5zdHlsZS5jb2xvcj0iIzFhMWExYSIsZS5zdHlsZS5iYWNrZ3JvdW5kPSJyZ2JhKDI1NSwyNTUsMjU1LDAuNykiLGUuc3R5bGUuYm9yZGVyUmFkaXVzPSIycHgiLGUuc3R5bGUuYm94U2hhZG93PSI1cHggNXB4IDEwcHggcmdiYSgxMjgsMTI4LDEyOCwwLjUpIixpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGkuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixpLnN0eWxlLmhlaWdodD0iNDBweCIsaS5zdHlsZS53aWR0aD0iMCIsaS5zdHlsZS5ib3JkZXJMZWZ0PSIxcHggc29saWQgIzRkNGQ0ZCIsbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxvLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsby5zdHlsZS5oZWlnaHQ9IjAiLG8uc3R5bGUud2lkdGg9IjAiLG8uc3R5bGUuYm9yZGVyPSI1cHggc29saWQgIzRkNGQ0ZCIsby5zdHlsZS5ib3JkZXJSYWRpdXM9IjVweCIsdGhpcy50b29sdGlwPXtkYXRhUG9pbnQ6bnVsbCxkb206e2NvbnRlbnQ6ZSxsaW5lOmksZG90Om99fSksdGhpcy5faGlkZVRvb2x0aXAoKSx0aGlzLnRvb2x0aXAuZGF0YVBvaW50PXQsImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuc2hvd1Rvb2x0aXA/ZS5pbm5lckhUTUw9dGhpcy5zaG93VG9vbHRpcCh0LnBvaW50KTplLmlubmVySFRNTD0iPHRhYmxlPjx0cj48dGQ+Iit0aGlzLnhMYWJlbCsiOjwvdGQ+PHRkPiIrdC5wb2ludC54KyI8L3RkPjwvdHI+PHRyPjx0ZD4iK3RoaXMueUxhYmVsKyI6PC90ZD48dGQ+Iit0LnBvaW50LnkrIjwvdGQ+PC90cj48dHI+PHRkPiIrdGhpcy56TGFiZWwrIjo8L3RkPjx0ZD4iK3QucG9pbnQueisiPC90ZD48L3RyPjwvdGFibGU+IixlLnN0eWxlLmxlZnQ9IjAiLGUuc3R5bGUudG9wPSIwIix0aGlzLmZyYW1lLmFwcGVuZENoaWxkKGUpLHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQoaSksdGhpcy5mcmFtZS5hcHBlbmRDaGlsZChvKTt2YXIgbj1lLm9mZnNldFdpZHRoLHM9ZS5vZmZzZXRIZWlnaHQscj1pLm9mZnNldEhlaWdodCxhPW8ub2Zmc2V0V2lkdGgsaD1vLm9mZnNldEhlaWdodCxkPXQuc2NyZWVuLngtbi8yO2Q9TWF0aC5taW4oTWF0aC5tYXgoZCwxMCksdGhpcy5mcmFtZS5jbGllbnRXaWR0aC0xMC1uKSxpLnN0eWxlLmxlZnQ9dC5zY3JlZW4ueCsicHgiLGkuc3R5bGUudG9wPXQuc2NyZWVuLnktcisicHgiLGUuc3R5bGUubGVmdD1kKyJweCIsZS5zdHlsZS50b3A9dC5zY3JlZW4ueS1yLXMrInB4IixvLnN0eWxlLmxlZnQ9dC5zY3JlZW4ueC1hLzIrInB4IixvLnN0eWxlLnRvcD10LnNjcmVlbi55LWgvMisicHgifSxvLnByb3RvdHlwZS5faGlkZVRvb2x0aXA9ZnVuY3Rpb24oKXtpZih0aGlzLnRvb2x0aXApe3RoaXMudG9vbHRpcC5kYXRhUG9pbnQ9bnVsbDtmb3IodmFyIHQgaW4gdGhpcy50b29sdGlwLmRvbSlpZih0aGlzLnRvb2x0aXAuZG9tLmhhc093blByb3BlcnR5KHQpKXt2YXIgZT10aGlzLnRvb2x0aXAuZG9tW3RdO2UmJmUucGFyZW50Tm9kZSYmZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGUpfX19LG8ucHJvdG90eXBlLnNldENhbWVyYVBvc2l0aW9uPWZ1bmN0aW9uKHQpe3Yuc2V0Q2FtZXJhUG9zaXRpb24odCx0aGlzKSx0aGlzLnJlZHJhdygpfSx0LmV4cG9ydHM9b30sZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBpKHQpe2lmKHQpcmV0dXJuIG8odCl9ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGUgaW4gaS5wcm90b3R5cGUpdFtlXT1pLnByb3RvdHlwZVtlXTtyZXR1cm4gdH10LmV4cG9ydHM9aSxpLnByb3RvdHlwZS5vbj1pLnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2NhbGxiYWNrcz10aGlzLl9jYWxsYmFja3N8fHt9LCh0aGlzLl9jYWxsYmFja3NbdF09dGhpcy5fY2FsbGJhY2tzW3RdfHxbXSkucHVzaChlKSx0aGlzfSxpLnByb3RvdHlwZS5vbmNlPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gaSgpe28ub2ZmKHQsaSksZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIG89dGhpcztyZXR1cm4gdGhpcy5fY2FsbGJhY2tzPXRoaXMuX2NhbGxiYWNrc3x8e30saS5mbj1lLHRoaXMub24odCxpKSx0aGlzfSxpLnByb3RvdHlwZS5vZmY9aS5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9aS5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWkucHJvdG90eXBlLnJlbW92ZUV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24odCxlKXtpZih0aGlzLl9jYWxsYmFja3M9dGhpcy5fY2FsbGJhY2tzfHx7fSwwPT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiB0aGlzLl9jYWxsYmFja3M9e30sdGhpczt2YXIgaT10aGlzLl9jYWxsYmFja3NbdF07aWYoIWkpcmV0dXJuIHRoaXM7aWYoMT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZGVsZXRlIHRoaXMuX2NhbGxiYWNrc1t0XSx0aGlzO2Zvcih2YXIgbyxuPTA7bjxpLmxlbmd0aDtuKyspaWYobz1pW25dLG89PT1lfHxvLmZuPT09ZSl7aS5zcGxpY2UobiwxKTticmVha31yZXR1cm4gdGhpc30saS5wcm90b3R5cGUuZW1pdD1mdW5jdGlvbih0KXt0aGlzLl9jYWxsYmFja3M9dGhpcy5fY2FsbGJhY2tzfHx7fTt2YXIgZT1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxpPXRoaXMuX2NhbGxiYWNrc1t0XTtpZihpKXtpPWkuc2xpY2UoMCk7Zm9yKHZhciBvPTAsbj1pLmxlbmd0aDtvPG47KytvKWlbb10uYXBwbHkodGhpcyxlKX1yZXR1cm4gdGhpc30saS5wcm90b3R5cGUubGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jYWxsYmFja3M9dGhpcy5fY2FsbGJhY2tzfHx7fSx0aGlzLl9jYWxsYmFja3NbdF18fFtdfSxpLnByb3RvdHlwZS5oYXNMaXN0ZW5lcnM9ZnVuY3Rpb24odCl7cmV0dXJuISF0aGlzLmxpc3RlbmVycyh0KS5sZW5ndGh9fSxmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIGkodCxlLGkpe3RoaXMueD12b2lkIDAhPT10P3Q6MCx0aGlzLnk9dm9pZCAwIT09ZT9lOjAsdGhpcy56PXZvaWQgMCE9PWk/aTowfWkuc3VidHJhY3Q9ZnVuY3Rpb24odCxlKXt2YXIgbz1uZXcgaTtyZXR1cm4gby54PXQueC1lLngsby55PXQueS1lLnksby56PXQuei1lLnosb30saS5hZGQ9ZnVuY3Rpb24odCxlKXt2YXIgbz1uZXcgaTtyZXR1cm4gby54PXQueCtlLngsby55PXQueStlLnksby56PXQueitlLnosb30saS5hdmc9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IGkoKHQueCtlLngpLzIsKHQueStlLnkpLzIsKHQueitlLnopLzIpfSxpLmNyb3NzUHJvZHVjdD1mdW5jdGlvbih0LGUpe3ZhciBvPW5ldyBpO3JldHVybiBvLng9dC55KmUuei10LnoqZS55LG8ueT10LnoqZS54LXQueCplLnosby56PXQueCplLnktdC55KmUueCxvfSxpLnByb3RvdHlwZS5sZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56KX0sdC5leHBvcnRzPWl9LGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gaSh0LGUpe3RoaXMueD12b2lkIDAhPT10P3Q6MCx0aGlzLnk9dm9pZCAwIT09ZT9lOjB9dC5leHBvcnRzPWl9LGZ1bmN0aW9uKHQsZSxpKXtmdW5jdGlvbiBvKCl7dGhpcy5hcm1Mb2NhdGlvbj1uZXcgbix0aGlzLmFybVJvdGF0aW9uPXt9LHRoaXMuYXJtUm90YXRpb24uaG9yaXpvbnRhbD0wLHRoaXMuYXJtUm90YXRpb24udmVydGljYWw9MCx0aGlzLmFybUxlbmd0aD0xLjcsdGhpcy5jYW1lcmFMb2NhdGlvbj1uZXcgbix0aGlzLmNhbWVyYVJvdGF0aW9uPW5ldyBuKC41Kk1hdGguUEksMCwwKSx0aGlzLmNhbGN1bGF0ZUNhbWVyYU9yaWVudGF0aW9uKCl9dmFyIG49aSgxNCk7by5wcm90b3R5cGUuc2V0QXJtTG9jYXRpb249ZnVuY3Rpb24odCxlLGkpe3RoaXMuYXJtTG9jYXRpb24ueD10LHRoaXMuYXJtTG9jYXRpb24ueT1lLHRoaXMuYXJtTG9jYXRpb24uej1pLHRoaXMuY2FsY3VsYXRlQ2FtZXJhT3JpZW50YXRpb24oKX0sby5wcm90b3R5cGUuc2V0QXJtUm90YXRpb249ZnVuY3Rpb24odCxlKXt2b2lkIDAhPT10JiYodGhpcy5hcm1Sb3RhdGlvbi5ob3Jpem9udGFsPXQpLHZvaWQgMCE9PWUmJih0aGlzLmFybVJvdGF0aW9uLnZlcnRpY2FsPWUsdGhpcy5hcm1Sb3RhdGlvbi52ZXJ0aWNhbDwwJiYodGhpcy5hcm1Sb3RhdGlvbi52ZXJ0aWNhbD0wKSx0aGlzLmFybVJvdGF0aW9uLnZlcnRpY2FsPi41Kk1hdGguUEkmJih0aGlzLmFybVJvdGF0aW9uLnZlcnRpY2FsPS41Kk1hdGguUEkpKSx2b2lkIDA9PT10JiZ2b2lkIDA9PT1lfHx0aGlzLmNhbGN1bGF0ZUNhbWVyYU9yaWVudGF0aW9uKCl9LG8ucHJvdG90eXBlLmdldEFybVJvdGF0aW9uPWZ1bmN0aW9uKCl7dmFyIHQ9e307cmV0dXJuIHQuaG9yaXpvbnRhbD10aGlzLmFybVJvdGF0aW9uLmhvcml6b250YWwsdC52ZXJ0aWNhbD10aGlzLmFybVJvdGF0aW9uLnZlcnRpY2FsLHR9LG8ucHJvdG90eXBlLnNldEFybUxlbmd0aD1mdW5jdGlvbih0KXt2b2lkIDAhPT10JiYodGhpcy5hcm1MZW5ndGg9dCx0aGlzLmFybUxlbmd0aDwuNzEmJih0aGlzLmFybUxlbmd0aD0uNzEpLHRoaXMuYXJtTGVuZ3RoPjUmJih0aGlzLmFybUxlbmd0aD01KSx0aGlzLmNhbGN1bGF0ZUNhbWVyYU9yaWVudGF0aW9uKCkpfSxvLnByb3RvdHlwZS5nZXRBcm1MZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcm1MZW5ndGh9LG8ucHJvdG90eXBlLmdldENhbWVyYUxvY2F0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FtZXJhTG9jYXRpb259LG8ucHJvdG90eXBlLmdldENhbWVyYVJvdGF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FtZXJhUm90YXRpb259LG8ucHJvdG90eXBlLmNhbGN1bGF0ZUNhbWVyYU9yaWVudGF0aW9uPWZ1bmN0aW9uKCl7dGhpcy5jYW1lcmFMb2NhdGlvbi54PXRoaXMuYXJtTG9jYXRpb24ueC10aGlzLmFybUxlbmd0aCpNYXRoLnNpbih0aGlzLmFybVJvdGF0aW9uLmhvcml6b250YWwpKk1hdGguY29zKHRoaXMuYXJtUm90YXRpb24udmVydGljYWwpLHRoaXMuY2FtZXJhTG9jYXRpb24ueT10aGlzLmFybUxvY2F0aW9uLnktdGhpcy5hcm1MZW5ndGgqTWF0aC5jb3ModGhpcy5hcm1Sb3RhdGlvbi5ob3Jpem9udGFsKSpNYXRoLmNvcyh0aGlzLmFybVJvdGF0aW9uLnZlcnRpY2FsKSx0aGlzLmNhbWVyYUxvY2F0aW9uLno9dGhpcy5hcm1Mb2NhdGlvbi56K3RoaXMuYXJtTGVuZ3RoKk1hdGguc2luKHRoaXMuYXJtUm90YXRpb24udmVydGljYWwpLHRoaXMuY2FtZXJhUm90YXRpb24ueD1NYXRoLlBJLzItdGhpcy5hcm1Sb3RhdGlvbi52ZXJ0aWNhbCx0aGlzLmNhbWVyYVJvdGF0aW9uLnk9MCx0aGlzLmNhbWVyYVJvdGF0aW9uLno9LXRoaXMuYXJtUm90YXRpb24uaG9yaXpvbnRhbH0sdC5leHBvcnRzPW99LGZ1bmN0aW9uKHQsZSxpKXtmdW5jdGlvbiBvKHQsZSxpKXt0aGlzLmRhdGE9dCx0aGlzLmNvbHVtbj1lLHRoaXMuZ3JhcGg9aSx0aGlzLmluZGV4PXZvaWQgMCx0aGlzLnZhbHVlPXZvaWQgMCx0aGlzLnZhbHVlcz1pLmdldERpc3RpbmN0VmFsdWVzKHQuZ2V0KCksdGhpcy5jb2x1bW4pLHRoaXMudmFsdWVzLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdD5lPzE6dDxlPy0xOjB9KSx0aGlzLnZhbHVlcy5sZW5ndGg+MCYmdGhpcy5zZWxlY3RWYWx1ZSgwKSx0aGlzLmRhdGFQb2ludHM9W10sdGhpcy5sb2FkZWQ9ITEsdGhpcy5vbkxvYWRDYWxsYmFjaz12b2lkIDAsaS5hbmltYXRpb25QcmVsb2FkPyh0aGlzLmxvYWRlZD0hMSx0aGlzLmxvYWRJbkJhY2tncm91bmQoKSk6dGhpcy5sb2FkZWQ9ITB9dmFyIG49aSgxMSk7by5wcm90b3R5cGUuaXNMb2FkZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb2FkZWR9LG8ucHJvdG90eXBlLmdldExvYWRlZFByb2dyZXNzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMudmFsdWVzLmxlbmd0aCxlPTA7dGhpcy5kYXRhUG9pbnRzW2VdOyllKys7cmV0dXJuIE1hdGgucm91bmQoZS90KjEwMCl9LG8ucHJvdG90eXBlLmdldExhYmVsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGguZmlsdGVyTGFiZWx9LG8ucHJvdG90eXBlLmdldENvbHVtbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbHVtbn0sby5wcm90b3R5cGUuZ2V0U2VsZWN0ZWRWYWx1ZT1mdW5jdGlvbigpe2lmKHZvaWQgMCE9PXRoaXMuaW5kZXgpcmV0dXJuIHRoaXMudmFsdWVzW3RoaXMuaW5kZXhdfSxvLnByb3RvdHlwZS5nZXRWYWx1ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWx1ZXN9LG8ucHJvdG90eXBlLmdldFZhbHVlPWZ1bmN0aW9uKHQpe2lmKHQ+PXRoaXMudmFsdWVzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO3JldHVybiB0aGlzLnZhbHVlc1t0XX0sby5wcm90b3R5cGUuX2dldERhdGFQb2ludHM9ZnVuY3Rpb24odCl7aWYodm9pZCAwPT09dCYmKHQ9dGhpcy5pbmRleCksdm9pZCAwPT09dClyZXR1cm5bXTt2YXIgZTtpZih0aGlzLmRhdGFQb2ludHNbdF0pZT10aGlzLmRhdGFQb2ludHNbdF07ZWxzZXt2YXIgaT17fTtpLmNvbHVtbj10aGlzLmNvbHVtbixpLnZhbHVlPXRoaXMudmFsdWVzW3RdO3ZhciBvPW5ldyBuKHRoaXMuZGF0YSx7ZmlsdGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0W2kuY29sdW1uXT09aS52YWx1ZX19KS5nZXQoKTtlPXRoaXMuZ3JhcGguX2dldERhdGFQb2ludHMobyksdGhpcy5kYXRhUG9pbnRzW3RdPWV9cmV0dXJuIGV9LG8ucHJvdG90eXBlLnNldE9uTG9hZENhbGxiYWNrPWZ1bmN0aW9uKHQpe3RoaXMub25Mb2FkQ2FsbGJhY2s9dH0sby5wcm90b3R5cGUuc2VsZWN0VmFsdWU9ZnVuY3Rpb24odCl7aWYodD49dGhpcy52YWx1ZXMubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7dGhpcy5pbmRleD10LHRoaXMudmFsdWU9dGhpcy52YWx1ZXNbdF19LG8ucHJvdG90eXBlLmxvYWRJbkJhY2tncm91bmQ9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9MCk7dmFyIGU9dGhpcy5ncmFwaC5mcmFtZTtpZih0PHRoaXMudmFsdWVzLmxlbmd0aCl7dGhpcy5fZ2V0RGF0YVBvaW50cyh0KTt2b2lkIDA9PT1lLnByb2dyZXNzJiYoZS5wcm9ncmVzcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSxlLnByb2dyZXNzLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsZS5wcm9ncmVzcy5zdHlsZS5jb2xvcj0iZ3JheSIsZS5hcHBlbmRDaGlsZChlLnByb2dyZXNzKSk7dmFyIGk9dGhpcy5nZXRMb2FkZWRQcm9ncmVzcygpO2UucHJvZ3Jlc3MuaW5uZXJIVE1MPSJMb2FkaW5nIGFuaW1hdGlvbi4uLiAiK2krIiUiLGUucHJvZ3Jlc3Muc3R5bGUuYm90dG9tPSI2MHB4IixlLnByb2dyZXNzLnN0eWxlLmxlZnQ9IjEwcHgiO3ZhciBvPXRoaXM7c2V0VGltZW91dChmdW5jdGlvbigpe28ubG9hZEluQmFja2dyb3VuZCh0KzEpfSwxMCksdGhpcy5sb2FkZWQ9ITF9ZWxzZSB0aGlzLmxvYWRlZD0hMCx2b2lkIDAhPT1lLnByb2dyZXNzJiYoZS5yZW1vdmVDaGlsZChlLnByb2dyZXNzKSxlLnByb2dyZXNzPXZvaWQgMCksdGhpcy5vbkxvYWRDYWxsYmFjayYmdGhpcy5vbkxvYWRDYWxsYmFjaygpfSx0LmV4cG9ydHM9b30sZnVuY3Rpb24odCxlLGkpe2Z1bmN0aW9uIG8odCxlKXtpZih2b2lkIDA9PT10KXRocm93IG5ldyBFcnJvcigiTm8gY29udGFpbmVyIGVsZW1lbnQgZGVmaW5lZCIpO2lmKHRoaXMuY29udGFpbmVyPXQsdGhpcy52aXNpYmxlPSFlfHx2b2lkIDA9PWUudmlzaWJsZXx8ZS52aXNpYmxlLHRoaXMudmlzaWJsZSl7dGhpcy5mcmFtZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSx0aGlzLmZyYW1lLnN0eWxlLndpZHRoPSIxMDAlIix0aGlzLmZyYW1lLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIsdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5mcmFtZSksdGhpcy5mcmFtZS5wcmV2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIklOUFVUIiksdGhpcy5mcmFtZS5wcmV2LnR5cGU9IkJVVFRPTiIsdGhpcy5mcmFtZS5wcmV2LnZhbHVlPSJQcmV2Iix0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuZnJhbWUucHJldiksdGhpcy5mcmFtZS5wbGF5PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIklOUFVUIiksdGhpcy5mcmFtZS5wbGF5LnR5cGU9IkJVVFRPTiIsdGhpcy5mcmFtZS5wbGF5LnZhbHVlPSJQbGF5Iix0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuZnJhbWUucGxheSksdGhpcy5mcmFtZS5uZXh0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIklOUFVUIiksdGhpcy5mcmFtZS5uZXh0LnR5cGU9IkJVVFRPTiIsdGhpcy5mcmFtZS5uZXh0LnZhbHVlPSJOZXh0Iix0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuZnJhbWUubmV4dCksdGhpcy5mcmFtZS5iYXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiSU5QVVQiKSx0aGlzLmZyYW1lLmJhci50eXBlPSJCVVRUT04iLHRoaXMuZnJhbWUuYmFyLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsdGhpcy5mcmFtZS5iYXIuc3R5bGUuYm9yZGVyPSIxcHggc29saWQgcmVkIix0aGlzLmZyYW1lLmJhci5zdHlsZS53aWR0aD0iMTAwcHgiLHRoaXMuZnJhbWUuYmFyLnN0eWxlLmhlaWdodD0iNnB4Iix0aGlzLmZyYW1lLmJhci5zdHlsZS5ib3JkZXJSYWRpdXM9IjJweCIsdGhpcy5mcmFtZS5iYXIuc3R5bGUuTW96Qm9yZGVyUmFkaXVzPSIycHgiLHRoaXMuZnJhbWUuYmFyLnN0eWxlLmJvcmRlcj0iMXB4IHNvbGlkICM3RjdGN0YiLHRoaXMuZnJhbWUuYmFyLnN0eWxlLmJhY2tncm91bmRDb2xvcj0iI0U1RTVFNSIsdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmZyYW1lLmJhciksdGhpcy5mcmFtZS5zbGlkZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJJTlBVVCIpLHRoaXMuZnJhbWUuc2xpZGUudHlwZT0iQlVUVE9OIix0aGlzLmZyYW1lLnNsaWRlLnN0eWxlLm1hcmdpbj0iMHB4Iix0aGlzLmZyYW1lLnNsaWRlLnZhbHVlPSIgIix0aGlzLmZyYW1lLnNsaWRlLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIsdGhpcy5mcmFtZS5zbGlkZS5zdHlsZS5sZWZ0PSItMTAwcHgiLHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5mcmFtZS5zbGlkZSk7dmFyIGk9dGhpczt0aGlzLmZyYW1lLnNsaWRlLm9ubW91c2Vkb3duPWZ1bmN0aW9uKHQpe2kuX29uTW91c2VEb3duKHQpfSx0aGlzLmZyYW1lLnByZXYub25jbGljaz1mdW5jdGlvbih0KXtpLnByZXYodCl9LHRoaXMuZnJhbWUucGxheS5vbmNsaWNrPWZ1bmN0aW9uKHQpe2kudG9nZ2xlUGxheSh0KX0sdGhpcy5mcmFtZS5uZXh0Lm9uY2xpY2s9ZnVuY3Rpb24odCl7aS5uZXh0KHQpfX10aGlzLm9uQ2hhbmdlQ2FsbGJhY2s9dm9pZCAwLHRoaXMudmFsdWVzPVtdLHRoaXMuaW5kZXg9dm9pZCAwLHRoaXMucGxheVRpbWVvdXQ9dm9pZCAwLHRoaXMucGxheUludGVydmFsPTFlMyx0aGlzLnBsYXlMb29wPSEwfXZhciBuPWkoMSk7by5wcm90b3R5cGUucHJldj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2V0SW5kZXgoKTt0PjAmJih0LS0sdGhpcy5zZXRJbmRleCh0KSl9LG8ucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdldEluZGV4KCk7dDx0aGlzLnZhbHVlcy5sZW5ndGgtMSYmKHQrKyx0aGlzLnNldEluZGV4KHQpKX0sby5wcm90b3R5cGUucGxheU5leHQ9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgRGF0ZSxlPXRoaXMuZ2V0SW5kZXgoKTtlPHRoaXMudmFsdWVzLmxlbmd0aC0xPyhlKyssdGhpcy5zZXRJbmRleChlKSk6dGhpcy5wbGF5TG9vcCYmKGU9MCx0aGlzLnNldEluZGV4KGUpKTt2YXIgaT1uZXcgRGF0ZSxvPWktdCxuPU1hdGgubWF4KHRoaXMucGxheUludGVydmFsLW8sMCkscz10aGlzO3RoaXMucGxheVRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe3MucGxheU5leHQoKX0sbil9LG8ucHJvdG90eXBlLnRvZ2dsZVBsYXk9ZnVuY3Rpb24oKXt2b2lkIDA9PT10aGlzLnBsYXlUaW1lb3V0P3RoaXMucGxheSgpOnRoaXMuc3RvcCgpfSxvLnByb3RvdHlwZS5wbGF5PWZ1bmN0aW9uKCl7dGhpcy5wbGF5VGltZW91dHx8KHRoaXMucGxheU5leHQoKSx0aGlzLmZyYW1lJiYodGhpcy5mcmFtZS5wbGF5LnZhbHVlPSJTdG9wIikpfSxvLnByb3RvdHlwZS5zdG9wPWZ1bmN0aW9uKCl7Y2xlYXJJbnRlcnZhbCh0aGlzLnBsYXlUaW1lb3V0KSx0aGlzLnBsYXlUaW1lb3V0PXZvaWQgMCx0aGlzLmZyYW1lJiYodGhpcy5mcmFtZS5wbGF5LnZhbHVlPSJQbGF5Iil9LG8ucHJvdG90eXBlLnNldE9uQ2hhbmdlQ2FsbGJhY2s9ZnVuY3Rpb24odCl7dGhpcy5vbkNoYW5nZUNhbGxiYWNrPXR9LG8ucHJvdG90eXBlLnNldFBsYXlJbnRlcnZhbD1mdW5jdGlvbih0KXt0aGlzLnBsYXlJbnRlcnZhbD10fSxvLnByb3RvdHlwZS5nZXRQbGF5SW50ZXJ2YWw9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucGxheUludGVydmFsfSxvLnByb3RvdHlwZS5zZXRQbGF5TG9vcD1mdW5jdGlvbih0KXt0aGlzLnBsYXlMb29wPXR9LG8ucHJvdG90eXBlLm9uQ2hhbmdlPWZ1bmN0aW9uKCl7dm9pZCAwIT09dGhpcy5vbkNoYW5nZUNhbGxiYWNrJiZ0aGlzLm9uQ2hhbmdlQ2FsbGJhY2soKX0sby5wcm90b3R5cGUucmVkcmF3PWZ1bmN0aW9uKCl7aWYodGhpcy5mcmFtZSl7dGhpcy5mcmFtZS5iYXIuc3R5bGUudG9wPXRoaXMuZnJhbWUuY2xpZW50SGVpZ2h0LzItdGhpcy5mcmFtZS5iYXIub2Zmc2V0SGVpZ2h0LzIrInB4Iix0aGlzLmZyYW1lLmJhci5zdHlsZS53aWR0aD10aGlzLmZyYW1lLmNsaWVudFdpZHRoLXRoaXMuZnJhbWUucHJldi5jbGllbnRXaWR0aC10aGlzLmZyYW1lLnBsYXkuY2xpZW50V2lkdGgtdGhpcy5mcmFtZS5uZXh0LmNsaWVudFdpZHRoLTMwKyJweCI7dmFyIHQ9dGhpcy5pbmRleFRvTGVmdCh0aGlzLmluZGV4KTt0aGlzLmZyYW1lLnNsaWRlLnN0eWxlLmxlZnQ9dCsicHgifX0sby5wcm90b3R5cGUuc2V0VmFsdWVzPWZ1bmN0aW9uKHQpe3RoaXMudmFsdWVzPXQsdGhpcy52YWx1ZXMubGVuZ3RoPjA/dGhpcy5zZXRJbmRleCgwKTp0aGlzLmluZGV4PXZvaWQgMH0sby5wcm90b3R5cGUuc2V0SW5kZXg9ZnVuY3Rpb24odCl7aWYoISh0PHRoaXMudmFsdWVzLmxlbmd0aCkpdGhyb3cgbmV3IEVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTt0aGlzLmluZGV4PXQsdGhpcy5yZWRyYXcoKSx0aGlzLm9uQ2hhbmdlKCl9LG8ucHJvdG90eXBlLmdldEluZGV4PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5kZXh9LG8ucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlc1t0aGlzLmluZGV4XX0sby5wcm90b3R5cGUuX29uTW91c2VEb3duPWZ1bmN0aW9uKHQpe3ZhciBlPXQud2hpY2g/MT09PXQud2hpY2g6MT09PXQuYnV0dG9uO2lmKGUpe3RoaXMuc3RhcnRDbGllbnRYPXQuY2xpZW50WCx0aGlzLnN0YXJ0U2xpZGVYPXBhcnNlRmxvYXQodGhpcy5mcmFtZS5zbGlkZS5zdHlsZS5sZWZ0KSx0aGlzLmZyYW1lLnN0eWxlLmN1cnNvcj0ibW92ZSI7dmFyIGk9dGhpczt0aGlzLm9ubW91c2Vtb3ZlPWZ1bmN0aW9uKHQpe2kuX29uTW91c2VNb3ZlKHQpfSx0aGlzLm9ubW91c2V1cD1mdW5jdGlvbih0KXtpLl9vbk1vdXNlVXAodCl9LG4uYWRkRXZlbnRMaXN0ZW5lcihkb2N1bWVudCwibW91c2Vtb3ZlIix0aGlzLm9ubW91c2Vtb3ZlKSxuLmFkZEV2ZW50TGlzdGVuZXIoZG9jdW1lbnQsIm1vdXNldXAiLHRoaXMub25tb3VzZXVwKSxuLnByZXZlbnREZWZhdWx0KHQpfX0sby5wcm90b3R5cGUubGVmdFRvSW5kZXg9ZnVuY3Rpb24odCl7dmFyIGU9cGFyc2VGbG9hdCh0aGlzLmZyYW1lLmJhci5zdHlsZS53aWR0aCktdGhpcy5mcmFtZS5zbGlkZS5jbGllbnRXaWR0aC0xMCxpPXQtMyxvPU1hdGgucm91bmQoaS9lKih0aGlzLnZhbHVlcy5sZW5ndGgtMSkpO3JldHVybiBvPDAmJihvPTApLG8+dGhpcy52YWx1ZXMubGVuZ3RoLTEmJihvPXRoaXMudmFsdWVzLmxlbmd0aC0xKSxvfSxvLnByb3RvdHlwZS5pbmRleFRvTGVmdD1mdW5jdGlvbih0KXt2YXIgZT1wYXJzZUZsb2F0KHRoaXMuZnJhbWUuYmFyLnN0eWxlLndpZHRoKS10aGlzLmZyYW1lLnNsaWRlLmNsaWVudFdpZHRoLTEwLGk9dC8odGhpcy52YWx1ZXMubGVuZ3RoLTEpKmUsbz1pKzM7cmV0dXJuIG99LG8ucHJvdG90eXBlLl9vbk1vdXNlTW92ZT1mdW5jdGlvbih0KXt2YXIgZT10LmNsaWVudFgtdGhpcy5zdGFydENsaWVudFgsaT10aGlzLnN0YXJ0U2xpZGVYK2Usbz10aGlzLmxlZnRUb0luZGV4KGkpO3RoaXMuc2V0SW5kZXgobyksbi5wcmV2ZW50RGVmYXVsdCgpfSxvLnByb3RvdHlwZS5fb25Nb3VzZVVwPWZ1bmN0aW9uKHQpe3RoaXMuZnJhbWUuc3R5bGUuY3Vyc29yPSJhdXRvIixuLnJlbW92ZUV2ZW50TGlzdGVuZXIoZG9jdW1lbnQsIm1vdXNlbW92ZSIsdGhpcy5vbm1vdXNlbW92ZSksbi5yZW1vdmVFdmVudExpc3RlbmVyKGRvY3VtZW50LCJtb3VzZXVwIix0aGlzLm9ubW91c2V1cCksbi5wcmV2ZW50RGVmYXVsdCgpfSx0LmV4cG9ydHM9b30sZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBpKHQsZSxpLG8pe3RoaXMuX3N0YXJ0PTAsdGhpcy5fZW5kPTAsdGhpcy5fc3RlcD0xLHRoaXMucHJldHR5U3RlcD0hMCx0aGlzLnByZWNpc2lvbj01LHRoaXMuX2N1cnJlbnQ9MCx0aGlzLnNldFJhbmdlKHQsZSxpLG8pfWkucHJvdG90eXBlLmlzTnVtZXJpYz1mdW5jdGlvbih0KXtyZXR1cm4haXNOYU4ocGFyc2VGbG9hdCh0KSkmJmlzRmluaXRlKHQpfSxpLnByb3RvdHlwZS5zZXRSYW5nZT1mdW5jdGlvbih0LGUsaSxvKXtpZighdGhpcy5pc051bWVyaWModCkpdGhyb3cgbmV3IEVycm9yKCJQYXJhbWV0ZXIgJ3N0YXJ0JyBpcyBub3QgbnVtZXJpYzsgdmFsdWU6ICIrdCk7aWYoIXRoaXMuaXNOdW1lcmljKGUpKXRocm93IG5ldyBFcnJvcigiUGFyYW1ldGVyICdlbmQnIGlzIG5vdCBudW1lcmljOyB2YWx1ZTogIit0KTtpZighdGhpcy5pc051bWVyaWMoaSkpdGhyb3cgbmV3IEVycm9yKCJQYXJhbWV0ZXIgJ3N0ZXAnIGlzIG5vdCBudW1lcmljOyB2YWx1ZTogIit0KTt0aGlzLl9zdGFydD10P3Q6MCx0aGlzLl9lbmQ9ZT9lOjAsdGhpcy5zZXRTdGVwKGksbyl9LGkucHJvdG90eXBlLnNldFN0ZXA9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT10fHx0PD0wfHwodm9pZCAwIT09ZSYmKHRoaXMucHJldHR5U3RlcD1lKSx0aGlzLnByZXR0eVN0ZXA9PT0hMD90aGlzLl9zdGVwPWkuY2FsY3VsYXRlUHJldHR5U3RlcCh0KTp0aGlzLl9zdGVwPXQpfSxpLmNhbGN1bGF0ZVByZXR0eVN0ZXA9ZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubG9nKHQpL01hdGguTE4xMH0saT1NYXRoLnBvdygxMCxNYXRoLnJvdW5kKGUodCkpKSxvPTIqTWF0aC5wb3coMTAsTWF0aC5yb3VuZChlKHQvMikpKSxuPTUqTWF0aC5wb3coMTAsTWF0aC5yb3VuZChlKHQvNSkpKSxzPWk7cmV0dXJuIE1hdGguYWJzKG8tdCk8PU1hdGguYWJzKHMtdCkmJihzPW8pLE1hdGguYWJzKG4tdCk8PU1hdGguYWJzKHMtdCkmJihzPW4pLHM8PTAmJihzPTEpLHN9LGkucHJvdG90eXBlLmdldEN1cnJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gcGFyc2VGbG9hdCh0aGlzLl9jdXJyZW50LnRvUHJlY2lzaW9uKHRoaXMucHJlY2lzaW9uKSl9LGkucHJvdG90eXBlLmdldFN0ZXA9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RlcH0saS5wcm90b3R5cGUuc3RhcnQ9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9ITEpLHRoaXMuX2N1cnJlbnQ9dGhpcy5fc3RhcnQtdGhpcy5fc3RhcnQldGhpcy5fc3RlcCx0JiZ0aGlzLmdldEN1cnJlbnQoKTx0aGlzLl9zdGFydCYmdGhpcy5uZXh0KCl9LGkucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oKXt0aGlzLl9jdXJyZW50Kz10aGlzLl9zdGVwfSxpLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3VycmVudD50aGlzLl9lbmR9LHQuZXhwb3J0cz1pfSxmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIGkoKXt0aGlzLm1pbj12b2lkIDAsdGhpcy5tYXg9dm9pZCAwfWkucHJvdG90eXBlLmFkanVzdD1mdW5jdGlvbih0KXt2b2lkIDAhPT10JiYoKHZvaWQgMD09PXRoaXMubWlufHx0aGlzLm1pbj50KSYmKHRoaXMubWluPXQpLCh2b2lkIDA9PT10aGlzLm1heHx8dGhpcy5tYXg8dCkmJih0aGlzLm1heD10KSl9LGkucHJvdG90eXBlLmNvbWJpbmU9ZnVuY3Rpb24odCl7dGhpcy5hZGQodC5taW4pLHRoaXMuYWRkKHQubWF4KX0saS5wcm90b3R5cGUuZXhwYW5kPWZ1bmN0aW9uKHQpe2lmKHZvaWQgMCE9PXQpe3ZhciBlPXRoaXMubWluLXQsaT10aGlzLm1heCt0O2lmKGU+aSl0aHJvdyBuZXcgRXJyb3IoIlBhc3NlZCBleHBhbnNpb24gdmFsdWUgbWFrZXMgcmFuZ2UgaW52YWxpZCIpO3RoaXMubWluPWUsdGhpcy5tYXg9aX19LGkucHJvdG90eXBlLnJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF4LXRoaXMubWlufSxpLnByb3RvdHlwZS5jZW50ZXI9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5taW4rdGhpcy5tYXgpLzJ9LHQuZXhwb3J0cz1pfSxmdW5jdGlvbih0LGUsaSl7ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGUgaW4gdClpZih0Lmhhc093blByb3BlcnR5KGUpKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIG4odCl7cmV0dXJuIHZvaWQgMD09PXR8fCIiPT09dD90OnQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKX1mdW5jdGlvbiBzKHQsZSl7cmV0dXJuIHZvaWQgMD09PXR8fCIiPT09dD9lOnQrbihlKX1mdW5jdGlvbiByKHQsZSxpLG8pe3ZhciBuLHI7Zm9yKHZhciBhIGluIGkpbj1pW2FdLHI9cyhvLG4pLGVbcl09dFtuXX1mdW5jdGlvbiBhKHQsZSxpLG8pe3ZhciBuLHI7Zm9yKHZhciBhIGluIGkpbj1pW2FdLHZvaWQgMCE9PXRbbl0mJihyPXMobyxuKSxlW3JdPXRbbl0pfWZ1bmN0aW9uIGgodCxlKXtpZih2b2lkIDA9PT10fHxvKHQpKXRocm93IG5ldyBFcnJvcigiTm8gREVGQVVMVFMgcGFzc2VkIik7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgRXJyb3IoIk5vIGRzdCBwYXNzZWQiKTtEPXQscih0LGUsaykscih0LGUsTywiZGVmYXVsdCIpLGwodCxlKSxlLm1hcmdpbj0xMCxlLnNob3dHcmF5Qm90dG9tPSExLGUuc2hvd1Rvb2x0aXA9ITEsZS5leWU9bmV3IF8oMCwwLC0xKX1mdW5jdGlvbiBkKHQsZSl7aWYodm9pZCAwIT09dCl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgRXJyb3IoIk5vIGRzdCBwYXNzZWQiKTtpZih2b2lkIDA9PT1EfHxvKEQpKXRocm93IG5ldyBFcnJvcigiREVGQVVMVFMgbm90IHNldCBmb3IgbW9kdWxlIFNldHRpbmdzIik7YSh0LGUsayksYSh0LGUsTywiZGVmYXVsdCIpLGwodCxlKX19ZnVuY3Rpb24gbCh0LGUpe3ZvaWQgMCE9PXQuYmFja2dyb3VuZENvbG9yJiZtKHQuYmFja2dyb3VuZENvbG9yLGUpLHYodC5kYXRhQ29sb3IsZSksZih0LnN0eWxlLGUpLGModC5zaG93TGVnZW5kLGUpLGcodC5jYW1lcmFQb3NpdGlvbixlKSx2b2lkIDAhPT10LnRvb2x0aXAmJihlLnNob3dUb29sdGlwPXQudG9vbHRpcCl9ZnVuY3Rpb24gYyh0LGUpe2lmKHZvaWQgMD09PXQpe3ZhciBpPXZvaWQgMD09PUQuc2hvd0xlZ2VuZDtpZihpKXt2YXIgbz1lLnN0eWxlPT09dy5ET1RDT0xPUnx8ZS5zdHlsZT09PXcuRE9UU0laRTtlLnNob3dMZWdlbmQ9b319ZWxzZSBlLnNob3dMZWdlbmQ9dH1mdW5jdGlvbiB1KHQpe3ZhciBlPXhbdF07cmV0dXJuIHZvaWQgMD09PWU/LTE6ZX1mdW5jdGlvbiBwKHQpe3ZhciBlPSExO2Zvcih2YXIgaSBpbiB3KWlmKHdbaV09PT10KXtlPSEwO2JyZWFrfXJldHVybiBlfWZ1bmN0aW9uIGYodCxlKXtpZih2b2lkIDAhPT10KXt2YXIgaTtpZigic3RyaW5nIj09dHlwZW9mIHQpe2lmKGk9dSh0KSxpPT09LTEpdGhyb3cgbmV3IEVycm9yKCJTdHlsZSAnIit0KyInIGlzIGludmFsaWQiKX1lbHNle2lmKCFwKHQpKXRocm93IG5ldyBFcnJvcigiU3R5bGUgJyIrdCsiJyBpcyBpbnZhbGlkIik7aT10fWUuc3R5bGU9aX19ZnVuY3Rpb24gbSh0LGUpe3ZhciBpPSJ3aGl0ZSIsbz0iZ3JheSIsbj0xO2lmKCJzdHJpbmciPT10eXBlb2YgdClpPXQsbz0ibm9uZSIsbj0wO2Vsc2V7aWYoIm9iamVjdCIhPT0oInVuZGVmaW5lZCI9PXR5cGVvZiB0PyJ1bmRlZmluZWQiOnkodCkpKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgdHlwZSBvZiBiYWNrZ3JvdW5kQ29sb3IiKTt2b2lkIDAhPT10LmZpbGwmJihpPXQuZmlsbCksdm9pZCAwIT09dC5zdHJva2UmJihvPXQuc3Ryb2tlKSx2b2lkIDAhPT10LnN0cm9rZVdpZHRoJiYobj10LnN0cm9rZVdpZHRoKX1lLmZyYW1lLnN0eWxlLmJhY2tncm91bmRDb2xvcj1pLGUuZnJhbWUuc3R5bGUuYm9yZGVyQ29sb3I9byxlLmZyYW1lLnN0eWxlLmJvcmRlcldpZHRoPW4rInB4IixlLmZyYW1lLnN0eWxlLmJvcmRlclN0eWxlPSJzb2xpZCJ9ZnVuY3Rpb24gdih0LGUpe3ZvaWQgMCE9PXQmJih2b2lkIDA9PT1lLmRhdGFDb2xvciYmKGUuZGF0YUNvbG9yPXt9KSwic3RyaW5nIj09dHlwZW9mIHQ/KGUuZGF0YUNvbG9yLmZpbGw9dCxlLmRhdGFDb2xvci5zdHJva2U9dCk6KHQuZmlsbCYmKGUuZGF0YUNvbG9yLmZpbGw9dC5maWxsKSx0LnN0cm9rZSYmKGUuZGF0YUNvbG9yLnN0cm9rZT10LnN0cm9rZSksdm9pZCAwIT09dC5zdHJva2VXaWR0aCYmKGUuZGF0YUNvbG9yLnN0cm9rZVdpZHRoPXQuc3Ryb2tlV2lkdGgpKSl9ZnVuY3Rpb24gZyh0LGUpe3ZhciBpPXQ7dm9pZCAwIT09aSYmKHZvaWQgMD09PWUuY2FtZXJhJiYoZS5jYW1lcmE9bmV3IGIpLGUuY2FtZXJhLnNldEFybVJvdGF0aW9uKGkuaG9yaXpvbnRhbCxpLnZlcnRpY2FsKSxlLmNhbWVyYS5zZXRBcm1MZW5ndGgoaS5kaXN0YW5jZSkpfXZhciB5PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxiPWkoMTYpLF89aSgxNCksdz17QkFSOjAsQkFSQ09MT1I6MSxCQVJTSVpFOjIsRE9UOjMsRE9UTElORTo0LERPVENPTE9SOjUsRE9UU0laRTo2LEdSSUQ6NyxMSU5FOjgsU1VSRkFDRTo5fSx4PXtkb3Q6dy5ET1QsImRvdC1saW5lIjp3LkRPVExJTkUsImRvdC1jb2xvciI6dy5ET1RDT0xPUiwiZG90LXNpemUiOncuRE9UU0laRSxsaW5lOncuTElORSxncmlkOncuR1JJRCxzdXJmYWNlOncuU1VSRkFDRSxiYXI6dy5CQVIsImJhci1jb2xvciI6dy5CQVJDT0xPUiwiYmFyLXNpemUiOncuQkFSU0laRX0saz1bIndpZHRoIiwiaGVpZ2h0IiwiZmlsdGVyTGFiZWwiLCJsZWdlbmRMYWJlbCIsInhMYWJlbCIsInlMYWJlbCIsInpMYWJlbCIsInhWYWx1ZUxhYmVsIiwieVZhbHVlTGFiZWwiLCJ6VmFsdWVMYWJlbCIsInNob3dHcmlkIiwic2hvd1BlcnNwZWN0aXZlIiwic2hvd1NoYWRvdyIsImtlZXBBc3BlY3RSYXRpbyIsInZlcnRpY2FsUmF0aW8iLCJkb3RTaXplUmF0aW8iLCJzaG93QW5pbWF0aW9uQ29udHJvbHMiLCJhbmltYXRpb25JbnRlcnZhbCIsImFuaW1hdGlvblByZWxvYWQiLCJhbmltYXRpb25BdXRvU3RhcnQiLCJheGlzQ29sb3IiLCJncmlkQ29sb3IiLCJ4Q2VudGVyIiwieUNlbnRlciJdLE89WyJ4QmFyV2lkdGgiLCJ5QmFyV2lkdGgiLCJ2YWx1ZU1pbiIsInZhbHVlTWF4IiwieE1pbiIsInhNYXgiLCJ4U3RlcCIsInlNaW4iLCJ5TWF4IiwieVN0ZXAiLCJ6TWluIiwiek1heCIsInpTdGVwIl0sRD12b2lkIDA7dC5leHBvcnRzLlNUWUxFPXcsdC5leHBvcnRzLnNldERlZmF1bHRzPWgsdC5leHBvcnRzLnNldE9wdGlvbnM9ZCx0LmV4cG9ydHMuc2V0Q2FtZXJhUG9zaXRpb249Z30sZnVuY3Rpb24odCxlLGkpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93KXt2YXIgbz1pKDIzKSxuPXdpbmRvdy5IYW1tZXJ8fGkoMjQpO3QuZXhwb3J0cz1vKG4se3ByZXZlbnREZWZhdWx0OiJtb3VzZSJ9KX1lbHNlIHQuZXhwb3J0cz1mdW5jdGlvbigpe3Rocm93IEVycm9yKCJoYW1tZXIuanMgaXMgb25seSBhdmFpbGFibGUgaW4gYSBicm93c2VyLCBub3QgaW4gbm9kZS5qcy4iKX19LGZ1bmN0aW9uKHQsZSxpKXt2YXIgbyxuLHM7IWZ1bmN0aW9uKGkpe249W10sbz1pLHM9ImZ1bmN0aW9uIj09dHlwZW9mIG8/by5hcHBseShlLG4pOm8sISh2b2lkIDAhPT1zJiYodC5leHBvcnRzPXMpKX0oZnVuY3Rpb24oKXt2YXIgdD1udWxsO3JldHVybiBmdW5jdGlvbiBlKGksbyl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gdC5tYXRjaCgvW14gXSsvZyl9ZnVuY3Rpb24gcyhlKXtpZigiaGFtbWVyLmlucHV0IiE9PWUudHlwZSl7aWYoZS5zcmNFdmVudC5faGFuZGxlZHx8KGUuc3JjRXZlbnQuX2hhbmRsZWQ9e30pLGUuc3JjRXZlbnQuX2hhbmRsZWRbZS50eXBlXSlyZXR1cm47ZS5zcmNFdmVudC5faGFuZGxlZFtlLnR5cGVdPSEwfXZhciBpPSExO2Uuc3RvcFByb3BhZ2F0aW9uPWZ1bmN0aW9uKCl7aT0hMH07dmFyIG89ZS5zcmNFdmVudC5zdG9wUHJvcGFnYXRpb24uYmluZChlLnNyY0V2ZW50KTsiZnVuY3Rpb24iPT10eXBlb2YgbyYmKGUuc3JjRXZlbnQuc3RvcFByb3BhZ2F0aW9uPWZ1bmN0aW9uKCl7bygpLGUuc3RvcFByb3BhZ2F0aW9uKCl9KSxlLmZpcnN0VGFyZ2V0PXQ7Zm9yKHZhciBuPXQ7biYmIWk7KXt2YXIgcz1uLmhhbW1lcjtpZihzKWZvcih2YXIgcixhPTA7YTxzLmxlbmd0aDthKyspaWYocj1zW2FdLl9oYW5kbGVyc1tlLnR5cGVdKWZvcih2YXIgaD0wO2g8ci5sZW5ndGgmJiFpO2grKylyW2hdKGUpO249bi5wYXJlbnROb2RlfX12YXIgcj1vfHx7cHJldmVudERlZmF1bHQ6ITF9O2lmKGkuTWFuYWdlcil7dmFyIGE9aSxoPWZ1bmN0aW9uKHQsaSl7dmFyIG89T2JqZWN0LmNyZWF0ZShyKTtyZXR1cm4gaSYmYS5hc3NpZ24obyxpKSxlKG5ldyBhKHQsbyksbyl9O3JldHVybiBhLmFzc2lnbihoLGEpLGguTWFuYWdlcj1mdW5jdGlvbih0LGkpe3ZhciBvPU9iamVjdC5jcmVhdGUocik7cmV0dXJuIGkmJmEuYXNzaWduKG8saSksZShuZXcgYS5NYW5hZ2VyKHQsbyksbyl9LGh9dmFyIGQ9T2JqZWN0LmNyZWF0ZShpKSxsPWkuZWxlbWVudDtyZXR1cm4gbC5oYW1tZXJ8fChsLmhhbW1lcj1bXSksbC5oYW1tZXIucHVzaChkKSxpLm9uKCJoYW1tZXIuaW5wdXQiLGZ1bmN0aW9uKGUpe3IucHJldmVudERlZmF1bHQhPT0hMCYmci5wcmV2ZW50RGVmYXVsdCE9PWUucG9pbnRlclR5cGV8fGUucHJldmVudERlZmF1bHQoKSxlLmlzRmlyc3QmJih0PWUudGFyZ2V0KX0pLGQuX2hhbmRsZXJzPXt9LGQub249ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBvPWQuX2hhbmRsZXJzW3RdO298fChkLl9oYW5kbGVyc1t0XT1vPVtdLGkub24odCxzKSksby5wdXNoKGUpfSksZH0sZC5vZmY9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBvPWQuX2hhbmRsZXJzW3RdO28mJihvPWU/by5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQhPT1lfSk6W10sby5sZW5ndGg+MD9kLl9oYW5kbGVyc1t0XT1vOihpLm9mZih0LHMpLGRlbGV0ZSBkLl9oYW5kbGVyc1t0XSkpfSksZH0sZC5lbWl0PWZ1bmN0aW9uKGUsbyl7dD1vLnRhcmdldCxpLmVtaXQoZSxvKX0sZC5kZXN0cm95PWZ1bmN0aW9uKCl7dmFyIHQ9aS5lbGVtZW50LmhhbW1lcixlPXQuaW5kZXhPZihkKTtlIT09LTEmJnQuc3BsaWNlKGUsMSksdC5sZW5ndGh8fGRlbGV0ZSBpLmVsZW1lbnQuaGFtbWVyLGQuX2hhbmRsZXJzPXt9LGkuZGVzdHJveSgpfSxkfX0pfSxmdW5jdGlvbih0LGUsaSl7dmFyIG87IWZ1bmN0aW9uKG4scyxyLGEpe2Z1bmN0aW9uIGgodCxlLGkpe3JldHVybiBzZXRUaW1lb3V0KHAodCxpKSxlKX1mdW5jdGlvbiBkKHQsZSxpKXtyZXR1cm4hIUFycmF5LmlzQXJyYXkodCkmJihsKHQsaVtlXSxpKSwhMCl9ZnVuY3Rpb24gbCh0LGUsaSl7dmFyIG87aWYodClpZih0LmZvckVhY2gpdC5mb3JFYWNoKGUsaSk7ZWxzZSBpZih0Lmxlbmd0aCE9PWEpZm9yKG89MDtvPHQubGVuZ3RoOyllLmNhbGwoaSx0W29dLG8sdCksbysrO2Vsc2UgZm9yKG8gaW4gdCl0Lmhhc093blByb3BlcnR5KG8pJiZlLmNhbGwoaSx0W29dLG8sdCl9ZnVuY3Rpb24gYyh0LGUsaSl7dmFyIG89IkRFUFJFQ0FURUQgTUVUSE9EOiAiK2UrIlxuIitpKyIgQVQgXG4iO3JldHVybiBmdW5jdGlvbigpe3ZhciBlPW5ldyBFcnJvcigiZ2V0LXN0YWNrLXRyYWNlIiksaT1lJiZlLnN0YWNrP2Uuc3RhY2sucmVwbGFjZSgvXlteXChdKz9bXG4kXS9nbSwiIikucmVwbGFjZSgvXlxzK2F0XHMrL2dtLCIiKS5yZXBsYWNlKC9eT2JqZWN0Ljxhbm9ueW1vdXM+XHMqXCgvZ20sInthbm9ueW1vdXN9KClAIik6IlVua25vd24gU3RhY2sgVHJhY2UiLHM9bi5jb25zb2xlJiYobi5jb25zb2xlLndhcm58fG4uY29uc29sZS5sb2cpO3JldHVybiBzJiZzLmNhbGwobi5jb25zb2xlLG8saSksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIHUodCxlLGkpe3ZhciBvLG49ZS5wcm90b3R5cGU7bz10LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4pLG8uY29uc3RydWN0b3I9dCxvLl9zdXBlcj1uLGkmJm10KG8saSl9ZnVuY3Rpb24gcCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KGUsYXJndW1lbnRzKX19ZnVuY3Rpb24gZih0LGUpe3JldHVybiB0eXBlb2YgdD09eXQ/dC5hcHBseShlP2VbMF18fGE6YSxlKTp0fWZ1bmN0aW9uIG0odCxlKXtyZXR1cm4gdD09PWE/ZTp0fWZ1bmN0aW9uIHYodCxlLGkpe2woXyhlKSxmdW5jdGlvbihlKXt0LmFkZEV2ZW50TGlzdGVuZXIoZSxpLCExKX0pfWZ1bmN0aW9uIGcodCxlLGkpe2woXyhlKSxmdW5jdGlvbihlKXt0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZSxpLCExKX0pfWZ1bmN0aW9uIHkodCxlKXtmb3IoO3Q7KXtpZih0PT1lKXJldHVybiEwO3Q9dC5wYXJlbnROb2RlfXJldHVybiExfWZ1bmN0aW9uIGIodCxlKXtyZXR1cm4gdC5pbmRleE9mKGUpPi0xfWZ1bmN0aW9uIF8odCl7cmV0dXJuIHQudHJpbSgpLnNwbGl0KC9ccysvZyl9ZnVuY3Rpb24gdyh0LGUsaSl7aWYodC5pbmRleE9mJiYhaSlyZXR1cm4gdC5pbmRleE9mKGUpO2Zvcih2YXIgbz0wO288dC5sZW5ndGg7KXtpZihpJiZ0W29dW2ldPT1lfHwhaSYmdFtvXT09PWUpcmV0dXJuIG87bysrfXJldHVybi0xfWZ1bmN0aW9uIHgodCl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQsMCl9ZnVuY3Rpb24gayh0LGUsaSl7Zm9yKHZhciBvPVtdLG49W10scz0wO3M8dC5sZW5ndGg7KXt2YXIgcj1lP3Rbc11bZV06dFtzXTt3KG4scik8MCYmby5wdXNoKHRbc10pLG5bc109cixzKyt9cmV0dXJuIGkmJihvPWU/by5zb3J0KGZ1bmN0aW9uKHQsaSl7cmV0dXJuIHRbZV0+aVtlXX0pOm8uc29ydCgpKSxvfWZ1bmN0aW9uIE8odCxlKXtmb3IodmFyIGksbyxuPWVbMF0udG9VcHBlckNhc2UoKStlLnNsaWNlKDEpLHM9MDtzPHZ0Lmxlbmd0aDspe2lmKGk9dnRbc10sbz1pP2krbjplLG8gaW4gdClyZXR1cm4gbztzKyt9cmV0dXJuIGF9ZnVuY3Rpb24gRCgpe3JldHVybiBPdCsrfWZ1bmN0aW9uIFModCl7dmFyIGU9dC5vd25lckRvY3VtZW50fHx0O3JldHVybiBlLmRlZmF1bHRWaWV3fHxlLnBhcmVudFdpbmRvd3x8bjsKfWZ1bmN0aW9uIEModCxlKXt2YXIgaT10aGlzO3RoaXMubWFuYWdlcj10LHRoaXMuY2FsbGJhY2s9ZSx0aGlzLmVsZW1lbnQ9dC5lbGVtZW50LHRoaXMudGFyZ2V0PXQub3B0aW9ucy5pbnB1dFRhcmdldCx0aGlzLmRvbUhhbmRsZXI9ZnVuY3Rpb24oZSl7Zih0Lm9wdGlvbnMuZW5hYmxlLFt0XSkmJmkuaGFuZGxlcihlKX0sdGhpcy5pbml0KCl9ZnVuY3Rpb24gVCh0KXt2YXIgZSxpPXQub3B0aW9ucy5pbnB1dENsYXNzO3JldHVybiBuZXcoZT1pP2k6Q3Q/VzpUdD9WOlN0P3E6SCkodCxFKX1mdW5jdGlvbiBFKHQsZSxpKXt2YXIgbz1pLnBvaW50ZXJzLmxlbmd0aCxuPWkuY2hhbmdlZFBvaW50ZXJzLmxlbmd0aCxzPWUmUnQmJm8tbj09PTAscj1lJih6dHxBdCkmJm8tbj09PTA7aS5pc0ZpcnN0PSEhcyxpLmlzRmluYWw9ISFyLHMmJih0LnNlc3Npb249e30pLGkuZXZlbnRUeXBlPWUsTSh0LGkpLHQuZW1pdCgiaGFtbWVyLmlucHV0IixpKSx0LnJlY29nbml6ZShpKSx0LnNlc3Npb24ucHJldklucHV0PWl9ZnVuY3Rpb24gTSh0LGUpe3ZhciBpPXQuc2Vzc2lvbixvPWUucG9pbnRlcnMsbj1vLmxlbmd0aDtpLmZpcnN0SW5wdXR8fChpLmZpcnN0SW5wdXQ9TihlKSksbj4xJiYhaS5maXJzdE11bHRpcGxlP2kuZmlyc3RNdWx0aXBsZT1OKGUpOjE9PT1uJiYoaS5maXJzdE11bHRpcGxlPSExKTt2YXIgcz1pLmZpcnN0SW5wdXQscj1pLmZpcnN0TXVsdGlwbGUsYT1yP3IuY2VudGVyOnMuY2VudGVyLGg9ZS5jZW50ZXI9UihvKTtlLnRpbWVTdGFtcD13dCgpLGUuZGVsdGFUaW1lPWUudGltZVN0YW1wLXMudGltZVN0YW1wLGUuYW5nbGU9QihhLGgpLGUuZGlzdGFuY2U9QShhLGgpLFAoaSxlKSxlLm9mZnNldERpcmVjdGlvbj16KGUuZGVsdGFYLGUuZGVsdGFZKTt2YXIgZD1MKGUuZGVsdGFUaW1lLGUuZGVsdGFYLGUuZGVsdGFZKTtlLm92ZXJhbGxWZWxvY2l0eVg9ZC54LGUub3ZlcmFsbFZlbG9jaXR5WT1kLnksZS5vdmVyYWxsVmVsb2NpdHk9X3QoZC54KT5fdChkLnkpP2QueDpkLnksZS5zY2FsZT1yP0Yoci5wb2ludGVycyxvKToxLGUucm90YXRpb249cj9qKHIucG9pbnRlcnMsbyk6MCxlLm1heFBvaW50ZXJzPWkucHJldklucHV0P2UucG9pbnRlcnMubGVuZ3RoPmkucHJldklucHV0Lm1heFBvaW50ZXJzP2UucG9pbnRlcnMubGVuZ3RoOmkucHJldklucHV0Lm1heFBvaW50ZXJzOmUucG9pbnRlcnMubGVuZ3RoLEkoaSxlKTt2YXIgbD10LmVsZW1lbnQ7eShlLnNyY0V2ZW50LnRhcmdldCxsKSYmKGw9ZS5zcmNFdmVudC50YXJnZXQpLGUudGFyZ2V0PWx9ZnVuY3Rpb24gUCh0LGUpe3ZhciBpPWUuY2VudGVyLG89dC5vZmZzZXREZWx0YXx8e30sbj10LnByZXZEZWx0YXx8e30scz10LnByZXZJbnB1dHx8e307ZS5ldmVudFR5cGUhPT1SdCYmcy5ldmVudFR5cGUhPT16dHx8KG49dC5wcmV2RGVsdGE9e3g6cy5kZWx0YVh8fDAseTpzLmRlbHRhWXx8MH0sbz10Lm9mZnNldERlbHRhPXt4OmkueCx5OmkueX0pLGUuZGVsdGFYPW4ueCsoaS54LW8ueCksZS5kZWx0YVk9bi55KyhpLnktby55KX1mdW5jdGlvbiBJKHQsZSl7dmFyIGksbyxuLHMscj10Lmxhc3RJbnRlcnZhbHx8ZSxoPWUudGltZVN0YW1wLXIudGltZVN0YW1wO2lmKGUuZXZlbnRUeXBlIT1BdCYmKGg+TnR8fHIudmVsb2NpdHk9PT1hKSl7dmFyIGQ9ZS5kZWx0YVgtci5kZWx0YVgsbD1lLmRlbHRhWS1yLmRlbHRhWSxjPUwoaCxkLGwpO289Yy54LG49Yy55LGk9X3QoYy54KT5fdChjLnkpP2MueDpjLnkscz16KGQsbCksdC5sYXN0SW50ZXJ2YWw9ZX1lbHNlIGk9ci52ZWxvY2l0eSxvPXIudmVsb2NpdHlYLG49ci52ZWxvY2l0eVkscz1yLmRpcmVjdGlvbjtlLnZlbG9jaXR5PWksZS52ZWxvY2l0eVg9byxlLnZlbG9jaXR5WT1uLGUuZGlyZWN0aW9uPXN9ZnVuY3Rpb24gTih0KXtmb3IodmFyIGU9W10saT0wO2k8dC5wb2ludGVycy5sZW5ndGg7KWVbaV09e2NsaWVudFg6YnQodC5wb2ludGVyc1tpXS5jbGllbnRYKSxjbGllbnRZOmJ0KHQucG9pbnRlcnNbaV0uY2xpZW50WSl9LGkrKztyZXR1cm57dGltZVN0YW1wOnd0KCkscG9pbnRlcnM6ZSxjZW50ZXI6UihlKSxkZWx0YVg6dC5kZWx0YVgsZGVsdGFZOnQuZGVsdGFZfX1mdW5jdGlvbiBSKHQpe3ZhciBlPXQubGVuZ3RoO2lmKDE9PT1lKXJldHVybnt4OmJ0KHRbMF0uY2xpZW50WCkseTpidCh0WzBdLmNsaWVudFkpfTtmb3IodmFyIGk9MCxvPTAsbj0wO248ZTspaSs9dFtuXS5jbGllbnRYLG8rPXRbbl0uY2xpZW50WSxuKys7cmV0dXJue3g6YnQoaS9lKSx5OmJ0KG8vZSl9fWZ1bmN0aW9uIEwodCxlLGkpe3JldHVybnt4OmUvdHx8MCx5OmkvdHx8MH19ZnVuY3Rpb24geih0LGUpe3JldHVybiB0PT09ZT9CdDpfdCh0KT49X3QoZSk/dDwwP2p0OkZ0OmU8MD9IdDpXdH1mdW5jdGlvbiBBKHQsZSxpKXtpfHwoaT1VdCk7dmFyIG89ZVtpWzBdXS10W2lbMF1dLG49ZVtpWzFdXS10W2lbMV1dO3JldHVybiBNYXRoLnNxcnQobypvK24qbil9ZnVuY3Rpb24gQih0LGUsaSl7aXx8KGk9VXQpO3ZhciBvPWVbaVswXV0tdFtpWzBdXSxuPWVbaVsxXV0tdFtpWzFdXTtyZXR1cm4gMTgwKk1hdGguYXRhbjIobixvKS9NYXRoLlBJfWZ1bmN0aW9uIGoodCxlKXtyZXR1cm4gQihlWzFdLGVbMF0scXQpK0IodFsxXSx0WzBdLHF0KX1mdW5jdGlvbiBGKHQsZSl7cmV0dXJuIEEoZVswXSxlWzFdLHF0KS9BKHRbMF0sdFsxXSxxdCl9ZnVuY3Rpb24gSCgpe3RoaXMuZXZFbD1adCx0aGlzLmV2V2luPUt0LHRoaXMucHJlc3NlZD0hMSxDLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBXKCl7dGhpcy5ldkVsPSR0LHRoaXMuZXZXaW49dGUsQy5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5zdG9yZT10aGlzLm1hbmFnZXIuc2Vzc2lvbi5wb2ludGVyRXZlbnRzPVtdfWZ1bmN0aW9uIFkoKXt0aGlzLmV2VGFyZ2V0PWllLHRoaXMuZXZXaW49b2UsdGhpcy5zdGFydGVkPSExLEMuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIEcodCxlKXt2YXIgaT14KHQudG91Y2hlcyksbz14KHQuY2hhbmdlZFRvdWNoZXMpO3JldHVybiBlJih6dHxBdCkmJihpPWsoaS5jb25jYXQobyksImlkZW50aWZpZXIiLCEwKSksW2ksb119ZnVuY3Rpb24gVigpe3RoaXMuZXZUYXJnZXQ9c2UsdGhpcy50YXJnZXRJZHM9e30sQy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gVSh0LGUpe3ZhciBpPXgodC50b3VjaGVzKSxvPXRoaXMudGFyZ2V0SWRzO2lmKGUmKFJ0fEx0KSYmMT09PWkubGVuZ3RoKXJldHVybiBvW2lbMF0uaWRlbnRpZmllcl09ITAsW2ksaV07dmFyIG4scyxyPXgodC5jaGFuZ2VkVG91Y2hlcyksYT1bXSxoPXRoaXMudGFyZ2V0O2lmKHM9aS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHkodC50YXJnZXQsaCl9KSxlPT09UnQpZm9yKG49MDtuPHMubGVuZ3RoOylvW3Nbbl0uaWRlbnRpZmllcl09ITAsbisrO2ZvcihuPTA7bjxyLmxlbmd0aDspb1tyW25dLmlkZW50aWZpZXJdJiZhLnB1c2gocltuXSksZSYoenR8QXQpJiZkZWxldGUgb1tyW25dLmlkZW50aWZpZXJdLG4rKztyZXR1cm4gYS5sZW5ndGg/W2socy5jb25jYXQoYSksImlkZW50aWZpZXIiLCEwKSxhXTp2b2lkIDB9ZnVuY3Rpb24gcSgpe0MuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciB0PXAodGhpcy5oYW5kbGVyLHRoaXMpO3RoaXMudG91Y2g9bmV3IFYodGhpcy5tYW5hZ2VyLHQpLHRoaXMubW91c2U9bmV3IEgodGhpcy5tYW5hZ2VyLHQpLHRoaXMucHJpbWFyeVRvdWNoPW51bGwsdGhpcy5sYXN0VG91Y2hlcz1bXX1mdW5jdGlvbiBYKHQsZSl7dCZSdD8odGhpcy5wcmltYXJ5VG91Y2g9ZS5jaGFuZ2VkUG9pbnRlcnNbMF0uaWRlbnRpZmllcixaLmNhbGwodGhpcyxlKSk6dCYoenR8QXQpJiZaLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBaKHQpe3ZhciBlPXQuY2hhbmdlZFBvaW50ZXJzWzBdO2lmKGUuaWRlbnRpZmllcj09PXRoaXMucHJpbWFyeVRvdWNoKXt2YXIgaT17eDplLmNsaWVudFgseTplLmNsaWVudFl9O3RoaXMubGFzdFRvdWNoZXMucHVzaChpKTt2YXIgbz10aGlzLmxhc3RUb3VjaGVzLG49ZnVuY3Rpb24oKXt2YXIgdD1vLmluZGV4T2YoaSk7dD4tMSYmby5zcGxpY2UodCwxKX07c2V0VGltZW91dChuLHJlKX19ZnVuY3Rpb24gSyh0KXtmb3IodmFyIGU9dC5zcmNFdmVudC5jbGllbnRYLGk9dC5zcmNFdmVudC5jbGllbnRZLG89MDtvPHRoaXMubGFzdFRvdWNoZXMubGVuZ3RoO28rKyl7dmFyIG49dGhpcy5sYXN0VG91Y2hlc1tvXSxzPU1hdGguYWJzKGUtbi54KSxyPU1hdGguYWJzKGktbi55KTtpZihzPD1hZSYmcjw9YWUpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gSih0LGUpe3RoaXMubWFuYWdlcj10LHRoaXMuc2V0KGUpfWZ1bmN0aW9uIFEodCl7aWYoYih0LHBlKSlyZXR1cm4gcGU7dmFyIGU9Yih0LGZlKSxpPWIodCxtZSk7cmV0dXJuIGUmJmk/cGU6ZXx8aT9lP2ZlOm1lOmIodCx1ZSk/dWU6Y2V9ZnVuY3Rpb24gJCgpe2lmKCFkZSlyZXR1cm4hMTt2YXIgdD17fSxlPW4uQ1NTJiZuLkNTUy5zdXBwb3J0cztyZXR1cm5bImF1dG8iLCJtYW5pcHVsYXRpb24iLCJwYW4teSIsInBhbi14IiwicGFuLXggcGFuLXkiLCJub25lIl0uZm9yRWFjaChmdW5jdGlvbihpKXt0W2ldPSFlfHxuLkNTUy5zdXBwb3J0cygidG91Y2gtYWN0aW9uIixpKX0pLHR9ZnVuY3Rpb24gdHQodCl7dGhpcy5vcHRpb25zPW10KHt9LHRoaXMuZGVmYXVsdHMsdHx8e30pLHRoaXMuaWQ9RCgpLHRoaXMubWFuYWdlcj1udWxsLHRoaXMub3B0aW9ucy5lbmFibGU9bSh0aGlzLm9wdGlvbnMuZW5hYmxlLCEwKSx0aGlzLnN0YXRlPWdlLHRoaXMuc2ltdWx0YW5lb3VzPXt9LHRoaXMucmVxdWlyZUZhaWw9W119ZnVuY3Rpb24gZXQodCl7cmV0dXJuIHQmeGU/ImNhbmNlbCI6dCZfZT8iZW5kIjp0JmJlPyJtb3ZlIjp0JnllPyJzdGFydCI6IiJ9ZnVuY3Rpb24gaXQodCl7cmV0dXJuIHQ9PVd0PyJkb3duIjp0PT1IdD8idXAiOnQ9PWp0PyJsZWZ0Ijp0PT1GdD8icmlnaHQiOiIifWZ1bmN0aW9uIG90KHQsZSl7dmFyIGk9ZS5tYW5hZ2VyO3JldHVybiBpP2kuZ2V0KHQpOnR9ZnVuY3Rpb24gbnQoKXt0dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gc3QoKXtudC5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5wWD1udWxsLHRoaXMucFk9bnVsbH1mdW5jdGlvbiBydCgpe250LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBhdCgpe3R0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLl90aW1lcj1udWxsLHRoaXMuX2lucHV0PW51bGx9ZnVuY3Rpb24gaHQoKXtudC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gZHQoKXtudC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gbHQoKXt0dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5wVGltZT0hMSx0aGlzLnBDZW50ZXI9ITEsdGhpcy5fdGltZXI9bnVsbCx0aGlzLl9pbnB1dD1udWxsLHRoaXMuY291bnQ9MH1mdW5jdGlvbiBjdCh0LGUpe3JldHVybiBlPWV8fHt9LGUucmVjb2duaXplcnM9bShlLnJlY29nbml6ZXJzLGN0LmRlZmF1bHRzLnByZXNldCksbmV3IHV0KHQsZSl9ZnVuY3Rpb24gdXQodCxlKXt0aGlzLm9wdGlvbnM9bXQoe30sY3QuZGVmYXVsdHMsZXx8e30pLHRoaXMub3B0aW9ucy5pbnB1dFRhcmdldD10aGlzLm9wdGlvbnMuaW5wdXRUYXJnZXR8fHQsdGhpcy5oYW5kbGVycz17fSx0aGlzLnNlc3Npb249e30sdGhpcy5yZWNvZ25pemVycz1bXSx0aGlzLm9sZENzc1Byb3BzPXt9LHRoaXMuZWxlbWVudD10LHRoaXMuaW5wdXQ9VCh0aGlzKSx0aGlzLnRvdWNoQWN0aW9uPW5ldyBKKHRoaXMsdGhpcy5vcHRpb25zLnRvdWNoQWN0aW9uKSxwdCh0aGlzLCEwKSxsKHRoaXMub3B0aW9ucy5yZWNvZ25pemVycyxmdW5jdGlvbih0KXt2YXIgZT10aGlzLmFkZChuZXcgdFswXSh0WzFdKSk7dFsyXSYmZS5yZWNvZ25pemVXaXRoKHRbMl0pLHRbM10mJmUucmVxdWlyZUZhaWx1cmUodFszXSl9LHRoaXMpfWZ1bmN0aW9uIHB0KHQsZSl7dmFyIGk9dC5lbGVtZW50O2lmKGkuc3R5bGUpe3ZhciBvO2wodC5vcHRpb25zLmNzc1Byb3BzLGZ1bmN0aW9uKG4scyl7bz1PKGkuc3R5bGUscyksZT8odC5vbGRDc3NQcm9wc1tvXT1pLnN0eWxlW29dLGkuc3R5bGVbb109bik6aS5zdHlsZVtvXT10Lm9sZENzc1Byb3BzW29dfHwiIn0pLGV8fCh0Lm9sZENzc1Byb3BzPXt9KX19ZnVuY3Rpb24gZnQodCxlKXt2YXIgaT1zLmNyZWF0ZUV2ZW50KCJFdmVudCIpO2kuaW5pdEV2ZW50KHQsITAsITApLGkuZ2VzdHVyZT1lLGUudGFyZ2V0LmRpc3BhdGNoRXZlbnQoaSl9dmFyIG10LHZ0PVsiIiwid2Via2l0IiwiTW96IiwiTVMiLCJtcyIsIm8iXSxndD1zLmNyZWF0ZUVsZW1lbnQoImRpdiIpLHl0PSJmdW5jdGlvbiIsYnQ9TWF0aC5yb3VuZCxfdD1NYXRoLmFicyx3dD1EYXRlLm5vdzttdD0iZnVuY3Rpb24iIT10eXBlb2YgT2JqZWN0LmFzc2lnbj9mdW5jdGlvbih0KXtpZih0PT09YXx8bnVsbD09PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNvbnZlcnQgdW5kZWZpbmVkIG9yIG51bGwgdG8gb2JqZWN0Iik7Zm9yKHZhciBlPU9iamVjdCh0KSxpPTE7aTxhcmd1bWVudHMubGVuZ3RoO2krKyl7dmFyIG89YXJndW1lbnRzW2ldO2lmKG8hPT1hJiZudWxsIT09bylmb3IodmFyIG4gaW4gbylvLmhhc093blByb3BlcnR5KG4pJiYoZVtuXT1vW25dKX1yZXR1cm4gZX06T2JqZWN0LmFzc2lnbjt2YXIgeHQ9YyhmdW5jdGlvbih0LGUsaSl7Zm9yKHZhciBvPU9iamVjdC5rZXlzKGUpLG49MDtuPG8ubGVuZ3RoOykoIWl8fGkmJnRbb1tuXV09PT1hKSYmKHRbb1tuXV09ZVtvW25dXSksbisrO3JldHVybiB0fSwiZXh0ZW5kIiwiVXNlIGBhc3NpZ25gLiIpLGt0PWMoZnVuY3Rpb24odCxlKXtyZXR1cm4geHQodCxlLCEwKX0sIm1lcmdlIiwiVXNlIGBhc3NpZ25gLiIpLE90PTEsRHQ9L21vYmlsZXx0YWJsZXR8aXAoYWR8aG9uZXxvZCl8YW5kcm9pZC9pLFN0PSJvbnRvdWNoc3RhcnQiaW4gbixDdD1PKG4sIlBvaW50ZXJFdmVudCIpIT09YSxUdD1TdCYmRHQudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxFdD0idG91Y2giLE10PSJwZW4iLFB0PSJtb3VzZSIsSXQ9ImtpbmVjdCIsTnQ9MjUsUnQ9MSxMdD0yLHp0PTQsQXQ9OCxCdD0xLGp0PTIsRnQ9NCxIdD04LFd0PTE2LFl0PWp0fEZ0LEd0PUh0fFd0LFZ0PVl0fEd0LFV0PVsieCIsInkiXSxxdD1bImNsaWVudFgiLCJjbGllbnRZIl07Qy5wcm90b3R5cGU9e2hhbmRsZXI6ZnVuY3Rpb24oKXt9LGluaXQ6ZnVuY3Rpb24oKXt0aGlzLmV2RWwmJnYodGhpcy5lbGVtZW50LHRoaXMuZXZFbCx0aGlzLmRvbUhhbmRsZXIpLHRoaXMuZXZUYXJnZXQmJnYodGhpcy50YXJnZXQsdGhpcy5ldlRhcmdldCx0aGlzLmRvbUhhbmRsZXIpLHRoaXMuZXZXaW4mJnYoUyh0aGlzLmVsZW1lbnQpLHRoaXMuZXZXaW4sdGhpcy5kb21IYW5kbGVyKX0sZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuZXZFbCYmZyh0aGlzLmVsZW1lbnQsdGhpcy5ldkVsLHRoaXMuZG9tSGFuZGxlciksdGhpcy5ldlRhcmdldCYmZyh0aGlzLnRhcmdldCx0aGlzLmV2VGFyZ2V0LHRoaXMuZG9tSGFuZGxlciksdGhpcy5ldldpbiYmZyhTKHRoaXMuZWxlbWVudCksdGhpcy5ldldpbix0aGlzLmRvbUhhbmRsZXIpfX07dmFyIFh0PXttb3VzZWRvd246UnQsbW91c2Vtb3ZlOkx0LG1vdXNldXA6enR9LFp0PSJtb3VzZWRvd24iLEt0PSJtb3VzZW1vdmUgbW91c2V1cCI7dShILEMse2hhbmRsZXI6ZnVuY3Rpb24odCl7dmFyIGU9WHRbdC50eXBlXTtlJlJ0JiYwPT09dC5idXR0b24mJih0aGlzLnByZXNzZWQ9ITApLGUmTHQmJjEhPT10LndoaWNoJiYoZT16dCksdGhpcy5wcmVzc2VkJiYoZSZ6dCYmKHRoaXMucHJlc3NlZD0hMSksdGhpcy5jYWxsYmFjayh0aGlzLm1hbmFnZXIsZSx7cG9pbnRlcnM6W3RdLGNoYW5nZWRQb2ludGVyczpbdF0scG9pbnRlclR5cGU6UHQsc3JjRXZlbnQ6dH0pKX19KTt2YXIgSnQ9e3BvaW50ZXJkb3duOlJ0LHBvaW50ZXJtb3ZlOkx0LHBvaW50ZXJ1cDp6dCxwb2ludGVyY2FuY2VsOkF0LHBvaW50ZXJvdXQ6QXR9LFF0PXsyOkV0LDM6TXQsNDpQdCw1Okl0fSwkdD0icG9pbnRlcmRvd24iLHRlPSJwb2ludGVybW92ZSBwb2ludGVydXAgcG9pbnRlcmNhbmNlbCI7bi5NU1BvaW50ZXJFdmVudCYmIW4uUG9pbnRlckV2ZW50JiYoJHQ9Ik1TUG9pbnRlckRvd24iLHRlPSJNU1BvaW50ZXJNb3ZlIE1TUG9pbnRlclVwIE1TUG9pbnRlckNhbmNlbCIpLHUoVyxDLHtoYW5kbGVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc3RvcmUsaT0hMSxvPXQudHlwZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoIm1zIiwiIiksbj1KdFtvXSxzPVF0W3QucG9pbnRlclR5cGVdfHx0LnBvaW50ZXJUeXBlLHI9cz09RXQsYT13KGUsdC5wb2ludGVySWQsInBvaW50ZXJJZCIpO24mUnQmJigwPT09dC5idXR0b258fHIpP2E8MCYmKGUucHVzaCh0KSxhPWUubGVuZ3RoLTEpOm4mKHp0fEF0KSYmKGk9ITApLGE8MHx8KGVbYV09dCx0aGlzLmNhbGxiYWNrKHRoaXMubWFuYWdlcixuLHtwb2ludGVyczplLGNoYW5nZWRQb2ludGVyczpbdF0scG9pbnRlclR5cGU6cyxzcmNFdmVudDp0fSksaSYmZS5zcGxpY2UoYSwxKSl9fSk7dmFyIGVlPXt0b3VjaHN0YXJ0OlJ0LHRvdWNobW92ZTpMdCx0b3VjaGVuZDp6dCx0b3VjaGNhbmNlbDpBdH0saWU9InRvdWNoc3RhcnQiLG9lPSJ0b3VjaHN0YXJ0IHRvdWNobW92ZSB0b3VjaGVuZCB0b3VjaGNhbmNlbCI7dShZLEMse2hhbmRsZXI6ZnVuY3Rpb24odCl7dmFyIGU9ZWVbdC50eXBlXTtpZihlPT09UnQmJih0aGlzLnN0YXJ0ZWQ9ITApLHRoaXMuc3RhcnRlZCl7dmFyIGk9Ry5jYWxsKHRoaXMsdCxlKTtlJih6dHxBdCkmJmlbMF0ubGVuZ3RoLWlbMV0ubGVuZ3RoPT09MCYmKHRoaXMuc3RhcnRlZD0hMSksdGhpcy5jYWxsYmFjayh0aGlzLm1hbmFnZXIsZSx7cG9pbnRlcnM6aVswXSxjaGFuZ2VkUG9pbnRlcnM6aVsxXSxwb2ludGVyVHlwZTpFdCxzcmNFdmVudDp0fSl9fX0pO3ZhciBuZT17dG91Y2hzdGFydDpSdCx0b3VjaG1vdmU6THQsdG91Y2hlbmQ6enQsdG91Y2hjYW5jZWw6QXR9LHNlPSJ0b3VjaHN0YXJ0IHRvdWNobW92ZSB0b3VjaGVuZCB0b3VjaGNhbmNlbCI7dShWLEMse2hhbmRsZXI6ZnVuY3Rpb24odCl7dmFyIGU9bmVbdC50eXBlXSxpPVUuY2FsbCh0aGlzLHQsZSk7aSYmdGhpcy5jYWxsYmFjayh0aGlzLm1hbmFnZXIsZSx7cG9pbnRlcnM6aVswXSxjaGFuZ2VkUG9pbnRlcnM6aVsxXSxwb2ludGVyVHlwZTpFdCxzcmNFdmVudDp0fSl9fSk7dmFyIHJlPTI1MDAsYWU9MjU7dShxLEMse2hhbmRsZXI6ZnVuY3Rpb24odCxlLGkpe3ZhciBvPWkucG9pbnRlclR5cGU9PUV0LG49aS5wb2ludGVyVHlwZT09UHQ7aWYoIShuJiZpLnNvdXJjZUNhcGFiaWxpdGllcyYmaS5zb3VyY2VDYXBhYmlsaXRpZXMuZmlyZXNUb3VjaEV2ZW50cykpe2lmKG8pWC5jYWxsKHRoaXMsZSxpKTtlbHNlIGlmKG4mJksuY2FsbCh0aGlzLGkpKXJldHVybjt0aGlzLmNhbGxiYWNrKHQsZSxpKX19LGRlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLnRvdWNoLmRlc3Ryb3koKSx0aGlzLm1vdXNlLmRlc3Ryb3koKX19KTt2YXIgaGU9TyhndC5zdHlsZSwidG91Y2hBY3Rpb24iKSxkZT1oZSE9PWEsbGU9ImNvbXB1dGUiLGNlPSJhdXRvIix1ZT0ibWFuaXB1bGF0aW9uIixwZT0ibm9uZSIsZmU9InBhbi14IixtZT0icGFuLXkiLHZlPSQoKTtKLnByb3RvdHlwZT17c2V0OmZ1bmN0aW9uKHQpe3Q9PWxlJiYodD10aGlzLmNvbXB1dGUoKSksZGUmJnRoaXMubWFuYWdlci5lbGVtZW50LnN0eWxlJiZ2ZVt0XSYmKHRoaXMubWFuYWdlci5lbGVtZW50LnN0eWxlW2hlXT10KSx0aGlzLmFjdGlvbnM9dC50b0xvd2VyQ2FzZSgpLnRyaW0oKX0sdXBkYXRlOmZ1bmN0aW9uKCl7dGhpcy5zZXQodGhpcy5tYW5hZ2VyLm9wdGlvbnMudG91Y2hBY3Rpb24pfSxjb21wdXRlOmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIGwodGhpcy5tYW5hZ2VyLnJlY29nbml6ZXJzLGZ1bmN0aW9uKGUpe2YoZS5vcHRpb25zLmVuYWJsZSxbZV0pJiYodD10LmNvbmNhdChlLmdldFRvdWNoQWN0aW9uKCkpKX0pLFEodC5qb2luKCIgIikpfSxwcmV2ZW50RGVmYXVsdHM6ZnVuY3Rpb24odCl7dmFyIGU9dC5zcmNFdmVudCxpPXQub2Zmc2V0RGlyZWN0aW9uO2lmKHRoaXMubWFuYWdlci5zZXNzaW9uLnByZXZlbnRlZClyZXR1cm4gdm9pZCBlLnByZXZlbnREZWZhdWx0KCk7dmFyIG89dGhpcy5hY3Rpb25zLG49YihvLHBlKSYmIXZlW3BlXSxzPWIobyxtZSkmJiF2ZVttZV0scj1iKG8sZmUpJiYhdmVbZmVdO2lmKG4pe3ZhciBhPTE9PT10LnBvaW50ZXJzLmxlbmd0aCxoPXQuZGlzdGFuY2U8MixkPXQuZGVsdGFUaW1lPDI1MDtpZihhJiZoJiZkKXJldHVybn1yZXR1cm4gciYmcz92b2lkIDA6bnx8cyYmaSZZdHx8ciYmaSZHdD90aGlzLnByZXZlbnRTcmMoZSk6dm9pZCAwfSxwcmV2ZW50U3JjOmZ1bmN0aW9uKHQpe3RoaXMubWFuYWdlci5zZXNzaW9uLnByZXZlbnRlZD0hMCx0LnByZXZlbnREZWZhdWx0KCl9fTt2YXIgZ2U9MSx5ZT0yLGJlPTQsX2U9OCx3ZT1fZSx4ZT0xNixrZT0zMjt0dC5wcm90b3R5cGU9e2RlZmF1bHRzOnt9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gbXQodGhpcy5vcHRpb25zLHQpLHRoaXMubWFuYWdlciYmdGhpcy5tYW5hZ2VyLnRvdWNoQWN0aW9uLnVwZGF0ZSgpLHRoaXN9LHJlY29nbml6ZVdpdGg6ZnVuY3Rpb24odCl7aWYoZCh0LCJyZWNvZ25pemVXaXRoIix0aGlzKSlyZXR1cm4gdGhpczt2YXIgZT10aGlzLnNpbXVsdGFuZW91cztyZXR1cm4gdD1vdCh0LHRoaXMpLGVbdC5pZF18fChlW3QuaWRdPXQsdC5yZWNvZ25pemVXaXRoKHRoaXMpKSx0aGlzfSxkcm9wUmVjb2duaXplV2l0aDpmdW5jdGlvbih0KXtyZXR1cm4gZCh0LCJkcm9wUmVjb2duaXplV2l0aCIsdGhpcyk/dGhpczoodD1vdCh0LHRoaXMpLGRlbGV0ZSB0aGlzLnNpbXVsdGFuZW91c1t0LmlkXSx0aGlzKX0scmVxdWlyZUZhaWx1cmU6ZnVuY3Rpb24odCl7aWYoZCh0LCJyZXF1aXJlRmFpbHVyZSIsdGhpcykpcmV0dXJuIHRoaXM7dmFyIGU9dGhpcy5yZXF1aXJlRmFpbDtyZXR1cm4gdD1vdCh0LHRoaXMpLHcoZSx0KT09PS0xJiYoZS5wdXNoKHQpLHQucmVxdWlyZUZhaWx1cmUodGhpcykpLHRoaXN9LGRyb3BSZXF1aXJlRmFpbHVyZTpmdW5jdGlvbih0KXtpZihkKHQsImRyb3BSZXF1aXJlRmFpbHVyZSIsdGhpcykpcmV0dXJuIHRoaXM7dD1vdCh0LHRoaXMpO3ZhciBlPXcodGhpcy5yZXF1aXJlRmFpbCx0KTtyZXR1cm4gZT4tMSYmdGhpcy5yZXF1aXJlRmFpbC5zcGxpY2UoZSwxKSx0aGlzfSxoYXNSZXF1aXJlRmFpbHVyZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZXF1aXJlRmFpbC5sZW5ndGg+MH0sY2FuUmVjb2duaXplV2l0aDpmdW5jdGlvbih0KXtyZXR1cm4hIXRoaXMuc2ltdWx0YW5lb3VzW3QuaWRdfSxlbWl0OmZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7aS5tYW5hZ2VyLmVtaXQoZSx0KX12YXIgaT10aGlzLG89dGhpcy5zdGF0ZTtvPF9lJiZlKGkub3B0aW9ucy5ldmVudCtldChvKSksZShpLm9wdGlvbnMuZXZlbnQpLHQuYWRkaXRpb25hbEV2ZW50JiZlKHQuYWRkaXRpb25hbEV2ZW50KSxvPj1fZSYmZShpLm9wdGlvbnMuZXZlbnQrZXQobykpfSx0cnlFbWl0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNhbkVtaXQoKT90aGlzLmVtaXQodCk6dm9pZCh0aGlzLnN0YXRlPWtlKX0sY2FuRW1pdDpmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8dGhpcy5yZXF1aXJlRmFpbC5sZW5ndGg7KXtpZighKHRoaXMucmVxdWlyZUZhaWxbdF0uc3RhdGUmKGtlfGdlKSkpcmV0dXJuITE7dCsrfXJldHVybiEwfSxyZWNvZ25pemU6ZnVuY3Rpb24odCl7dmFyIGU9bXQoe30sdCk7cmV0dXJuIGYodGhpcy5vcHRpb25zLmVuYWJsZSxbdGhpcyxlXSk/KHRoaXMuc3RhdGUmKHdlfHhlfGtlKSYmKHRoaXMuc3RhdGU9Z2UpLHRoaXMuc3RhdGU9dGhpcy5wcm9jZXNzKGUpLHZvaWQodGhpcy5zdGF0ZSYoeWV8YmV8X2V8eGUpJiZ0aGlzLnRyeUVtaXQoZSkpKToodGhpcy5yZXNldCgpLHZvaWQodGhpcy5zdGF0ZT1rZSkpfSxwcm9jZXNzOmZ1bmN0aW9uKHQpe30sZ2V0VG91Y2hBY3Rpb246ZnVuY3Rpb24oKXt9LHJlc2V0OmZ1bmN0aW9uKCl7fX0sdShudCx0dCx7ZGVmYXVsdHM6e3BvaW50ZXJzOjF9LGF0dHJUZXN0OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMub3B0aW9ucy5wb2ludGVycztyZXR1cm4gMD09PWV8fHQucG9pbnRlcnMubGVuZ3RoPT09ZX0scHJvY2VzczpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnN0YXRlLGk9dC5ldmVudFR5cGUsbz1lJih5ZXxiZSksbj10aGlzLmF0dHJUZXN0KHQpO3JldHVybiBvJiYoaSZBdHx8IW4pP2V8eGU6b3x8bj9pJnp0P2V8X2U6ZSZ5ZT9lfGJlOnllOmtlfX0pLHUoc3QsbnQse2RlZmF1bHRzOntldmVudDoicGFuIix0aHJlc2hvbGQ6MTAscG9pbnRlcnM6MSxkaXJlY3Rpb246VnR9LGdldFRvdWNoQWN0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zLmRpcmVjdGlvbixlPVtdO3JldHVybiB0Jll0JiZlLnB1c2gobWUpLHQmR3QmJmUucHVzaChmZSksZX0sZGlyZWN0aW9uVGVzdDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLm9wdGlvbnMsaT0hMCxvPXQuZGlzdGFuY2Usbj10LmRpcmVjdGlvbixzPXQuZGVsdGFYLHI9dC5kZWx0YVk7cmV0dXJuIG4mZS5kaXJlY3Rpb258fChlLmRpcmVjdGlvbiZZdD8obj0wPT09cz9CdDpzPDA/anQ6RnQsaT1zIT10aGlzLnBYLG89TWF0aC5hYnModC5kZWx0YVgpKToobj0wPT09cj9CdDpyPDA/SHQ6V3QsaT1yIT10aGlzLnBZLG89TWF0aC5hYnModC5kZWx0YVkpKSksdC5kaXJlY3Rpb249bixpJiZvPmUudGhyZXNob2xkJiZuJmUuZGlyZWN0aW9ufSxhdHRyVGVzdDpmdW5jdGlvbih0KXtyZXR1cm4gbnQucHJvdG90eXBlLmF0dHJUZXN0LmNhbGwodGhpcyx0KSYmKHRoaXMuc3RhdGUmeWV8fCEodGhpcy5zdGF0ZSZ5ZSkmJnRoaXMuZGlyZWN0aW9uVGVzdCh0KSl9LGVtaXQ6ZnVuY3Rpb24odCl7dGhpcy5wWD10LmRlbHRhWCx0aGlzLnBZPXQuZGVsdGFZO3ZhciBlPWl0KHQuZGlyZWN0aW9uKTtlJiYodC5hZGRpdGlvbmFsRXZlbnQ9dGhpcy5vcHRpb25zLmV2ZW50K2UpLHRoaXMuX3N1cGVyLmVtaXQuY2FsbCh0aGlzLHQpfX0pLHUocnQsbnQse2RlZmF1bHRzOntldmVudDoicGluY2giLHRocmVzaG9sZDowLHBvaW50ZXJzOjJ9LGdldFRvdWNoQWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuW3BlXX0sYXR0clRlc3Q6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3N1cGVyLmF0dHJUZXN0LmNhbGwodGhpcyx0KSYmKE1hdGguYWJzKHQuc2NhbGUtMSk+dGhpcy5vcHRpb25zLnRocmVzaG9sZHx8dGhpcy5zdGF0ZSZ5ZSl9LGVtaXQ6ZnVuY3Rpb24odCl7aWYoMSE9PXQuc2NhbGUpe3ZhciBlPXQuc2NhbGU8MT8iaW4iOiJvdXQiO3QuYWRkaXRpb25hbEV2ZW50PXRoaXMub3B0aW9ucy5ldmVudCtlfXRoaXMuX3N1cGVyLmVtaXQuY2FsbCh0aGlzLHQpfX0pLHUoYXQsdHQse2RlZmF1bHRzOntldmVudDoicHJlc3MiLHBvaW50ZXJzOjEsdGltZToyNTEsdGhyZXNob2xkOjl9LGdldFRvdWNoQWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuW2NlXX0scHJvY2VzczpmdW5jdGlvbih0KXt2YXIgZT10aGlzLm9wdGlvbnMsaT10LnBvaW50ZXJzLmxlbmd0aD09PWUucG9pbnRlcnMsbz10LmRpc3RhbmNlPGUudGhyZXNob2xkLG49dC5kZWx0YVRpbWU+ZS50aW1lO2lmKHRoaXMuX2lucHV0PXQsIW98fCFpfHx0LmV2ZW50VHlwZSYoenR8QXQpJiYhbil0aGlzLnJlc2V0KCk7ZWxzZSBpZih0LmV2ZW50VHlwZSZSdCl0aGlzLnJlc2V0KCksdGhpcy5fdGltZXI9aChmdW5jdGlvbigpe3RoaXMuc3RhdGU9d2UsdGhpcy50cnlFbWl0KCl9LGUudGltZSx0aGlzKTtlbHNlIGlmKHQuZXZlbnRUeXBlJnp0KXJldHVybiB3ZTtyZXR1cm4ga2V9LHJlc2V0OmZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKX0sZW1pdDpmdW5jdGlvbih0KXt0aGlzLnN0YXRlPT09d2UmJih0JiZ0LmV2ZW50VHlwZSZ6dD90aGlzLm1hbmFnZXIuZW1pdCh0aGlzLm9wdGlvbnMuZXZlbnQrInVwIix0KToodGhpcy5faW5wdXQudGltZVN0YW1wPXd0KCksdGhpcy5tYW5hZ2VyLmVtaXQodGhpcy5vcHRpb25zLmV2ZW50LHRoaXMuX2lucHV0KSkpfX0pLHUoaHQsbnQse2RlZmF1bHRzOntldmVudDoicm90YXRlIix0aHJlc2hvbGQ6MCxwb2ludGVyczoyfSxnZXRUb3VjaEFjdGlvbjpmdW5jdGlvbigpe3JldHVybltwZV19LGF0dHJUZXN0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9zdXBlci5hdHRyVGVzdC5jYWxsKHRoaXMsdCkmJihNYXRoLmFicyh0LnJvdGF0aW9uKT50aGlzLm9wdGlvbnMudGhyZXNob2xkfHx0aGlzLnN0YXRlJnllKX19KSx1KGR0LG50LHtkZWZhdWx0czp7ZXZlbnQ6InN3aXBlIix0aHJlc2hvbGQ6MTAsdmVsb2NpdHk6LjMsZGlyZWN0aW9uOll0fEd0LHBvaW50ZXJzOjF9LGdldFRvdWNoQWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHN0LnByb3RvdHlwZS5nZXRUb3VjaEFjdGlvbi5jYWxsKHRoaXMpfSxhdHRyVGVzdDpmdW5jdGlvbih0KXt2YXIgZSxpPXRoaXMub3B0aW9ucy5kaXJlY3Rpb247cmV0dXJuIGkmKFl0fEd0KT9lPXQub3ZlcmFsbFZlbG9jaXR5OmkmWXQ/ZT10Lm92ZXJhbGxWZWxvY2l0eVg6aSZHdCYmKGU9dC5vdmVyYWxsVmVsb2NpdHlZKSx0aGlzLl9zdXBlci5hdHRyVGVzdC5jYWxsKHRoaXMsdCkmJmkmdC5vZmZzZXREaXJlY3Rpb24mJnQuZGlzdGFuY2U+dGhpcy5vcHRpb25zLnRocmVzaG9sZCYmdC5tYXhQb2ludGVycz09dGhpcy5vcHRpb25zLnBvaW50ZXJzJiZfdChlKT50aGlzLm9wdGlvbnMudmVsb2NpdHkmJnQuZXZlbnRUeXBlJnp0fSxlbWl0OmZ1bmN0aW9uKHQpe3ZhciBlPWl0KHQub2Zmc2V0RGlyZWN0aW9uKTtlJiZ0aGlzLm1hbmFnZXIuZW1pdCh0aGlzLm9wdGlvbnMuZXZlbnQrZSx0KSx0aGlzLm1hbmFnZXIuZW1pdCh0aGlzLm9wdGlvbnMuZXZlbnQsdCl9fSksdShsdCx0dCx7ZGVmYXVsdHM6e2V2ZW50OiJ0YXAiLHBvaW50ZXJzOjEsdGFwczoxLGludGVydmFsOjMwMCx0aW1lOjI1MCx0aHJlc2hvbGQ6OSxwb3NUaHJlc2hvbGQ6MTB9LGdldFRvdWNoQWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuW3VlXX0scHJvY2VzczpmdW5jdGlvbih0KXt2YXIgZT10aGlzLm9wdGlvbnMsaT10LnBvaW50ZXJzLmxlbmd0aD09PWUucG9pbnRlcnMsbz10LmRpc3RhbmNlPGUudGhyZXNob2xkLG49dC5kZWx0YVRpbWU8ZS50aW1lO2lmKHRoaXMucmVzZXQoKSx0LmV2ZW50VHlwZSZSdCYmMD09PXRoaXMuY291bnQpcmV0dXJuIHRoaXMuZmFpbFRpbWVvdXQoKTtpZihvJiZuJiZpKXtpZih0LmV2ZW50VHlwZSE9enQpcmV0dXJuIHRoaXMuZmFpbFRpbWVvdXQoKTt2YXIgcz0hdGhpcy5wVGltZXx8dC50aW1lU3RhbXAtdGhpcy5wVGltZTxlLmludGVydmFsLHI9IXRoaXMucENlbnRlcnx8QSh0aGlzLnBDZW50ZXIsdC5jZW50ZXIpPGUucG9zVGhyZXNob2xkO3RoaXMucFRpbWU9dC50aW1lU3RhbXAsdGhpcy5wQ2VudGVyPXQuY2VudGVyLHImJnM/dGhpcy5jb3VudCs9MTp0aGlzLmNvdW50PTEsdGhpcy5faW5wdXQ9dDt2YXIgYT10aGlzLmNvdW50JWUudGFwcztpZigwPT09YSlyZXR1cm4gdGhpcy5oYXNSZXF1aXJlRmFpbHVyZXMoKT8odGhpcy5fdGltZXI9aChmdW5jdGlvbigpe3RoaXMuc3RhdGU9d2UsdGhpcy50cnlFbWl0KCl9LGUuaW50ZXJ2YWwsdGhpcykseWUpOndlfXJldHVybiBrZX0sZmFpbFRpbWVvdXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdGltZXI9aChmdW5jdGlvbigpe3RoaXMuc3RhdGU9a2V9LHRoaXMub3B0aW9ucy5pbnRlcnZhbCx0aGlzKSxrZX0scmVzZXQ6ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodGhpcy5fdGltZXIpfSxlbWl0OmZ1bmN0aW9uKCl7dGhpcy5zdGF0ZT09d2UmJih0aGlzLl9pbnB1dC50YXBDb3VudD10aGlzLmNvdW50LHRoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCx0aGlzLl9pbnB1dCkpfX0pLGN0LlZFUlNJT049IjIuMC43IixjdC5kZWZhdWx0cz17ZG9tRXZlbnRzOiExLHRvdWNoQWN0aW9uOmxlLGVuYWJsZTohMCxpbnB1dFRhcmdldDpudWxsLGlucHV0Q2xhc3M6bnVsbCxwcmVzZXQ6W1todCx7ZW5hYmxlOiExfV0sW3J0LHtlbmFibGU6ITF9LFsicm90YXRlIl1dLFtkdCx7ZGlyZWN0aW9uOll0fV0sW3N0LHtkaXJlY3Rpb246WXR9LFsic3dpcGUiXV0sW2x0XSxbbHQse2V2ZW50OiJkb3VibGV0YXAiLHRhcHM6Mn0sWyJ0YXAiXV0sW2F0XV0sY3NzUHJvcHM6e3VzZXJTZWxlY3Q6Im5vbmUiLHRvdWNoU2VsZWN0OiJub25lIix0b3VjaENhbGxvdXQ6Im5vbmUiLGNvbnRlbnRab29taW5nOiJub25lIix1c2VyRHJhZzoibm9uZSIsdGFwSGlnaGxpZ2h0Q29sb3I6InJnYmEoMCwwLDAsMCkifX07dmFyIE9lPTEsRGU9Mjt1dC5wcm90b3R5cGU9e3NldDpmdW5jdGlvbih0KXtyZXR1cm4gbXQodGhpcy5vcHRpb25zLHQpLHQudG91Y2hBY3Rpb24mJnRoaXMudG91Y2hBY3Rpb24udXBkYXRlKCksdC5pbnB1dFRhcmdldCYmKHRoaXMuaW5wdXQuZGVzdHJveSgpLHRoaXMuaW5wdXQudGFyZ2V0PXQuaW5wdXRUYXJnZXQsdGhpcy5pbnB1dC5pbml0KCkpLHRoaXN9LHN0b3A6ZnVuY3Rpb24odCl7dGhpcy5zZXNzaW9uLnN0b3BwZWQ9dD9EZTpPZX0scmVjb2duaXplOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc2Vzc2lvbjtpZighZS5zdG9wcGVkKXt0aGlzLnRvdWNoQWN0aW9uLnByZXZlbnREZWZhdWx0cyh0KTt2YXIgaSxvPXRoaXMucmVjb2duaXplcnMsbj1lLmN1clJlY29nbml6ZXI7KCFufHxuJiZuLnN0YXRlJndlKSYmKG49ZS5jdXJSZWNvZ25pemVyPW51bGwpO2Zvcih2YXIgcz0wO3M8by5sZW5ndGg7KWk9b1tzXSxlLnN0b3BwZWQ9PT1EZXx8biYmaSE9biYmIWkuY2FuUmVjb2duaXplV2l0aChuKT9pLnJlc2V0KCk6aS5yZWNvZ25pemUodCksIW4mJmkuc3RhdGUmKHllfGJlfF9lKSYmKG49ZS5jdXJSZWNvZ25pemVyPWkpLHMrK319LGdldDpmdW5jdGlvbih0KXtpZih0IGluc3RhbmNlb2YgdHQpcmV0dXJuIHQ7Zm9yKHZhciBlPXRoaXMucmVjb2duaXplcnMsaT0wO2k8ZS5sZW5ndGg7aSsrKWlmKGVbaV0ub3B0aW9ucy5ldmVudD09dClyZXR1cm4gZVtpXTtyZXR1cm4gbnVsbH0sYWRkOmZ1bmN0aW9uKHQpe2lmKGQodCwiYWRkIix0aGlzKSlyZXR1cm4gdGhpczt2YXIgZT10aGlzLmdldCh0Lm9wdGlvbnMuZXZlbnQpO3JldHVybiBlJiZ0aGlzLnJlbW92ZShlKSx0aGlzLnJlY29nbml6ZXJzLnB1c2godCksdC5tYW5hZ2VyPXRoaXMsdGhpcy50b3VjaEFjdGlvbi51cGRhdGUoKSx0fSxyZW1vdmU6ZnVuY3Rpb24odCl7aWYoZCh0LCJyZW1vdmUiLHRoaXMpKXJldHVybiB0aGlzO2lmKHQ9dGhpcy5nZXQodCkpe3ZhciBlPXRoaXMucmVjb2duaXplcnMsaT13KGUsdCk7aSE9PS0xJiYoZS5zcGxpY2UoaSwxKSx0aGlzLnRvdWNoQWN0aW9uLnVwZGF0ZSgpKX1yZXR1cm4gdGhpc30sb246ZnVuY3Rpb24odCxlKXtpZih0IT09YSYmZSE9PWEpe3ZhciBpPXRoaXMuaGFuZGxlcnM7cmV0dXJuIGwoXyh0KSxmdW5jdGlvbih0KXtpW3RdPWlbdF18fFtdLGlbdF0ucHVzaChlKX0pLHRoaXN9fSxvZmY6ZnVuY3Rpb24odCxlKXtpZih0IT09YSl7dmFyIGk9dGhpcy5oYW5kbGVycztyZXR1cm4gbChfKHQpLGZ1bmN0aW9uKHQpe2U/aVt0XSYmaVt0XS5zcGxpY2UodyhpW3RdLGUpLDEpOmRlbGV0ZSBpW3RdfSksdGhpc319LGVtaXQ6ZnVuY3Rpb24odCxlKXt0aGlzLm9wdGlvbnMuZG9tRXZlbnRzJiZmdCh0LGUpO3ZhciBpPXRoaXMuaGFuZGxlcnNbdF0mJnRoaXMuaGFuZGxlcnNbdF0uc2xpY2UoKTtpZihpJiZpLmxlbmd0aCl7ZS50eXBlPXQsZS5wcmV2ZW50RGVmYXVsdD1mdW5jdGlvbigpe2Uuc3JjRXZlbnQucHJldmVudERlZmF1bHQoKX07Zm9yKHZhciBvPTA7bzxpLmxlbmd0aDspaVtvXShlKSxvKyt9fSxkZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50JiZwdCh0aGlzLCExKSx0aGlzLmhhbmRsZXJzPXt9LHRoaXMuc2Vzc2lvbj17fSx0aGlzLmlucHV0LmRlc3Ryb3koKSx0aGlzLmVsZW1lbnQ9bnVsbH19LG10KGN0LHtJTlBVVF9TVEFSVDpSdCxJTlBVVF9NT1ZFOkx0LElOUFVUX0VORDp6dCxJTlBVVF9DQU5DRUw6QXQsU1RBVEVfUE9TU0lCTEU6Z2UsU1RBVEVfQkVHQU46eWUsU1RBVEVfQ0hBTkdFRDpiZSxTVEFURV9FTkRFRDpfZSxTVEFURV9SRUNPR05JWkVEOndlLFNUQVRFX0NBTkNFTExFRDp4ZSxTVEFURV9GQUlMRUQ6a2UsRElSRUNUSU9OX05PTkU6QnQsRElSRUNUSU9OX0xFRlQ6anQsRElSRUNUSU9OX1JJR0hUOkZ0LERJUkVDVElPTl9VUDpIdCxESVJFQ1RJT05fRE9XTjpXdCxESVJFQ1RJT05fSE9SSVpPTlRBTDpZdCxESVJFQ1RJT05fVkVSVElDQUw6R3QsRElSRUNUSU9OX0FMTDpWdCxNYW5hZ2VyOnV0LElucHV0OkMsVG91Y2hBY3Rpb246SixUb3VjaElucHV0OlYsTW91c2VJbnB1dDpILFBvaW50ZXJFdmVudElucHV0OlcsVG91Y2hNb3VzZUlucHV0OnEsU2luZ2xlVG91Y2hJbnB1dDpZLFJlY29nbml6ZXI6dHQsQXR0clJlY29nbml6ZXI6bnQsVGFwOmx0LFBhbjpzdCxTd2lwZTpkdCxQaW5jaDpydCxSb3RhdGU6aHQsUHJlc3M6YXQsb246dixvZmY6ZyxlYWNoOmwsbWVyZ2U6a3QsZXh0ZW5kOnh0LGFzc2lnbjptdCxpbmhlcml0OnUsYmluZEZuOnAscHJlZml4ZWQ6T30pO3ZhciBTZT0idW5kZWZpbmVkIiE9dHlwZW9mIG4/bjoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjp7fTtTZS5IYW1tZXI9Y3Qsbz1mdW5jdGlvbigpe3JldHVybiBjdH0uY2FsbChlLGksZSx0KSwhKG8hPT1hJiYodC5leHBvcnRzPW8pKX0od2luZG93LGRvY3VtZW50LCJIYW1tZXIiKX0sZnVuY3Rpb24odCxlLGkpe3ZhciBvLG4sczshZnVuY3Rpb24oaSxyKXtuPVtdLG89cixzPSJmdW5jdGlvbiI9PXR5cGVvZiBvP28uYXBwbHkoZSxuKTpvLCEodm9pZCAwIT09cyYmKHQuZXhwb3J0cz1zKSl9KHRoaXMsZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZhciBlLGk9dCYmdC5wcmV2ZW50RGVmYXVsdHx8ITEsbz10JiZ0LmNvbnRhaW5lcnx8d2luZG93LG49e30scz17a2V5ZG93bjp7fSxrZXl1cDp7fX0scj17fTtmb3IoZT05NztlPD0xMjI7ZSsrKXJbU3RyaW5nLmZyb21DaGFyQ29kZShlKV09e2NvZGU6NjUrKGUtOTcpLHNoaWZ0OiExfTtmb3IoZT02NTtlPD05MDtlKyspcltTdHJpbmcuZnJvbUNoYXJDb2RlKGUpXT17Y29kZTplLHNoaWZ0OiEwfTtmb3IoZT0wO2U8PTk7ZSsrKXJbIiIrZV09e2NvZGU6NDgrZSxzaGlmdDohMX07Zm9yKGU9MTtlPD0xMjtlKyspclsiRiIrZV09e2NvZGU6MTExK2Usc2hpZnQ6ITF9O2ZvcihlPTA7ZTw9OTtlKyspclsibnVtIitlXT17Y29kZTo5NitlLHNoaWZ0OiExfTtyWyJudW0qIl09e2NvZGU6MTA2LHNoaWZ0OiExfSxyWyJudW0rIl09e2NvZGU6MTA3LHNoaWZ0OiExfSxyWyJudW0tIl09e2NvZGU6MTA5LHNoaWZ0OiExfSxyWyJudW0vIl09e2NvZGU6MTExLHNoaWZ0OiExfSxyWyJudW0uIl09e2NvZGU6MTEwLHNoaWZ0OiExfSxyLmxlZnQ9e2NvZGU6Mzcsc2hpZnQ6ITF9LHIudXA9e2NvZGU6Mzgsc2hpZnQ6ITF9LHIucmlnaHQ9e2NvZGU6Mzksc2hpZnQ6ITF9LHIuZG93bj17Y29kZTo0MCxzaGlmdDohMX0sci5zcGFjZT17Y29kZTozMixzaGlmdDohMX0sci5lbnRlcj17Y29kZToxMyxzaGlmdDohMX0sci5zaGlmdD17Y29kZToxNixzaGlmdDp2b2lkIDB9LHIuZXNjPXtjb2RlOjI3LHNoaWZ0OiExfSxyLmJhY2tzcGFjZT17Y29kZTo4LHNoaWZ0OiExfSxyLnRhYj17Y29kZTo5LHNoaWZ0OiExfSxyLmN0cmw9e2NvZGU6MTcsc2hpZnQ6ITF9LHIuYWx0PXtjb2RlOjE4LHNoaWZ0OiExfSxyLmRlbGV0ZT17Y29kZTo0NixzaGlmdDohMX0sci5wYWdldXA9e2NvZGU6MzMsc2hpZnQ6ITF9LHIucGFnZWRvd249e2NvZGU6MzQsc2hpZnQ6ITF9LHJbIj0iXT17Y29kZToxODcsc2hpZnQ6ITF9LHJbIi0iXT17Y29kZToxODksc2hpZnQ6ITF9LHJbIl0iXT17Y29kZToyMjEsc2hpZnQ6ITF9LHJbIlsiXT17Y29kZToyMTksc2hpZnQ6ITF9O3ZhciBhPWZ1bmN0aW9uKHQpe2QodCwia2V5ZG93biIpfSxoPWZ1bmN0aW9uKHQpe2QodCwia2V5dXAiKX0sZD1mdW5jdGlvbih0LGUpe2lmKHZvaWQgMCE9PXNbZV1bdC5rZXlDb2RlXSl7Zm9yKHZhciBvPXNbZV1bdC5rZXlDb2RlXSxuPTA7bjxvLmxlbmd0aDtuKyspdm9pZCAwPT09b1tuXS5zaGlmdD9vW25dLmZuKHQpOjE9PW9bbl0uc2hpZnQmJjE9PXQuc2hpZnRLZXk/b1tuXS5mbih0KTowPT1vW25dLnNoaWZ0JiYwPT10LnNoaWZ0S2V5JiZvW25dLmZuKHQpOzE9PWkmJnQucHJldmVudERlZmF1bHQoKX19O3JldHVybiBuLmJpbmQ9ZnVuY3Rpb24odCxlLGkpe2lmKHZvaWQgMD09PWkmJihpPSJrZXlkb3duIiksdm9pZCAwPT09clt0XSl0aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIGtleTogIit0KTt2b2lkIDA9PT1zW2ldW3JbdF0uY29kZV0mJihzW2ldW3JbdF0uY29kZV09W10pLHNbaV1bclt0XS5jb2RlXS5wdXNoKHtmbjplLHNoaWZ0OnJbdF0uc2hpZnR9KX0sbi5iaW5kQWxsPWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9ImtleWRvd24iKTtmb3IodmFyIGkgaW4gcilyLmhhc093blByb3BlcnR5KGkpJiZuLmJpbmQoaSx0LGUpfSxuLmdldEtleT1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gcilpZihyLmhhc093blByb3BlcnR5KGUpKXtpZigxPT10LnNoaWZ0S2V5JiYxPT1yW2VdLnNoaWZ0JiZ0LmtleUNvZGU9PXJbZV0uY29kZSlyZXR1cm4gZTtpZigwPT10LnNoaWZ0S2V5JiYwPT1yW2VdLnNoaWZ0JiZ0LmtleUNvZGU9PXJbZV0uY29kZSlyZXR1cm4gZTtpZih0LmtleUNvZGU9PXJbZV0uY29kZSYmInNoaWZ0Ij09ZSlyZXR1cm4gZX1yZXR1cm4idW5rbm93biBrZXksIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkIn0sbi51bmJpbmQ9ZnVuY3Rpb24odCxlLGkpe2lmKHZvaWQgMD09PWkmJihpPSJrZXlkb3duIiksdm9pZCAwPT09clt0XSl0aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIGtleTogIit0KTtpZih2b2lkIDAhPT1lKXt2YXIgbz1bXSxuPXNbaV1bclt0XS5jb2RlXTtpZih2b2lkIDAhPT1uKWZvcih2YXIgYT0wO2E8bi5sZW5ndGg7YSsrKW5bYV0uZm49PWUmJm5bYV0uc2hpZnQ9PXJbdF0uc2hpZnR8fG8ucHVzaChzW2ldW3JbdF0uY29kZV1bYV0pO3NbaV1bclt0XS5jb2RlXT1vfWVsc2Ugc1tpXVtyW3RdLmNvZGVdPVtdfSxuLnJlc2V0PWZ1bmN0aW9uKCl7cz17a2V5ZG93bjp7fSxrZXl1cDp7fX19LG4uZGVzdHJveT1mdW5jdGlvbigpe3M9e2tleWRvd246e30sa2V5dXA6e319LG8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsYSwhMCksby5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXl1cCIsaCwhMCl9LG8uYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsYSwhMCksby5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsaCwhMCksbn1yZXR1cm4gdH0pfSxmdW5jdGlvbih0LGUsaSl7ZS51dGlsPWkoMSksZS5ET011dGlsPWkoOCksZS5EYXRhU2V0PWkoOSksZS5EYXRhVmlldz1pKDExKSxlLlF1ZXVlPWkoMTApLGUuVGltZWxpbmU9aSgyNyksZS5HcmFwaDJkPWkoNTIpLGUudGltZWxpbmU9e0NvcmU6aSgzNSksRGF0ZVV0aWw6aSgzNCksUmFuZ2U6aSgzMiksc3RhY2s6aSgzOSksVGltZVN0ZXA6aSgzNyksY29tcG9uZW50czp7aXRlbXM6e0l0ZW06aSg0MSksQmFja2dyb3VuZEl0ZW06aSg0NSksQm94SXRlbTppKDQzKSxQb2ludEl0ZW06aSg0NCksUmFuZ2VJdGVtOmkoNDApfSxCYWNrZ3JvdW5kR3JvdXA6aSg0MiksQ29tcG9uZW50OmkoMzMpLEN1cnJlbnRUaW1lOmkoNTApLEN1c3RvbVRpbWU6aSg0OCksRGF0YUF4aXM6aSg1NCksRGF0YVNjYWxlOmkoNTUpLEdyYXBoR3JvdXA6aSg1NiksR3JvdXA6aSgzOCksSXRlbVNldDppKDM2KSxMZWdlbmQ6aSg2MCksTGluZUdyYXBoOmkoNTMpLFRpbWVBeGlzOmkoNDYpfX0sZS5tb21lbnQ9aSgyKSxlLkhhbW1lcj1pKDIyKSxlLmtleWNoYXJtPWkoMjUpfSxmdW5jdGlvbih0LGUsaSl7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdCYmdC5fX2VzTW9kdWxlP3Q6e2RlZmF1bHQ6dH19ZnVuY3Rpb24gbih0LGUsaSxvKXtpZighKHRoaXMgaW5zdGFuY2VvZiBuKSl0aHJvdyBuZXcgU3ludGF4RXJyb3IoIkNvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvciIpO2lmKCEoQXJyYXkuaXNBcnJheShpKXx8aSBpbnN0YW5jZW9mIGN8fGkgaW5zdGFuY2VvZiB1KSYmaSBpbnN0YW5jZW9mIE9iamVjdCl7dmFyIHM9bztvPWksaT1zfXZhciByPXRoaXM7aWYodGhpcy5kZWZhdWx0T3B0aW9ucz17c3RhcnQ6bnVsbCxlbmQ6bnVsbCxhdXRvUmVzaXplOiEwLG9yaWVudGF0aW9uOntheGlzOiJib3R0b20iLGl0ZW06ImJvdHRvbSJ9LG1vbWVudDpkLHdpZHRoOm51bGwsaGVpZ2h0Om51bGwsbWF4SGVpZ2h0Om51bGwsbWluSGVpZ2h0Om51bGx9LHRoaXMub3B0aW9ucz1sLmRlZXBFeHRlbmQoe30sdGhpcy5kZWZhdWx0T3B0aW9ucyksdGhpcy5fY3JlYXRlKHQpLCFvfHxvJiYidW5kZWZpbmVkIj09dHlwZW9mIG8ucnRsKXtmb3IodmFyIGEsaD10aGlzLmRvbS5yb290OyFhJiZoOylhPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGgsbnVsbCkuZGlyZWN0aW9uLGg9aC5wYXJlbnRFbGVtZW50O3RoaXMub3B0aW9ucy5ydGw9YSYmInJ0bCI9PWEudG9Mb3dlckNhc2UoKX1lbHNlIHRoaXMub3B0aW9ucy5ydGw9by5ydGw7dGhpcy5jb21wb25lbnRzPVtdLHRoaXMuYm9keT17ZG9tOnRoaXMuZG9tLGRvbVByb3BzOnRoaXMucHJvcHMsZW1pdHRlcjp7b246dGhpcy5vbi5iaW5kKHRoaXMpLG9mZjp0aGlzLm9mZi5iaW5kKHRoaXMpLGVtaXQ6dGhpcy5lbWl0LmJpbmQodGhpcyl9LGhpZGRlbkRhdGVzOltdLHV0aWw6e2dldFNjYWxlOmZ1bmN0aW9uKCl7cmV0dXJuIHIudGltZUF4aXMuc3RlcC5zY2FsZX0sZ2V0U3RlcDpmdW5jdGlvbigpe3JldHVybiByLnRpbWVBeGlzLnN0ZXAuc3RlcH0sdG9TY3JlZW46ci5fdG9TY3JlZW4uYmluZChyKSx0b0dsb2JhbFNjcmVlbjpyLl90b0dsb2JhbFNjcmVlbi5iaW5kKHIpLHRvVGltZTpyLl90b1RpbWUuYmluZChyKSx0b0dsb2JhbFRpbWU6ci5fdG9HbG9iYWxUaW1lLmJpbmQocil9fSx0aGlzLnJhbmdlPW5ldyBwKHRoaXMuYm9keSx0aGlzLm9wdGlvbnMpLHRoaXMuY29tcG9uZW50cy5wdXNoKHRoaXMucmFuZ2UpLHRoaXMuYm9keS5yYW5nZT10aGlzLnJhbmdlLHRoaXMudGltZUF4aXM9bmV3IG0odGhpcy5ib2R5LHRoaXMub3B0aW9ucyksdGhpcy50aW1lQXhpczI9bnVsbCx0aGlzLmNvbXBvbmVudHMucHVzaCh0aGlzLnRpbWVBeGlzKSx0aGlzLmN1cnJlbnRUaW1lPW5ldyB2KHRoaXMuYm9keSx0aGlzLm9wdGlvbnMpLHRoaXMuY29tcG9uZW50cy5wdXNoKHRoaXMuY3VycmVudFRpbWUpLHRoaXMuaXRlbVNldD1uZXcgeSh0aGlzLmJvZHksdGhpcy5vcHRpb25zKSx0aGlzLmNvbXBvbmVudHMucHVzaCh0aGlzLml0ZW1TZXQpLHRoaXMuaXRlbXNEYXRhPW51bGwsdGhpcy5ncm91cHNEYXRhPW51bGwsdGhpcy5vbigidGFwIixmdW5jdGlvbih0KXtyLmVtaXQoImNsaWNrIixyLmdldEV2ZW50UHJvcGVydGllcyh0KSl9KSx0aGlzLm9uKCJkb3VibGV0YXAiLGZ1bmN0aW9uKHQpe3IuZW1pdCgiZG91YmxlQ2xpY2siLHIuZ2V0RXZlbnRQcm9wZXJ0aWVzKHQpKX0pLHRoaXMuZG9tLnJvb3Qub25jb250ZXh0bWVudT1mdW5jdGlvbih0KXtyLmVtaXQoImNvbnRleHRtZW51IixyLmdldEV2ZW50UHJvcGVydGllcyh0KSl9LHRoaXMuZml0RG9uZT0hMSx0aGlzLm9uKCJjaGFuZ2VkIixmdW5jdGlvbigpe2lmKG51bGwhPXRoaXMuaXRlbXNEYXRhJiYhci5maXREb25lKWlmKHIuZml0RG9uZT0hMCx2b2lkIDAhPXIub3B0aW9ucy5zdGFydHx8dm9pZCAwIT1yLm9wdGlvbnMuZW5kKXtpZih2b2lkIDA9PXIub3B0aW9ucy5zdGFydHx8dm9pZCAwPT1yLm9wdGlvbnMuZW5kKXZhciB0PXIuZ2V0SXRlbVJhbmdlKCk7dmFyIGU9dm9pZCAwIT1yLm9wdGlvbnMuc3RhcnQ/ci5vcHRpb25zLnN0YXJ0OnQubWluLGk9dm9pZCAwIT1yLm9wdGlvbnMuZW5kP3Iub3B0aW9ucy5lbmQ6dC5tYXg7ci5zZXRXaW5kb3coZSxpLHthbmltYXRpb246ITF9KX1lbHNlIHIuZml0KHthbmltYXRpb246ITF9KX0pLG8mJnRoaXMuc2V0T3B0aW9ucyhvKSxpJiZ0aGlzLnNldEdyb3VwcyhpKSxlJiZ0aGlzLnNldEl0ZW1zKGUpLHRoaXMuX3JlZHJhdygpfXZhciBzPWkoMjgpLHI9byhzKSxhPWkoMzEpLGg9byhhKSxkPShpKDEzKSxpKDIyKSxpKDIpKSxsPWkoMSksYz1pKDkpLHU9aSgxMSkscD1pKDMyKSxmPWkoMzUpLG09aSg0Niksdj1pKDUwKSxnPWkoNDgpLHk9aSgzNiksYj1pKDMxKS5wcmludFN0eWxlLF89aSg1MSkuYWxsT3B0aW9ucyx3PWkoNTEpLmNvbmZpZ3VyZU9wdGlvbnM7bi5wcm90b3R5cGU9bmV3IGYsbi5wcm90b3R5cGUuX2NyZWF0ZUNvbmZpZ3VyYXRvcj1mdW5jdGlvbigpe3JldHVybiBuZXcgci5kZWZhdWx0KHRoaXMsdGhpcy5kb20uY29udGFpbmVyLHcpfSxuLnByb3RvdHlwZS5yZWRyYXc9ZnVuY3Rpb24oKXt0aGlzLml0ZW1TZXQmJnRoaXMuaXRlbVNldC5tYXJrRGlydHkoe3JlZnJlc2hJdGVtczohMH0pLHRoaXMuX3JlZHJhdygpfSxuLnByb3RvdHlwZS5zZXRPcHRpb25zPWZ1bmN0aW9uKHQpe3ZhciBlPWguZGVmYXVsdC52YWxpZGF0ZSh0LF8pO2lmKGU9PT0hMCYmY29uc29sZS5sb2coIiVjRXJyb3JzIGhhdmUgYmVlbiBmb3VuZCBpbiB0aGUgc3VwcGxpZWQgb3B0aW9ucyBvYmplY3QuIixiKSxmLnByb3RvdHlwZS5zZXRPcHRpb25zLmNhbGwodGhpcyx0KSwidHlwZSJpbiB0JiZ0LnR5cGUhPT10aGlzLm9wdGlvbnMudHlwZSl7dGhpcy5vcHRpb25zLnR5cGU9dC50eXBlO3ZhciBpPXRoaXMuaXRlbXNEYXRhO2lmKGkpe3ZhciBvPXRoaXMuZ2V0U2VsZWN0aW9uKCk7dGhpcy5zZXRJdGVtcyhudWxsKSx0aGlzLnNldEl0ZW1zKGkpLHRoaXMuc2V0U2VsZWN0aW9uKG8pfX19LG4ucHJvdG90eXBlLnNldEl0ZW1zPWZ1bmN0aW9uKHQpe3ZhciBlO2U9dD90IGluc3RhbmNlb2YgY3x8dCBpbnN0YW5jZW9mIHU/dDpuZXcgYyh0LHt0eXBlOntzdGFydDoiRGF0ZSIsZW5kOiJEYXRlIn19KTpudWxsLHRoaXMuaXRlbXNEYXRhPWUsdGhpcy5pdGVtU2V0JiZ0aGlzLml0ZW1TZXQuc2V0SXRlbXMoZSl9LG4ucHJvdG90eXBlLnNldEdyb3Vwcz1mdW5jdGlvbih0KXt2YXIgZTtlPXQ/dCBpbnN0YW5jZW9mIGN8fHQgaW5zdGFuY2VvZiB1P3Q6bmV3IGModCk6bnVsbCx0aGlzLmdyb3Vwc0RhdGE9ZSx0aGlzLml0ZW1TZXQuc2V0R3JvdXBzKGUpfSxuLnByb3RvdHlwZS5zZXREYXRhPWZ1bmN0aW9uKHQpe3QmJnQuZ3JvdXBzJiZ0aGlzLnNldEdyb3Vwcyh0Lmdyb3VwcyksdCYmdC5pdGVtcyYmdGhpcy5zZXRJdGVtcyh0Lml0ZW1zKX0sbi5wcm90b3R5cGUuc2V0U2VsZWN0aW9uPWZ1bmN0aW9uKHQsZSl7dGhpcy5pdGVtU2V0JiZ0aGlzLml0ZW1TZXQuc2V0U2VsZWN0aW9uKHQpLGUmJmUuZm9jdXMmJnRoaXMuZm9jdXModCxlKX0sbi5wcm90b3R5cGUuZ2V0U2VsZWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlbVNldCYmdGhpcy5pdGVtU2V0LmdldFNlbGVjdGlvbigpfHxbXX0sbi5wcm90b3R5cGUuZm9jdXM9ZnVuY3Rpb24odCxlKXtpZih0aGlzLml0ZW1zRGF0YSYmdm9pZCAwIT10KXt2YXIgaT1BcnJheS5pc0FycmF5KHQpP3Q6W3RdLG89dGhpcy5pdGVtc0RhdGEuZ2V0RGF0YVNldCgpLmdldChpLHt0eXBlOntzdGFydDoiRGF0ZSIsZW5kOiJEYXRlIn19KSxuPW51bGwscz1udWxsO2lmKG8uZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10LnN0YXJ0LnZhbHVlT2YoKSxpPSJlbmQiaW4gdD90LmVuZC52YWx1ZU9mKCk6dC5zdGFydC52YWx1ZU9mKCk7KG51bGw9PT1ufHxlPG4pJiYobj1lKSwobnVsbD09PXN8fGk+cykmJihzPWkpfSksbnVsbCE9PW4mJm51bGwhPT1zKXt2YXIgcj0obitzKS8yLGE9TWF0aC5tYXgodGhpcy5yYW5nZS5lbmQtdGhpcy5yYW5nZS5zdGFydCwxLjEqKHMtbikpLGg9IWV8fHZvaWQgMD09PWUuYW5pbWF0aW9ufHxlLmFuaW1hdGlvbjt0aGlzLnJhbmdlLnNldFJhbmdlKHItYS8yLHIrYS8yLGgpfX19LG4ucHJvdG90eXBlLmZpdD1mdW5jdGlvbih0KXt2YXIgZSxpPSF0fHx2b2lkIDA9PT10LmFuaW1hdGlvbnx8dC5hbmltYXRpb24sbz10aGlzLml0ZW1zRGF0YSYmdGhpcy5pdGVtc0RhdGEuZ2V0RGF0YVNldCgpOzE9PT1vLmxlbmd0aCYmdm9pZCAwPT09by5nZXQoKVswXS5lbmQ/KGU9dGhpcy5nZXREYXRhUmFuZ2UoKSx0aGlzLm1vdmVUbyhlLm1pbi52YWx1ZU9mKCkse2FuaW1hdGlvbjppfSkpOihlPXRoaXMuZ2V0SXRlbVJhbmdlKCksdGhpcy5yYW5nZS5zZXRSYW5nZShlLm1pbixlLm1heCxpKSl9LG4ucHJvdG90eXBlLmdldEl0ZW1SYW5nZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10aGlzLmdldERhdGFSYW5nZSgpLGk9bnVsbCE9PWUubWluP2UubWluLnZhbHVlT2YoKTpudWxsLG89bnVsbCE9PWUubWF4P2UubWF4LnZhbHVlT2YoKTpudWxsLG49bnVsbCxzPW51bGw7aWYobnVsbCE9aSYmbnVsbCE9byl7dmFyIHIsYSxoLGQsYzshZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbih0KXtyZXR1cm4gbC5jb252ZXJ0KHQuZGF0YS5zdGFydCwiRGF0ZSIpLnZhbHVlT2YoKX0sdT1mdW5jdGlvbih0KXt2YXIgZT12b2lkIDAhPXQuZGF0YS5lbmQ/dC5kYXRhLmVuZDp0LmRhdGEuc3RhcnQ7cmV0dXJuIGwuY29udmVydChlLCJEYXRlIikudmFsdWVPZigpfTtyPW8taSxyPD0wJiYocj0xMCksYT1yL3QucHJvcHMuY2VudGVyLndpZHRoLGwuZm9yRWFjaCh0Lml0ZW1TZXQuaXRlbXMsZnVuY3Rpb24odCl7dC5zaG93KCksdC5yZXBvc2l0aW9uWCgpO3ZhciByPWUodCksaD11KHQpO2lmKHRoaXMub3B0aW9ucy5ydGwpdmFyIGQ9ci0odC5nZXRXaWR0aFJpZ2h0KCkrMTApKmEsbD1oKyh0LmdldFdpZHRoTGVmdCgpKzEwKSphO2Vsc2UgdmFyIGQ9ci0odC5nZXRXaWR0aExlZnQoKSsxMCkqYSxsPWgrKHQuZ2V0V2lkdGhSaWdodCgpKzEwKSphO2Q8aSYmKGk9ZCxuPXQpLGw+byYmKG89bCxzPXQpfS5iaW5kKHQpKSxuJiZzJiYoaD1uLmdldFdpZHRoTGVmdCgpKzEwLGQ9cy5nZXRXaWR0aFJpZ2h0KCkrMTAsYz10LnByb3BzLmNlbnRlci53aWR0aC1oLWQsYz4wJiYodC5vcHRpb25zLnJ0bD8oaT1lKG4pLWQqci9jLG89dShzKStoKnIvYyk6KGk9ZShuKS1oKnIvYyxvPXUocykrZCpyL2MpKSl9KCl9cmV0dXJue21pbjpudWxsIT1pP25ldyBEYXRlKGkpOm51bGwsbWF4Om51bGwhPW8/bmV3IERhdGUobyk6bnVsbH19LG4ucHJvdG90eXBlLmdldERhdGFSYW5nZT1mdW5jdGlvbigpe3ZhciB0PW51bGwsZT1udWxsLGk9dGhpcy5pdGVtc0RhdGEmJnRoaXMuaXRlbXNEYXRhLmdldERhdGFTZXQoKTtyZXR1cm4gaSYmaS5mb3JFYWNoKGZ1bmN0aW9uKGkpe3ZhciBvPWwuY29udmVydChpLnN0YXJ0LCJEYXRlIikudmFsdWVPZigpLG49bC5jb252ZXJ0KHZvaWQgMCE9aS5lbmQ/aS5lbmQ6aS5zdGFydCwiRGF0ZSIpLnZhbHVlT2YoKTsobnVsbD09PXR8fG88dCkmJih0PW8pLChudWxsPT09ZXx8bj5lKSYmKGU9bil9KSx7bWluOm51bGwhPXQ/bmV3IERhdGUodCk6bnVsbCxtYXg6bnVsbCE9ZT9uZXcgRGF0ZShlKTpudWxsfX0sbi5wcm90b3R5cGUuZ2V0RXZlbnRQcm9wZXJ0aWVzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuY2VudGVyP3QuY2VudGVyLng6dC5jbGllbnRYLGk9dC5jZW50ZXI/dC5jZW50ZXIueTp0LmNsaWVudFk7aWYodGhpcy5vcHRpb25zLnJ0bCl2YXIgbz1sLmdldEFic29sdXRlUmlnaHQodGhpcy5kb20uY2VudGVyQ29udGFpbmVyKS1lO2Vsc2UgdmFyIG89ZS1sLmdldEFic29sdXRlTGVmdCh0aGlzLmRvbS5jZW50ZXJDb250YWluZXIpO3ZhciBuPWktbC5nZXRBYnNvbHV0ZVRvcCh0aGlzLmRvbS5jZW50ZXJDb250YWluZXIpLHM9dGhpcy5pdGVtU2V0Lml0ZW1Gcm9tVGFyZ2V0KHQpLHI9dGhpcy5pdGVtU2V0Lmdyb3VwRnJvbVRhcmdldCh0KSxhPWcuY3VzdG9tVGltZUZyb21UYXJnZXQodCksaD10aGlzLml0ZW1TZXQub3B0aW9ucy5zbmFwfHxudWxsLGQ9dGhpcy5ib2R5LnV0aWwuZ2V0U2NhbGUoKSxjPXRoaXMuYm9keS51dGlsLmdldFN0ZXAoKSx1PXRoaXMuX3RvVGltZShvKSxwPWg/aCh1LGQsYyk6dSxmPWwuZ2V0VGFyZ2V0KHQpLG09bnVsbDtyZXR1cm4gbnVsbCE9cz9tPSJpdGVtIjpudWxsIT1hP209ImN1c3RvbS10aW1lIjpsLmhhc1BhcmVudChmLHRoaXMudGltZUF4aXMuZG9tLmZvcmVncm91bmQpP209ImF4aXMiOnRoaXMudGltZUF4aXMyJiZsLmhhc1BhcmVudChmLHRoaXMudGltZUF4aXMyLmRvbS5mb3JlZ3JvdW5kKT9tPSJheGlzIjpsLmhhc1BhcmVudChmLHRoaXMuaXRlbVNldC5kb20ubGFiZWxTZXQpP209Imdyb3VwLWxhYmVsIjpsLmhhc1BhcmVudChmLHRoaXMuY3VycmVudFRpbWUuYmFyKT9tPSJjdXJyZW50LXRpbWUiOmwuaGFzUGFyZW50KGYsdGhpcy5kb20uY2VudGVyKSYmKG09ImJhY2tncm91bmQiKSx7ZXZlbnQ6dCxpdGVtOnM/cy5pZDpudWxsLGdyb3VwOnI/ci5ncm91cElkOm51bGwsd2hhdDptLHBhZ2VYOnQuc3JjRXZlbnQ/dC5zcmNFdmVudC5wYWdlWDp0LnBhZ2VYLHBhZ2VZOnQuc3JjRXZlbnQ/dC5zcmNFdmVudC5wYWdlWTp0LnBhZ2VZLHg6byx5Om4sdGltZTp1LHNuYXBwZWRUaW1lOnB9fSx0LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLGkpe2Z1bmN0aW9uIG8odCl7cmV0dXJuIHQmJnQuX19lc01vZHVsZT90OntkZWZhdWx0OnR9fWZ1bmN0aW9uIG4odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHM9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LHI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBvPWVbaV07by5lbnVtZXJhYmxlPW8uZW51bWVyYWJsZXx8ITEsby5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG8mJihvLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxvLmtleSxvKX19cmV0dXJuIGZ1bmN0aW9uKGUsaSxvKXtyZXR1cm4gaSYmdChlLnByb3RvdHlwZSxpKSxvJiZ0KGUsbyksZX19KCksYT1pKDI5KSxoPW8oYSksZD1pKDEpLGw9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUsaSxvKXt2YXIgcz1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106MTtuKHRoaXMsdCksdGhpcy5wYXJlbnQ9ZSx0aGlzLmNoYW5nZWRPcHRpb25zPVtdLHRoaXMuY29udGFpbmVyPWksdGhpcy5hbGxvd0NyZWF0aW9uPSExLHRoaXMub3B0aW9ucz17fSx0aGlzLmluaXRpYWxpemVkPSExLHRoaXMucG9wdXBDb3VudGVyPTAsdGhpcy5kZWZhdWx0T3B0aW9ucz17ZW5hYmxlZDohMSxmaWx0ZXI6ITAsY29udGFpbmVyOnZvaWQgMCxzaG93QnV0dG9uOiEwfSxkLmV4dGVuZCh0aGlzLm9wdGlvbnMsdGhpcy5kZWZhdWx0T3B0aW9ucyksdGhpcy5jb25maWd1cmVPcHRpb25zPW8sdGhpcy5tb2R1bGVPcHRpb25zPXt9LHRoaXMuZG9tRWxlbWVudHM9W10sdGhpcy5wb3B1cERpdj17fSx0aGlzLnBvcHVwTGltaXQ9NSx0aGlzLnBvcHVwSGlzdG9yeT17fSx0aGlzLmNvbG9yUGlja2VyPW5ldyBoLmRlZmF1bHQocyksdGhpcy53cmFwcGVyPXZvaWQgMH1yZXR1cm4gcih0LFt7a2V5OiJzZXRPcHRpb25zIix2YWx1ZTpmdW5jdGlvbih0KXtpZih2b2lkIDAhPT10KXt0aGlzLnBvcHVwSGlzdG9yeT17fSx0aGlzLl9yZW1vdmVQb3B1cCgpO3ZhciBlPSEwOyJzdHJpbmciPT10eXBlb2YgdD90aGlzLm9wdGlvbnMuZmlsdGVyPXQ6dCBpbnN0YW5jZW9mIEFycmF5P3RoaXMub3B0aW9ucy5maWx0ZXI9dC5qb2luKCk6Im9iamVjdCI9PT0oInVuZGVmaW5lZCI9PXR5cGVvZiB0PyJ1bmRlZmluZWQiOnModCkpPyh2b2lkIDAhPT10LmNvbnRhaW5lciYmKHRoaXMub3B0aW9ucy5jb250YWluZXI9dC5jb250YWluZXIpLHZvaWQgMCE9PXQuZmlsdGVyJiYodGhpcy5vcHRpb25zLmZpbHRlcj10LmZpbHRlciksdm9pZCAwIT09dC5zaG93QnV0dG9uJiYodGhpcy5vcHRpb25zLnNob3dCdXR0b249dC5zaG93QnV0dG9uKSx2b2lkIDAhPT10LmVuYWJsZWQmJihlPXQuZW5hYmxlZCkpOiJib29sZWFuIj09dHlwZW9mIHQ/KHRoaXMub3B0aW9ucy5maWx0ZXI9ITAsZT10KToiZnVuY3Rpb24iPT10eXBlb2YgdCYmKHRoaXMub3B0aW9ucy5maWx0ZXI9dCxlPSEwKSx0aGlzLm9wdGlvbnMuZmlsdGVyPT09ITEmJihlPSExKSx0aGlzLm9wdGlvbnMuZW5hYmxlZD1lfXRoaXMuX2NsZWFuKCl9fSx7a2V5OiJzZXRNb2R1bGVPcHRpb25zIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLm1vZHVsZU9wdGlvbnM9dCx0aGlzLm9wdGlvbnMuZW5hYmxlZD09PSEwJiYodGhpcy5fY2xlYW4oKSx2b2lkIDAhPT10aGlzLm9wdGlvbnMuY29udGFpbmVyJiYodGhpcy5jb250YWluZXI9dGhpcy5vcHRpb25zLmNvbnRhaW5lciksdGhpcy5fY3JlYXRlKCkpfX0se2tleToiX2NyZWF0ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX2NsZWFuKCksdGhpcy5jaGFuZ2VkT3B0aW9ucz1bXTt2YXIgZT10aGlzLm9wdGlvbnMuZmlsdGVyLGk9MCxvPSExO2Zvcih2YXIgbiBpbiB0aGlzLmNvbmZpZ3VyZU9wdGlvbnMpdGhpcy5jb25maWd1cmVPcHRpb25zLmhhc093blByb3BlcnR5KG4pJiYodGhpcy5hbGxvd0NyZWF0aW9uPSExLG89ITEsImZ1bmN0aW9uIj09dHlwZW9mIGU/KG89ZShuLFtdKSxvPW98fHRoaXMuX2hhbmRsZU9iamVjdCh0aGlzLmNvbmZpZ3VyZU9wdGlvbnNbbl0sW25dLCEwKSk6ZSE9PSEwJiZlLmluZGV4T2Yobik9PT0tMXx8KG89ITApLG8hPT0hMSYmKHRoaXMuYWxsb3dDcmVhdGlvbj0hMCxpPjAmJnRoaXMuX21ha2VJdGVtKFtdKSx0aGlzLl9tYWtlSGVhZGVyKG4pLHRoaXMuX2hhbmRsZU9iamVjdCh0aGlzLmNvbmZpZ3VyZU9wdGlvbnNbbl0sW25dKSksaSsrKTt0aGlzLm9wdGlvbnMuc2hvd0J1dHRvbj09PSEwJiYhZnVuY3Rpb24oKXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtlLmNsYXNzTmFtZT0idmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1idXR0b24iLGUuaW5uZXJIVE1MPSJnZW5lcmF0ZSBvcHRpb25zIixlLm9uY2xpY2s9ZnVuY3Rpb24oKXt0Ll9wcmludE9wdGlvbnMoKX0sZS5vbm1vdXNlb3Zlcj1mdW5jdGlvbigpe2UuY2xhc3NOYW1lPSJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWJ1dHRvbiBob3ZlciJ9LGUub25tb3VzZW91dD1mdW5jdGlvbigpe2UuY2xhc3NOYW1lPSJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWJ1dHRvbiJ9LHQub3B0aW9uc0NvbnRhaW5lcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0Lm9wdGlvbnNDb250YWluZXIuY2xhc3NOYW1lPSJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLW9wdGlvbi1jb250YWluZXIiLHQuZG9tRWxlbWVudHMucHVzaCh0Lm9wdGlvbnNDb250YWluZXIpLHQuZG9tRWxlbWVudHMucHVzaChlKX0oKSx0aGlzLl9wdXNoKCl9fSx7a2V5OiJfcHVzaCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLndyYXBwZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy53cmFwcGVyLmNsYXNzTmFtZT0idmlzLWNvbmZpZ3VyYXRpb24td3JhcHBlciIsdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy53cmFwcGVyKTtmb3IodmFyIHQ9MDt0PHRoaXMuZG9tRWxlbWVudHMubGVuZ3RoO3QrKyl0aGlzLndyYXBwZXIuYXBwZW5kQ2hpbGQodGhpcy5kb21FbGVtZW50c1t0XSk7dGhpcy5fc2hvd1BvcHVwSWZOZWVkZWQoKX19LHtrZXk6Il9jbGVhbiIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PHRoaXMuZG9tRWxlbWVudHMubGVuZ3RoO3QrKyl0aGlzLndyYXBwZXIucmVtb3ZlQ2hpbGQodGhpcy5kb21FbGVtZW50c1t0XSk7dm9pZCAwIT09dGhpcy53cmFwcGVyJiYodGhpcy5jb250YWluZXIucmVtb3ZlQ2hpbGQodGhpcy53cmFwcGVyKSwKdGhpcy53cmFwcGVyPXZvaWQgMCksdGhpcy5kb21FbGVtZW50cz1bXSx0aGlzLl9yZW1vdmVQb3B1cCgpfX0se2tleToiX2dldFZhbHVlIix2YWx1ZTpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5tb2R1bGVPcHRpb25zLGk9MDtpPHQubGVuZ3RoO2krKyl7aWYodm9pZCAwPT09ZVt0W2ldXSl7ZT12b2lkIDA7YnJlYWt9ZT1lW3RbaV1dfXJldHVybiBlfX0se2tleToiX21ha2VJdGVtIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMsaT10aGlzO2lmKHRoaXMuYWxsb3dDcmVhdGlvbj09PSEwKXt2YXIgbyxuLHIsYT1mdW5jdGlvbigpe3ZhciBzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2ZvcihzLmNsYXNzTmFtZT0idmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1pdGVtIHZpcy1jb25maWctcyIrdC5sZW5ndGgsbz1lLmxlbmd0aCxuPUFycmF5KG8+MT9vLTE6MCkscj0xO3I8bztyKyspbltyLTFdPWVbcl07cmV0dXJuIG4uZm9yRWFjaChmdW5jdGlvbih0KXtzLmFwcGVuZENoaWxkKHQpfSksaS5kb21FbGVtZW50cy5wdXNoKHMpLHt2OmkuZG9tRWxlbWVudHMubGVuZ3RofX0oKTtpZigib2JqZWN0Ij09PSgidW5kZWZpbmVkIj09dHlwZW9mIGE/InVuZGVmaW5lZCI6cyhhKSkpcmV0dXJuIGEudn1yZXR1cm4gMH19LHtrZXk6Il9tYWtlSGVhZGVyIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtlLmNsYXNzTmFtZT0idmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1oZWFkZXIiLGUuaW5uZXJIVE1MPXQsdGhpcy5fbWFrZUl0ZW0oW10sZSl9fSx7a2V5OiJfbWFrZUxhYmVsIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl0sbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gby5jbGFzc05hbWU9InZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctbGFiZWwgdmlzLWNvbmZpZy1zIitlLmxlbmd0aCxpPT09ITA/by5pbm5lckhUTUw9IjxpPjxiPiIrdCsiOjwvYj48L2k+IjpvLmlubmVySFRNTD10KyI6IixvfX0se2tleToiX21ha2VEcm9wZG93biIsdmFsdWU6ZnVuY3Rpb24odCxlLGkpe3ZhciBvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpO28uY2xhc3NOYW1lPSJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLXNlbGVjdCI7dmFyIG49MDt2b2lkIDAhPT1lJiZ0LmluZGV4T2YoZSkhPT0tMSYmKG49dC5pbmRleE9mKGUpKTtmb3IodmFyIHM9MDtzPHQubGVuZ3RoO3MrKyl7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib3B0aW9uIik7ci52YWx1ZT10W3NdLHM9PT1uJiYoci5zZWxlY3RlZD0ic2VsZWN0ZWQiKSxyLmlubmVySFRNTD10W3NdLG8uYXBwZW5kQ2hpbGQocil9dmFyIGE9dGhpcztvLm9uY2hhbmdlPWZ1bmN0aW9uKCl7YS5fdXBkYXRlKHRoaXMudmFsdWUsaSl9O3ZhciBoPXRoaXMuX21ha2VMYWJlbChpW2kubGVuZ3RoLTFdLGkpO3RoaXMuX21ha2VJdGVtKGksaCxvKX19LHtrZXk6Il9tYWtlUmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKHQsZSxpKXt2YXIgbz10WzBdLG49dFsxXSxzPXRbMl0scj10WzNdLGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTthLmNsYXNzTmFtZT0idmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1yYW5nZSI7dHJ5e2EudHlwZT0icmFuZ2UiLGEubWluPW4sYS5tYXg9c31jYXRjaCh0KXt9YS5zdGVwPXI7dmFyIGg9IiIsZD0wO2lmKHZvaWQgMCE9PWUpe3ZhciBsPTEuMjtlPDAmJmUqbDxuPyhhLm1pbj1NYXRoLmNlaWwoZSpsKSxkPWEubWluLGg9InJhbmdlIGluY3JlYXNlZCIpOmUvbDxuJiYoYS5taW49TWF0aC5jZWlsKGUvbCksZD1hLm1pbixoPSJyYW5nZSBpbmNyZWFzZWQiKSxlKmw+cyYmMSE9PXMmJihhLm1heD1NYXRoLmNlaWwoZSpsKSxkPWEubWF4LGg9InJhbmdlIGluY3JlYXNlZCIpLGEudmFsdWU9ZX1lbHNlIGEudmFsdWU9bzt2YXIgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO2MuY2xhc3NOYW1lPSJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLXJhbmdlaW5wdXQiLGMudmFsdWU9YS52YWx1ZTt2YXIgdT10aGlzO2Eub25jaGFuZ2U9ZnVuY3Rpb24oKXtjLnZhbHVlPXRoaXMudmFsdWUsdS5fdXBkYXRlKE51bWJlcih0aGlzLnZhbHVlKSxpKX0sYS5vbmlucHV0PWZ1bmN0aW9uKCl7Yy52YWx1ZT10aGlzLnZhbHVlfTt2YXIgcD10aGlzLl9tYWtlTGFiZWwoaVtpLmxlbmd0aC0xXSxpKSxmPXRoaXMuX21ha2VJdGVtKGkscCxhLGMpOyIiIT09aCYmdGhpcy5wb3B1cEhpc3RvcnlbZl0hPT1kJiYodGhpcy5wb3B1cEhpc3RvcnlbZl09ZCx0aGlzLl9zZXR1cFBvcHVwKGgsZikpfX0se2tleToiX3NldHVwUG9wdXAiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcztpZih0aGlzLmluaXRpYWxpemVkPT09ITAmJnRoaXMuYWxsb3dDcmVhdGlvbj09PSEwJiZ0aGlzLnBvcHVwQ291bnRlcjx0aGlzLnBvcHVwTGltaXQpe3ZhciBvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO28uaWQ9InZpcy1jb25maWd1cmF0aW9uLXBvcHVwIixvLmNsYXNzTmFtZT0idmlzLWNvbmZpZ3VyYXRpb24tcG9wdXAiLG8uaW5uZXJIVE1MPXQsby5vbmNsaWNrPWZ1bmN0aW9uKCl7aS5fcmVtb3ZlUG9wdXAoKX0sdGhpcy5wb3B1cENvdW50ZXIrPTEsdGhpcy5wb3B1cERpdj17aHRtbDpvLGluZGV4OmV9fX19LHtrZXk6Il9yZW1vdmVQb3B1cCIsdmFsdWU6ZnVuY3Rpb24oKXt2b2lkIDAhPT10aGlzLnBvcHVwRGl2Lmh0bWwmJih0aGlzLnBvcHVwRGl2Lmh0bWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLnBvcHVwRGl2Lmh0bWwpLGNsZWFyVGltZW91dCh0aGlzLnBvcHVwRGl2LmhpZGVUaW1lb3V0KSxjbGVhclRpbWVvdXQodGhpcy5wb3B1cERpdi5kZWxldGVUaW1lb3V0KSx0aGlzLnBvcHVwRGl2PXt9KX19LHtrZXk6Il9zaG93UG9wdXBJZk5lZWRlZCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKHZvaWQgMCE9PXRoaXMucG9wdXBEaXYuaHRtbCl7dmFyIGU9dGhpcy5kb21FbGVtZW50c1t0aGlzLnBvcHVwRGl2LmluZGV4XSxpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5wb3B1cERpdi5odG1sLnN0eWxlLmxlZnQ9aS5sZWZ0KyJweCIsdGhpcy5wb3B1cERpdi5odG1sLnN0eWxlLnRvcD1pLnRvcC0zMCsicHgiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5wb3B1cERpdi5odG1sKSx0aGlzLnBvcHVwRGl2LmhpZGVUaW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXt0LnBvcHVwRGl2Lmh0bWwuc3R5bGUub3BhY2l0eT0wfSwxNTAwKSx0aGlzLnBvcHVwRGl2LmRlbGV0ZVRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe3QuX3JlbW92ZVBvcHVwKCl9LDE4MDApfX19LHtrZXk6Il9tYWtlQ2hlY2tib3giLHZhbHVlOmZ1bmN0aW9uKHQsZSxpKXt2YXIgbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO28udHlwZT0iY2hlY2tib3giLG8uY2xhc3NOYW1lPSJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWNoZWNrYm94IixvLmNoZWNrZWQ9dCx2b2lkIDAhPT1lJiYoby5jaGVja2VkPWUsZSE9PXQmJigib2JqZWN0Ij09PSgidW5kZWZpbmVkIj09dHlwZW9mIHQ/InVuZGVmaW5lZCI6cyh0KSk/ZSE9PXQuZW5hYmxlZCYmdGhpcy5jaGFuZ2VkT3B0aW9ucy5wdXNoKHtwYXRoOmksdmFsdWU6ZX0pOnRoaXMuY2hhbmdlZE9wdGlvbnMucHVzaCh7cGF0aDppLHZhbHVlOmV9KSkpO3ZhciBuPXRoaXM7by5vbmNoYW5nZT1mdW5jdGlvbigpe24uX3VwZGF0ZSh0aGlzLmNoZWNrZWQsaSl9O3ZhciByPXRoaXMuX21ha2VMYWJlbChpW2kubGVuZ3RoLTFdLGkpO3RoaXMuX21ha2VJdGVtKGkscixvKX19LHtrZXk6Il9tYWtlVGV4dElucHV0Iix2YWx1ZTpmdW5jdGlvbih0LGUsaSl7dmFyIG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTtvLnR5cGU9InRleHQiLG8uY2xhc3NOYW1lPSJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLXRleHQiLG8udmFsdWU9ZSxlIT09dCYmdGhpcy5jaGFuZ2VkT3B0aW9ucy5wdXNoKHtwYXRoOmksdmFsdWU6ZX0pO3ZhciBuPXRoaXM7by5vbmNoYW5nZT1mdW5jdGlvbigpe24uX3VwZGF0ZSh0aGlzLnZhbHVlLGkpfTt2YXIgcz10aGlzLl9tYWtlTGFiZWwoaVtpLmxlbmd0aC0xXSxpKTt0aGlzLl9tYWtlSXRlbShpLHMsbyl9fSx7a2V5OiJfbWFrZUNvbG9yRmllbGQiLHZhbHVlOmZ1bmN0aW9uKHQsZSxpKXt2YXIgbz10aGlzLG49dFsxXSxzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2U9dm9pZCAwPT09ZT9uOmUsIm5vbmUiIT09ZT8ocy5jbGFzc05hbWU9InZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctY29sb3JCbG9jayIscy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9ZSk6cy5jbGFzc05hbWU9InZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctY29sb3JCbG9jayBub25lIixlPXZvaWQgMD09PWU/bjplLHMub25jbGljaz1mdW5jdGlvbigpe28uX3Nob3dDb2xvclBpY2tlcihlLHMsaSl9O3ZhciByPXRoaXMuX21ha2VMYWJlbChpW2kubGVuZ3RoLTFdLGkpO3RoaXMuX21ha2VJdGVtKGkscixzKX19LHtrZXk6Il9zaG93Q29sb3JQaWNrZXIiLHZhbHVlOmZ1bmN0aW9uKHQsZSxpKXt2YXIgbz10aGlzO2Uub25jbGljaz1mdW5jdGlvbigpe30sdGhpcy5jb2xvclBpY2tlci5pbnNlcnRUbyhlKSx0aGlzLmNvbG9yUGlja2VyLnNob3coKSx0aGlzLmNvbG9yUGlja2VyLnNldENvbG9yKHQpLHRoaXMuY29sb3JQaWNrZXIuc2V0VXBkYXRlQ2FsbGJhY2soZnVuY3Rpb24odCl7dmFyIG49InJnYmEoIit0LnIrIiwiK3QuZysiLCIrdC5iKyIsIit0LmErIikiO2Uuc3R5bGUuYmFja2dyb3VuZENvbG9yPW4sby5fdXBkYXRlKG4saSl9KSx0aGlzLmNvbG9yUGlja2VyLnNldENsb3NlQ2FsbGJhY2soZnVuY3Rpb24oKXtlLm9uY2xpY2s9ZnVuY3Rpb24oKXtvLl9zaG93Q29sb3JQaWNrZXIodCxlLGkpfX0pfX0se2tleToiX2hhbmRsZU9iamVjdCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdLGk9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxvPSExLG49dGhpcy5vcHRpb25zLmZpbHRlcixzPSExO2Zvcih2YXIgciBpbiB0KWlmKHQuaGFzT3duUHJvcGVydHkocikpe289ITA7dmFyIGE9dFtyXSxoPWQuY29weUFuZEV4dGVuZEFycmF5KGUscik7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG4mJihvPW4ocixlKSxvPT09ITEmJiEoYSBpbnN0YW5jZW9mIEFycmF5KSYmInN0cmluZyIhPXR5cGVvZiBhJiYiYm9vbGVhbiIhPXR5cGVvZiBhJiZhIGluc3RhbmNlb2YgT2JqZWN0JiYodGhpcy5hbGxvd0NyZWF0aW9uPSExLG89dGhpcy5faGFuZGxlT2JqZWN0KGEsaCwhMCksdGhpcy5hbGxvd0NyZWF0aW9uPWk9PT0hMSkpLG8hPT0hMSl7cz0hMDt2YXIgbD10aGlzLl9nZXRWYWx1ZShoKTtpZihhIGluc3RhbmNlb2YgQXJyYXkpdGhpcy5faGFuZGxlQXJyYXkoYSxsLGgpO2Vsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBhKXRoaXMuX21ha2VUZXh0SW5wdXQoYSxsLGgpO2Vsc2UgaWYoImJvb2xlYW4iPT10eXBlb2YgYSl0aGlzLl9tYWtlQ2hlY2tib3goYSxsLGgpO2Vsc2UgaWYoYSBpbnN0YW5jZW9mIE9iamVjdCl7dmFyIGM9ITA7aWYoZS5pbmRleE9mKCJwaHlzaWNzIikhPT0tMSYmdGhpcy5tb2R1bGVPcHRpb25zLnBoeXNpY3Muc29sdmVyIT09ciYmKGM9ITEpLGM9PT0hMClpZih2b2lkIDAhPT1hLmVuYWJsZWQpe3ZhciB1PWQuY29weUFuZEV4dGVuZEFycmF5KGgsImVuYWJsZWQiKSxwPXRoaXMuX2dldFZhbHVlKHUpO2lmKHA9PT0hMCl7dmFyIGY9dGhpcy5fbWFrZUxhYmVsKHIsaCwhMCk7dGhpcy5fbWFrZUl0ZW0oaCxmKSxzPXRoaXMuX2hhbmRsZU9iamVjdChhLGgpfHxzfWVsc2UgdGhpcy5fbWFrZUNoZWNrYm94KGEscCxoKX1lbHNle3ZhciBtPXRoaXMuX21ha2VMYWJlbChyLGgsITApO3RoaXMuX21ha2VJdGVtKGgsbSkscz10aGlzLl9oYW5kbGVPYmplY3QoYSxoKXx8c319ZWxzZSBjb25zb2xlLmVycm9yKCJkb250IGtub3cgaG93IHRvIGhhbmRsZSIsYSxyLGgpfX1yZXR1cm4gc319LHtrZXk6Il9oYW5kbGVBcnJheSIsdmFsdWU6ZnVuY3Rpb24odCxlLGkpeyJzdHJpbmciPT10eXBlb2YgdFswXSYmImNvbG9yIj09PXRbMF0/KHRoaXMuX21ha2VDb2xvckZpZWxkKHQsZSxpKSx0WzFdIT09ZSYmdGhpcy5jaGFuZ2VkT3B0aW9ucy5wdXNoKHtwYXRoOmksdmFsdWU6ZX0pKToic3RyaW5nIj09dHlwZW9mIHRbMF0/KHRoaXMuX21ha2VEcm9wZG93bih0LGUsaSksdFswXSE9PWUmJnRoaXMuY2hhbmdlZE9wdGlvbnMucHVzaCh7cGF0aDppLHZhbHVlOmV9KSk6Im51bWJlciI9PXR5cGVvZiB0WzBdJiYodGhpcy5fbWFrZVJhbmdlKHQsZSxpKSx0WzBdIT09ZSYmdGhpcy5jaGFuZ2VkT3B0aW9ucy5wdXNoKHtwYXRoOmksdmFsdWU6TnVtYmVyKGUpfSkpfX0se2tleToiX3VwZGF0ZSIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLl9jb25zdHJ1Y3RPcHRpb25zKHQsZSk7dGhpcy5wYXJlbnQuYm9keSYmdGhpcy5wYXJlbnQuYm9keS5lbWl0dGVyJiZ0aGlzLnBhcmVudC5ib2R5LmVtaXR0ZXIuZW1pdCYmdGhpcy5wYXJlbnQuYm9keS5lbWl0dGVyLmVtaXQoImNvbmZpZ0NoYW5nZSIsaSksdGhpcy5pbml0aWFsaXplZD0hMCx0aGlzLnBhcmVudC5zZXRPcHRpb25zKGkpfX0se2tleToiX2NvbnN0cnVjdE9wdGlvbnMiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIGk9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9LG89aTt0PSJ0cnVlIj09PXR8fHQsdD0iZmFsc2UiIT09dCYmdDtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKykiZ2xvYmFsIiE9PWVbbl0mJih2b2lkIDA9PT1vW2Vbbl1dJiYob1tlW25dXT17fSksbiE9PWUubGVuZ3RoLTE/bz1vW2Vbbl1dOm9bZVtuXV09dCk7cmV0dXJuIGl9fSx7a2V5OiJfcHJpbnRPcHRpb25zIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2V0T3B0aW9ucygpO3RoaXMub3B0aW9uc0NvbnRhaW5lci5pbm5lckhUTUw9IjxwcmU+dmFyIG9wdGlvbnMgPSAiK0pTT04uc3RyaW5naWZ5KHQsbnVsbCwyKSsiPC9wcmU+In19LHtrZXk6ImdldE9wdGlvbnMiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXt9LGU9MDtlPHRoaXMuY2hhbmdlZE9wdGlvbnMubGVuZ3RoO2UrKyl0aGlzLl9jb25zdHJ1Y3RPcHRpb25zKHRoaXMuY2hhbmdlZE9wdGlvbnNbZV0udmFsdWUsdGhpcy5jaGFuZ2VkT3B0aW9uc1tlXS5wYXRoLHQpO3JldHVybiB0fX1dKSx0fSgpO2UuZGVmYXVsdD1sfSxmdW5jdGlvbih0LGUsaSl7ZnVuY3Rpb24gbyh0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIG89ZVtpXTtvLmVudW1lcmFibGU9by5lbnVtZXJhYmxlfHwhMSxvLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbyYmKG8ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG8ua2V5LG8pfX1yZXR1cm4gZnVuY3Rpb24oZSxpLG8pe3JldHVybiBpJiZ0KGUucHJvdG90eXBlLGkpLG8mJnQoZSxvKSxlfX0oKSxzPWkoMjIpLHI9aSgzMCksYT1pKDEpLGg9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjE7byh0aGlzLHQpLHRoaXMucGl4ZWxSYXRpbz1lLHRoaXMuZ2VuZXJhdGVkPSExLHRoaXMuY2VudGVyQ29vcmRpbmF0ZXM9e3g6MTQ0LjUseToxNDQuNX0sdGhpcy5yPTI4OSouNDksdGhpcy5jb2xvcj17cjoyNTUsZzoyNTUsYjoyNTUsYToxfSx0aGlzLmh1ZUNpcmNsZT12b2lkIDAsdGhpcy5pbml0aWFsQ29sb3I9e3I6MjU1LGc6MjU1LGI6MjU1LGE6MX0sdGhpcy5wcmV2aW91c0NvbG9yPXZvaWQgMCx0aGlzLmFwcGxpZWQ9ITEsdGhpcy51cGRhdGVDYWxsYmFjaz1mdW5jdGlvbigpe30sdGhpcy5jbG9zZUNhbGxiYWNrPWZ1bmN0aW9uKCl7fSx0aGlzLl9jcmVhdGUoKX1yZXR1cm4gbih0LFt7a2V5OiJpbnNlcnRUbyIsdmFsdWU6ZnVuY3Rpb24odCl7dm9pZCAwIT09dGhpcy5oYW1tZXImJih0aGlzLmhhbW1lci5kZXN0cm95KCksdGhpcy5oYW1tZXI9dm9pZCAwKSx0aGlzLmNvbnRhaW5lcj10LHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuZnJhbWUpLHRoaXMuX2JpbmRIYW1tZXIoKSx0aGlzLl9zZXRTaXplKCl9fSx7a2V5OiJzZXRVcGRhdGVDYWxsYmFjayIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKCJGdW5jdGlvbiBhdHRlbXB0ZWQgdG8gc2V0IGFzIGNvbG9yUGlja2VyIHVwZGF0ZSBjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbi4iKTt0aGlzLnVwZGF0ZUNhbGxiYWNrPXR9fSx7a2V5OiJzZXRDbG9zZUNhbGxiYWNrIix2YWx1ZTpmdW5jdGlvbih0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3IoIkZ1bmN0aW9uIGF0dGVtcHRlZCB0byBzZXQgYXMgY29sb3JQaWNrZXIgY2xvc2luZyBjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbi4iKTt0aGlzLmNsb3NlQ2FsbGJhY2s9dH19LHtrZXk6Il9pc0NvbG9yU3RyaW5nIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT17YmxhY2s6IiMwMDAwMDAiLG5hdnk6IiMwMDAwODAiLGRhcmtibHVlOiIjMDAwMDhCIixtZWRpdW1ibHVlOiIjMDAwMENEIixibHVlOiIjMDAwMEZGIixkYXJrZ3JlZW46IiMwMDY0MDAiLGdyZWVuOiIjMDA4MDAwIix0ZWFsOiIjMDA4MDgwIixkYXJrY3lhbjoiIzAwOEI4QiIsZGVlcHNreWJsdWU6IiMwMEJGRkYiLGRhcmt0dXJxdW9pc2U6IiMwMENFRDEiLG1lZGl1bXNwcmluZ2dyZWVuOiIjMDBGQTlBIixsaW1lOiIjMDBGRjAwIixzcHJpbmdncmVlbjoiIzAwRkY3RiIsYXF1YToiIzAwRkZGRiIsY3lhbjoiIzAwRkZGRiIsbWlkbmlnaHRibHVlOiIjMTkxOTcwIixkb2RnZXJibHVlOiIjMUU5MEZGIixsaWdodHNlYWdyZWVuOiIjMjBCMkFBIixmb3Jlc3RncmVlbjoiIzIyOEIyMiIsc2VhZ3JlZW46IiMyRThCNTciLGRhcmtzbGF0ZWdyYXk6IiMyRjRGNEYiLGxpbWVncmVlbjoiIzMyQ0QzMiIsbWVkaXVtc2VhZ3JlZW46IiMzQ0IzNzEiLHR1cnF1b2lzZToiIzQwRTBEMCIscm95YWxibHVlOiIjNDE2OUUxIixzdGVlbGJsdWU6IiM0NjgyQjQiLGRhcmtzbGF0ZWJsdWU6IiM0ODNEOEIiLG1lZGl1bXR1cnF1b2lzZToiIzQ4RDFDQyIsaW5kaWdvOiIjNEIwMDgyIixkYXJrb2xpdmVncmVlbjoiIzU1NkIyRiIsY2FkZXRibHVlOiIjNUY5RUEwIixjb3JuZmxvd2VyYmx1ZToiIzY0OTVFRCIsbWVkaXVtYXF1YW1hcmluZToiIzY2Q0RBQSIsZGltZ3JheToiIzY5Njk2OSIsc2xhdGVibHVlOiIjNkE1QUNEIixvbGl2ZWRyYWI6IiM2QjhFMjMiLHNsYXRlZ3JheToiIzcwODA5MCIsbGlnaHRzbGF0ZWdyYXk6IiM3Nzg4OTkiLG1lZGl1bXNsYXRlYmx1ZToiIzdCNjhFRSIsbGF3bmdyZWVuOiIjN0NGQzAwIixjaGFydHJldXNlOiIjN0ZGRjAwIixhcXVhbWFyaW5lOiIjN0ZGRkQ0IixtYXJvb246IiM4MDAwMDAiLHB1cnBsZToiIzgwMDA4MCIsb2xpdmU6IiM4MDgwMDAiLGdyYXk6IiM4MDgwODAiLHNreWJsdWU6IiM4N0NFRUIiLGxpZ2h0c2t5Ymx1ZToiIzg3Q0VGQSIsYmx1ZXZpb2xldDoiIzhBMkJFMiIsZGFya3JlZDoiIzhCMDAwMCIsZGFya21hZ2VudGE6IiM4QjAwOEIiLHNhZGRsZWJyb3duOiIjOEI0NTEzIixkYXJrc2VhZ3JlZW46IiM4RkJDOEYiLGxpZ2h0Z3JlZW46IiM5MEVFOTAiLG1lZGl1bXB1cnBsZToiIzkzNzBEOCIsZGFya3Zpb2xldDoiIzk0MDBEMyIscGFsZWdyZWVuOiIjOThGQjk4IixkYXJrb3JjaGlkOiIjOTkzMkNDIix5ZWxsb3dncmVlbjoiIzlBQ0QzMiIsc2llbm5hOiIjQTA1MjJEIixicm93bjoiI0E1MkEyQSIsZGFya2dyYXk6IiNBOUE5QTkiLGxpZ2h0Ymx1ZToiI0FERDhFNiIsZ3JlZW55ZWxsb3c6IiNBREZGMkYiLHBhbGV0dXJxdW9pc2U6IiNBRkVFRUUiLGxpZ2h0c3RlZWxibHVlOiIjQjBDNERFIixwb3dkZXJibHVlOiIjQjBFMEU2IixmaXJlYnJpY2s6IiNCMjIyMjIiLGRhcmtnb2xkZW5yb2Q6IiNCODg2MEIiLG1lZGl1bW9yY2hpZDoiI0JBNTVEMyIscm9zeWJyb3duOiIjQkM4RjhGIixkYXJra2hha2k6IiNCREI3NkIiLHNpbHZlcjoiI0MwQzBDMCIsbWVkaXVtdmlvbGV0cmVkOiIjQzcxNTg1IixpbmRpYW5yZWQ6IiNDRDVDNUMiLHBlcnU6IiNDRDg1M0YiLGNob2NvbGF0ZToiI0QyNjkxRSIsdGFuOiIjRDJCNDhDIixsaWdodGdyZXk6IiNEM0QzRDMiLHBhbGV2aW9sZXRyZWQ6IiNEODcwOTMiLHRoaXN0bGU6IiNEOEJGRDgiLG9yY2hpZDoiI0RBNzBENiIsZ29sZGVucm9kOiIjREFBNTIwIixjcmltc29uOiIjREMxNDNDIixnYWluc2Jvcm86IiNEQ0RDREMiLHBsdW06IiNEREEwREQiLGJ1cmx5d29vZDoiI0RFQjg4NyIsbGlnaHRjeWFuOiIjRTBGRkZGIixsYXZlbmRlcjoiI0U2RTZGQSIsZGFya3NhbG1vbjoiI0U5OTY3QSIsdmlvbGV0OiIjRUU4MkVFIixwYWxlZ29sZGVucm9kOiIjRUVFOEFBIixsaWdodGNvcmFsOiIjRjA4MDgwIixraGFraToiI0YwRTY4QyIsYWxpY2VibHVlOiIjRjBGOEZGIixob25leWRldzoiI0YwRkZGMCIsYXp1cmU6IiNGMEZGRkYiLHNhbmR5YnJvd246IiNGNEE0NjAiLHdoZWF0OiIjRjVERUIzIixiZWlnZToiI0Y1RjVEQyIsd2hpdGVzbW9rZToiI0Y1RjVGNSIsbWludGNyZWFtOiIjRjVGRkZBIixnaG9zdHdoaXRlOiIjRjhGOEZGIixzYWxtb246IiNGQTgwNzIiLGFudGlxdWV3aGl0ZToiI0ZBRUJENyIsbGluZW46IiNGQUYwRTYiLGxpZ2h0Z29sZGVucm9keWVsbG93OiIjRkFGQUQyIixvbGRsYWNlOiIjRkRGNUU2IixyZWQ6IiNGRjAwMDAiLGZ1Y2hzaWE6IiNGRjAwRkYiLG1hZ2VudGE6IiNGRjAwRkYiLGRlZXBwaW5rOiIjRkYxNDkzIixvcmFuZ2VyZWQ6IiNGRjQ1MDAiLHRvbWF0bzoiI0ZGNjM0NyIsaG90cGluazoiI0ZGNjlCNCIsY29yYWw6IiNGRjdGNTAiLGRhcmtvcmFuZ2U6IiNGRjhDMDAiLGxpZ2h0c2FsbW9uOiIjRkZBMDdBIixvcmFuZ2U6IiNGRkE1MDAiLGxpZ2h0cGluazoiI0ZGQjZDMSIscGluazoiI0ZGQzBDQiIsZ29sZDoiI0ZGRDcwMCIscGVhY2hwdWZmOiIjRkZEQUI5IixuYXZham93aGl0ZToiI0ZGREVBRCIsbW9jY2FzaW46IiNGRkU0QjUiLGJpc3F1ZToiI0ZGRTRDNCIsbWlzdHlyb3NlOiIjRkZFNEUxIixibGFuY2hlZGFsbW9uZDoiI0ZGRUJDRCIscGFwYXlhd2hpcDoiI0ZGRUZENSIsbGF2ZW5kZXJibHVzaDoiI0ZGRjBGNSIsc2Vhc2hlbGw6IiNGRkY1RUUiLGNvcm5zaWxrOiIjRkZGOERDIixsZW1vbmNoaWZmb246IiNGRkZBQ0QiLGZsb3JhbHdoaXRlOiIjRkZGQUYwIixzbm93OiIjRkZGQUZBIix5ZWxsb3c6IiNGRkZGMDAiLGxpZ2h0eWVsbG93OiIjRkZGRkUwIixpdm9yeToiI0ZGRkZGMCIsd2hpdGU6IiNGRkZGRkYifTtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIGVbdF19fSx7a2V5OiJzZXRDb2xvciIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXTtpZigibm9uZSIhPT10KXt2YXIgaT12b2lkIDAsbz10aGlzLl9pc0NvbG9yU3RyaW5nKHQpO2lmKHZvaWQgMCE9PW8mJih0PW8pLGEuaXNTdHJpbmcodCk9PT0hMCl7aWYoYS5pc1ZhbGlkUkdCKHQpPT09ITApe3ZhciBuPXQuc3Vic3RyKDQpLnN1YnN0cigwLHQubGVuZ3RoLTUpLnNwbGl0KCIsIik7aT17cjpuWzBdLGc6blsxXSxiOm5bMl0sYToxfX1lbHNlIGlmKGEuaXNWYWxpZFJHQkEodCk9PT0hMCl7dmFyIHM9dC5zdWJzdHIoNSkuc3Vic3RyKDAsdC5sZW5ndGgtNikuc3BsaXQoIiwiKTtpPXtyOnNbMF0sZzpzWzFdLGI6c1syXSxhOnNbM119fWVsc2UgaWYoYS5pc1ZhbGlkSGV4KHQpPT09ITApe3ZhciByPWEuaGV4VG9SR0IodCk7aT17cjpyLnIsZzpyLmcsYjpyLmIsYToxfX19ZWxzZSBpZih0IGluc3RhbmNlb2YgT2JqZWN0JiZ2b2lkIDAhPT10LnImJnZvaWQgMCE9PXQuZyYmdm9pZCAwIT09dC5iKXt2YXIgaD12b2lkIDAhPT10LmE/dC5hOiIxLjAiO2k9e3I6dC5yLGc6dC5nLGI6dC5iLGE6aH19aWYodm9pZCAwPT09aSl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gY29sb3IgcGFzc2VkIHRvIHRoZSBjb2xvclBpY2tlci4gU3VwcG9ydGVkIGFyZSBzdHJpbmdzOiByZ2IsIGhleCwgcmdiYS4gT2JqZWN0OiByZ2IgKHtyOnIsZzpnLGI6YixbYTphXX0pLiBTdXBwbGllZDogIitKU09OLnN0cmluZ2lmeSh0KSk7dGhpcy5fc2V0Q29sb3IoaSxlKX19fSx7a2V5OiJzaG93Iix2YWx1ZTpmdW5jdGlvbigpe3ZvaWQgMCE9PXRoaXMuY2xvc2VDYWxsYmFjayYmKHRoaXMuY2xvc2VDYWxsYmFjaygpLHRoaXMuY2xvc2VDYWxsYmFjaz12b2lkIDApLHRoaXMuYXBwbGllZD0hMSx0aGlzLmZyYW1lLnN0eWxlLmRpc3BsYXk9ImJsb2NrIix0aGlzLl9nZW5lcmF0ZUh1ZUNpcmNsZSgpfX0se2tleToiX2hpZGUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPSEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF07ZT09PSEwJiYodGhpcy5wcmV2aW91c0NvbG9yPWEuZXh0ZW5kKHt9LHRoaXMuY29sb3IpKSx0aGlzLmFwcGxpZWQ9PT0hMCYmdGhpcy51cGRhdGVDYWxsYmFjayh0aGlzLmluaXRpYWxDb2xvciksdGhpcy5mcmFtZS5zdHlsZS5kaXNwbGF5PSJub25lIixzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dm9pZCAwIT09dC5jbG9zZUNhbGxiYWNrJiYodC5jbG9zZUNhbGxiYWNrKCksdC5jbG9zZUNhbGxiYWNrPXZvaWQgMCl9LDApfX0se2tleToiX3NhdmUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy51cGRhdGVDYWxsYmFjayh0aGlzLmNvbG9yKSx0aGlzLmFwcGxpZWQ9ITEsdGhpcy5faGlkZSgpfX0se2tleToiX2FwcGx5Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuYXBwbGllZD0hMCx0aGlzLnVwZGF0ZUNhbGxiYWNrKHRoaXMuY29sb3IpLHRoaXMuX3VwZGF0ZVBpY2tlcih0aGlzLmNvbG9yKX19LHtrZXk6Il9sb2FkTGFzdCIsdmFsdWU6ZnVuY3Rpb24oKXt2b2lkIDAhPT10aGlzLnByZXZpb3VzQ29sb3I/dGhpcy5zZXRDb2xvcih0aGlzLnByZXZpb3VzQ29sb3IsITEpOmFsZXJ0KCJUaGVyZSBpcyBubyBsYXN0IGNvbG9yIHRvIGxvYWQuLi4iKX19LHtrZXk6Il9zZXRDb2xvciIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXTtlPT09ITAmJih0aGlzLmluaXRpYWxDb2xvcj1hLmV4dGVuZCh7fSx0KSksdGhpcy5jb2xvcj10O3ZhciBpPWEuUkdCVG9IU1YodC5yLHQuZyx0LmIpLG89MipNYXRoLlBJLG49dGhpcy5yKmkucyxzPXRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueCtuKk1hdGguc2luKG8qaS5oKSxyPXRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueStuKk1hdGguY29zKG8qaS5oKTt0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3Iuc3R5bGUubGVmdD1zLS41KnRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5jbGllbnRXaWR0aCsicHgiLHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5zdHlsZS50b3A9ci0uNSp0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3IuY2xpZW50SGVpZ2h0KyJweCIsdGhpcy5fdXBkYXRlUGlja2VyKHQpfX0se2tleToiX3NldE9wYWNpdHkiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuY29sb3IuYT10LzEwMCx0aGlzLl91cGRhdGVQaWNrZXIodGhpcy5jb2xvcil9fSx7a2V5OiJfc2V0QnJpZ2h0bmVzcyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9YS5SR0JUb0hTVih0aGlzLmNvbG9yLnIsdGhpcy5jb2xvci5nLHRoaXMuY29sb3IuYik7ZS52PXQvMTAwO3ZhciBpPWEuSFNWVG9SR0IoZS5oLGUucyxlLnYpO2kuYT10aGlzLmNvbG9yLmEsdGhpcy5jb2xvcj1pLHRoaXMuX3VwZGF0ZVBpY2tlcigpfX0se2tleToiX3VwZGF0ZVBpY2tlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5jb2xvcixlPWEuUkdCVG9IU1YodC5yLHQuZyx0LmIpLGk9dGhpcy5jb2xvclBpY2tlckNhbnZhcy5nZXRDb250ZXh0KCIyZCIpO3ZvaWQgMD09PXRoaXMucGl4ZWxSYXRpb24mJih0aGlzLnBpeGVsUmF0aW89KHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxKS8oaS53ZWJraXRCYWNraW5nU3RvcmVQaXhlbFJhdGlvfHxpLm1vekJhY2tpbmdTdG9yZVBpeGVsUmF0aW98fGkubXNCYWNraW5nU3RvcmVQaXhlbFJhdGlvfHxpLm9CYWNraW5nU3RvcmVQaXhlbFJhdGlvfHxpLmJhY2tpbmdTdG9yZVBpeGVsUmF0aW98fDEpKSxpLnNldFRyYW5zZm9ybSh0aGlzLnBpeGVsUmF0aW8sMCwwLHRoaXMucGl4ZWxSYXRpbywwLDApO3ZhciBvPXRoaXMuY29sb3JQaWNrZXJDYW52YXMuY2xpZW50V2lkdGgsbj10aGlzLmNvbG9yUGlja2VyQ2FudmFzLmNsaWVudEhlaWdodDtpLmNsZWFyUmVjdCgwLDAsbyxuKSxpLnB1dEltYWdlRGF0YSh0aGlzLmh1ZUNpcmNsZSwwLDApLGkuZmlsbFN0eWxlPSJyZ2JhKDAsMCwwLCIrKDEtZS52KSsiKSIsaS5jaXJjbGUodGhpcy5jZW50ZXJDb29yZGluYXRlcy54LHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueSx0aGlzLnIpLGkuZmlsbCgpLHRoaXMuYnJpZ2h0bmVzc1JhbmdlLnZhbHVlPTEwMCplLnYsdGhpcy5vcGFjaXR5UmFuZ2UudmFsdWU9MTAwKnQuYSx0aGlzLmluaXRpYWxDb2xvckRpdi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9InJnYmEoIit0aGlzLmluaXRpYWxDb2xvci5yKyIsIit0aGlzLmluaXRpYWxDb2xvci5nKyIsIit0aGlzLmluaXRpYWxDb2xvci5iKyIsIit0aGlzLmluaXRpYWxDb2xvci5hKyIpIix0aGlzLm5ld0NvbG9yRGl2LnN0eWxlLmJhY2tncm91bmRDb2xvcj0icmdiYSgiK3RoaXMuY29sb3IucisiLCIrdGhpcy5jb2xvci5nKyIsIit0aGlzLmNvbG9yLmIrIiwiK3RoaXMuY29sb3IuYSsiKSJ9fSx7a2V5OiJfc2V0U2l6ZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmNvbG9yUGlja2VyQ2FudmFzLnN0eWxlLndpZHRoPSIxMDAlIix0aGlzLmNvbG9yUGlja2VyQ2FudmFzLnN0eWxlLmhlaWdodD0iMTAwJSIsdGhpcy5jb2xvclBpY2tlckNhbnZhcy53aWR0aD0yODkqdGhpcy5waXhlbFJhdGlvLHRoaXMuY29sb3JQaWNrZXJDYW52YXMuaGVpZ2h0PTI4OSp0aGlzLnBpeGVsUmF0aW99fSx7a2V5OiJfY3JlYXRlIix2YWx1ZTpmdW5jdGlvbigpe2lmKHRoaXMuZnJhbWU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5mcmFtZS5jbGFzc05hbWU9InZpcy1jb2xvci1waWNrZXIiLHRoaXMuY29sb3JQaWNrZXJEaXY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5jbGFzc05hbWU9InZpcy1zZWxlY3RvciIsdGhpcy5jb2xvclBpY2tlckRpdi5hcHBlbmRDaGlsZCh0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3IpLHRoaXMuY29sb3JQaWNrZXJDYW52YXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksdGhpcy5jb2xvclBpY2tlckRpdi5hcHBlbmRDaGlsZCh0aGlzLmNvbG9yUGlja2VyQ2FudmFzKSx0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmdldENvbnRleHQpe3ZhciB0PXRoaXMuY29sb3JQaWNrZXJDYW52YXMuZ2V0Q29udGV4dCgiMmQiKTt0aGlzLnBpeGVsUmF0aW89KHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxKS8odC53ZWJraXRCYWNraW5nU3RvcmVQaXhlbFJhdGlvfHx0Lm1vekJhY2tpbmdTdG9yZVBpeGVsUmF0aW98fHQubXNCYWNraW5nU3RvcmVQaXhlbFJhdGlvfHx0Lm9CYWNraW5nU3RvcmVQaXhlbFJhdGlvfHx0LmJhY2tpbmdTdG9yZVBpeGVsUmF0aW98fDEpLHRoaXMuY29sb3JQaWNrZXJDYW52YXMuZ2V0Q29udGV4dCgiMmQiKS5zZXRUcmFuc2Zvcm0odGhpcy5waXhlbFJhdGlvLDAsMCx0aGlzLnBpeGVsUmF0aW8sMCwwKX1lbHNle3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpO2Uuc3R5bGUuY29sb3I9InJlZCIsZS5zdHlsZS5mb250V2VpZ2h0PSJib2xkIixlLnN0eWxlLnBhZGRpbmc9IjEwcHgiLGUuaW5uZXJIVE1MPSJFcnJvcjogeW91ciBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgSFRNTCBjYW52YXMiLHRoaXMuY29sb3JQaWNrZXJDYW52YXMuYXBwZW5kQ2hpbGQoZSl9dGhpcy5jb2xvclBpY2tlckRpdi5jbGFzc05hbWU9InZpcy1jb2xvciIsdGhpcy5vcGFjaXR5RGl2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMub3BhY2l0eURpdi5jbGFzc05hbWU9InZpcy1vcGFjaXR5Iix0aGlzLmJyaWdodG5lc3NEaXY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5icmlnaHRuZXNzRGl2LmNsYXNzTmFtZT0idmlzLWJyaWdodG5lc3MiLHRoaXMuYXJyb3dEaXY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5hcnJvd0Rpdi5jbGFzc05hbWU9InZpcy1hcnJvdyIsdGhpcy5vcGFjaXR5UmFuZ2U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTt0cnl7dGhpcy5vcGFjaXR5UmFuZ2UudHlwZT0icmFuZ2UiLHRoaXMub3BhY2l0eVJhbmdlLm1pbj0iMCIsdGhpcy5vcGFjaXR5UmFuZ2UubWF4PSIxMDAifWNhdGNoKHQpe310aGlzLm9wYWNpdHlSYW5nZS52YWx1ZT0iMTAwIix0aGlzLm9wYWNpdHlSYW5nZS5jbGFzc05hbWU9InZpcy1yYW5nZSIsdGhpcy5icmlnaHRuZXNzUmFuZ2U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTt0cnl7dGhpcy5icmlnaHRuZXNzUmFuZ2UudHlwZT0icmFuZ2UiLHRoaXMuYnJpZ2h0bmVzc1JhbmdlLm1pbj0iMCIsdGhpcy5icmlnaHRuZXNzUmFuZ2UubWF4PSIxMDAifWNhdGNoKHQpe310aGlzLmJyaWdodG5lc3NSYW5nZS52YWx1ZT0iMTAwIix0aGlzLmJyaWdodG5lc3NSYW5nZS5jbGFzc05hbWU9InZpcy1yYW5nZSIsdGhpcy5vcGFjaXR5RGl2LmFwcGVuZENoaWxkKHRoaXMub3BhY2l0eVJhbmdlKSx0aGlzLmJyaWdodG5lc3NEaXYuYXBwZW5kQ2hpbGQodGhpcy5icmlnaHRuZXNzUmFuZ2UpO3ZhciBpPXRoaXM7dGhpcy5vcGFjaXR5UmFuZ2Uub25jaGFuZ2U9ZnVuY3Rpb24oKXtpLl9zZXRPcGFjaXR5KHRoaXMudmFsdWUpfSx0aGlzLm9wYWNpdHlSYW5nZS5vbmlucHV0PWZ1bmN0aW9uKCl7aS5fc2V0T3BhY2l0eSh0aGlzLnZhbHVlKX0sdGhpcy5icmlnaHRuZXNzUmFuZ2Uub25jaGFuZ2U9ZnVuY3Rpb24oKXtpLl9zZXRCcmlnaHRuZXNzKHRoaXMudmFsdWUpfSx0aGlzLmJyaWdodG5lc3NSYW5nZS5vbmlucHV0PWZ1bmN0aW9uKCl7aS5fc2V0QnJpZ2h0bmVzcyh0aGlzLnZhbHVlKX0sdGhpcy5icmlnaHRuZXNzTGFiZWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5icmlnaHRuZXNzTGFiZWwuY2xhc3NOYW1lPSJ2aXMtbGFiZWwgdmlzLWJyaWdodG5lc3MiLHRoaXMuYnJpZ2h0bmVzc0xhYmVsLmlubmVySFRNTD0iYnJpZ2h0bmVzczoiLHRoaXMub3BhY2l0eUxhYmVsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMub3BhY2l0eUxhYmVsLmNsYXNzTmFtZT0idmlzLWxhYmVsIHZpcy1vcGFjaXR5Iix0aGlzLm9wYWNpdHlMYWJlbC5pbm5lckhUTUw9Im9wYWNpdHk6Iix0aGlzLm5ld0NvbG9yRGl2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMubmV3Q29sb3JEaXYuY2xhc3NOYW1lPSJ2aXMtbmV3LWNvbG9yIix0aGlzLm5ld0NvbG9yRGl2LmlubmVySFRNTD0ibmV3Iix0aGlzLmluaXRpYWxDb2xvckRpdj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmluaXRpYWxDb2xvckRpdi5jbGFzc05hbWU9InZpcy1pbml0aWFsLWNvbG9yIix0aGlzLmluaXRpYWxDb2xvckRpdi5pbm5lckhUTUw9ImluaXRpYWwiLHRoaXMuY2FuY2VsQnV0dG9uPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuY2FuY2VsQnV0dG9uLmNsYXNzTmFtZT0idmlzLWJ1dHRvbiB2aXMtY2FuY2VsIix0aGlzLmNhbmNlbEJ1dHRvbi5pbm5lckhUTUw9ImNhbmNlbCIsdGhpcy5jYW5jZWxCdXR0b24ub25jbGljaz10aGlzLl9oaWRlLmJpbmQodGhpcywhMSksdGhpcy5hcHBseUJ1dHRvbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmFwcGx5QnV0dG9uLmNsYXNzTmFtZT0idmlzLWJ1dHRvbiB2aXMtYXBwbHkiLHRoaXMuYXBwbHlCdXR0b24uaW5uZXJIVE1MPSJhcHBseSIsdGhpcy5hcHBseUJ1dHRvbi5vbmNsaWNrPXRoaXMuX2FwcGx5LmJpbmQodGhpcyksdGhpcy5zYXZlQnV0dG9uPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuc2F2ZUJ1dHRvbi5jbGFzc05hbWU9InZpcy1idXR0b24gdmlzLXNhdmUiLHRoaXMuc2F2ZUJ1dHRvbi5pbm5lckhUTUw9InNhdmUiLHRoaXMuc2F2ZUJ1dHRvbi5vbmNsaWNrPXRoaXMuX3NhdmUuYmluZCh0aGlzKSx0aGlzLmxvYWRCdXR0b249ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5sb2FkQnV0dG9uLmNsYXNzTmFtZT0idmlzLWJ1dHRvbiB2aXMtbG9hZCIsdGhpcy5sb2FkQnV0dG9uLmlubmVySFRNTD0ibG9hZCBsYXN0Iix0aGlzLmxvYWRCdXR0b24ub25jbGljaz10aGlzLl9sb2FkTGFzdC5iaW5kKHRoaXMpLHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5jb2xvclBpY2tlckRpdiksdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmFycm93RGl2KSx0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuYnJpZ2h0bmVzc0xhYmVsKSx0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuYnJpZ2h0bmVzc0RpdiksdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLm9wYWNpdHlMYWJlbCksdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLm9wYWNpdHlEaXYpLHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5uZXdDb2xvckRpdiksdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmluaXRpYWxDb2xvckRpdiksdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmNhbmNlbEJ1dHRvbiksdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmFwcGx5QnV0dG9uKSx0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuc2F2ZUJ1dHRvbiksdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmxvYWRCdXR0b24pfX0se2tleToiX2JpbmRIYW1tZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLmRyYWc9e30sdGhpcy5waW5jaD17fSx0aGlzLmhhbW1lcj1uZXcgcyh0aGlzLmNvbG9yUGlja2VyQ2FudmFzKSx0aGlzLmhhbW1lci5nZXQoInBpbmNoIikuc2V0KHtlbmFibGU6ITB9KSxyLm9uVG91Y2godGhpcy5oYW1tZXIsZnVuY3Rpb24oZSl7dC5fbW92ZVNlbGVjdG9yKGUpfSksdGhpcy5oYW1tZXIub24oInRhcCIsZnVuY3Rpb24oZSl7dC5fbW92ZVNlbGVjdG9yKGUpfSksdGhpcy5oYW1tZXIub24oInBhbnN0YXJ0IixmdW5jdGlvbihlKXt0Ll9tb3ZlU2VsZWN0b3IoZSl9KSx0aGlzLmhhbW1lci5vbigicGFubW92ZSIsZnVuY3Rpb24oZSl7dC5fbW92ZVNlbGVjdG9yKGUpfSksdGhpcy5oYW1tZXIub24oInBhbmVuZCIsZnVuY3Rpb24oZSl7dC5fbW92ZVNlbGVjdG9yKGUpfSl9fSx7a2V5OiJfZ2VuZXJhdGVIdWVDaXJjbGUiLHZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcy5nZW5lcmF0ZWQ9PT0hMSl7dmFyIHQ9dGhpcy5jb2xvclBpY2tlckNhbnZhcy5nZXRDb250ZXh0KCIyZCIpO3ZvaWQgMD09PXRoaXMucGl4ZWxSYXRpb24mJih0aGlzLnBpeGVsUmF0aW89KHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxKS8odC53ZWJraXRCYWNraW5nU3RvcmVQaXhlbFJhdGlvfHx0Lm1vekJhY2tpbmdTdG9yZVBpeGVsUmF0aW98fHQubXNCYWNraW5nU3RvcmVQaXhlbFJhdGlvfHx0Lm9CYWNraW5nU3RvcmVQaXhlbFJhdGlvfHx0LmJhY2tpbmdTdG9yZVBpeGVsUmF0aW98fDEpKSx0LnNldFRyYW5zZm9ybSh0aGlzLnBpeGVsUmF0aW8sMCwwLHRoaXMucGl4ZWxSYXRpbywwLDApO3ZhciBlPXRoaXMuY29sb3JQaWNrZXJDYW52YXMuY2xpZW50V2lkdGgsaT10aGlzLmNvbG9yUGlja2VyQ2FudmFzLmNsaWVudEhlaWdodDt0LmNsZWFyUmVjdCgwLDAsZSxpKTt2YXIgbz12b2lkIDAsbj12b2lkIDAscz12b2lkIDAscj12b2lkIDA7dGhpcy5jZW50ZXJDb29yZGluYXRlcz17eDouNSplLHk6LjUqaX0sdGhpcy5yPS40OSplO3ZhciBoPTIqTWF0aC5QSS8zNjAsZD0xLzM2MCxsPTEvdGhpcy5yLGM9dm9pZCAwO2ZvcihzPTA7czwzNjA7cysrKWZvcihyPTA7cjx0aGlzLnI7cisrKW89dGhpcy5jZW50ZXJDb29yZGluYXRlcy54K3IqTWF0aC5zaW4oaCpzKSxuPXRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueStyKk1hdGguY29zKGgqcyksYz1hLkhTVlRvUkdCKHMqZCxyKmwsMSksdC5maWxsU3R5bGU9InJnYigiK2MucisiLCIrYy5nKyIsIitjLmIrIikiLHQuZmlsbFJlY3Qoby0uNSxuLS41LDIsMik7dC5zdHJva2VTdHlsZT0icmdiYSgwLDAsMCwxKSIsdC5jaXJjbGUodGhpcy5jZW50ZXJDb29yZGluYXRlcy54LHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueSx0aGlzLnIpLHQuc3Ryb2tlKCksdGhpcy5odWVDaXJjbGU9dC5nZXRJbWFnZURhdGEoMCwwLGUsaSl9dGhpcy5nZW5lcmF0ZWQ9ITB9fSx7a2V5OiJfbW92ZVNlbGVjdG9yIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmNvbG9yUGlja2VyRGl2LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9dC5jZW50ZXIueC1lLmxlZnQsbz10LmNlbnRlci55LWUudG9wLG49LjUqdGhpcy5jb2xvclBpY2tlckRpdi5jbGllbnRIZWlnaHQscz0uNSp0aGlzLmNvbG9yUGlja2VyRGl2LmNsaWVudFdpZHRoLHI9aS1zLGg9by1uLGQ9TWF0aC5hdGFuMihyLGgpLGw9Ljk4Kk1hdGgubWluKE1hdGguc3FydChyKnIraCpoKSxzKSxjPU1hdGguY29zKGQpKmwrbix1PU1hdGguc2luKGQpKmwrczt0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3Iuc3R5bGUudG9wPWMtLjUqdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLmNsaWVudEhlaWdodCsicHgiLHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5zdHlsZS5sZWZ0PXUtLjUqdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLmNsaWVudFdpZHRoKyJweCI7dmFyIHA9ZC8oMipNYXRoLlBJKTtwPXA8MD9wKzE6cDt2YXIgZj1sL3RoaXMucixtPWEuUkdCVG9IU1YodGhpcy5jb2xvci5yLHRoaXMuY29sb3IuZyx0aGlzLmNvbG9yLmIpO20uaD1wLG0ucz1mO3ZhciB2PWEuSFNWVG9SR0IobS5oLG0ucyxtLnYpO3YuYT10aGlzLmNvbG9yLmEsdGhpcy5jb2xvcj12LHRoaXMuaW5pdGlhbENvbG9yRGl2LnN0eWxlLmJhY2tncm91bmRDb2xvcj0icmdiYSgiK3RoaXMuaW5pdGlhbENvbG9yLnIrIiwiK3RoaXMuaW5pdGlhbENvbG9yLmcrIiwiK3RoaXMuaW5pdGlhbENvbG9yLmIrIiwiK3RoaXMuaW5pdGlhbENvbG9yLmErIikiLHRoaXMubmV3Q29sb3JEaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yPSJyZ2JhKCIrdGhpcy5jb2xvci5yKyIsIit0aGlzLmNvbG9yLmcrIiwiK3RoaXMuY29sb3IuYisiLCIrdGhpcy5jb2xvci5hKyIpIn19XSksdH0oKTtlLmRlZmF1bHQ9aH0sZnVuY3Rpb24odCxlLGkpe2koMjIpO2Uub25Ub3VjaD1mdW5jdGlvbih0LGUpe2UuaW5wdXRIYW5kbGVyPWZ1bmN0aW9uKHQpe3QuaXNGaXJzdCYmZSh0KX0sdC5vbigiaGFtbWVyLmlucHV0IixlLmlucHV0SGFuZGxlcil9LGUub25SZWxlYXNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuaW5wdXRIYW5kbGVyPWZ1bmN0aW9uKHQpe3QuaXNGaW5hbCYmZSh0KX0sdC5vbigiaGFtbWVyLmlucHV0IixlLmlucHV0SGFuZGxlcil9LGUub2ZmVG91Y2g9ZnVuY3Rpb24odCxlKXt0Lm9mZigiaGFtbWVyLmlucHV0IixlLmlucHV0SGFuZGxlcil9LGUub2ZmUmVsZWFzZT1lLm9mZlRvdWNoLGUuZGlzYWJsZVByZXZlbnREZWZhdWx0VmVydGljYWxseT1mdW5jdGlvbih0KXt2YXIgZT0icGFuLXkiO3JldHVybiB0LmdldFRvdWNoQWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuW2VdfSx0fX0sZnVuY3Rpb24odCxlLGkpe2Z1bmN0aW9uIG8odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBvPWVbaV07by5lbnVtZXJhYmxlPW8uZW51bWVyYWJsZXx8ITEsby5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG8mJihvLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxvLmtleSxvKX19cmV0dXJuIGZ1bmN0aW9uKGUsaSxvKXtyZXR1cm4gaSYmdChlLnByb3RvdHlwZSxpKSxvJiZ0KGUsbyksZX19KCkscj1pKDEpLGE9ITEsaD12b2lkIDAsZD0iYmFja2dyb3VuZDogI0ZGZWVlZTsgY29sb3I6ICNkZDAwMDAiLGw9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7byh0aGlzLHQpfXJldHVybiBzKHQsbnVsbCxbe2tleToidmFsaWRhdGUiLHZhbHVlOmZ1bmN0aW9uKGUsaSxvKXthPSExLGg9aTt2YXIgbj1pO3JldHVybiB2b2lkIDAhPT1vJiYobj1pW29dKSx0LnBhcnNlKGUsbixbXSksYX19LHtrZXk6InBhcnNlIix2YWx1ZTpmdW5jdGlvbihlLGksbyl7Zm9yKHZhciBuIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShuKSYmdC5jaGVjayhuLGUsaSxvKX19LHtrZXk6ImNoZWNrIix2YWx1ZTpmdW5jdGlvbihlLGksbyxuKXt2b2lkIDA9PT1vW2VdJiZ2b2lkIDA9PT1vLl9fYW55X18/dC5nZXRTdWdnZXN0aW9uKGUsbyxuKTp2b2lkIDA9PT1vW2VdJiZ2b2lkIDAhPT1vLl9fYW55X18/Im9iamVjdCI9PT10LmdldFR5cGUoaVtlXSkmJnZvaWQgMCE9PW8uX19hbnlfXy5fX3R5cGVfXz90LmNoZWNrRmllbGRzKGUsaSxvLCJfX2FueV9fIixvLl9fYW55X18uX190eXBlX18sbik6dC5jaGVja0ZpZWxkcyhlLGksbywiX19hbnlfXyIsby5fX2FueV9fLG4pOnZvaWQgMCE9PW9bZV0uX190eXBlX18/dC5jaGVja0ZpZWxkcyhlLGksbyxlLG9bZV0uX190eXBlX18sbik6dC5jaGVja0ZpZWxkcyhlLGksbyxlLG9bZV0sbil9fSx7a2V5OiJjaGVja0ZpZWxkcyIsdmFsdWU6ZnVuY3Rpb24oZSxpLG8sbixzLGgpe3ZhciBsPXQuZ2V0VHlwZShpW2VdKSxjPXNbbF07dm9pZCAwIT09Yz8iYXJyYXkiPT09dC5nZXRUeXBlKGMpJiZjLmluZGV4T2YoaVtlXSk9PT0tMT8oY29uc29sZS5sb2coJyVjSW52YWxpZCBvcHRpb24gZGV0ZWN0ZWQgaW4gIicrZSsnIi4gQWxsb3dlZCB2YWx1ZXMgYXJlOicrdC5wcmludChjKSsnIG5vdCAiJytpW2VdKyciLiAnK3QucHJpbnRMb2NhdGlvbihoLGUpLGQpLGE9ITApOiJvYmplY3QiPT09bCYmIl9fYW55X18iIT09biYmKGg9ci5jb3B5QW5kRXh0ZW5kQXJyYXkoaCxlKSx0LnBhcnNlKGlbZV0sb1tuXSxoKSk6dm9pZCAwPT09cy5hbnkmJihjb25zb2xlLmxvZygnJWNJbnZhbGlkIHR5cGUgcmVjZWl2ZWQgZm9yICInK2UrJyIuIEV4cGVjdGVkOiAnK3QucHJpbnQoT2JqZWN0LmtleXMocykpKyIuIFJlY2VpdmVkIFsiK2wrJ10gIicraVtlXSsnIicrdC5wcmludExvY2F0aW9uKGgsZSksZCksYT0hMCl9fSx7a2V5OiJnZXRUeXBlIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT0idW5kZWZpbmVkIj09dHlwZW9mIHQ/InVuZGVmaW5lZCI6bih0KTtyZXR1cm4ib2JqZWN0Ij09PWU/bnVsbD09PXQ/Im51bGwiOnQgaW5zdGFuY2VvZiBCb29sZWFuPyJib29sZWFuIjp0IGluc3RhbmNlb2YgTnVtYmVyPyJudW1iZXIiOnQgaW5zdGFuY2VvZiBTdHJpbmc/InN0cmluZyI6QXJyYXkuaXNBcnJheSh0KT8iYXJyYXkiOnQgaW5zdGFuY2VvZiBEYXRlPyJkYXRlIjp2b2lkIDAhPT10Lm5vZGVUeXBlPyJkb20iOnQuX2lzQU1vbWVudE9iamVjdD09PSEwPyJtb21lbnQiOiJvYmplY3QiOiJudW1iZXIiPT09ZT8ibnVtYmVyIjoiYm9vbGVhbiI9PT1lPyJib29sZWFuIjoic3RyaW5nIj09PWU/InN0cmluZyI6dm9pZCAwPT09ZT8idW5kZWZpbmVkIjplfX0se2tleToiZ2V0U3VnZ2VzdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZSxpLG8pe3ZhciBuPXQuZmluZEluT3B0aW9ucyhlLGksbywhMSkscz10LmZpbmRJbk9wdGlvbnMoZSxoLFtdLCEwKSxyPTgsbD00O3ZvaWQgMCE9PW4uaW5kZXhNYXRjaD9jb25zb2xlLmxvZygnJWNVbmtub3duIG9wdGlvbiBkZXRlY3RlZDogIicrZSsnIiBpbiAnK3QucHJpbnRMb2NhdGlvbihuLnBhdGgsZSwiIikrJ1BlcmhhcHMgaXQgd2FzIGluY29tcGxldGU/IERpZCB5b3UgbWVhbjogIicrbi5pbmRleE1hdGNoKyciP1xuXG4nLGQpOnMuZGlzdGFuY2U8PWwmJm4uZGlzdGFuY2U+cy5kaXN0YW5jZT9jb25zb2xlLmxvZygnJWNVbmtub3duIG9wdGlvbiBkZXRlY3RlZDogIicrZSsnIiBpbiAnK3QucHJpbnRMb2NhdGlvbihuLnBhdGgsZSwiIikrIlBlcmhhcHMgaXQgd2FzIG1pc3BsYWNlZD8gTWF0Y2hpbmcgb3B0aW9uIGZvdW5kIGF0OiAiK3QucHJpbnRMb2NhdGlvbihzLnBhdGgscy5jbG9zZXN0TWF0Y2gsIiIpLGQpOm4uZGlzdGFuY2U8PXI/Y29uc29sZS5sb2coJyVjVW5rbm93biBvcHRpb24gZGV0ZWN0ZWQ6ICInK2UrJyIuIERpZCB5b3UgbWVhbiAiJytuLmNsb3Nlc3RNYXRjaCsnIj8nK3QucHJpbnRMb2NhdGlvbihuLnBhdGgsZSksZCk6Y29uc29sZS5sb2coJyVjVW5rbm93biBvcHRpb24gZGV0ZWN0ZWQ6ICInK2UrJyIuIERpZCB5b3UgbWVhbiBvbmUgb2YgdGhlc2U6ICcrdC5wcmludChPYmplY3Qua2V5cyhpKSkrdC5wcmludExvY2F0aW9uKG8sZSksZCksYT0hMH19LHtrZXk6ImZpbmRJbk9wdGlvbnMiLHZhbHVlOmZ1bmN0aW9uKGUsaSxvKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdLHM9MWU5LGE9IiIsaD1bXSxkPWUudG9Mb3dlckNhc2UoKSxsPXZvaWQgMDtmb3IodmFyIGMgaW4gaSl7dmFyIHU9dm9pZCAwO2lmKHZvaWQgMCE9PWlbY10uX190eXBlX18mJm49PT0hMCl7dmFyIHA9dC5maW5kSW5PcHRpb25zKGUsaVtjXSxyLmNvcHlBbmRFeHRlbmRBcnJheShvLGMpKTtzPnAuZGlzdGFuY2UmJihhPXAuY2xvc2VzdE1hdGNoLGg9cC5wYXRoLHM9cC5kaXN0YW5jZSxsPXAuaW5kZXhNYXRjaCl9ZWxzZSBjLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihkKSE9PS0xJiYobD1jKSx1PXQubGV2ZW5zaHRlaW5EaXN0YW5jZShlLGMpLHM+dSYmKGE9YyxoPXIuY29weUFycmF5KG8pLHM9dSl9cmV0dXJue2Nsb3Nlc3RNYXRjaDphLHBhdGg6aCxkaXN0YW5jZTpzLGluZGV4TWF0Y2g6bH19fSx7a2V5OiJwcmludExvY2F0aW9uIix2YWx1ZTpmdW5jdGlvbih0LGUpe2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06IlByb2JsZW0gdmFsdWUgZm91bmQgYXQ6IFxuIixvPSJcblxuIitpKyJvcHRpb25zID0ge1xuIixuPTA7bjx0Lmxlbmd0aDtuKyspe2Zvcih2YXIgcz0wO3M8bisxO3MrKylvKz0iICAiO28rPXRbbl0rIjoge1xuIn1mb3IodmFyIHI9MDtyPHQubGVuZ3RoKzE7cisrKW8rPSIgICI7bys9ZSsiXG4iO2Zvcih2YXIgYT0wO2E8dC5sZW5ndGgrMTthKyspe2Zvcih2YXIgaD0wO2g8dC5sZW5ndGgtYTtoKyspbys9IiAgIjtvKz0ifVxuIn1yZXR1cm4gbysiXG5cbiJ9fSx7a2V5OiJwcmludCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHQpLnJlcGxhY2UoLyhcIil8KFxbKXwoXF0pfCgsIl9fdHlwZV9fIikvZywiIikucmVwbGFjZSgvKFwsKS9nLCIsICIpfX0se2tleToibGV2ZW5zaHRlaW5EaXN0YW5jZSIsdmFsdWU6ZnVuY3Rpb24odCxlKXtpZigwPT09dC5sZW5ndGgpcmV0dXJuIGUubGVuZ3RoO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gdC5sZW5ndGg7dmFyIGksbz1bXTtmb3IoaT0wO2k8PWUubGVuZ3RoO2krKylvW2ldPVtpXTt2YXIgbjtmb3Iobj0wO248PXQubGVuZ3RoO24rKylvWzBdW25dPW47Zm9yKGk9MTtpPD1lLmxlbmd0aDtpKyspZm9yKG49MTtuPD10Lmxlbmd0aDtuKyspZS5jaGFyQXQoaS0xKT09dC5jaGFyQXQobi0xKT9vW2ldW25dPW9baS0xXVtuLTFdOm9baV1bbl09TWF0aC5taW4ob1tpLTFdW24tMV0rMSxNYXRoLm1pbihvW2ldW24tMV0rMSxvW2ktMV1bbl0rMSkpO3JldHVybiBvW2UubGVuZ3RoXVt0Lmxlbmd0aF19fV0pLHR9KCk7ZS5kZWZhdWx0PWwsZS5wcmludFN0eWxlPWR9LGZ1bmN0aW9uKHQsZSxpKXtmdW5jdGlvbiBvKHQsZSl7dmFyIGk9YSgpLmhvdXJzKDApLm1pbnV0ZXMoMCkuc2Vjb25kcygwKS5taWxsaXNlY29uZHMoMCk7dGhpcy5zdGFydD1pLmNsb25lKCkuYWRkKC0zLCJkYXlzIikudmFsdWVPZigpLHRoaXMuZW5kPWkuY2xvbmUoKS5hZGQoNCwiZGF5cyIpLnZhbHVlT2YoKSx0aGlzLmJvZHk9dCx0aGlzLmRlbHRhRGlmZmVyZW5jZT0wLHRoaXMuc2NhbGVPZmZzZXQ9MCx0aGlzLnN0YXJ0VG9Gcm9udD0hMSx0aGlzLmVuZFRvRnJvbnQ9ITAsdGhpcy5kZWZhdWx0T3B0aW9ucz17cnRsOiExLHN0YXJ0Om51bGwsZW5kOm51bGwsbW9tZW50OmEsZGlyZWN0aW9uOiJob3Jpem9udGFsIixtb3ZlYWJsZTohMCx6b29tYWJsZTohMCxtaW46bnVsbCxtYXg6bnVsbCx6b29tTWluOjEwLHpvb21NYXg6MzE1MzZlMTB9LHRoaXMub3B0aW9ucz1yLmV4dGVuZCh7fSx0aGlzLmRlZmF1bHRPcHRpb25zKSx0aGlzLnByb3BzPXt0b3VjaDp7fX0sdGhpcy5hbmltYXRpb25UaW1lcj1udWxsLHRoaXMuYm9keS5lbWl0dGVyLm9uKCJwYW5zdGFydCIsdGhpcy5fb25EcmFnU3RhcnQuYmluZCh0aGlzKSksdGhpcy5ib2R5LmVtaXR0ZXIub24oInBhbm1vdmUiLHRoaXMuX29uRHJhZy5iaW5kKHRoaXMpKSx0aGlzLmJvZHkuZW1pdHRlci5vbigicGFuZW5kIix0aGlzLl9vbkRyYWdFbmQuYmluZCh0aGlzKSksdGhpcy5ib2R5LmVtaXR0ZXIub24oIm1vdXNld2hlZWwiLHRoaXMuX29uTW91c2VXaGVlbC5iaW5kKHRoaXMpKSx0aGlzLmJvZHkuZW1pdHRlci5vbigidG91Y2giLHRoaXMuX29uVG91Y2guYmluZCh0aGlzKSksdGhpcy5ib2R5LmVtaXR0ZXIub24oInBpbmNoIix0aGlzLl9vblBpbmNoLmJpbmQodGhpcykpLHRoaXMuc2V0T3B0aW9ucyhlKX1mdW5jdGlvbiBuKHQpe2lmKCJob3Jpem9udGFsIiE9dCYmInZlcnRpY2FsIiE9dCl0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGRpcmVjdGlvbiAiJyt0KyciLiBDaG9vc2UgImhvcml6b250YWwiIG9yICJ2ZXJ0aWNhbCIuJyl9dmFyIHM9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LHI9aSgxKSxhPShpKDMwKSxpKDIpKSxoPWkoMzMpLGQ9aSgzNCk7by5wcm90b3R5cGU9bmV3IGgsby5wcm90b3R5cGUuc2V0T3B0aW9ucz1mdW5jdGlvbih0KXtpZih0KXt2YXIgZT1bImRpcmVjdGlvbiIsIm1pbiIsIm1heCIsInpvb21NaW4iLCJ6b29tTWF4IiwibW92ZWFibGUiLCJ6b29tYWJsZSIsIm1vbWVudCIsImFjdGl2YXRlIiwiaGlkZGVuRGF0ZXMiLCJ6b29tS2V5IiwicnRsIiwiaG9yaXpvbnRhbFNjcm9sbCJdO3Iuc2VsZWN0aXZlRXh0ZW5kKGUsdGhpcy5vcHRpb25zLHQpLCgic3RhcnQiaW4gdHx8ImVuZCJpbiB0KSYmdGhpcy5zZXRSYW5nZSh0LnN0YXJ0LHQuZW5kKX19LG8ucHJvdG90eXBlLnNldFJhbmdlPWZ1bmN0aW9uKHQsZSxpLG8pe28hPT0hMCYmKG89ITEpO3ZhciBuPXZvaWQgMCE9dD9yLmNvbnZlcnQodCwiRGF0ZSIpLnZhbHVlT2YoKTpudWxsLGE9dm9pZCAwIT1lP3IuY29udmVydChlLCJEYXRlIikudmFsdWVPZigpOm51bGw7aWYodGhpcy5fY2FuY2VsQW5pbWF0aW9uKCksaSl7dmFyIGg9dGhpcyxsPXRoaXMuc3RhcnQsYz10aGlzLmVuZCx1PSJvYmplY3QiPT09KCJ1bmRlZmluZWQiPT10eXBlb2YgaT8idW5kZWZpbmVkIjpzKGkpKSYmImR1cmF0aW9uImluIGk/aS5kdXJhdGlvbjo1MDAscD0ib2JqZWN0Ij09PSgidW5kZWZpbmVkIj09dHlwZW9mIGk/InVuZGVmaW5lZCI6cyhpKSkmJiJlYXNpbmdGdW5jdGlvbiJpbiBpP2kuZWFzaW5nRnVuY3Rpb246ImVhc2VJbk91dFF1YWQiLGY9ci5lYXNpbmdGdW5jdGlvbnNbcF07aWYoIWYpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGVhc2luZyBmdW5jdGlvbiAiK0pTT04uc3RyaW5naWZ5KHApKyIuIENob29zZSBmcm9tOiAiK09iamVjdC5rZXlzKHIuZWFzaW5nRnVuY3Rpb25zKS5qb2luKCIsICIpKTt2YXIgbT0obmV3IERhdGUpLnZhbHVlT2YoKSx2PSExLGc9ZnVuY3Rpb24gdCgpe2lmKCFoLnByb3BzLnRvdWNoLmRyYWdnaW5nKXt2YXIgZT0obmV3IERhdGUpLnZhbHVlT2YoKSxpPWUtbSxzPWYoaS91KSxyPWk+dSxwPXJ8fG51bGw9PT1uP246bCsobi1sKSpzLGc9cnx8bnVsbD09PWE/YTpjKyhhLWMpKnM7eT1oLl9hcHBseVJhbmdlKHAsZyksZC51cGRhdGVIaWRkZW5EYXRlcyhoLm9wdGlvbnMubW9tZW50LGguYm9keSxoLm9wdGlvbnMuaGlkZGVuRGF0ZXMpLHY9dnx8eSx5JiZoLmJvZHkuZW1pdHRlci5lbWl0KCJyYW5nZWNoYW5nZSIse3N0YXJ0Om5ldyBEYXRlKGguc3RhcnQpLGVuZDpuZXcgRGF0ZShoLmVuZCksYnlVc2VyOm99KSxyP3YmJmguYm9keS5lbWl0dGVyLmVtaXQoInJhbmdlY2hhbmdlZCIse3N0YXJ0Om5ldyBEYXRlKGguc3RhcnQpLGVuZDpuZXcgRGF0ZShoLmVuZCksYnlVc2VyOm99KTpoLmFuaW1hdGlvblRpbWVyPXNldFRpbWVvdXQodCwyMCl9fTtyZXR1cm4gZygpfXZhciB5PXRoaXMuX2FwcGx5UmFuZ2UobixhKTtpZihkLnVwZGF0ZUhpZGRlbkRhdGVzKHRoaXMub3B0aW9ucy5tb21lbnQsdGhpcy5ib2R5LHRoaXMub3B0aW9ucy5oaWRkZW5EYXRlcykseSl7dmFyIGI9e3N0YXJ0Om5ldyBEYXRlKHRoaXMuc3RhcnQpLGVuZDpuZXcgRGF0ZSh0aGlzLmVuZCksYnlVc2VyOm99O3RoaXMuYm9keS5lbWl0dGVyLmVtaXQoInJhbmdlY2hhbmdlIixiKSx0aGlzLmJvZHkuZW1pdHRlci5lbWl0KCJyYW5nZWNoYW5nZWQiLGIpfX0sby5wcm90b3R5cGUuX2NhbmNlbEFuaW1hdGlvbj1mdW5jdGlvbigpe3RoaXMuYW5pbWF0aW9uVGltZXImJihjbGVhclRpbWVvdXQodGhpcy5hbmltYXRpb25UaW1lciksdGhpcy5hbmltYXRpb25UaW1lcj1udWxsKX0sby5wcm90b3R5cGUuX2FwcGx5UmFuZ2U9ZnVuY3Rpb24odCxlKXt2YXIgaSxvPW51bGwhPXQ/ci5jb252ZXJ0KHQsIkRhdGUiKS52YWx1ZU9mKCk6dGhpcy5zdGFydCxuPW51bGwhPWU/ci5jb252ZXJ0KGUsIkRhdGUiKS52YWx1ZU9mKCk6dGhpcy5lbmQscz1udWxsIT10aGlzLm9wdGlvbnMubWF4P3IuY29udmVydCh0aGlzLm9wdGlvbnMubWF4LCJEYXRlIikudmFsdWVPZigpOm51bGwsYT1udWxsIT10aGlzLm9wdGlvbnMubWluP3IuY29udmVydCh0aGlzLm9wdGlvbnMubWluLCJEYXRlIikudmFsdWVPZigpOm51bGw7aWYoaXNOYU4obyl8fG51bGw9PT1vKXRocm93IG5ldyBFcnJvcignSW52YWxpZCBzdGFydCAiJyt0KyciJyk7aWYoaXNOYU4obil8fG51bGw9PT1uKXRocm93IG5ldyBFcnJvcignSW52YWxpZCBlbmQgIicrZSsnIicpO2lmKG48byYmKG49byksbnVsbCE9PWEmJm88YSYmKGk9YS1vLG8rPWksbis9aSxudWxsIT1zJiZuPnMmJihuPXMpKSxudWxsIT09cyYmbj5zJiYoaT1uLXMsby09aSxuLT1pLG51bGwhPWEmJm88YSYmKG89YSkpLG51bGwhPT10aGlzLm9wdGlvbnMuem9vbU1pbil7dmFyIGg9cGFyc2VGbG9hdCh0aGlzLm9wdGlvbnMuem9vbU1pbik7aDwwJiYoaD0wKSxuLW88aCYmKHRoaXMuZW5kLXRoaXMuc3RhcnQ9PT1oJiZvPnRoaXMuc3RhcnQmJm48dGhpcy5lbmQ/KG89dGhpcy5zdGFydCxuPXRoaXMuZW5kKTooaT1oLShuLW8pLG8tPWkvMixuKz1pLzIpKX1pZihudWxsIT09dGhpcy5vcHRpb25zLnpvb21NYXgpe3ZhciBkPXBhcnNlRmxvYXQodGhpcy5vcHRpb25zLnpvb21NYXgpO2Q8MCYmKGQ9MCksbi1vPmQmJih0aGlzLmVuZC10aGlzLnN0YXJ0PT09ZCYmbzx0aGlzLnN0YXJ0JiZuPnRoaXMuZW5kPyhvPXRoaXMuc3RhcnQsbj10aGlzLmVuZCk6KGk9bi1vLWQsbys9aS8yLG4tPWkvMikpfXZhciBsPXRoaXMuc3RhcnQhPW98fHRoaXMuZW5kIT1uO3JldHVybiBvPj10aGlzLnN0YXJ0JiZvPD10aGlzLmVuZHx8bj49dGhpcy5zdGFydCYmbjw9dGhpcy5lbmR8fHRoaXMuc3RhcnQ+PW8mJnRoaXMuc3RhcnQ8PW58fHRoaXMuZW5kPj1vJiZ0aGlzLmVuZDw9bnx8dGhpcy5ib2R5LmVtaXR0ZXIuZW1pdCgiY2hlY2tSYW5nZWRJdGVtcyIpLHRoaXMuc3RhcnQ9byx0aGlzLmVuZD1uLGx9LG8ucHJvdG90eXBlLmdldFJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJue3N0YXJ0OnRoaXMuc3RhcnQsZW5kOnRoaXMuZW5kfX0sby5wcm90b3R5cGUuY29udmVyc2lvbj1mdW5jdGlvbih0LGUpe3JldHVybiBvLmNvbnZlcnNpb24odGhpcy5zdGFydCx0aGlzLmVuZCx0LGUpfSxvLmNvbnZlcnNpb249ZnVuY3Rpb24odCxlLGksbyl7cmV0dXJuIHZvaWQgMD09PW8mJihvPTApLDAhPWkmJmUtdCE9MD97b2Zmc2V0OnQsc2NhbGU6aS8oZS10LW8pfTp7b2Zmc2V0OjAsc2NhbGU6MX19LG8ucHJvdG90eXBlLl9vbkRyYWdTdGFydD1mdW5jdGlvbih0KXt0aGlzLmRlbHRhRGlmZmVyZW5jZT0wLHRoaXMucHJldmlvdXNEZWx0YT0wLHRoaXMub3B0aW9ucy5tb3ZlYWJsZSYmdGhpcy5faXNJbnNpZGVSYW5nZSh0KSYmdGhpcy5wcm9wcy50b3VjaC5hbGxvd0RyYWdnaW5nJiYodGhpcy5wcm9wcy50b3VjaC5zdGFydD10aGlzLnN0YXJ0LHRoaXMucHJvcHMudG91Y2guZW5kPXRoaXMuZW5kLHRoaXMucHJvcHMudG91Y2guZHJhZ2dpbmc9ITAsdGhpcy5ib2R5LmRvbS5yb290JiYodGhpcy5ib2R5LmRvbS5yb290LnN0eWxlLmN1cnNvcj0ibW92ZSIpKX0sby5wcm90b3R5cGUuX29uRHJhZz1mdW5jdGlvbih0KXtpZih0JiZ0aGlzLnByb3BzLnRvdWNoLmRyYWdnaW5nJiZ0aGlzLm9wdGlvbnMubW92ZWFibGUmJnRoaXMucHJvcHMudG91Y2guYWxsb3dEcmFnZ2luZyl7dmFyIGU9dGhpcy5vcHRpb25zLmRpcmVjdGlvbjtuKGUpO3ZhciBpPSJob3Jpem9udGFsIj09ZT90LmRlbHRhWDp0LmRlbHRhWTtpLT10aGlzLmRlbHRhRGlmZmVyZW5jZTt2YXIgbz10aGlzLnByb3BzLnRvdWNoLmVuZC10aGlzLnByb3BzLnRvdWNoLnN0YXJ0LHM9ZC5nZXRIaWRkZW5EdXJhdGlvbkJldHdlZW4odGhpcy5ib2R5LmhpZGRlbkRhdGVzLHRoaXMuc3RhcnQsdGhpcy5lbmQpO28tPXM7dmFyIHI9Imhvcml6b250YWwiPT1lP3RoaXMuYm9keS5kb21Qcm9wcy5jZW50ZXIud2lkdGg6dGhpcy5ib2R5LmRvbVByb3BzLmNlbnRlci5oZWlnaHQ7aWYodGhpcy5vcHRpb25zLnJ0bCl2YXIgYT1pL3IqbztlbHNlIHZhciBhPS1pL3Iqbzt2YXIgaD10aGlzLnByb3BzLnRvdWNoLnN0YXJ0K2EsbD10aGlzLnByb3BzLnRvdWNoLmVuZCthLGM9ZC5zbmFwQXdheUZyb21IaWRkZW4odGhpcy5ib2R5LmhpZGRlbkRhdGVzLGgsdGhpcy5wcmV2aW91c0RlbHRhLWksITApLHU9ZC5zbmFwQXdheUZyb21IaWRkZW4odGhpcy5ib2R5LmhpZGRlbkRhdGVzLGwsdGhpcy5wcmV2aW91c0RlbHRhLWksITApO2lmKGMhPWh8fHUhPWwpcmV0dXJuIHRoaXMuZGVsdGFEaWZmZXJlbmNlKz1pLAp0aGlzLnByb3BzLnRvdWNoLnN0YXJ0PWMsdGhpcy5wcm9wcy50b3VjaC5lbmQ9dSx2b2lkIHRoaXMuX29uRHJhZyh0KTt0aGlzLnByZXZpb3VzRGVsdGE9aSx0aGlzLl9hcHBseVJhbmdlKGgsbCk7dmFyIHA9bmV3IERhdGUodGhpcy5zdGFydCksZj1uZXcgRGF0ZSh0aGlzLmVuZCk7dGhpcy5ib2R5LmVtaXR0ZXIuZW1pdCgicmFuZ2VjaGFuZ2UiLHtzdGFydDpwLGVuZDpmLGJ5VXNlcjohMH0pLHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoInBhbm1vdmUiKX19LG8ucHJvdG90eXBlLl9vbkRyYWdFbmQ9ZnVuY3Rpb24odCl7dGhpcy5wcm9wcy50b3VjaC5kcmFnZ2luZyYmdGhpcy5vcHRpb25zLm1vdmVhYmxlJiZ0aGlzLnByb3BzLnRvdWNoLmFsbG93RHJhZ2dpbmcmJih0aGlzLnByb3BzLnRvdWNoLmRyYWdnaW5nPSExLHRoaXMuYm9keS5kb20ucm9vdCYmKHRoaXMuYm9keS5kb20ucm9vdC5zdHlsZS5jdXJzb3I9ImF1dG8iKSx0aGlzLmJvZHkuZW1pdHRlci5lbWl0KCJyYW5nZWNoYW5nZWQiLHtzdGFydDpuZXcgRGF0ZSh0aGlzLnN0YXJ0KSxlbmQ6bmV3IERhdGUodGhpcy5lbmQpLGJ5VXNlcjohMH0pKX0sby5wcm90b3R5cGUuX29uTW91c2VXaGVlbD1mdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCk7dmFyIGU9MDtpZih0LndoZWVsRGVsdGE/ZT10LndoZWVsRGVsdGEvMTIwOnQuZGV0YWlsJiYoZT0tdC5kZXRhaWwvMyksdGhpcy5vcHRpb25zLnpvb21LZXkmJiF0W3RoaXMub3B0aW9ucy56b29tS2V5XSYmdGhpcy5vcHRpb25zLnpvb21hYmxlfHwhdGhpcy5vcHRpb25zLnpvb21hYmxlJiZ0aGlzLm9wdGlvbnMubW92ZWFibGUpe2lmKHRoaXMub3B0aW9ucy5ob3Jpem9udGFsU2Nyb2xsKXt2YXIgaT1lKih0aGlzLmVuZC10aGlzLnN0YXJ0KS8yMCxvPXRoaXMuc3RhcnQtaSxuPXRoaXMuZW5kLWk7dGhpcy5zZXRSYW5nZShvLG4pfX1lbHNlIGlmKHRoaXMub3B0aW9ucy56b29tYWJsZSYmdGhpcy5vcHRpb25zLm1vdmVhYmxlJiZ0aGlzLl9pc0luc2lkZVJhbmdlKHQpJiZlKXt2YXIgcztzPWU8MD8xLWUvNToxLygxK2UvNSk7dmFyIHI9dGhpcy5nZXRQb2ludGVyKHt4OnQuY2xpZW50WCx5OnQuY2xpZW50WX0sdGhpcy5ib2R5LmRvbS5jZW50ZXIpLGE9dGhpcy5fcG9pbnRlclRvRGF0ZShyKTt0aGlzLnpvb20ocyxhLGUpfX0sby5wcm90b3R5cGUuX29uVG91Y2g9ZnVuY3Rpb24odCl7dGhpcy5wcm9wcy50b3VjaC5zdGFydD10aGlzLnN0YXJ0LHRoaXMucHJvcHMudG91Y2guZW5kPXRoaXMuZW5kLHRoaXMucHJvcHMudG91Y2guYWxsb3dEcmFnZ2luZz0hMCx0aGlzLnByb3BzLnRvdWNoLmNlbnRlcj1udWxsLHRoaXMuc2NhbGVPZmZzZXQ9MCx0aGlzLmRlbHRhRGlmZmVyZW5jZT0wfSxvLnByb3RvdHlwZS5fb25QaW5jaD1mdW5jdGlvbih0KXtpZih0aGlzLm9wdGlvbnMuem9vbWFibGUmJnRoaXMub3B0aW9ucy5tb3ZlYWJsZSl7dGhpcy5wcm9wcy50b3VjaC5hbGxvd0RyYWdnaW5nPSExLHRoaXMucHJvcHMudG91Y2guY2VudGVyfHwodGhpcy5wcm9wcy50b3VjaC5jZW50ZXI9dGhpcy5nZXRQb2ludGVyKHQuY2VudGVyLHRoaXMuYm9keS5kb20uY2VudGVyKSk7dmFyIGU9MS8odC5zY2FsZSt0aGlzLnNjYWxlT2Zmc2V0KSxpPXRoaXMuX3BvaW50ZXJUb0RhdGUodGhpcy5wcm9wcy50b3VjaC5jZW50ZXIpLG89ZC5nZXRIaWRkZW5EdXJhdGlvbkJldHdlZW4odGhpcy5ib2R5LmhpZGRlbkRhdGVzLHRoaXMuc3RhcnQsdGhpcy5lbmQpLG49ZC5nZXRIaWRkZW5EdXJhdGlvbkJlZm9yZSh0aGlzLm9wdGlvbnMubW9tZW50LHRoaXMuYm9keS5oaWRkZW5EYXRlcyx0aGlzLGkpLHM9by1uLHI9aS1uKyh0aGlzLnByb3BzLnRvdWNoLnN0YXJ0LShpLW4pKSplLGE9aStzKyh0aGlzLnByb3BzLnRvdWNoLmVuZC0oaStzKSkqZTt0aGlzLnN0YXJ0VG9Gcm9udD0xLWU8PTAsdGhpcy5lbmRUb0Zyb250PWUtMTw9MDt2YXIgaD1kLnNuYXBBd2F5RnJvbUhpZGRlbih0aGlzLmJvZHkuaGlkZGVuRGF0ZXMsciwxLWUsITApLGw9ZC5zbmFwQXdheUZyb21IaWRkZW4odGhpcy5ib2R5LmhpZGRlbkRhdGVzLGEsZS0xLCEwKTtoPT1yJiZsPT1hfHwodGhpcy5wcm9wcy50b3VjaC5zdGFydD1oLHRoaXMucHJvcHMudG91Y2guZW5kPWwsdGhpcy5zY2FsZU9mZnNldD0xLXQuc2NhbGUscj1oLGE9bCksdGhpcy5zZXRSYW5nZShyLGEsITEsITApLHRoaXMuc3RhcnRUb0Zyb250PSExLHRoaXMuZW5kVG9Gcm9udD0hMH19LG8ucHJvdG90eXBlLl9pc0luc2lkZVJhbmdlPWZ1bmN0aW9uKHQpe3ZhciBlPXQuY2VudGVyP3QuY2VudGVyLng6dC5jbGllbnRYO2lmKHRoaXMub3B0aW9ucy5ydGwpdmFyIGk9ZS1yLmdldEFic29sdXRlTGVmdCh0aGlzLmJvZHkuZG9tLmNlbnRlckNvbnRhaW5lcik7ZWxzZSB2YXIgaT1yLmdldEFic29sdXRlUmlnaHQodGhpcy5ib2R5LmRvbS5jZW50ZXJDb250YWluZXIpLWU7dmFyIG89dGhpcy5ib2R5LnV0aWwudG9UaW1lKGkpO3JldHVybiBvPj10aGlzLnN0YXJ0JiZvPD10aGlzLmVuZH0sby5wcm90b3R5cGUuX3BvaW50ZXJUb0RhdGU9ZnVuY3Rpb24odCl7dmFyIGUsaT10aGlzLm9wdGlvbnMuZGlyZWN0aW9uO2lmKG4oaSksImhvcml6b250YWwiPT1pKXJldHVybiB0aGlzLmJvZHkudXRpbC50b1RpbWUodC54KS52YWx1ZU9mKCk7dmFyIG89dGhpcy5ib2R5LmRvbVByb3BzLmNlbnRlci5oZWlnaHQ7cmV0dXJuIGU9dGhpcy5jb252ZXJzaW9uKG8pLHQueS9lLnNjYWxlK2Uub2Zmc2V0fSxvLnByb3RvdHlwZS5nZXRQb2ludGVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMub3B0aW9ucy5ydGw/e3g6ci5nZXRBYnNvbHV0ZVJpZ2h0KGUpLXQueCx5OnQueS1yLmdldEFic29sdXRlVG9wKGUpfTp7eDp0Lngtci5nZXRBYnNvbHV0ZUxlZnQoZSkseTp0Lnktci5nZXRBYnNvbHV0ZVRvcChlKX19LG8ucHJvdG90eXBlLnpvb209ZnVuY3Rpb24odCxlLGkpe251bGw9PWUmJihlPSh0aGlzLnN0YXJ0K3RoaXMuZW5kKS8yKTt2YXIgbz1kLmdldEhpZGRlbkR1cmF0aW9uQmV0d2Vlbih0aGlzLmJvZHkuaGlkZGVuRGF0ZXMsdGhpcy5zdGFydCx0aGlzLmVuZCksbj1kLmdldEhpZGRlbkR1cmF0aW9uQmVmb3JlKHRoaXMub3B0aW9ucy5tb21lbnQsdGhpcy5ib2R5LmhpZGRlbkRhdGVzLHRoaXMsZSkscz1vLW4scj1lLW4rKHRoaXMuc3RhcnQtKGUtbikpKnQsYT1lK3MrKHRoaXMuZW5kLShlK3MpKSp0O3RoaXMuc3RhcnRUb0Zyb250PSEoaT4wKSx0aGlzLmVuZFRvRnJvbnQ9ISgtaT4wKTt2YXIgaD1kLnNuYXBBd2F5RnJvbUhpZGRlbih0aGlzLmJvZHkuaGlkZGVuRGF0ZXMscixpLCEwKSxsPWQuc25hcEF3YXlGcm9tSGlkZGVuKHRoaXMuYm9keS5oaWRkZW5EYXRlcyxhLC1pLCEwKTtoPT1yJiZsPT1hfHwocj1oLGE9bCksdGhpcy5zZXRSYW5nZShyLGEsITEsITApLHRoaXMuc3RhcnRUb0Zyb250PSExLHRoaXMuZW5kVG9Gcm9udD0hMH0sby5wcm90b3R5cGUubW92ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmVuZC10aGlzLnN0YXJ0LGk9dGhpcy5zdGFydCtlKnQsbz10aGlzLmVuZCtlKnQ7dGhpcy5zdGFydD1pLHRoaXMuZW5kPW99LG8ucHJvdG90eXBlLm1vdmVUbz1mdW5jdGlvbih0KXt2YXIgZT0odGhpcy5zdGFydCt0aGlzLmVuZCkvMixpPWUtdCxvPXRoaXMuc3RhcnQtaSxuPXRoaXMuZW5kLWk7dGhpcy5zZXRSYW5nZShvLG4pfSx0LmV4cG9ydHM9b30sZnVuY3Rpb24odCxlLGkpe2Z1bmN0aW9uIG8odCxlKXt0aGlzLm9wdGlvbnM9bnVsbCx0aGlzLnByb3BzPW51bGx9dmFyIG49aSgxKTtvLnByb3RvdHlwZS5zZXRPcHRpb25zPWZ1bmN0aW9uKHQpe3QmJm4uZXh0ZW5kKHRoaXMub3B0aW9ucyx0KX0sby5wcm90b3R5cGUucmVkcmF3PWZ1bmN0aW9uKCl7cmV0dXJuITF9LG8ucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt9LG8ucHJvdG90eXBlLl9pc1Jlc2l6ZWQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnByb3BzLl9wcmV2aW91c1dpZHRoIT09dGhpcy5wcm9wcy53aWR0aHx8dGhpcy5wcm9wcy5fcHJldmlvdXNIZWlnaHQhPT10aGlzLnByb3BzLmhlaWdodDtyZXR1cm4gdGhpcy5wcm9wcy5fcHJldmlvdXNXaWR0aD10aGlzLnByb3BzLndpZHRoLHRoaXMucHJvcHMuX3ByZXZpb3VzSGVpZ2h0PXRoaXMucHJvcHMuaGVpZ2h0LHR9LHQuZXhwb3J0cz1vfSxmdW5jdGlvbih0LGUpe2UuY29udmVydEhpZGRlbk9wdGlvbnM9ZnVuY3Rpb24odCxpLG8pe2lmKG8mJiFBcnJheS5pc0FycmF5KG8pKXJldHVybiBlLmNvbnZlcnRIaWRkZW5PcHRpb25zKHQsaSxbb10pO2lmKGkuaGlkZGVuRGF0ZXM9W10sbyYmMT09QXJyYXkuaXNBcnJheShvKSl7Zm9yKHZhciBuPTA7bjxvLmxlbmd0aDtuKyspaWYodm9pZCAwPT09b1tuXS5yZXBlYXQpe3ZhciBzPXt9O3Muc3RhcnQ9dChvW25dLnN0YXJ0KS50b0RhdGUoKS52YWx1ZU9mKCkscy5lbmQ9dChvW25dLmVuZCkudG9EYXRlKCkudmFsdWVPZigpLGkuaGlkZGVuRGF0ZXMucHVzaChzKX1pLmhpZGRlbkRhdGVzLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5zdGFydC1lLnN0YXJ0fSl9fSxlLnVwZGF0ZUhpZGRlbkRhdGVzPWZ1bmN0aW9uKHQsaSxvKXtpZihvJiYhQXJyYXkuaXNBcnJheShvKSlyZXR1cm4gZS51cGRhdGVIaWRkZW5EYXRlcyh0LGksW29dKTtpZihvJiZ2b2lkIDAhPT1pLmRvbVByb3BzLmNlbnRlckNvbnRhaW5lci53aWR0aCl7ZS5jb252ZXJ0SGlkZGVuT3B0aW9ucyh0LGksbyk7Zm9yKHZhciBuPXQoaS5yYW5nZS5zdGFydCkscz10KGkucmFuZ2UuZW5kKSxyPWkucmFuZ2UuZW5kLWkucmFuZ2Uuc3RhcnQsYT1yL2kuZG9tUHJvcHMuY2VudGVyQ29udGFpbmVyLndpZHRoLGg9MDtoPG8ubGVuZ3RoO2grKylpZih2b2lkIDAhPT1vW2hdLnJlcGVhdCl7dmFyIGQ9dChvW2hdLnN0YXJ0KSxsPXQob1toXS5lbmQpO2lmKCJJbnZhbGlkIERhdGUiPT1kLl9kKXRocm93IG5ldyBFcnJvcigiU3VwcGxpZWQgc3RhcnQgZGF0ZSBpcyBub3QgdmFsaWQ6ICIrb1toXS5zdGFydCk7aWYoIkludmFsaWQgRGF0ZSI9PWwuX2QpdGhyb3cgbmV3IEVycm9yKCJTdXBwbGllZCBlbmQgZGF0ZSBpcyBub3QgdmFsaWQ6ICIrb1toXS5lbmQpO3ZhciBjPWwtZDtpZihjPj00KmEpe3ZhciB1PTAscD1zLmNsb25lKCk7c3dpdGNoKG9baF0ucmVwZWF0KXtjYXNlImRhaWx5IjpkLmRheSgpIT1sLmRheSgpJiYodT0xKSxkLmRheU9mWWVhcihuLmRheU9mWWVhcigpKSxkLnllYXIobi55ZWFyKCkpLGQuc3VidHJhY3QoNywiZGF5cyIpLGwuZGF5T2ZZZWFyKG4uZGF5T2ZZZWFyKCkpLGwueWVhcihuLnllYXIoKSksbC5zdWJ0cmFjdCg3LXUsImRheXMiKSxwLmFkZCgxLCJ3ZWVrcyIpO2JyZWFrO2Nhc2Uid2Vla2x5Ijp2YXIgZj1sLmRpZmYoZCwiZGF5cyIpLG09ZC5kYXkoKTtkLmRhdGUobi5kYXRlKCkpLGQubW9udGgobi5tb250aCgpKSxkLnllYXIobi55ZWFyKCkpLGw9ZC5jbG9uZSgpLGQuZGF5KG0pLGwuZGF5KG0pLGwuYWRkKGYsImRheXMiKSxkLnN1YnRyYWN0KDEsIndlZWtzIiksbC5zdWJ0cmFjdCgxLCJ3ZWVrcyIpLHAuYWRkKDEsIndlZWtzIik7YnJlYWs7Y2FzZSJtb250aGx5IjpkLm1vbnRoKCkhPWwubW9udGgoKSYmKHU9MSksZC5tb250aChuLm1vbnRoKCkpLGQueWVhcihuLnllYXIoKSksZC5zdWJ0cmFjdCgxLCJtb250aHMiKSxsLm1vbnRoKG4ubW9udGgoKSksbC55ZWFyKG4ueWVhcigpKSxsLnN1YnRyYWN0KDEsIm1vbnRocyIpLGwuYWRkKHUsIm1vbnRocyIpLHAuYWRkKDEsIm1vbnRocyIpO2JyZWFrO2Nhc2UieWVhcmx5IjpkLnllYXIoKSE9bC55ZWFyKCkmJih1PTEpLGQueWVhcihuLnllYXIoKSksZC5zdWJ0cmFjdCgxLCJ5ZWFycyIpLGwueWVhcihuLnllYXIoKSksbC5zdWJ0cmFjdCgxLCJ5ZWFycyIpLGwuYWRkKHUsInllYXJzIikscC5hZGQoMSwieWVhcnMiKTticmVhaztkZWZhdWx0OnJldHVybiB2b2lkIGNvbnNvbGUubG9nKCJXcm9uZyByZXBlYXQgZm9ybWF0LCBhbGxvd2VkIGFyZTogZGFpbHksIHdlZWtseSwgbW9udGhseSwgeWVhcmx5LiBHaXZlbjoiLG9baF0ucmVwZWF0KX1mb3IoO2Q8cDspc3dpdGNoKGkuaGlkZGVuRGF0ZXMucHVzaCh7c3RhcnQ6ZC52YWx1ZU9mKCksZW5kOmwudmFsdWVPZigpfSksb1toXS5yZXBlYXQpe2Nhc2UiZGFpbHkiOmQuYWRkKDEsImRheXMiKSxsLmFkZCgxLCJkYXlzIik7YnJlYWs7Y2FzZSJ3ZWVrbHkiOmQuYWRkKDEsIndlZWtzIiksbC5hZGQoMSwid2Vla3MiKTticmVhaztjYXNlIm1vbnRobHkiOmQuYWRkKDEsIm1vbnRocyIpLGwuYWRkKDEsIm1vbnRocyIpO2JyZWFrO2Nhc2UieWVhcmx5IjpkLmFkZCgxLCJ5IiksbC5hZGQoMSwieSIpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIHZvaWQgY29uc29sZS5sb2coIldyb25nIHJlcGVhdCBmb3JtYXQsIGFsbG93ZWQgYXJlOiBkYWlseSwgd2Vla2x5LCBtb250aGx5LCB5ZWFybHkuIEdpdmVuOiIsb1toXS5yZXBlYXQpfWkuaGlkZGVuRGF0ZXMucHVzaCh7c3RhcnQ6ZC52YWx1ZU9mKCksZW5kOmwudmFsdWVPZigpfSl9fWUucmVtb3ZlRHVwbGljYXRlcyhpKTt2YXIgdj1lLmlzSGlkZGVuKGkucmFuZ2Uuc3RhcnQsaS5oaWRkZW5EYXRlcyksZz1lLmlzSGlkZGVuKGkucmFuZ2UuZW5kLGkuaGlkZGVuRGF0ZXMpLHk9aS5yYW5nZS5zdGFydCxiPWkucmFuZ2UuZW5kOzE9PXYuaGlkZGVuJiYoeT0xPT1pLnJhbmdlLnN0YXJ0VG9Gcm9udD92LnN0YXJ0RGF0ZS0xOnYuZW5kRGF0ZSsxKSwxPT1nLmhpZGRlbiYmKGI9MT09aS5yYW5nZS5lbmRUb0Zyb250P2cuc3RhcnREYXRlLTE6Zy5lbmREYXRlKzEpLDEhPXYuaGlkZGVuJiYxIT1nLmhpZGRlbnx8aS5yYW5nZS5fYXBwbHlSYW5nZSh5LGIpfX0sZS5yZW1vdmVEdXBsaWNhdGVzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmhpZGRlbkRhdGVzLGk9W10sbz0wO288ZS5sZW5ndGg7bysrKWZvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKW8hPW4mJjEhPWVbbl0ucmVtb3ZlJiYxIT1lW29dLnJlbW92ZSYmKGVbbl0uc3RhcnQ+PWVbb10uc3RhcnQmJmVbbl0uZW5kPD1lW29dLmVuZD9lW25dLnJlbW92ZT0hMDplW25dLnN0YXJ0Pj1lW29dLnN0YXJ0JiZlW25dLnN0YXJ0PD1lW29dLmVuZD8oZVtvXS5lbmQ9ZVtuXS5lbmQsZVtuXS5yZW1vdmU9ITApOmVbbl0uZW5kPj1lW29dLnN0YXJ0JiZlW25dLmVuZDw9ZVtvXS5lbmQmJihlW29dLnN0YXJ0PWVbbl0uc3RhcnQsZVtuXS5yZW1vdmU9ITApKTtmb3IodmFyIG89MDtvPGUubGVuZ3RoO28rKyllW29dLnJlbW92ZSE9PSEwJiZpLnB1c2goZVtvXSk7dC5oaWRkZW5EYXRlcz1pLHQuaGlkZGVuRGF0ZXMuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LnN0YXJ0LWUuc3RhcnR9KX0sZS5wcmludERhdGVzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKWNvbnNvbGUubG9nKGUsbmV3IERhdGUodFtlXS5zdGFydCksbmV3IERhdGUodFtlXS5lbmQpLHRbZV0uc3RhcnQsdFtlXS5lbmQsdFtlXS5yZW1vdmUpfSxlLnN0ZXBPdmVySGlkZGVuRGF0ZXM9ZnVuY3Rpb24odCxlLGkpe2Zvcih2YXIgbz0hMSxuPWUuY3VycmVudC52YWx1ZU9mKCkscz0wO3M8ZS5oaWRkZW5EYXRlcy5sZW5ndGg7cysrKXt2YXIgcj1lLmhpZGRlbkRhdGVzW3NdLnN0YXJ0LGE9ZS5oaWRkZW5EYXRlc1tzXS5lbmQ7aWYobj49ciYmbjxhKXtvPSEwO2JyZWFrfX1pZigxPT1vJiZuPGUuX2VuZC52YWx1ZU9mKCkmJm4hPWkpe3ZhciBoPXQoaSksZD10KGEpO2gueWVhcigpIT1kLnllYXIoKT9lLnN3aXRjaGVkWWVhcj0hMDpoLm1vbnRoKCkhPWQubW9udGgoKT9lLnN3aXRjaGVkTW9udGg9ITA6aC5kYXlPZlllYXIoKSE9ZC5kYXlPZlllYXIoKSYmKGUuc3dpdGNoZWREYXk9ITApLGUuY3VycmVudD1kfX0sZS50b1NjcmVlbj1mdW5jdGlvbih0LGksbyl7aWYoMD09dC5ib2R5LmhpZGRlbkRhdGVzLmxlbmd0aCl7dmFyIG49dC5yYW5nZS5jb252ZXJzaW9uKG8pO3JldHVybihpLnZhbHVlT2YoKS1uLm9mZnNldCkqbi5zY2FsZX12YXIgcz1lLmlzSGlkZGVuKGksdC5ib2R5LmhpZGRlbkRhdGVzKTsxPT1zLmhpZGRlbiYmKGk9cy5zdGFydERhdGUpO3ZhciByPWUuZ2V0SGlkZGVuRHVyYXRpb25CZXR3ZWVuKHQuYm9keS5oaWRkZW5EYXRlcyx0LnJhbmdlLnN0YXJ0LHQucmFuZ2UuZW5kKTtpZihpPHQucmFuZ2Uuc3RhcnQpe3ZhciBuPXQucmFuZ2UuY29udmVyc2lvbihvLHIpLGE9ZS5nZXRIaWRkZW5EdXJhdGlvbkJlZm9yZVN0YXJ0KHQuYm9keS5oaWRkZW5EYXRlcyxpLG4ub2Zmc2V0KTtyZXR1cm4gaT10Lm9wdGlvbnMubW9tZW50KGkpLnRvRGF0ZSgpLnZhbHVlT2YoKSxpKz1hLC0obi5vZmZzZXQtaS52YWx1ZU9mKCkpKm4uc2NhbGV9aWYoaT50LnJhbmdlLmVuZCl7dmFyIGg9e3N0YXJ0OnQucmFuZ2Uuc3RhcnQsZW5kOml9O2k9ZS5jb3JyZWN0VGltZUZvckhpZGRlbih0Lm9wdGlvbnMubW9tZW50LHQuYm9keS5oaWRkZW5EYXRlcyxoLGkpO3ZhciBuPXQucmFuZ2UuY29udmVyc2lvbihvLHIpO3JldHVybihpLnZhbHVlT2YoKS1uLm9mZnNldCkqbi5zY2FsZX1pPWUuY29ycmVjdFRpbWVGb3JIaWRkZW4odC5vcHRpb25zLm1vbWVudCx0LmJvZHkuaGlkZGVuRGF0ZXMsdC5yYW5nZSxpKTt2YXIgbj10LnJhbmdlLmNvbnZlcnNpb24obyxyKTtyZXR1cm4oaS52YWx1ZU9mKCktbi5vZmZzZXQpKm4uc2NhbGV9LGUudG9UaW1lPWZ1bmN0aW9uKHQsaSxvKXtpZigwPT10LmJvZHkuaGlkZGVuRGF0ZXMubGVuZ3RoKXt2YXIgbj10LnJhbmdlLmNvbnZlcnNpb24obyk7cmV0dXJuIG5ldyBEYXRlKGkvbi5zY2FsZStuLm9mZnNldCl9dmFyIHM9ZS5nZXRIaWRkZW5EdXJhdGlvbkJldHdlZW4odC5ib2R5LmhpZGRlbkRhdGVzLHQucmFuZ2Uuc3RhcnQsdC5yYW5nZS5lbmQpLHI9dC5yYW5nZS5lbmQtdC5yYW5nZS5zdGFydC1zLGE9cippL28saD1lLmdldEFjY3VtdWxhdGVkSGlkZGVuRHVyYXRpb24odC5ib2R5LmhpZGRlbkRhdGVzLHQucmFuZ2UsYSksZD1uZXcgRGF0ZShoK2ErdC5yYW5nZS5zdGFydCk7cmV0dXJuIGR9LGUuZ2V0SGlkZGVuRHVyYXRpb25CZXR3ZWVuPWZ1bmN0aW9uKHQsZSxpKXtmb3IodmFyIG89MCxuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBzPXRbbl0uc3RhcnQscj10W25dLmVuZDtzPj1lJiZyPGkmJihvKz1yLXMpfXJldHVybiBvfSxlLmdldEhpZGRlbkR1cmF0aW9uQmVmb3JlU3RhcnQ9ZnVuY3Rpb24odCxlLGkpe2Zvcih2YXIgbz0wLG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHM9dFtuXS5zdGFydCxyPXRbbl0uZW5kO3M+PWUmJnI8PWkmJihvKz1yLXMpfXJldHVybiBvfSxlLmNvcnJlY3RUaW1lRm9ySGlkZGVuPWZ1bmN0aW9uKHQsaSxvLG4pe3JldHVybiBuPXQobikudG9EYXRlKCkudmFsdWVPZigpLG4tPWUuZ2V0SGlkZGVuRHVyYXRpb25CZWZvcmUodCxpLG8sbil9LGUuZ2V0SGlkZGVuRHVyYXRpb25CZWZvcmU9ZnVuY3Rpb24odCxlLGksbyl7dmFyIG49MDtvPXQobykudG9EYXRlKCkudmFsdWVPZigpO2Zvcih2YXIgcz0wO3M8ZS5sZW5ndGg7cysrKXt2YXIgcj1lW3NdLnN0YXJ0LGE9ZVtzXS5lbmQ7cj49aS5zdGFydCYmYTxpLmVuZCYmbz49YSYmKG4rPWEtcil9cmV0dXJuIG59LGUuZ2V0QWNjdW11bGF0ZWRIaWRkZW5EdXJhdGlvbj1mdW5jdGlvbih0LGUsaSl7Zm9yKHZhciBvPTAsbj0wLHM9ZS5zdGFydCxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBhPXRbcl0uc3RhcnQsaD10W3JdLmVuZDtpZihhPj1lLnN0YXJ0JiZoPGUuZW5kKXtpZihuKz1hLXMscz1oLG4+PWkpYnJlYWs7bys9aC1hfX1yZXR1cm4gb30sZS5zbmFwQXdheUZyb21IaWRkZW49ZnVuY3Rpb24odCxpLG8sbil7dmFyIHM9ZS5pc0hpZGRlbihpLHQpO3JldHVybiAxPT1zLmhpZGRlbj9vPDA/MT09bj9zLnN0YXJ0RGF0ZS0ocy5lbmREYXRlLWkpLTE6cy5zdGFydERhdGUtMToxPT1uP3MuZW5kRGF0ZSsoaS1zLnN0YXJ0RGF0ZSkrMTpzLmVuZERhdGUrMTppfSxlLmlzSGlkZGVuPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBvPWVbaV0uc3RhcnQsbj1lW2ldLmVuZDtpZih0Pj1vJiZ0PG4pcmV0dXJue2hpZGRlbjohMCxzdGFydERhdGU6byxlbmREYXRlOm59fXJldHVybntoaWRkZW46ITEsc3RhcnREYXRlOm8sZW5kRGF0ZTpufX19LGZ1bmN0aW9uKHQsZSxpKXtmdW5jdGlvbiBvKCl7fXZhciBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxzPWkoMTMpLHI9aSgyMiksYT1pKDMwKSxoPWkoMSksZD0oaSg5KSxpKDExKSxpKDMyKSxpKDM2KSxpKDQ2KSksbD1pKDQ3KSxjPWkoMzQpLHU9aSg0OCk7cyhvLnByb3RvdHlwZSksby5wcm90b3R5cGUuX2NyZWF0ZT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe2lmKHRoaXMuaXNBY3RpdmUoKSYmdGhpcy5lbWl0KCJtb3VzZXdoZWVsIix0KSx0aGlzLm9wdGlvbnMuem9vbUtleSYmIXRbdGhpcy5vcHRpb25zLnpvb21LZXldJiYhdGhpcy5vcHRpb25zLmhvcml6b250YWxTY3JvbGwpe3ZhciBlPTA7dC53aGVlbERlbHRhP2U9dC53aGVlbERlbHRhLzEyMDp0LmRldGFpbCYmKGU9LXQuZGV0YWlsLzMpO3ZhciBpPXRoaXMucHJvcHMuc2Nyb2xsVG9wLG89aSsxMjAqZTt0aGlzLmlzQWN0aXZlKCkmJih0aGlzLl9zZXRTY3JvbGxUb3AobyksdGhpcy5vcHRpb25zLnZlcnRpY2FsU2Nyb2xsJiYodGhpcy5kb20ubGVmdC5wYXJlbnROb2RlLnNjcm9sbFRvcD0tbyx0aGlzLmRvbS5yaWdodC5wYXJlbnROb2RlLnNjcm9sbFRvcD0tbyksdGhpcy5fcmVkcmF3KCksdGhpcy5lbWl0KCJzY3JvbGwiLHQpKSx0LnByZXZlbnREZWZhdWx0KCl9fWZ1bmN0aW9uIGkodCl7aWYocy5vcHRpb25zLnZlcnRpY2FsU2Nyb2xsJiYodC5wcmV2ZW50RGVmYXVsdCgpLHMuaXNBY3RpdmUoKSkpe3ZhciBlPS10LnRhcmdldC5zY3JvbGxUb3A7cy5fc2V0U2Nyb2xsVG9wKGUpLHMuX3JlZHJhdygpLHMuZW1pdCgic2Nyb2xsU2lkZSIsdCl9fWZ1bmN0aW9uIG8odCl7aWYodC5wcmV2ZW50RGVmYXVsdCYmdC5wcmV2ZW50RGVmYXVsdCgpLHQudGFyZ2V0LmNsYXNzTmFtZS5pbmNsdWRlcygidmlzIikmJiFsKXJldHVybiB0LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0PSJtb3ZlIixsPSEwLCExfWZ1bmN0aW9uIG4odCl7dHJ5e3ZhciBlPUpTT04ucGFyc2UodC5kYXRhVHJhbnNmZXIuZ2V0RGF0YSgidGV4dC9wbGFpbiIpKTtpZighZS5jb250ZW50KXJldHVybn1jYXRjaCh0KXtyZXR1cm4hMX1yZXR1cm4gbD0hMSx0LmNlbnRlcj17eDp0LngseTp0Lnl9LHMuaXRlbVNldC5fb25BZGRJdGVtKHQpLCExfXRoaXMuZG9tPXt9LHRoaXMuZG9tLmNvbnRhaW5lcj10LHRoaXMuZG9tLnJvb3Q9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5kb20uYmFja2dyb3VuZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmRvbS5iYWNrZ3JvdW5kVmVydGljYWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5kb20uYmFja2dyb3VuZEhvcml6b250YWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5kb20uY2VudGVyQ29udGFpbmVyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuZG9tLmxlZnRDb250YWluZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5kb20ucmlnaHRDb250YWluZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5kb20uY2VudGVyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuZG9tLmxlZnQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5kb20ucmlnaHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5kb20udG9wPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuZG9tLmJvdHRvbT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmRvbS5zaGFkb3dUb3A9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5kb20uc2hhZG93Qm90dG9tPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuZG9tLnNoYWRvd1RvcExlZnQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5kb20uc2hhZG93Qm90dG9tTGVmdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmRvbS5zaGFkb3dUb3BSaWdodD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmRvbS5zaGFkb3dCb3R0b21SaWdodD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmRvbS5yb290LmNsYXNzTmFtZT0idmlzLXRpbWVsaW5lIix0aGlzLmRvbS5iYWNrZ3JvdW5kLmNsYXNzTmFtZT0idmlzLXBhbmVsIHZpcy1iYWNrZ3JvdW5kIix0aGlzLmRvbS5iYWNrZ3JvdW5kVmVydGljYWwuY2xhc3NOYW1lPSJ2aXMtcGFuZWwgdmlzLWJhY2tncm91bmQgdmlzLXZlcnRpY2FsIix0aGlzLmRvbS5iYWNrZ3JvdW5kSG9yaXpvbnRhbC5jbGFzc05hbWU9InZpcy1wYW5lbCB2aXMtYmFja2dyb3VuZCB2aXMtaG9yaXpvbnRhbCIsdGhpcy5kb20uY2VudGVyQ29udGFpbmVyLmNsYXNzTmFtZT0idmlzLXBhbmVsIHZpcy1jZW50ZXIiLHRoaXMuZG9tLmxlZnRDb250YWluZXIuY2xhc3NOYW1lPSJ2aXMtcGFuZWwgdmlzLWxlZnQiLHRoaXMuZG9tLnJpZ2h0Q29udGFpbmVyLmNsYXNzTmFtZT0idmlzLXBhbmVsIHZpcy1yaWdodCIsdGhpcy5kb20udG9wLmNsYXNzTmFtZT0idmlzLXBhbmVsIHZpcy10b3AiLHRoaXMuZG9tLmJvdHRvbS5jbGFzc05hbWU9InZpcy1wYW5lbCB2aXMtYm90dG9tIix0aGlzLmRvbS5sZWZ0LmNsYXNzTmFtZT0idmlzLWNvbnRlbnQiLHRoaXMuZG9tLmNlbnRlci5jbGFzc05hbWU9InZpcy1jb250ZW50Iix0aGlzLmRvbS5yaWdodC5jbGFzc05hbWU9InZpcy1jb250ZW50Iix0aGlzLmRvbS5zaGFkb3dUb3AuY2xhc3NOYW1lPSJ2aXMtc2hhZG93IHZpcy10b3AiLHRoaXMuZG9tLnNoYWRvd0JvdHRvbS5jbGFzc05hbWU9InZpcy1zaGFkb3cgdmlzLWJvdHRvbSIsdGhpcy5kb20uc2hhZG93VG9wTGVmdC5jbGFzc05hbWU9InZpcy1zaGFkb3cgdmlzLXRvcCIsdGhpcy5kb20uc2hhZG93Qm90dG9tTGVmdC5jbGFzc05hbWU9InZpcy1zaGFkb3cgdmlzLWJvdHRvbSIsdGhpcy5kb20uc2hhZG93VG9wUmlnaHQuY2xhc3NOYW1lPSJ2aXMtc2hhZG93IHZpcy10b3AiLHRoaXMuZG9tLnNoYWRvd0JvdHRvbVJpZ2h0LmNsYXNzTmFtZT0idmlzLXNoYWRvdyB2aXMtYm90dG9tIix0aGlzLmRvbS5yb290LmFwcGVuZENoaWxkKHRoaXMuZG9tLmJhY2tncm91bmQpLHRoaXMuZG9tLnJvb3QuYXBwZW5kQ2hpbGQodGhpcy5kb20uYmFja2dyb3VuZFZlcnRpY2FsKSx0aGlzLmRvbS5yb290LmFwcGVuZENoaWxkKHRoaXMuZG9tLmJhY2tncm91bmRIb3Jpem9udGFsKSx0aGlzLmRvbS5yb290LmFwcGVuZENoaWxkKHRoaXMuZG9tLmNlbnRlckNvbnRhaW5lciksdGhpcy5kb20ucm9vdC5hcHBlbmRDaGlsZCh0aGlzLmRvbS5sZWZ0Q29udGFpbmVyKSx0aGlzLmRvbS5yb290LmFwcGVuZENoaWxkKHRoaXMuZG9tLnJpZ2h0Q29udGFpbmVyKSx0aGlzLmRvbS5yb290LmFwcGVuZENoaWxkKHRoaXMuZG9tLnRvcCksdGhpcy5kb20ucm9vdC5hcHBlbmRDaGlsZCh0aGlzLmRvbS5ib3R0b20pLHRoaXMuZG9tLmNlbnRlckNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmRvbS5jZW50ZXIpLHRoaXMuZG9tLmxlZnRDb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5kb20ubGVmdCksdGhpcy5kb20ucmlnaHRDb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5kb20ucmlnaHQpLHRoaXMuZG9tLmNlbnRlckNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmRvbS5zaGFkb3dUb3ApLHRoaXMuZG9tLmNlbnRlckNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmRvbS5zaGFkb3dCb3R0b20pLHRoaXMuZG9tLmxlZnRDb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5kb20uc2hhZG93VG9wTGVmdCksdGhpcy5kb20ubGVmdENvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmRvbS5zaGFkb3dCb3R0b21MZWZ0KSx0aGlzLmRvbS5yaWdodENvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmRvbS5zaGFkb3dUb3BSaWdodCksdGhpcy5kb20ucmlnaHRDb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5kb20uc2hhZG93Qm90dG9tUmlnaHQpLHRoaXMucHJvcHM9e3Jvb3Q6e30sYmFja2dyb3VuZDp7fSxjZW50ZXJDb250YWluZXI6e30sbGVmdENvbnRhaW5lcjp7fSxyaWdodENvbnRhaW5lcjp7fSxjZW50ZXI6e30sbGVmdDp7fSxyaWdodDp7fSx0b3A6e30sYm90dG9tOnt9LGJvcmRlcjp7fSxzY3JvbGxUb3A6MCxzY3JvbGxUb3BNaW46MH0sdGhpcy5vbigicmFuZ2VjaGFuZ2UiLGZ1bmN0aW9uKCl7dGhpcy5pbml0aWFsRHJhd0RvbmU9PT0hMCYmdGhpcy5fcmVkcmF3KCl9LmJpbmQodGhpcykpLHRoaXMub24oInRvdWNoIix0aGlzLl9vblRvdWNoLmJpbmQodGhpcykpLHRoaXMub24oInBhbm1vdmUiLHRoaXMuX29uRHJhZy5iaW5kKHRoaXMpKTt2YXIgcz10aGlzO3RoaXMub24oIl9jaGFuZ2UiLGZ1bmN0aW9uKHQpe3QmJjE9PXQucXVldWU/cy5fcmVkcmF3VGltZXJ8fChzLl9yZWRyYXdUaW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cy5fcmVkcmF3VGltZXI9bnVsbCxzLl9yZWRyYXcoKX0sMCkpOnMuX3JlZHJhdygpfSksdGhpcy5oYW1tZXI9bmV3IHIodGhpcy5kb20ucm9vdCk7dmFyIGg9dGhpcy5oYW1tZXIuZ2V0KCJwaW5jaCIpLnNldCh7ZW5hYmxlOiEwfSk7YS5kaXNhYmxlUHJldmVudERlZmF1bHRWZXJ0aWNhbGx5KGgpLHRoaXMuaGFtbWVyLmdldCgicGFuIikuc2V0KHt0aHJlc2hvbGQ6NSxkaXJlY3Rpb246ci5ESVJFQ1RJT05fSE9SSVpPTlRBTH0pLHRoaXMubGlzdGVuZXJzPXt9O3ZhciBkPVsidGFwIiwiZG91YmxldGFwIiwicHJlc3MiLCJwaW5jaCIsInBhbiIsInBhbnN0YXJ0IiwicGFubW92ZSIsInBhbmVuZCJdO2QuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbihlKXtzLmlzQWN0aXZlKCkmJnMuZW1pdCh0LGUpfTtzLmhhbW1lci5vbih0LGUpLHMubGlzdGVuZXJzW3RdPWV9KSxhLm9uVG91Y2godGhpcy5oYW1tZXIsZnVuY3Rpb24odCl7cy5lbWl0KCJ0b3VjaCIsdCl9LmJpbmQodGhpcykpLGEub25SZWxlYXNlKHRoaXMuaGFtbWVyLGZ1bmN0aW9uKHQpe3MuZW1pdCgicmVsZWFzZSIsdCl9LmJpbmQodGhpcykpLHRoaXMuZG9tLmNlbnRlckNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyPyh0aGlzLmRvbS5jZW50ZXJDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V3aGVlbCIsZS5iaW5kKHRoaXMpLCExKSx0aGlzLmRvbS5jZW50ZXJDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiRE9NTW91c2VTY3JvbGwiLGUuYmluZCh0aGlzKSwhMSkpOnRoaXMuZG9tLmNlbnRlckNvbnRhaW5lci5hdHRhY2hFdmVudCgib25tb3VzZXdoZWVsIixlLmJpbmQodGhpcykpLHRoaXMuZG9tLmxlZnQucGFyZW50Tm9kZS5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLGkuYmluZCh0aGlzKSksdGhpcy5kb20ucmlnaHQucGFyZW50Tm9kZS5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLGkuYmluZCh0aGlzKSk7dmFyIGw9ITE7aWYodGhpcy5kb20uY2VudGVyLmFkZEV2ZW50TGlzdGVuZXIoImRyYWdvdmVyIixvLmJpbmQodGhpcyksITEpLHRoaXMuZG9tLmNlbnRlci5hZGRFdmVudExpc3RlbmVyKCJkcm9wIixuLmJpbmQodGhpcyksITEpLHRoaXMuY3VzdG9tVGltZXM9W10sdGhpcy50b3VjaD17fSx0aGlzLnJlZHJhd0NvdW50PTAsdGhpcy5pbml0aWFsRHJhd0RvbmU9ITEsIXQpdGhyb3cgbmV3IEVycm9yKCJObyBjb250YWluZXIgcHJvdmlkZWQiKTt0LmFwcGVuZENoaWxkKHRoaXMuZG9tLnJvb3QpfSxvLnByb3RvdHlwZS5zZXRPcHRpb25zPWZ1bmN0aW9uKHQpe2lmKHQpe3ZhciBlPVsid2lkdGgiLCJoZWlnaHQiLCJtaW5IZWlnaHQiLCJtYXhIZWlnaHQiLCJhdXRvUmVzaXplIiwic3RhcnQiLCJlbmQiLCJjbGlja1RvVXNlIiwiZGF0YUF0dHJpYnV0ZXMiLCJoaWRkZW5EYXRlcyIsImxvY2FsZSIsImxvY2FsZXMiLCJtb21lbnQiLCJydGwiLCJ6b29tS2V5IiwiaG9yaXpvbnRhbFNjcm9sbCIsInZlcnRpY2FsU2Nyb2xsIl07aWYoaC5zZWxlY3RpdmVFeHRlbmQoZSx0aGlzLm9wdGlvbnMsdCksdGhpcy5vcHRpb25zLnJ0bCYmKHRoaXMuZG9tLmNvbnRhaW5lci5zdHlsZS5kaXJlY3Rpb249InJ0bCIsdGhpcy5kb20uYmFja2dyb3VuZFZlcnRpY2FsLmNsYXNzTmFtZT0idmlzLXBhbmVsIHZpcy1iYWNrZ3JvdW5kIHZpcy12ZXJ0aWNhbC1ydGwiKSx0aGlzLm9wdGlvbnMudmVydGljYWxTY3JvbGwmJih0aGlzLm9wdGlvbnMucnRsP3RoaXMuZG9tLnJpZ2h0Q29udGFpbmVyLmNsYXNzTmFtZT0idmlzLXBhbmVsIHZpcy1yaWdodCB2aXMtdmVydGljYWwtc2Nyb2xsIjp0aGlzLmRvbS5sZWZ0Q29udGFpbmVyLmNsYXNzTmFtZT0idmlzLXBhbmVsIHZpcy1sZWZ0IHZpcy12ZXJ0aWNhbC1zY3JvbGwiKSx0aGlzLm9wdGlvbnMub3JpZW50YXRpb249e2l0ZW06dm9pZCAwLGF4aXM6dm9pZCAwfSwib3JpZW50YXRpb24iaW4gdCYmKCJzdHJpbmciPT10eXBlb2YgdC5vcmllbnRhdGlvbj90aGlzLm9wdGlvbnMub3JpZW50YXRpb249e2l0ZW06dC5vcmllbnRhdGlvbixheGlzOnQub3JpZW50YXRpb259OiJvYmplY3QiPT09bih0Lm9yaWVudGF0aW9uKSYmKCJpdGVtImluIHQub3JpZW50YXRpb24mJih0aGlzLm9wdGlvbnMub3JpZW50YXRpb24uaXRlbT10Lm9yaWVudGF0aW9uLml0ZW0pLCJheGlzImluIHQub3JpZW50YXRpb24mJih0aGlzLm9wdGlvbnMub3JpZW50YXRpb24uYXhpcz10Lm9yaWVudGF0aW9uLmF4aXMpKSksImJvdGgiPT09dGhpcy5vcHRpb25zLm9yaWVudGF0aW9uLmF4aXMpe2lmKCF0aGlzLnRpbWVBeGlzMil7dmFyIGk9dGhpcy50aW1lQXhpczI9bmV3IGQodGhpcy5ib2R5KTtpLnNldE9wdGlvbnM9ZnVuY3Rpb24odCl7dmFyIGU9dD9oLmV4dGVuZCh7fSx0KTp7fTtlLm9yaWVudGF0aW9uPSJ0b3AiLGQucHJvdG90eXBlLnNldE9wdGlvbnMuY2FsbChpLGUpfSx0aGlzLmNvbXBvbmVudHMucHVzaChpKX19ZWxzZSBpZih0aGlzLnRpbWVBeGlzMil7dmFyIG89dGhpcy5jb21wb25lbnRzLmluZGV4T2YodGhpcy50aW1lQXhpczIpO28hPT0tMSYmdGhpcy5jb21wb25lbnRzLnNwbGljZShvLDEpLHRoaXMudGltZUF4aXMyLmRlc3Ryb3koKSx0aGlzLnRpbWVBeGlzMj1udWxsfWlmKCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRyYXdQb2ludHMmJih0LmRyYXdQb2ludHM9e29uUmVuZGVyOnQuZHJhd1BvaW50c30pLCJoaWRkZW5EYXRlcyJpbiB0aGlzLm9wdGlvbnMmJmMuY29udmVydEhpZGRlbk9wdGlvbnModGhpcy5vcHRpb25zLm1vbWVudCx0aGlzLmJvZHksdGhpcy5vcHRpb25zLmhpZGRlbkRhdGVzKSwiY2xpY2tUb1VzZSJpbiB0JiYodC5jbGlja1RvVXNlP3RoaXMuYWN0aXZhdG9yfHwodGhpcy5hY3RpdmF0b3I9bmV3IGwodGhpcy5kb20ucm9vdCkpOnRoaXMuYWN0aXZhdG9yJiYodGhpcy5hY3RpdmF0b3IuZGVzdHJveSgpLGRlbGV0ZSB0aGlzLmFjdGl2YXRvcikpLCJzaG93Q3VzdG9tVGltZSJpbiB0KXRocm93IG5ldyBFcnJvcigiT3B0aW9uIGBzaG93Q3VzdG9tVGltZWAgaXMgZGVwcmVjYXRlZC4gQ3JlYXRlIGEgY3VzdG9tIHRpbWUgYmFyIHZpYSB0aW1lbGluZS5hZGRDdXN0b21UaW1lKHRpbWUgWywgaWRdKSIpO3RoaXMuX2luaXRBdXRvUmVzaXplKCl9aWYodGhpcy5jb21wb25lbnRzLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2V0T3B0aW9ucyh0KX0pLCJjb25maWd1cmUiaW4gdCl7dGhpcy5jb25maWd1cmF0b3J8fCh0aGlzLmNvbmZpZ3VyYXRvcj10aGlzLl9jcmVhdGVDb25maWd1cmF0b3IoKSksdGhpcy5jb25maWd1cmF0b3Iuc2V0T3B0aW9ucyh0LmNvbmZpZ3VyZSk7dmFyIHM9aC5kZWVwRXh0ZW5kKHt9LHRoaXMub3B0aW9ucyk7dGhpcy5jb21wb25lbnRzLmZvckVhY2goZnVuY3Rpb24odCl7aC5kZWVwRXh0ZW5kKHMsdC5vcHRpb25zKX0pLHRoaXMuY29uZmlndXJhdG9yLnNldE1vZHVsZU9wdGlvbnMoe2dsb2JhbDpzfSl9dGhpcy5fb3JpZ1JlZHJhdz90aGlzLl9yZWRyYXcoKToodGhpcy5fb3JpZ1JlZHJhdz10aGlzLl9yZWRyYXcuYmluZCh0aGlzKSx0aGlzLl9yZWRyYXc9aC50aHJvdHRsZSh0aGlzLl9vcmlnUmVkcmF3KSl9LG8ucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuYWN0aXZhdG9yfHx0aGlzLmFjdGl2YXRvci5hY3RpdmV9LG8ucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLnNldEl0ZW1zKG51bGwpLHRoaXMuc2V0R3JvdXBzKG51bGwpLHRoaXMub2ZmKCksdGhpcy5fc3RvcEF1dG9SZXNpemUoKSx0aGlzLmRvbS5yb290LnBhcmVudE5vZGUmJnRoaXMuZG9tLnJvb3QucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmRvbS5yb290KSx0aGlzLmRvbT1udWxsLHRoaXMuYWN0aXZhdG9yJiYodGhpcy5hY3RpdmF0b3IuZGVzdHJveSgpLGRlbGV0ZSB0aGlzLmFjdGl2YXRvcik7Zm9yKHZhciB0IGluIHRoaXMubGlzdGVuZXJzKXRoaXMubGlzdGVuZXJzLmhhc093blByb3BlcnR5KHQpJiZkZWxldGUgdGhpcy5saXN0ZW5lcnNbdF07dGhpcy5saXN0ZW5lcnM9bnVsbCx0aGlzLmhhbW1lcj1udWxsLHRoaXMuY29tcG9uZW50cy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRlc3Ryb3koKX0pLHRoaXMuYm9keT1udWxsfSxvLnByb3RvdHlwZS5zZXRDdXN0b21UaW1lPWZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5jdXN0b21UaW1lcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIGU9PT10Lm9wdGlvbnMuaWR9KTtpZigwPT09aS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJObyBjdXN0b20gdGltZSBiYXIgZm91bmQgd2l0aCBpZCAiK0pTT04uc3RyaW5naWZ5KGUpKTtpLmxlbmd0aD4wJiZpWzBdLnNldEN1c3RvbVRpbWUodCl9LG8ucHJvdG90eXBlLmdldEN1c3RvbVRpbWU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jdXN0b21UaW1lcy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUub3B0aW9ucy5pZD09PXR9KTtpZigwPT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJObyBjdXN0b20gdGltZSBiYXIgZm91bmQgd2l0aCBpZCAiK0pTT04uc3RyaW5naWZ5KHQpKTtyZXR1cm4gZVswXS5nZXRDdXN0b21UaW1lKCl9LG8ucHJvdG90eXBlLnNldEN1c3RvbVRpbWVUaXRsZT1mdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMuY3VzdG9tVGltZXMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm9wdGlvbnMuaWQ9PT1lfSk7aWYoMD09PWkubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiTm8gY3VzdG9tIHRpbWUgYmFyIGZvdW5kIHdpdGggaWQgIitKU09OLnN0cmluZ2lmeShlKSk7aWYoaS5sZW5ndGg+MClyZXR1cm4gaVswXS5zZXRDdXN0b21UaXRsZSh0KX0sby5wcm90b3R5cGUuZ2V0RXZlbnRQcm9wZXJ0aWVzPWZ1bmN0aW9uKHQpe3JldHVybntldmVudDp0fX0sby5wcm90b3R5cGUuYWRkQ3VzdG9tVGltZT1mdW5jdGlvbih0LGUpe3ZhciBpPXZvaWQgMCE9PXQ/aC5jb252ZXJ0KHQsIkRhdGUiKS52YWx1ZU9mKCk6bmV3IERhdGUsbz10aGlzLmN1c3RvbVRpbWVzLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIHQub3B0aW9ucy5pZD09PWV9KTtpZihvKXRocm93IG5ldyBFcnJvcigiQSBjdXN0b20gdGltZSB3aXRoIGlkICIrSlNPTi5zdHJpbmdpZnkoZSkrIiBhbHJlYWR5IGV4aXN0cyIpO3ZhciBuPW5ldyB1KHRoaXMuYm9keSxoLmV4dGVuZCh7fSx0aGlzLm9wdGlvbnMse3RpbWU6aSxpZDplfSkpO3JldHVybiB0aGlzLmN1c3RvbVRpbWVzLnB1c2gobiksdGhpcy5jb21wb25lbnRzLnB1c2gobiksdGhpcy5fcmVkcmF3KCksZX0sby5wcm90b3R5cGUucmVtb3ZlQ3VzdG9tVGltZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmN1c3RvbVRpbWVzLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS5vcHRpb25zLmlkPT09dH0pO2lmKDA9PT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIk5vIGN1c3RvbSB0aW1lIGJhciBmb3VuZCB3aXRoIGlkICIrSlNPTi5zdHJpbmdpZnkodCkpO2UuZm9yRWFjaChmdW5jdGlvbih0KXt0aGlzLmN1c3RvbVRpbWVzLnNwbGljZSh0aGlzLmN1c3RvbVRpbWVzLmluZGV4T2YodCksMSksdGhpcy5jb21wb25lbnRzLnNwbGljZSh0aGlzLmNvbXBvbmVudHMuaW5kZXhPZih0KSwxKSx0LmRlc3Ryb3koKX0uYmluZCh0aGlzKSl9LG8ucHJvdG90eXBlLmdldFZpc2libGVJdGVtcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLml0ZW1TZXQmJnRoaXMuaXRlbVNldC5nZXRWaXNpYmxlSXRlbXMoKXx8W119LG8ucHJvdG90eXBlLmZpdD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdldERhdGFSYW5nZSgpO2lmKG51bGwhPT1lLm1pbnx8bnVsbCE9PWUubWF4KXt2YXIgaT1lLm1heC1lLm1pbixvPW5ldyBEYXRlKGUubWluLnZhbHVlT2YoKS0uMDEqaSksbj1uZXcgRGF0ZShlLm1heC52YWx1ZU9mKCkrLjAxKmkpLHM9IXR8fHZvaWQgMD09PXQuYW5pbWF0aW9ufHx0LmFuaW1hdGlvbjt0aGlzLnJhbmdlLnNldFJhbmdlKG8sbixzKX19LG8ucHJvdG90eXBlLmdldERhdGFSYW5nZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiQ2Fubm90IGludm9rZSBhYnN0cmFjdCBtZXRob2QgZ2V0RGF0YVJhbmdlIil9LG8ucHJvdG90eXBlLnNldFdpbmRvdz1mdW5jdGlvbih0LGUsaSl7dmFyIG87aWYoMT09YXJndW1lbnRzLmxlbmd0aCl7dmFyIG49YXJndW1lbnRzWzBdO289dm9pZCAwPT09bi5hbmltYXRpb258fG4uYW5pbWF0aW9uLHRoaXMucmFuZ2Uuc2V0UmFuZ2Uobi5zdGFydCxuLmVuZCxvKX1lbHNlIG89IWl8fHZvaWQgMD09PWkuYW5pbWF0aW9ufHxpLmFuaW1hdGlvbix0aGlzLnJhbmdlLnNldFJhbmdlKHQsZSxvKX0sby5wcm90b3R5cGUubW92ZVRvPWZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5yYW5nZS5lbmQtdGhpcy5yYW5nZS5zdGFydCxvPWguY29udmVydCh0LCJEYXRlIikudmFsdWVPZigpLG49by1pLzIscz1vK2kvMixyPSFlfHx2b2lkIDA9PT1lLmFuaW1hdGlvbnx8ZS5hbmltYXRpb247dGhpcy5yYW5nZS5zZXRSYW5nZShuLHMscil9LG8ucHJvdG90eXBlLmdldFdpbmRvdz1mdW5jdGlvbigpe3ZhciB0PXRoaXMucmFuZ2UuZ2V0UmFuZ2UoKTtyZXR1cm57c3RhcnQ6bmV3IERhdGUodC5zdGFydCksZW5kOm5ldyBEYXRlKHQuZW5kKX19LG8ucHJvdG90eXBlLnpvb21Jbj1mdW5jdGlvbih0KXtpZighKCF0fHx0PDB8fHQ+MSkpe3ZhciBlPXRoaXMuZ2V0V2luZG93KCksaT1lLnN0YXJ0LnZhbHVlT2YoKSxvPWUuZW5kLnZhbHVlT2YoKSxuPW8taSxzPW4vKDErdCkscj0obi1zKS8yLGE9aStyLGg9by1yO3RoaXMuc2V0V2luZG93KHtzdGFydDphLGVuZDpofSl9fSxvLnByb3RvdHlwZS56b29tT3V0PWZ1bmN0aW9uKHQpe2lmKCEoIXR8fHQ8MHx8dD4xKSl7dmFyIGU9dGhpcy5nZXRXaW5kb3coKSxpPWUuc3RhcnQudmFsdWVPZigpLG89ZS5lbmQudmFsdWVPZigpLG49by1pLHM9aS1uKnQvMixyPW8rbip0LzI7dGhpcy5zZXRXaW5kb3coe3N0YXJ0OnMsZW5kOnJ9KX19LG8ucHJvdG90eXBlLnJlZHJhdz1mdW5jdGlvbigpe3RoaXMuX3JlZHJhdygpfSxvLnByb3RvdHlwZS5fcmVkcmF3PWZ1bmN0aW9uKCl7dGhpcy5yZWRyYXdDb3VudCsrO3ZhciB0PSExLGU9dGhpcy5vcHRpb25zLGk9dGhpcy5wcm9wcyxvPXRoaXMuZG9tO2lmKG8mJm8uY29udGFpbmVyJiYwIT1vLnJvb3Qub2Zmc2V0V2lkdGgpe2MudXBkYXRlSGlkZGVuRGF0ZXModGhpcy5vcHRpb25zLm1vbWVudCx0aGlzLmJvZHksdGhpcy5vcHRpb25zLmhpZGRlbkRhdGVzKSwidG9wIj09ZS5vcmllbnRhdGlvbj8oaC5hZGRDbGFzc05hbWUoby5yb290LCJ2aXMtdG9wIiksaC5yZW1vdmVDbGFzc05hbWUoby5yb290LCJ2aXMtYm90dG9tIikpOihoLnJlbW92ZUNsYXNzTmFtZShvLnJvb3QsInZpcy10b3AiKSxoLmFkZENsYXNzTmFtZShvLnJvb3QsInZpcy1ib3R0b20iKSksby5yb290LnN0eWxlLm1heEhlaWdodD1oLm9wdGlvbi5hc1NpemUoZS5tYXhIZWlnaHQsIiIpLG8ucm9vdC5zdHlsZS5taW5IZWlnaHQ9aC5vcHRpb24uYXNTaXplKGUubWluSGVpZ2h0LCIiKSxvLnJvb3Quc3R5bGUud2lkdGg9aC5vcHRpb24uYXNTaXplKGUud2lkdGgsIiIpLGkuYm9yZGVyLmxlZnQ9KG8uY2VudGVyQ29udGFpbmVyLm9mZnNldFdpZHRoLW8uY2VudGVyQ29udGFpbmVyLmNsaWVudFdpZHRoKS8yLGkuYm9yZGVyLnJpZ2h0PWkuYm9yZGVyLmxlZnQsaS5ib3JkZXIudG9wPShvLmNlbnRlckNvbnRhaW5lci5vZmZzZXRIZWlnaHQtby5jZW50ZXJDb250YWluZXIuY2xpZW50SGVpZ2h0KS8yLGkuYm9yZGVyLmJvdHRvbT1pLmJvcmRlci50b3A7dmFyIG49by5yb290Lm9mZnNldEhlaWdodC1vLnJvb3QuY2xpZW50SGVpZ2h0LHM9by5yb290Lm9mZnNldFdpZHRoLW8ucm9vdC5jbGllbnRXaWR0aDswPT09by5jZW50ZXJDb250YWluZXIuY2xpZW50SGVpZ2h0JiYoaS5ib3JkZXIubGVmdD1pLmJvcmRlci50b3AsaS5ib3JkZXIucmlnaHQ9aS5ib3JkZXIubGVmdCksMD09PW8ucm9vdC5jbGllbnRIZWlnaHQmJihzPW4pLGkuY2VudGVyLmhlaWdodD1vLmNlbnRlci5vZmZzZXRIZWlnaHQsaS5sZWZ0LmhlaWdodD1vLmxlZnQub2Zmc2V0SGVpZ2h0LGkucmlnaHQuaGVpZ2h0PW8ucmlnaHQub2Zmc2V0SGVpZ2h0LGkudG9wLmhlaWdodD1vLnRvcC5jbGllbnRIZWlnaHR8fC1pLmJvcmRlci50b3AsaS5ib3R0b20uaGVpZ2h0PW8uYm90dG9tLmNsaWVudEhlaWdodHx8LWkuYm9yZGVyLmJvdHRvbTt2YXIgYT1NYXRoLm1heChpLmxlZnQuaGVpZ2h0LGkuY2VudGVyLmhlaWdodCxpLnJpZ2h0LmhlaWdodCksZD1pLnRvcC5oZWlnaHQrYStpLmJvdHRvbS5oZWlnaHQrbitpLmJvcmRlci50b3AraS5ib3JkZXIuYm90dG9tO28ucm9vdC5zdHlsZS5oZWlnaHQ9aC5vcHRpb24uYXNTaXplKGUuaGVpZ2h0LGQrInB4IiksaS5yb290LmhlaWdodD1vLnJvb3Qub2Zmc2V0SGVpZ2h0LGkuYmFja2dyb3VuZC5oZWlnaHQ9aS5yb290LmhlaWdodC1uO3ZhciBsPWkucm9vdC5oZWlnaHQtaS50b3AuaGVpZ2h0LWkuYm90dG9tLmhlaWdodC1uO2kuY2VudGVyQ29udGFpbmVyLmhlaWdodD1sLGkubGVmdENvbnRhaW5lci5oZWlnaHQ9bCxpLnJpZ2h0Q29udGFpbmVyLmhlaWdodD1pLmxlZnRDb250YWluZXIuaGVpZ2h0LGkucm9vdC53aWR0aD1vLnJvb3Qub2Zmc2V0V2lkdGgsaS5iYWNrZ3JvdW5kLndpZHRoPWkucm9vdC53aWR0aC1zLHRoaXMuaW5pdGlhbERyYXdEb25lfHwoaS5zY3JvbGxiYXJXaWR0aD1oLmdldFNjcm9sbEJhcldpZHRoKCkpLHRoaXMub3B0aW9ucy52ZXJ0aWNhbFNjcm9sbD90aGlzLm9wdGlvbnMucnRsPyhpLmxlZnQud2lkdGg9by5sZWZ0Q29udGFpbmVyLmNsaWVudFdpZHRofHwtaS5ib3JkZXIubGVmdCxpLnJpZ2h0LndpZHRoPW8ucmlnaHRDb250YWluZXIuY2xpZW50V2lkdGgraS5zY3JvbGxiYXJXaWR0aHx8LWkuYm9yZGVyLnJpZ2h0KTooaS5sZWZ0LndpZHRoPW8ubGVmdENvbnRhaW5lci5jbGllbnRXaWR0aCtpLnNjcm9sbGJhcldpZHRofHwtaS5ib3JkZXIubGVmdCxpLnJpZ2h0LndpZHRoPW8ucmlnaHRDb250YWluZXIuY2xpZW50V2lkdGh8fC1pLmJvcmRlci5yaWdodCk6KGkubGVmdC53aWR0aD1vLmxlZnRDb250YWluZXIuY2xpZW50V2lkdGh8fC1pLmJvcmRlci5sZWZ0LGkucmlnaHQud2lkdGg9by5yaWdodENvbnRhaW5lci5jbGllbnRXaWR0aHx8LWkuYm9yZGVyLnJpZ2h0KSxpLmxlZnRDb250YWluZXIud2lkdGg9aS5sZWZ0LndpZHRoLGkucmlnaHRDb250YWluZXIud2lkdGg9aS5yaWdodC53aWR0aDt2YXIgdT1pLnJvb3Qud2lkdGgtaS5sZWZ0LndpZHRoLWkucmlnaHQud2lkdGgtcztpLmNlbnRlci53aWR0aD11LGkuY2VudGVyQ29udGFpbmVyLndpZHRoPXUsaS50b3Aud2lkdGg9dSxpLmJvdHRvbS53aWR0aD11LG8uYmFja2dyb3VuZC5zdHlsZS5oZWlnaHQ9aS5iYWNrZ3JvdW5kLmhlaWdodCsicHgiLG8uYmFja2dyb3VuZFZlcnRpY2FsLnN0eWxlLmhlaWdodD1pLmJhY2tncm91bmQuaGVpZ2h0KyJweCIsby5iYWNrZ3JvdW5kSG9yaXpvbnRhbC5zdHlsZS5oZWlnaHQ9aS5jZW50ZXJDb250YWluZXIuaGVpZ2h0KyJweCIsby5jZW50ZXJDb250YWluZXIuc3R5bGUuaGVpZ2h0PWkuY2VudGVyQ29udGFpbmVyLmhlaWdodCsicHgiLG8ubGVmdENvbnRhaW5lci5zdHlsZS5oZWlnaHQ9aS5sZWZ0Q29udGFpbmVyLmhlaWdodCsicHgiLG8ucmlnaHRDb250YWluZXIuc3R5bGUuaGVpZ2h0PWkucmlnaHRDb250YWluZXIuaGVpZ2h0KyJweCIsby5iYWNrZ3JvdW5kLnN0eWxlLndpZHRoPWkuYmFja2dyb3VuZC53aWR0aCsicHgiLG8uYmFja2dyb3VuZFZlcnRpY2FsLnN0eWxlLndpZHRoPWkuY2VudGVyQ29udGFpbmVyLndpZHRoKyJweCIsby5iYWNrZ3JvdW5kSG9yaXpvbnRhbC5zdHlsZS53aWR0aD1pLmJhY2tncm91bmQud2lkdGgrInB4IixvLmNlbnRlckNvbnRhaW5lci5zdHlsZS53aWR0aD1pLmNlbnRlci53aWR0aCsicHgiLG8udG9wLnN0eWxlLndpZHRoPWkudG9wLndpZHRoKyJweCIsby5ib3R0b20uc3R5bGUud2lkdGg9aS5ib3R0b20ud2lkdGgrInB4IixvLmJhY2tncm91bmQuc3R5bGUubGVmdD0iMCIsby5iYWNrZ3JvdW5kLnN0eWxlLnRvcD0iMCIsby5iYWNrZ3JvdW5kVmVydGljYWwuc3R5bGUubGVmdD1pLmxlZnQud2lkdGgraS5ib3JkZXIubGVmdCsicHgiLG8uYmFja2dyb3VuZFZlcnRpY2FsLnN0eWxlLnRvcD0iMCIsby5iYWNrZ3JvdW5kSG9yaXpvbnRhbC5zdHlsZS5sZWZ0PSIwIixvLmJhY2tncm91bmRIb3Jpem9udGFsLnN0eWxlLnRvcD1pLnRvcC5oZWlnaHQrInB4IixvLmNlbnRlckNvbnRhaW5lci5zdHlsZS5sZWZ0PWkubGVmdC53aWR0aCsicHgiLG8uY2VudGVyQ29udGFpbmVyLnN0eWxlLnRvcD1pLnRvcC5oZWlnaHQrInB4IixvLmxlZnRDb250YWluZXIuc3R5bGUubGVmdD0iMCIsby5sZWZ0Q29udGFpbmVyLnN0eWxlLnRvcD1pLnRvcC5oZWlnaHQrInB4IixvLnJpZ2h0Q29udGFpbmVyLnN0eWxlLmxlZnQ9aS5sZWZ0LndpZHRoK2kuY2VudGVyLndpZHRoKyJweCIsby5yaWdodENvbnRhaW5lci5zdHlsZS50b3A9aS50b3AuaGVpZ2h0KyJweCIsby50b3Auc3R5bGUubGVmdD1pLmxlZnQud2lkdGgrInB4IixvLnRvcC5zdHlsZS50b3A9IjAiLG8uYm90dG9tLnN0eWxlLmxlZnQ9aS5sZWZ0LndpZHRoKyJweCIsby5ib3R0b20uc3R5bGUudG9wPWkudG9wLmhlaWdodCtpLmNlbnRlckNvbnRhaW5lci5oZWlnaHQrInB4Ijt2YXIgcD10aGlzLl91cGRhdGVTY3JvbGxUb3AoKTsidG9wIiE9ZS5vcmllbnRhdGlvbi5pdGVtJiYocCs9TWF0aC5tYXgodGhpcy5wcm9wcy5jZW50ZXJDb250YWluZXIuaGVpZ2h0LXRoaXMucHJvcHMuY2VudGVyLmhlaWdodC10aGlzLnByb3BzLmJvcmRlci50b3AtdGhpcy5wcm9wcy5ib3JkZXIuYm90dG9tLDApKSxvLmNlbnRlci5zdHlsZS5sZWZ0PSIwIixvLmNlbnRlci5zdHlsZS50b3A9cCsicHgiLG8ubGVmdC5zdHlsZS5sZWZ0PSIwIixvLnJpZ2h0LnN0eWxlLmxlZnQ9IjAiO3ZhciBmPTA9PXRoaXMucHJvcHMuc2Nyb2xsVG9wPyJoaWRkZW4iOiIiLG09dGhpcy5wcm9wcy5zY3JvbGxUb3A9PXRoaXMucHJvcHMuc2Nyb2xsVG9wTWluPyJoaWRkZW4iOiIiO28uc2hhZG93VG9wLnN0eWxlLnZpc2liaWxpdHk9ZixvLnNoYWRvd0JvdHRvbS5zdHlsZS52aXNpYmlsaXR5PW0sby5zaGFkb3dUb3BMZWZ0LnN0eWxlLnZpc2liaWxpdHk9ZixvLnNoYWRvd0JvdHRvbUxlZnQuc3R5bGUudmlzaWJpbGl0eT1tLG8uc2hhZG93VG9wUmlnaHQuc3R5bGUudmlzaWJpbGl0eT1mLG8uc2hhZG93Qm90dG9tUmlnaHQuc3R5bGUudmlzaWJpbGl0eT1tLHRoaXMub3B0aW9ucy52ZXJ0aWNhbFNjcm9sbD8oby5zaGFkb3dUb3BSaWdodC5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4iLG8uc2hhZG93Qm90dG9tUmlnaHQuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIixvLnNoYWRvd1RvcExlZnQuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIixvLnNoYWRvd0JvdHRvbUxlZnQuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIik6KG8ubGVmdC5zdHlsZS50b3A9cCsicHgiLG8ucmlnaHQuc3R5bGUudG9wPXArInB4Iik7dmFyIHY9dGhpcy5wcm9wcy5jZW50ZXIuaGVpZ2h0PnRoaXMucHJvcHMuY2VudGVyQ29udGFpbmVyLmhlaWdodDt0aGlzLmhhbW1lci5nZXQoInBhbiIpLnNldCh7ZGlyZWN0aW9uOnY/ci5ESVJFQ1RJT05fQUxMOnIuRElSRUNUSU9OX0hPUklaT05UQUx9KSx0aGlzLmNvbXBvbmVudHMuZm9yRWFjaChmdW5jdGlvbihlKXt0PWUucmVkcmF3KCl8fHR9KTt2YXIgZz01O2lmKHQpe2lmKHRoaXMucmVkcmF3Q291bnQ8ZylyZXR1cm4gdm9pZCB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KCJfY2hhbmdlIik7Y29uc29sZS5sb2coIldBUk5JTkc6IGluZmluaXRlIGxvb3AgaW4gcmVkcmF3PyIpfWVsc2UgdGhpcy5yZWRyYXdDb3VudD0wO3RoaXMuaW5pdGlhbERyYXdEb25lPSEwLHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoImNoYW5nZWQiKX19LG8ucHJvdG90eXBlLnJlcGFpbnQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIkZ1bmN0aW9uIHJlcGFpbnQgaXMgZGVwcmVjYXRlZC4gVXNlIHJlZHJhdyBpbnN0ZWFkLiIpfSxvLnByb3RvdHlwZS5zZXRDdXJyZW50VGltZT1mdW5jdGlvbih0KXtpZighdGhpcy5jdXJyZW50VGltZSl0aHJvdyBuZXcgRXJyb3IoIk9wdGlvbiBzaG93Q3VycmVudFRpbWUgbXVzdCBiZSB0cnVlIik7dGhpcy5jdXJyZW50VGltZS5zZXRDdXJyZW50VGltZSh0KX0sby5wcm90b3R5cGUuZ2V0Q3VycmVudFRpbWU9ZnVuY3Rpb24oKXtpZighdGhpcy5jdXJyZW50VGltZSl0aHJvdyBuZXcgRXJyb3IoIk9wdGlvbiBzaG93Q3VycmVudFRpbWUgbXVzdCBiZSB0cnVlIik7cmV0dXJuIHRoaXMuY3VycmVudFRpbWUuZ2V0Q3VycmVudFRpbWUoKX0sby5wcm90b3R5cGUuX3RvVGltZT1mdW5jdGlvbih0KXtyZXR1cm4gYy50b1RpbWUodGhpcyx0LHRoaXMucHJvcHMuY2VudGVyLndpZHRoKX0sby5wcm90b3R5cGUuX3RvR2xvYmFsVGltZT1mdW5jdGlvbih0KXtyZXR1cm4gYy50b1RpbWUodGhpcyx0LHRoaXMucHJvcHMucm9vdC53aWR0aCl9LG8ucHJvdG90eXBlLl90b1NjcmVlbj1mdW5jdGlvbih0KXtyZXR1cm4gYy50b1NjcmVlbih0aGlzLHQsdGhpcy5wcm9wcy5jZW50ZXIud2lkdGgpfSxvLnByb3RvdHlwZS5fdG9HbG9iYWxTY3JlZW49ZnVuY3Rpb24odCl7cmV0dXJuIGMudG9TY3JlZW4odGhpcyx0LHRoaXMucHJvcHMucm9vdC53aWR0aCl9LG8ucHJvdG90eXBlLl9pbml0QXV0b1Jlc2l6ZT1mdW5jdGlvbigpezE9PXRoaXMub3B0aW9ucy5hdXRvUmVzaXplP3RoaXMuX3N0YXJ0QXV0b1Jlc2l6ZSgpOnRoaXMuX3N0b3BBdXRvUmVzaXplKCl9LG8ucHJvdG90eXBlLl9zdGFydEF1dG9SZXNpemU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX3N0b3BBdXRvUmVzaXplKCksdGhpcy5fb25SZXNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gMSE9dC5vcHRpb25zLmF1dG9SZXNpemU/dm9pZCB0Ll9zdG9wQXV0b1Jlc2l6ZSgpOnZvaWQodC5kb20ucm9vdCYmKHQuZG9tLnJvb3Qub2Zmc2V0V2lkdGg9PXQucHJvcHMubGFzdFdpZHRoJiZ0LmRvbS5yb290Lm9mZnNldEhlaWdodD09dC5wcm9wcy5sYXN0SGVpZ2h0fHwodC5wcm9wcy5sYXN0V2lkdGg9dC5kb20ucm9vdC5vZmZzZXRXaWR0aCx0LnByb3BzLmxhc3RIZWlnaHQ9dC5kb20ucm9vdC5vZmZzZXRIZWlnaHQsdC5ib2R5LmVtaXR0ZXIuZW1pdCgiX2NoYW5nZSIpKSkpfSxoLmFkZEV2ZW50TGlzdGVuZXIod2luZG93LCJyZXNpemUiLHRoaXMuX29uUmVzaXplKSx0LmRvbS5yb290JiYodC5wcm9wcy5sYXN0V2lkdGg9dC5kb20ucm9vdC5vZmZzZXRXaWR0aCx0LnByb3BzLmxhc3RIZWlnaHQ9dC5kb20ucm9vdC5vZmZzZXRIZWlnaHQpLHRoaXMud2F0Y2hUaW1lcj1zZXRJbnRlcnZhbCh0aGlzLl9vblJlc2l6ZSwxZTMpfSxvLnByb3RvdHlwZS5fc3RvcEF1dG9SZXNpemU9ZnVuY3Rpb24oKXt0aGlzLndhdGNoVGltZXImJihjbGVhckludGVydmFsKHRoaXMud2F0Y2hUaW1lciksdGhpcy53YXRjaFRpbWVyPXZvaWQgMCksdGhpcy5fb25SZXNpemUmJihoLnJlbW92ZUV2ZW50TGlzdGVuZXIod2luZG93LCJyZXNpemUiLHRoaXMuX29uUmVzaXplKSx0aGlzLl9vblJlc2l6ZT1udWxsKX0sby5wcm90b3R5cGUuX29uVG91Y2g9ZnVuY3Rpb24odCl7dGhpcy50b3VjaC5hbGxvd0RyYWdnaW5nPSEwLHRoaXMudG91Y2guaW5pdGlhbFNjcm9sbFRvcD10aGlzLnByb3BzLnNjcm9sbFRvcH0sby5wcm90b3R5cGUuX29uUGluY2g9ZnVuY3Rpb24odCl7dGhpcy50b3VjaC5hbGxvd0RyYWdnaW5nPSExfSxvLnByb3RvdHlwZS5fb25EcmFnPWZ1bmN0aW9uKHQpe2lmKHQmJnRoaXMudG91Y2guYWxsb3dEcmFnZ2luZyl7dmFyIGU9dC5kZWx0YVksaT10aGlzLl9nZXRTY3JvbGxUb3AoKSxvPXRoaXMuX3NldFNjcm9sbFRvcCh0aGlzLnRvdWNoLmluaXRpYWxTY3JvbGxUb3ArZSk7dGhpcy5vcHRpb25zLnZlcnRpY2FsU2Nyb2xsJiYodGhpcy5kb20ubGVmdC5wYXJlbnROb2RlLnNjcm9sbFRvcD0tdGhpcy5wcm9wcy5zY3JvbGxUb3AsdGhpcy5kb20ucmlnaHQucGFyZW50Tm9kZS5zY3JvbGxUb3A9LXRoaXMucHJvcHMuc2Nyb2xsVG9wKSxvIT1pJiZ0aGlzLmVtaXQoInZlcnRpY2FsRHJhZyIpfX0sby5wcm90b3R5cGUuX3NldFNjcm9sbFRvcD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcm9wcy5zY3JvbGxUb3A9dCx0aGlzLl91cGRhdGVTY3JvbGxUb3AoKSx0aGlzLnByb3BzLnNjcm9sbFRvcH0sby5wcm90b3R5cGUuX3VwZGF0ZVNjcm9sbFRvcD1mdW5jdGlvbigpe3ZhciB0PU1hdGgubWluKHRoaXMucHJvcHMuY2VudGVyQ29udGFpbmVyLmhlaWdodC10aGlzLnByb3BzLmNlbnRlci5oZWlnaHQsMCk7cmV0dXJuIHQhPXRoaXMucHJvcHMuc2Nyb2xsVG9wTWluJiYoInRvcCIhPXRoaXMub3B0aW9ucy5vcmllbnRhdGlvbi5pdGVtJiYodGhpcy5wcm9wcy5zY3JvbGxUb3ArPXQtdGhpcy5wcm9wcy5zY3JvbGxUb3BNaW4pLHRoaXMucHJvcHMuc2Nyb2xsVG9wTWluPXQpLHRoaXMucHJvcHMuc2Nyb2xsVG9wPjAmJih0aGlzLnByb3BzLnNjcm9sbFRvcD0wKSx0aGlzLnByb3BzLnNjcm9sbFRvcDx0JiYodGhpcy5wcm9wcy5zY3JvbGxUb3A9dCksdGhpcy5wcm9wcy5zY3JvbGxUb3B9LG8ucHJvdG90eXBlLl9nZXRTY3JvbGxUb3A9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm9wcy5zY3JvbGxUb3B9LG8ucHJvdG90eXBlLl9jcmVhdGVDb25maWd1cmF0b3I9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBpbnZva2UgYWJzdHJhY3QgbWV0aG9kIF9jcmVhdGVDb25maWd1cmF0b3IiKX0sdC5leHBvcnRzPW99LGZ1bmN0aW9uKHQsZSxpKXtmdW5jdGlvbiBvKHQsZSl7dGhpcy5ib2R5PXQsdGhpcy5kZWZhdWx0T3B0aW9ucz17dHlwZTpudWxsLG9yaWVudGF0aW9uOntpdGVtOiJib3R0b20ifSxhbGlnbjoiYXV0byIsc3RhY2s6ITAsZ3JvdXBPcmRlclN3YXA6ZnVuY3Rpb24odCxlLGkpe3ZhciBvPWUub3JkZXI7ZS5vcmRlcj10Lm9yZGVyLHQub3JkZXI9b30sZ3JvdXBPcmRlcjoib3JkZXIiLHNlbGVjdGFibGU6ITAsbXVsdGlzZWxlY3Q6ITEsaXRlbXNBbHdheXNEcmFnZ2FibGU6ITEsZWRpdGFibGU6e3VwZGF0ZVRpbWU6ITEsdXBkYXRlR3JvdXA6ITEsYWRkOiExLHJlbW92ZTohMX0sZ3JvdXBFZGl0YWJsZTp7b3JkZXI6ITEsYWRkOiExLHJlbW92ZTohMX0sc25hcDpkLnNuYXAsb25BZGQ6ZnVuY3Rpb24odCxlKXtlKHQpfSxvblVwZGF0ZTpmdW5jdGlvbih0LGUpe2UodCl9LG9uTW92ZTpmdW5jdGlvbih0LGUpe2UodCl9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQsZSl7ZSh0KX0sb25Nb3Zpbmc6ZnVuY3Rpb24odCxlKXtlKHQpfSxvbkFkZEdyb3VwOmZ1bmN0aW9uKHQsZSl7ZSh0KX0sb25Nb3ZlR3JvdXA6ZnVuY3Rpb24odCxlKXtlKHQpfSxvblJlbW92ZUdyb3VwOmZ1bmN0aW9uKHQsZSl7ZSh0KX0sbWFyZ2luOntpdGVtOntob3Jpem9udGFsOjEwLHZlcnRpY2FsOjEwfSxheGlzOjIwfSx0b29sdGlwT25JdGVtVXBkYXRlVGltZTohMX0sdGhpcy5vcHRpb25zPXIuZXh0ZW5kKHt9LHRoaXMuZGVmYXVsdE9wdGlvbnMpLHRoaXMub3B0aW9ucy5ydGw9ZS5ydGwsdGhpcy5pdGVtT3B0aW9ucz17dHlwZTp7c3RhcnQ6IkRhdGUiLGVuZDoiRGF0ZSJ9fSx0aGlzLmNvbnZlcnNpb249e3RvU2NyZWVuOnQudXRpbC50b1NjcmVlbix0b1RpbWU6dC51dGlsLnRvVGltZX0sdGhpcy5kb209e30sdGhpcy5wcm9wcz17fSx0aGlzLmhhbW1lcj1udWxsO3ZhciBpPXRoaXM7dGhpcy5pdGVtc0RhdGE9bnVsbCx0aGlzLmdyb3Vwc0RhdGE9bnVsbCx0aGlzLml0ZW1MaXN0ZW5lcnM9e2FkZDpmdW5jdGlvbih0LGUsbyl7aS5fb25BZGQoZS5pdGVtcyl9LHVwZGF0ZTpmdW5jdGlvbih0LGUsbyl7aS5fb25VcGRhdGUoZS5pdGVtcyl9LHJlbW92ZTpmdW5jdGlvbih0LGUsbyl7aS5fb25SZW1vdmUoZS5pdGVtcyl9fSx0aGlzLmdyb3VwTGlzdGVuZXJzPXthZGQ6ZnVuY3Rpb24odCxlLG8pe2kuX29uQWRkR3JvdXBzKGUuaXRlbXMpfSx1cGRhdGU6ZnVuY3Rpb24odCxlLG8pe2kuX29uVXBkYXRlR3JvdXBzKGUuaXRlbXMpfSxyZW1vdmU6ZnVuY3Rpb24odCxlLG8pe2kuX29uUmVtb3ZlR3JvdXBzKGUuaXRlbXMpfX0sdGhpcy5pdGVtcz17fSx0aGlzLmdyb3Vwcz17fSx0aGlzLmdyb3VwSWRzPVtdLHRoaXMuc2VsZWN0aW9uPVtdLHRoaXMuc3RhY2tEaXJ0eT0hMCx0aGlzLnRvdWNoUGFyYW1zPXt9LHRoaXMuZ3JvdXBUb3VjaFBhcmFtcz17fSx0aGlzLl9jcmVhdGUoKSx0aGlzLnNldE9wdGlvbnMoZSl9dmFyIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LHM9aSgyMikscj1pKDEpLGE9aSg5KSxoPWkoMTEpLGQ9aSgzNyksbD1pKDMzKSxjPWkoMzgpLHU9aSg0MikscD1pKDQzKSxmPWkoNDQpLG09aSg0MCksdj1pKDQ1KSxnPSJfX3VuZ3JvdXBlZF9fIix5PSJfX2JhY2tncm91bmRfXyI7by5wcm90b3R5cGU9bmV3IGwsby50eXBlcz17YmFja2dyb3VuZDp2LGJveDpwLHJhbmdlOm0scG9pbnQ6Zn0sby5wcm90b3R5cGUuX2NyZWF0ZT1mdW5jdGlvbigpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3QuY2xhc3NOYW1lPSJ2aXMtaXRlbXNldCIsdFsidGltZWxpbmUtaXRlbXNldCJdPXRoaXMsdGhpcy5kb20uZnJhbWU9dDt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtlLmNsYXNzTmFtZT0idmlzLWJhY2tncm91bmQiLHQuYXBwZW5kQ2hpbGQoZSksdGhpcy5kb20uYmFja2dyb3VuZD1lO3ZhciBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2kuY2xhc3NOYW1lPSJ2aXMtZm9yZWdyb3VuZCIsdC5hcHBlbmRDaGlsZChpKSx0aGlzLmRvbS5mb3JlZ3JvdW5kPWk7dmFyIG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7by5jbGFzc05hbWU9InZpcy1heGlzIix0aGlzLmRvbS5heGlzPW87dmFyIG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7bi5jbGFzc05hbWU9InZpcy1sYWJlbHNldCIsdGhpcy5kb20ubGFiZWxTZXQ9bix0aGlzLl91cGRhdGVVbmdyb3VwZWQoKTt2YXIgcj1uZXcgdSh5LG51bGwsdGhpcyk7ci5zaG93KCksdGhpcy5ncm91cHNbeV09cix0aGlzLmhhbW1lcj1uZXcgcyh0aGlzLmJvZHkuZG9tLmNlbnRlckNvbnRhaW5lciksdGhpcy5oYW1tZXIub24oImhhbW1lci5pbnB1dCIsZnVuY3Rpb24odCl7dC5pc0ZpcnN0JiZ0aGlzLl9vblRvdWNoKHQpfS5iaW5kKHRoaXMpKSx0aGlzLmhhbW1lci5vbigicGFuc3RhcnQiLHRoaXMuX29uRHJhZ1N0YXJ0LmJpbmQodGhpcykpLHRoaXMuaGFtbWVyLm9uKCJwYW5tb3ZlIix0aGlzLl9vbkRyYWcuYmluZCh0aGlzKSksCnRoaXMuaGFtbWVyLm9uKCJwYW5lbmQiLHRoaXMuX29uRHJhZ0VuZC5iaW5kKHRoaXMpKSx0aGlzLmhhbW1lci5nZXQoInBhbiIpLnNldCh7dGhyZXNob2xkOjUsZGlyZWN0aW9uOnMuRElSRUNUSU9OX0hPUklaT05UQUx9KSx0aGlzLmhhbW1lci5vbigidGFwIix0aGlzLl9vblNlbGVjdEl0ZW0uYmluZCh0aGlzKSksdGhpcy5oYW1tZXIub24oInByZXNzIix0aGlzLl9vbk11bHRpU2VsZWN0SXRlbS5iaW5kKHRoaXMpKSx0aGlzLmhhbW1lci5vbigiZG91YmxldGFwIix0aGlzLl9vbkFkZEl0ZW0uYmluZCh0aGlzKSksdGhpcy5vcHRpb25zLnJ0bD90aGlzLmdyb3VwSGFtbWVyPW5ldyBzKHRoaXMuYm9keS5kb20ucmlnaHRDb250YWluZXIpOnRoaXMuZ3JvdXBIYW1tZXI9bmV3IHModGhpcy5ib2R5LmRvbS5sZWZ0Q29udGFpbmVyKSx0aGlzLmdyb3VwSGFtbWVyLm9uKCJwYW5zdGFydCIsdGhpcy5fb25Hcm91cERyYWdTdGFydC5iaW5kKHRoaXMpKSx0aGlzLmdyb3VwSGFtbWVyLm9uKCJwYW5tb3ZlIix0aGlzLl9vbkdyb3VwRHJhZy5iaW5kKHRoaXMpKSx0aGlzLmdyb3VwSGFtbWVyLm9uKCJwYW5lbmQiLHRoaXMuX29uR3JvdXBEcmFnRW5kLmJpbmQodGhpcykpLHRoaXMuZ3JvdXBIYW1tZXIuZ2V0KCJwYW4iKS5zZXQoe3RocmVzaG9sZDo1LGRpcmVjdGlvbjpzLkRJUkVDVElPTl9IT1JJWk9OVEFMfSksdGhpcy5ib2R5LmRvbS5jZW50ZXJDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdmVyIix0aGlzLl9vbk1vdXNlT3Zlci5iaW5kKHRoaXMpKSx0aGlzLmJvZHkuZG9tLmNlbnRlckNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW91dCIsdGhpcy5fb25Nb3VzZU91dC5iaW5kKHRoaXMpKSx0aGlzLnNob3coKX0sby5wcm90b3R5cGUuc2V0T3B0aW9ucz1mdW5jdGlvbih0KXtpZih0KXt2YXIgZT1bInR5cGUiLCJydGwiLCJhbGlnbiIsIm9yZGVyIiwic3RhY2siLCJzZWxlY3RhYmxlIiwibXVsdGlzZWxlY3QiLCJpdGVtc0Fsd2F5c0RyYWdnYWJsZSIsIm11bHRpc2VsZWN0UGVyR3JvdXAiLCJncm91cE9yZGVyIiwiZGF0YUF0dHJpYnV0ZXMiLCJ0ZW1wbGF0ZSIsImdyb3VwVGVtcGxhdGUiLCJoaWRlIiwic25hcCIsImdyb3VwT3JkZXJTd2FwIiwidG9vbHRpcE9uSXRlbVVwZGF0ZVRpbWUiXTtyLnNlbGVjdGl2ZUV4dGVuZChlLHRoaXMub3B0aW9ucyx0KSwib3JpZW50YXRpb24iaW4gdCYmKCJzdHJpbmciPT10eXBlb2YgdC5vcmllbnRhdGlvbj90aGlzLm9wdGlvbnMub3JpZW50YXRpb24uaXRlbT0idG9wIj09PXQub3JpZW50YXRpb24/InRvcCI6ImJvdHRvbSI6Im9iamVjdCI9PT1uKHQub3JpZW50YXRpb24pJiYiaXRlbSJpbiB0Lm9yaWVudGF0aW9uJiYodGhpcy5vcHRpb25zLm9yaWVudGF0aW9uLml0ZW09dC5vcmllbnRhdGlvbi5pdGVtKSksIm1hcmdpbiJpbiB0JiYoIm51bWJlciI9PXR5cGVvZiB0Lm1hcmdpbj8odGhpcy5vcHRpb25zLm1hcmdpbi5heGlzPXQubWFyZ2luLHRoaXMub3B0aW9ucy5tYXJnaW4uaXRlbS5ob3Jpem9udGFsPXQubWFyZ2luLHRoaXMub3B0aW9ucy5tYXJnaW4uaXRlbS52ZXJ0aWNhbD10Lm1hcmdpbik6Im9iamVjdCI9PT1uKHQubWFyZ2luKSYmKHIuc2VsZWN0aXZlRXh0ZW5kKFsiYXhpcyJdLHRoaXMub3B0aW9ucy5tYXJnaW4sdC5tYXJnaW4pLCJpdGVtImluIHQubWFyZ2luJiYoIm51bWJlciI9PXR5cGVvZiB0Lm1hcmdpbi5pdGVtPyh0aGlzLm9wdGlvbnMubWFyZ2luLml0ZW0uaG9yaXpvbnRhbD10Lm1hcmdpbi5pdGVtLHRoaXMub3B0aW9ucy5tYXJnaW4uaXRlbS52ZXJ0aWNhbD10Lm1hcmdpbi5pdGVtKToib2JqZWN0Ij09PW4odC5tYXJnaW4uaXRlbSkmJnIuc2VsZWN0aXZlRXh0ZW5kKFsiaG9yaXpvbnRhbCIsInZlcnRpY2FsIl0sdGhpcy5vcHRpb25zLm1hcmdpbi5pdGVtLHQubWFyZ2luLml0ZW0pKSkpLCJlZGl0YWJsZSJpbiB0JiYoImJvb2xlYW4iPT10eXBlb2YgdC5lZGl0YWJsZT8odGhpcy5vcHRpb25zLmVkaXRhYmxlLnVwZGF0ZVRpbWU9dC5lZGl0YWJsZSx0aGlzLm9wdGlvbnMuZWRpdGFibGUudXBkYXRlR3JvdXA9dC5lZGl0YWJsZSx0aGlzLm9wdGlvbnMuZWRpdGFibGUuYWRkPXQuZWRpdGFibGUsdGhpcy5vcHRpb25zLmVkaXRhYmxlLnJlbW92ZT10LmVkaXRhYmxlKToib2JqZWN0Ij09PW4odC5lZGl0YWJsZSkmJnIuc2VsZWN0aXZlRXh0ZW5kKFsidXBkYXRlVGltZSIsInVwZGF0ZUdyb3VwIiwiYWRkIiwicmVtb3ZlIl0sdGhpcy5vcHRpb25zLmVkaXRhYmxlLHQuZWRpdGFibGUpKSwiZ3JvdXBFZGl0YWJsZSJpbiB0JiYoImJvb2xlYW4iPT10eXBlb2YgdC5ncm91cEVkaXRhYmxlPyh0aGlzLm9wdGlvbnMuZ3JvdXBFZGl0YWJsZS5vcmRlcj10Lmdyb3VwRWRpdGFibGUsdGhpcy5vcHRpb25zLmdyb3VwRWRpdGFibGUuYWRkPXQuZ3JvdXBFZGl0YWJsZSx0aGlzLm9wdGlvbnMuZ3JvdXBFZGl0YWJsZS5yZW1vdmU9dC5ncm91cEVkaXRhYmxlKToib2JqZWN0Ij09PW4odC5ncm91cEVkaXRhYmxlKSYmci5zZWxlY3RpdmVFeHRlbmQoWyJvcmRlciIsImFkZCIsInJlbW92ZSJdLHRoaXMub3B0aW9ucy5ncm91cEVkaXRhYmxlLHQuZ3JvdXBFZGl0YWJsZSkpO3ZhciBpPWZ1bmN0aW9uKGUpe3ZhciBpPXRbZV07aWYoaSl7aWYoIShpIGluc3RhbmNlb2YgRnVuY3Rpb24pKXRocm93IG5ldyBFcnJvcigib3B0aW9uICIrZSsiIG11c3QgYmUgYSBmdW5jdGlvbiAiK2UrIihpdGVtLCBjYWxsYmFjaykiKTt0aGlzLm9wdGlvbnNbZV09aX19LmJpbmQodGhpcyk7WyJvbkFkZCIsIm9uVXBkYXRlIiwib25SZW1vdmUiLCJvbk1vdmUiLCJvbk1vdmluZyIsIm9uQWRkR3JvdXAiLCJvbk1vdmVHcm91cCIsIm9uUmVtb3ZlR3JvdXAiXS5mb3JFYWNoKGkpLHRoaXMubWFya0RpcnR5KCl9fSxvLnByb3RvdHlwZS5tYXJrRGlydHk9ZnVuY3Rpb24odCl7dGhpcy5ncm91cElkcz1bXSx0aGlzLnN0YWNrRGlydHk9ITAsdCYmdC5yZWZyZXNoSXRlbXMmJnIuZm9yRWFjaCh0aGlzLml0ZW1zLGZ1bmN0aW9uKHQpe3QuZGlydHk9ITAsdC5kaXNwbGF5ZWQmJnQucmVkcmF3KCl9KX0sby5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuaGlkZSgpLHRoaXMuc2V0SXRlbXMobnVsbCksdGhpcy5zZXRHcm91cHMobnVsbCksdGhpcy5oYW1tZXI9bnVsbCx0aGlzLmJvZHk9bnVsbCx0aGlzLmNvbnZlcnNpb249bnVsbH0sby5wcm90b3R5cGUuaGlkZT1mdW5jdGlvbigpe3RoaXMuZG9tLmZyYW1lLnBhcmVudE5vZGUmJnRoaXMuZG9tLmZyYW1lLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5kb20uZnJhbWUpLHRoaXMuZG9tLmF4aXMucGFyZW50Tm9kZSYmdGhpcy5kb20uYXhpcy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZG9tLmF4aXMpLHRoaXMuZG9tLmxhYmVsU2V0LnBhcmVudE5vZGUmJnRoaXMuZG9tLmxhYmVsU2V0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5kb20ubGFiZWxTZXQpfSxvLnByb3RvdHlwZS5zaG93PWZ1bmN0aW9uKCl7dGhpcy5kb20uZnJhbWUucGFyZW50Tm9kZXx8dGhpcy5ib2R5LmRvbS5jZW50ZXIuYXBwZW5kQ2hpbGQodGhpcy5kb20uZnJhbWUpLHRoaXMuZG9tLmF4aXMucGFyZW50Tm9kZXx8dGhpcy5ib2R5LmRvbS5iYWNrZ3JvdW5kVmVydGljYWwuYXBwZW5kQ2hpbGQodGhpcy5kb20uYXhpcyksdGhpcy5kb20ubGFiZWxTZXQucGFyZW50Tm9kZXx8KHRoaXMub3B0aW9ucy5ydGw/dGhpcy5ib2R5LmRvbS5yaWdodC5hcHBlbmRDaGlsZCh0aGlzLmRvbS5sYWJlbFNldCk6dGhpcy5ib2R5LmRvbS5sZWZ0LmFwcGVuZENoaWxkKHRoaXMuZG9tLmxhYmVsU2V0KSl9LG8ucHJvdG90eXBlLnNldFNlbGVjdGlvbj1mdW5jdGlvbih0KXt2YXIgZSxpLG8sbjtmb3Iodm9pZCAwPT10JiYodD1bXSksQXJyYXkuaXNBcnJheSh0KXx8KHQ9W3RdKSxlPTAsaT10aGlzLnNlbGVjdGlvbi5sZW5ndGg7ZTxpO2UrKylvPXRoaXMuc2VsZWN0aW9uW2VdLG49dGhpcy5pdGVtc1tvXSxuJiZuLnVuc2VsZWN0KCk7Zm9yKHRoaXMuc2VsZWN0aW9uPVtdLGU9MCxpPXQubGVuZ3RoO2U8aTtlKyspbz10W2VdLG49dGhpcy5pdGVtc1tvXSxuJiYodGhpcy5zZWxlY3Rpb24ucHVzaChvKSxuLnNlbGVjdCgpKX0sby5wcm90b3R5cGUuZ2V0U2VsZWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uLmNvbmNhdChbXSl9LG8ucHJvdG90eXBlLmdldFZpc2libGVJdGVtcz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuYm9keS5yYW5nZS5nZXRSYW5nZSgpO2lmKHRoaXMub3B0aW9ucy5ydGwpdmFyIGU9dGhpcy5ib2R5LnV0aWwudG9TY3JlZW4odC5zdGFydCksaT10aGlzLmJvZHkudXRpbC50b1NjcmVlbih0LmVuZCk7ZWxzZSB2YXIgaT10aGlzLmJvZHkudXRpbC50b1NjcmVlbih0LnN0YXJ0KSxlPXRoaXMuYm9keS51dGlsLnRvU2NyZWVuKHQuZW5kKTt2YXIgbz1bXTtmb3IodmFyIG4gaW4gdGhpcy5ncm91cHMpaWYodGhpcy5ncm91cHMuaGFzT3duUHJvcGVydHkobikpZm9yKHZhciBzPXRoaXMuZ3JvdXBzW25dLHI9cy52aXNpYmxlSXRlbXMsYT0wO2E8ci5sZW5ndGg7YSsrKXt2YXIgaD1yW2FdO3RoaXMub3B0aW9ucy5ydGw/aC5yaWdodDxpJiZoLnJpZ2h0K2gud2lkdGg+ZSYmby5wdXNoKGguaWQpOmgubGVmdDxlJiZoLmxlZnQraC53aWR0aD5pJiZvLnB1c2goaC5pZCl9cmV0dXJuIG99LG8ucHJvdG90eXBlLl9kZXNlbGVjdD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5zZWxlY3Rpb24saT0wLG89ZS5sZW5ndGg7aTxvO2krKylpZihlW2ldPT10KXtlLnNwbGljZShpLDEpO2JyZWFrfX0sby5wcm90b3R5cGUucmVkcmF3PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zLm1hcmdpbixlPXRoaXMuYm9keS5yYW5nZSxpPXIub3B0aW9uLmFzU2l6ZSxvPXRoaXMub3B0aW9ucyxuPW8ub3JpZW50YXRpb24uaXRlbSxzPSExLGE9dGhpcy5kb20uZnJhbWU7dGhpcy5wcm9wcy50b3A9dGhpcy5ib2R5LmRvbVByb3BzLnRvcC5oZWlnaHQrdGhpcy5ib2R5LmRvbVByb3BzLmJvcmRlci50b3AsdGhpcy5vcHRpb25zLnJ0bD90aGlzLnByb3BzLnJpZ2h0PXRoaXMuYm9keS5kb21Qcm9wcy5yaWdodC53aWR0aCt0aGlzLmJvZHkuZG9tUHJvcHMuYm9yZGVyLnJpZ2h0OnRoaXMucHJvcHMubGVmdD10aGlzLmJvZHkuZG9tUHJvcHMubGVmdC53aWR0aCt0aGlzLmJvZHkuZG9tUHJvcHMuYm9yZGVyLmxlZnQsYS5jbGFzc05hbWU9InZpcy1pdGVtc2V0IixzPXRoaXMuX29yZGVyR3JvdXBzKCl8fHM7dmFyIGg9ZS5lbmQtZS5zdGFydCxkPWghPXRoaXMubGFzdFZpc2libGVJbnRlcnZhbHx8dGhpcy5wcm9wcy53aWR0aCE9dGhpcy5wcm9wcy5sYXN0V2lkdGg7ZCYmKHRoaXMuc3RhY2tEaXJ0eT0hMCksdGhpcy5sYXN0VmlzaWJsZUludGVydmFsPWgsdGhpcy5wcm9wcy5sYXN0V2lkdGg9dGhpcy5wcm9wcy53aWR0aDt2YXIgbD10aGlzLnN0YWNrRGlydHksYz10aGlzLl9maXJzdEdyb3VwKCksdT17aXRlbTp0Lml0ZW0sYXhpczp0LmF4aXN9LHA9e2l0ZW06dC5pdGVtLGF4aXM6dC5pdGVtLnZlcnRpY2FsLzJ9LGY9MCxtPXQuYXhpcyt0Lml0ZW0udmVydGljYWw7cmV0dXJuIHRoaXMuZ3JvdXBzW3ldLnJlZHJhdyhlLHAsbCksci5mb3JFYWNoKHRoaXMuZ3JvdXBzLGZ1bmN0aW9uKHQpe3ZhciBpPXQ9PWM/dTpwLG89dC5yZWRyYXcoZSxpLGwpO3M9b3x8cyxmKz10LmhlaWdodH0pLGY9TWF0aC5tYXgoZixtKSx0aGlzLnN0YWNrRGlydHk9ITEsYS5zdHlsZS5oZWlnaHQ9aShmKSx0aGlzLnByb3BzLndpZHRoPWEub2Zmc2V0V2lkdGgsdGhpcy5wcm9wcy5oZWlnaHQ9Zix0aGlzLmRvbS5heGlzLnN0eWxlLnRvcD1pKCJ0b3AiPT1uP3RoaXMuYm9keS5kb21Qcm9wcy50b3AuaGVpZ2h0K3RoaXMuYm9keS5kb21Qcm9wcy5ib3JkZXIudG9wOnRoaXMuYm9keS5kb21Qcm9wcy50b3AuaGVpZ2h0K3RoaXMuYm9keS5kb21Qcm9wcy5jZW50ZXJDb250YWluZXIuaGVpZ2h0KSx0aGlzLm9wdGlvbnMucnRsP3RoaXMuZG9tLmF4aXMuc3R5bGUucmlnaHQ9IjAiOnRoaXMuZG9tLmF4aXMuc3R5bGUubGVmdD0iMCIscz10aGlzLl9pc1Jlc2l6ZWQoKXx8c30sby5wcm90b3R5cGUuX2ZpcnN0R3JvdXA9ZnVuY3Rpb24oKXt2YXIgdD0idG9wIj09dGhpcy5vcHRpb25zLm9yaWVudGF0aW9uLml0ZW0/MDp0aGlzLmdyb3VwSWRzLmxlbmd0aC0xLGU9dGhpcy5ncm91cElkc1t0XSxpPXRoaXMuZ3JvdXBzW2VdfHx0aGlzLmdyb3Vwc1tnXTtyZXR1cm4gaXx8bnVsbH0sby5wcm90b3R5cGUuX3VwZGF0ZVVuZ3JvdXBlZD1mdW5jdGlvbigpe3ZhciB0LGUsaT10aGlzLmdyb3Vwc1tnXTt0aGlzLmdyb3Vwc1t5XTtpZih0aGlzLmdyb3Vwc0RhdGEpe2lmKGkpe2kuaGlkZSgpLGRlbGV0ZSB0aGlzLmdyb3Vwc1tnXTtmb3IoZSBpbiB0aGlzLml0ZW1zKWlmKHRoaXMuaXRlbXMuaGFzT3duUHJvcGVydHkoZSkpe3Q9dGhpcy5pdGVtc1tlXSx0LnBhcmVudCYmdC5wYXJlbnQucmVtb3ZlKHQpO3ZhciBvPXRoaXMuX2dldEdyb3VwSWQodC5kYXRhKSxuPXRoaXMuZ3JvdXBzW29dO24mJm4uYWRkKHQpfHx0LmhpZGUoKX19fWVsc2UgaWYoIWkpe3ZhciBzPW51bGwscj1udWxsO2k9bmV3IGMocyxyLHRoaXMpLHRoaXMuZ3JvdXBzW2ddPWk7Zm9yKGUgaW4gdGhpcy5pdGVtcyl0aGlzLml0ZW1zLmhhc093blByb3BlcnR5KGUpJiYodD10aGlzLml0ZW1zW2VdLGkuYWRkKHQpKTtpLnNob3coKX19LG8ucHJvdG90eXBlLmdldExhYmVsU2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tLmxhYmVsU2V0fSxvLnByb3RvdHlwZS5zZXRJdGVtcz1mdW5jdGlvbih0KXt2YXIgZSxpPXRoaXMsbz10aGlzLml0ZW1zRGF0YTtpZih0KXtpZighKHQgaW5zdGFuY2VvZiBhfHx0IGluc3RhbmNlb2YgaCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGF0YSBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIERhdGFTZXQgb3IgRGF0YVZpZXciKTt0aGlzLml0ZW1zRGF0YT10fWVsc2UgdGhpcy5pdGVtc0RhdGE9bnVsbDtpZihvJiYoci5mb3JFYWNoKHRoaXMuaXRlbUxpc3RlbmVycyxmdW5jdGlvbih0LGUpe28ub2ZmKGUsdCl9KSxlPW8uZ2V0SWRzKCksdGhpcy5fb25SZW1vdmUoZSkpLHRoaXMuaXRlbXNEYXRhKXt2YXIgbj10aGlzLmlkO3IuZm9yRWFjaCh0aGlzLml0ZW1MaXN0ZW5lcnMsZnVuY3Rpb24odCxlKXtpLml0ZW1zRGF0YS5vbihlLHQsbil9KSxlPXRoaXMuaXRlbXNEYXRhLmdldElkcygpLHRoaXMuX29uQWRkKGUpLHRoaXMuX3VwZGF0ZVVuZ3JvdXBlZCgpfXRoaXMuYm9keS5lbWl0dGVyLmVtaXQoIl9jaGFuZ2UiLHtxdWV1ZTohMH0pfSxvLnByb3RvdHlwZS5nZXRJdGVtcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLml0ZW1zRGF0YX0sby5wcm90b3R5cGUuc2V0R3JvdXBzPWZ1bmN0aW9uKHQpe3ZhciBlLGk9dGhpcztpZih0aGlzLmdyb3Vwc0RhdGEmJihyLmZvckVhY2godGhpcy5ncm91cExpc3RlbmVycyxmdW5jdGlvbih0LGUpe2kuZ3JvdXBzRGF0YS5vZmYoZSx0KX0pLGU9dGhpcy5ncm91cHNEYXRhLmdldElkcygpLHRoaXMuZ3JvdXBzRGF0YT1udWxsLHRoaXMuX29uUmVtb3ZlR3JvdXBzKGUpKSx0KXtpZighKHQgaW5zdGFuY2VvZiBhfHx0IGluc3RhbmNlb2YgaCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGF0YSBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIERhdGFTZXQgb3IgRGF0YVZpZXciKTt0aGlzLmdyb3Vwc0RhdGE9dH1lbHNlIHRoaXMuZ3JvdXBzRGF0YT1udWxsO2lmKHRoaXMuZ3JvdXBzRGF0YSl7dmFyIG89dGhpcy5pZDtyLmZvckVhY2godGhpcy5ncm91cExpc3RlbmVycyxmdW5jdGlvbih0LGUpe2kuZ3JvdXBzRGF0YS5vbihlLHQsbyl9KSxlPXRoaXMuZ3JvdXBzRGF0YS5nZXRJZHMoKSx0aGlzLl9vbkFkZEdyb3VwcyhlKX10aGlzLl91cGRhdGVVbmdyb3VwZWQoKSx0aGlzLl9vcmRlcigpLHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoIl9jaGFuZ2UiLHtxdWV1ZTohMH0pfSxvLnByb3RvdHlwZS5nZXRHcm91cHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncm91cHNEYXRhfSxvLnByb3RvdHlwZS5yZW1vdmVJdGVtPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaXRlbXNEYXRhLmdldCh0KSxpPXRoaXMuaXRlbXNEYXRhLmdldERhdGFTZXQoKTtlJiZ0aGlzLm9wdGlvbnMub25SZW1vdmUoZSxmdW5jdGlvbihlKXtlJiZpLnJlbW92ZSh0KX0pfSxvLnByb3RvdHlwZS5fZ2V0VHlwZT1mdW5jdGlvbih0KXtyZXR1cm4gdC50eXBlfHx0aGlzLm9wdGlvbnMudHlwZXx8KHQuZW5kPyJyYW5nZSI6ImJveCIpfSxvLnByb3RvdHlwZS5fZ2V0R3JvdXBJZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9nZXRUeXBlKHQpO3JldHVybiJiYWNrZ3JvdW5kIj09ZSYmdm9pZCAwPT10Lmdyb3VwP3k6dGhpcy5ncm91cHNEYXRhP3QuZ3JvdXA6Z30sby5wcm90b3R5cGUuX29uVXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBpLG49ZS5pdGVtc0RhdGEuZ2V0KHQsZS5pdGVtT3B0aW9ucykscz1lLml0ZW1zW3RdLHI9bj9lLl9nZXRUeXBlKG4pOm51bGwsYT1vLnR5cGVzW3JdO2lmKHMmJihhJiZzIGluc3RhbmNlb2YgYT9lLl91cGRhdGVJdGVtKHMsbik6KGk9cy5zZWxlY3RlZCxlLl9yZW1vdmVJdGVtKHMpLHM9bnVsbCkpLCFzJiZuKXtpZighYSl0aHJvdyJyYW5nZW92ZXJmbG93Ij09cj9uZXcgVHlwZUVycm9yKCdJdGVtIHR5cGUgInJhbmdlb3ZlcmZsb3ciIGlzIGRlcHJlY2F0ZWQuIFVzZSBjc3Mgc3R5bGluZyBpbnN0ZWFkOiAudmlzLWl0ZW0udmlzLXJhbmdlIC52aXMtaXRlbS1jb250ZW50IHtvdmVyZmxvdzogdmlzaWJsZTt9Jyk6bmV3IFR5cGVFcnJvcignVW5rbm93biBpdGVtIHR5cGUgIicrcisnIicpO3M9bmV3IGEobixlLmNvbnZlcnNpb24sZS5vcHRpb25zKSxzLmlkPXQsZS5fYWRkSXRlbShzKSxpJiYodGhpcy5zZWxlY3Rpb24ucHVzaCh0KSxzLnNlbGVjdCgpKX19LmJpbmQodGhpcykpLHRoaXMuX29yZGVyKCksdGhpcy5zdGFja0RpcnR5PSEwLHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoIl9jaGFuZ2UiLHtxdWV1ZTohMH0pfSxvLnByb3RvdHlwZS5fb25BZGQ9by5wcm90b3R5cGUuX29uVXBkYXRlLG8ucHJvdG90eXBlLl9vblJlbW92ZT1mdW5jdGlvbih0KXt2YXIgZT0wLGk9dGhpczt0LmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG89aS5pdGVtc1t0XTtvJiYoZSsrLGkuX3JlbW92ZUl0ZW0obykpfSksZSYmKHRoaXMuX29yZGVyKCksdGhpcy5zdGFja0RpcnR5PSEwLHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoIl9jaGFuZ2UiLHtxdWV1ZTohMH0pKX0sby5wcm90b3R5cGUuX29yZGVyPWZ1bmN0aW9uKCl7ci5mb3JFYWNoKHRoaXMuZ3JvdXBzLGZ1bmN0aW9uKHQpe3Qub3JkZXIoKX0pfSxvLnByb3RvdHlwZS5fb25VcGRhdGVHcm91cHM9ZnVuY3Rpb24odCl7dGhpcy5fb25BZGRHcm91cHModCl9LG8ucHJvdG90eXBlLl9vbkFkZEdyb3Vwcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3QuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgaT1lLmdyb3Vwc0RhdGEuZ2V0KHQpLG89ZS5ncm91cHNbdF07aWYobylvLnNldERhdGEoaSk7ZWxzZXtpZih0PT1nfHx0PT15KXRocm93IG5ldyBFcnJvcigiSWxsZWdhbCBncm91cCBpZC4gIit0KyIgaXMgYSByZXNlcnZlZCBpZC4iKTt2YXIgbj1PYmplY3QuY3JlYXRlKGUub3B0aW9ucyk7ci5leHRlbmQobix7aGVpZ2h0Om51bGx9KSxvPW5ldyBjKHQsaSxlKSxlLmdyb3Vwc1t0XT1vO2Zvcih2YXIgcyBpbiBlLml0ZW1zKWlmKGUuaXRlbXMuaGFzT3duUHJvcGVydHkocykpe3ZhciBhPWUuaXRlbXNbc107YS5kYXRhLmdyb3VwPT10JiZvLmFkZChhKX1vLm9yZGVyKCksby5zaG93KCl9fSksdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdCgiX2NoYW5nZSIse3F1ZXVlOiEwfSl9LG8ucHJvdG90eXBlLl9vblJlbW92ZUdyb3Vwcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdyb3Vwczt0LmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGk9ZVt0XTtpJiYoaS5oaWRlKCksZGVsZXRlIGVbdF0pfSksdGhpcy5tYXJrRGlydHkoKSx0aGlzLmJvZHkuZW1pdHRlci5lbWl0KCJfY2hhbmdlIix7cXVldWU6ITB9KX0sby5wcm90b3R5cGUuX29yZGVyR3JvdXBzPWZ1bmN0aW9uKCl7aWYodGhpcy5ncm91cHNEYXRhKXt2YXIgdD10aGlzLmdyb3Vwc0RhdGEuZ2V0SWRzKHtvcmRlcjp0aGlzLm9wdGlvbnMuZ3JvdXBPcmRlcn0pLGU9IXIuZXF1YWxBcnJheSh0LHRoaXMuZ3JvdXBJZHMpO2lmKGUpe3ZhciBpPXRoaXMuZ3JvdXBzO3QuZm9yRWFjaChmdW5jdGlvbih0KXtpW3RdLmhpZGUoKX0pLHQuZm9yRWFjaChmdW5jdGlvbih0KXtpW3RdLnNob3coKX0pLHRoaXMuZ3JvdXBJZHM9dH1yZXR1cm4gZX1yZXR1cm4hMX0sby5wcm90b3R5cGUuX2FkZEl0ZW09ZnVuY3Rpb24odCl7dGhpcy5pdGVtc1t0LmlkXT10O3ZhciBlPXRoaXMuX2dldEdyb3VwSWQodC5kYXRhKSxpPXRoaXMuZ3JvdXBzW2VdO2kmJmkuYWRkKHQpfSxvLnByb3RvdHlwZS5fdXBkYXRlSXRlbT1mdW5jdGlvbih0LGUpe3ZhciBpPXQuZGF0YS5ncm91cCxvPXQuZGF0YS5zdWJncm91cDtpZih0LnNldERhdGEoZSksaSE9dC5kYXRhLmdyb3VwfHxvIT10LmRhdGEuc3ViZ3JvdXApe3ZhciBuPXRoaXMuZ3JvdXBzW2ldO24mJm4ucmVtb3ZlKHQpO3ZhciBzPXRoaXMuX2dldEdyb3VwSWQodC5kYXRhKSxyPXRoaXMuZ3JvdXBzW3NdO3ImJnIuYWRkKHQpfX0sby5wcm90b3R5cGUuX3JlbW92ZUl0ZW09ZnVuY3Rpb24odCl7dC5oaWRlKCksZGVsZXRlIHRoaXMuaXRlbXNbdC5pZF07dmFyIGU9dGhpcy5zZWxlY3Rpb24uaW5kZXhPZih0LmlkKTtlIT0tMSYmdGhpcy5zZWxlY3Rpb24uc3BsaWNlKGUsMSksdC5wYXJlbnQmJnQucGFyZW50LnJlbW92ZSh0KX0sby5wcm90b3R5cGUuX2NvbnN0cnVjdEJ5RW5kQXJyYXk9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLGk9MDtpPHQubGVuZ3RoO2krKyl0W2ldaW5zdGFuY2VvZiBtJiZlLnB1c2godFtpXSk7cmV0dXJuIGV9LG8ucHJvdG90eXBlLl9vblRvdWNoPWZ1bmN0aW9uKHQpe3RoaXMudG91Y2hQYXJhbXMuaXRlbT10aGlzLml0ZW1Gcm9tVGFyZ2V0KHQpLHRoaXMudG91Y2hQYXJhbXMuZHJhZ0xlZnRJdGVtPXQudGFyZ2V0LmRyYWdMZWZ0SXRlbXx8ITEsdGhpcy50b3VjaFBhcmFtcy5kc
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment