Skip to content

Instantly share code, notes, and snippets.

@timelyportfolio
Last active April 23, 2017 14:09
Show Gist options
  • Save timelyportfolio/56bb5cde5446ebc649593e2856c736f4 to your computer and use it in GitHub Desktop.
Save timelyportfolio/56bb5cde5446ebc649593e2856c736f4 to your computer and use it in GitHub Desktop.
vue tree with d3horizon in R
license: mit

advanced (probably improper and not best practice) code to combine vuejs Element tree with R/d3.js htmlwidget d3horizonR

Code

library(htmltools)
library(vueR)
library(d3horizonR)
library(d3r)
library(dplyr)
library(tibble)

#### Element examples ####################################
element <- htmlDependency(
  name = "element",
  version = "1.2.9",
  src = c(href="https://unpkg.com/element-ui/lib"),
  script = "index.js",
  stylesheet = "theme-default/index.css"
)

#make some random treemap data
rhd <- treemap::random.hierarchical.data()
#change x to be a series of random data for a horizon
rhd <- rhd %>%
  mutate(x = lapply(x, function(x) {cumprod(1 + runif(365, -0.05, 0.05)) - 1}))

tl_tree <- tagList(
  tags$div(
    id = "app",
    tag(
      "el-tree",
      list(
        "ref" = "mytree",
        ":data" = "data.children",
        ":props" = "defaultProps",
        "show-checkbox" = NA,
        ":render-content" = "renderContent",
        "@node-expand" = "makeHorizon"
      )
    )
  ),
  tags$script(HTML(
sprintf(
"
var app = new Vue({
  el: '#app',
  data: {
    data:%s,
    defaultProps: {
      'children': 'children',
      'label': 'name'
    }
  },
  methods: {
    renderContent: function (createElement, x) {
      return createElement('div',
        {style: {display: 'inline'}},
        [
          x.data.name,
          createElement('div', {class: 'horizoncontainer', style: {display:'inline'}, domProps: {'__data__': [x.data.x]}})
        ]
      )
    },
    makeHorizon: function(closed, props, open) {
      var hzw = HTMLWidgets.widgets.filter(function(w) {return w.name === 'd3horizon'})[0];
      Array.prototype.forEach.call(
        open.$el.querySelectorAll('.horizoncontainer'),
        function(d) {
          var instance = hzw.initialize(d);
          if(d.__data__[0]) {
            instance.renderValue({data: d.__data__, options:{width:200, height:35}});
            d.querySelector('.horizon').style.display = 'inherit';
            d.querySelector('canvas').style.verticalAlign = 'middle';
          }
        }
      )
    }
  }
})
",
d3r::d3_nest(
  rhd,
  value_cols="x"
)
)
  )),
  html_dependency_vue(),
  element,
  htmlwidgets::getDependency("d3horizon", "d3horizonR")
)

browsable(
  tl_tree
)
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,LyohDQogKiBWdWUuanMgdjIuMi42DQogKiAoYykgMjAxNC0yMDE3IEV2YW4gWW91DQogKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuDQogKi8NCiFmdW5jdGlvbihlLHQpeyJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmInVuZGVmaW5lZCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9dCgpOiJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKHQpOmUuVnVlPXQoKX0odGhpcyxmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBlKGUpe3JldHVybiBudWxsPT1lPyIiOiJvYmplY3QiPT10eXBlb2YgZT9KU09OLnN0cmluZ2lmeShlLG51bGwsMik6U3RyaW5nKGUpfWZ1bmN0aW9uIHQoZSl7dmFyIHQ9cGFyc2VGbG9hdChlKTtyZXR1cm4gaXNOYU4odCk/ZTp0fWZ1bmN0aW9uIG4oZSx0KXtmb3IodmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKSxyPWUuc3BsaXQoIiwiKSxpPTA7aTxyLmxlbmd0aDtpKyspbltyW2ldXT0hMDtyZXR1cm4gdD9mdW5jdGlvbihlKXtyZXR1cm4gbltlLnRvTG93ZXJDYXNlKCldfTpmdW5jdGlvbihlKXtyZXR1cm4gbltlXX19ZnVuY3Rpb24gcihlLHQpe2lmKGUubGVuZ3RoKXt2YXIgbj1lLmluZGV4T2YodCk7aWYobj4tMSlyZXR1cm4gZS5zcGxpY2UobiwxKX19ZnVuY3Rpb24gaShlLHQpe3JldHVybiAkaS5jYWxsKGUsdCl9ZnVuY3Rpb24gbyhlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGV8fCJudW1iZXIiPT10eXBlb2YgZX1mdW5jdGlvbiBhKGUpe3ZhciB0PU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0W25dfHwodFtuXT1lKG4pKX19ZnVuY3Rpb24gcyhlLHQpe2Z1bmN0aW9uIG4obil7dmFyIHI9YXJndW1lbnRzLmxlbmd0aDtyZXR1cm4gcj9yPjE/ZS5hcHBseSh0LGFyZ3VtZW50cyk6ZS5jYWxsKHQsbik6ZS5jYWxsKHQpfXJldHVybiBuLl9sZW5ndGg9ZS5sZW5ndGgsbn1mdW5jdGlvbiBjKGUsdCl7dD10fHwwO2Zvcih2YXIgbj1lLmxlbmd0aC10LHI9bmV3IEFycmF5KG4pO24tLTspcltuXT1lW24rdF07cmV0dXJuIHJ9ZnVuY3Rpb24gdShlLHQpe2Zvcih2YXIgbiBpbiB0KWVbbl09dFtuXTtyZXR1cm4gZX1mdW5jdGlvbiBsKGUpe3JldHVybiBudWxsIT09ZSYmIm9iamVjdCI9PXR5cGVvZiBlfWZ1bmN0aW9uIGYoZSl7cmV0dXJuIGtpLmNhbGwoZSk9PT1BaX1mdW5jdGlvbiBwKGUpe2Zvcih2YXIgdD17fSxuPTA7bjxlLmxlbmd0aDtuKyspZVtuXSYmdSh0LGVbbl0pO3JldHVybiB0fWZ1bmN0aW9uIGQoKXt9ZnVuY3Rpb24gdihlLHQpe3ZhciBuPWwoZSkscj1sKHQpO2lmKCFufHwhcilyZXR1cm4hbiYmIXImJlN0cmluZyhlKT09PVN0cmluZyh0KTt0cnl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpPT09SlNPTi5zdHJpbmdpZnkodCl9Y2F0Y2gobil7cmV0dXJuIGU9PT10fX1mdW5jdGlvbiBoKGUsdCl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspaWYodihlW25dLHQpKXJldHVybiBuO3JldHVybi0xfWZ1bmN0aW9uIG0oZSl7dmFyIHQ9ITE7cmV0dXJuIGZ1bmN0aW9uKCl7dHx8KHQ9ITAsZSgpKX19ZnVuY3Rpb24gZyhlKXt2YXIgdD0oZSsiIikuY2hhckNvZGVBdCgwKTtyZXR1cm4gMzY9PT10fHw5NT09PXR9ZnVuY3Rpb24geShlLHQsbixyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ISFyLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pfWZ1bmN0aW9uIF8oZSl7aWYoIWppLnRlc3QoZSkpe3ZhciB0PWUuc3BsaXQoIi4iKTtyZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe2lmKCFlKXJldHVybjtlPWVbdFtuXV19cmV0dXJuIGV9fX1mdW5jdGlvbiBiKGUpe3JldHVybi9uYXRpdmUgY29kZS8udGVzdChlLnRvU3RyaW5nKCkpfWZ1bmN0aW9uICQoZSl7cWkudGFyZ2V0JiZXaS5wdXNoKHFpLnRhcmdldCkscWkudGFyZ2V0PWV9ZnVuY3Rpb24gdygpe3FpLnRhcmdldD1XaS5wb3AoKX1mdW5jdGlvbiB4KGUsdCl7ZS5fX3Byb3RvX189dH1mdW5jdGlvbiBDKGUsdCxuKXtmb3IodmFyIHI9MCxpPW4ubGVuZ3RoO3I8aTtyKyspe3ZhciBvPW5bcl07eShlLG8sdFtvXSl9fWZ1bmN0aW9uIGsoZSx0KXtpZihsKGUpKXt2YXIgbjtyZXR1cm4gaShlLCJfX29iX18iKSYmZS5fX29iX18gaW5zdGFuY2VvZiBYaT9uPWUuX19vYl9fOlFpLnNob3VsZENvbnZlcnQmJiFVaSgpJiYoQXJyYXkuaXNBcnJheShlKXx8ZihlKSkmJk9iamVjdC5pc0V4dGVuc2libGUoZSkmJiFlLl9pc1Z1ZSYmKG49bmV3IFhpKGUpKSx0JiZuJiZuLnZtQ291bnQrKyxufX1mdW5jdGlvbiBBKGUsdCxuLHIpe3ZhciBpPW5ldyBxaSxvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KTtpZighb3x8by5jb25maWd1cmFibGUhPT0hMSl7dmFyIGE9byYmby5nZXQscz1vJiZvLnNldCxjPWsobik7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7dmFyIHQ9YT9hLmNhbGwoZSk6bjtyZXR1cm4gcWkudGFyZ2V0JiYoaS5kZXBlbmQoKSxjJiZjLmRlcC5kZXBlbmQoKSxBcnJheS5pc0FycmF5KHQpJiZTKHQpKSx0fSxzZXQ6ZnVuY3Rpb24odCl7dmFyIHI9YT9hLmNhbGwoZSk6bjt0PT09cnx8dCE9PXQmJnIhPT1yfHwocz9zLmNhbGwoZSx0KTpuPXQsYz1rKHQpLGkubm90aWZ5KCkpfX0pfX1mdW5jdGlvbiBPKGUsdCxuKXtpZihBcnJheS5pc0FycmF5KGUpJiYibnVtYmVyIj09dHlwZW9mIHQpcmV0dXJuIGUubGVuZ3RoPU1hdGgubWF4KGUubGVuZ3RoLHQpLGUuc3BsaWNlKHQsMSxuKSxuO2lmKGkoZSx0KSlyZXR1cm4gZVt0XT1uLG47dmFyIHI9ZS5fX29iX187cmV0dXJuIGUuX2lzVnVlfHxyJiZyLnZtQ291bnQ/bjpyPyhBKHIudmFsdWUsdCxuKSxyLmRlcC5ub3RpZnkoKSxuKTooZVt0XT1uLG4pfWZ1bmN0aW9uIFQoZSx0KXtpZihBcnJheS5pc0FycmF5KGUpJiYibnVtYmVyIj09dHlwZW9mIHQpcmV0dXJuIHZvaWQgZS5zcGxpY2UodCwxKTt2YXIgbj1lLl9fb2JfXztlLl9pc1Z1ZXx8biYmbi52bUNvdW50fHxpKGUsdCkmJihkZWxldGUgZVt0XSxuJiZuLmRlcC5ub3RpZnkoKSl9ZnVuY3Rpb24gUyhlKXtmb3IodmFyIHQ9dm9pZCAwLG49MCxyPWUubGVuZ3RoO248cjtuKyspdD1lW25dLHQmJnQuX19vYl9fJiZ0Ll9fb2JfXy5kZXAuZGVwZW5kKCksQXJyYXkuaXNBcnJheSh0KSYmUyh0KX1mdW5jdGlvbiBFKGUsdCl7aWYoIXQpcmV0dXJuIGU7Zm9yKHZhciBuLHIsbyxhPU9iamVjdC5rZXlzKHQpLHM9MDtzPGEubGVuZ3RoO3MrKyluPWFbc10scj1lW25dLG89dFtuXSxpKGUsbik/ZihyKSYmZihvKSYmRShyLG8pOk8oZSxuLG8pO3JldHVybiBlfWZ1bmN0aW9uIGooZSx0KXtyZXR1cm4gdD9lP2UuY29uY2F0KHQpOkFycmF5LmlzQXJyYXkodCk/dDpbdF06ZX1mdW5jdGlvbiBOKGUsdCl7dmFyIG49T2JqZWN0LmNyZWF0ZShlfHxudWxsKTtyZXR1cm4gdD91KG4sdCk6bn1mdW5jdGlvbiBJKGUpe3ZhciB0PWUucHJvcHM7aWYodCl7dmFyIG4scixpLG89e307aWYoQXJyYXkuaXNBcnJheSh0KSlmb3Iobj10Lmxlbmd0aDtuLS07KSJzdHJpbmciPT10eXBlb2Yocj10W25dKSYmKGk9d2kociksb1tpXT17dHlwZTpudWxsfSk7ZWxzZSBpZihmKHQpKWZvcih2YXIgYSBpbiB0KXI9dFthXSxpPXdpKGEpLG9baV09ZihyKT9yOnt0eXBlOnJ9O2UucHJvcHM9b319ZnVuY3Rpb24gTChlKXt2YXIgdD1lLmRpcmVjdGl2ZXM7aWYodClmb3IodmFyIG4gaW4gdCl7dmFyIHI9dFtuXTsiZnVuY3Rpb24iPT10eXBlb2YgciYmKHRbbl09e2JpbmQ6cix1cGRhdGU6cn0pfX1mdW5jdGlvbiBEKGUsdCxuKXtmdW5jdGlvbiByKHIpe3ZhciBpPWVvW3JdfHx0bztsW3JdPWkoZVtyXSx0W3JdLG4scil9SSh0KSxMKHQpO3ZhciBvPXQuZXh0ZW5kcztpZihvJiYoZT0iZnVuY3Rpb24iPT10eXBlb2Ygbz9EKGUsby5vcHRpb25zLG4pOkQoZSxvLG4pKSx0Lm1peGlucylmb3IodmFyIGE9MCxzPXQubWl4aW5zLmxlbmd0aDthPHM7YSsrKXt2YXIgYz10Lm1peGluc1thXTtjLnByb3RvdHlwZSBpbnN0YW5jZW9mIG50JiYoYz1jLm9wdGlvbnMpLGU9RChlLGMsbil9dmFyIHUsbD17fTtmb3IodSBpbiBlKXIodSk7Zm9yKHUgaW4gdClpKGUsdSl8fHIodSk7cmV0dXJuIGx9ZnVuY3Rpb24gTShlLHQsbixyKXtpZigic3RyaW5nIj09dHlwZW9mIG4pe3ZhciBvPWVbdF07aWYoaShvLG4pKXJldHVybiBvW25dO3ZhciBhPXdpKG4pO2lmKGkobyxhKSlyZXR1cm4gb1thXTt2YXIgcz14aShhKTtpZihpKG8scykpcmV0dXJuIG9bc107dmFyIGM9b1tuXXx8b1thXXx8b1tzXTtyZXR1cm4gY319ZnVuY3Rpb24gUChlLHQsbixyKXt2YXIgbz10W2VdLGE9IWkobixlKSxzPW5bZV07aWYoSChCb29sZWFuLG8udHlwZSkmJihhJiYhaShvLCJkZWZhdWx0Iik/cz0hMTpIKFN0cmluZyxvLnR5cGUpfHwiIiE9PXMmJnMhPT1DaShlKXx8KHM9ITApKSx2b2lkIDA9PT1zKXtzPVIocixvLGUpO3ZhciBjPVFpLnNob3VsZENvbnZlcnQ7UWkuc2hvdWxkQ29udmVydD0hMCxrKHMpLFFpLnNob3VsZENvbnZlcnQ9Y31yZXR1cm4gc31mdW5jdGlvbiBSKGUsdCxuKXtpZihpKHQsImRlZmF1bHQiKSl7dmFyIHI9dC5kZWZhdWx0O3JldHVybiBlJiZlLiRvcHRpb25zLnByb3BzRGF0YSYmdm9pZCAwPT09ZS4kb3B0aW9ucy5wcm9wc0RhdGFbbl0mJnZvaWQgMCE9PWUuX3Byb3BzW25dP2UuX3Byb3BzW25dOiJmdW5jdGlvbiI9PXR5cGVvZiByJiYiRnVuY3Rpb24iIT09Rih0LnR5cGUpP3IuY2FsbChlKTpyfX1mdW5jdGlvbiBGKGUpe3ZhciB0PWUmJmUudG9TdHJpbmcoKS5tYXRjaCgvXlxzKmZ1bmN0aW9uIChcdyspLyk7cmV0dXJuIHQmJnRbMV19ZnVuY3Rpb24gSChlLHQpe2lmKCFBcnJheS5pc0FycmF5KHQpKXJldHVybiBGKHQpPT09RihlKTtmb3IodmFyIG49MCxyPXQubGVuZ3RoO248cjtuKyspaWYoRih0W25dKT09PUYoZSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gVShlLHQsbil7aWYoU2kuZXJyb3JIYW5kbGVyKVNpLmVycm9ySGFuZGxlci5jYWxsKG51bGwsZSx0LG4pO2Vsc2V7aWYoIUlpfHwidW5kZWZpbmVkIj09dHlwZW9mIGNvbnNvbGUpdGhyb3cgZTtjb25zb2xlLmVycm9yKGUpfX1mdW5jdGlvbiBCKGUpe3JldHVybiBuZXcgbm8odm9pZCAwLHZvaWQgMCx2b2lkIDAsU3RyaW5nKGUpKX1mdW5jdGlvbiBWKGUpe3ZhciB0PW5ldyBubyhlLnRhZyxlLmRhdGEsZS5jaGlsZHJlbixlLnRleHQsZS5lbG0sZS5jb250ZXh0LGUuY29tcG9uZW50T3B0aW9ucyk7cmV0dXJuIHQubnM9ZS5ucyx0LmlzU3RhdGljPWUuaXNTdGF0aWMsdC5rZXk9ZS5rZXksdC5pc0Nsb25lZD0hMCx0fWZ1bmN0aW9uIHooZSl7Zm9yKHZhciB0PWUubGVuZ3RoLG49bmV3IEFycmF5KHQpLHI9MDtyPHQ7cisrKW5bcl09VihlW3JdKTtyZXR1cm4gbn1mdW5jdGlvbiBKKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZT1hcmd1bWVudHMsbj10LmZucztpZighQXJyYXkuaXNBcnJheShuKSlyZXR1cm4gbi5hcHBseShudWxsLGFyZ3VtZW50cyk7Zm9yKHZhciByPTA7cjxuLmxlbmd0aDtyKyspbltyXS5hcHBseShudWxsLGUpfXJldHVybiB0LmZucz1lLHR9ZnVuY3Rpb24gSyhlLHQsbixyLGkpe3ZhciBvLGEscyxjO2ZvcihvIGluIGUpYT1lW29dLHM9dFtvXSxjPWFvKG8pLGEmJihzP2EhPT1zJiYocy5mbnM9YSxlW29dPXMpOihhLmZuc3x8KGE9ZVtvXT1KKGEpKSxuKGMubmFtZSxhLGMub25jZSxjLmNhcHR1cmUpKSk7Zm9yKG8gaW4gdCllW29dfHwoYz1hbyhvKSxyKGMubmFtZSx0W29dLGMuY2FwdHVyZSkpfWZ1bmN0aW9uIHEoZSx0LG4pe2Z1bmN0aW9uIGkoKXtuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxyKG8uZm5zLGkpfXZhciBvLGE9ZVt0XTthP2EuZm5zJiZhLm1lcmdlZD8obz1hLG8uZm5zLnB1c2goaSkpOm89SihbYSxpXSk6bz1KKFtpXSksby5tZXJnZWQ9ITAsZVt0XT1vfWZ1bmN0aW9uIFcoZSl7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0KyspaWYoQXJyYXkuaXNBcnJheShlW3RdKSlyZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSxlKTtyZXR1cm4gZX1mdW5jdGlvbiBaKGUpe3JldHVybiBvKGUpP1tCKGUpXTpBcnJheS5pc0FycmF5KGUpP0coZSk6dm9pZCAwfWZ1bmN0aW9uIEcoZSx0KXt2YXIgbixyLGksYT1bXTtmb3Iobj0wO248ZS5sZW5ndGg7bisrKW51bGwhPShyPWVbbl0pJiYiYm9vbGVhbiIhPXR5cGVvZiByJiYoaT1hW2EubGVuZ3RoLTFdLEFycmF5LmlzQXJyYXkocik/YS5wdXNoLmFwcGx5KGEsRyhyLCh0fHwiIikrIl8iK24pKTpvKHIpP2kmJmkudGV4dD9pLnRleHQrPVN0cmluZyhyKToiIiE9PXImJmEucHVzaChCKHIpKTpyLnRleHQmJmkmJmkudGV4dD9hW2EubGVuZ3RoLTFdPUIoaS50ZXh0K3IudGV4dCk6KHIudGFnJiZudWxsPT1yLmtleSYmbnVsbCE9dCYmKHIua2V5PSJfX3ZsaXN0Iit0KyJfIituKyJfXyIpLGEucHVzaChyKSkpO3JldHVybiBhfWZ1bmN0aW9uIFkoZSl7cmV0dXJuIGUmJmUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLmNvbXBvbmVudE9wdGlvbnN9KVswXX1mdW5jdGlvbiBRKGUpe2UuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLGUuX2hhc0hvb2tFdmVudD0hMTt2YXIgdD1lLiRvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnM7dCYmdGUoZSx0KX1mdW5jdGlvbiBYKGUsdCxuKXtuP2lvLiRvbmNlKGUsdCk6aW8uJG9uKGUsdCl9ZnVuY3Rpb24gZWUoZSx0KXtpby4kb2ZmKGUsdCl9ZnVuY3Rpb24gdGUoZSx0LG4pe2lvPWUsSyh0LG58fHt9LFgsZWUsZSl9ZnVuY3Rpb24gbmUoZSx0KXt2YXIgbj17fTtpZighZSlyZXR1cm4gbjtmb3IodmFyIHIsaSxvPVtdLGE9MCxzPWUubGVuZ3RoO2E8czthKyspaWYoaT1lW2FdLChpLmNvbnRleHQ9PT10fHxpLmZ1bmN0aW9uYWxDb250ZXh0PT09dCkmJmkuZGF0YSYmKHI9aS5kYXRhLnNsb3QpKXt2YXIgYz1uW3JdfHwobltyXT1bXSk7InRlbXBsYXRlIj09PWkudGFnP2MucHVzaC5hcHBseShjLGkuY2hpbGRyZW4pOmMucHVzaChpKX1lbHNlIG8ucHVzaChpKTtyZXR1cm4gby5ldmVyeShyZSl8fChuLmRlZmF1bHQ9byksbn1mdW5jdGlvbiByZShlKXtyZXR1cm4gZS5pc0NvbW1lbnR8fCIgIj09PWUudGV4dH1mdW5jdGlvbiBpZShlKXtmb3IodmFyIHQ9e30sbj0wO248ZS5sZW5ndGg7bisrKXRbZVtuXVswXV09ZVtuXVsxXTtyZXR1cm4gdH1mdW5jdGlvbiBvZShlKXt2YXIgdD1lLiRvcHRpb25zLG49dC5wYXJlbnQ7aWYobiYmIXQuYWJzdHJhY3Qpe2Zvcig7bi4kb3B0aW9ucy5hYnN0cmFjdCYmbi4kcGFyZW50OyluPW4uJHBhcmVudDtuLiRjaGlsZHJlbi5wdXNoKGUpfWUuJHBhcmVudD1uLGUuJHJvb3Q9bj9uLiRyb290OmUsZS4kY2hpbGRyZW49W10sZS4kcmVmcz17fSxlLl93YXRjaGVyPW51bGwsZS5faW5hY3RpdmU9bnVsbCxlLl9kaXJlY3RJbmFjdGl2ZT0hMSxlLl9pc01vdW50ZWQ9ITEsZS5faXNEZXN0cm95ZWQ9ITEsZS5faXNCZWluZ0Rlc3Ryb3llZD0hMX1mdW5jdGlvbiBhZShlLHQsbil7ZS4kZWw9dCxlLiRvcHRpb25zLnJlbmRlcnx8KGUuJG9wdGlvbnMucmVuZGVyPW9vKSxmZShlLCJiZWZvcmVNb3VudCIpO3ZhciByO3JldHVybiByPWZ1bmN0aW9uKCl7ZS5fdXBkYXRlKGUuX3JlbmRlcigpLG4pfSxlLl93YXRjaGVyPW5ldyBobyhlLHIsZCksbj0hMSxudWxsPT1lLiR2bm9kZSYmKGUuX2lzTW91bnRlZD0hMCxmZShlLCJtb3VudGVkIikpLGV9ZnVuY3Rpb24gc2UoZSx0LG4scixpKXt2YXIgbz0hIShpfHxlLiRvcHRpb25zLl9yZW5kZXJDaGlsZHJlbnx8ci5kYXRhLnNjb3BlZFNsb3RzfHxlLiRzY29wZWRTbG90cyE9PUVpKTtpZihlLiRvcHRpb25zLl9wYXJlbnRWbm9kZT1yLGUuJHZub2RlPXIsZS5fdm5vZGUmJihlLl92bm9kZS5wYXJlbnQ9ciksZS4kb3B0aW9ucy5fcmVuZGVyQ2hpbGRyZW49aSx0JiZlLiRvcHRpb25zLnByb3BzKXtRaS5zaG91bGRDb252ZXJ0PSExO2Zvcih2YXIgYT1lLl9wcm9wcyxzPWUuJG9wdGlvbnMuX3Byb3BLZXlzfHxbXSxjPTA7YzxzLmxlbmd0aDtjKyspe3ZhciB1PXNbY107YVt1XT1QKHUsZS4kb3B0aW9ucy5wcm9wcyx0LGUpfVFpLnNob3VsZENvbnZlcnQ9ITAsZS4kb3B0aW9ucy5wcm9wc0RhdGE9dH1pZihuKXt2YXIgbD1lLiRvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnM7ZS4kb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzPW4sdGUoZSxuLGwpfW8mJihlLiRzbG90cz1uZShpLHIuY29udGV4dCksZS4kZm9yY2VVcGRhdGUoKSl9ZnVuY3Rpb24gY2UoZSl7Zm9yKDtlJiYoZT1lLiRwYXJlbnQpOylpZihlLl9pbmFjdGl2ZSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiB1ZShlLHQpe2lmKHQpe2lmKGUuX2RpcmVjdEluYWN0aXZlPSExLGNlKGUpKXJldHVybn1lbHNlIGlmKGUuX2RpcmVjdEluYWN0aXZlKXJldHVybjtpZihlLl9pbmFjdGl2ZXx8bnVsbD09ZS5faW5hY3RpdmUpe2UuX2luYWN0aXZlPSExO2Zvcih2YXIgbj0wO248ZS4kY2hpbGRyZW4ubGVuZ3RoO24rKyl1ZShlLiRjaGlsZHJlbltuXSk7ZmUoZSwiYWN0aXZhdGVkIil9fWZ1bmN0aW9uIGxlKGUsdCl7aWYoISh0JiYoZS5fZGlyZWN0SW5hY3RpdmU9ITAsY2UoZSkpfHxlLl9pbmFjdGl2ZSkpe2UuX2luYWN0aXZlPSEwO2Zvcih2YXIgbj0wO248ZS4kY2hpbGRyZW4ubGVuZ3RoO24rKylsZShlLiRjaGlsZHJlbltuXSk7ZmUoZSwiZGVhY3RpdmF0ZWQiKX19ZnVuY3Rpb24gZmUoZSx0KXt2YXIgbj1lLiRvcHRpb25zW3RdO2lmKG4pZm9yKHZhciByPTAsaT1uLmxlbmd0aDtyPGk7cisrKXRyeXtuW3JdLmNhbGwoZSl9Y2F0Y2gobil7VShuLGUsdCsiIGhvb2siKX1lLl9oYXNIb29rRXZlbnQmJmUuJGVtaXQoImhvb2s6Iit0KX1mdW5jdGlvbiBwZSgpe2NvLmxlbmd0aD0wLHVvPXt9LGxvPWZvPSExfWZ1bmN0aW9uIGRlKCl7Zm89ITA7dmFyIGUsdCxuO2Zvcihjby5zb3J0KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuaWQtdC5pZH0pLHBvPTA7cG88Y28ubGVuZ3RoO3BvKyspZT1jb1twb10sdD1lLmlkLHVvW3RdPW51bGwsZS5ydW4oKTt2YXIgcj1jby5zbGljZSgpO2ZvcihwZSgpLHBvPXIubGVuZ3RoO3BvLS07KWU9cltwb10sbj1lLnZtLG4uX3dhdGNoZXI9PT1lJiZuLl9pc01vdW50ZWQmJmZlKG4sInVwZGF0ZWQiKTtCaSYmU2kuZGV2dG9vbHMmJkJpLmVtaXQoImZsdXNoIil9ZnVuY3Rpb24gdmUoZSl7dmFyIHQ9ZS5pZDtpZihudWxsPT11b1t0XSl7aWYodW9bdF09ITAsZm8pe2Zvcih2YXIgbj1jby5sZW5ndGgtMTtuPj0wJiZjb1tuXS5pZD5lLmlkOyluLS07Y28uc3BsaWNlKE1hdGgubWF4KG4scG8pKzEsMCxlKX1lbHNlIGNvLnB1c2goZSk7bG98fChsbz0hMCx6aShkZSkpfX1mdW5jdGlvbiBoZShlKXttby5jbGVhcigpLG1lKGUsbW8pfWZ1bmN0aW9uIG1lKGUsdCl7dmFyIG4scixpPUFycmF5LmlzQXJyYXkoZSk7aWYoKGl8fGwoZSkpJiZPYmplY3QuaXNFeHRlbnNpYmxlKGUpKXtpZihlLl9fb2JfXyl7dmFyIG89ZS5fX29iX18uZGVwLmlkO2lmKHQuaGFzKG8pKXJldHVybjt0LmFkZChvKX1pZihpKWZvcihuPWUubGVuZ3RoO24tLTspbWUoZVtuXSx0KTtlbHNlIGZvcihyPU9iamVjdC5rZXlzKGUpLG49ci5sZW5ndGg7bi0tOyltZShlW3Jbbl1dLHQpfX1mdW5jdGlvbiBnZShlLHQsbil7Z28uZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbdF1bbl19LGdvLnNldD1mdW5jdGlvbihlKXt0aGlzW3RdW25dPWV9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4sZ28pfWZ1bmN0aW9uIHllKGUpe2UuX3dhdGNoZXJzPVtdO3ZhciB0PWUuJG9wdGlvbnM7dC5wcm9wcyYmX2UoZSx0LnByb3BzKSx0Lm1ldGhvZHMmJmtlKGUsdC5tZXRob2RzKSx0LmRhdGE/YmUoZSk6ayhlLl9kYXRhPXt9LCEwKSx0LmNvbXB1dGVkJiZ3ZShlLHQuY29tcHV0ZWQpLHQud2F0Y2gmJkFlKGUsdC53YXRjaCl9ZnVuY3Rpb24gX2UoZSx0KXt2YXIgbj1lLiRvcHRpb25zLnByb3BzRGF0YXx8e30scj1lLl9wcm9wcz17fSxpPWUuJG9wdGlvbnMuX3Byb3BLZXlzPVtdLG89IWUuJHBhcmVudDtRaS5zaG91bGRDb252ZXJ0PW87Zm9yKHZhciBhIGluIHQpIWZ1bmN0aW9uKG8pe2kucHVzaChvKTt2YXIgYT1QKG8sdCxuLGUpO0EocixvLGEpLG8gaW4gZXx8Z2UoZSwiX3Byb3BzIixvKX0oYSk7UWkuc2hvdWxkQ29udmVydD0hMH1mdW5jdGlvbiBiZShlKXt2YXIgdD1lLiRvcHRpb25zLmRhdGE7dD1lLl9kYXRhPSJmdW5jdGlvbiI9PXR5cGVvZiB0PyRlKHQsZSk6dHx8e30sZih0KXx8KHQ9e30pO2Zvcih2YXIgbj1PYmplY3Qua2V5cyh0KSxyPWUuJG9wdGlvbnMucHJvcHMsbz1uLmxlbmd0aDtvLS07KXImJmkocixuW29dKXx8ZyhuW29dKXx8Z2UoZSwiX2RhdGEiLG5bb10pO2sodCwhMCl9ZnVuY3Rpb24gJGUoZSx0KXt0cnl7cmV0dXJuIGUuY2FsbCh0KX1jYXRjaChlKXtyZXR1cm4gVShlLHQsImRhdGEoKSIpLHt9fX1mdW5jdGlvbiB3ZShlLHQpe3ZhciBuPWUuX2NvbXB1dGVkV2F0Y2hlcnM9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IodmFyIHIgaW4gdCl7dmFyIGk9dFtyXSxvPSJmdW5jdGlvbiI9PXR5cGVvZiBpP2k6aS5nZXQ7bltyXT1uZXcgaG8oZSxvLGQseW8pLHIgaW4gZXx8eGUoZSxyLGkpfX1mdW5jdGlvbiB4ZShlLHQsbil7ImZ1bmN0aW9uIj09dHlwZW9mIG4/KGdvLmdldD1DZSh0KSxnby5zZXQ9ZCk6KGdvLmdldD1uLmdldD9uLmNhY2hlIT09ITE/Q2UodCk6bi5nZXQ6ZCxnby5zZXQ9bi5zZXQ/bi5zZXQ6ZCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxnbyl9ZnVuY3Rpb24gQ2UoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fY29tcHV0ZWRXYXRjaGVycyYmdGhpcy5fY29tcHV0ZWRXYXRjaGVyc1tlXTtpZih0KXJldHVybiB0LmRpcnR5JiZ0LmV2YWx1YXRlKCkscWkudGFyZ2V0JiZ0LmRlcGVuZCgpLHQudmFsdWV9fWZ1bmN0aW9uIGtlKGUsdCl7ZS4kb3B0aW9ucy5wcm9wcztmb3IodmFyIG4gaW4gdCllW25dPW51bGw9PXRbbl0/ZDpzKHRbbl0sZSl9ZnVuY3Rpb24gQWUoZSx0KXtmb3IodmFyIG4gaW4gdCl7dmFyIHI9dFtuXTtpZihBcnJheS5pc0FycmF5KHIpKWZvcih2YXIgaT0wO2k8ci5sZW5ndGg7aSsrKU9lKGUsbixyW2ldKTtlbHNlIE9lKGUsbixyKX19ZnVuY3Rpb24gT2UoZSx0LG4pe3ZhciByO2YobikmJihyPW4sbj1uLmhhbmRsZXIpLCJzdHJpbmciPT10eXBlb2YgbiYmKG49ZVtuXSksZS4kd2F0Y2godCxuLHIpfWZ1bmN0aW9uIFRlKGUsdCxuLHIsaSl7aWYoZSl7dmFyIG89bi4kb3B0aW9ucy5fYmFzZTtpZihsKGUpJiYoZT1vLmV4dGVuZChlKSksImZ1bmN0aW9uIj09dHlwZW9mIGUpe2lmKCFlLmNpZClpZihlLnJlc29sdmVkKWU9ZS5yZXNvbHZlZDtlbHNlIGlmKCEoZT1qZShlLG8sZnVuY3Rpb24oKXtuLiRmb3JjZVVwZGF0ZSgpfSkpKXJldHVybjtYZShlKSx0PXR8fHt9LHQubW9kZWwmJk1lKGUub3B0aW9ucyx0KTt2YXIgYT1OZSh0LGUsaSk7aWYoZS5vcHRpb25zLmZ1bmN0aW9uYWwpcmV0dXJuIFNlKGUsYSx0LG4scik7dmFyIHM9dC5vbjt0Lm9uPXQubmF0aXZlT24sZS5vcHRpb25zLmFic3RyYWN0JiYodD17fSksTGUodCk7dmFyIGM9ZS5vcHRpb25zLm5hbWV8fGk7cmV0dXJuIG5ldyBubygidnVlLWNvbXBvbmVudC0iK2UuY2lkKyhjPyItIitjOiIiKSx0LHZvaWQgMCx2b2lkIDAsdm9pZCAwLG4se0N0b3I6ZSxwcm9wc0RhdGE6YSxsaXN0ZW5lcnM6cyx0YWc6aSxjaGlsZHJlbjpyfSl9fX1mdW5jdGlvbiBTZShlLHQsbixyLGkpe3ZhciBvPXt9LGE9ZS5vcHRpb25zLnByb3BzO2lmKGEpZm9yKHZhciBzIGluIGEpb1tzXT1QKHMsYSx0KTt2YXIgYz1PYmplY3QuY3JlYXRlKHIpLHU9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIFBlKGMsZSx0LG4sciwhMCl9LGw9ZS5vcHRpb25zLnJlbmRlci5jYWxsKG51bGwsdSx7cHJvcHM6byxkYXRhOm4scGFyZW50OnIsY2hpbGRyZW46aSxzbG90czpmdW5jdGlvbigpe3JldHVybiBuZShpLHIpfX0pO3JldHVybiBsIGluc3RhbmNlb2Ygbm8mJihsLmZ1bmN0aW9uYWxDb250ZXh0PXIsbi5zbG90JiYoKGwuZGF0YXx8KGwuZGF0YT17fSkpLnNsb3Q9bi5zbG90KSksbH1mdW5jdGlvbiBFZShlLHQsbixyKXt2YXIgaT1lLmNvbXBvbmVudE9wdGlvbnMsbz17X2lzQ29tcG9uZW50OiEwLHBhcmVudDp0LHByb3BzRGF0YTppLnByb3BzRGF0YSxfY29tcG9uZW50VGFnOmkudGFnLF9wYXJlbnRWbm9kZTplLF9wYXJlbnRMaXN0ZW5lcnM6aS5saXN0ZW5lcnMsX3JlbmRlckNoaWxkcmVuOmkuY2hpbGRyZW4sX3BhcmVudEVsbTpufHxudWxsLF9yZWZFbG06cnx8bnVsbH0sYT1lLmRhdGEuaW5saW5lVGVtcGxhdGU7cmV0dXJuIGEmJihvLnJlbmRlcj1hLnJlbmRlcixvLnN0YXRpY1JlbmRlckZucz1hLnN0YXRpY1JlbmRlckZucyksbmV3IGkuQ3RvcihvKX1mdW5jdGlvbiBqZShlLHQsbil7aWYoIWUucmVxdWVzdGVkKXtlLnJlcXVlc3RlZD0hMDt2YXIgcj1lLnBlbmRpbmdDYWxsYmFja3M9W25dLGk9ITAsbz1mdW5jdGlvbihuKXtpZihsKG4pJiYobj10LmV4dGVuZChuKSksZS5yZXNvbHZlZD1uLCFpKWZvcih2YXIgbz0wLGE9ci5sZW5ndGg7bzxhO28rKylyW29dKG4pfSxhPWZ1bmN0aW9uKGUpe30scz1lKG8sYSk7cmV0dXJuIHMmJiJmdW5jdGlvbiI9PXR5cGVvZiBzLnRoZW4mJiFlLnJlc29sdmVkJiZzLnRoZW4obyxhKSxpPSExLGUucmVzb2x2ZWR9ZS5wZW5kaW5nQ2FsbGJhY2tzLnB1c2gobil9ZnVuY3Rpb24gTmUoZSx0LG4pe3ZhciByPXQub3B0aW9ucy5wcm9wcztpZihyKXt2YXIgaT17fSxvPWUuYXR0cnMsYT1lLnByb3BzLHM9ZS5kb21Qcm9wcztpZihvfHxhfHxzKWZvcih2YXIgYyBpbiByKXt2YXIgdT1DaShjKTtJZShpLGEsYyx1LCEwKXx8SWUoaSxvLGMsdSl8fEllKGkscyxjLHUpfXJldHVybiBpfX1mdW5jdGlvbiBJZShlLHQsbixyLG8pe2lmKHQpe2lmKGkodCxuKSlyZXR1cm4gZVtuXT10W25dLG98fGRlbGV0ZSB0W25dLCEwO2lmKGkodCxyKSlyZXR1cm4gZVtuXT10W3JdLG98fGRlbGV0ZSB0W3JdLCEwfXJldHVybiExfWZ1bmN0aW9uIExlKGUpe2UuaG9va3x8KGUuaG9vaz17fSk7Zm9yKHZhciB0PTA7dDxiby5sZW5ndGg7dCsrKXt2YXIgbj1ib1t0XSxyPWUuaG9va1tuXSxpPV9vW25dO2UuaG9va1tuXT1yP0RlKGkscik6aX19ZnVuY3Rpb24gRGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyLGksbyl7ZShuLHIsaSxvKSx0KG4scixpLG8pfX1mdW5jdGlvbiBNZShlLHQpe3ZhciBuPWUubW9kZWwmJmUubW9kZWwucHJvcHx8InZhbHVlIixyPWUubW9kZWwmJmUubW9kZWwuZXZlbnR8fCJpbnB1dCI7KHQucHJvcHN8fCh0LnByb3BzPXt9KSlbbl09dC5tb2RlbC52YWx1ZTt2YXIgaT10Lm9ufHwodC5vbj17fSk7aVtyXT9pW3JdPVt0Lm1vZGVsLmNhbGxiYWNrXS5jb25jYXQoaVtyXSk6aVtyXT10Lm1vZGVsLmNhbGxiYWNrfWZ1bmN0aW9uIFBlKGUsdCxuLHIsaSxhKXtyZXR1cm4oQXJyYXkuaXNBcnJheShuKXx8byhuKSkmJihpPXIscj1uLG49dm9pZCAwKSxhJiYoaT13byksUmUoZSx0LG4scixpKX1mdW5jdGlvbiBSZShlLHQsbixyLGkpe2lmKG4mJm4uX19vYl9fKXJldHVybiBvbygpO2lmKCF0KXJldHVybiBvbygpO0FycmF5LmlzQXJyYXkocikmJiJmdW5jdGlvbiI9PXR5cGVvZiByWzBdJiYobj1ufHx7fSxuLnNjb3BlZFNsb3RzPXtkZWZhdWx0OnJbMF19LHIubGVuZ3RoPTApLGk9PT13bz9yPVoocik6aT09PSRvJiYocj1XKHIpKTt2YXIgbyxhO2lmKCJzdHJpbmciPT10eXBlb2YgdCl7dmFyIHM7YT1TaS5nZXRUYWdOYW1lc3BhY2UodCksbz1TaS5pc1Jlc2VydmVkVGFnKHQpP25ldyBubyhTaS5wYXJzZVBsYXRmb3JtVGFnTmFtZSh0KSxuLHIsdm9pZCAwLHZvaWQgMCxlKToocz1NKGUuJG9wdGlvbnMsImNvbXBvbmVudHMiLHQpKT9UZShzLG4sZSxyLHQpOm5ldyBubyh0LG4scix2b2lkIDAsdm9pZCAwLGUpfWVsc2Ugbz1UZSh0LG4sZSxyKTtyZXR1cm4gbz8oYSYmRmUobyxhKSxvKTpvbygpfWZ1bmN0aW9uIEZlKGUsdCl7aWYoZS5ucz10LCJmb3JlaWduT2JqZWN0IiE9PWUudGFnJiZlLmNoaWxkcmVuKWZvcih2YXIgbj0wLHI9ZS5jaGlsZHJlbi5sZW5ndGg7bjxyO24rKyl7dmFyIGk9ZS5jaGlsZHJlbltuXTtpLnRhZyYmIWkubnMmJkZlKGksdCl9fWZ1bmN0aW9uIEhlKGUsdCl7dmFyIG4scixpLG8sYTtpZihBcnJheS5pc0FycmF5KGUpfHwic3RyaW5nIj09dHlwZW9mIGUpZm9yKG49bmV3IEFycmF5KGUubGVuZ3RoKSxyPTAsaT1lLmxlbmd0aDtyPGk7cisrKW5bcl09dChlW3JdLHIpO2Vsc2UgaWYoIm51bWJlciI9PXR5cGVvZiBlKWZvcihuPW5ldyBBcnJheShlKSxyPTA7cjxlO3IrKyluW3JdPXQocisxLHIpO2Vsc2UgaWYobChlKSlmb3Iobz1PYmplY3Qua2V5cyhlKSxuPW5ldyBBcnJheShvLmxlbmd0aCkscj0wLGk9by5sZW5ndGg7cjxpO3IrKylhPW9bcl0sbltyXT10KGVbYV0sYSxyKTtyZXR1cm4gbn1mdW5jdGlvbiBVZShlLHQsbixyKXt2YXIgaT10aGlzLiRzY29wZWRTbG90c1tlXTtpZihpKXJldHVybiBuPW58fHt9LHImJnUobixyKSxpKG4pfHx0O3ZhciBvPXRoaXMuJHNsb3RzW2VdO3JldHVybiBvfHx0fWZ1bmN0aW9uIEJlKGUpe3JldHVybiBNKHRoaXMuJG9wdGlvbnMsImZpbHRlcnMiLGUsITApfHxUaX1mdW5jdGlvbiBWZShlLHQsbil7dmFyIHI9U2kua2V5Q29kZXNbdF18fG47cmV0dXJuIEFycmF5LmlzQXJyYXkocik/ci5pbmRleE9mKGUpPT09LTE6ciE9PWV9ZnVuY3Rpb24gemUoZSx0LG4scil7aWYobilpZihsKG4pKXtBcnJheS5pc0FycmF5KG4pJiYobj1wKG4pKTt2YXIgaTtmb3IodmFyIG8gaW4gbil7aWYoImNsYXNzIj09PW98fCJzdHlsZSI9PT1vKWk9ZTtlbHNle3ZhciBhPWUuYXR0cnMmJmUuYXR0cnMudHlwZTtpPXJ8fFNpLm11c3RVc2VQcm9wKHQsYSxvKT9lLmRvbVByb3BzfHwoZS5kb21Qcm9wcz17fSk6ZS5hdHRyc3x8KGUuYXR0cnM9e30pfW8gaW4gaXx8KGlbb109bltvXSl9fWVsc2U7cmV0dXJuIGV9ZnVuY3Rpb24gSmUoZSx0KXt2YXIgbj10aGlzLl9zdGF0aWNUcmVlc1tlXTtyZXR1cm4gbiYmIXQ/QXJyYXkuaXNBcnJheShuKT96KG4pOlYobik6KG49dGhpcy5fc3RhdGljVHJlZXNbZV09dGhpcy4kb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnNbZV0uY2FsbCh0aGlzLl9yZW5kZXJQcm94eSkscWUobiwiX19zdGF0aWNfXyIrZSwhMSksbil9ZnVuY3Rpb24gS2UoZSx0LG4pe3JldHVybiBxZShlLCJfX29uY2VfXyIrdCsobj8iXyIrbjoiIiksITApLGV9ZnVuY3Rpb24gcWUoZSx0LG4pe2lmKEFycmF5LmlzQXJyYXkoZSkpZm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspZVtyXSYmInN0cmluZyIhPXR5cGVvZiBlW3JdJiZXZShlW3JdLHQrIl8iK3Isbik7ZWxzZSBXZShlLHQsbil9ZnVuY3Rpb24gV2UoZSx0LG4pe2UuaXNTdGF0aWM9ITAsZS5rZXk9dCxlLmlzT25jZT1ufWZ1bmN0aW9uIFplKGUpe2UuJHZub2RlPW51bGwsZS5fdm5vZGU9bnVsbCxlLl9zdGF0aWNUcmVlcz1udWxsO3ZhciB0PWUuJG9wdGlvbnMuX3BhcmVudFZub2RlLG49dCYmdC5jb250ZXh0O2UuJHNsb3RzPW5lKGUuJG9wdGlvbnMuX3JlbmRlckNoaWxkcmVuLG4pLGUuJHNjb3BlZFNsb3RzPUVpLGUuX2M9ZnVuY3Rpb24odCxuLHIsaSl7cmV0dXJuIFBlKGUsdCxuLHIsaSwhMSl9LGUuJGNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24odCxuLHIsaSl7cmV0dXJuIFBlKGUsdCxuLHIsaSwhMCl9fWZ1bmN0aW9uIEdlKGUpe3ZhciB0PWUuJG9wdGlvbnMucHJvdmlkZTt0JiYoZS5fcHJvdmlkZWQ9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dC5jYWxsKGUpOnQpfWZ1bmN0aW9uIFllKGUpe3ZhciB0PWUuJG9wdGlvbnMuaW5qZWN0O2lmKHQpZm9yKHZhciBuPUFycmF5LmlzQXJyYXkodCkscj1uP3Q6Vmk/UmVmbGVjdC5vd25LZXlzKHQpOk9iamVjdC5rZXlzKHQpLGk9MDtpPHIubGVuZ3RoO2krKykhZnVuY3Rpb24oaSl7Zm9yKHZhciBvPXJbaV0sYT1uP286dFtvXSxzPWU7czspe2lmKHMuX3Byb3ZpZGVkJiZhIGluIHMuX3Byb3ZpZGVkKXtBKGUsbyxzLl9wcm92aWRlZFthXSk7YnJlYWt9cz1zLiRwYXJlbnR9fShpKX1mdW5jdGlvbiBRZShlLHQpe3ZhciBuPWUuJG9wdGlvbnM9T2JqZWN0LmNyZWF0ZShlLmNvbnN0cnVjdG9yLm9wdGlvbnMpO24ucGFyZW50PXQucGFyZW50LG4ucHJvcHNEYXRhPXQucHJvcHNEYXRhLG4uX3BhcmVudFZub2RlPXQuX3BhcmVudFZub2RlLG4uX3BhcmVudExpc3RlbmVycz10Ll9wYXJlbnRMaXN0ZW5lcnMsbi5fcmVuZGVyQ2hpbGRyZW49dC5fcmVuZGVyQ2hpbGRyZW4sbi5fY29tcG9uZW50VGFnPXQuX2NvbXBvbmVudFRhZyxuLl9wYXJlbnRFbG09dC5fcGFyZW50RWxtLG4uX3JlZkVsbT10Ll9yZWZFbG0sdC5yZW5kZXImJihuLnJlbmRlcj10LnJlbmRlcixuLnN0YXRpY1JlbmRlckZucz10LnN0YXRpY1JlbmRlckZucyl9ZnVuY3Rpb24gWGUoZSl7dmFyIHQ9ZS5vcHRpb25zO2lmKGUuc3VwZXIpe3ZhciBuPVhlKGUuc3VwZXIpO2lmKG4hPT1lLnN1cGVyT3B0aW9ucyl7ZS5zdXBlck9wdGlvbnM9bjt2YXIgcj1ldChlKTtyJiZ1KGUuZXh0ZW5kT3B0aW9ucyxyKSx0PWUub3B0aW9ucz1EKG4sZS5leHRlbmRPcHRpb25zKSx0Lm5hbWUmJih0LmNvbXBvbmVudHNbdC5uYW1lXT1lKX19cmV0dXJuIHR9ZnVuY3Rpb24gZXQoZSl7dmFyIHQsbj1lLm9wdGlvbnMscj1lLnNlYWxlZE9wdGlvbnM7Zm9yKHZhciBpIGluIG4pbltpXSE9PXJbaV0mJih0fHwodD17fSksdFtpXT10dChuW2ldLHJbaV0pKTtyZXR1cm4gdH1mdW5jdGlvbiB0dChlLHQpe2lmKEFycmF5LmlzQXJyYXkoZSkpe3ZhciBuPVtdO3Q9QXJyYXkuaXNBcnJheSh0KT90Olt0XTtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl0LmluZGV4T2YoZVtyXSk8MCYmbi5wdXNoKGVbcl0pO3JldHVybiBufXJldHVybiBlfWZ1bmN0aW9uIG50KGUpe3RoaXMuX2luaXQoZSl9ZnVuY3Rpb24gcnQoZSl7ZS51c2U9ZnVuY3Rpb24oZSl7aWYoIWUuaW5zdGFsbGVkKXt2YXIgdD1jKGFyZ3VtZW50cywxKTtyZXR1cm4gdC51bnNoaWZ0KHRoaXMpLCJmdW5jdGlvbiI9PXR5cGVvZiBlLmluc3RhbGw/ZS5pbnN0YWxsLmFwcGx5KGUsdCk6ImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUuYXBwbHkobnVsbCx0KSxlLmluc3RhbGxlZD0hMCx0aGlzfX19ZnVuY3Rpb24gaXQoZSl7ZS5taXhpbj1mdW5jdGlvbihlKXt0aGlzLm9wdGlvbnM9RCh0aGlzLm9wdGlvbnMsZSl9fWZ1bmN0aW9uIG90KGUpe2UuY2lkPTA7dmFyIHQ9MTtlLmV4dGVuZD1mdW5jdGlvbihlKXtlPWV8fHt9O3ZhciBuPXRoaXMscj1uLmNpZCxpPWUuX0N0b3J8fChlLl9DdG9yPXt9KTtpZihpW3JdKXJldHVybiBpW3JdO3ZhciBvPWUubmFtZXx8bi5vcHRpb25zLm5hbWUsYT1mdW5jdGlvbihlKXt0aGlzLl9pbml0KGUpfTtyZXR1cm4gYS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSksYS5wcm90b3R5cGUuY29uc3RydWN0b3I9YSxhLmNpZD10KyssYS5vcHRpb25zPUQobi5vcHRpb25zLGUpLGEuc3VwZXI9bixhLm9wdGlvbnMucHJvcHMmJmF0KGEpLGEub3B0aW9ucy5jb21wdXRlZCYmc3QoYSksYS5leHRlbmQ9bi5leHRlbmQsYS5taXhpbj1uLm1peGluLGEudXNlPW4udXNlLFNpLl9hc3NldFR5cGVzLmZvckVhY2goZnVuY3Rpb24oZSl7YVtlXT1uW2VdfSksbyYmKGEub3B0aW9ucy5jb21wb25lbnRzW29dPWEpLGEuc3VwZXJPcHRpb25zPW4ub3B0aW9ucyxhLmV4dGVuZE9wdGlvbnM9ZSxhLnNlYWxlZE9wdGlvbnM9dSh7fSxhLm9wdGlvbnMpLGlbcl09YSxhfX1mdW5jdGlvbiBhdChlKXt2YXIgdD1lLm9wdGlvbnMucHJvcHM7Zm9yKHZhciBuIGluIHQpZ2UoZS5wcm90b3R5cGUsIl9wcm9wcyIsbil9ZnVuY3Rpb24gc3QoZSl7dmFyIHQ9ZS5vcHRpb25zLmNvbXB1dGVkO2Zvcih2YXIgbiBpbiB0KXhlKGUucHJvdG90eXBlLG4sdFtuXSl9ZnVuY3Rpb24gY3QoZSl7U2kuX2Fzc2V0VHlwZXMuZm9yRWFjaChmdW5jdGlvbih0KXtlW3RdPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG4/KCJjb21wb25lbnQiPT09dCYmZihuKSYmKG4ubmFtZT1uLm5hbWV8fGUsbj10aGlzLm9wdGlvbnMuX2Jhc2UuZXh0ZW5kKG4pKSwiZGlyZWN0aXZlIj09PXQmJiJmdW5jdGlvbiI9PXR5cGVvZiBuJiYobj17YmluZDpuLHVwZGF0ZTpufSksdGhpcy5vcHRpb25zW3QrInMiXVtlXT1uLG4pOnRoaXMub3B0aW9uc1t0KyJzIl1bZV19fSl9ZnVuY3Rpb24gdXQoZSl7cmV0dXJuIGUmJihlLkN0b3Iub3B0aW9ucy5uYW1lfHxlLnRhZyl9ZnVuY3Rpb24gbHQoZSx0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGU/ZS5zcGxpdCgiLCIpLmluZGV4T2YodCk+LTE6ZSBpbnN0YW5jZW9mIFJlZ0V4cCYmZS50ZXN0KHQpfWZ1bmN0aW9uIGZ0KGUsdCl7Zm9yKHZhciBuIGluIGUpe3ZhciByPWVbbl07aWYocil7dmFyIGk9dXQoci5jb21wb25lbnRPcHRpb25zKTtpJiYhdChpKSYmKHB0KHIpLGVbbl09bnVsbCl9fX1mdW5jdGlvbiBwdChlKXtlJiYoZS5jb21wb25lbnRJbnN0YW5jZS5faW5hY3RpdmV8fGZlKGUuY29tcG9uZW50SW5zdGFuY2UsImRlYWN0aXZhdGVkIiksZS5jb21wb25lbnRJbnN0YW5jZS4kZGVzdHJveSgpKX1mdW5jdGlvbiBkdChlKXtmb3IodmFyIHQ9ZS5kYXRhLG49ZSxyPWU7ci5jb21wb25lbnRJbnN0YW5jZTspcj1yLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZSxyLmRhdGEmJih0PXZ0KHIuZGF0YSx0KSk7Zm9yKDtuPW4ucGFyZW50OyluLmRhdGEmJih0PXZ0KHQsbi5kYXRhKSk7cmV0dXJuIGh0KHQpfWZ1bmN0aW9uIHZ0KGUsdCl7cmV0dXJue3N0YXRpY0NsYXNzOm10KGUuc3RhdGljQ2xhc3MsdC5zdGF0aWNDbGFzcyksY2xhc3M6ZS5jbGFzcz9bZS5jbGFzcyx0LmNsYXNzXTp0LmNsYXNzfX1mdW5jdGlvbiBodChlKXt2YXIgdD1lLmNsYXNzLG49ZS5zdGF0aWNDbGFzcztyZXR1cm4gbnx8dD9tdChuLGd0KHQpKToiIn1mdW5jdGlvbiBtdChlLHQpe3JldHVybiBlP3Q/ZSsiICIrdDplOnR8fCIifWZ1bmN0aW9uIGd0KGUpe3ZhciB0PSIiO2lmKCFlKXJldHVybiB0O2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gZTtpZihBcnJheS5pc0FycmF5KGUpKXtmb3IodmFyIG4scj0wLGk9ZS5sZW5ndGg7cjxpO3IrKyllW3JdJiYobj1ndChlW3JdKSkmJih0Kz1uKyIgIik7cmV0dXJuIHQuc2xpY2UoMCwtMSl9aWYobChlKSl7Zm9yKHZhciBvIGluIGUpZVtvXSYmKHQrPW8rIiAiKTtyZXR1cm4gdC5zbGljZSgwLC0xKX1yZXR1cm4gdH1mdW5jdGlvbiB5dChlKXtyZXR1cm4gS28oZSk/InN2ZyI6Im1hdGgiPT09ZT8ibWF0aCI6dm9pZCAwfWZ1bmN0aW9uIF90KGUpe2lmKCFJaSlyZXR1cm4hMDtpZihXbyhlKSlyZXR1cm4hMTtpZihlPWUudG9Mb3dlckNhc2UoKSxudWxsIT1ab1tlXSlyZXR1cm4gWm9bZV07dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlKTtyZXR1cm4gZS5pbmRleE9mKCItIik+LTE/Wm9bZV09dC5jb25zdHJ1Y3Rvcj09PXdpbmRvdy5IVE1MVW5rbm93bkVsZW1lbnR8fHQuY29uc3RydWN0b3I9PT13aW5kb3cuSFRNTEVsZW1lbnQ6Wm9bZV09L0hUTUxVbmtub3duRWxlbWVudC8udGVzdCh0LnRvU3RyaW5nKCkpfWZ1bmN0aW9uIGJ0KGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSl7dmFyIHQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlKTtyZXR1cm4gdD90OmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpfXJldHVybiBlfWZ1bmN0aW9uICR0KGUsdCl7dmFyIG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlKTtyZXR1cm4ic2VsZWN0IiE9PWU/bjoodC5kYXRhJiZ0LmRhdGEuYXR0cnMmJnZvaWQgMCE9PXQuZGF0YS5hdHRycy5tdWx0aXBsZSYmbi5zZXRBdHRyaWJ1dGUoIm11bHRpcGxlIiwibXVsdGlwbGUiKSxuKX1mdW5jdGlvbiB3dChlLHQpe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoem9bZV0sdCl9ZnVuY3Rpb24geHQoZSl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGUpfWZ1bmN0aW9uIEN0KGUpe3JldHVybiBkb2N1bWVudC5jcmVhdGVDb21tZW50KGUpfWZ1bmN0aW9uIGt0KGUsdCxuKXtlLmluc2VydEJlZm9yZSh0LG4pfWZ1bmN0aW9uIEF0KGUsdCl7ZS5yZW1vdmVDaGlsZCh0KX1mdW5jdGlvbiBPdChlLHQpe2UuYXBwZW5kQ2hpbGQodCl9ZnVuY3Rpb24gVHQoZSl7cmV0dXJuIGUucGFyZW50Tm9kZX1mdW5jdGlvbiBTdChlKXtyZXR1cm4gZS5uZXh0U2libGluZ31mdW5jdGlvbiBFdChlKXtyZXR1cm4gZS50YWdOYW1lfWZ1bmN0aW9uIGp0KGUsdCl7ZS50ZXh0Q29udGVudD10fWZ1bmN0aW9uIE50KGUsdCxuKXtlLnNldEF0dHJpYnV0ZSh0LG4pfWZ1bmN0aW9uIEl0KGUsdCl7dmFyIG49ZS5kYXRhLnJlZjtpZihuKXt2YXIgaT1lLmNvbnRleHQsbz1lLmNvbXBvbmVudEluc3RhbmNlfHxlLmVsbSxhPWkuJHJlZnM7dD9BcnJheS5pc0FycmF5KGFbbl0pP3IoYVtuXSxvKTphW25dPT09byYmKGFbbl09dm9pZCAwKTplLmRhdGEucmVmSW5Gb3I/QXJyYXkuaXNBcnJheShhW25dKSYmYVtuXS5pbmRleE9mKG8pPDA/YVtuXS5wdXNoKG8pOmFbbl09W29dOmFbbl09b319ZnVuY3Rpb24gTHQoZSl7cmV0dXJuIHZvaWQgMD09PWV8fG51bGw9PT1lfWZ1bmN0aW9uIER0KGUpe3JldHVybiB2b2lkIDAhPT1lJiZudWxsIT09ZX1mdW5jdGlvbiBNdChlKXtyZXR1cm4gZT09PSEwfWZ1bmN0aW9uIFB0KGUsdCl7cmV0dXJuIGUua2V5PT09dC5rZXkmJmUudGFnPT09dC50YWcmJmUuaXNDb21tZW50PT09dC5pc0NvbW1lbnQmJkR0KGUuZGF0YSk9PT1EdCh0LmRhdGEpJiZSdChlLHQpfWZ1bmN0aW9uIFJ0KGUsdCl7aWYoImlucHV0IiE9PWUudGFnKXJldHVybiEwO3ZhciBuO3JldHVybihEdChuPWUuZGF0YSkmJkR0KG49bi5hdHRycykmJm4udHlwZSk9PT0oRHQobj10LmRhdGEpJiZEdChuPW4uYXR0cnMpJiZuLnR5cGUpfWZ1bmN0aW9uIEZ0KGUsdCxuKXt2YXIgcixpLG89e307Zm9yKHI9dDtyPD1uOysrcilpPWVbcl0ua2V5LER0KGkpJiYob1tpXT1yKTtyZXR1cm4gb31mdW5jdGlvbiBIdChlLHQpeyhlLmRhdGEuZGlyZWN0aXZlc3x8dC5kYXRhLmRpcmVjdGl2ZXMpJiZVdChlLHQpfWZ1bmN0aW9uIFV0KGUsdCl7dmFyIG4scixpLG89ZT09PVFvLGE9dD09PVFvLHM9QnQoZS5kYXRhLmRpcmVjdGl2ZXMsZS5jb250ZXh0KSxjPUJ0KHQuZGF0YS5kaXJlY3RpdmVzLHQuY29udGV4dCksdT1bXSxsPVtdO2ZvcihuIGluIGMpcj1zW25dLGk9Y1tuXSxyPyhpLm9sZFZhbHVlPXIudmFsdWUsenQoaSwidXBkYXRlIix0LGUpLGkuZGVmJiZpLmRlZi5jb21wb25lbnRVcGRhdGVkJiZsLnB1c2goaSkpOih6dChpLCJiaW5kIix0LGUpLGkuZGVmJiZpLmRlZi5pbnNlcnRlZCYmdS5wdXNoKGkpKTtpZih1Lmxlbmd0aCl7dmFyIGY9ZnVuY3Rpb24oKXtmb3IodmFyIG49MDtuPHUubGVuZ3RoO24rKyl6dCh1W25dLCJpbnNlcnRlZCIsdCxlKX07bz9xKHQuZGF0YS5ob29rfHwodC5kYXRhLmhvb2s9e30pLCJpbnNlcnQiLGYpOmYoKX1pZihsLmxlbmd0aCYmcSh0LmRhdGEuaG9va3x8KHQuZGF0YS5ob29rPXt9KSwicG9zdHBhdGNoIixmdW5jdGlvbigpe2Zvcih2YXIgbj0wO248bC5sZW5ndGg7bisrKXp0KGxbbl0sImNvbXBvbmVudFVwZGF0ZWQiLHQsZSl9KSwhbylmb3IobiBpbiBzKWNbbl18fHp0KHNbbl0sInVuYmluZCIsZSxlLGEpfWZ1bmN0aW9uIEJ0KGUsdCl7dmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKTtpZighZSlyZXR1cm4gbjt2YXIgcixpO2ZvcihyPTA7cjxlLmxlbmd0aDtyKyspaT1lW3JdLGkubW9kaWZpZXJzfHwoaS5tb2RpZmllcnM9dGEpLG5bVnQoaSldPWksaS5kZWY9TSh0LiRvcHRpb25zLCJkaXJlY3RpdmVzIixpLm5hbWUsITApO3JldHVybiBufWZ1bmN0aW9uIFZ0KGUpe3JldHVybiBlLnJhd05hbWV8fGUubmFtZSsiLiIrT2JqZWN0LmtleXMoZS5tb2RpZmllcnN8fHt9KS5qb2luKCIuIil9ZnVuY3Rpb24genQoZSx0LG4scixpKXt2YXIgbz1lLmRlZiYmZS5kZWZbdF07byYmbyhuLmVsbSxlLG4scixpKX1mdW5jdGlvbiBKdChlLHQpe2lmKGUuZGF0YS5hdHRyc3x8dC5kYXRhLmF0dHJzKXt2YXIgbixyLGk9dC5lbG0sbz1lLmRhdGEuYXR0cnN8fHt9LGE9dC5kYXRhLmF0dHJzfHx7fTthLl9fb2JfXyYmKGE9dC5kYXRhLmF0dHJzPXUoe30sYSkpO2ZvcihuIGluIGEpcj1hW25dLG9bbl0hPT1yJiZLdChpLG4scik7TWkmJmEudmFsdWUhPT1vLnZhbHVlJiZLdChpLCJ2YWx1ZSIsYS52YWx1ZSk7Zm9yKG4gaW4gbyludWxsPT1hW25dJiYoVW8obik/aS5yZW1vdmVBdHRyaWJ1dGVOUyhIbyxCbyhuKSk6Um8obil8fGkucmVtb3ZlQXR0cmlidXRlKG4pKX19ZnVuY3Rpb24gS3QoZSx0LG4pe0ZvKHQpP1ZvKG4pP2UucmVtb3ZlQXR0cmlidXRlKHQpOmUuc2V0QXR0cmlidXRlKHQsdCk6Um8odCk/ZS5zZXRBdHRyaWJ1dGUodCxWbyhuKXx8ImZhbHNlIj09PW4/ImZhbHNlIjoidHJ1ZSIpOlVvKHQpP1ZvKG4pP2UucmVtb3ZlQXR0cmlidXRlTlMoSG8sQm8odCkpOmUuc2V0QXR0cmlidXRlTlMoSG8sdCxuKTpWbyhuKT9lLnJlbW92ZUF0dHJpYnV0ZSh0KTplLnNldEF0dHJpYnV0ZSh0LG4pfWZ1bmN0aW9uIHF0KGUsdCl7dmFyIG49dC5lbG0scj10LmRhdGEsaT1lLmRhdGE7aWYoci5zdGF0aWNDbGFzc3x8ci5jbGFzc3x8aSYmKGkuc3RhdGljQ2xhc3N8fGkuY2xhc3MpKXt2YXIgbz1kdCh0KSxhPW4uX3RyYW5zaXRpb25DbGFzc2VzO2EmJihvPW10KG8sZ3QoYSkpKSxvIT09bi5fcHJldkNsYXNzJiYobi5zZXRBdHRyaWJ1dGUoImNsYXNzIixvKSxuLl9wcmV2Q2xhc3M9byl9fWZ1bmN0aW9uIFd0KGUpe2Z1bmN0aW9uIHQoKXsoYXx8KGE9W10pKS5wdXNoKGUuc2xpY2UodixpKS50cmltKCkpLHY9aSsxfXZhciBuLHIsaSxvLGEscz0hMSxjPSExLHU9ITEsbD0hMSxmPTAscD0wLGQ9MCx2PTA7Zm9yKGk9MDtpPGUubGVuZ3RoO2krKylpZihyPW4sbj1lLmNoYXJDb2RlQXQoaSkscykzOT09PW4mJjkyIT09ciYmKHM9ITEpO2Vsc2UgaWYoYykzND09PW4mJjkyIT09ciYmKGM9ITEpO2Vsc2UgaWYodSk5Nj09PW4mJjkyIT09ciYmKHU9ITEpO2Vsc2UgaWYobCk0Nz09PW4mJjkyIT09ciYmKGw9ITEpO2Vsc2UgaWYoMTI0IT09bnx8MTI0PT09ZS5jaGFyQ29kZUF0KGkrMSl8fDEyND09PWUuY2hhckNvZGVBdChpLTEpfHxmfHxwfHxkKXtzd2l0Y2gobil7Y2FzZSAzNDpjPSEwO2JyZWFrO2Nhc2UgMzk6cz0hMDticmVhaztjYXNlIDk2OnU9ITA7YnJlYWs7Y2FzZSA0MDpkKys7YnJlYWs7Y2FzZSA0MTpkLS07YnJlYWs7Y2FzZSA5MTpwKys7YnJlYWs7Y2FzZSA5MzpwLS07YnJlYWs7Y2FzZSAxMjM6ZisrO2JyZWFrO2Nhc2UgMTI1OmYtLX1pZig0Nz09PW4pe2Zvcih2YXIgaD1pLTEsbT12b2lkIDA7aD49MCYmIiAiPT09KG09ZS5jaGFyQXQoaCkpO2gtLSk7bSYmb2EudGVzdChtKXx8KGw9ITApfX1lbHNlIHZvaWQgMD09PW8/KHY9aSsxLG89ZS5zbGljZSgwLGkpLnRyaW0oKSk6dCgpO2lmKHZvaWQgMD09PW8/bz1lLnNsaWNlKDAsaSkudHJpbSgpOjAhPT12JiZ0KCksYSlmb3IoaT0wO2k8YS5sZW5ndGg7aSsrKW89WnQobyxhW2ldKTtyZXR1cm4gb31mdW5jdGlvbiBadChlLHQpe3ZhciBuPXQuaW5kZXhPZigiKCIpO3JldHVybiBuPDA/J19mKCInK3QrJyIpKCcrZSsiKSI6J19mKCInK3Quc2xpY2UoMCxuKSsnIikoJytlKyIsIit0LnNsaWNlKG4rMSl9ZnVuY3Rpb24gR3QoZSl7Y29uc29sZS5lcnJvcigiW1Z1ZSBjb21waWxlcl06ICIrZSl9ZnVuY3Rpb24gWXQoZSx0KXtyZXR1cm4gZT9lLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZVt0XX0pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZX0pOltdfWZ1bmN0aW9uIFF0KGUsdCxuKXsoZS5wcm9wc3x8KGUucHJvcHM9W10pKS5wdXNoKHtuYW1lOnQsdmFsdWU6bn0pfWZ1bmN0aW9uIFh0KGUsdCxuKXsoZS5hdHRyc3x8KGUuYXR0cnM9W10pKS5wdXNoKHtuYW1lOnQsdmFsdWU6bn0pfWZ1bmN0aW9uIGVuKGUsdCxuLHIsaSxvKXsoZS5kaXJlY3RpdmVzfHwoZS5kaXJlY3RpdmVzPVtdKSkucHVzaCh7bmFtZTp0LHJhd05hbWU6bix2YWx1ZTpyLGFyZzppLG1vZGlmaWVyczpvfSl9ZnVuY3Rpb24gdG4oZSx0LG4scixpKXtyJiZyLmNhcHR1cmUmJihkZWxldGUgci5jYXB0dXJlLHQ9IiEiK3QpLHImJnIub25jZSYmKGRlbGV0ZSByLm9uY2UsdD0ifiIrdCk7dmFyIG87ciYmci5uYXRpdmU/KGRlbGV0ZSByLm5hdGl2ZSxvPWUubmF0aXZlRXZlbnRzfHwoZS5uYXRpdmVFdmVudHM9e30pKTpvPWUuZXZlbnRzfHwoZS5ldmVudHM9e30pO3ZhciBhPXt2YWx1ZTpuLG1vZGlmaWVyczpyfSxzPW9bdF07QXJyYXkuaXNBcnJheShzKT9pP3MudW5zaGlmdChhKTpzLnB1c2goYSk6b1t0XT1zP2k/W2Esc106W3MsYV06YX1mdW5jdGlvbiBubihlLHQsbil7dmFyIHI9cm4oZSwiOiIrdCl8fHJuKGUsInYtYmluZDoiK3QpO2lmKG51bGwhPXIpcmV0dXJuIFd0KHIpO2lmKG4hPT0hMSl7dmFyIGk9cm4oZSx0KTtpZihudWxsIT1pKXJldHVybiBKU09OLnN0cmluZ2lmeShpKX19ZnVuY3Rpb24gcm4oZSx0KXt2YXIgbjtpZihudWxsIT0obj1lLmF0dHJzTWFwW3RdKSlmb3IodmFyIHI9ZS5hdHRyc0xpc3QsaT0wLG89ci5sZW5ndGg7aTxvO2krKylpZihyW2ldLm5hbWU9PT10KXtyLnNwbGljZShpLDEpO2JyZWFrfXJldHVybiBufWZ1bmN0aW9uIG9uKGUsdCxuKXt2YXIgcj1ufHx7fSxpPXIubnVtYmVyLG89ci50cmltLGE9IiQkdiI7byYmKGE9Iih0eXBlb2YgJCR2ID09PSAnc3RyaW5nJz8gJCR2LnRyaW0oKTogJCR2KSIpLGkmJihhPSJfbigiK2ErIikiKTt2YXIgcz1hbih0LGEpO2UubW9kZWw9e3ZhbHVlOiIoIit0KyIpIixleHByZXNzaW9uOiciJyt0KyciJyxjYWxsYmFjazoiZnVuY3Rpb24gKCQkdikgeyIrcysifSJ9fWZ1bmN0aW9uIGFuKGUsdCl7dmFyIG49c24oZSk7cmV0dXJuIG51bGw9PT1uLmlkeD9lKyI9Iit0OiJ2YXIgJCRleHAgPSAiK24uZXhwKyIsICQkaWR4ID0gIituLmlkeCsiO2lmICghQXJyYXkuaXNBcnJheSgkJGV4cCkpeyIrZSsiPSIrdCsifWVsc2V7JCRleHAuc3BsaWNlKCQkaWR4LCAxLCAiK3QrIil9In1mdW5jdGlvbiBzbihlKXtpZihUbz1lLE9vPVRvLmxlbmd0aCxFbz1qbz1Obz0wLGUuaW5kZXhPZigiWyIpPDB8fGUubGFzdEluZGV4T2YoIl0iKTxPby0xKXJldHVybntleHA6ZSxpZHg6bnVsbH07Zm9yKDshdW4oKTspU289Y24oKSxsbihTbyk/cG4oU28pOjkxPT09U28mJmZuKFNvKTtyZXR1cm57ZXhwOmUuc3Vic3RyaW5nKDAsam8pLGlkeDplLnN1YnN0cmluZyhqbysxLE5vKX19ZnVuY3Rpb24gY24oKXtyZXR1cm4gVG8uY2hhckNvZGVBdCgrK0VvKX1mdW5jdGlvbiB1bigpe3JldHVybiBFbz49T299ZnVuY3Rpb24gbG4oZSl7cmV0dXJuIDM0PT09ZXx8Mzk9PT1lfWZ1bmN0aW9uIGZuKGUpe3ZhciB0PTE7Zm9yKGpvPUVvOyF1bigpOylpZihlPWNuKCksbG4oZSkpcG4oZSk7ZWxzZSBpZig5MT09PWUmJnQrKyw5Mz09PWUmJnQtLSwwPT09dCl7Tm89RW87YnJlYWt9fWZ1bmN0aW9uIHBuKGUpe2Zvcih2YXIgdD1lOyF1bigpJiYoZT1jbigpKSE9PXQ7KTt9ZnVuY3Rpb24gZG4oZSx0LG4pe0lvPW47dmFyIHI9dC52YWx1ZSxpPXQubW9kaWZpZXJzLG89ZS50YWcsYT1lLmF0dHJzTWFwLnR5cGU7aWYoInNlbGVjdCI9PT1vKW1uKGUscixpKTtlbHNlIGlmKCJpbnB1dCI9PT1vJiYiY2hlY2tib3giPT09YSl2bihlLHIsaSk7ZWxzZSBpZigiaW5wdXQiPT09byYmInJhZGlvIj09PWEpaG4oZSxyLGkpO2Vsc2UgaWYoImlucHV0Ij09PW98fCJ0ZXh0YXJlYSI9PT1vKWduKGUscixpKTtlbHNlIGlmKCFTaS5pc1Jlc2VydmVkVGFnKG8pKXJldHVybiBvbihlLHIsaSksITE7cmV0dXJuITB9ZnVuY3Rpb24gdm4oZSx0LG4pe3ZhciByPW4mJm4ubnVtYmVyLGk9bm4oZSwidmFsdWUiKXx8Im51bGwiLG89bm4oZSwidHJ1ZS12YWx1ZSIpfHwidHJ1ZSIsYT1ubihlLCJmYWxzZS12YWx1ZSIpfHwiZmFsc2UiO1F0KGUsImNoZWNrZWQiLCJBcnJheS5pc0FycmF5KCIrdCsiKT9faSgiK3QrIiwiK2krIik+LTEiKygidHJ1ZSI9PT1vPyI6KCIrdCsiKSI6IjpfcSgiK3QrIiwiK28rIikiKSksdG4oZSxzYSwidmFyICQkYT0iK3QrIiwkJGVsPSRldmVudC50YXJnZXQsJCRjPSQkZWwuY2hlY2tlZD8oIitvKyIpOigiK2ErIik7aWYoQXJyYXkuaXNBcnJheSgkJGEpKXt2YXIgJCR2PSIrKHI/Il9uKCIraSsiKSI6aSkrIiwkJGk9X2koJCRhLCQkdik7aWYoJCRjKXskJGk8MCYmKCIrdCsiPSQkYS5jb25jYXQoJCR2KSl9ZWxzZXskJGk+LTEmJigiK3QrIj0kJGEuc2xpY2UoMCwkJGkpLmNvbmNhdCgkJGEuc2xpY2UoJCRpKzEpKSl9fWVsc2V7Iit0KyI9JCRjfSIsbnVsbCwhMCl9ZnVuY3Rpb24gaG4oZSx0LG4pe3ZhciByPW4mJm4ubnVtYmVyLGk9bm4oZSwidmFsdWUiKXx8Im51bGwiO2k9cj8iX24oIitpKyIpIjppLFF0KGUsImNoZWNrZWQiLCJfcSgiK3QrIiwiK2krIikiKSx0bihlLHNhLGFuKHQsaSksbnVsbCwhMCl9ZnVuY3Rpb24gbW4oZSx0LG4pe3ZhciByPW4mJm4ubnVtYmVyLGk9J0FycmF5LnByb3RvdHlwZS5maWx0ZXIuY2FsbCgkZXZlbnQudGFyZ2V0Lm9wdGlvbnMsZnVuY3Rpb24obyl7cmV0dXJuIG8uc2VsZWN0ZWR9KS5tYXAoZnVuY3Rpb24obyl7dmFyIHZhbCA9ICJfdmFsdWUiIGluIG8gPyBvLl92YWx1ZSA6IG8udmFsdWU7cmV0dXJuICcrKHI/Il9uKHZhbCkiOiJ2YWwiKSsifSkiLG89InZhciAkJHNlbGVjdGVkVmFsID0gIitpKyI7IjtvPW8rIiAiK2FuKHQsIiRldmVudC50YXJnZXQubXVsdGlwbGUgPyAkJHNlbGVjdGVkVmFsIDogJCRzZWxlY3RlZFZhbFswXSIpLHRuKGUsImNoYW5nZSIsbyxudWxsLCEwKX1mdW5jdGlvbiBnbihlLHQsbil7dmFyIHI9ZS5hdHRyc01hcC50eXBlLGk9bnx8e30sbz1pLmxhenksYT1pLm51bWJlcixzPWkudHJpbSxjPSFvJiYicmFuZ2UiIT09cix1PW8/ImNoYW5nZSI6InJhbmdlIj09PXI/YWE6ImlucHV0IixsPSIkZXZlbnQudGFyZ2V0LnZhbHVlIjtzJiYobD0iJGV2ZW50LnRhcmdldC52YWx1ZS50cmltKCkiKSxhJiYobD0iX24oIitsKyIpIik7dmFyIGY9YW4odCxsKTtjJiYoZj0iaWYoJGV2ZW50LnRhcmdldC5jb21wb3NpbmcpcmV0dXJuOyIrZiksUXQoZSwidmFsdWUiLCIoIit0KyIpIiksdG4oZSx1LGYsbnVsbCwhMCksKHN8fGF8fCJudW1iZXIiPT09cikmJnRuKGUsImJsdXIiLCIkZm9yY2VVcGRhdGUoKSIpfWZ1bmN0aW9uIHluKGUpe3ZhciB0O2VbYWFdJiYodD1EaT8iY2hhbmdlIjoiaW5wdXQiLGVbdF09W10uY29uY2F0KGVbYWFdLGVbdF18fFtdKSxkZWxldGUgZVthYV0pLGVbc2FdJiYodD1IaT8iY2xpY2siOiJjaGFuZ2UiLGVbdF09W10uY29uY2F0KGVbc2FdLGVbdF18fFtdKSxkZWxldGUgZVtzYV0pfWZ1bmN0aW9uIF9uKGUsdCxuLHIpe2lmKG4pe3ZhciBpPXQsbz1Mbzt0PWZ1bmN0aW9uKG4pe251bGwhPT0oMT09PWFyZ3VtZW50cy5sZW5ndGg/aShuKTppLmFwcGx5KG51bGwsYXJndW1lbnRzKSkmJmJuKGUsdCxyLG8pfX1Mby5hZGRFdmVudExpc3RlbmVyKGUsdCxyKX1mdW5jdGlvbiBibihlLHQsbixyKXsocnx8TG8pLnJlbW92ZUV2ZW50TGlzdGVuZXIoZSx0LG4pfWZ1bmN0aW9uICRuKGUsdCl7aWYoZS5kYXRhLm9ufHx0LmRhdGEub24pe3ZhciBuPXQuZGF0YS5vbnx8e30scj1lLmRhdGEub258fHt9O0xvPXQuZWxtLHluKG4pLEsobixyLF9uLGJuLHQuY29udGV4dCl9fWZ1bmN0aW9uIHduKGUsdCl7aWYoZS5kYXRhLmRvbVByb3BzfHx0LmRhdGEuZG9tUHJvcHMpe3ZhciBuLHIsaT10LmVsbSxvPWUuZGF0YS5kb21Qcm9wc3x8e30sYT10LmRhdGEuZG9tUHJvcHN8fHt9O2EuX19vYl9fJiYoYT10LmRhdGEuZG9tUHJvcHM9dSh7fSxhKSk7Zm9yKG4gaW4gbyludWxsPT1hW25dJiYoaVtuXT0iIik7Zm9yKG4gaW4gYSlpZihyPWFbbl0sInRleHRDb250ZW50IiE9PW4mJiJpbm5lckhUTUwiIT09bnx8KHQuY2hpbGRyZW4mJih0LmNoaWxkcmVuLmxlbmd0aD0wKSxyIT09b1tuXSkpaWYoInZhbHVlIj09PW4pe2kuX3ZhbHVlPXI7dmFyIHM9bnVsbD09cj8iIjpTdHJpbmcocik7eG4oaSx0LHMpJiYoaS52YWx1ZT1zKX1lbHNlIGlbbl09cn19ZnVuY3Rpb24geG4oZSx0LG4pe3JldHVybiFlLmNvbXBvc2luZyYmKCJvcHRpb24iPT09dC50YWd8fENuKGUsbil8fGtuKGUsbikpfWZ1bmN0aW9uIENuKGUsdCl7cmV0dXJuIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQhPT1lJiZlLnZhbHVlIT09dH1mdW5jdGlvbiBrbihlLG4pe3ZhciByPWUudmFsdWUsaT1lLl92TW9kaWZpZXJzO3JldHVybiBpJiZpLm51bWJlcnx8Im51bWJlciI9PT1lLnR5cGU/dChyKSE9PXQobik6aSYmaS50cmltP3IudHJpbSgpIT09bi50cmltKCk6ciE9PW59ZnVuY3Rpb24gQW4oZSl7dmFyIHQ9T24oZS5zdHlsZSk7cmV0dXJuIGUuc3RhdGljU3R5bGU/dShlLnN0YXRpY1N0eWxlLHQpOnR9ZnVuY3Rpb24gT24oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/cChlKToic3RyaW5nIj09dHlwZW9mIGU/bGEoZSk6ZX1mdW5jdGlvbiBUbihlLHQpe3ZhciBuLHI9e307aWYodClmb3IodmFyIGk9ZTtpLmNvbXBvbmVudEluc3RhbmNlOylpPWkuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlLGkuZGF0YSYmKG49QW4oaS5kYXRhKSkmJnUocixuKTsobj1BbihlLmRhdGEpKSYmdShyLG4pO2Zvcih2YXIgbz1lO289by5wYXJlbnQ7KW8uZGF0YSYmKG49QW4oby5kYXRhKSkmJnUocixuKTtyZXR1cm4gcn1mdW5jdGlvbiBTbihlLHQpe3ZhciBuPXQuZGF0YSxyPWUuZGF0YTtpZihuLnN0YXRpY1N0eWxlfHxuLnN0eWxlfHxyLnN0YXRpY1N0eWxlfHxyLnN0eWxlKXt2YXIgaSxvLGE9dC5lbG0scz1lLmRhdGEuc3RhdGljU3R5bGUsYz1lLmRhdGEuc3R5bGV8fHt9LGw9c3x8YyxmPU9uKHQuZGF0YS5zdHlsZSl8fHt9O3QuZGF0YS5zdHlsZT1mLl9fb2JfXz91KHt9LGYpOmY7dmFyIHA9VG4odCwhMCk7Zm9yKG8gaW4gbCludWxsPT1wW29dJiZkYShhLG8sIiIpO2ZvcihvIGluIHApKGk9cFtvXSkhPT1sW29dJiZkYShhLG8sbnVsbD09aT8iIjppKX19ZnVuY3Rpb24gRW4oZSx0KXtpZih0JiYodD10LnRyaW0oKSkpaWYoZS5jbGFzc0xpc3QpdC5pbmRleE9mKCIgIik+LTE/dC5zcGxpdCgvXHMrLykuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZS5jbGFzc0xpc3QuYWRkKHQpfSk6ZS5jbGFzc0xpc3QuYWRkKHQpO2Vsc2V7dmFyIG49IiAiKyhlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpKyIgIjtuLmluZGV4T2YoIiAiK3QrIiAiKTwwJiZlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLChuK3QpLnRyaW0oKSl9fWZ1bmN0aW9uIGpuKGUsdCl7aWYodCYmKHQ9dC50cmltKCkpKWlmKGUuY2xhc3NMaXN0KXQuaW5kZXhPZigiICIpPi0xP3Quc3BsaXQoL1xzKy8pLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGUuY2xhc3NMaXN0LnJlbW92ZSh0KX0pOmUuY2xhc3NMaXN0LnJlbW92ZSh0KTtlbHNle2Zvcih2YXIgbj0iICIrKGUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIikrIiAiLHI9IiAiK3QrIiAiO24uaW5kZXhPZihyKT49MDspbj1uLnJlcGxhY2UociwiICIpO2Uuc2V0QXR0cmlidXRlKCJjbGFzcyIsbi50cmltKCkpfX1mdW5jdGlvbiBObihlKXtpZihlKXtpZigib2JqZWN0Ij09dHlwZW9mIGUpe3ZhciB0PXt9O3JldHVybiBlLmNzcyE9PSExJiZ1KHQsZ2EoZS5uYW1lfHwidiIpKSx1KHQsZSksdH1yZXR1cm4ic3RyaW5nIj09dHlwZW9mIGU/Z2EoZSk6dm9pZCAwfX1mdW5jdGlvbiBJbihlKXtrYShmdW5jdGlvbigpe2thKGUpfSl9ZnVuY3Rpb24gTG4oZSx0KXsoZS5fdHJhbnNpdGlvbkNsYXNzZXN8fChlLl90cmFuc2l0aW9uQ2xhc3Nlcz1bXSkpLnB1c2godCksRW4oZSx0KX1mdW5jdGlvbiBEbihlLHQpe2UuX3RyYW5zaXRpb25DbGFzc2VzJiZyKGUuX3RyYW5zaXRpb25DbGFzc2VzLHQpLGpuKGUsdCl9ZnVuY3Rpb24gTW4oZSx0LG4pe3ZhciByPVBuKGUsdCksaT1yLnR5cGUsbz1yLnRpbWVvdXQsYT1yLnByb3BDb3VudDtpZighaSlyZXR1cm4gbigpO3ZhciBzPWk9PT1fYT93YTpDYSxjPTAsdT1mdW5jdGlvbigpe2UucmVtb3ZlRXZlbnRMaXN0ZW5lcihzLGwpLG4oKX0sbD1mdW5jdGlvbih0KXt0LnRhcmdldD09PWUmJisrYz49YSYmdSgpfTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YzxhJiZ1KCl9LG8rMSksZS5hZGRFdmVudExpc3RlbmVyKHMsbCl9ZnVuY3Rpb24gUG4oZSx0KXt2YXIgbixyPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUpLGk9clskYSsiRGVsYXkiXS5zcGxpdCgiLCAiKSxvPXJbJGErIkR1cmF0aW9uIl0uc3BsaXQoIiwgIiksYT1SbihpLG8pLHM9clt4YSsiRGVsYXkiXS5zcGxpdCgiLCAiKSxjPXJbeGErIkR1cmF0aW9uIl0uc3BsaXQoIiwgIiksdT1SbihzLGMpLGw9MCxmPTA7cmV0dXJuIHQ9PT1fYT9hPjAmJihuPV9hLGw9YSxmPW8ubGVuZ3RoKTp0PT09YmE/dT4wJiYobj1iYSxsPXUsZj1jLmxlbmd0aCk6KGw9TWF0aC5tYXgoYSx1KSxuPWw+MD9hPnU/X2E6YmE6bnVsbCxmPW4/bj09PV9hP28ubGVuZ3RoOmMubGVuZ3RoOjApLHt0eXBlOm4sdGltZW91dDpsLHByb3BDb3VudDpmLGhhc1RyYW5zZm9ybTpuPT09X2EmJkFhLnRlc3QoclskYSsiUHJvcGVydHkiXSl9fWZ1bmN0aW9uIFJuKGUsdCl7Zm9yKDtlLmxlbmd0aDx0Lmxlbmd0aDspZT1lLmNvbmNhdChlKTtyZXR1cm4gTWF0aC5tYXguYXBwbHkobnVsbCx0Lm1hcChmdW5jdGlvbih0LG4pe3JldHVybiBGbih0KStGbihlW25dKX0pKX1mdW5jdGlvbiBGbihlKXtyZXR1cm4gMWUzKk51bWJlcihlLnNsaWNlKDAsLTEpKX1mdW5jdGlvbiBIbihlLG4pe3ZhciByPWUuZWxtO3IuX2xlYXZlQ2ImJihyLl9sZWF2ZUNiLmNhbmNlbGxlZD0hMCxyLl9sZWF2ZUNiKCkpO3ZhciBpPU5uKGUuZGF0YS50cmFuc2l0aW9uKTtpZihpJiYhci5fZW50ZXJDYiYmMT09PXIubm9kZVR5cGUpe2Zvcih2YXIgbz1pLmNzcyxhPWkudHlwZSxzPWkuZW50ZXJDbGFzcyxjPWkuZW50ZXJUb0NsYXNzLHU9aS5lbnRlckFjdGl2ZUNsYXNzLGY9aS5hcHBlYXJDbGFzcyxwPWkuYXBwZWFyVG9DbGFzcyxkPWkuYXBwZWFyQWN0aXZlQ2xhc3Msdj1pLmJlZm9yZUVudGVyLGg9aS5lbnRlcixnPWkuYWZ0ZXJFbnRlcix5PWkuZW50ZXJDYW5jZWxsZWQsXz1pLmJlZm9yZUFwcGVhcixiPWkuYXBwZWFyLCQ9aS5hZnRlckFwcGVhcix3PWkuYXBwZWFyQ2FuY2VsbGVkLHg9aS5kdXJhdGlvbixDPXNvLGs9c28uJHZub2RlO2smJmsucGFyZW50OylrPWsucGFyZW50LEM9ay5jb250ZXh0O3ZhciBBPSFDLl9pc01vdW50ZWR8fCFlLmlzUm9vdEluc2VydDtpZighQXx8Ynx8IiI9PT1iKXt2YXIgTz1BJiZmP2Y6cyxUPUEmJmQ/ZDp1LFM9QSYmcD9wOmMsRT1BP198fHY6dixqPUEmJiJmdW5jdGlvbiI9PXR5cGVvZiBiP2I6aCxOPUE/JHx8ZzpnLEk9QT93fHx5OnksTD10KGwoeCk/eC5lbnRlcjp4KSxEPW8hPT0hMSYmIU1pLE09Vm4oaiksUD1yLl9lbnRlckNiPW0oZnVuY3Rpb24oKXtEJiYoRG4ocixTKSxEbihyLFQpKSxQLmNhbmNlbGxlZD8oRCYmRG4ocixPKSxJJiZJKHIpKTpOJiZOKHIpLHIuX2VudGVyQ2I9bnVsbH0pO2UuZGF0YS5zaG93fHxxKGUuZGF0YS5ob29rfHwoZS5kYXRhLmhvb2s9e30pLCJpbnNlcnQiLGZ1bmN0aW9uKCl7dmFyIHQ9ci5wYXJlbnROb2RlLG49dCYmdC5fcGVuZGluZyYmdC5fcGVuZGluZ1tlLmtleV07biYmbi50YWc9PT1lLnRhZyYmbi5lbG0uX2xlYXZlQ2ImJm4uZWxtLl9sZWF2ZUNiKCksaiYmaihyLFApfSksRSYmRShyKSxEJiYoTG4ocixPKSxMbihyLFQpLEluKGZ1bmN0aW9uKCl7TG4ocixTKSxEbihyLE8pLFAuY2FuY2VsbGVkfHxNfHwoQm4oTCk/c2V0VGltZW91dChQLEwpOk1uKHIsYSxQKSl9KSksZS5kYXRhLnNob3cmJihuJiZuKCksaiYmaihyLFApKSxEfHxNfHxQKCl9fX1mdW5jdGlvbiBVbihlLG4pe2Z1bmN0aW9uIHIoKXt3LmNhbmNlbGxlZHx8KGUuZGF0YS5zaG93fHwoKGkucGFyZW50Tm9kZS5fcGVuZGluZ3x8KGkucGFyZW50Tm9kZS5fcGVuZGluZz17fSkpW2Uua2V5XT1lKSxwJiZwKGkpLF8mJihMbihpLGMpLExuKGksZiksSW4oZnVuY3Rpb24oKXtMbihpLHUpLERuKGksYyksdy5jYW5jZWxsZWR8fGJ8fChCbigkKT9zZXRUaW1lb3V0KHcsJCk6TW4oaSxzLHcpKX0pKSxkJiZkKGksdyksX3x8Ynx8dygpKX12YXIgaT1lLmVsbTtpLl9lbnRlckNiJiYoaS5fZW50ZXJDYi5jYW5jZWxsZWQ9ITAsaS5fZW50ZXJDYigpKTt2YXIgbz1ObihlLmRhdGEudHJhbnNpdGlvbik7aWYoIW8pcmV0dXJuIG4oKTtpZighaS5fbGVhdmVDYiYmMT09PWkubm9kZVR5cGUpew0KdmFyIGE9by5jc3Mscz1vLnR5cGUsYz1vLmxlYXZlQ2xhc3MsdT1vLmxlYXZlVG9DbGFzcyxmPW8ubGVhdmVBY3RpdmVDbGFzcyxwPW8uYmVmb3JlTGVhdmUsZD1vLmxlYXZlLHY9by5hZnRlckxlYXZlLGg9by5sZWF2ZUNhbmNlbGxlZCxnPW8uZGVsYXlMZWF2ZSx5PW8uZHVyYXRpb24sXz1hIT09ITEmJiFNaSxiPVZuKGQpLCQ9dChsKHkpP3kubGVhdmU6eSksdz1pLl9sZWF2ZUNiPW0oZnVuY3Rpb24oKXtpLnBhcmVudE5vZGUmJmkucGFyZW50Tm9kZS5fcGVuZGluZyYmKGkucGFyZW50Tm9kZS5fcGVuZGluZ1tlLmtleV09bnVsbCksXyYmKERuKGksdSksRG4oaSxmKSksdy5jYW5jZWxsZWQ/KF8mJkRuKGksYyksaCYmaChpKSk6KG4oKSx2JiZ2KGkpKSxpLl9sZWF2ZUNiPW51bGx9KTtnP2cocik6cigpfX1mdW5jdGlvbiBCbihlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGUmJiFpc05hTihlKX1mdW5jdGlvbiBWbihlKXtpZighZSlyZXR1cm4hMTt2YXIgdD1lLmZucztyZXR1cm4gdD9WbihBcnJheS5pc0FycmF5KHQpP3RbMF06dCk6KGUuX2xlbmd0aHx8ZS5sZW5ndGgpPjF9ZnVuY3Rpb24gem4oZSx0KXt0LmRhdGEuc2hvd3x8SG4odCl9ZnVuY3Rpb24gSm4oZSx0LG4pe3ZhciByPXQudmFsdWUsaT1lLm11bHRpcGxlO2lmKCFpfHxBcnJheS5pc0FycmF5KHIpKXtmb3IodmFyIG8sYSxzPTAsYz1lLm9wdGlvbnMubGVuZ3RoO3M8YztzKyspaWYoYT1lLm9wdGlvbnNbc10saSlvPWgocixxbihhKSk+LTEsYS5zZWxlY3RlZCE9PW8mJihhLnNlbGVjdGVkPW8pO2Vsc2UgaWYodihxbihhKSxyKSlyZXR1cm4gdm9pZChlLnNlbGVjdGVkSW5kZXghPT1zJiYoZS5zZWxlY3RlZEluZGV4PXMpKTtpfHwoZS5zZWxlY3RlZEluZGV4PS0xKX19ZnVuY3Rpb24gS24oZSx0KXtmb3IodmFyIG49MCxyPXQubGVuZ3RoO248cjtuKyspaWYodihxbih0W25dKSxlKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBxbihlKXtyZXR1cm4iX3ZhbHVlImluIGU/ZS5fdmFsdWU6ZS52YWx1ZX1mdW5jdGlvbiBXbihlKXtlLnRhcmdldC5jb21wb3Npbmc9ITB9ZnVuY3Rpb24gWm4oZSl7ZS50YXJnZXQuY29tcG9zaW5nPSExLEduKGUudGFyZ2V0LCJpbnB1dCIpfWZ1bmN0aW9uIEduKGUsdCl7dmFyIG49ZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkhUTUxFdmVudHMiKTtuLmluaXRFdmVudCh0LCEwLCEwKSxlLmRpc3BhdGNoRXZlbnQobil9ZnVuY3Rpb24gWW4oZSl7cmV0dXJuIWUuY29tcG9uZW50SW5zdGFuY2V8fGUuZGF0YSYmZS5kYXRhLnRyYW5zaXRpb24/ZTpZbihlLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZSl9ZnVuY3Rpb24gUW4oZSl7dmFyIHQ9ZSYmZS5jb21wb25lbnRPcHRpb25zO3JldHVybiB0JiZ0LkN0b3Iub3B0aW9ucy5hYnN0cmFjdD9RbihZKHQuY2hpbGRyZW4pKTplfWZ1bmN0aW9uIFhuKGUpe3ZhciB0PXt9LG49ZS4kb3B0aW9ucztmb3IodmFyIHIgaW4gbi5wcm9wc0RhdGEpdFtyXT1lW3JdO3ZhciBpPW4uX3BhcmVudExpc3RlbmVycztmb3IodmFyIG8gaW4gaSl0W3dpKG8pXT1pW29dO3JldHVybiB0fWZ1bmN0aW9uIGVyKGUsdCl7cmV0dXJuL1xkLWtlZXAtYWxpdmUkLy50ZXN0KHQudGFnKT9lKCJrZWVwLWFsaXZlIik6bnVsbH1mdW5jdGlvbiB0cihlKXtmb3IoO2U9ZS5wYXJlbnQ7KWlmKGUuZGF0YS50cmFuc2l0aW9uKXJldHVybiEwfWZ1bmN0aW9uIG5yKGUsdCl7cmV0dXJuIHQua2V5PT09ZS5rZXkmJnQudGFnPT09ZS50YWd9ZnVuY3Rpb24gcnIoZSl7ZS5lbG0uX21vdmVDYiYmZS5lbG0uX21vdmVDYigpLGUuZWxtLl9lbnRlckNiJiZlLmVsbS5fZW50ZXJDYigpfWZ1bmN0aW9uIGlyKGUpe2UuZGF0YS5uZXdQb3M9ZS5lbG0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9ZnVuY3Rpb24gb3IoZSl7dmFyIHQ9ZS5kYXRhLnBvcyxuPWUuZGF0YS5uZXdQb3Mscj10LmxlZnQtbi5sZWZ0LGk9dC50b3Atbi50b3A7aWYocnx8aSl7ZS5kYXRhLm1vdmVkPSEwO3ZhciBvPWUuZWxtLnN0eWxlO28udHJhbnNmb3JtPW8uV2Via2l0VHJhbnNmb3JtPSJ0cmFuc2xhdGUoIityKyJweCwiK2krInB4KSIsby50cmFuc2l0aW9uRHVyYXRpb249IjBzIn19ZnVuY3Rpb24gYXIoZSl7cmV0dXJuIEZhPUZhfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxGYS5pbm5lckhUTUw9ZSxGYS50ZXh0Q29udGVudH1mdW5jdGlvbiBzcihlLHQpe3ZhciBuPXQ/d3M6JHM7cmV0dXJuIGUucmVwbGFjZShuLGZ1bmN0aW9uKGUpe3JldHVybiBic1tlXX0pfWZ1bmN0aW9uIGNyKGUsdCl7ZnVuY3Rpb24gbih0KXtsKz10LGU9ZS5zdWJzdHJpbmcodCl9ZnVuY3Rpb24gcihlLG4scil7dmFyIGkscztpZihudWxsPT1uJiYobj1sKSxudWxsPT1yJiYocj1sKSxlJiYocz1lLnRvTG93ZXJDYXNlKCkpLGUpZm9yKGk9YS5sZW5ndGgtMTtpPj0wJiZhW2ldLmxvd2VyQ2FzZWRUYWchPT1zO2ktLSk7ZWxzZSBpPTA7aWYoaT49MCl7Zm9yKHZhciBjPWEubGVuZ3RoLTE7Yz49aTtjLS0pdC5lbmQmJnQuZW5kKGFbY10udGFnLG4scik7YS5sZW5ndGg9aSxvPWkmJmFbaS0xXS50YWd9ZWxzZSJiciI9PT1zP3Quc3RhcnQmJnQuc3RhcnQoZSxbXSwhMCxuLHIpOiJwIj09PXMmJih0LnN0YXJ0JiZ0LnN0YXJ0KGUsW10sITEsbixyKSx0LmVuZCYmdC5lbmQoZSxuLHIpKX1mb3IodmFyIGksbyxhPVtdLHM9dC5leHBlY3RIVE1MLGM9dC5pc1VuYXJ5VGFnfHxPaSx1PXQuY2FuQmVMZWZ0T3BlblRhZ3x8T2ksbD0wO2U7KXtpZihpPWUsbyYmeXMobykpe3ZhciBmPW8udG9Mb3dlckNhc2UoKSxwPV9zW2ZdfHwoX3NbZl09bmV3IFJlZ0V4cCgiKFtcXHNcXFNdKj8pKDwvIitmKyJbXj5dKj4pIiwiaSIpKSxkPTAsdj1lLnJlcGxhY2UocCxmdW5jdGlvbihlLG4scil7cmV0dXJuIGQ9ci5sZW5ndGgseXMoZil8fCJub3NjcmlwdCI9PT1mfHwobj1uLnJlcGxhY2UoLzwhLS0oW1xzXFNdKj8pLS0+L2csIiQxIikucmVwbGFjZSgvPCFcW0NEQVRBXFsoW1xzXFNdKj8pXV0+L2csIiQxIikpLHQuY2hhcnMmJnQuY2hhcnMobiksIiJ9KTtsKz1lLmxlbmd0aC12Lmxlbmd0aCxlPXYscihmLGwtZCxsKX1lbHNle3ZhciBoPWUuaW5kZXhPZigiPCIpO2lmKDA9PT1oKXtpZihZYS50ZXN0KGUpKXt2YXIgbT1lLmluZGV4T2YoIi0tPiIpO2lmKG0+PTApe24obSszKTtjb250aW51ZX19aWYoUWEudGVzdChlKSl7dmFyIGc9ZS5pbmRleE9mKCJdPiIpO2lmKGc+PTApe24oZysyKTtjb250aW51ZX19dmFyIHk9ZS5tYXRjaChHYSk7aWYoeSl7bih5WzBdLmxlbmd0aCk7Y29udGludWV9dmFyIF89ZS5tYXRjaChaYSk7aWYoXyl7dmFyIGI9bDtuKF9bMF0ubGVuZ3RoKSxyKF9bMV0sYixsKTtjb250aW51ZX12YXIgJD1mdW5jdGlvbigpe3ZhciB0PWUubWF0Y2gocWEpO2lmKHQpe3ZhciByPXt0YWdOYW1lOnRbMV0sYXR0cnM6W10sc3RhcnQ6bH07bih0WzBdLmxlbmd0aCk7Zm9yKHZhciBpLG87IShpPWUubWF0Y2goV2EpKSYmKG89ZS5tYXRjaChKYSkpOyluKG9bMF0ubGVuZ3RoKSxyLmF0dHJzLnB1c2gobyk7aWYoaSlyZXR1cm4gci51bmFyeVNsYXNoPWlbMV0sbihpWzBdLmxlbmd0aCksci5lbmQ9bCxyfX0oKTtpZigkKXshZnVuY3Rpb24oZSl7dmFyIG49ZS50YWdOYW1lLGk9ZS51bmFyeVNsYXNoO3MmJigicCI9PT1vJiZWYShuKSYmcihvKSx1KG4pJiZvPT09biYmcihuKSk7Zm9yKHZhciBsPWMobil8fCJodG1sIj09PW4mJiJoZWFkIj09PW98fCEhaSxmPWUuYXR0cnMubGVuZ3RoLHA9bmV3IEFycmF5KGYpLGQ9MDtkPGY7ZCsrKXt2YXIgdj1lLmF0dHJzW2RdO1hhJiZ2WzBdLmluZGV4T2YoJyIiJyk9PT0tMSYmKCIiPT09dlszXSYmZGVsZXRlIHZbM10sIiI9PT12WzRdJiZkZWxldGUgdls0XSwiIj09PXZbNV0mJmRlbGV0ZSB2WzVdKTt2YXIgaD12WzNdfHx2WzRdfHx2WzVdfHwiIjtwW2RdPXtuYW1lOnZbMV0sdmFsdWU6c3IoaCx0LnNob3VsZERlY29kZU5ld2xpbmVzKX19bHx8KGEucHVzaCh7dGFnOm4sbG93ZXJDYXNlZFRhZzpuLnRvTG93ZXJDYXNlKCksYXR0cnM6cH0pLG89biksdC5zdGFydCYmdC5zdGFydChuLHAsbCxlLnN0YXJ0LGUuZW5kKX0oJCk7Y29udGludWV9fXZhciB3PXZvaWQgMCx4PXZvaWQgMCxDPXZvaWQgMDtpZihoPj0wKXtmb3IoeD1lLnNsaWNlKGgpOyEoWmEudGVzdCh4KXx8cWEudGVzdCh4KXx8WWEudGVzdCh4KXx8UWEudGVzdCh4KXx8KEM9eC5pbmRleE9mKCI8IiwxKSk8MCk7KWgrPUMseD1lLnNsaWNlKGgpO3c9ZS5zdWJzdHJpbmcoMCxoKSxuKGgpfWg8MCYmKHc9ZSxlPSIiKSx0LmNoYXJzJiZ3JiZ0LmNoYXJzKHcpfWlmKGU9PT1pKXt0LmNoYXJzJiZ0LmNoYXJzKGUpO2JyZWFrfX1yKCl9ZnVuY3Rpb24gdXIoZSx0KXt2YXIgbj10P0NzKHQpOnhzO2lmKG4udGVzdChlKSl7Zm9yKHZhciByLGksbz1bXSxhPW4ubGFzdEluZGV4PTA7cj1uLmV4ZWMoZSk7KXtpPXIuaW5kZXgsaT5hJiZvLnB1c2goSlNPTi5zdHJpbmdpZnkoZS5zbGljZShhLGkpKSk7dmFyIHM9V3QoclsxXS50cmltKCkpO28ucHVzaCgiX3MoIitzKyIpIiksYT1pK3JbMF0ubGVuZ3RofXJldHVybiBhPGUubGVuZ3RoJiZvLnB1c2goSlNPTi5zdHJpbmdpZnkoZS5zbGljZShhKSkpLG8uam9pbigiKyIpfX1mdW5jdGlvbiBscihlLHQpe2Z1bmN0aW9uIG4oZSl7ZS5wcmUmJihzPSExKSxvcyhlLnRhZykmJihjPSExKX1lcz10Lndhcm58fEd0LHNzPXQuZ2V0VGFnTmFtZXNwYWNlfHxPaSxhcz10Lm11c3RVc2VQcm9wfHxPaSxvcz10LmlzUHJlVGFnfHxPaSxycz1ZdCh0Lm1vZHVsZXMsInByZVRyYW5zZm9ybU5vZGUiKSxucz1ZdCh0Lm1vZHVsZXMsInRyYW5zZm9ybU5vZGUiKSxpcz1ZdCh0Lm1vZHVsZXMsInBvc3RUcmFuc2Zvcm1Ob2RlIiksdHM9dC5kZWxpbWl0ZXJzO3ZhciByLGksbz1bXSxhPXQucHJlc2VydmVXaGl0ZXNwYWNlIT09ITEscz0hMSxjPSExO3JldHVybiBjcihlLHt3YXJuOmVzLGV4cGVjdEhUTUw6dC5leHBlY3RIVE1MLGlzVW5hcnlUYWc6dC5pc1VuYXJ5VGFnLGNhbkJlTGVmdE9wZW5UYWc6dC5jYW5CZUxlZnRPcGVuVGFnLHNob3VsZERlY29kZU5ld2xpbmVzOnQuc2hvdWxkRGVjb2RlTmV3bGluZXMsc3RhcnQ6ZnVuY3Rpb24oZSxhLHUpe3ZhciBsPWkmJmkubnN8fHNzKGUpO0RpJiYic3ZnIj09PWwmJihhPVRyKGEpKTt2YXIgZj17dHlwZToxLHRhZzplLGF0dHJzTGlzdDphLGF0dHJzTWFwOkFyKGEpLHBhcmVudDppLGNoaWxkcmVuOltdfTtsJiYoZi5ucz1sKSxPcihmKSYmIVVpKCkmJihmLmZvcmJpZGRlbj0hMCk7Zm9yKHZhciBwPTA7cDxycy5sZW5ndGg7cCsrKXJzW3BdKGYsdCk7aWYoc3x8KGZyKGYpLGYucHJlJiYocz0hMCkpLG9zKGYudGFnKSYmKGM9ITApLHMpcHIoZik7ZWxzZXtocihmKSxtcihmKSxicihmKSxkcihmKSxmLnBsYWluPSFmLmtleSYmIWEubGVuZ3RoLHZyKGYpLCRyKGYpLHdyKGYpO2Zvcih2YXIgZD0wO2Q8bnMubGVuZ3RoO2QrKyluc1tkXShmLHQpO3hyKGYpfWlmKHI/by5sZW5ndGh8fHIuaWYmJihmLmVsc2VpZnx8Zi5lbHNlKSYmX3Iocix7ZXhwOmYuZWxzZWlmLGJsb2NrOmZ9KTpyPWYsaSYmIWYuZm9yYmlkZGVuKWlmKGYuZWxzZWlmfHxmLmVsc2UpZ3IoZixpKTtlbHNlIGlmKGYuc2xvdFNjb3BlKXtpLnBsYWluPSExO3ZhciB2PWYuc2xvdFRhcmdldHx8JyJkZWZhdWx0Iic7KGkuc2NvcGVkU2xvdHN8fChpLnNjb3BlZFNsb3RzPXt9KSlbdl09Zn1lbHNlIGkuY2hpbGRyZW4ucHVzaChmKSxmLnBhcmVudD1pO3U/bihmKTooaT1mLG8ucHVzaChmKSk7Zm9yKHZhciBoPTA7aDxpcy5sZW5ndGg7aCsrKWlzW2hdKGYsdCl9LGVuZDpmdW5jdGlvbigpe3ZhciBlPW9bby5sZW5ndGgtMV0sdD1lLmNoaWxkcmVuW2UuY2hpbGRyZW4ubGVuZ3RoLTFdO3QmJjM9PT10LnR5cGUmJiIgIj09PXQudGV4dCYmIWMmJmUuY2hpbGRyZW4ucG9wKCksby5sZW5ndGgtPTEsaT1vW28ubGVuZ3RoLTFdLG4oZSl9LGNoYXJzOmZ1bmN0aW9uKGUpe2lmKGkmJighRGl8fCJ0ZXh0YXJlYSIhPT1pLnRhZ3x8aS5hdHRyc01hcC5wbGFjZWhvbGRlciE9PWUpKXt2YXIgdD1pLmNoaWxkcmVuO2lmKGU9Y3x8ZS50cmltKCk/TnMoZSk6YSYmdC5sZW5ndGg/IiAiOiIiKXt2YXIgbjshcyYmIiAiIT09ZSYmKG49dXIoZSx0cykpP3QucHVzaCh7dHlwZToyLGV4cHJlc3Npb246bix0ZXh0OmV9KToiICI9PT1lJiZ0Lmxlbmd0aCYmIiAiPT09dFt0Lmxlbmd0aC0xXS50ZXh0fHx0LnB1c2goe3R5cGU6Myx0ZXh0OmV9KX19fX0pLHJ9ZnVuY3Rpb24gZnIoZSl7bnVsbCE9cm4oZSwidi1wcmUiKSYmKGUucHJlPSEwKX1mdW5jdGlvbiBwcihlKXt2YXIgdD1lLmF0dHJzTGlzdC5sZW5ndGg7aWYodClmb3IodmFyIG49ZS5hdHRycz1uZXcgQXJyYXkodCkscj0wO3I8dDtyKyspbltyXT17bmFtZTplLmF0dHJzTGlzdFtyXS5uYW1lLHZhbHVlOkpTT04uc3RyaW5naWZ5KGUuYXR0cnNMaXN0W3JdLnZhbHVlKX07ZWxzZSBlLnByZXx8KGUucGxhaW49ITApfWZ1bmN0aW9uIGRyKGUpe3ZhciB0PW5uKGUsImtleSIpO3QmJihlLmtleT10KX1mdW5jdGlvbiB2cihlKXt2YXIgdD1ubihlLCJyZWYiKTt0JiYoZS5yZWY9dCxlLnJlZkluRm9yPUNyKGUpKX1mdW5jdGlvbiBocihlKXt2YXIgdDtpZih0PXJuKGUsInYtZm9yIikpe3ZhciBuPXQubWF0Y2goT3MpO2lmKCFuKXJldHVybjtlLmZvcj1uWzJdLnRyaW0oKTt2YXIgcj1uWzFdLnRyaW0oKSxpPXIubWF0Y2goVHMpO2k/KGUuYWxpYXM9aVsxXS50cmltKCksZS5pdGVyYXRvcjE9aVsyXS50cmltKCksaVszXSYmKGUuaXRlcmF0b3IyPWlbM10udHJpbSgpKSk6ZS5hbGlhcz1yfX1mdW5jdGlvbiBtcihlKXt2YXIgdD1ybihlLCJ2LWlmIik7aWYodCllLmlmPXQsX3IoZSx7ZXhwOnQsYmxvY2s6ZX0pO2Vsc2V7bnVsbCE9cm4oZSwidi1lbHNlIikmJihlLmVsc2U9ITApO3ZhciBuPXJuKGUsInYtZWxzZS1pZiIpO24mJihlLmVsc2VpZj1uKX19ZnVuY3Rpb24gZ3IoZSx0KXt2YXIgbj15cih0LmNoaWxkcmVuKTtuJiZuLmlmJiZfcihuLHtleHA6ZS5lbHNlaWYsYmxvY2s6ZX0pfWZ1bmN0aW9uIHlyKGUpe2Zvcih2YXIgdD1lLmxlbmd0aDt0LS07KXtpZigxPT09ZVt0XS50eXBlKXJldHVybiBlW3RdO2UucG9wKCl9fWZ1bmN0aW9uIF9yKGUsdCl7ZS5pZkNvbmRpdGlvbnN8fChlLmlmQ29uZGl0aW9ucz1bXSksZS5pZkNvbmRpdGlvbnMucHVzaCh0KX1mdW5jdGlvbiBicihlKXtudWxsIT1ybihlLCJ2LW9uY2UiKSYmKGUub25jZT0hMCl9ZnVuY3Rpb24gJHIoZSl7aWYoInNsb3QiPT09ZS50YWcpZS5zbG90TmFtZT1ubihlLCJuYW1lIik7ZWxzZXt2YXIgdD1ubihlLCJzbG90Iik7dCYmKGUuc2xvdFRhcmdldD0nIiInPT09dD8nImRlZmF1bHQiJzp0KSwidGVtcGxhdGUiPT09ZS50YWcmJihlLnNsb3RTY29wZT1ybihlLCJzY29wZSIpKX19ZnVuY3Rpb24gd3IoZSl7dmFyIHQ7KHQ9bm4oZSwiaXMiKSkmJihlLmNvbXBvbmVudD10KSxudWxsIT1ybihlLCJpbmxpbmUtdGVtcGxhdGUiKSYmKGUuaW5saW5lVGVtcGxhdGU9ITApfWZ1bmN0aW9uIHhyKGUpe3ZhciB0LG4scixpLG8sYSxzLGM9ZS5hdHRyc0xpc3Q7Zm9yKHQ9MCxuPWMubGVuZ3RoO3Q8bjt0KyspaWYocj1pPWNbdF0ubmFtZSxvPWNbdF0udmFsdWUsQXMudGVzdChyKSlpZihlLmhhc0JpbmRpbmdzPSEwLGE9a3IociksYSYmKHI9ci5yZXBsYWNlKGpzLCIiKSksRXMudGVzdChyKSlyPXIucmVwbGFjZShFcywiIiksbz1XdChvKSxzPSExLGEmJihhLnByb3AmJihzPSEwLCJpbm5lckh0bWwiPT09KHI9d2kocikpJiYocj0iaW5uZXJIVE1MIikpLGEuY2FtZWwmJihyPXdpKHIpKSksc3x8YXMoZS50YWcsZS5hdHRyc01hcC50eXBlLHIpP1F0KGUscixvKTpYdChlLHIsbyk7ZWxzZSBpZihrcy50ZXN0KHIpKXI9ci5yZXBsYWNlKGtzLCIiKSx0bihlLHIsbyxhKTtlbHNle3I9ci5yZXBsYWNlKEFzLCIiKTt2YXIgdT1yLm1hdGNoKFNzKSxsPXUmJnVbMV07bCYmKHI9ci5zbGljZSgwLC0obC5sZW5ndGgrMSkpKSxlbihlLHIsaSxvLGwsYSl9ZWxzZSBYdChlLHIsSlNPTi5zdHJpbmdpZnkobykpfWZ1bmN0aW9uIENyKGUpe2Zvcih2YXIgdD1lO3Q7KXtpZih2b2lkIDAhPT10LmZvcilyZXR1cm4hMDt0PXQucGFyZW50fXJldHVybiExfWZ1bmN0aW9uIGtyKGUpe3ZhciB0PWUubWF0Y2goanMpO2lmKHQpe3ZhciBuPXt9O3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24oZSl7bltlLnNsaWNlKDEpXT0hMH0pLG59fWZ1bmN0aW9uIEFyKGUpe2Zvcih2YXIgdD17fSxuPTAscj1lLmxlbmd0aDtuPHI7bisrKXRbZVtuXS5uYW1lXT1lW25dLnZhbHVlO3JldHVybiB0fWZ1bmN0aW9uIE9yKGUpe3JldHVybiJzdHlsZSI9PT1lLnRhZ3x8InNjcmlwdCI9PT1lLnRhZyYmKCFlLmF0dHJzTWFwLnR5cGV8fCJ0ZXh0L2phdmFzY3JpcHQiPT09ZS5hdHRyc01hcC50eXBlKX1mdW5jdGlvbiBUcihlKXtmb3IodmFyIHQ9W10sbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lW25dO0lzLnRlc3Qoci5uYW1lKXx8KHIubmFtZT1yLm5hbWUucmVwbGFjZShMcywiIiksdC5wdXNoKHIpKX1yZXR1cm4gdH1mdW5jdGlvbiBTcihlLHQpe2UmJihjcz1Ecyh0LnN0YXRpY0tleXN8fCIiKSx1cz10LmlzUmVzZXJ2ZWRUYWd8fE9pLGpyKGUpLE5yKGUsITEpKX1mdW5jdGlvbiBFcihlKXtyZXR1cm4gbigidHlwZSx0YWcsYXR0cnNMaXN0LGF0dHJzTWFwLHBsYWluLHBhcmVudCxjaGlsZHJlbixhdHRycyIrKGU/IiwiK2U6IiIpKX1mdW5jdGlvbiBqcihlKXtpZihlLnN0YXRpYz1McihlKSwxPT09ZS50eXBlKXtpZighdXMoZS50YWcpJiYic2xvdCIhPT1lLnRhZyYmbnVsbD09ZS5hdHRyc01hcFsiaW5saW5lLXRlbXBsYXRlIl0pcmV0dXJuO2Zvcih2YXIgdD0wLG49ZS5jaGlsZHJlbi5sZW5ndGg7dDxuO3QrKyl7dmFyIHI9ZS5jaGlsZHJlblt0XTtqcihyKSxyLnN0YXRpY3x8KGUuc3RhdGljPSExKX19fWZ1bmN0aW9uIE5yKGUsdCl7aWYoMT09PWUudHlwZSl7aWYoKGUuc3RhdGljfHxlLm9uY2UpJiYoZS5zdGF0aWNJbkZvcj10KSxlLnN0YXRpYyYmZS5jaGlsZHJlbi5sZW5ndGgmJigxIT09ZS5jaGlsZHJlbi5sZW5ndGh8fDMhPT1lLmNoaWxkcmVuWzBdLnR5cGUpKXJldHVybiB2b2lkKGUuc3RhdGljUm9vdD0hMCk7aWYoZS5zdGF0aWNSb290PSExLGUuY2hpbGRyZW4pZm9yKHZhciBuPTAscj1lLmNoaWxkcmVuLmxlbmd0aDtuPHI7bisrKU5yKGUuY2hpbGRyZW5bbl0sdHx8ISFlLmZvcik7ZS5pZkNvbmRpdGlvbnMmJklyKGUuaWZDb25kaXRpb25zLHQpfX1mdW5jdGlvbiBJcihlLHQpe2Zvcih2YXIgbj0xLHI9ZS5sZW5ndGg7bjxyO24rKylOcihlW25dLmJsb2NrLHQpfWZ1bmN0aW9uIExyKGUpe3JldHVybiAyIT09ZS50eXBlJiYoMz09PWUudHlwZXx8ISghZS5wcmUmJihlLmhhc0JpbmRpbmdzfHxlLmlmfHxlLmZvcnx8YmkoZS50YWcpfHwhdXMoZS50YWcpfHxEcihlKXx8IU9iamVjdC5rZXlzKGUpLmV2ZXJ5KGNzKSkpKX1mdW5jdGlvbiBEcihlKXtmb3IoO2UucGFyZW50Oyl7aWYoZT1lLnBhcmVudCwidGVtcGxhdGUiIT09ZS50YWcpcmV0dXJuITE7aWYoZS5mb3IpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gTXIoZSx0KXt2YXIgbj10PyJuYXRpdmVPbjp7Ijoib246eyI7Zm9yKHZhciByIGluIGUpbis9JyInK3IrJyI6JytQcihyLGVbcl0pKyIsIjtyZXR1cm4gbi5zbGljZSgwLC0xKSsifSJ9ZnVuY3Rpb24gUHIoZSx0KXtpZighdClyZXR1cm4iZnVuY3Rpb24oKXt9IjtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiJbIit0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gUHIoZSx0KX0pLmpvaW4oIiwiKSsiXSI7dmFyIG49UHMudGVzdCh0LnZhbHVlKSxyPU1zLnRlc3QodC52YWx1ZSk7aWYodC5tb2RpZmllcnMpe3ZhciBpPSIiLG89IiIsYT1bXTtmb3IodmFyIHMgaW4gdC5tb2RpZmllcnMpSHNbc10/KG8rPUhzW3NdLFJzW3NdJiZhLnB1c2gocykpOmEucHVzaChzKTthLmxlbmd0aCYmKGkrPVJyKGEpKSxvJiYoaSs9byk7cmV0dXJuImZ1bmN0aW9uKCRldmVudCl7IitpKyhuP3QudmFsdWUrIigkZXZlbnQpIjpyPyIoIit0LnZhbHVlKyIpKCRldmVudCkiOnQudmFsdWUpKyJ9In1yZXR1cm4gbnx8cj90LnZhbHVlOiJmdW5jdGlvbigkZXZlbnQpeyIrdC52YWx1ZSsifSJ9ZnVuY3Rpb24gUnIoZSl7cmV0dXJuImlmKCEoJ2J1dHRvbicgaW4gJGV2ZW50KSYmIitlLm1hcChGcikuam9pbigiJiYiKSsiKXJldHVybiBudWxsOyJ9ZnVuY3Rpb24gRnIoZSl7dmFyIHQ9cGFyc2VJbnQoZSwxMCk7aWYodClyZXR1cm4iJGV2ZW50LmtleUNvZGUhPT0iK3Q7dmFyIG49UnNbZV07cmV0dXJuIl9rKCRldmVudC5rZXlDb2RlLCIrSlNPTi5zdHJpbmdpZnkoZSkrKG4/IiwiK0pTT04uc3RyaW5naWZ5KG4pOiIiKSsiKSJ9ZnVuY3Rpb24gSHIoZSx0KXtlLndyYXBEYXRhPWZ1bmN0aW9uKG4pe3JldHVybiJfYigiK24rIiwnIitlLnRhZysiJywiK3QudmFsdWUrKHQubW9kaWZpZXJzJiZ0Lm1vZGlmaWVycy5wcm9wPyIsdHJ1ZSI6IiIpKyIpIn19ZnVuY3Rpb24gVXIoZSx0KXt2YXIgbj1ocyxyPWhzPVtdLGk9bXM7bXM9MCxncz10LGxzPXQud2Fybnx8R3QsZnM9WXQodC5tb2R1bGVzLCJ0cmFuc2Zvcm1Db2RlIikscHM9WXQodC5tb2R1bGVzLCJnZW5EYXRhIiksZHM9dC5kaXJlY3RpdmVzfHx7fSx2cz10LmlzUmVzZXJ2ZWRUYWd8fE9pO3ZhciBvPWU/QnIoZSk6J19jKCJkaXYiKSc7cmV0dXJuIGhzPW4sbXM9aSx7cmVuZGVyOiJ3aXRoKHRoaXMpe3JldHVybiAiK28rIn0iLHN0YXRpY1JlbmRlckZuczpyfX1mdW5jdGlvbiBCcihlKXtpZihlLnN0YXRpY1Jvb3QmJiFlLnN0YXRpY1Byb2Nlc3NlZClyZXR1cm4gVnIoZSk7aWYoZS5vbmNlJiYhZS5vbmNlUHJvY2Vzc2VkKXJldHVybiB6cihlKTtpZihlLmZvciYmIWUuZm9yUHJvY2Vzc2VkKXJldHVybiBxcihlKTtpZihlLmlmJiYhZS5pZlByb2Nlc3NlZClyZXR1cm4gSnIoZSk7aWYoInRlbXBsYXRlIiE9PWUudGFnfHxlLnNsb3RUYXJnZXQpe2lmKCJzbG90Ij09PWUudGFnKXJldHVybiBvaShlKTt2YXIgdDtpZihlLmNvbXBvbmVudCl0PWFpKGUuY29tcG9uZW50LGUpO2Vsc2V7dmFyIG49ZS5wbGFpbj92b2lkIDA6V3IoZSkscj1lLmlubGluZVRlbXBsYXRlP251bGw6WHIoZSwhMCk7dD0iX2MoJyIrZS50YWcrIiciKyhuPyIsIituOiIiKSsocj8iLCIrcjoiIikrIikifWZvcih2YXIgaT0wO2k8ZnMubGVuZ3RoO2krKyl0PWZzW2ldKGUsdCk7cmV0dXJuIHR9cmV0dXJuIFhyKGUpfHwidm9pZCAwIn1mdW5jdGlvbiBWcihlKXtyZXR1cm4gZS5zdGF0aWNQcm9jZXNzZWQ9ITAsaHMucHVzaCgid2l0aCh0aGlzKXtyZXR1cm4gIitCcihlKSsifSIpLCJfbSgiKyhocy5sZW5ndGgtMSkrKGUuc3RhdGljSW5Gb3I/Iix0cnVlIjoiIikrIikifWZ1bmN0aW9uIHpyKGUpe2lmKGUub25jZVByb2Nlc3NlZD0hMCxlLmlmJiYhZS5pZlByb2Nlc3NlZClyZXR1cm4gSnIoZSk7aWYoZS5zdGF0aWNJbkZvcil7Zm9yKHZhciB0PSIiLG49ZS5wYXJlbnQ7bjspe2lmKG4uZm9yKXt0PW4ua2V5O2JyZWFrfW49bi5wYXJlbnR9cmV0dXJuIHQ/Il9vKCIrQnIoZSkrIiwiK21zKysrKHQ/IiwiK3Q6IiIpKyIpIjpCcihlKX1yZXR1cm4gVnIoZSl9ZnVuY3Rpb24gSnIoZSl7cmV0dXJuIGUuaWZQcm9jZXNzZWQ9ITAsS3IoZS5pZkNvbmRpdGlvbnMuc2xpY2UoKSl9ZnVuY3Rpb24gS3IoZSl7ZnVuY3Rpb24gdChlKXtyZXR1cm4gZS5vbmNlP3pyKGUpOkJyKGUpfWlmKCFlLmxlbmd0aClyZXR1cm4iX2UoKSI7dmFyIG49ZS5zaGlmdCgpO3JldHVybiBuLmV4cD8iKCIrbi5leHArIik/Iit0KG4uYmxvY2spKyI6IitLcihlKToiIit0KG4uYmxvY2spfWZ1bmN0aW9uIHFyKGUpe3ZhciB0PWUuZm9yLG49ZS5hbGlhcyxyPWUuaXRlcmF0b3IxPyIsIitlLml0ZXJhdG9yMToiIixpPWUuaXRlcmF0b3IyPyIsIitlLml0ZXJhdG9yMjoiIjtyZXR1cm4gZS5mb3JQcm9jZXNzZWQ9ITAsIl9sKCgiK3QrIiksZnVuY3Rpb24oIituK3IraSsiKXtyZXR1cm4gIitCcihlKSsifSkifWZ1bmN0aW9uIFdyKGUpe3ZhciB0PSJ7IixuPVpyKGUpO24mJih0Kz1uKyIsIiksZS5rZXkmJih0Kz0ia2V5OiIrZS5rZXkrIiwiKSxlLnJlZiYmKHQrPSJyZWY6IitlLnJlZisiLCIpLGUucmVmSW5Gb3ImJih0Kz0icmVmSW5Gb3I6dHJ1ZSwiKSxlLnByZSYmKHQrPSJwcmU6dHJ1ZSwiKSxlLmNvbXBvbmVudCYmKHQrPSd0YWc6IicrZS50YWcrJyIsJyk7Zm9yKHZhciByPTA7cjxwcy5sZW5ndGg7cisrKXQrPXBzW3JdKGUpO2lmKGUuYXR0cnMmJih0Kz0iYXR0cnM6eyIrc2koZS5hdHRycykrIn0sIiksZS5wcm9wcyYmKHQrPSJkb21Qcm9wczp7IitzaShlLnByb3BzKSsifSwiKSxlLmV2ZW50cyYmKHQrPU1yKGUuZXZlbnRzKSsiLCIpLGUubmF0aXZlRXZlbnRzJiYodCs9TXIoZS5uYXRpdmVFdmVudHMsITApKyIsIiksZS5zbG90VGFyZ2V0JiYodCs9InNsb3Q6IitlLnNsb3RUYXJnZXQrIiwiKSxlLnNjb3BlZFNsb3RzJiYodCs9WXIoZS5zY29wZWRTbG90cykrIiwiKSxlLm1vZGVsJiYodCs9Im1vZGVsOnt2YWx1ZToiK2UubW9kZWwudmFsdWUrIixjYWxsYmFjazoiK2UubW9kZWwuY2FsbGJhY2srIixleHByZXNzaW9uOiIrZS5tb2RlbC5leHByZXNzaW9uKyJ9LCIpLGUuaW5saW5lVGVtcGxhdGUpe3ZhciBpPUdyKGUpO2kmJih0Kz1pKyIsIil9cmV0dXJuIHQ9dC5yZXBsYWNlKC8sJC8sIiIpKyJ9IixlLndyYXBEYXRhJiYodD1lLndyYXBEYXRhKHQpKSx0fWZ1bmN0aW9uIFpyKGUpe3ZhciB0PWUuZGlyZWN0aXZlcztpZih0KXt2YXIgbixyLGksbyxhPSJkaXJlY3RpdmVzOlsiLHM9ITE7Zm9yKG49MCxyPXQubGVuZ3RoO248cjtuKyspe2k9dFtuXSxvPSEwO3ZhciBjPWRzW2kubmFtZV18fFVzW2kubmFtZV07YyYmKG89ISFjKGUsaSxscykpLG8mJihzPSEwLGErPSd7bmFtZToiJytpLm5hbWUrJyIscmF3TmFtZToiJytpLnJhd05hbWUrJyInKyhpLnZhbHVlPyIsdmFsdWU6KCIraS52YWx1ZSsiKSxleHByZXNzaW9uOiIrSlNPTi5zdHJpbmdpZnkoaS52YWx1ZSk6IiIpKyhpLmFyZz8nLGFyZzoiJytpLmFyZysnIic6IiIpKyhpLm1vZGlmaWVycz8iLG1vZGlmaWVyczoiK0pTT04uc3RyaW5naWZ5KGkubW9kaWZpZXJzKToiIikrIn0sIil9cmV0dXJuIHM/YS5zbGljZSgwLC0xKSsiXSI6dm9pZCAwfX1mdW5jdGlvbiBHcihlKXt2YXIgdD1lLmNoaWxkcmVuWzBdO2lmKDE9PT10LnR5cGUpe3ZhciBuPVVyKHQsZ3MpO3JldHVybiJpbmxpbmVUZW1wbGF0ZTp7cmVuZGVyOmZ1bmN0aW9uKCl7IituLnJlbmRlcisifSxzdGF0aWNSZW5kZXJGbnM6WyIrbi5zdGF0aWNSZW5kZXJGbnMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiJmdW5jdGlvbigpeyIrZSsifSJ9KS5qb2luKCIsIikrIl19In19ZnVuY3Rpb24gWXIoZSl7cmV0dXJuInNjb3BlZFNsb3RzOl91KFsiK09iamVjdC5rZXlzKGUpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gUXIodCxlW3RdKX0pLmpvaW4oIiwiKSsiXSkifWZ1bmN0aW9uIFFyKGUsdCl7cmV0dXJuIlsiK2UrIixmdW5jdGlvbigiK1N0cmluZyh0LmF0dHJzTWFwLnNjb3BlKSsiKXtyZXR1cm4gIisoInRlbXBsYXRlIj09PXQudGFnP1hyKHQpfHwidm9pZCAwIjpCcih0KSkrIn1dIn1mdW5jdGlvbiBYcihlLHQpe3ZhciBuPWUuY2hpbGRyZW47aWYobi5sZW5ndGgpe3ZhciByPW5bMF07aWYoMT09PW4ubGVuZ3RoJiZyLmZvciYmInRlbXBsYXRlIiE9PXIudGFnJiYic2xvdCIhPT1yLnRhZylyZXR1cm4gQnIocik7dmFyIGk9dD9laShuKTowO3JldHVybiJbIituLm1hcChyaSkuam9pbigiLCIpKyJdIisoaT8iLCIraToiIil9fWZ1bmN0aW9uIGVpKGUpe2Zvcih2YXIgdD0wLG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIHI9ZVtuXTtpZigxPT09ci50eXBlKXtpZih0aShyKXx8ci5pZkNvbmRpdGlvbnMmJnIuaWZDb25kaXRpb25zLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIHRpKGUuYmxvY2spfSkpe3Q9MjticmVha30obmkocil8fHIuaWZDb25kaXRpb25zJiZyLmlmQ29uZGl0aW9ucy5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiBuaShlLmJsb2NrKX0pKSYmKHQ9MSl9fXJldHVybiB0fWZ1bmN0aW9uIHRpKGUpe3JldHVybiB2b2lkIDAhPT1lLmZvcnx8InRlbXBsYXRlIj09PWUudGFnfHwic2xvdCI9PT1lLnRhZ31mdW5jdGlvbiBuaShlKXtyZXR1cm4hdnMoZS50YWcpfWZ1bmN0aW9uIHJpKGUpe3JldHVybiAxPT09ZS50eXBlP0JyKGUpOmlpKGUpfWZ1bmN0aW9uIGlpKGUpe3JldHVybiJfdigiKygyPT09ZS50eXBlP2UuZXhwcmVzc2lvbjpjaShKU09OLnN0cmluZ2lmeShlLnRleHQpKSkrIikifWZ1bmN0aW9uIG9pKGUpe3ZhciB0PWUuc2xvdE5hbWV8fCciZGVmYXVsdCInLG49WHIoZSkscj0iX3QoIit0KyhuPyIsIituOiIiKSxpPWUuYXR0cnMmJiJ7IitlLmF0dHJzLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gd2koZS5uYW1lKSsiOiIrZS52YWx1ZX0pLmpvaW4oIiwiKSsifSIsbz1lLmF0dHJzTWFwWyJ2LWJpbmQiXTtyZXR1cm4haSYmIW98fG58fChyKz0iLG51bGwiKSxpJiYocis9IiwiK2kpLG8mJihyKz0oaT8iIjoiLG51bGwiKSsiLCIrbykscisiKSJ9ZnVuY3Rpb24gYWkoZSx0KXt2YXIgbj10LmlubGluZVRlbXBsYXRlP251bGw6WHIodCwhMCk7cmV0dXJuIl9jKCIrZSsiLCIrV3IodCkrKG4/IiwiK246IiIpKyIpIn1mdW5jdGlvbiBzaShlKXtmb3IodmFyIHQ9IiIsbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lW25dO3QrPSciJytyLm5hbWUrJyI6JytjaShyLnZhbHVlKSsiLCJ9cmV0dXJuIHQuc2xpY2UoMCwtMSl9ZnVuY3Rpb24gY2koZSl7cmV0dXJuIGUucmVwbGFjZSgvXHUyMDI4L2csIlxcdTIwMjgiKS5yZXBsYWNlKC9cdTIwMjkvZywiXFx1MjAyOSIpfWZ1bmN0aW9uIHVpKGUsdCl7dmFyIG49bHIoZS50cmltKCksdCk7U3Iobix0KTt2YXIgcj1VcihuLHQpO3JldHVybnthc3Q6bixyZW5kZXI6ci5yZW5kZXIsc3RhdGljUmVuZGVyRm5zOnIuc3RhdGljUmVuZGVyRm5zfX1mdW5jdGlvbiBsaShlLHQpe3RyeXtyZXR1cm4gbmV3IEZ1bmN0aW9uKGUpfWNhdGNoKG4pe3JldHVybiB0LnB1c2goe2VycjpuLGNvZGU6ZX0pLGR9fWZ1bmN0aW9uIGZpKGUsdCl7dmFyIG49KHQud2FybixybihlLCJjbGFzcyIpKTtuJiYoZS5zdGF0aWNDbGFzcz1KU09OLnN0cmluZ2lmeShuKSk7dmFyIHI9bm4oZSwiY2xhc3MiLCExKTtyJiYoZS5jbGFzc0JpbmRpbmc9cil9ZnVuY3Rpb24gcGkoZSl7dmFyIHQ9IiI7cmV0dXJuIGUuc3RhdGljQ2xhc3MmJih0Kz0ic3RhdGljQ2xhc3M6IitlLnN0YXRpY0NsYXNzKyIsIiksZS5jbGFzc0JpbmRpbmcmJih0Kz0iY2xhc3M6IitlLmNsYXNzQmluZGluZysiLCIpLHR9ZnVuY3Rpb24gZGkoZSx0KXt2YXIgbj0odC53YXJuLHJuKGUsInN0eWxlIikpO24mJihlLnN0YXRpY1N0eWxlPUpTT04uc3RyaW5naWZ5KGxhKG4pKSk7dmFyIHI9bm4oZSwic3R5bGUiLCExKTtyJiYoZS5zdHlsZUJpbmRpbmc9cil9ZnVuY3Rpb24gdmkoZSl7dmFyIHQ9IiI7cmV0dXJuIGUuc3RhdGljU3R5bGUmJih0Kz0ic3RhdGljU3R5bGU6IitlLnN0YXRpY1N0eWxlKyIsIiksZS5zdHlsZUJpbmRpbmcmJih0Kz0ic3R5bGU6KCIrZS5zdHlsZUJpbmRpbmcrIiksIiksdH1mdW5jdGlvbiBoaShlLHQpe3QudmFsdWUmJlF0KGUsInRleHRDb250ZW50IiwiX3MoIit0LnZhbHVlKyIpIil9ZnVuY3Rpb24gbWkoZSx0KXt0LnZhbHVlJiZRdChlLCJpbm5lckhUTUwiLCJfcygiK3QudmFsdWUrIikiKX1mdW5jdGlvbiBnaShlKXtpZihlLm91dGVySFRNTClyZXR1cm4gZS5vdXRlckhUTUw7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIHQuYXBwZW5kQ2hpbGQoZS5jbG9uZU5vZGUoITApKSx0LmlubmVySFRNTH12YXIgeWksX2ksYmk9bigic2xvdCxjb21wb25lbnQiLCEwKSwkaT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LHdpPWEoZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvLShcdykvZyxmdW5jdGlvbihlLHQpe3JldHVybiB0P3QudG9VcHBlckNhc2UoKToiIn0pfSkseGk9YShmdW5jdGlvbihlKXtyZXR1cm4gZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStlLnNsaWNlKDEpfSksQ2k9YShmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC8oW14tXSkoW0EtWl0pL2csIiQxLSQyIikucmVwbGFjZSgvKFteLV0pKFtBLVpdKS9nLCIkMS0kMiIpLnRvTG93ZXJDYXNlKCl9KSxraT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLEFpPSJbb2JqZWN0IE9iamVjdF0iLE9pPWZ1bmN0aW9uKCl7cmV0dXJuITF9LFRpPWZ1bmN0aW9uKGUpe3JldHVybiBlfSxTaT17b3B0aW9uTWVyZ2VTdHJhdGVnaWVzOk9iamVjdC5jcmVhdGUobnVsbCksc2lsZW50OiExLHByb2R1Y3Rpb25UaXA6ITEsZGV2dG9vbHM6ITEscGVyZm9ybWFuY2U6ITEsZXJyb3JIYW5kbGVyOm51bGwsaWdub3JlZEVsZW1lbnRzOltdLGtleUNvZGVzOk9iamVjdC5jcmVhdGUobnVsbCksaXNSZXNlcnZlZFRhZzpPaSxpc1Vua25vd25FbGVtZW50Ok9pLGdldFRhZ05hbWVzcGFjZTpkLHBhcnNlUGxhdGZvcm1UYWdOYW1lOlRpLG11c3RVc2VQcm9wOk9pLF9hc3NldFR5cGVzOlsiY29tcG9uZW50IiwiZGlyZWN0aXZlIiwiZmlsdGVyIl0sX2xpZmVjeWNsZUhvb2tzOlsiYmVmb3JlQ3JlYXRlIiwiY3JlYXRlZCIsImJlZm9yZU1vdW50IiwibW91bnRlZCIsImJlZm9yZVVwZGF0ZSIsInVwZGF0ZWQiLCJiZWZvcmVEZXN0cm95IiwiZGVzdHJveWVkIiwiYWN0aXZhdGVkIiwiZGVhY3RpdmF0ZWQiXSxfbWF4VXBkYXRlQ291bnQ6MTAwfSxFaT1PYmplY3QuZnJlZXplKHt9KSxqaT0vW15cdy4kXS8sTmk9Il9fcHJvdG9fXyJpbnt9LElpPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93LExpPUlpJiZ3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLERpPUxpJiYvbXNpZXx0cmlkZW50Ly50ZXN0KExpKSxNaT1MaSYmTGkuaW5kZXhPZigibXNpZSA5LjAiKT4wLFBpPUxpJiZMaS5pbmRleE9mKCJlZGdlLyIpPjAsUmk9TGkmJkxpLmluZGV4T2YoImFuZHJvaWQiKT4wLEZpPUxpJiYvaXBob25lfGlwYWR8aXBvZHxpb3MvLnRlc3QoTGkpLEhpPUxpJiYvY2hyb21lXC9cZCsvLnRlc3QoTGkpJiYhUGksVWk9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09eWkmJih5aT0hSWkmJiJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsJiYic2VydmVyIj09PWdsb2JhbC5wcm9jZXNzLmVudi5WVUVfRU5WKSx5aX0sQmk9SWkmJndpbmRvdy5fX1ZVRV9ERVZUT09MU19HTE9CQUxfSE9PS19fLFZpPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZiKFN5bWJvbCkmJiJ1bmRlZmluZWQiIT10eXBlb2YgUmVmbGVjdCYmYihSZWZsZWN0Lm93bktleXMpLHppPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3I9ITE7dmFyIGU9bi5zbGljZSgwKTtuLmxlbmd0aD0wO2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKWVbdF0oKX12YXIgdCxuPVtdLHI9ITE7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBQcm9taXNlJiZiKFByb21pc2UpKXt2YXIgaT1Qcm9taXNlLnJlc29sdmUoKSxvPWZ1bmN0aW9uKGUpe2NvbnNvbGUuZXJyb3IoZSl9O3Q9ZnVuY3Rpb24oKXtpLnRoZW4oZSkuY2F0Y2gobyksRmkmJnNldFRpbWVvdXQoZCl9fWVsc2UgaWYoInVuZGVmaW5lZCI9PXR5cGVvZiBNdXRhdGlvbk9ic2VydmVyfHwhYihNdXRhdGlvbk9ic2VydmVyKSYmIltvYmplY3QgTXV0YXRpb25PYnNlcnZlckNvbnN0cnVjdG9yXSIhPT1NdXRhdGlvbk9ic2VydmVyLnRvU3RyaW5nKCkpdD1mdW5jdGlvbigpe3NldFRpbWVvdXQoZSwwKX07ZWxzZXt2YXIgYT0xLHM9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoZSksYz1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShTdHJpbmcoYSkpO3Mub2JzZXJ2ZShjLHtjaGFyYWN0ZXJEYXRhOiEwfSksdD1mdW5jdGlvbigpe2E9KGErMSklMixjLmRhdGE9U3RyaW5nKGEpfX1yZXR1cm4gZnVuY3Rpb24oZSxpKXt2YXIgbztpZihuLnB1c2goZnVuY3Rpb24oKXtlJiZlLmNhbGwoaSksbyYmbyhpKX0pLHJ8fChyPSEwLHQoKSksIWUmJiJ1bmRlZmluZWQiIT10eXBlb2YgUHJvbWlzZSlyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZSl7bz1lfSl9fSgpO19pPSJ1bmRlZmluZWQiIT10eXBlb2YgU2V0JiZiKFNldCk/U2V0OmZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuc2V0PU9iamVjdC5jcmVhdGUobnVsbCl9cmV0dXJuIGUucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zZXRbZV09PT0hMH0sZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpe3RoaXMuc2V0W2VdPSEwfSxlLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuc2V0PU9iamVjdC5jcmVhdGUobnVsbCl9LGV9KCk7dmFyIEppPWQsS2k9MCxxaT1mdW5jdGlvbigpe3RoaXMuaWQ9S2krKyx0aGlzLnN1YnM9W119O3FpLnByb3RvdHlwZS5hZGRTdWI9ZnVuY3Rpb24oZSl7dGhpcy5zdWJzLnB1c2goZSl9LHFpLnByb3RvdHlwZS5yZW1vdmVTdWI9ZnVuY3Rpb24oZSl7cih0aGlzLnN1YnMsZSl9LHFpLnByb3RvdHlwZS5kZXBlbmQ9ZnVuY3Rpb24oKXtxaS50YXJnZXQmJnFpLnRhcmdldC5hZGREZXAodGhpcyl9LHFpLnByb3RvdHlwZS5ub3RpZnk9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5zdWJzLnNsaWNlKCksdD0wLG49ZS5sZW5ndGg7dDxuO3QrKyllW3RdLnVwZGF0ZSgpfSxxaS50YXJnZXQ9bnVsbDt2YXIgV2k9W10sWmk9QXJyYXkucHJvdG90eXBlLEdpPU9iamVjdC5jcmVhdGUoWmkpO1sicHVzaCIsInBvcCIsInNoaWZ0IiwidW5zaGlmdCIsInNwbGljZSIsInNvcnQiLCJyZXZlcnNlIl0uZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1aaVtlXTt5KEdpLGUsZnVuY3Rpb24oKXtmb3IodmFyIG49YXJndW1lbnRzLHI9YXJndW1lbnRzLmxlbmd0aCxpPW5ldyBBcnJheShyKTtyLS07KWlbcl09bltyXTt2YXIgbyxhPXQuYXBwbHkodGhpcyxpKSxzPXRoaXMuX19vYl9fO3N3aXRjaChlKXtjYXNlInB1c2giOm89aTticmVhaztjYXNlInVuc2hpZnQiOm89aTticmVhaztjYXNlInNwbGljZSI6bz1pLnNsaWNlKDIpfXJldHVybiBvJiZzLm9ic2VydmVBcnJheShvKSxzLmRlcC5ub3RpZnkoKSxhfSl9KTt2YXIgWWk9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoR2kpLFFpPXtzaG91bGRDb252ZXJ0OiEwLGlzU2V0dGluZ1Byb3BzOiExfSxYaT1mdW5jdGlvbihlKXtpZih0aGlzLnZhbHVlPWUsdGhpcy5kZXA9bmV3IHFpLHRoaXMudm1Db3VudD0wLHkoZSwiX19vYl9fIix0aGlzKSxBcnJheS5pc0FycmF5KGUpKXsoTmk/eDpDKShlLEdpLFlpKSx0aGlzLm9ic2VydmVBcnJheShlKX1lbHNlIHRoaXMud2FsayhlKX07WGkucHJvdG90eXBlLndhbGs9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PU9iamVjdC5rZXlzKGUpLG49MDtuPHQubGVuZ3RoO24rKylBKGUsdFtuXSxlW3Rbbl1dKX0sWGkucHJvdG90eXBlLm9ic2VydmVBcnJheT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MCxuPWUubGVuZ3RoO3Q8bjt0KyspayhlW3RdKX07dmFyIGVvPVNpLm9wdGlvbk1lcmdlU3RyYXRlZ2llcztlby5kYXRhPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj9lfHx0P2Z1bmN0aW9uKCl7dmFyIHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dC5jYWxsKG4pOnQsaT0iZnVuY3Rpb24iPT10eXBlb2YgZT9lLmNhbGwobik6dm9pZCAwO3JldHVybiByP0UocixpKTppfTp2b2lkIDA6dD8iZnVuY3Rpb24iIT10eXBlb2YgdD9lOmU/ZnVuY3Rpb24oKXtyZXR1cm4gRSh0LmNhbGwodGhpcyksZS5jYWxsKHRoaXMpKX06dDplfSxTaS5fbGlmZWN5Y2xlSG9va3MuZm9yRWFjaChmdW5jdGlvbihlKXtlb1tlXT1qfSksU2kuX2Fzc2V0VHlwZXMuZm9yRWFjaChmdW5jdGlvbihlKXtlb1tlKyJzIl09Tn0pLGVvLndhdGNoPWZ1bmN0aW9uKGUsdCl7aWYoIXQpcmV0dXJuIE9iamVjdC5jcmVhdGUoZXx8bnVsbCk7aWYoIWUpcmV0dXJuIHQ7dmFyIG49e307dShuLGUpO2Zvcih2YXIgciBpbiB0KXt2YXIgaT1uW3JdLG89dFtyXTtpJiYhQXJyYXkuaXNBcnJheShpKSYmKGk9W2ldKSxuW3JdPWk/aS5jb25jYXQobyk6W29dfXJldHVybiBufSxlby5wcm9wcz1lby5tZXRob2RzPWVvLmNvbXB1dGVkPWZ1bmN0aW9uKGUsdCl7aWYoIXQpcmV0dXJuIE9iamVjdC5jcmVhdGUoZXx8bnVsbCk7aWYoIWUpcmV0dXJuIHQ7dmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gdShuLGUpLHUobix0KSxufTt2YXIgdG89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dD9lOnR9LG5vPWZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEpe3RoaXMudGFnPWUsdGhpcy5kYXRhPXQsdGhpcy5jaGlsZHJlbj1uLHRoaXMudGV4dD1yLHRoaXMuZWxtPWksdGhpcy5ucz12b2lkIDAsdGhpcy5jb250ZXh0PW8sdGhpcy5mdW5jdGlvbmFsQ29udGV4dD12b2lkIDAsdGhpcy5rZXk9dCYmdC5rZXksdGhpcy5jb21wb25lbnRPcHRpb25zPWEsdGhpcy5jb21wb25lbnRJbnN0YW5jZT12b2lkIDAsdGhpcy5wYXJlbnQ9dm9pZCAwLHRoaXMucmF3PSExLHRoaXMuaXNTdGF0aWM9ITEsdGhpcy5pc1Jvb3RJbnNlcnQ9ITAsdGhpcy5pc0NvbW1lbnQ9ITEsdGhpcy5pc0Nsb25lZD0hMSx0aGlzLmlzT25jZT0hMX0scm89e2NoaWxkOnt9fTtyby5jaGlsZC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb21wb25lbnRJbnN0YW5jZX0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobm8ucHJvdG90eXBlLHJvKTt2YXIgaW8sb289ZnVuY3Rpb24oKXt2YXIgZT1uZXcgbm87cmV0dXJuIGUudGV4dD0iIixlLmlzQ29tbWVudD0hMCxlfSxhbz1hKGZ1bmN0aW9uKGUpe3ZhciB0PSJ+Ij09PWUuY2hhckF0KDApO2U9dD9lLnNsaWNlKDEpOmU7dmFyIG49IiEiPT09ZS5jaGFyQXQoMCk7cmV0dXJuIGU9bj9lLnNsaWNlKDEpOmUse25hbWU6ZSxvbmNlOnQsY2FwdHVyZTpufX0pLHNvPW51bGwsY289W10sdW89e30sbG89ITEsZm89ITEscG89MCx2bz0wLGhvPWZ1bmN0aW9uKGUsdCxuLHIpe3RoaXMudm09ZSxlLl93YXRjaGVycy5wdXNoKHRoaXMpLHI/KHRoaXMuZGVlcD0hIXIuZGVlcCx0aGlzLnVzZXI9ISFyLnVzZXIsdGhpcy5sYXp5PSEhci5sYXp5LHRoaXMuc3luYz0hIXIuc3luYyk6dGhpcy5kZWVwPXRoaXMudXNlcj10aGlzLmxhenk9dGhpcy5zeW5jPSExLHRoaXMuY2I9bix0aGlzLmlkPSsrdm8sdGhpcy5hY3RpdmU9ITAsdGhpcy5kaXJ0eT10aGlzLmxhenksdGhpcy5kZXBzPVtdLHRoaXMubmV3RGVwcz1bXSx0aGlzLmRlcElkcz1uZXcgX2ksdGhpcy5uZXdEZXBJZHM9bmV3IF9pLHRoaXMuZXhwcmVzc2lvbj0iIiwiZnVuY3Rpb24iPT10eXBlb2YgdD90aGlzLmdldHRlcj10Oih0aGlzLmdldHRlcj1fKHQpLHRoaXMuZ2V0dGVyfHwodGhpcy5nZXR0ZXI9ZnVuY3Rpb24oKXt9KSksdGhpcy52YWx1ZT10aGlzLmxhenk/dm9pZCAwOnRoaXMuZ2V0KCl9O2hvLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXskKHRoaXMpO3ZhciBlLHQ9dGhpcy52bTtpZih0aGlzLnVzZXIpdHJ5e2U9dGhpcy5nZXR0ZXIuY2FsbCh0LHQpfWNhdGNoKGUpe1UoZSx0LCdnZXR0ZXIgZm9yIHdhdGNoZXIgIicrdGhpcy5leHByZXNzaW9uKyciJyl9ZWxzZSBlPXRoaXMuZ2V0dGVyLmNhbGwodCx0KTtyZXR1cm4gdGhpcy5kZWVwJiZoZShlKSx3KCksdGhpcy5jbGVhbnVwRGVwcygpLGV9LGhvLnByb3RvdHlwZS5hZGREZXA9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pZDt0aGlzLm5ld0RlcElkcy5oYXModCl8fCh0aGlzLm5ld0RlcElkcy5hZGQodCksdGhpcy5uZXdEZXBzLnB1c2goZSksdGhpcy5kZXBJZHMuaGFzKHQpfHxlLmFkZFN1Yih0aGlzKSl9LGhvLnByb3RvdHlwZS5jbGVhbnVwRGVwcz1mdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLHQ9dGhpcy5kZXBzLmxlbmd0aDt0LS07KXt2YXIgbj1lLmRlcHNbdF07ZS5uZXdEZXBJZHMuaGFzKG4uaWQpfHxuLnJlbW92ZVN1YihlKX12YXIgcj10aGlzLmRlcElkczt0aGlzLmRlcElkcz10aGlzLm5ld0RlcElkcyx0aGlzLm5ld0RlcElkcz1yLHRoaXMubmV3RGVwSWRzLmNsZWFyKCkscj10aGlzLmRlcHMsdGhpcy5kZXBzPXRoaXMubmV3RGVwcyx0aGlzLm5ld0RlcHM9cix0aGlzLm5ld0RlcHMubGVuZ3RoPTB9LGhvLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXt0aGlzLmxhenk/dGhpcy5kaXJ0eT0hMDp0aGlzLnN5bmM/dGhpcy5ydW4oKTp2ZSh0aGlzKX0saG8ucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe2lmKHRoaXMuYWN0aXZlKXt2YXIgZT10aGlzLmdldCgpO2lmKGUhPT10aGlzLnZhbHVlfHxsKGUpfHx0aGlzLmRlZXApe3ZhciB0PXRoaXMudmFsdWU7aWYodGhpcy52YWx1ZT1lLHRoaXMudXNlcil0cnl7dGhpcy5jYi5jYWxsKHRoaXMudm0sZSx0KX1jYXRjaChlKXtVKGUsdGhpcy52bSwnY2FsbGJhY2sgZm9yIHdhdGNoZXIgIicrdGhpcy5leHByZXNzaW9uKyciJyl9ZWxzZSB0aGlzLmNiLmNhbGwodGhpcy52bSxlLHQpfX19LGhvLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbigpe3RoaXMudmFsdWU9dGhpcy5nZXQoKSx0aGlzLmRpcnR5PSExfSxoby5wcm90b3R5cGUuZGVwZW5kPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMsdD10aGlzLmRlcHMubGVuZ3RoO3QtLTspZS5kZXBzW3RdLmRlcGVuZCgpfSxoby5wcm90b3R5cGUudGVhcmRvd249ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKHRoaXMuYWN0aXZlKXt0aGlzLnZtLl9pc0JlaW5nRGVzdHJveWVkfHxyKHRoaXMudm0uX3dhdGNoZXJzLHRoaXMpO2Zvcih2YXIgdD10aGlzLmRlcHMubGVuZ3RoO3QtLTspZS5kZXBzW3RdLnJlbW92ZVN1YihlKTt0aGlzLmFjdGl2ZT0hMX19O3ZhciBtbz1uZXcgX2ksZ289e2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpkLHNldDpkfSx5bz17bGF6eTohMH0sX289e2luaXQ6ZnVuY3Rpb24oZSx0LG4scil7aWYoIWUuY29tcG9uZW50SW5zdGFuY2V8fGUuY29tcG9uZW50SW5zdGFuY2UuX2lzRGVzdHJveWVkKXsoZS5jb21wb25lbnRJbnN0YW5jZT1FZShlLHNvLG4scikpLiRtb3VudCh0P2UuZWxtOnZvaWQgMCx0KX1lbHNlIGlmKGUuZGF0YS5rZWVwQWxpdmUpe3ZhciBpPWU7X28ucHJlcGF0Y2goaSxpKX19LHByZXBhdGNoOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5jb21wb25lbnRPcHRpb25zO3NlKHQuY29tcG9uZW50SW5zdGFuY2U9ZS5jb21wb25lbnRJbnN0YW5jZSxuLnByb3BzRGF0YSxuLmxpc3RlbmVycyx0LG4uY2hpbGRyZW4pfSxpbnNlcnQ6ZnVuY3Rpb24oZSl7ZS5jb21wb25lbnRJbnN0YW5jZS5faXNNb3VudGVkfHwoZS5jb21wb25lbnRJbnN0YW5jZS5faXNNb3VudGVkPSEwLGZlKGUuY29tcG9uZW50SW5zdGFuY2UsIm1vdW50ZWQiKSksZS5kYXRhLmtlZXBBbGl2ZSYmdWUoZS5jb21wb25lbnRJbnN0YW5jZSwhMCl9LGRlc3Ryb3k6ZnVuY3Rpb24oZSl7ZS5jb21wb25lbnRJbnN0YW5jZS5faXNEZXN0cm95ZWR8fChlLmRhdGEua2VlcEFsaXZlP2xlKGUuY29tcG9uZW50SW5zdGFuY2UsITApOmUuY29tcG9uZW50SW5zdGFuY2UuJGRlc3Ryb3koKSl9fSxibz1PYmplY3Qua2V5cyhfbyksJG89MSx3bz0yLHhvPTA7IWZ1bmN0aW9uKGUpe2UucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dC5fdWlkPXhvKyssdC5faXNWdWU9ITAsZSYmZS5faXNDb21wb25lbnQ/UWUodCxlKTp0LiRvcHRpb25zPUQoWGUodC5jb25zdHJ1Y3RvciksZXx8e30sdCksdC5fcmVuZGVyUHJveHk9dCx0Ll9zZWxmPXQsb2UodCksUSh0KSxaZSh0KSxmZSh0LCJiZWZvcmVDcmVhdGUiKSxZZSh0KSx5ZSh0KSxHZSh0KSxmZSh0LCJjcmVhdGVkIiksdC4kb3B0aW9ucy5lbCYmdC4kbW91bnQodC4kb3B0aW9ucy5lbCl9fShudCksZnVuY3Rpb24oZSl7dmFyIHQ9e307dC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGF0YX07dmFyIG49e307bi5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJvcHN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiJGRhdGEiLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiJHByb3BzIixuKSxlLnByb3RvdHlwZS4kc2V0PU8sZS5wcm90b3R5cGUuJGRlbGV0ZT1ULGUucHJvdG90eXBlLiR3YXRjaD1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcztuPW58fHt9LG4udXNlcj0hMDt2YXIgaT1uZXcgaG8ocixlLHQsbik7cmV0dXJuIG4uaW1tZWRpYXRlJiZ0LmNhbGwocixpLnZhbHVlKSxmdW5jdGlvbigpe2kudGVhcmRvd24oKX19fShudCksZnVuY3Rpb24oZSl7dmFyIHQ9L15ob29rOi87ZS5wcm90b3R5cGUuJG9uPWZ1bmN0aW9uKGUsbil7dmFyIHI9dGhpcyxpPXRoaXM7aWYoQXJyYXkuaXNBcnJheShlKSlmb3IodmFyIG89MCxhPWUubGVuZ3RoO288YTtvKyspci4kb24oZVtvXSxuKTtlbHNlKGkuX2V2ZW50c1tlXXx8KGkuX2V2ZW50c1tlXT1bXSkpLnB1c2gobiksdC50ZXN0KGUpJiYoaS5faGFzSG9va0V2ZW50PSEwKTtyZXR1cm4gaX0sZS5wcm90b3R5cGUuJG9uY2U9ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKCl7ci4kb2ZmKGUsbiksdC5hcHBseShyLGFyZ3VtZW50cyl9dmFyIHI9dGhpcztyZXR1cm4gbi5mbj10LHIuJG9uKGUsbikscn0sZS5wcm90b3R5cGUuJG9mZj1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj10aGlzO2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiByLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSxyO2lmKEFycmF5LmlzQXJyYXkoZSkpe2Zvcih2YXIgaT0wLG89ZS5sZW5ndGg7aTxvO2krKyluLiRvZmYoZVtpXSx0KTtyZXR1cm4gcn12YXIgYT1yLl9ldmVudHNbZV07aWYoIWEpcmV0dXJuIHI7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHIuX2V2ZW50c1tlXT1udWxsLHI7Zm9yKHZhciBzLGM9YS5sZW5ndGg7Yy0tOylpZigocz1hW2NdKT09PXR8fHMuZm49PT10KXthLnNwbGljZShjLDEpO2JyZWFrfXJldHVybiByfSxlLnByb3RvdHlwZS4kZW1pdD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49dC5fZXZlbnRzW2VdO2lmKG4pe249bi5sZW5ndGg+MT9jKG4pOm47Zm9yKHZhciByPWMoYXJndW1lbnRzLDEpLGk9MCxvPW4ubGVuZ3RoO2k8bztpKyspbltpXS5hcHBseSh0LHIpfXJldHVybiB0fX0obnQpLGZ1bmN0aW9uKGUpe2UucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO24uX2lzTW91bnRlZCYmZmUobiwiYmVmb3JlVXBkYXRlIik7dmFyIHI9bi4kZWwsaT1uLl92bm9kZSxvPXNvO3NvPW4sbi5fdm5vZGU9ZSxuLiRlbD1pP24uX19wYXRjaF9fKGksZSk6bi5fX3BhdGNoX18obi4kZWwsZSx0LCExLG4uJG9wdGlvbnMuX3BhcmVudEVsbSxuLiRvcHRpb25zLl9yZWZFbG0pLHNvPW8sciYmKHIuX192dWVfXz1udWxsKSxuLiRlbCYmKG4uJGVsLl9fdnVlX189biksbi4kdm5vZGUmJm4uJHBhcmVudCYmbi4kdm5vZGU9PT1uLiRwYXJlbnQuX3Zub2RlJiYobi4kcGFyZW50LiRlbD1uLiRlbCl9LGUucHJvdG90eXBlLiRmb3JjZVVwZGF0ZT1mdW5jdGlvbigpe3ZhciBlPXRoaXM7ZS5fd2F0Y2hlciYmZS5fd2F0Y2hlci51cGRhdGUoKX0sZS5wcm90b3R5cGUuJGRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKCFlLl9pc0JlaW5nRGVzdHJveWVkKXtmZShlLCJiZWZvcmVEZXN0cm95IiksZS5faXNCZWluZ0Rlc3Ryb3llZD0hMDt2YXIgdD1lLiRwYXJlbnQ7IXR8fHQuX2lzQmVpbmdEZXN0cm95ZWR8fGUuJG9wdGlvbnMuYWJzdHJhY3R8fHIodC4kY2hpbGRyZW4sZSksZS5fd2F0Y2hlciYmZS5fd2F0Y2hlci50ZWFyZG93bigpO2Zvcih2YXIgbj1lLl93YXRjaGVycy5sZW5ndGg7bi0tOyllLl93YXRjaGVyc1tuXS50ZWFyZG93bigpO2UuX2RhdGEuX19vYl9fJiZlLl9kYXRhLl9fb2JfXy52bUNvdW50LS0sZS5faXNEZXN0cm95ZWQ9ITAsZS5fX3BhdGNoX18oZS5fdm5vZGUsbnVsbCksZmUoZSwiZGVzdHJveWVkIiksZS4kb2ZmKCksZS4kZWwmJihlLiRlbC5fX3Z1ZV9fPW51bGwpLGUuJG9wdGlvbnMuX3BhcmVudEVsbT1lLiRvcHRpb25zLl9yZWZFbG09bnVsbH19fShudCksZnVuY3Rpb24obil7bi5wcm90b3R5cGUuJG5leHRUaWNrPWZ1bmN0aW9uKGUpe3JldHVybiB6aShlLHRoaXMpfSxuLnByb3RvdHlwZS5fcmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuJG9wdGlvbnMsbj10LnJlbmRlcixyPXQuc3RhdGljUmVuZGVyRm5zLGk9dC5fcGFyZW50Vm5vZGU7aWYoZS5faXNNb3VudGVkKWZvcih2YXIgbyBpbiBlLiRzbG90cyllLiRzbG90c1tvXT16KGUuJHNsb3RzW29dKTtlLiRzY29wZWRTbG90cz1pJiZpLmRhdGEuc2NvcGVkU2xvdHN8fEVpLHImJiFlLl9zdGF0aWNUcmVlcyYmKGUuX3N0YXRpY1RyZWVzPVtdKSxlLiR2bm9kZT1pO3ZhciBhO3RyeXthPW4uY2FsbChlLl9yZW5kZXJQcm94eSxlLiRjcmVhdGVFbGVtZW50KX1jYXRjaCh0KXtVKHQsZSwicmVuZGVyIGZ1bmN0aW9uIiksYT1lLl92bm9kZX1yZXR1cm4gYSBpbnN0YW5jZW9mIG5vfHwoYT1vbygpKSxhLnBhcmVudD1pLGF9LG4ucHJvdG90eXBlLl9vPUtlLG4ucHJvdG90eXBlLl9uPXQsbi5wcm90b3R5cGUuX3M9ZSxuLnByb3RvdHlwZS5fbD1IZSxuLnByb3RvdHlwZS5fdD1VZSxuLnByb3RvdHlwZS5fcT12LG4ucHJvdG90eXBlLl9pPWgsbi5wcm90b3R5cGUuX209SmUsbi5wcm90b3R5cGUuX2Y9QmUsbi5wcm90b3R5cGUuX2s9VmUsbi5wcm90b3R5cGUuX2I9emUsbi5wcm90b3R5cGUuX3Y9QixuLnByb3RvdHlwZS5fZT1vbyxuLnByb3RvdHlwZS5fdT1pZX0obnQpO3ZhciBDbz1bU3RyaW5nLFJlZ0V4cF0sa289e25hbWU6ImtlZXAtYWxpdmUiLGFic3RyYWN0OiEwLHByb3BzOntpbmNsdWRlOkNvLGV4Y2x1ZGU6Q299LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLmNhY2hlPU9iamVjdC5jcmVhdGUobnVsbCl9LGRlc3Ryb3llZDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7Zm9yKHZhciB0IGluIGUuY2FjaGUpcHQoZS5jYWNoZVt0XSl9LHdhdGNoOntpbmNsdWRlOmZ1bmN0aW9uKGUpe2Z0KHRoaXMuY2FjaGUsZnVuY3Rpb24odCl7cmV0dXJuIGx0KGUsdCl9KX0sZXhjbHVkZTpmdW5jdGlvbihlKXtmdCh0aGlzLmNhY2hlLGZ1bmN0aW9uKHQpe3JldHVybiFsdChlLHQpfSl9fSxyZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZT1ZKHRoaXMuJHNsb3RzLmRlZmF1bHQpLHQ9ZSYmZS5jb21wb25lbnRPcHRpb25zO2lmKHQpe3ZhciBuPXV0KHQpO2lmKG4mJih0aGlzLmluY2x1ZGUmJiFsdCh0aGlzLmluY2x1ZGUsbil8fHRoaXMuZXhjbHVkZSYmbHQodGhpcy5leGNsdWRlLG4pKSlyZXR1cm4gZTt2YXIgcj1udWxsPT1lLmtleT90LkN0b3IuY2lkKyh0LnRhZz8iOjoiK3QudGFnOiIiKTplLmtleTt0aGlzLmNhY2hlW3JdP2UuY29tcG9uZW50SW5zdGFuY2U9dGhpcy5jYWNoZVtyXS5jb21wb25lbnRJbnN0YW5jZTp0aGlzLmNhY2hlW3JdPWUsZS5kYXRhLmtlZXBBbGl2ZT0hMH1yZXR1cm4gZX19LEFvPXtLZWVwQWxpdmU6a299OyFmdW5jdGlvbihlKXt2YXIgdD17fTt0LmdldD1mdW5jdGlvbigpe3JldHVybiBTaX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImNvbmZpZyIsdCksZS51dGlsPXt3YXJuOkppLGV4dGVuZDp1LG1lcmdlT3B0aW9uczpELGRlZmluZVJlYWN0aXZlOkF9LGUuc2V0PU8sZS5kZWxldGU9VCxlLm5leHRUaWNrPXppLGUub3B0aW9ucz1PYmplY3QuY3JlYXRlKG51bGwpLFNpLl9hc3NldFR5cGVzLmZvckVhY2goZnVuY3Rpb24odCl7ZS5vcHRpb25zW3QrInMiXT1PYmplY3QuY3JlYXRlKG51bGwpfSksZS5vcHRpb25zLl9iYXNlPWUsdShlLm9wdGlvbnMuY29tcG9uZW50cyxBbykscnQoZSksaXQoZSksb3QoZSksY3QoZSl9KG50KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobnQucHJvdG90eXBlLCIkaXNTZXJ2ZXIiLHtnZXQ6VWl9KSxudC52ZXJzaW9uPSIyLjIuNiI7dmFyIE9vLFRvLFNvLEVvLGpvLE5vLElvLExvLERvLE1vPW4oImlucHV0LHRleHRhcmVhLG9wdGlvbixzZWxlY3QiKSxQbz1mdW5jdGlvbihlLHQsbil7cmV0dXJuInZhbHVlIj09PW4mJk1vKGUpJiYiYnV0dG9uIiE9PXR8fCJzZWxlY3RlZCI9PT1uJiYib3B0aW9uIj09PWV8fCJjaGVja2VkIj09PW4mJiJpbnB1dCI9PT1lfHwibXV0ZWQiPT09biYmInZpZGVvIj09PWV9LFJvPW4oImNvbnRlbnRlZGl0YWJsZSxkcmFnZ2FibGUsc3BlbGxjaGVjayIpLEZvPW4oImFsbG93ZnVsbHNjcmVlbixhc3luYyxhdXRvZm9jdXMsYXV0b3BsYXksY2hlY2tlZCxjb21wYWN0LGNvbnRyb2xzLGRlY2xhcmUsZGVmYXVsdCxkZWZhdWx0Y2hlY2tlZCxkZWZhdWx0bXV0ZWQsZGVmYXVsdHNlbGVjdGVkLGRlZmVyLGRpc2FibGVkLGVuYWJsZWQsZm9ybW5vdmFsaWRhdGUsaGlkZGVuLGluZGV0ZXJtaW5hdGUsaW5lcnQsaXNtYXAsaXRlbXNjb3BlLGxvb3AsbXVsdGlwbGUsbXV0ZWQsbm9ocmVmLG5vcmVzaXplLG5vc2hhZGUsbm92YWxpZGF0ZSxub3dyYXAsb3BlbixwYXVzZW9uZXhpdCxyZWFkb25seSxyZXF1aXJlZCxyZXZlcnNlZCxzY29wZWQsc2VhbWxlc3Msc2VsZWN0ZWQsc29ydGFibGUsdHJhbnNsYXRlLHRydWVzcGVlZCx0eXBlbXVzdG1hdGNoLHZpc2libGUiKSxIbz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsVW89ZnVuY3Rpb24oZSl7cmV0dXJuIjoiPT09ZS5jaGFyQXQoNSkmJiJ4bGluayI9PT1lLnNsaWNlKDAsNSl9LEJvPWZ1bmN0aW9uKGUpe3JldHVybiBVbyhlKT9lLnNsaWNlKDYsZS5sZW5ndGgpOiIifSxWbz1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZXx8ZT09PSExfSx6bz17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsbWF0aDoiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCJ9LEpvPW4oImh0bWwsYm9keSxiYXNlLGhlYWQsbGluayxtZXRhLHN0eWxlLHRpdGxlLGFkZHJlc3MsYXJ0aWNsZSxhc2lkZSxmb290ZXIsaGVhZGVyLGgxLGgyLGgzLGg0LGg1LGg2LGhncm91cCxuYXYsc2VjdGlvbixkaXYsZGQsZGwsZHQsZmlnY2FwdGlvbixmaWd1cmUsaHIsaW1nLGxpLG1haW4sb2wscCxwcmUsdWwsYSxiLGFiYnIsYmRpLGJkbyxicixjaXRlLGNvZGUsZGF0YSxkZm4sZW0saSxrYmQsbWFyayxxLHJwLHJ0LHJ0YyxydWJ5LHMsc2FtcCxzbWFsbCxzcGFuLHN0cm9uZyxzdWIsc3VwLHRpbWUsdSx2YXIsd2JyLGFyZWEsYXVkaW8sbWFwLHRyYWNrLHZpZGVvLGVtYmVkLG9iamVjdCxwYXJhbSxzb3VyY2UsY2FudmFzLHNjcmlwdCxub3NjcmlwdCxkZWwsaW5zLGNhcHRpb24sY29sLGNvbGdyb3VwLHRhYmxlLHRoZWFkLHRib2R5LHRkLHRoLHRyLGJ1dHRvbixkYXRhbGlzdCxmaWVsZHNldCxmb3JtLGlucHV0LGxhYmVsLGxlZ2VuZCxtZXRlcixvcHRncm91cCxvcHRpb24sb3V0cHV0LHByb2dyZXNzLHNlbGVjdCx0ZXh0YXJlYSxkZXRhaWxzLGRpYWxvZyxtZW51LG1lbnVpdGVtLHN1bW1hcnksY29udGVudCxlbGVtZW50LHNoYWRvdyx0ZW1wbGF0ZSIpLEtvPW4oInN2ZyxhbmltYXRlLGNpcmNsZSxjbGlwcGF0aCxjdXJzb3IsZGVmcyxkZXNjLGVsbGlwc2UsZmlsdGVyLGZvbnQtZmFjZSxmb3JlaWduT2JqZWN0LGcsZ2x5cGgsaW1hZ2UsbGluZSxtYXJrZXIsbWFzayxtaXNzaW5nLWdseXBoLHBhdGgscGF0dGVybixwb2x5Z29uLHBvbHlsaW5lLHJlY3Qsc3dpdGNoLHN5bWJvbCx0ZXh0LHRleHRwYXRoLHRzcGFuLHVzZSx2aWV3IiwhMCkscW89ZnVuY3Rpb24oZSl7cmV0dXJuInByZSI9PT1lfSxXbz1mdW5jdGlvbihlKXtyZXR1cm4gSm8oZSl8fEtvKGUpfSxabz1PYmplY3QuY3JlYXRlKG51bGwpLEdvPU9iamVjdC5mcmVlemUoe2NyZWF0ZUVsZW1lbnQ6JHQsY3JlYXRlRWxlbWVudE5TOnd0LGNyZWF0ZVRleHROb2RlOnh0LGNyZWF0ZUNvbW1lbnQ6Q3QsaW5zZXJ0QmVmb3JlOmt0LHJlbW92ZUNoaWxkOkF0LGFwcGVuZENoaWxkOk90LHBhcmVudE5vZGU6VHQsbmV4dFNpYmxpbmc6U3QsdGFnTmFtZTpFdCxzZXRUZXh0Q29udGVudDpqdCxzZXRBdHRyaWJ1dGU6TnR9KSxZbz17Y3JlYXRlOmZ1bmN0aW9uKGUsdCl7SXQodCl9LHVwZGF0ZTpmdW5jdGlvbihlLHQpe2UuZGF0YS5yZWYhPT10LmRhdGEucmVmJiYoSXQoZSwhMCksSXQodCkpfSxkZXN0cm95OmZ1bmN0aW9uKGUpe0l0KGUsITApfX0sUW89bmV3IG5vKCIiLHt9LFtdKSxYbz1bImNyZWF0ZSIsImFjdGl2YXRlIiwidXBkYXRlIiwicmVtb3ZlIiwiZGVzdHJveSJdLGVhPXtjcmVhdGU6SHQsdXBkYXRlOkh0LGRlc3Ryb3k6ZnVuY3Rpb24oZSl7SHQoZSxRbyl9fSx0YT1PYmplY3QuY3JlYXRlKG51bGwpLG5hPVtZbyxlYV0scmE9e2NyZWF0ZTpKdCx1cGRhdGU6SnR9LGlhPXtjcmVhdGU6cXQsdXBkYXRlOnF0fSxvYT0vW1x3KS4rXC1fJFxdXS8sYWE9Il9fciIsc2E9Il9fYyIsY2E9e2NyZWF0ZTokbix1cGRhdGU6JG59LHVhPXtjcmVhdGU6d24sdXBkYXRlOndufSxsYT1hKGZ1bmN0aW9uKGUpe3ZhciB0PXt9O3JldHVybiBlLnNwbGl0KC87KD8hW14oXSpcKSkvZykuZm9yRWFjaChmdW5jdGlvbihlKXtpZihlKXt2YXIgbj1lLnNwbGl0KC86KC4rKS8pO24ubGVuZ3RoPjEmJih0W25bMF0udHJpbSgpXT1uWzFdLnRyaW0oKSl9fSksdH0pLGZhPS9eLS0vLHBhPS9ccyohaW1wb3J0YW50JC8sZGE9ZnVuY3Rpb24oZSx0LG4pe2ZhLnRlc3QodCk/ZS5zdHlsZS5zZXRQcm9wZXJ0eSh0LG4pOnBhLnRlc3Qobik/ZS5zdHlsZS5zZXRQcm9wZXJ0eSh0LG4ucmVwbGFjZShwYSwiIiksImltcG9ydGFudCIpOmUuc3R5bGVbaGEodCldPW59LHZhPVsiV2Via2l0IiwiTW96IiwibXMiXSxoYT1hKGZ1bmN0aW9uKGUpe2lmKERvPURvfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSwiZmlsdGVyIiE9PShlPXdpKGUpKSYmZSBpbiBEby5zdHlsZSlyZXR1cm4gZTtmb3IodmFyIHQ9ZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStlLnNsaWNlKDEpLG49MDtuPHZhLmxlbmd0aDtuKyspe3ZhciByPXZhW25dK3Q7aWYociBpbiBEby5zdHlsZSlyZXR1cm4gcn19KSxtYT17Y3JlYXRlOlNuLHVwZGF0ZTpTbn0sZ2E9YShmdW5jdGlvbihlKXtyZXR1cm57ZW50ZXJDbGFzczplKyItZW50ZXIiLGVudGVyVG9DbGFzczplKyItZW50ZXItdG8iLGVudGVyQWN0aXZlQ2xhc3M6ZSsiLWVudGVyLWFjdGl2ZSIsbGVhdmVDbGFzczplKyItbGVhdmUiLGxlYXZlVG9DbGFzczplKyItbGVhdmUtdG8iLGxlYXZlQWN0aXZlQ2xhc3M6ZSsiLWxlYXZlLWFjdGl2ZSJ9fSkseWE9SWkmJiFNaSxfYT0idHJhbnNpdGlvbiIsYmE9ImFuaW1hdGlvbiIsJGE9InRyYW5zaXRpb24iLHdhPSJ0cmFuc2l0aW9uZW5kIix4YT0iYW5pbWF0aW9uIixDYT0iYW5pbWF0aW9uZW5kIjt5YSYmKHZvaWQgMD09PXdpbmRvdy5vbnRyYW5zaXRpb25lbmQmJnZvaWQgMCE9PXdpbmRvdy5vbndlYmtpdHRyYW5zaXRpb25lbmQmJigkYT0iV2Via2l0VHJhbnNpdGlvbiIsd2E9IndlYmtpdFRyYW5zaXRpb25FbmQiKSx2b2lkIDA9PT13aW5kb3cub25hbmltYXRpb25lbmQmJnZvaWQgMCE9PXdpbmRvdy5vbndlYmtpdGFuaW1hdGlvbmVuZCYmKHhhPSJXZWJraXRBbmltYXRpb24iLENhPSJ3ZWJraXRBbmltYXRpb25FbmQiKSk7dmFyIGthPUlpJiZ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpOnNldFRpbWVvdXQsQWE9L1xiKHRyYW5zZm9ybXxhbGwpKCx8JCkvLE9hPUlpP3tjcmVhdGU6em4sYWN0aXZhdGU6em4scmVtb3ZlOmZ1bmN0aW9uKGUsdCl7ZS5kYXRhLnNob3c/dCgpOlVuKGUsdCl9fTp7fSxUYT1bcmEsaWEsY2EsdWEsbWEsT2FdLFNhPVRhLmNvbmNhdChuYSksRWE9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3IG5vKE8udGFnTmFtZShlKS50b0xvd2VyQ2FzZSgpLHt9LFtdLHZvaWQgMCxlKX1mdW5jdGlvbiByKGUsdCl7ZnVuY3Rpb24gbigpezA9PS0tbi5saXN0ZW5lcnMmJmkoZSl9cmV0dXJuIG4ubGlzdGVuZXJzPXQsbn1mdW5jdGlvbiBpKGUpe3ZhciB0PU8ucGFyZW50Tm9kZShlKTtEdCh0KSYmTy5yZW1vdmVDaGlsZCh0LGUpfWZ1bmN0aW9uIGEoZSx0LG4scixpKXtpZihlLmlzUm9vdEluc2VydD0haSwhcyhlLHQsbixyKSl7dmFyIG89ZS5kYXRhLGE9ZS5jaGlsZHJlbixjPWUudGFnO0R0KGMpPyhlLmVsbT1lLm5zP08uY3JlYXRlRWxlbWVudE5TKGUubnMsYyk6Ty5jcmVhdGVFbGVtZW50KGMsZSksdihlKSxmKGUsYSx0KSxEdChvKSYmZChlLHQpLGwobixlLmVsbSxyKSk6TXQoZS5pc0NvbW1lbnQpPyhlLmVsbT1PLmNyZWF0ZUNvbW1lbnQoZS50ZXh0KSwNCmwobixlLmVsbSxyKSk6KGUuZWxtPU8uY3JlYXRlVGV4dE5vZGUoZS50ZXh0KSxsKG4sZS5lbG0scikpfX1mdW5jdGlvbiBzKGUsdCxuLHIpe3ZhciBpPWUuZGF0YTtpZihEdChpKSl7dmFyIG89RHQoZS5jb21wb25lbnRJbnN0YW5jZSkmJmkua2VlcEFsaXZlO2lmKER0KGk9aS5ob29rKSYmRHQoaT1pLmluaXQpJiZpKGUsITEsbixyKSxEdChlLmNvbXBvbmVudEluc3RhbmNlKSlyZXR1cm4gYyhlLHQpLE10KG8pJiZ1KGUsdCxuLHIpLCEwfX1mdW5jdGlvbiBjKGUsdCl7RHQoZS5kYXRhLnBlbmRpbmdJbnNlcnQpJiZ0LnB1c2guYXBwbHkodCxlLmRhdGEucGVuZGluZ0luc2VydCksZS5lbG09ZS5jb21wb25lbnRJbnN0YW5jZS4kZWwscChlKT8oZChlLHQpLHYoZSkpOihJdChlKSx0LnB1c2goZSkpfWZ1bmN0aW9uIHUoZSx0LG4scil7Zm9yKHZhciBpLG89ZTtvLmNvbXBvbmVudEluc3RhbmNlOylpZihvPW8uY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlLER0KGk9by5kYXRhKSYmRHQoaT1pLnRyYW5zaXRpb24pKXtmb3IoaT0wO2k8ay5hY3RpdmF0ZS5sZW5ndGg7KytpKWsuYWN0aXZhdGVbaV0oUW8sbyk7dC5wdXNoKG8pO2JyZWFrfWwobixlLmVsbSxyKX1mdW5jdGlvbiBsKGUsdCxuKXtEdChlKSYmKER0KG4pP08uaW5zZXJ0QmVmb3JlKGUsdCxuKTpPLmFwcGVuZENoaWxkKGUsdCkpfWZ1bmN0aW9uIGYoZSx0LG4pe2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3IpYSh0W3JdLG4sZS5lbG0sbnVsbCwhMCk7ZWxzZSBvKGUudGV4dCkmJk8uYXBwZW5kQ2hpbGQoZS5lbG0sTy5jcmVhdGVUZXh0Tm9kZShlLnRleHQpKX1mdW5jdGlvbiBwKGUpe2Zvcig7ZS5jb21wb25lbnRJbnN0YW5jZTspZT1lLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZTtyZXR1cm4gRHQoZS50YWcpfWZ1bmN0aW9uIGQoZSx0KXtmb3IodmFyIG49MDtuPGsuY3JlYXRlLmxlbmd0aDsrK24pay5jcmVhdGVbbl0oUW8sZSk7eD1lLmRhdGEuaG9vayxEdCh4KSYmKER0KHguY3JlYXRlKSYmeC5jcmVhdGUoUW8sZSksRHQoeC5pbnNlcnQpJiZ0LnB1c2goZSkpfWZ1bmN0aW9uIHYoZSl7Zm9yKHZhciB0LG49ZTtuOylEdCh0PW4uY29udGV4dCkmJkR0KHQ9dC4kb3B0aW9ucy5fc2NvcGVJZCkmJk8uc2V0QXR0cmlidXRlKGUuZWxtLHQsIiIpLG49bi5wYXJlbnQ7RHQodD1zbykmJnQhPT1lLmNvbnRleHQmJkR0KHQ9dC4kb3B0aW9ucy5fc2NvcGVJZCkmJk8uc2V0QXR0cmlidXRlKGUuZWxtLHQsIiIpfWZ1bmN0aW9uIGgoZSx0LG4scixpLG8pe2Zvcig7cjw9aTsrK3IpYShuW3JdLG8sZSx0KX1mdW5jdGlvbiBtKGUpe3ZhciB0LG4scj1lLmRhdGE7aWYoRHQocikpZm9yKER0KHQ9ci5ob29rKSYmRHQodD10LmRlc3Ryb3kpJiZ0KGUpLHQ9MDt0PGsuZGVzdHJveS5sZW5ndGg7Kyt0KWsuZGVzdHJveVt0XShlKTtpZihEdCh0PWUuY2hpbGRyZW4pKWZvcihuPTA7bjxlLmNoaWxkcmVuLmxlbmd0aDsrK24pbShlLmNoaWxkcmVuW25dKX1mdW5jdGlvbiBnKGUsdCxuLHIpe2Zvcig7bjw9cjsrK24pe3ZhciBvPXRbbl07RHQobykmJihEdChvLnRhZyk/KHkobyksbShvKSk6aShvLmVsbSkpfX1mdW5jdGlvbiB5KGUsdCl7aWYoRHQodCl8fER0KGUuZGF0YSkpe3ZhciBuPWsucmVtb3ZlLmxlbmd0aCsxO2ZvcihEdCh0KT90Lmxpc3RlbmVycys9bjp0PXIoZS5lbG0sbiksRHQoeD1lLmNvbXBvbmVudEluc3RhbmNlKSYmRHQoeD14Ll92bm9kZSkmJkR0KHguZGF0YSkmJnkoeCx0KSx4PTA7eDxrLnJlbW92ZS5sZW5ndGg7Kyt4KWsucmVtb3ZlW3hdKGUsdCk7RHQoeD1lLmRhdGEuaG9vaykmJkR0KHg9eC5yZW1vdmUpP3goZSx0KTp0KCl9ZWxzZSBpKGUuZWxtKX1mdW5jdGlvbiBfKGUsdCxuLHIsaSl7Zm9yKHZhciBvLHMsYyx1LGw9MCxmPTAscD10Lmxlbmd0aC0xLGQ9dFswXSx2PXRbcF0sbT1uLmxlbmd0aC0xLHk9blswXSxfPW5bbV0sJD0haTtsPD1wJiZmPD1tOylMdChkKT9kPXRbKytsXTpMdCh2KT92PXRbLS1wXTpQdChkLHkpPyhiKGQseSxyKSxkPXRbKytsXSx5PW5bKytmXSk6UHQodixfKT8oYih2LF8sciksdj10Wy0tcF0sXz1uWy0tbV0pOlB0KGQsXyk/KGIoZCxfLHIpLCQmJk8uaW5zZXJ0QmVmb3JlKGUsZC5lbG0sTy5uZXh0U2libGluZyh2LmVsbSkpLGQ9dFsrK2xdLF89blstLW1dKTpQdCh2LHkpPyhiKHYseSxyKSwkJiZPLmluc2VydEJlZm9yZShlLHYuZWxtLGQuZWxtKSx2PXRbLS1wXSx5PW5bKytmXSk6KEx0KG8pJiYobz1GdCh0LGwscCkpLHM9RHQoeS5rZXkpP29beS5rZXldOm51bGwsTHQocyk/KGEoeSxyLGUsZC5lbG0pLHk9blsrK2ZdKTooYz10W3NdLFB0KGMseSk/KGIoYyx5LHIpLHRbc109dm9pZCAwLCQmJk8uaW5zZXJ0QmVmb3JlKGUseS5lbG0sZC5lbG0pLHk9blsrK2ZdKTooYSh5LHIsZSxkLmVsbSkseT1uWysrZl0pKSk7bD5wPyh1PUx0KG5bbSsxXSk/bnVsbDpuW20rMV0uZWxtLGgoZSx1LG4sZixtLHIpKTpmPm0mJmcoZSx0LGwscCl9ZnVuY3Rpb24gYihlLHQsbixyKXtpZihlIT09dCl7aWYoTXQodC5pc1N0YXRpYykmJk10KGUuaXNTdGF0aWMpJiZ0LmtleT09PWUua2V5JiYoTXQodC5pc0Nsb25lZCl8fE10KHQuaXNPbmNlKSkpcmV0dXJuIHQuZWxtPWUuZWxtLHZvaWQodC5jb21wb25lbnRJbnN0YW5jZT1lLmNvbXBvbmVudEluc3RhbmNlKTt2YXIgaSxvPXQuZGF0YTtEdChvKSYmRHQoaT1vLmhvb2spJiZEdChpPWkucHJlcGF0Y2gpJiZpKGUsdCk7dmFyIGE9dC5lbG09ZS5lbG0scz1lLmNoaWxkcmVuLGM9dC5jaGlsZHJlbjtpZihEdChvKSYmcCh0KSl7Zm9yKGk9MDtpPGsudXBkYXRlLmxlbmd0aDsrK2kpay51cGRhdGVbaV0oZSx0KTtEdChpPW8uaG9vaykmJkR0KGk9aS51cGRhdGUpJiZpKGUsdCl9THQodC50ZXh0KT9EdChzKSYmRHQoYyk/cyE9PWMmJl8oYSxzLGMsbixyKTpEdChjKT8oRHQoZS50ZXh0KSYmTy5zZXRUZXh0Q29udGVudChhLCIiKSxoKGEsbnVsbCxjLDAsYy5sZW5ndGgtMSxuKSk6RHQocyk/ZyhhLHMsMCxzLmxlbmd0aC0xKTpEdChlLnRleHQpJiZPLnNldFRleHRDb250ZW50KGEsIiIpOmUudGV4dCE9PXQudGV4dCYmTy5zZXRUZXh0Q29udGVudChhLHQudGV4dCksRHQobykmJkR0KGk9by5ob29rKSYmRHQoaT1pLnBvc3RwYXRjaCkmJmkoZSx0KX19ZnVuY3Rpb24gJChlLHQsbil7aWYoTXQobikmJkR0KGUucGFyZW50KSllLnBhcmVudC5kYXRhLnBlbmRpbmdJbnNlcnQ9dDtlbHNlIGZvcih2YXIgcj0wO3I8dC5sZW5ndGg7KytyKXRbcl0uZGF0YS5ob29rLmluc2VydCh0W3JdKX1mdW5jdGlvbiB3KGUsdCxuKXt0LmVsbT1lO3ZhciByPXQudGFnLGk9dC5kYXRhLG89dC5jaGlsZHJlbjtpZihEdChpKSYmKER0KHg9aS5ob29rKSYmRHQoeD14LmluaXQpJiZ4KHQsITApLER0KHg9dC5jb21wb25lbnRJbnN0YW5jZSkpKXJldHVybiBjKHQsbiksITA7aWYoRHQocikpe2lmKER0KG8pKWlmKGUuaGFzQ2hpbGROb2RlcygpKXtmb3IodmFyIGE9ITAscz1lLmZpcnN0Q2hpbGQsdT0wO3U8by5sZW5ndGg7dSsrKXtpZighc3x8IXcocyxvW3VdLG4pKXthPSExO2JyZWFrfXM9cy5uZXh0U2libGluZ31pZighYXx8cylyZXR1cm4hMX1lbHNlIGYodCxvLG4pO2lmKER0KGkpKWZvcih2YXIgbCBpbiBpKWlmKCFUKGwpKXtkKHQsbik7YnJlYWt9fWVsc2UgZS5kYXRhIT09dC50ZXh0JiYoZS5kYXRhPXQudGV4dCk7cmV0dXJuITB9dmFyIHgsQyxrPXt9LEE9ZS5tb2R1bGVzLE89ZS5ub2RlT3BzO2Zvcih4PTA7eDxYby5sZW5ndGg7Kyt4KWZvcihrW1hvW3hdXT1bXSxDPTA7QzxBLmxlbmd0aDsrK0MpRHQoQVtDXVtYb1t4XV0pJiZrW1hvW3hdXS5wdXNoKEFbQ11bWG9beF1dKTt2YXIgVD1uKCJhdHRycyxzdHlsZSxjbGFzcyxzdGF0aWNDbGFzcyxzdGF0aWNTdHlsZSxrZXkiKTtyZXR1cm4gZnVuY3Rpb24oZSxuLHIsaSxvLHMpe2lmKEx0KG4pKXJldHVybiB2b2lkKER0KGUpJiZtKGUpKTt2YXIgYz0hMSx1PVtdO2lmKEx0KGUpKWM9ITAsYShuLHUsbyxzKTtlbHNle3ZhciBsPUR0KGUubm9kZVR5cGUpO2lmKCFsJiZQdChlLG4pKWIoZSxuLHUsaSk7ZWxzZXtpZihsKXtpZigxPT09ZS5ub2RlVHlwZSYmZS5oYXNBdHRyaWJ1dGUoInNlcnZlci1yZW5kZXJlZCIpJiYoZS5yZW1vdmVBdHRyaWJ1dGUoInNlcnZlci1yZW5kZXJlZCIpLHI9ITApLE10KHIpJiZ3KGUsbix1KSlyZXR1cm4gJChuLHUsITApLGU7ZT10KGUpfXZhciBmPWUuZWxtLGQ9Ty5wYXJlbnROb2RlKGYpO2lmKGEobix1LGYuX2xlYXZlQ2I/bnVsbDpkLE8ubmV4dFNpYmxpbmcoZikpLER0KG4ucGFyZW50KSl7Zm9yKHZhciB2PW4ucGFyZW50O3Y7KXYuZWxtPW4uZWxtLHY9di5wYXJlbnQ7aWYocChuKSlmb3IodmFyIGg9MDtoPGsuY3JlYXRlLmxlbmd0aDsrK2gpay5jcmVhdGVbaF0oUW8sbi5wYXJlbnQpfUR0KGQpP2coZCxbZV0sMCwwKTpEdChlLnRhZykmJm0oZSl9fXJldHVybiAkKG4sdSxjKSxuLmVsbX19KHtub2RlT3BzOkdvLG1vZHVsZXM6U2F9KTtNaSYmZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0aW9uY2hhbmdlIixmdW5jdGlvbigpe3ZhciBlPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7ZSYmZS52bW9kZWwmJkduKGUsImlucHV0Iil9KTt2YXIgamE9e2luc2VydGVkOmZ1bmN0aW9uKGUsdCxuKXtpZigic2VsZWN0Ij09PW4udGFnKXt2YXIgcj1mdW5jdGlvbigpe0puKGUsdCxuLmNvbnRleHQpfTtyKCksKERpfHxQaSkmJnNldFRpbWVvdXQociwwKX1lbHNlInRleHRhcmVhIiE9PW4udGFnJiYidGV4dCIhPT1lLnR5cGUmJiJwYXNzd29yZCIhPT1lLnR5cGV8fChlLl92TW9kaWZpZXJzPXQubW9kaWZpZXJzLHQubW9kaWZpZXJzLmxhenl8fChSaXx8KGUuYWRkRXZlbnRMaXN0ZW5lcigiY29tcG9zaXRpb25zdGFydCIsV24pLGUuYWRkRXZlbnRMaXN0ZW5lcigiY29tcG9zaXRpb25lbmQiLFpuKSksTWkmJihlLnZtb2RlbD0hMCkpKX0sY29tcG9uZW50VXBkYXRlZDpmdW5jdGlvbihlLHQsbil7aWYoInNlbGVjdCI9PT1uLnRhZyl7Sm4oZSx0LG4uY29udGV4dCk7KGUubXVsdGlwbGU/dC52YWx1ZS5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiBLbih0LGUub3B0aW9ucyl9KTp0LnZhbHVlIT09dC5vbGRWYWx1ZSYmS24odC52YWx1ZSxlLm9wdGlvbnMpKSYmR24oZSwiY2hhbmdlIil9fX0sTmE9e2JpbmQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXQudmFsdWU7bj1ZbihuKTt2YXIgaT1uLmRhdGEmJm4uZGF0YS50cmFuc2l0aW9uLG89ZS5fX3ZPcmlnaW5hbERpc3BsYXk9Im5vbmUiPT09ZS5zdHlsZS5kaXNwbGF5PyIiOmUuc3R5bGUuZGlzcGxheTtyJiZpJiYhTWk/KG4uZGF0YS5zaG93PSEwLEhuKG4sZnVuY3Rpb24oKXtlLnN0eWxlLmRpc3BsYXk9b30pKTplLnN0eWxlLmRpc3BsYXk9cj9vOiJub25lIn0sdXBkYXRlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10LnZhbHVlO3IhPT10Lm9sZFZhbHVlJiYobj1ZbihuKSxuLmRhdGEmJm4uZGF0YS50cmFuc2l0aW9uJiYhTWk/KG4uZGF0YS5zaG93PSEwLHI/SG4obixmdW5jdGlvbigpe2Uuc3R5bGUuZGlzcGxheT1lLl9fdk9yaWdpbmFsRGlzcGxheX0pOlVuKG4sZnVuY3Rpb24oKXtlLnN0eWxlLmRpc3BsYXk9Im5vbmUifSkpOmUuc3R5bGUuZGlzcGxheT1yP2UuX192T3JpZ2luYWxEaXNwbGF5OiJub25lIil9LHVuYmluZDpmdW5jdGlvbihlLHQsbixyLGkpe2l8fChlLnN0eWxlLmRpc3BsYXk9ZS5fX3ZPcmlnaW5hbERpc3BsYXkpfX0sSWE9e21vZGVsOmphLHNob3c6TmF9LExhPXtuYW1lOlN0cmluZyxhcHBlYXI6Qm9vbGVhbixjc3M6Qm9vbGVhbixtb2RlOlN0cmluZyx0eXBlOlN0cmluZyxlbnRlckNsYXNzOlN0cmluZyxsZWF2ZUNsYXNzOlN0cmluZyxlbnRlclRvQ2xhc3M6U3RyaW5nLGxlYXZlVG9DbGFzczpTdHJpbmcsZW50ZXJBY3RpdmVDbGFzczpTdHJpbmcsbGVhdmVBY3RpdmVDbGFzczpTdHJpbmcsYXBwZWFyQ2xhc3M6U3RyaW5nLGFwcGVhckFjdGl2ZUNsYXNzOlN0cmluZyxhcHBlYXJUb0NsYXNzOlN0cmluZyxkdXJhdGlvbjpbTnVtYmVyLFN0cmluZyxPYmplY3RdfSxEYT17bmFtZToidHJhbnNpdGlvbiIscHJvcHM6TGEsYWJzdHJhY3Q6ITAscmVuZGVyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10aGlzLiRzbG90cy5kZWZhdWx0O2lmKG4mJihuPW4uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRhZ30pLG4ubGVuZ3RoKSl7dmFyIHI9dGhpcy5tb2RlLGk9blswXTtpZih0cih0aGlzLiR2bm9kZSkpcmV0dXJuIGk7dmFyIGE9UW4oaSk7aWYoIWEpcmV0dXJuIGk7aWYodGhpcy5fbGVhdmluZylyZXR1cm4gZXIoZSxpKTt2YXIgcz0iX190cmFuc2l0aW9uLSIrdGhpcy5fdWlkKyItIjthLmtleT1udWxsPT1hLmtleT9zK2EudGFnOm8oYS5rZXkpPzA9PT1TdHJpbmcoYS5rZXkpLmluZGV4T2Yocyk/YS5rZXk6cythLmtleTphLmtleTt2YXIgYz0oYS5kYXRhfHwoYS5kYXRhPXt9KSkudHJhbnNpdGlvbj1Ybih0aGlzKSxsPXRoaXMuX3Zub2RlLGY9UW4obCk7aWYoYS5kYXRhLmRpcmVjdGl2ZXMmJmEuZGF0YS5kaXJlY3RpdmVzLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuInNob3ciPT09ZS5uYW1lfSkmJihhLmRhdGEuc2hvdz0hMCksZiYmZi5kYXRhJiYhbnIoYSxmKSl7dmFyIHA9ZiYmKGYuZGF0YS50cmFuc2l0aW9uPXUoe30sYykpO2lmKCJvdXQtaW4iPT09cilyZXR1cm4gdGhpcy5fbGVhdmluZz0hMCxxKHAsImFmdGVyTGVhdmUiLGZ1bmN0aW9uKCl7dC5fbGVhdmluZz0hMSx0LiRmb3JjZVVwZGF0ZSgpfSksZXIoZSxpKTtpZigiaW4tb3V0Ij09PXIpe3ZhciBkLHY9ZnVuY3Rpb24oKXtkKCl9O3EoYywiYWZ0ZXJFbnRlciIsdikscShjLCJlbnRlckNhbmNlbGxlZCIsdikscShwLCJkZWxheUxlYXZlIixmdW5jdGlvbihlKXtkPWV9KX19cmV0dXJuIGl9fX0sTWE9dSh7dGFnOlN0cmluZyxtb3ZlQ2xhc3M6U3RyaW5nfSxMYSk7ZGVsZXRlIE1hLm1vZGU7dmFyIFBhPXtwcm9wczpNYSxyZW5kZXI6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudGFnfHx0aGlzLiR2bm9kZS5kYXRhLnRhZ3x8InNwYW4iLG49T2JqZWN0LmNyZWF0ZShudWxsKSxyPXRoaXMucHJldkNoaWxkcmVuPXRoaXMuY2hpbGRyZW4saT10aGlzLiRzbG90cy5kZWZhdWx0fHxbXSxvPXRoaXMuY2hpbGRyZW49W10sYT1Ybih0aGlzKSxzPTA7czxpLmxlbmd0aDtzKyspe3ZhciBjPWlbc107Yy50YWcmJm51bGwhPWMua2V5JiYwIT09U3RyaW5nKGMua2V5KS5pbmRleE9mKCJfX3ZsaXN0IikmJihvLnB1c2goYyksbltjLmtleV09YywoYy5kYXRhfHwoYy5kYXRhPXt9KSkudHJhbnNpdGlvbj1hKX1pZihyKXtmb3IodmFyIHU9W10sbD1bXSxmPTA7ZjxyLmxlbmd0aDtmKyspe3ZhciBwPXJbZl07cC5kYXRhLnRyYW5zaXRpb249YSxwLmRhdGEucG9zPXAuZWxtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG5bcC5rZXldP3UucHVzaChwKTpsLnB1c2gocCl9dGhpcy5rZXB0PWUodCxudWxsLHUpLHRoaXMucmVtb3ZlZD1sfXJldHVybiBlKHQsbnVsbCxvKX0sYmVmb3JlVXBkYXRlOmZ1bmN0aW9uKCl7dGhpcy5fX3BhdGNoX18odGhpcy5fdm5vZGUsdGhpcy5rZXB0LCExLCEwKSx0aGlzLl92bm9kZT10aGlzLmtlcHR9LHVwZGF0ZWQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByZXZDaGlsZHJlbix0PXRoaXMubW92ZUNsYXNzfHwodGhpcy5uYW1lfHwidiIpKyItbW92ZSI7aWYoZS5sZW5ndGgmJnRoaXMuaGFzTW92ZShlWzBdLmVsbSx0KSl7ZS5mb3JFYWNoKHJyKSxlLmZvckVhY2goaXIpLGUuZm9yRWFjaChvcik7dmFyIG49ZG9jdW1lbnQuYm9keTtuLm9mZnNldEhlaWdodDtlLmZvckVhY2goZnVuY3Rpb24oZSl7aWYoZS5kYXRhLm1vdmVkKXt2YXIgbj1lLmVsbSxyPW4uc3R5bGU7TG4obix0KSxyLnRyYW5zZm9ybT1yLldlYmtpdFRyYW5zZm9ybT1yLnRyYW5zaXRpb25EdXJhdGlvbj0iIixuLmFkZEV2ZW50TGlzdGVuZXIod2Esbi5fbW92ZUNiPWZ1bmN0aW9uIGUocil7ciYmIS90cmFuc2Zvcm0kLy50ZXN0KHIucHJvcGVydHlOYW1lKXx8KG4ucmVtb3ZlRXZlbnRMaXN0ZW5lcih3YSxlKSxuLl9tb3ZlQ2I9bnVsbCxEbihuLHQpKX0pfX0pfX0sbWV0aG9kczp7aGFzTW92ZTpmdW5jdGlvbihlLHQpe2lmKCF5YSlyZXR1cm4hMTtpZihudWxsIT10aGlzLl9oYXNNb3ZlKXJldHVybiB0aGlzLl9oYXNNb3ZlO3ZhciBuPWUuY2xvbmVOb2RlKCk7ZS5fdHJhbnNpdGlvbkNsYXNzZXMmJmUuX3RyYW5zaXRpb25DbGFzc2VzLmZvckVhY2goZnVuY3Rpb24oZSl7am4obixlKX0pLEVuKG4sdCksbi5zdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLiRlbC5hcHBlbmRDaGlsZChuKTt2YXIgcj1QbihuKTtyZXR1cm4gdGhpcy4kZWwucmVtb3ZlQ2hpbGQobiksdGhpcy5faGFzTW92ZT1yLmhhc1RyYW5zZm9ybX19fSxSYT17VHJhbnNpdGlvbjpEYSxUcmFuc2l0aW9uR3JvdXA6UGF9O250LmNvbmZpZy5tdXN0VXNlUHJvcD1QbyxudC5jb25maWcuaXNSZXNlcnZlZFRhZz1XbyxudC5jb25maWcuZ2V0VGFnTmFtZXNwYWNlPXl0LG50LmNvbmZpZy5pc1Vua25vd25FbGVtZW50PV90LHUobnQub3B0aW9ucy5kaXJlY3RpdmVzLElhKSx1KG50Lm9wdGlvbnMuY29tcG9uZW50cyxSYSksbnQucHJvdG90eXBlLl9fcGF0Y2hfXz1JaT9FYTpkLG50LnByb3RvdHlwZS4kbW91bnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT1lJiZJaT9idChlKTp2b2lkIDAsYWUodGhpcyxlLHQpfSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7U2kuZGV2dG9vbHMmJkJpJiZCaS5lbWl0KCJpbml0IixudCl9LDApO3ZhciBGYSxIYT0hIUlpJiZmdW5jdGlvbihlLHQpe3ZhciBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBuLmlubmVySFRNTD0nPGRpdiBhPSInK2UrJyI+JyxuLmlubmVySFRNTC5pbmRleE9mKHQpPjB9KCJcbiIsIiYjMTA7IiksVWE9bigiYXJlYSxiYXNlLGJyLGNvbCxlbWJlZCxmcmFtZSxocixpbWcsaW5wdXQsaXNpbmRleCxrZXlnZW4sbGluayxtZXRhLHBhcmFtLHNvdXJjZSx0cmFjayx3YnIiKSxCYT1uKCJjb2xncm91cCxkZCxkdCxsaSxvcHRpb25zLHAsdGQsdGZvb3QsdGgsdGhlYWQsdHIsc291cmNlIiksVmE9bigiYWRkcmVzcyxhcnRpY2xlLGFzaWRlLGJhc2UsYmxvY2txdW90ZSxib2R5LGNhcHRpb24sY29sLGNvbGdyb3VwLGRkLGRldGFpbHMsZGlhbG9nLGRpdixkbCxkdCxmaWVsZHNldCxmaWdjYXB0aW9uLGZpZ3VyZSxmb290ZXIsZm9ybSxoMSxoMixoMyxoNCxoNSxoNixoZWFkLGhlYWRlcixoZ3JvdXAsaHIsaHRtbCxsZWdlbmQsbGksbWVudWl0ZW0sbWV0YSxvcHRncm91cCxvcHRpb24scGFyYW0scnAscnQsc291cmNlLHN0eWxlLHN1bW1hcnksdGJvZHksdGQsdGZvb3QsdGgsdGhlYWQsdGl0bGUsdHIsdHJhY2siKSx6YT1bLyIoW14iXSopIisvLnNvdXJjZSwvJyhbXiddKiknKy8uc291cmNlLC8oW15ccyInPTw+YF0rKS8uc291cmNlXSxKYT1uZXcgUmVnRXhwKCJeXFxzKiIrLyhbXlxzIic8PlwvPV0rKS8uc291cmNlKyIoPzpcXHMqKCIrLyg/Oj0pLy5zb3VyY2UrIilcXHMqKD86Iit6YS5qb2luKCJ8IikrIikpPyIpLEthPSJbYS16QS1aX11bXFx3XFwtXFwuXSoiLHFhPW5ldyBSZWdFeHAoIl48KCg/OiIrS2ErIlxcOik/IitLYSsiKSIpLFdhPS9eXHMqKFwvPyk+LyxaYT1uZXcgUmVnRXhwKCJePFxcLygoPzoiK0thKyJcXDopPyIrS2ErIilbXj5dKj4iKSxHYT0vXjwhRE9DVFlQRSBbXj5dKz4vaSxZYT0vXjwhLS0vLFFhPS9ePCFcWy8sWGE9ITE7IngiLnJlcGxhY2UoL3goLik/L2csZnVuY3Rpb24oZSx0KXtYYT0iIj09PXR9KTt2YXIgZXMsdHMsbnMscnMsaXMsb3MsYXMsc3MsY3MsdXMsbHMsZnMscHMsZHMsdnMsaHMsbXMsZ3MseXM9bigic2NyaXB0LHN0eWxlLHRleHRhcmVhIiwhMCksX3M9e30sYnM9eyImbHQ7IjoiPCIsIiZndDsiOiI+IiwiJnF1b3Q7IjonIicsIiZhbXA7IjoiJiIsIiYjMTA7IjoiXG4ifSwkcz0vJig/Omx0fGd0fHF1b3R8YW1wKTsvZyx3cz0vJig/Omx0fGd0fHF1b3R8YW1wfCMxMCk7L2cseHM9L1x7XHsoKD86LnxcbikrPylcfVx9L2csQ3M9YShmdW5jdGlvbihlKXt2YXIgdD1lWzBdLnJlcGxhY2UoL1stLiorP14ke30oKXxbXF1cL1xcXS9nLCJcXCQmIiksbj1lWzFdLnJlcGxhY2UoL1stLiorP14ke30oKXxbXF1cL1xcXS9nLCJcXCQmIik7cmV0dXJuIG5ldyBSZWdFeHAodCsiKCg/Oi58XFxuKSs/KSIrbiwiZyIpfSksa3M9L15AfF52LW9uOi8sQXM9L152LXxeQHxeOi8sT3M9LyguKj8pXHMrKD86aW58b2YpXHMrKC4qKS8sVHM9L1woKFx7W159XSpcfXxbXixdKiksKFteLF0qKSg/OiwoW14sXSopKT9cKS8sU3M9LzooLiopJC8sRXM9L146fF52LWJpbmQ6Lyxqcz0vXC5bXi5dKy9nLE5zPWEoYXIpLElzPS9eeG1sbnM6TlNcZCsvLExzPS9eTlNcZCs6LyxEcz1hKEVyKSxNcz0vXlxzKihbXHckX10rfFwoW14pXSo/XCkpXHMqPT58XmZ1bmN0aW9uXHMqXCgvLFBzPS9eXHMqW0EtWmEtel8kXVtcdyRdKig/OlwuW0EtWmEtel8kXVtcdyRdKnxcWycuKj8nXXxcWyIuKj8iXXxcW1xkK118XFtbQS1aYS16XyRdW1x3JF0qXSkqXHMqJC8sUnM9e2VzYzoyNyx0YWI6OSxlbnRlcjoxMyxzcGFjZTozMix1cDozOCxsZWZ0OjM3LHJpZ2h0OjM5LGRvd246NDAsZGVsZXRlOls4LDQ2XX0sRnM9ZnVuY3Rpb24oZSl7cmV0dXJuImlmKCIrZSsiKXJldHVybiBudWxsOyJ9LEhzPXtzdG9wOiIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IixwcmV2ZW50OiIkZXZlbnQucHJldmVudERlZmF1bHQoKTsiLHNlbGY6RnMoIiRldmVudC50YXJnZXQgIT09ICRldmVudC5jdXJyZW50VGFyZ2V0IiksY3RybDpGcygiISRldmVudC5jdHJsS2V5Iiksc2hpZnQ6RnMoIiEkZXZlbnQuc2hpZnRLZXkiKSxhbHQ6RnMoIiEkZXZlbnQuYWx0S2V5IiksbWV0YTpGcygiISRldmVudC5tZXRhS2V5IiksbGVmdDpGcygiJ2J1dHRvbicgaW4gJGV2ZW50ICYmICRldmVudC5idXR0b24gIT09IDAiKSxtaWRkbGU6RnMoIididXR0b24nIGluICRldmVudCAmJiAkZXZlbnQuYnV0dG9uICE9PSAxIikscmlnaHQ6RnMoIididXR0b24nIGluICRldmVudCAmJiAkZXZlbnQuYnV0dG9uICE9PSAyIil9LFVzPXtiaW5kOkhyLGNsb2FrOmR9LEJzPXtzdGF0aWNLZXlzOlsic3RhdGljQ2xhc3MiXSx0cmFuc2Zvcm1Ob2RlOmZpLGdlbkRhdGE6cGl9LFZzPXtzdGF0aWNLZXlzOlsic3RhdGljU3R5bGUiXSx0cmFuc2Zvcm1Ob2RlOmRpLGdlbkRhdGE6dml9LHpzPVtCcyxWc10sSnM9e21vZGVsOmRuLHRleHQ6aGksaHRtbDptaX0sS3M9e2V4cGVjdEhUTUw6ITAsbW9kdWxlczp6cyxkaXJlY3RpdmVzOkpzLGlzUHJlVGFnOnFvLGlzVW5hcnlUYWc6VWEsbXVzdFVzZVByb3A6UG8sY2FuQmVMZWZ0T3BlblRhZzpCYSxpc1Jlc2VydmVkVGFnOldvLGdldFRhZ05hbWVzcGFjZTp5dCxzdGF0aWNLZXlzOmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlZHVjZShmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbmNhdCh0LnN0YXRpY0tleXN8fFtdKX0sW10pLmpvaW4oIiwiKX0oenMpfSxxcz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQsbil7dmFyIHI9T2JqZWN0LmNyZWF0ZShlKSxpPVtdLG89W107aWYoci53YXJuPWZ1bmN0aW9uKGUsdCl7KHQ/bzppKS5wdXNoKGUpfSxuKXtuLm1vZHVsZXMmJihyLm1vZHVsZXM9KGUubW9kdWxlc3x8W10pLmNvbmNhdChuLm1vZHVsZXMpKSxuLmRpcmVjdGl2ZXMmJihyLmRpcmVjdGl2ZXM9dShPYmplY3QuY3JlYXRlKGUuZGlyZWN0aXZlcyksbi5kaXJlY3RpdmVzKSk7Zm9yKHZhciBhIGluIG4pIm1vZHVsZXMiIT09YSYmImRpcmVjdGl2ZXMiIT09YSYmKHJbYV09blthXSl9dmFyIHM9dWkodCxyKTtyZXR1cm4gcy5lcnJvcnM9aSxzLnRpcHM9byxzfWZ1bmN0aW9uIG4oZSxuLGkpe249bnx8e307dmFyIG89bi5kZWxpbWl0ZXJzP1N0cmluZyhuLmRlbGltaXRlcnMpK2U6ZTtpZihyW29dKXJldHVybiByW29dO3ZhciBhPXQoZSxuKSxzPXt9LGM9W107cy5yZW5kZXI9bGkoYS5yZW5kZXIsYyk7dmFyIHU9YS5zdGF0aWNSZW5kZXJGbnMubGVuZ3RoO3Muc3RhdGljUmVuZGVyRm5zPW5ldyBBcnJheSh1KTtmb3IodmFyIGw9MDtsPHU7bCsrKXMuc3RhdGljUmVuZGVyRm5zW2xdPWxpKGEuc3RhdGljUmVuZGVyRm5zW2xdLGMpO3JldHVybiByW29dPXN9dmFyIHI9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm57Y29tcGlsZTp0LGNvbXBpbGVUb0Z1bmN0aW9uczpufX0oS3MpLFdzPXFzLmNvbXBpbGVUb0Z1bmN0aW9ucyxacz1hKGZ1bmN0aW9uKGUpe3ZhciB0PWJ0KGUpO3JldHVybiB0JiZ0LmlubmVySFRNTH0pLEdzPW50LnByb3RvdHlwZS4kbW91bnQ7cmV0dXJuIG50LnByb3RvdHlwZS4kbW91bnQ9ZnVuY3Rpb24oZSx0KXtpZigoZT1lJiZidChlKSk9PT1kb2N1bWVudC5ib2R5fHxlPT09ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KXJldHVybiB0aGlzO3ZhciBuPXRoaXMuJG9wdGlvbnM7aWYoIW4ucmVuZGVyKXt2YXIgcj1uLnRlbXBsYXRlO2lmKHIpaWYoInN0cmluZyI9PXR5cGVvZiByKSIjIj09PXIuY2hhckF0KDApJiYocj1acyhyKSk7ZWxzZXtpZighci5ub2RlVHlwZSlyZXR1cm4gdGhpcztyPXIuaW5uZXJIVE1MfWVsc2UgZSYmKHI9Z2koZSkpO2lmKHIpe3ZhciBpPVdzKHIse3Nob3VsZERlY29kZU5ld2xpbmVzOkhhLGRlbGltaXRlcnM6bi5kZWxpbWl0ZXJzfSx0aGlzKSxvPWkucmVuZGVyLGE9aS5zdGF0aWNSZW5kZXJGbnM7bi5yZW5kZXI9byxuLnN0YXRpY1JlbmRlckZucz1hfX1yZXR1cm4gR3MuY2FsbCh0aGlzLGUsdCl9LG50LmNvbXBpbGU9V3MsbnR9KTs="></script>
<link href="data:text/css;charset=utf-8,%40charset%20%22UTF%2D8%22%3B%2Eel%2Dbreadcrumb%3Aafter%2C%2Eel%2Dbreadcrumb%3Abefore%2C%2Eel%2Dbutton%2Dgroup%3Aafter%2C%2Eel%2Dbutton%2Dgroup%3Abefore%2C%2Eel%2Dform%2Ditem%3Aafter%2C%2Eel%2Dform%2Ditem%3Abefore%2C%2Eel%2Dform%2Ditem%5F%5Fcontent%3Aafter%2C%2Eel%2Dform%2Ditem%5F%5Fcontent%3Abefore%7Bdisplay%3Atable%3Bcontent%3A%22%22%7D%2Eel%2Ddialog%5F%5Fheaderbtn%2C%2Eel%2Dpagination%5F%5Frightwrapper%7Bfloat%3Aright%7D%2Eel%2Dcheckbox%5F%5Foriginal%2C%2Eel%2Dpagination%2D%2Dsmall%20%2Earrow%2Edisabled%2C%2Eel%2Dtable%20td%2Eis%2Dhidden%3E%2A%2C%2Eel%2Dtable%20th%2Eis%2Dhidden%3E%2A%7Bvisibility%3Ahidden%7D%2Eel%2Dform%2Ditem%5F%5Fcontent%3Aafter%7Bclear%3Aboth%7D%2Eel%2Dform%2Ditem%3Aafter%7Bclear%3Aboth%7D%2Eel%2Dbreadcrumb%3Aafter%7Bclear%3Aboth%7D%2Eel%2Dbutton%2Dgroup%3Aafter%7Bclear%3Aboth%7D%2Eel%2Dautocomplete%2Dsuggestion%2Eis%2Dloading%20li%3Aafter%7Bdisplay%3Ainline%2Dblock%3Bcontent%3A%22%22%3Bheight%3A100%25%3Bvertical%2Dalign%3Amiddle%7D%40font%2Dface%7Bfont%2Dfamily%3Aelement%2Dicons%3Bsrc%3Aurl%28data%3Atext%2Fplain%3Bcharset%3Dutf%2D8%2CInvalid%2520URL%253A%2520%252Felement%252Dui%252Flib%252Ftheme%252Ddefault%252Ffonts%252Felement%252Dicons%252Ewoff%253Ft%253D1472440741%29%20format%28%27woff%27%29%2Curl%28data%3Atext%2Fplain%3Bcharset%3Dutf%2D8%2CInvalid%2520URL%253A%2520%252Felement%252Dui%252Flib%252Ftheme%252Ddefault%252Ffonts%252Felement%252Dicons%252Ettf%253Ft%253D1472440741%29%20format%28%27truetype%27%29%3Bfont%2Dweight%3A400%3Bfont%2Dstyle%3Anormal%7D%5Bclass%2A%3D%22%20el%2Dicon%2D%22%5D%2C%5Bclass%5E%3Del%2Dicon%2D%5D%7Bfont%2Dfamily%3Aelement%2Dicons%21important%3Bspeak%3Anone%3Bfont%2Dstyle%3Anormal%3Bfont%2Dweight%3A400%3Bfont%2Dvariant%3Anormal%3Btext%2Dtransform%3Anone%3Bline%2Dheight%3A1%3Bvertical%2Dalign%3Abaseline%3Bdisplay%3Ainline%2Dblock%3B%2Dwebkit%2Dfont%2Dsmoothing%3Aantialiased%3B%2Dmoz%2Dosx%2Dfont%2Dsmoothing%3Agrayscale%7D%2Eel%2Dicon%2Darrow%2Ddown%3Abefore%7Bcontent%3A%22%5Ce600%22%7D%2Eel%2Dicon%2Darrow%2Dleft%3Abefore%7Bcontent%3A%22%5Ce601%22%7D%2Eel%2Dicon%2Darrow%2Dright%3Abefore%7Bcontent%3A%22%5Ce602%22%7D%2Eel%2Dicon%2Darrow%2Dup%3Abefore%7Bcontent%3A%22%5Ce603%22%7D%2Eel%2Dicon%2Dcaret%2Dbottom%3Abefore%7Bcontent%3A%22%5Ce604%22%7D%2Eel%2Dicon%2Dcaret%2Dleft%3Abefore%7Bcontent%3A%22%5Ce605%22%7D%2Eel%2Dicon%2Dcaret%2Dright%3Abefore%7Bcontent%3A%22%5Ce606%22%7D%2Eel%2Dicon%2Dcaret%2Dtop%3Abefore%7Bcontent%3A%22%5Ce607%22%7D%2Eel%2Dicon%2Dcheck%3Abefore%7Bcontent%3A%22%5Ce608%22%7D%2Eel%2Dicon%2Dcircle%2Dcheck%3Abefore%7Bcontent%3A%22%5Ce609%22%7D%2Eel%2Dicon%2Dcircle%2Dclose%3Abefore%7Bcontent%3A%22%5Ce60a%22%7D%2Eel%2Dicon%2Dcircle%2Dcross%3Abefore%7Bcontent%3A%22%5Ce60b%22%7D%2Eel%2Dicon%2Dclose%3Abefore%7Bcontent%3A%22%5Ce60c%22%7D%2Eel%2Dicon%2Dupload%3Abefore%7Bcontent%3A%22%5Ce60d%22%7D%2Eel%2Dicon%2Dd%2Darrow%2Dleft%3Abefore%7Bcontent%3A%22%5Ce60e%22%7D%2Eel%2Dicon%2Dd%2Darrow%2Dright%3Abefore%7Bcontent%3A%22%5Ce60f%22%7D%2Eel%2Dicon%2Dd%2Dcaret%3Abefore%7Bcontent%3A%22%5Ce610%22%7D%2Eel%2Dicon%2Ddate%3Abefore%7Bcontent%3A%22%5Ce611%22%7D%2Eel%2Dicon%2Ddelete%3Abefore%7Bcontent%3A%22%5Ce612%22%7D%2Eel%2Dicon%2Ddocument%3Abefore%7Bcontent%3A%22%5Ce613%22%7D%2Eel%2Dicon%2Dedit%3Abefore%7Bcontent%3A%22%5Ce614%22%7D%2Eel%2Dicon%2Dinformation%3Abefore%7Bcontent%3A%22%5Ce615%22%7D%2Eel%2Dicon%2Dloading%3Abefore%7Bcontent%3A%22%5Ce616%22%7D%2Eel%2Dicon%2Dmenu%3Abefore%7Bcontent%3A%22%5Ce617%22%7D%2Eel%2Dicon%2Dmessage%3Abefore%7Bcontent%3A%22%5Ce618%22%7D%2Eel%2Dicon%2Dminus%3Abefore%7Bcontent%3A%22%5Ce619%22%7D%2Eel%2Dicon%2Dmore%3Abefore%7Bcontent%3A%22%5Ce61a%22%7D%2Eel%2Dicon%2Dpicture%3Abefore%7Bcontent%3A%22%5Ce61b%22%7D%2Eel%2Dicon%2Dplus%3Abefore%7Bcontent%3A%22%5Ce61c%22%7D%2Eel%2Dicon%2Dsearch%3Abefore%7Bcontent%3A%22%5Ce61d%22%7D%2Eel%2Dicon%2Dsetting%3Abefore%7Bcontent%3A%22%5Ce61e%22%7D%2Eel%2Dicon%2Dshare%3Abefore%7Bcontent%3A%22%5Ce61f%22%7D%2Eel%2Dicon%2Dstar%2Doff%3Abefore%7Bcontent%3A%22%5Ce620%22%7D%2Eel%2Dicon%2Dstar%2Don%3Abefore%7Bcontent%3A%22%5Ce621%22%7D%2Eel%2Dicon%2Dtime%3Abefore%7Bcontent%3A%22%5Ce622%22%7D%2Eel%2Dicon%2Dwarning%3Abefore%7Bcontent%3A%22%5Ce623%22%7D%2Eel%2Dicon%2Ddelete2%3Abefore%7Bcontent%3A%22%5Ce624%22%7D%2Eel%2Dicon%2Dupload2%3Abefore%7Bcontent%3A%22%5Ce627%22%7D%2Eel%2Dicon%2Dview%3Abefore%7Bcontent%3A%22%5Ce626%22%7D%2Eel%2Dicon%2Dloading%7Banimation%3Arotating%201s%20linear%20infinite%7D%2Eel%2Dicon%2D%2Dright%7Bmargin%2Dleft%3A5px%7D%2Eel%2Dicon%2D%2Dleft%7Bmargin%2Dright%3A5px%7D%40keyframes%20rotating%7B0%25%7Btransform%3ArotateZ%280%29%7D100%25%7Btransform%3ArotateZ%28360deg%29%7D%7D%2Eel%2Dpagination%7Bwhite%2Dspace%3Anowrap%3Bpadding%3A2px%205px%3Bcolor%3A%2348576a%7D%2Eel%2Dpagination%3Aafter%2C%2Eel%2Dpagination%3Abefore%7Bdisplay%3Atable%3Bcontent%3A%22%22%7D%2Eel%2Dpagination%3Aafter%7Bclear%3Aboth%7D%2Eel%2Dpagination%20button%2C%2Eel%2Dpagination%20span%7Bdisplay%3Ainline%2Dblock%3Bfont%2Dsize%3A13px%3Bmin%2Dwidth%3A28px%3Bheight%3A28px%3Bline%2Dheight%3A28px%3Bvertical%2Dalign%3Atop%3Bbox%2Dsizing%3Aborder%2Dbox%7D%2Eel%2Dpagination%20%2Eel%2Dselect%20%2Eel%2Dinput%7Bwidth%3A110px%7D%2Eel%2Dpagination%20%2Eel%2Dselect%20%2Eel%2Dinput%20input%7Bpadding%2Dright%3A25px%3Bborder%2Dradius%3A2px%3Bheight%3A28px%7D%2Eel%2Dpagination%20button%7Bborder%3Anone%3Bpadding%3A0%206px%3Bbackground%3A0%200%7D%2Eel%2Dpagination%20button%3Afocus%7Boutline%3A0%7D%2Eel%2Dpagination%20button%3Ahover%7Bcolor%3A%2320a0ff%7D%2Eel%2Dpagination%20button%2Edisabled%7Bcolor%3A%23e4e4e4%3Bbackground%2Dcolor%3A%23fff%3Bcursor%3Anot%2Dallowed%7D%2Eel%2Dpager%20li%2C%2Eel%2Dpager%20li%2Ebtn%2Dquicknext%3Ahover%2C%2Eel%2Dpager%20li%2Ebtn%2Dquickprev%3Ahover%7Bcursor%3Apointer%7D%2Eel%2Dpagination%20%2Ebtn%2Dnext%2C%2Eel%2Dpagination%20%2Ebtn%2Dprev%7Bbackground%3Acenter%20center%20no%2Drepeat%20%23fff%3Bbackground%2Dsize%3A16px%3Bborder%3A1px%20solid%20%23d1dbe5%3Bcursor%3Apointer%3Bmargin%3A0%3Bcolor%3A%2397a8be%7D%2Eel%2Dpagination%20%2Ebtn%2Dnext%20%2Eel%2Dicon%2C%2Eel%2Dpagination%20%2Ebtn%2Dprev%20%2Eel%2Dicon%7Bdisplay%3Ablock%3Bfont%2Dsize%3A12px%7D%2Eel%2Dpagination%20%2Ebtn%2Dprev%7Bborder%2Dradius%3A2px%200%200%202px%3Bborder%2Dright%3A0%7D%2Eel%2Dpagination%20%2Ebtn%2Dnext%7Bborder%2Dradius%3A0%202px%202px%200%3Bborder%2Dleft%3A0%7D%2Eel%2Dpagination%2D%2Dsmall%20%2Ebtn%2Dnext%2C%2Eel%2Dpagination%2D%2Dsmall%20%2Ebtn%2Dprev%2C%2Eel%2Dpagination%2D%2Dsmall%20%2Eel%2Dpager%20li%2C%2Eel%2Dpagination%2D%2Dsmall%20%2Eel%2Dpager%20li%3Alast%2Dchild%7Bborder%2Dcolor%3Atransparent%3Bfont%2Dsize%3A12px%3Bline%2Dheight%3A22px%3Bheight%3A22px%3Bmin%2Dwidth%3A22px%7D%2Eel%2Dpagination%2D%2Dsmall%20%2Eel%2Dpager%20li%7Bborder%2Dradius%3A2px%7D%2Eel%2Dpagination%5F%5Fsizes%7Bmargin%3A0%2010px%200%200%7D%2Eel%2Dpagination%5F%5Fsizes%20%2Eel%2Dinput%20%2Eel%2Dinput%5F%5Finner%7Bfont%2Dsize%3A13px%3Bborder%2Dcolor%3A%23d1dbe5%7D%2Eel%2Dpagination%5F%5Fsizes%20%2Eel%2Dinput%20%2Eel%2Dinput%5F%5Finner%3Ahover%7Bborder%2Dcolor%3A%2320a0ff%7D%2Eel%2Dpagination%5F%5Fjump%7Bmargin%2Dleft%3A10px%7D%2Eel%2Dpagination%5F%5Ftotal%7Bmargin%3A0%2010px%7D%2Eel%2Dpagination%5F%5Feditor%7Bborder%3A1px%20solid%20%23d1dbe5%3Bborder%2Dradius%3A2px%3Bline%2Dheight%3A18px%3Bpadding%3A4px%202px%3Bwidth%3A30px%3Btext%2Dalign%3Acenter%3Bmargin%3A0%206px%3Bbox%2Dsizing%3Aborder%2Dbox%3Btransition%3Aborder%20%2E3s%7D%2Eel%2Dpager%2C%2Eel%2Dpager%20li%7Bvertical%2Dalign%3Atop%3Bdisplay%3Ainline%2Dblock%3Bmargin%3A0%7D%2Eel%2Dpagination%5F%5Feditor%3A%3A%2Dwebkit%2Dinner%2Dspin%2Dbutton%2C%2Eel%2Dpagination%5F%5Feditor%3A%3A%2Dwebkit%2Douter%2Dspin%2Dbutton%7B%2Dwebkit%2Dappearance%3Anone%3Bmargin%3A0%7D%2Eel%2Dpagination%5F%5Feditor%3Afocus%7Boutline%3A0%3Bborder%2Dcolor%3A%2320a0ff%7D%2Eel%2Dautocomplete%2Dsuggestion%5F%5Fwrap%2C%2Eel%2Dpager%20li%7Bborder%3A1px%20solid%20%23d1dbe5%3Bbox%2Dsizing%3Aborder%2Dbox%7D%2Eel%2Dpager%7B%2Dwebkit%2Duser%2Dselect%3Anone%3B%2Dmoz%2Duser%2Dselect%3Anone%3B%2Dms%2Duser%2Dselect%3Anone%3Buser%2Dselect%3Anone%3Blist%2Dstyle%3Anone%3Bfont%2Dsize%3A0%3Bpadding%3A0%7D%2Eel%2Dradio%2C%2Eel%2Dswitch%5F%5Flabel%7B%2Dwebkit%2Duser%2Dselect%3Anone%3B%2Dmoz%2Duser%2Dselect%3Anone%3B%2Dms%2Duser%2Dselect%3Anone%7D%2Eel%2Dpager%20li%7Bpadding%3A0%204px%3Bborder%2Dright%3A0%3Bbackground%3A%23fff%3Bfont%2Dsize%3A13px%3Bmin%2Dwidth%3A28px%3Bheight%3A28px%3Bline%2Dheight%3A28px%3Btext%2Dalign%3Acenter%7D%2Eel%2Dpager%20li%3Alast%2Dchild%7Bborder%2Dright%3A1px%20solid%20%23d1dbe5%7D%2Eel%2Dpager%20li%2Ebtn%2Dquicknext%2C%2Eel%2Dpager%20li%2Ebtn%2Dquickprev%7Bline%2Dheight%3A28px%3Bcolor%3A%2397a8be%7D%2Eel%2Dpager%20li%2Eactive%2Bli%7Bborder%2Dleft%3A0%3Bpadding%2Dleft%3A5px%7D%2Eel%2Dpager%20li%3Ahover%7Bcolor%3A%2320a0ff%7D%2Eel%2Dpager%20li%2Eactive%7Bborder%2Dcolor%3A%2320a0ff%3Bbackground%2Dcolor%3A%2320a0ff%3Bcolor%3A%23fff%3Bcursor%3Adefault%7D%2Eel%2Ddialog%7Bposition%3Aabsolute%3Bleft%3A50%25%3B%2Dms%2Dtransform%3AtranslateX%28%2D50%25%29%3Btransform%3AtranslateX%28%2D50%25%29%3Bbackground%3A%23fff%3Bborder%2Dradius%3A2px%3Bbox%2Dshadow%3A0%201px%203px%20rgba%280%2C0%2C0%2C%2E3%29%3Bbox%2Dsizing%3Aborder%2Dbox%3Bmargin%2Dbottom%3A50px%7D%2Eel%2Ddialog%2D%2Dtiny%7Bwidth%3A30%25%7D%2Eel%2Ddialog%2D%2Dsmall%7Bwidth%3A50%25%7D%2Eel%2Ddialog%2D%2Dlarge%7Bwidth%3A90%25%7D%2Eel%2Ddialog%2D%2Dfull%7Bwidth%3A100%25%3Btop%3A0%3Bmargin%2Dbottom%3A0%3Bheight%3A100%25%3Boverflow%3Aauto%7D%2Eel%2Ddialog%5F%5Fwrapper%7Btop%3A0%3Bright%3A0%3Bbottom%3A0%3Bleft%3A0%3Bposition%3Afixed%3Boverflow%3Aauto%3Bmargin%3A0%7D%2Eel%2Dautocomplete%2C%2Eel%2Ddropdown%7Bdisplay%3Ainline%2Dblock%3Bposition%3Arelative%7D%2Eel%2Ddialog%5F%5Fheader%7Bpadding%3A20px%2020px%200%7D%2Eel%2Ddialog%5F%5Fclose%7Bcursor%3Apointer%3Bcolor%3A%23bfcbd9%7D%2Eel%2Ddialog%5F%5Fclose%3Ahover%7Bcolor%3A%2320a0ff%7D%2Eel%2Ddialog%5F%5Ftitle%7Bline%2Dheight%3A1%3Bfont%2Dsize%3A16px%3Bfont%2Dweight%3A700%3Bcolor%3A%231f2d3d%7D%2Eel%2Ddialog%5F%5Fbody%7Bpadding%3A30px%2020px%3Bcolor%3A%2348576a%3Bfont%2Dsize%3A14px%7D%2Eel%2Ddialog%5F%5Ffooter%7Bpadding%3A10px%2020px%2015px%3Btext%2Dalign%3Aright%3Bbox%2Dsizing%3Aborder%2Dbox%7D%2Edialog%2Dfade%2Denter%2Dactive%7Banimation%3Adialog%2Dfade%2Din%20%2E3s%7D%2Edialog%2Dfade%2Dleave%2Dactive%7Banimation%3Adialog%2Dfade%2Dout%20%2E3s%7D%40keyframes%20dialog%2Dfade%2Din%7B0%25%7Btransform%3Atranslate3d%280%2C%2D20px%2C0%29%3Bopacity%3A0%7D100%25%7Btransform%3Atranslate3d%280%2C0%2C0%29%3Bopacity%3A1%7D%7D%40keyframes%20dialog%2Dfade%2Dout%7B0%25%7Btransform%3Atranslate3d%280%2C0%2C0%29%3Bopacity%3A1%7D100%25%7Btransform%3Atranslate3d%280%2C%2D20px%2C0%29%3Bopacity%3A0%7D%7D%2Eel%2Dautocomplete%2Dsuggestion%7Bmargin%3A5px%200%3Bbox%2Dshadow%3A0%200%206px%200%20rgba%280%2C0%2C0%2C%2E04%29%2C0%202px%204px%200%20rgba%280%2C0%2C0%2C%2E12%29%7D%2Eel%2Dautocomplete%2Dsuggestion%20li%7Blist%2Dstyle%3Anone%3Bline%2Dheight%3A36px%3Bpadding%3A0%2010px%3Bmargin%3A0%3Bcursor%3Apointer%3Bcolor%3A%2348576a%3Bfont%2Dsize%3A14px%3Bwhite%2Dspace%3Anowrap%3Boverflow%3Ahidden%3Btext%2Doverflow%3Aellipsis%7D%2Eel%2Dautocomplete%2Dsuggestion%20li%3Ahover%7Bbackground%2Dcolor%3A%23e4e8f1%7D%2Eel%2Dautocomplete%2Dsuggestion%20li%2Ehighlighted%7Bbackground%2Dcolor%3A%2320a0ff%3Bcolor%3A%23fff%7D%2Eel%2Dautocomplete%2Dsuggestion%20li%3Aactive%7Bbackground%2Dcolor%3A%230082e6%7D%2Eel%2Dautocomplete%2Dsuggestion%2Eis%2Dloading%20li%3Ahover%2C%2Eel%2Ddropdown%2Dmenu%7Bbackground%2Dcolor%3A%23fff%7D%2Eel%2Dautocomplete%2Dsuggestion%20li%2Edivider%7Bmargin%2Dtop%3A6px%3Bborder%2Dtop%3A1px%20solid%20%23d1dbe5%7D%2Eel%2Dautocomplete%2Dsuggestion%20li%2Edivider%3Alast%2Dchild%7Bmargin%2Dbottom%3A%2D6px%7D%2Eel%2Dautocomplete%2Dsuggestion%2Eis%2Dloading%20li%7Btext%2Dalign%3Acenter%3Bheight%3A100px%3Bline%2Dheight%3A100px%3Bfont%2Dsize%3A20px%3Bcolor%3A%23999%7D%2Eel%2Dautocomplete%2Dsuggestion%2Eis%2Dloading%20%2Eel%2Dicon%2Dloading%7Bvertical%2Dalign%3Amiddle%7D%2Eel%2Dautocomplete%2Dsuggestion%5F%5Fwrap%7Bmax%2Dheight%3A280px%3Boverflow%3Aauto%3Bbackground%2Dcolor%3A%23fff%3Bpadding%3A6px%200%3Bborder%2Dradius%3A2px%7D%2Eel%2Dautocomplete%2Dsuggestion%5F%5Flist%7Bmargin%3A0%3Bpadding%3A0%7D%2Eel%2Ddropdown%7Bcolor%3A%2348576a%3Bfont%2Dsize%3A14px%7D%2Eel%2Ddropdown%20%2Eel%2Dbutton%2Dgroup%7Bdisplay%3Ablock%7D%2Eel%2Ddropdown%20%2Eel%2Ddropdown%5F%5Fcaret%2Dbutton%7Bpadding%2Dright%3A5px%3Bpadding%2Dleft%3A5px%7D%2Eel%2Ddropdown%20%2Eel%2Ddropdown%5F%5Fcaret%2Dbutton%20%2Eel%2Ddropdown%5F%5Ficon%7Bpadding%2Dleft%3A0%7D%2Eel%2Ddropdown%5F%5Ficon%7Bfont%2Dsize%3A12px%3Bmargin%3A0%203px%7D%2Eel%2Ddropdown%2Dmenu%7Bmargin%3A5px%200%3Bborder%3A1px%20solid%20%23d1dbe5%3Bbox%2Dshadow%3A0%202px%204px%20rgba%280%2C0%2C0%2C%2E12%29%2C0%200%206px%20rgba%280%2C0%2C0%2C%2E12%29%3Bpadding%3A6px%200%3Bz%2Dindex%3A10%3Bposition%3Aabsolute%3Btop%3A0%3Bleft%3A0%3Bmin%2Dwidth%3A100px%7D%2Eel%2Ddropdown%2Dmenu%5F%5Fitem%7Blist%2Dstyle%3Anone%3Bline%2Dheight%3A36px%3Bpadding%3A0%2010px%3Bmargin%3A0%3Bcursor%3Apointer%7D%2Eel%2Ddropdown%2Dmenu%5F%5Fitem%3Anot%28%2Eis%2Ddisabled%29%3Ahover%7Bbackground%2Dcolor%3A%23e4e8f1%3Bcolor%3A%2348576a%7D%2Eel%2Ddropdown%2Dmenu%5F%5Fitem%2Eis%2Ddisabled%7Bcursor%3Adefault%3Bcolor%3A%23bfcbd9%3Bpointer%2Devents%3Anone%7D%2Eel%2Ddropdown%2Dmenu%5F%5Fitem%2D%2Ddivided%7Bposition%3Arelative%3Bmargin%2Dtop%3A6px%3Bborder%2Dtop%3A1px%20solid%20%23d1dbe5%7D%2Eel%2Ddropdown%2Dmenu%5F%5Fitem%2D%2Ddivided%3Abefore%7Bcontent%3A%27%27%3Bheight%3A6px%3Bdisplay%3Ablock%3Bmargin%3A0%20%2D10px%3Bbackground%2Dcolor%3A%23fff%7D%2Eel%2Dmenu%2Ditem%2C%2Eel%2Dsubmenu%5F%5Ftitle%7Bheight%3A56px%3Bline%2Dheight%3A56px%3Bfont%2Dsize%3A14px%3Bcolor%3A%2348576a%3Bpadding%3A0%2020px%3Bcursor%3Apointer%3Bposition%3Arelative%3Btransition%3Aborder%2Dcolor%20%2E3s%2Cbackground%2Dcolor%20%2E3s%2Ccolor%20%2E3s%3Bbox%2Dsizing%3Aborder%2Dbox%3Bwhite%2Dspace%3Anowrap%7D%2Eel%2Dmenu%7Bborder%2Dradius%3A2px%3Blist%2Dstyle%3Anone%3Bposition%3Arelative%3Bmargin%3A0%3Bpadding%2Dleft%3A0%3Bbackground%2Dcolor%3A%23eef1f6%7D%2Eel%2Dmenu%3Aafter%2C%2Eel%2Dmenu%3Abefore%7Bdisplay%3Atable%3Bcontent%3A%22%22%7D%2Eel%2Dmenu%3Aafter%7Bclear%3Aboth%7D%2Eel%2Dmenu%20li%7Blist%2Dstyle%3Anone%7D%2Eel%2Dmenu%2D%2Ddark%7Bbackground%2Dcolor%3A%23324157%7D%2Eel%2Dmenu%2D%2Ddark%20%2Eel%2Dmenu%2Ditem%2C%2Eel%2Dmenu%2D%2Ddark%20%2Eel%2Dsubmenu%5F%5Ftitle%7Bcolor%3A%23bfcbd9%7D%2Eel%2Dmenu%2D%2Ddark%20%2Eel%2Dmenu%2Ditem%3Ahover%2C%2Eel%2Dmenu%2D%2Ddark%20%2Eel%2Dsubmenu%5F%5Ftitle%3Ahover%7Bbackground%2Dcolor%3A%2348576a%7D%2Eel%2Dmenu%2D%2Ddark%20%2Eel%2Dsubmenu%20%2Eel%2Dmenu%7Bbackground%2Dcolor%3A%231f2d3d%7D%2Eel%2Dmenu%2D%2Ddark%20%2Eel%2Dsubmenu%20%2Eel%2Dmenu%20%2Eel%2Dmenu%2Ditem%3Ahover%7Bbackground%2Dcolor%3A%2348576a%7D%2Eel%2Dmenu%2D%2Dhorizontal%20%2Eel%2Dmenu%2Ditem%7Bfloat%3Aleft%3Bheight%3A60px%3Bline%2Dheight%3A60px%3Bmargin%3A0%3Bcursor%3Apointer%3Bposition%3Arelative%3Bbox%2Dsizing%3Aborder%2Dbox%3Bborder%2Dbottom%3A5px%20solid%20transparent%7D%2Eel%2Dmenu%2D%2Dhorizontal%20%2Eel%2Dmenu%2Ditem%20a%2C%2Eel%2Dmenu%2D%2Dhorizontal%20%2Eel%2Dmenu%2Ditem%20a%3Ahover%7Bcolor%3Ainherit%7D%2Eel%2Dmenu%2D%2Dhorizontal%20%2Eel%2Dsubmenu%7Bfloat%3Aleft%3Bposition%3Arelative%7D%2Eel%2Dmenu%2D%2Dhorizontal%20%2Eel%2Dsubmenu%3E%2Eel%2Dmenu%7Bposition%3Aabsolute%3Btop%3A65px%3Bleft%3A0%3Bborder%3A1px%20solid%20%23d1dbe5%3Bpadding%3A5px%200%3Bbackground%2Dcolor%3A%23fff%3Bz%2Dindex%3A100%3Bmin%2Dwidth%3A100%25%3Bbox%2Dshadow%3A0%202px%204px%200%20rgba%280%2C0%2C0%2C%2E12%29%2C0%200%206px%200%20rgba%280%2C0%2C0%2C%2E04%29%7D%2Eel%2Dmenu%2D%2Dhorizontal%20%2Eel%2Dsubmenu%20%2Eel%2Dsubmenu%5F%5Ftitle%7Bheight%3A60px%3Bline%2Dheight%3A60px%3Bborder%2Dbottom%3A5px%20solid%20transparent%7D%2Eel%2Dmenu%2D%2Dhorizontal%20%2Eel%2Dsubmenu%20%2Eel%2Dmenu%2Ditem%7Bbackground%2Dcolor%3A%23fff%3Bfloat%3Anone%3Bheight%3A36px%3Bline%2Dheight%3A36px%3Bpadding%3A0%2010px%7D%2Eel%2Dmenu%2D%2Dhorizontal%20%2Eel%2Dsubmenu%20%2Eel%2Dsubmenu%5F%5Ficon%2Darrow%7Bposition%3Astatic%3Bvertical%2Dalign%3Amiddle%3Bmargin%2Dleft%3A5px%3Bcolor%3A%2397a8be%3Bmargin%2Dtop%3A%2D3px%7D%2Eel%2Dmenu%2D%2Dhorizontal%20%2Eel%2Dmenu%2Ditem%3Ahover%2C%2Eel%2Dmenu%2D%2Dhorizontal%20%2Eel%2Dsubmenu%5F%5Ftitle%3Ahover%7Bbackground%2Dcolor%3A%23eef1f6%7D%2Eel%2Dmenu%2D%2Dhorizontal%3E%2Eel%2Dmenu%2Ditem%3Ahover%2C%2Eel%2Dmenu%2D%2Dhorizontal%3E%2Eel%2Dsubmenu%2Eis%2Dactive%20%2Eel%2Dsubmenu%5F%5Ftitle%2C%2Eel%2Dmenu%2D%2Dhorizontal%3E%2Eel%2Dsubmenu%3Ahover%20%2Eel%2Dsubmenu%5F%5Ftitle%7Bborder%2Dbottom%3A5px%20solid%20%2320a0ff%7D%2Eel%2Dmenu%2D%2Dhorizontal%2Eel%2Dmenu%2D%2Ddark%20%2Eel%2Dmenu%2Ditem%3Ahover%2C%2Eel%2Dmenu%2D%2Dhorizontal%2Eel%2Dmenu%2D%2Ddark%20%2Eel%2Dsubmenu%5F%5Ftitle%3Ahover%7Bbackground%2Dcolor%3A%23324157%7D%2Eel%2Dmenu%2D%2Dhorizontal%2Eel%2Dmenu%2D%2Ddark%20%2Eel%2Dsubmenu%20%2Eel%2Dmenu%2Ditem%3Ahover%2C%2Eel%2Dmenu%2D%2Dhorizontal%2Eel%2Dmenu%2D%2Ddark%20%2Eel%2Dsubmenu%20%2Eel%2Dsubmenu%2Dtitle%3Ahover%2C%2Eel%2Dmenu%2Ditem%3Ahover%7Bbackground%2Dcolor%3A%23d1dbe5%7D%2Eel%2Dmenu%2D%2Dhorizontal%2Eel%2Dmenu%2D%2Ddark%20%2Eel%2Dsubmenu%20%2Eel%2Dmenu%2Ditem%2C%2Eel%2Dmenu%2D%2Dhorizontal%2Eel%2Dmenu%2D%2Ddark%20%2Eel%2Dsubmenu%20%2Eel%2Dsubmenu%2Dtitle%7Bcolor%3A%2348576a%7D%2Eel%2Dmenu%2D%2Dhorizontal%2Eel%2Dmenu%2D%2Ddark%20%2Eel%2Dsubmenu%20%2Eel%2Dmenu%2Ditem%2Eis%2Dactive%2C%2Eel%2Dmenu%2Ditem%2Eis%2Dactive%7Bcolor%3A%2320a0ff%7D%2Eel%2Dmenu%2Ditem%20%5Bclass%5E%3Del%2Dicon%2D%5D%7Bvertical%2Dalign%3Abaseline%3Bmargin%2Dright%3A10px%7D%2Eel%2Dmenu%2Ditem%3Afirst%2Dchild%7Bmargin%2Dleft%3A0%7D%2Eel%2Dmenu%2Ditem%3Alast%2Dchild%7Bmargin%2Dright%3A0%7D%2Eel%2Dsubmenu%20%5Bclass%5E%3Del%2Dicon%2D%5D%7Bvertical%2Dalign%3Abaseline%3Bmargin%2Dright%3A10px%7D%2Eel%2Dsubmenu%20%2Eel%2Dmenu%7Bbackground%2Dcolor%3A%23e4e8f1%7D%2Eel%2Dsubmenu%20%2Eel%2Dmenu%2Ditem%3Ahover%2C%2Eel%2Dsubmenu%5F%5Ftitle%3Ahover%7Bbackground%2Dcolor%3A%23d1dbe5%7D%2Eel%2Dsubmenu%20%2Eel%2Dmenu%2Ditem%7Bheight%3A50px%3Bline%2Dheight%3A50px%3Bpadding%3A0%2045px%7D%2Eel%2Dsubmenu%2Eis%2Dopened%3E%2Eel%2Dsubmenu%5F%5Ftitle%20%2Eel%2Dsubmenu%5F%5Ficon%2Darrow%7B%2Dms%2Dtransform%3Arotate%28180deg%29%3Btransform%3ArotateZ%28180deg%29%7D%2Eel%2Dsubmenu%2Eis%2Dactive%20%2Eel%2Dsubmenu%5F%5Ftitle%7Bborder%2Dbottom%2Dcolor%3A%2320a0ff%7D%2Eel%2Dsubmenu%5F%5Ftitle%7Bposition%3Arelative%7D%2Eel%2Dsubmenu%5F%5Ficon%2Darrow%7Bposition%3Aabsolute%3Btop%3A50%25%3Bright%3A20px%3Bmargin%2Dtop%3A%2D7px%3Btransition%3Atransform%20%2E3s%3Bfont%2Dsize%3A12px%7D%2Eel%2Dradio%2C%2Eel%2Dradio%5F%5Finner%2C%2Eel%2Dradio%5F%5Finput%7Bposition%3Arelative%3Bdisplay%3Ainline%2Dblock%7D%2Eel%2Dmenu%2Ditem%2Dgroup%3Eul%7Bpadding%3A0%7D%2Eel%2Dmenu%2Ditem%2Dgroup%5F%5Ftitle%7Bpadding%2Dtop%3A15px%3Bline%2Dheight%3Anormal%3Bfont%2Dsize%3A14px%3Bpadding%2Dleft%3A20px%3Bcolor%3A%2397a8be%7D%2Eel%2Dradio%7Bcolor%3A%231f2d3d%3Bcursor%3Apointer%3Bwhite%2Dspace%3Anowrap%7D%2Eel%2Dradio%2B%2Eel%2Dradio%7Bmargin%2Dleft%3A15px%7D%2Eel%2Dradio%5F%5Finput%7Bwhite%2Dspace%3Anowrap%3Bcursor%3Apointer%3Boutline%3A0%3Bline%2Dheight%3A1%3Bvertical%2Dalign%3Amiddle%7D%2Eel%2Dradio%5F%5Finput%2Eis%2Dfocus%20%2Eel%2Dradio%5F%5Finner%7Bborder%2Dcolor%3A%2320a0ff%7D%2Eel%2Dradio%5F%5Finput%2Eis%2Dchecked%20%2Eel%2Dradio%5F%5Finner%7Bborder%2Dcolor%3A%2320a0ff%3Bbackground%3A%2320a0ff%7D%2Eel%2Dradio%5F%5Finput%2Eis%2Dchecked%20%2Eel%2Dradio%5F%5Finner%3A%3Aafter%7B%2Dms%2Dtransform%3Atranslate%28%2D50%25%2C%2D50%25%29%20scale%281%29%3Btransform%3Atranslate%28%2D50%25%2C%2D50%25%29%20scale%281%29%7D%2Eel%2Dradio%5F%5Finput%2Eis%2Ddisabled%20%2Eel%2Dradio%5F%5Finner%7Bbackground%2Dcolor%3A%23eef1f6%3Bborder%2Dcolor%3A%23d1dbe5%3Bcursor%3Anot%2Dallowed%7D%2Eel%2Dradio%5F%5Finput%2Eis%2Ddisabled%20%2Eel%2Dradio%5F%5Finner%3A%3Aafter%7Bcursor%3Anot%2Dallowed%3Bbackground%2Dcolor%3A%23eef1f6%7D%2Eel%2Dradio%5F%5Finput%2Eis%2Ddisabled%20%2Eel%2Dradio%5F%5Finner%2B%2Eel%2Dradio%5F%5Flabel%7Bcursor%3Anot%2Dallowed%7D%2Eel%2Dradio%5F%5Finput%2Eis%2Ddisabled%2Eis%2Dchecked%20%2Eel%2Dradio%5F%5Finner%7Bbackground%2Dcolor%3A%23d1dbe5%3Bborder%2Dcolor%3A%23d1dbe5%7D%2Eel%2Dradio%5F%5Finner%2C%2Eel%2Dradio%5F%5Finput%2Eis%2Ddisabled%2Eis%2Dchecked%20%2Eel%2Dradio%5F%5Finner%3A%3Aafter%7Bbackground%2Dcolor%3A%23fff%7D%2Eel%2Dradio%5F%5Finput%2Eis%2Ddisabled%2B%2Eel%2Dradio%5F%5Flabel%7Bcolor%3A%23bbb%3Bcursor%3Anot%2Dallowed%7D%2Eel%2Dradio%5F%5Finner%7Bborder%3A1px%20solid%20%23bfcbd9%3Bwidth%3A18px%3Bheight%3A18px%3Bborder%2Dradius%3A50%25%3Bcursor%3Apointer%3Bbox%2Dsizing%3Aborder%2Dbox%7D%2Eel%2Dradio%5F%5Finner%3Ahover%7Bborder%2Dcolor%3A%2320a0ff%7D%2Eel%2Dradio%5F%5Finner%3A%3Aafter%7Bwidth%3A6px%3Bheight%3A6px%3Bborder%2Dradius%3A50%25%3Bbackground%2Dcolor%3A%23fff%3Bcontent%3A%22%22%3Bposition%3Aabsolute%3Bleft%3A50%25%3Btop%3A50%25%3B%2Dms%2Dtransform%3Atranslate%28%2D50%25%2C%2D50%25%29%20scale%280%29%3Btransform%3Atranslate%28%2D50%25%2C%2D50%25%29%20scale%280%29%3Btransition%3Atransform%20%2E15s%20cubic%2Dbezier%28%2E71%2C%2D%2E46%2C%2E88%2C%2E6%29%7D%2Eel%2Dswitch%5F%5Fcore%2C%2Eel%2Dswitch%5F%5Flabel%7Bwidth%3A46px%3Bheight%3A22px%3Bcursor%3Apointer%7D%2Eel%2Dradio%5F%5Foriginal%7Bopacity%3A0%3Boutline%3A0%3Bposition%3Aabsolute%3Bz%2Dindex%3A%2D1%3Btop%3A0%3Bleft%3A0%3Bright%3A0%3Bbottom%3A0%3Bmargin%3A0%7D%2Eel%2Dradio%2Dbutton%2C%2Eel%2Dradio%2Dbutton%5F%5Finner%7Bposition%3Arelative%3Bdisplay%3Ainline%2Dblock%7D%2Eel%2Dradio%5F%5Flabel%7Bfont%2Dsize%3A14px%3Bpadding%2Dleft%3A5px%7D%2Eel%2Dradio%2Dgroup%7Bdisplay%3Ainline%2Dblock%3Bfont%2Dsize%3A0%3Bline%2Dheight%3A1%7D%2Eel%2Dradio%2Dgroup%20%2Eel%2Dradio%7Bfont%2Dsize%3A14px%7D%2Eel%2Dradio%2Dbutton%3Afirst%2Dchild%20%2Eel%2Dradio%2Dbutton%5F%5Finner%7Bborder%2Dleft%3A1px%20solid%20%23bfcbd9%3Bborder%2Dradius%3A4px%200%200%204px%3Bbox%2Dshadow%3Anone%21important%7D%2Eel%2Dradio%2Dbutton%3Alast%2Dchild%20%2Eel%2Dradio%2Dbutton%5F%5Finner%7Bborder%2Dradius%3A0%204px%204px%200%7D%2Eel%2Dradio%2Dbutton%5F%5Finner%7Bline%2Dheight%3A1%3Bwhite%2Dspace%3Anowrap%3Bvertical%2Dalign%3Amiddle%3Bbackground%3A%23fff%3Bborder%3A1px%20solid%20%23bfcbd9%3Bborder%2Dleft%3A0%3Bcolor%3A%231f2d3d%3B%2Dwebkit%2Dappearance%3Anone%3Btext%2Dalign%3Acenter%3Bbox%2Dsizing%3Aborder%2Dbox%3Boutline%3A0%3Bmargin%3A0%3Bcursor%3Apointer%3Btransition%3Aall%20%2E3s%20cubic%2Dbezier%28%2E645%2C%2E045%2C%2E355%2C1%29%3Bpadding%3A10px%2015px%3Bfont%2Dsize%3A14px%3Bborder%2Dradius%3A0%7D%2Eel%2Dradio%2Dbutton%5F%5Finner%3Ahover%7Bcolor%3A%2320a0ff%7D%2Eel%2Dradio%2Dbutton%5F%5Finner%20%5Bclass%2A%3Del%2Dicon%2D%5D%7Bline%2Dheight%3A%2E9%7D%2Eel%2Dradio%2Dbutton%5F%5Finner%20%5Bclass%2A%3Del%2Dicon%2D%5D%2Bspan%7Bmargin%2Dleft%3A5px%7D%2Eel%2Dradio%2Dbutton%5F%5Forig%2Dradio%7Bopacity%3A0%3Boutline%3A0%3Bposition%3Aabsolute%3Bz%2Dindex%3A%2D1%3Bleft%3A%2D999px%7D%2Eel%2Dradio%2Dbutton%5F%5Forig%2Dradio%3Achecked%2B%2Eel%2Dradio%2Dbutton%5F%5Finner%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%2320a0ff%3Bborder%2Dcolor%3A%2320a0ff%3Bbox%2Dshadow%3A%2D1px%200%200%200%20%2320a0ff%7D%2Eel%2Dradio%2Dbutton%5F%5Forig%2Dradio%3Adisabled%2B%2Eel%2Dradio%2Dbutton%5F%5Finner%7Bcolor%3A%23bfcbd9%3Bcursor%3Anot%2Dallowed%3Bbackground%2Dimage%3Anone%3Bbackground%2Dcolor%3A%23eef1f6%3Bborder%2Dcolor%3A%23d1dbe5%3Bbox%2Dshadow%3Anone%7D%2Eel%2Dradio%2Dbutton%2D%2Dlarge%20%2Eel%2Dradio%2Dbutton%5F%5Finner%7Bpadding%3A11px%2019px%3Bfont%2Dsize%3A16px%3Bborder%2Dradius%3A0%7D%2Eel%2Dradio%2Dbutton%2D%2Dsmall%20%2Eel%2Dradio%2Dbutton%5F%5Finner%7Bpadding%3A7px%209px%3Bfont%2Dsize%3A12px%3Bborder%2Dradius%3A0%7D%2Eel%2Dradio%2Dbutton%2D%2Dmini%20%2Eel%2Dradio%2Dbutton%5F%5Finner%7Bpadding%3A4px%3Bfont%2Dsize%3A12px%3Bborder%2Dradius%3A0%7D%2Eel%2Dswitch%7Bdisplay%3Ainline%2Dblock%3Bposition%3Arelative%3Bfont%2Dsize%3A14px%3Bline%2Dheight%3A22px%3Bheight%3A22px%3Bvertical%2Dalign%3Amiddle%7D%2Eel%2Dswitch%5F%5Flabel%2C%2Eel%2Dswitch%5F%5Flabel%20%2A%7Bposition%3Aabsolute%3Bfont%2Dsize%3A14px%3Bdisplay%3Ainline%2Dblock%7D%2Eel%2Dswitch%20%2Elabel%2Dfade%2Denter%2C%2Eel%2Dswitch%20%2Elabel%2Dfade%2Dleave%2Dactive%7Bopacity%3A0%7D%2Eel%2Dswitch%2Eis%2Ddisabled%20%2Eel%2Dswitch%5F%5Fcore%7Bborder%2Dcolor%3A%23e4e8f1%21important%3Bbackground%3A%23e4e8f1%21important%7D%2Eel%2Dswitch%2Eis%2Ddisabled%20%2Eel%2Dswitch%5F%5Fcore%20span%7Bbackground%2Dcolor%3A%23fbfdff%21important%7D%2Eel%2Dswitch%2Eis%2Ddisabled%20%2Eel%2Dswitch%5F%5Fcore%7E%2Eel%2Dswitch%5F%5Flabel%20%2A%7Bcolor%3A%23fbfdff%21important%7D%2Eel%2Dswitch%2Eis%2Ddisabled%20%2Eel%2Dswitch%5F%5Finput%3Achecked%2B%2Eel%2Dswitch%5F%5Fcore%7Bborder%2Dcolor%3A%23e4e8f1%3Bbackground%2Dcolor%3A%23e4e8f1%7D%2Eel%2Dswitch%2Eis%2Ddisabled%20%2Eel%2Dswitch%5F%5Fcore%2C%2Eel%2Dswitch%2Eis%2Ddisabled%20%2Eel%2Dswitch%5F%5Flabel%7Bcursor%3Anot%2Dallowed%7D%2Eel%2Dswitch%5F%5Flabel%7Btransition%3A%2E2s%3Bleft%3A0%3Btop%3A0%3Buser%2Dselect%3Anone%7D%2Eel%2Dcheckbox%2C%2Eel%2Ddate%2Dtable%2C%2Eel%2Dtime%2Dpanel%7B%2Dwebkit%2Duser%2Dselect%3Anone%3B%2Dms%2Duser%2Dselect%3Anone%7D%2Eel%2Dswitch%5F%5Flabel%20%2A%7Bline%2Dheight%3A1%3Btop%3A4px%3Bcolor%3A%23fff%7D%2Eel%2Dswitch%5F%5Flabel%2D%2Dleft%20i%7Bleft%3A6px%7D%2Eel%2Dswitch%5F%5Flabel%2D%2Dright%20i%7Bright%3A6px%7D%2Eel%2Dswitch%5F%5Finput%7Bdisplay%3Anone%7D%2Eel%2Dswitch%5F%5Finput%3Achecked%2B%2Eel%2Dswitch%5F%5Fcore%7Bborder%2Dcolor%3A%2320a0ff%3Bbackground%2Dcolor%3A%2320a0ff%7D%2Eel%2Dswitch%5F%5Fcore%7Bmargin%3A0%3Bdisplay%3Ainline%2Dblock%3Bposition%3Arelative%3Bborder%3A1px%20solid%20%23bfcbd9%3Boutline%3A0%3Bborder%2Dradius%3A12px%3Bbox%2Dsizing%3Aborder%2Dbox%3Bbackground%3A%23bfcbd9%3Btransition%3Aborder%2Dcolor%20%2E3s%2Cbackground%2Dcolor%20%2E3s%7D%2Eel%2Dswitch%5F%5Fcore%20%2Eel%2Dswitch%5F%5Fbutton%7Btop%3A0%3Bleft%3A0%3Bposition%3Aabsolute%3Bborder%2Dradius%3A100%25%3Btransition%3Atransform%20%2E3s%3Bwidth%3A16px%3Bheight%3A16px%3Bbackground%2Dcolor%3A%23fff%7D%2Eel%2Dswitch%2D%2Dwide%20%2Eel%2Dswitch%5F%5Flabel%2Eel%2Dswitch%5F%5Flabel%2D%2Dleft%20span%7Bleft%3A10px%7D%2Eel%2Dswitch%2D%2Dwide%20%2Eel%2Dswitch%5F%5Flabel%2Eel%2Dswitch%5F%5Flabel%2D%2Dright%20span%7Bright%3A10px%7D%2Eel%2Dselect%2Ddropdown%7Bposition%3Aabsolute%3Bz%2Dindex%3A1001%3Bborder%3A1px%20solid%20%23d1dbe5%3Bborder%2Dradius%3A2px%3Bbackground%2Dcolor%3A%23fff%3Bbox%2Dshadow%3A0%202px%204px%20rgba%280%2C0%2C0%2C%2E12%29%2C0%200%206px%20rgba%280%2C0%2C0%2C%2E04%29%3Bbox%2Dsizing%3Aborder%2Dbox%3Bmargin%3A5px%200%7D%2Eel%2Dselect%2Ddropdown%20%2Eel%2Dscrollbar%2Eis%2Dempty%20%2Eel%2Dselect%2Ddropdown%5F%5Flist%7Bpadding%3A0%7D%2Eel%2Dselect%2Ddropdown%2Eis%2Dmultiple%20%2Eel%2Dselect%2Ddropdown%5F%5Fitem%2Eselected%7Bcolor%3A%2320a0ff%3Bbackground%2Dcolor%3A%23fff%7D%2Eel%2Dselect%2Ddropdown%2Eis%2Dmultiple%20%2Eel%2Dselect%2Ddropdown%5F%5Fitem%2Eselected%2Ehover%2C%2Eel%2Dselect%2Ddropdown%5F%5Fitem%2Ehover%7Bbackground%2Dcolor%3A%23e4e8f1%7D%2Eel%2Dselect%2Ddropdown%2Eis%2Dmultiple%20%2Eel%2Dselect%2Ddropdown%5F%5Fitem%2Eselected%3A%3Aafter%7Bposition%3Aabsolute%3Bright%3A10px%3Bfont%2Dfamily%3Aelement%2Dicons%3Bcontent%3A%22%5CE608%22%3Bfont%2Dsize%3A11px%3B%2Dwebkit%2Dfont%2Dsmoothing%3Aantialiased%3B%2Dmoz%2Dosx%2Dfont%2Dsmoothing%3Agrayscale%7D%2Eel%2Dselect%2Ddropdown%5F%5Fempty%7Bpadding%3A10px%200%3Bmargin%3A0%3Btext%2Dalign%3Acenter%3Bcolor%3A%23999%3Bfont%2Dsize%3A14px%7D%2Eel%2Dselect%2Ddropdown%5F%5Fwrap%7Bmax%2Dheight%3A274px%7D%2Eel%2Dselect%2Ddropdown%5F%5Flist%7Blist%2Dstyle%3Anone%3Bpadding%3A6px%200%3Bmargin%3A0%3Bbox%2Dsizing%3Aborder%2Dbox%7D%2Eel%2Dselect%2Ddropdown%5F%5Fitem%7Bfont%2Dsize%3A14px%3Bpadding%3A8px%2010px%3Bposition%3Arelative%3Bwhite%2Dspace%3Anowrap%3Boverflow%3Ahidden%3Btext%2Doverflow%3Aellipsis%3Bcolor%3A%2348576a%3Bheight%3A36px%3Bline%2Dheight%3A1%2E5%3Bbox%2Dsizing%3Aborder%2Dbox%3Bcursor%3Apointer%7D%2Eel%2Dselect%2Ddropdown%5F%5Fitem%2Eselected%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%2320a0ff%7D%2Eel%2Dselect%2Ddropdown%5F%5Fitem%2Eselected%2Ehover%7Bbackground%2Dcolor%3A%231c8de0%7D%2Eel%2Dselect%2Ddropdown%5F%5Fitem%20span%7Bline%2Dheight%3A1%2E5%21important%7D%2Eel%2Dselect%2Ddropdown%5F%5Fitem%2Eis%2Ddisabled%7Bcolor%3A%23bfcbd9%3Bcursor%3Anot%2Dallowed%7D%2Eel%2Dselect%2Ddropdown%5F%5Fitem%2Eis%2Ddisabled%3Ahover%7Bbackground%2Dcolor%3A%23fff%7D%2Eel%2Dselect%2Dgroup%7Bmargin%3A0%3Bpadding%3A0%7D%2Eel%2Dselect%2Dgroup%20%2Eel%2Dselect%2Ddropdown%5F%5Fitem%7Bpadding%2Dleft%3A20px%7D%2Eel%2Dselect%2Dgroup%5F%5Fwrap%7Blist%2Dstyle%3Anone%3Bmargin%3A0%3Bpadding%3A0%7D%2Eel%2Dselect%2Dgroup%5F%5Ftitle%7Bpadding%2Dleft%3A10px%3Bfont%2Dsize%3A12px%3Bcolor%3A%23999%3Bheight%3A30px%3Bline%2Dheight%3A30px%7D%2Eel%2Dselect%7Bdisplay%3Ainline%2Dblock%3Bposition%3Arelative%7D%2Eel%2Dselect%3Ahover%20%2Eel%2Dinput%5F%5Finner%7Bborder%2Dcolor%3A%238391a5%7D%2Eel%2Dselect%20%2Eel%2Dinput%5F%5Finner%7Bcursor%3Apointer%3Bpadding%2Dright%3A35px%7D%2Eel%2Dselect%20%2Eel%2Dinput%5F%5Finner%3Afocus%7Bborder%2Dcolor%3A%2320a0ff%7D%2Eel%2Dselect%20%2Eel%2Dinput%20%2Eel%2Dinput%5F%5Ficon%7Bcolor%3A%23bfcbd9%3Bfont%2Dsize%3A12px%3Btransition%3Atransform%20%2E3s%3B%2Dms%2Dtransform%3AtranslateY%28%2D50%25%29%20rotate%28180deg%29%3Btransform%3AtranslateY%28%2D50%25%29%20rotateZ%28180deg%29%3Bline%2Dheight%3A16px%3Btop%3A50%25%3Bcursor%3Apointer%7D%2Eel%2Dselect%20%2Eel%2Dinput%20%2Eel%2Dinput%5F%5Ficon%2Eis%2Dshow%2Dclose%7Btransition%3A0s%3Bwidth%3A16px%3Bheight%3A16px%3Bfont%2Dsize%3A14px%3Bright%3A8px%3Btext%2Dalign%3Acenter%3B%2Dms%2Dtransform%3AtranslateY%28%2D50%25%29%20rotate%28180deg%29%3Btransform%3AtranslateY%28%2D50%25%29%20rotateZ%28180deg%29%3Bborder%2Dradius%3A100%25%3Bcolor%3A%23bfcbd9%7D%2Eel%2Dselect%20%2Eel%2Dinput%20%2Eel%2Dinput%5F%5Ficon%2Eis%2Dshow%2Dclose%3Ahover%7Bcolor%3A%2397a8be%7D%2Eel%2Dselect%20%2Eel%2Dinput%20%2Eel%2Dinput%5F%5Ficon%2Eis%2Dreverse%7B%2Dms%2Dtransform%3AtranslateY%28%2D50%25%29%3Btransform%3AtranslateY%28%2D50%25%29%7D%2Eel%2Dselect%20%2Eel%2Dinput%2Eis%2Ddisabled%20%2Eel%2Dinput%5F%5Finner%7Bcursor%3Anot%2Dallowed%7D%2Eel%2Dselect%20%2Eel%2Dinput%2Eis%2Ddisabled%20%2Eel%2Dinput%5F%5Finner%3Ahover%7Bborder%2Dcolor%3A%23d1dbe5%7D%2Eel%2Dselect%3E%2Eel%2Dinput%7Bdisplay%3Ablock%7D%2Eel%2Dselect%20%2Eel%2Dtag%5F%5Fclose%7Bmargin%2Dtop%3A%2D2px%7D%2Eel%2Dselect%20%2Eel%2Dtag%7Bheight%3A24px%3Bline%2Dheight%3A24px%3Bbox%2Dsizing%3Aborder%2Dbox%3Bmargin%3A3px%200%203px%206px%7D%2Eel%2Dselect%5F%5Finput%7Bborder%3Anone%3Boutline%3A0%3Bpadding%3A0%3Bmargin%2Dleft%3A10px%3Bcolor%3A%23666%3Bfont%2Dsize%3A14px%3Bvertical%2Dalign%3Abaseline%3B%2Dwebkit%2Dappearance%3Anone%3B%2Dmoz%2Dappearance%3Anone%3Bappearance%3Anone%3Bheight%3A28px%3Bbackground%2Dcolor%3Atransparent%7D%2Eel%2Dselect%5F%5Finput%2Eis%2Dmini%7Bheight%3A14px%7D%2Eel%2Dselect%5F%5Fclose%7Bcursor%3Apointer%3Bposition%3Aabsolute%3Btop%3A8px%3Bz%2Dindex%3A1000%3Bright%3A25px%3Bcolor%3A%23bfcbd9%3Bline%2Dheight%3A18px%3Bfont%2Dsize%3A12px%7D%2Eel%2Dselect%5F%5Fclose%3Ahover%7Bcolor%3A%2397a8be%7D%2Eel%2Dselect%5F%5Ftags%7Bposition%3Aabsolute%3Bline%2Dheight%3Anormal%3Bwhite%2Dspace%3Anormal%3Bz%2Dindex%3A1%3Btop%3A50%25%3B%2Dms%2Dtransform%3AtranslateY%28%2D50%25%29%3Btransform%3AtranslateY%28%2D50%25%29%7D%2Eel%2Dtable%2C%2Eel%2Dtable%20td%2C%2Eel%2Dtable%20th%7Bbox%2Dsizing%3Aborder%2Dbox%3Bposition%3Arelative%7D%2Eel%2Dtable%20%2Eel%2Dtooltip%2Ecell%2C%2Eel%2Dtable%20th%2C%2Eel%2Dtable%20th%3Ediv%7Bwhite%2Dspace%3Anowrap%7D%2Eel%2Dselect%5F%5Ftag%7Bdisplay%3Ainline%2Dblock%3Bheight%3A24px%3Bline%2Dheight%3A24px%3Bfont%2Dsize%3A14px%3Bborder%2Dradius%3A4px%3Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%2320a0ff%7D%2Eel%2Dselect%5F%5Ftag%20%2Eel%2Dicon%2Dclose%7Bfont%2Dsize%3A12px%7D%2Eel%2Dtable%7Boverflow%3Ahidden%3Bwidth%3A100%25%3Bmax%2Dwidth%3A100%25%3Bbackground%2Dcolor%3A%23fff%3Bborder%3A1px%20solid%20%23dfe6ec%3Bfont%2Dsize%3A14px%3Bcolor%3A%231f2d3d%7D%2Eel%2Dtable%20td%2C%2Eel%2Dtable%20th%7Bheight%3A40px%3Bmin%2Dwidth%3A0%3Btext%2Doverflow%3Aellipsis%3Bvertical%2Dalign%3Amiddle%7D%2Eel%2Dtable%3A%3Aafter%2C%2Eel%2Dtable%3A%3Abefore%7Bcontent%3A%27%27%3Bposition%3Aabsolute%3Bbackground%2Dcolor%3A%23dfe6ec%3Bz%2Dindex%3A1%7D%2Eel%2Dtable%20td%2Eis%2Dright%2C%2Eel%2Dtable%20th%2Eis%2Dright%7Btext%2Dalign%3Aright%7D%2Eel%2Dtable%20td%2Eis%2Dleft%2C%2Eel%2Dtable%20th%2Eis%2Dleft%7Btext%2Dalign%3Aleft%7D%2Eel%2Dtable%20td%2Eis%2Dcenter%2C%2Eel%2Dtable%20th%2Eis%2Dcenter%7Btext%2Dalign%3Acenter%7D%2Eel%2Dtable%20td%2C%2Eel%2Dtable%20th%2Eis%2Dleaf%7Bborder%2Dbottom%3A1px%20solid%20%23dfe6ec%7D%2Eel%2Dtable%20td%2Egutter%2C%2Eel%2Dtable%20th%2Egutter%7Bwidth%3A15px%3Bborder%2Dright%2Dwidth%3A0%3Bborder%2Dbottom%2Dwidth%3A0%3Bpadding%3A0%7D%2Eel%2Dtable%20%2Ecell%2C%2Eel%2Dtable%20th%3Ediv%7Bpadding%2Dleft%3A18px%3Bpadding%2Dright%3A18px%3Bbox%2Dsizing%3Aborder%2Dbox%3Btext%2Doverflow%3Aellipsis%7D%2Eel%2Dtable%3A%3Abefore%7Bleft%3A0%3Bbottom%3A0%3Bwidth%3A100%25%3Bheight%3A1px%7D%2Eel%2Dtable%3A%3Aafter%7Btop%3A0%3Bright%3A0%3Bwidth%3A1px%3Bheight%3A100%25%7D%2Eel%2Dtable%20%2Ecaret%2Dwrapper%2C%2Eel%2Dtable%20th%3E%2Ecell%7Bposition%3Arelative%3Bdisplay%3Ainline%2Dblock%3Bvertical%2Dalign%3Amiddle%7D%2Eel%2Dtable%20th%7Boverflow%3Ahidden%3Bbackground%2Dcolor%3A%23eef1f6%3Btext%2Dalign%3Aleft%7D%2Eel%2Dtable%20th%3Ediv%7Bdisplay%3Ainline%2Dblock%3Bline%2Dheight%3A40px%3Boverflow%3Ahidden%7D%2Eel%2Dtable%20td%3Ediv%7Bbox%2Dsizing%3Aborder%2Dbox%7D%2Eel%2Dtable%20th%2Erequired%3Ediv%3A%3Abefore%7Bdisplay%3Ainline%2Dblock%3Bcontent%3A%22%22%3Bwidth%3A8px%3Bheight%3A8px%3Bborder%2Dradius%3A50%25%3Bbackground%3A%23ff4d51%3Bmargin%2Dright%3A5px%3Bvertical%2Dalign%3Amiddle%7D%2Eel%2Dtable%20th%3E%2Ecell%7Bword%2Dwrap%3Anormal%3Btext%2Doverflow%3Aellipsis%3Bline%2Dheight%3A20px%3Bwidth%3A100%25%3Bbox%2Dsizing%3Aborder%2Dbox%7D%2Eel%2Dtable%20th%3E%2Ecell%2Ehighlight%7Bcolor%3A%2320a0ff%7D%2Eel%2Dtable%20%2Ecaret%2Dwrapper%7Bcursor%3Apointer%3Bmargin%2Dleft%3A5px%3Bmargin%2Dtop%3A%2D2px%3Bwidth%3A16px%3Bheight%3A34px%3Boverflow%3Avisible%3Boverflow%3Ainitial%7D%2Eel%2Dtable%20%2Ecell%2C%2Eel%2Dtable%5F%5Fheader%2Dwrapper%7Boverflow%3Ahidden%7D%2Eel%2Dtable%20%2Esort%2Dcaret%7Bdisplay%3Ainline%2Dblock%3Bwidth%3A0%3Bheight%3A0%3Bborder%3A0%3Bcontent%3A%22%22%3Bposition%3Aabsolute%3Bleft%3A3px%3Bz%2Dindex%3A2%7D%2Eel%2Dtable%20%2Esort%2Dcaret%2Eascending%2C%2Eel%2Dtable%20%2Esort%2Dcaret%2Edescending%7Bborder%2Dright%3A5px%20solid%20transparent%3Bborder%2Dleft%3A5px%20solid%20transparent%7D%2Eel%2Dtable%20%2Esort%2Dcaret%2Eascending%7Btop%3A11px%3Bborder%2Dtop%3Anone%3Bborder%2Dbottom%3A5px%20solid%20%2397a8be%7D%2Eel%2Dtable%20%2Esort%2Dcaret%2Edescending%7Bbottom%3A11px%3Bborder%2Dtop%3A5px%20solid%20%2397a8be%3Bborder%2Dbottom%3Anone%7D%2Eel%2Dtable%20%2Eascending%20%2Esort%2Dcaret%2Eascending%7Bborder%2Dbottom%2Dcolor%3A%2348576a%7D%2Eel%2Dtable%20%2Edescending%20%2Esort%2Dcaret%2Edescending%7Bborder%2Dtop%2Dcolor%3A%2348576a%7D%2Eel%2Dtable%20td%2Egutter%7Bwidth%3A0%7D%2Eel%2Dtable%20%2Ecell%7Bwhite%2Dspace%3Anormal%3Bword%2Dbreak%3Abreak%2Dall%3Bline%2Dheight%3A24px%7D%2Eel%2Dtable%20tr%20input%5Btype%3Dcheckbox%5D%7Bmargin%3A0%7D%2Eel%2Dtable%20tr%7Bbackground%2Dcolor%3A%23fff%7D%2Eel%2Dtable%20%2Ehidden%2Dcolumns%7Bvisibility%3Ahidden%3Bposition%3Aabsolute%3Bz%2Dindex%3A%2D1%7D%2Eel%2Dtable%5F%5Fempty%2Dblock%7Bposition%3Arelative%3Bmin%2Dheight%3A60px%3Btext%2Dalign%3Acenter%3Bwidth%3A100%25%3Bheight%3A100%25%7D%2Eel%2Dtable%5F%5Fempty%2Dtext%7Bposition%3Aabsolute%3Bleft%3A50%25%3Btop%3A50%25%3B%2Dms%2Dtransform%3Atranslate%28%2D50%25%2C%2D50%25%29%3Btransform%3Atranslate%28%2D50%25%2C%2D50%25%29%3Bcolor%3A%235e7382%7D%2Eel%2Dtable%5F%5Fexpand%2Dcolumn%20%2Ecell%7Bpadding%3A0%3Btext%2Dalign%3Acenter%7D%2Eel%2Dtable%5F%5Fexpand%2Dicon%7Bposition%3Arelative%3Bcursor%3Apointer%3Bcolor%3A%23666%3Bfont%2Dsize%3A12px%3Btransition%3Atransform%20%2E2s%20ease%2Din%2Dout%3Bheight%3A40px%7D%2Eel%2Dtable%5F%5Ffixed%2Dheader%2Dwrapper%20thead%20div%2C%2Eel%2Dtable%5F%5Fheader%2Dwrapper%20thead%20div%7Bcolor%3A%231f2d3d%3Bbackground%2Dcolor%3A%23eef1f6%7D%2Eel%2Dtable%5F%5Fexpand%2Dicon%3E%2Eel%2Dicon%7Bposition%3Aabsolute%3Bleft%3A50%25%3Btop%3A50%25%3Bmargin%2Dleft%3A%2D5px%3Bmargin%2Dtop%3A%2D5px%7D%2Eel%2Dtable%5F%5Fexpand%2Dicon%2D%2Dexpanded%7B%2Dms%2Dtransform%3Arotate%2890deg%29%3Btransform%3Arotate%2890deg%29%7D%2Eel%2Dtable%5F%5Fexpanded%2Dcell%7Bpadding%3A20px%2050px%3Bbackground%2Dcolor%3A%23fbfdff%3Bbox%2Dshadow%3Ainset%200%202px%200%20%23f4f4f4%7D%2Eel%2Dtable%5F%5Fexpanded%2Dcell%3Ahover%7Bbackground%2Dcolor%3A%23fbfdff%21important%7D%2Eel%2Dtable%2D%2Dfit%7Bborder%2Dright%3A0%3Bborder%2Dbottom%3A0%7D%2Eel%2Dtable%2D%2Dborder%20th%2C%2Eel%2Dtable%5F%5Ffixed%2Dright%2Dpatch%7Bborder%2Dbottom%3A1px%20solid%20%23dfe6ec%7D%2Eel%2Dtable%2D%2Dfit%20td%2Egutter%2C%2Eel%2Dtable%2D%2Dfit%20th%2Egutter%7Bborder%2Dright%2Dwidth%3A1px%7D%2Eel%2Dtable%2D%2Dborder%20td%2C%2Eel%2Dtable%2D%2Dborder%20th%7Bborder%2Dright%3A1px%20solid%20%23dfe6ec%7D%2Eel%2Dtable%5F%5Ffixed%2C%2Eel%2Dtable%5F%5Ffixed%2Dright%7Bposition%3Aabsolute%3Btop%3A0%3Bleft%3A0%3Bbox%2Dshadow%3A1px%200%208px%20%23d3d4d6%3Boverflow%2Dx%3Ahidden%7D%2Eel%2Dtable%5F%5Ffixed%2Dright%3A%3Abefore%2C%2Eel%2Dtable%5F%5Ffixed%3A%3Abefore%7Bcontent%3A%27%27%3Bposition%3Aabsolute%3Bleft%3A0%3Bbottom%3A0%3Bwidth%3A100%25%3Bheight%3A1px%3Bbackground%2Dcolor%3A%23dfe6ec%3Bz%2Dindex%3A4%7D%2Eel%2Dtable%5F%5Ffixed%2Dright%2Dpatch%7Bposition%3Aabsolute%3Btop%3A%2D1px%3Bright%3A0%3Bbackground%2Dcolor%3A%23eef1f6%7D%2Eel%2Dtable%5F%5Ffixed%2Dright%7Btop%3A0%3Bleft%3Aauto%3Bright%3A0%3Bbox%2Dshadow%3A%2D1px%200%208px%20%23d3d4d6%7D%2Eel%2Dtable%5F%5Ffixed%2Dright%20%2Eel%2Dtable%5F%5Ffixed%2Dbody%2Dwrapper%2C%2Eel%2Dtable%5F%5Ffixed%2Dright%20%2Eel%2Dtable%5F%5Ffixed%2Dheader%2Dwrapper%7Bleft%3Aauto%3Bright%3A0%7D%2Eel%2Dtable%5F%5Ffixed%2Dheader%2Dwrapper%7Bposition%3Aabsolute%3Bleft%3A0%3Btop%3A0%3Bz%2Dindex%3A3%7D%2Eel%2Dtable%5F%5Ffixed%2Dbody%2Dwrapper%7Bposition%3Aabsolute%3Bleft%3A0%3Btop%3A37px%3Boverflow%3Ahidden%3Bz%2Dindex%3A3%7D%2Eel%2Dtable%5F%5Fbody%2Dwrapper%2C%2Eel%2Dtable%5F%5Fheader%2Dwrapper%7Bwidth%3A100%25%7D%2Eel%2Dtable%5F%5Fbody%2C%2Eel%2Dtable%5F%5Fheader%7Btable%2Dlayout%3Afixed%7D%2Eel%2Dtable%5F%5Fbody%2Dwrapper%7Boverflow%3Aauto%3Bposition%3Arelative%7D%2Eel%2Dtable%2D%2Dstriped%20%2Eel%2Dtable%5F%5Fbody%20tr%3Anth%2Dchild%282n%29%20td%7Bbackground%3A%23FAFAFA%3Bbackground%2Dclip%3Apadding%2Dbox%7D%2Eel%2Dtable%2D%2Dstriped%20%2Eel%2Dtable%5F%5Fbody%20tr%3Anth%2Dchild%282n%29%2Ecurrent%2Drow%20td%7Bbackground%3A%23edf7ff%7D%2Eel%2Dtable%5F%5Fbody%20tr%2Ehover%2Drow%3Etd%7Bbackground%2Dcolor%3A%23eef1f6%7D%2Eel%2Dtable%5F%5Fbody%20tr%2Ecurrent%2Drow%3Etd%7Bbackground%3A%23edf7ff%7D%2Eel%2Dtable%5F%5Fcolumn%2Dresize%2Dproxy%7Bposition%3Aabsolute%3Bleft%3A200px%3Btop%3A0%3Bbottom%3A0%3Bwidth%3A0%3Bborder%2Dleft%3A1px%20solid%20%23dfe6ec%3Bz%2Dindex%3A10%7D%2Eel%2Dcheckbox%2C%2Eel%2Dcheckbox%5F%5Finput%7Bcursor%3Apointer%3Bdisplay%3Ainline%2Dblock%3Bposition%3Arelative%3Bwhite%2Dspace%3Anowrap%7D%2Eel%2Dtable%5F%5Fcolumn%2Dfilter%2Dtrigger%7Bdisplay%3Ainline%2Dblock%3Bline%2Dheight%3A34px%3Bmargin%2Dleft%3A5px%3Bcursor%3Apointer%7D%2Eel%2Dtable%5F%5Fcolumn%2Dfilter%2Dtrigger%20i%7Bcolor%3A%2397a8be%7D%2Eel%2Dtable%2D%2Denable%2Drow%2Dtransition%20%2Eel%2Dtable%5F%5Fbody%20td%7Btransition%3Abackground%2Dcolor%20%2E25s%20ease%7D%2Eel%2Dtable%2D%2Denable%2Drow%2Dhover%20%2Eel%2Dtable%5F%5Fbody%20tr%3Ahover%3Etd%7Bbackground%2Dcolor%3A%23eef1f6%3Bbackground%2Dclip%3Apadding%2Dbox%7D%2Eel%2Dtable%2D%2Dfluid%2Dheight%20%2Eel%2Dtable%5F%5Ffixed%2C%2Eel%2Dtable%2D%2Dfluid%2Dheight%20%2Eel%2Dtable%5F%5Ffixed%2Dright%7Bbottom%3A0%3Boverflow%3Ahidden%7D%2Eel%2Dcheckbox%7Bcolor%3A%231f2d3d%3B%2Dmoz%2Duser%2Dselect%3Anone%7D%2Eel%2Dcheckbox%2B%2Eel%2Dcheckbox%7Bmargin%2Dleft%3A15px%7D%2Eel%2Dcheckbox%5F%5Finput%7Boutline%3A0%3Bline%2Dheight%3A1%3Bvertical%2Dalign%3Amiddle%7D%2Eel%2Dcheckbox%5F%5Finput%2Eis%2Dindeterminate%20%2Eel%2Dcheckbox%5F%5Finner%7Bbackground%2Dcolor%3A%2320a0ff%3Bborder%2Dcolor%3A%230190fe%7D%2Eel%2Dcheckbox%5F%5Finput%2Eis%2Dindeterminate%20%2Eel%2Dcheckbox%5F%5Finner%3A%3Abefore%7Bcontent%3A%27%27%3Bposition%3Aabsolute%3Bdisplay%3Ablock%3Bborder%3A1px%20solid%20%23fff%3Bmargin%2Dtop%3A%2D1px%3Bleft%3A3px%3Bright%3A3px%3Btop%3A50%25%7D%2Eel%2Dcheckbox%5F%5Finput%2Eis%2Dindeterminate%20%2Eel%2Dcheckbox%5F%5Finner%3A%3Aafter%7Bdisplay%3Anone%7D%2Eel%2Dcheckbox%5F%5Finput%2Eis%2Dfocus%20%2Eel%2Dcheckbox%5F%5Finner%7Bborder%2Dcolor%3A%2320a0ff%7D%2Eel%2Dcheckbox%5F%5Finput%2Eis%2Dchecked%20%2Eel%2Dcheckbox%5F%5Finner%7Bbackground%2Dcolor%3A%2320a0ff%3Bborder%2Dcolor%3A%230190fe%7D%2Eel%2Dcheckbox%5F%5Finput%2Eis%2Dchecked%20%2Eel%2Dcheckbox%5F%5Finner%3A%3Aafter%7B%2Dms%2Dtransform%3Arotate%2845deg%29%20scaleY%281%29%3Btransform%3Arotate%2845deg%29%20scaleY%281%29%7D%2Eel%2Dcheckbox%5F%5Finput%2Eis%2Ddisabled%20%2Eel%2Dcheckbox%5F%5Finner%7Bbackground%2Dcolor%3A%23eef1f6%3Bborder%2Dcolor%3A%23d1dbe5%3Bcursor%3Anot%2Dallowed%7D%2Eel%2Dcheckbox%5F%5Finput%2Eis%2Ddisabled%20%2Eel%2Dcheckbox%5F%5Finner%3A%3Aafter%7Bcursor%3Anot%2Dallowed%3Bborder%2Dcolor%3A%23eef1f6%7D%2Eel%2Dcheckbox%5F%5Finput%2Eis%2Ddisabled%20%2Eel%2Dcheckbox%5F%5Finner%2B%2Eel%2Dcheckbox%5F%5Flabel%7Bcursor%3Anot%2Dallowed%7D%2Eel%2Dcheckbox%5F%5Finput%2Eis%2Ddisabled%2Eis%2Dchecked%20%2Eel%2Dcheckbox%5F%5Finner%7Bbackground%2Dcolor%3A%23d1dbe5%3Bborder%2Dcolor%3A%23d1dbe5%7D%2Eel%2Dcheckbox%5F%5Finput%2Eis%2Ddisabled%2Eis%2Dchecked%20%2Eel%2Dcheckbox%5F%5Finner%3A%3Aafter%7Bborder%2Dcolor%3A%23fff%7D%2Eel%2Dcheckbox%5F%5Finput%2Eis%2Ddisabled%2Eis%2Dindeterminate%20%2Eel%2Dcheckbox%5F%5Finner%7Bbackground%2Dcolor%3A%23d1dbe5%3Bborder%2Dcolor%3A%23d1dbe5%7D%2Eel%2Dcheckbox%5F%5Finput%2Eis%2Ddisabled%2Eis%2Dindeterminate%20%2Eel%2Dcheckbox%5F%5Finner%3A%3Abefore%7Bborder%2Dcolor%3A%23fff%7D%2Eel%2Dcheckbox%5F%5Finput%2Eis%2Ddisabled%2B%2Eel%2Dcheckbox%5F%5Flabel%7Bcolor%3A%23bbb%3Bcursor%3Anot%2Dallowed%7D%2Eel%2Dcheckbox%5F%5Finner%7Bdisplay%3Ainline%2Dblock%3Bposition%3Arelative%3Bborder%3A1px%20solid%20%23bfcbd9%3Bborder%2Dradius%3A4px%3Bbox%2Dsizing%3Aborder%2Dbox%3Bwidth%3A18px%3Bheight%3A18px%3Bbackground%2Dcolor%3A%23fff%3Bz%2Dindex%3A1%3Btransition%3Aborder%2Dcolor%20%2E25s%20cubic%2Dbezier%28%2E71%2C%2D%2E46%2C%2E29%2C1%2E46%29%2Cbackground%2Dcolor%20%2E25s%20cubic%2Dbezier%28%2E71%2C%2D%2E46%2C%2E29%2C1%2E46%29%7D%2Eel%2Dcheckbox%5F%5Finner%3Ahover%7Bborder%2Dcolor%3A%2320a0ff%7D%2Eel%2Dcheckbox%5F%5Finner%3A%3Aafter%7Bbox%2Dsizing%3Acontent%2Dbox%3Bcontent%3A%22%22%3Bborder%3A2px%20solid%20%23fff%3Bborder%2Dleft%3A0%3Bborder%2Dtop%3A0%3Bheight%3A8px%3Bleft%3A5px%3Bposition%3Aabsolute%3Btop%3A1px%3B%2Dms%2Dtransform%3Arotate%2845deg%29%20scaleY%280%29%3Btransform%3Arotate%2845deg%29%20scaleY%280%29%3Bwidth%3A4px%3Btransition%3Atransform%20%2E15s%20cubic%2Dbezier%28%2E71%2C%2D%2E46%2C%2E88%2C%2E6%29%20%2E05s%3B%2Dms%2Dtransform%2Dorigin%3Acenter%3Btransform%2Dorigin%3Acenter%7D%2Eel%2Dcheckbox%5F%5Foriginal%7Bopacity%3A0%3Boutline%3A0%3Bposition%3Aabsolute%3Bmargin%3A0%3Bleft%3A%2D999px%7D%2Eel%2Dcheckbox%5F%5Flabel%7Bfont%2Dsize%3A14px%3Bpadding%2Dleft%3A5px%7D%2Eel%2Dtable%2Dcolumn%2D%2Dselection%20%2Ecell%7Bpadding%2Dleft%3A14px%3Bpadding%2Dright%3A14px%7D%2Eel%2Dtable%2Dfilter%7Bborder%3A1px%20solid%20%23d1dbe5%3Bborder%2Dradius%3A2px%3Bbackground%2Dcolor%3A%23fff%3Bbox%2Dshadow%3A0%202px%204px%20rgba%280%2C0%2C0%2C%2E12%29%2C0%200%206px%20rgba%280%2C0%2C0%2C%2E12%29%3Bbox%2Dsizing%3Aborder%2Dbox%3Bmargin%3A2px%200%7D%2Eel%2Dtable%2Dfilter%5F%5Flist%7Bpadding%3A5px%200%3Bmargin%3A0%3Blist%2Dstyle%3Anone%3Bmin%2Dwidth%3A100px%7D%2Eel%2Dtable%2Dfilter%5F%5Flist%2Ditem%7Bline%2Dheight%3A36px%3Bpadding%3A0%2010px%3Bcursor%3Apointer%3Bfont%2Dsize%3A14px%7D%2Eel%2Dtable%2Dfilter%5F%5Flist%2Ditem%3Ahover%7Bbackground%2Dcolor%3A%23e4e8f1%3Bcolor%3A%2348576a%7D%2Eel%2Dtable%2Dfilter%5F%5Flist%2Ditem%2Eis%2Dactive%7Bbackground%2Dcolor%3A%2320a0ff%3Bcolor%3A%23fff%7D%2Eel%2Dtable%2Dfilter%5F%5Fcontent%7Bmin%2Dwidth%3A100px%7D%2Eel%2Dtable%2Dfilter%5F%5Fbottom%7Bborder%2Dtop%3A1px%20solid%20%23d1dbe5%3Bpadding%3A8px%7D%2Eel%2Dtable%2Dfilter%5F%5Fbottom%20button%7Bbackground%3A0%200%3Bborder%3Anone%3Bcolor%3A%238391a5%3Bcursor%3Apointer%3Bfont%2Dsize%3A14px%3Bpadding%3A0%203px%7D%2Eel%2Dtable%2Dfilter%5F%5Fbottom%20button%3Ahover%7Bcolor%3A%2320a0ff%7D%2Eel%2Dtable%2Dfilter%5F%5Fbottom%20button%3Afocus%7Boutline%3A0%7D%2Eel%2Dtable%2Dfilter%5F%5Fbottom%20button%2Eis%2Ddisabled%7Bcolor%3A%23bfcbd9%3Bcursor%3Anot%2Dallowed%7D%2Eel%2Dtable%2Dfilter%5F%5Fcheckbox%2Dgroup%7Bpadding%3A10px%7D%2Eel%2Dtable%2Dfilter%5F%5Fcheckbox%2Dgroup%20%2Eel%2Dcheckbox%7Bdisplay%3Ablock%3Bmargin%2Dbottom%3A8px%3Bmargin%2Dleft%3A5px%7D%2Eel%2Dtable%2Dfilter%5F%5Fcheckbox%2Dgroup%20%2Eel%2Dcheckbox%3Alast%2Dchild%7Bmargin%2Dbottom%3A0%7D%2Eel%2Ddate%2Dtable%7Bfont%2Dsize%3A12px%3Bmin%2Dwidth%3A224px%3B%2Dmoz%2Duser%2Dselect%3Anone%3Buser%2Dselect%3Anone%7D%2Eel%2Ddate%2Dtable%20td%7Bwidth%3A32px%3Bheight%3A32px%3Bbox%2Dsizing%3Aborder%2Dbox%3Btext%2Dalign%3Acenter%3Bcursor%3Apointer%7D%2Eel%2Ddate%2Dtable%20td%2Enext%2Dmonth%2C%2Eel%2Ddate%2Dtable%20td%2Eprev%2Dmonth%7Bcolor%3A%23ddd%7D%2Eel%2Ddate%2Dtable%20td%2Etoday%7Bcolor%3A%2320a0ff%3Bposition%3Arelative%7D%2Eel%2Ddate%2Dtable%20td%2Etoday%3Abefore%7Bcontent%3A%22%20%22%3Bposition%3Aabsolute%3Btop%3A0%3Bright%3A0%3Bwidth%3A0%3Bheight%3A0%3Bborder%2Dtop%3A%2E5em%20solid%20%2320a0ff%3Bborder%2Dleft%3A%2E5em%20solid%20transparent%7D%2Eel%2Dmonth%2Dtable%20td%20%2Ecell%2C%2Eel%2Dyear%2Dtable%20td%20%2Ecell%7Bwidth%3A48px%3Bheight%3A32px%3Bdisplay%3Ablock%3Bline%2Dheight%3A32px%7D%2Eel%2Ddate%2Dtable%20td%2Eavailable%3Ahover%7Bbackground%2Dcolor%3A%23e4e8f1%7D%2Eel%2Ddate%2Dtable%20td%2Ein%2Drange%7Bbackground%2Dcolor%3A%23d2ecff%7D%2Eel%2Ddate%2Dtable%20td%2Ein%2Drange%3Ahover%7Bbackground%2Dcolor%3A%23afddff%7D%2Eel%2Ddate%2Dtable%20td%2Ecurrent%3Anot%28%2Edisabled%29%2C%2Eel%2Ddate%2Dtable%20td%2Eend%2Ddate%2C%2Eel%2Ddate%2Dtable%20td%2Estart%2Ddate%7Bbackground%2Dcolor%3A%2320a0ff%21important%3Bcolor%3A%23fff%7D%2Eel%2Ddate%2Dtable%20td%2Edisabled%7Bbackground%2Dcolor%3A%23f4f4f4%3Bopacity%3A1%3Bcursor%3Anot%2Dallowed%3Bcolor%3A%23ccc%7D%2Eel%2Dfade%2Din%2Denter%2C%2Eel%2Dfade%2Din%2Dleave%2Dactive%2C%2Efade%2Din%2Dlinear%2Denter%2C%2Efade%2Din%2Dlinear%2Dleave%2C%2Efade%2Din%2Dlinear%2Dleave%2Dactive%7Bopacity%3A0%7D%2Eel%2Ddate%2Dtable%20td%2Eweek%7Bfont%2Dsize%3A80%25%3Bcolor%3A%238391a5%7D%2Eel%2Dmonth%2Dtable%2C%2Eel%2Dyear%2Dtable%7Bfont%2Dsize%3A12px%3Bmargin%3A%2D1px%3Bborder%2Dcollapse%3Acollapse%7D%2Eel%2Ddate%2Dtable%20th%7Bpadding%3A5px%3Bcolor%3A%238391a5%3Bfont%2Dweight%3A400%7D%2Eel%2Ddate%2Dtable%2Eis%2Dweek%2Dmode%20%2Eel%2Ddate%2Dtable%5F%5Frow%3Ahover%7Bbackground%2Dcolor%3A%23e4e8f1%7D%2Eel%2Ddate%2Dtable%2Eis%2Dweek%2Dmode%20%2Eel%2Ddate%2Dtable%5F%5Frow%2Ecurrent%7Bbackground%2Dcolor%3A%23d2ecff%7D%2Eel%2Dmonth%2Dtable%20td%7Btext%2Dalign%3Acenter%3Bpadding%3A20px%203px%3Bcursor%3Apointer%7D%2Eel%2Dmonth%2Dtable%20td%20%2Ecell%7Bcolor%3A%2348576a%7D%2Eel%2Dmonth%2Dtable%20td%20%2Ecell%3Ahover%7Bbackground%2Dcolor%3A%23e4e8f1%7D%2Eel%2Dmonth%2Dtable%20td%2Edisabled%20%2Ecell%7Bbackground%2Dcolor%3A%23f4f4f4%3Bcursor%3Anot%2Dallowed%3Bcolor%3A%23ccc%7D%2Eel%2Dmonth%2Dtable%20td%2Ecurrent%3Anot%28%2Edisabled%29%20%2Ecell%7Bbackground%2Dcolor%3A%2320a0ff%21important%3Bcolor%3A%23fff%7D%2Eel%2Dyear%2Dtable%20%2Eel%2Dicon%7Bcolor%3A%2397a8be%7D%2Eel%2Dyear%2Dtable%20td%7Btext%2Dalign%3Acenter%3Bpadding%3A20px%203px%3Bcursor%3Apointer%7D%2Eel%2Dyear%2Dtable%20td%20%2Ecell%7Bcolor%3A%2348576a%7D%2Eel%2Dyear%2Dtable%20td%20%2Ecell%3Ahover%7Bbackground%2Dcolor%3A%23e4e8f1%7D%2Eel%2Dyear%2Dtable%20td%2Edisabled%20%2Ecell%7Bbackground%2Dcolor%3A%23f4f4f4%3Bcursor%3Anot%2Dallowed%3Bcolor%3A%23ccc%7D%2Eel%2Dyear%2Dtable%20td%2Ecurrent%3Anot%28%2Edisabled%29%20%2Ecell%7Bbackground%2Dcolor%3A%2320a0ff%21important%3Bcolor%3A%23fff%7D%2Eel%2Ddate%2Drange%2Dpicker%7Bmin%2Dwidth%3A520px%7D%2Eel%2Ddate%2Drange%2Dpicker%20table%7Btable%2Dlayout%3Afixed%3Bwidth%3A100%25%7D%2Eel%2Ddate%2Drange%2Dpicker%20%2Eel%2Dpicker%2Dpanel%5F%5Fbody%7Bmin%2Dwidth%3A513px%7D%2Eel%2Ddate%2Drange%2Dpicker%20%2Eel%2Dpicker%2Dpanel%5F%5Fcontent%7Bmargin%3A0%7D%2Eel%2Ddate%2Drange%2Dpicker%2Ehas%2Dsidebar%2Ehas%2Dtime%7Bmin%2Dwidth%3A766px%7D%2Eel%2Ddate%2Drange%2Dpicker%2Ehas%2Dsidebar%7Bmin%2Dwidth%3A620px%7D%2Eel%2Ddate%2Drange%2Dpicker%2Ehas%2Dtime%7Bmin%2Dwidth%3A660px%7D%2Eel%2Ddate%2Drange%2Dpicker%5F%5Fheader%7Bposition%3Arelative%3Btext%2Dalign%3Acenter%3Bheight%3A28px%7D%2Eel%2Ddate%2Drange%2Dpicker%5F%5Fheader%20button%7Bfloat%3Aleft%7D%2Eel%2Ddate%2Drange%2Dpicker%5F%5Fheader%20div%7Bfont%2Dsize%3A14px%3Bmargin%2Dright%3A50px%7D%2Eel%2Ddate%2Drange%2Dpicker%5F%5Fcontent%7Bfloat%3Aleft%3Bwidth%3A50%25%3Bbox%2Dsizing%3Aborder%2Dbox%3Bmargin%3A0%3Bpadding%3A16px%7D%2Eel%2Ddate%2Drange%2Dpicker%5F%5Fcontent%2Eis%2Dright%20%2Eel%2Ddate%2Drange%2Dpicker%5F%5Fheader%20button%7Bfloat%3Aright%7D%2Eel%2Ddate%2Drange%2Dpicker%5F%5Fcontent%2Eis%2Dright%20%2Eel%2Ddate%2Drange%2Dpicker%5F%5Fheader%20div%7Bmargin%2Dleft%3A50px%3Bmargin%2Dright%3A50px%7D%2Eel%2Ddate%2Drange%2Dpicker%5F%5Fcontent%2Eis%2Dleft%7Bborder%2Dright%3A1px%20solid%20%23e4e4e4%7D%2Eel%2Ddate%2Drange%2Dpicker%5F%5Feditors%2Dwrap%7Bbox%2Dsizing%3Aborder%2Dbox%3Bdisplay%3Atable%2Dcell%7D%2Eel%2Ddate%2Drange%2Dpicker%5F%5Feditors%2Dwrap%2Eis%2Dright%7Btext%2Dalign%3Aright%7D%2Eel%2Ddate%2Drange%2Dpicker%5F%5Ftime%2Dheader%7Bposition%3Arelative%3Bborder%2Dbottom%3A1px%20solid%20%23e4e4e4%3Bfont%2Dsize%3A12px%3Bpadding%3A8px%205px%205px%3Bdisplay%3Atable%3Bwidth%3A100%25%3Bbox%2Dsizing%3Aborder%2Dbox%7D%2Eel%2Ddate%2Drange%2Dpicker%5F%5Ftime%2Dheader%3E%2Eel%2Dicon%2Darrow%2Dright%7Bfont%2Dsize%3A20px%3Bvertical%2Dalign%3Amiddle%3Bdisplay%3Atable%2Dcell%3Bcolor%3A%2397a8be%7D%2Eel%2Ddate%2Drange%2Dpicker%5F%5Ftime%2Dpicker%2Dwrap%7Bposition%3Arelative%3Bdisplay%3Atable%2Dcell%3Bpadding%3A0%205px%7D%2Eel%2Ddate%2Drange%2Dpicker%5F%5Ftime%2Dpicker%2Dwrap%20%2Eel%2Dpicker%2Dpanel%7Bposition%3Aabsolute%3Btop%3A13px%3Bright%3A0%3Bz%2Dindex%3A1%3Bbackground%3A%23fff%7D%2Eel%2Dtime%2Drange%2Dpicker%7Bmin%2Dwidth%3A354px%3Boverflow%3Avisible%7D%2Eel%2Dtime%2Drange%2Dpicker%5F%5Fcontent%7Bposition%3Arelative%3Btext%2Dalign%3Acenter%3Bpadding%3A10px%7D%2Eel%2Dtime%2Drange%2Dpicker%5F%5Fcell%7Bbox%2Dsizing%3Aborder%2Dbox%3Bmargin%3A0%3Bpadding%3A4px%207px%207px%3Bwidth%3A50%25%3Bdisplay%3Ainline%2Dblock%7D%2Eel%2Dtime%2Drange%2Dpicker%5F%5Fheader%7Bmargin%2Dbottom%3A5px%3Btext%2Dalign%3Acenter%3Bfont%2Dsize%3A14px%7D%2Eel%2Dtime%2Drange%2Dpicker%5F%5Fbody%7Bborder%2Dradius%3A2px%3Bborder%3A1px%20solid%20%23d1dbe5%7D%2Eel%2Dpicker%2Dpanel%7Bcolor%3A%2348576a%3Bborder%3A1px%20solid%20%23d1dbe5%3Bbox%2Dshadow%3A0%202px%206px%20%23ccc%3Bbackground%3A%23fff%3Bborder%2Dradius%3A2px%3Bline%2Dheight%3A20px%3Bmargin%3A5px%200%7D%2Eel%2Dpicker%2Dpanel%5F%5Fbody%2Dwrapper%3A%3Aafter%2C%2Eel%2Dpicker%2Dpanel%5F%5Fbody%3A%3Aafter%7Bcontent%3A%22%22%3Bdisplay%3Atable%3Bclear%3Aboth%7D%2Eel%2Dpicker%2Dpanel%5F%5Fcontent%7Bposition%3Arelative%3Bmargin%3A15px%7D%2Eel%2Dpicker%2Dpanel%5F%5Ffooter%7Bborder%2Dtop%3A1px%20solid%20%23e4e4e4%3Bpadding%3A4px%3Btext%2Dalign%3Aright%3Bbackground%2Dcolor%3A%23fff%3Bposition%3Arelative%7D%2Eel%2Dpicker%2Dpanel%5F%5Fshortcut%7Bdisplay%3Ablock%3Bwidth%3A100%25%3Bborder%3A0%3Bbackground%2Dcolor%3Atransparent%3Bline%2Dheight%3A28px%3Bfont%2Dsize%3A14px%3Bcolor%3A%2348576a%3Bpadding%2Dleft%3A12px%3Btext%2Dalign%3Aleft%3Boutline%3A0%3Bcursor%3Apointer%7D%2Eel%2Dpicker%2Dpanel%5F%5Fshortcut%3Ahover%7Bbackground%2Dcolor%3A%23e4e8f1%7D%2Eel%2Dpicker%2Dpanel%5F%5Fshortcut%2Eactive%7Bbackground%2Dcolor%3A%23e6f1fe%3Bcolor%3A%2320a0ff%7D%2Eel%2Dpicker%2Dpanel%5F%5Fbtn%7Bborder%3A1px%20solid%20%23dcdcdc%3Bcolor%3A%23333%3Bline%2Dheight%3A24px%3Bborder%2Dradius%3A2px%3Bpadding%3A0%2020px%3Bcursor%3Apointer%3Bbackground%2Dcolor%3Atransparent%3Boutline%3A0%3Bfont%2Dsize%3A12px%7D%2Eel%2Dpicker%2Dpanel%5F%5Fbtn%5Bdisabled%5D%7Bcolor%3A%23ccc%3Bcursor%3Anot%2Dallowed%7D%2Eel%2Dpicker%2Dpanel%5F%5Ficon%2Dbtn%7Bfont%2Dsize%3A12px%3Bcolor%3A%2397a8be%3Bborder%3A0%3Bbackground%3A0%200%3Bcursor%3Apointer%3Boutline%3A0%3Bmargin%2Dtop%3A3px%7D%2Eel%2Ddate%2Dpicker%5F%5Fheader%2Dlabel%2Eactive%2C%2Eel%2Ddate%2Dpicker%5F%5Fheader%2Dlabel%3Ahover%2C%2Eel%2Dpicker%2Dpanel%5F%5Ficon%2Dbtn%3Ahover%7Bcolor%3A%2320a0ff%7D%2Eel%2Dpicker%2Dpanel%5F%5Flink%2Dbtn%7Bcursor%3Apointer%3Bcolor%3A%2320a0ff%3Btext%2Ddecoration%3Anone%3Bpadding%3A15px%3Bfont%2Dsize%3A12px%7D%2Eel%2Dpicker%2Dpanel%20%5Bslot%3Dsidebar%5D%2C%2Eel%2Dpicker%2Dpanel%5F%5Fsidebar%7Bposition%3Aabsolute%3Btop%3A0%3Bbottom%3A0%3Bwidth%3A110px%3Bborder%2Dright%3A1px%20solid%20%23e4e4e4%3Bbox%2Dsizing%3Aborder%2Dbox%3Bpadding%2Dtop%3A6px%3Bbackground%2Dcolor%3A%23fbfdff%7D%2Eel%2Dpicker%2Dpanel%20%5Bslot%3Dsidebar%5D%2B%2Eel%2Dpicker%2Dpanel%5F%5Fbody%2C%2Eel%2Dpicker%2Dpanel%5F%5Fsidebar%2B%2Eel%2Dpicker%2Dpanel%5F%5Fbody%7Bmargin%2Dleft%3A110px%7D%2Eel%2Ddate%2Dpicker%7Bmin%2Dwidth%3A254px%7D%2Eel%2Ddate%2Dpicker%20%2Eel%2Dpicker%2Dpanel%5F%5Fcontent%7Bmin%2Dwidth%3A224px%7D%2Eel%2Ddate%2Dpicker%20table%7Btable%2Dlayout%3Afixed%3Bwidth%3A100%25%7D%2Eel%2Ddate%2Dpicker%2Ehas%2Dsidebar%2Ehas%2Dtime%7Bmin%2Dwidth%3A434px%7D%2Eel%2Ddate%2Dpicker%2Ehas%2Dsidebar%7Bmin%2Dwidth%3A370px%7D%2Eel%2Ddate%2Dpicker%2Ehas%2Dtime%7Bmin%2Dwidth%3A324px%7D%2Eel%2Ddate%2Dpicker%5F%5Feditor%2Dwrap%7Bposition%3Arelative%3Bdisplay%3Atable%2Dcell%3Bpadding%3A0%205px%7D%2Eel%2Ddate%2Dpicker%5F%5Ftime%2Dheader%7Bposition%3Arelative%3Bborder%2Dbottom%3A1px%20solid%20%23e4e4e4%3Bfont%2Dsize%3A12px%3Bpadding%3A8px%205px%205px%3Bdisplay%3Atable%3Bwidth%3A100%25%3Bbox%2Dsizing%3Aborder%2Dbox%7D%2Eel%2Ddate%2Dpicker%5F%5Fheader%7Bmargin%3A12px%3Btext%2Dalign%3Acenter%7D%2Eel%2Ddate%2Dpicker%5F%5Fheader%2Dlabel%7Bfont%2Dsize%3A14px%3Bpadding%3A0%205px%3Bline%2Dheight%3A22px%3Btext%2Dalign%3Acenter%3Bcursor%3Apointer%7D%2Eel%2Ddate%2Dpicker%5F%5Fprev%2Dbtn%7Bfloat%3Aleft%7D%2Eel%2Ddate%2Dpicker%5F%5Fnext%2Dbtn%7Bfloat%3Aright%7D%2Eel%2Ddate%2Dpicker%5F%5Ftime%2Dwrap%7Bpadding%3A10px%3Btext%2Dalign%3Acenter%7D%2Eel%2Ddate%2Dpicker%5F%5Ftime%2Dlabel%7Bfloat%3Aleft%3Bcursor%3Apointer%3Bline%2Dheight%3A30px%3Bmargin%2Dleft%3A10px%7D%2Etime%2Dselect%7Bmargin%3A5px%200%3Bmin%2Dwidth%3A0%7D%2Etime%2Dselect%20%2Eel%2Dpicker%2Dpanel%5F%5Fcontent%7Bmax%2Dheight%3A200px%3Bmargin%3A0%7D%2Etime%2Dselect%2Ditem%7Bpadding%3A8px%2010px%3Bfont%2Dsize%3A14px%7D%2Etime%2Dselect%2Ditem%2Eselected%3Anot%28%2Edisabled%29%7Bbackground%2Dcolor%3A%2320a0ff%3Bcolor%3A%23fff%7D%2Etime%2Dselect%2Ditem%2Eselected%3Anot%28%2Edisabled%29%3Ahover%7Bbackground%2Dcolor%3A%2320a0ff%7D%2Etime%2Dselect%2Ditem%2Edisabled%7Bcolor%3A%23d1dbe5%3Bcursor%3Anot%2Dallowed%7D%2Etime%2Dselect%2Ditem%3Ahover%7Bbackground%2Dcolor%3A%23e4e8f1%3Bcursor%3Apointer%7D%2Efade%2Din%2Dlinear%2Denter%2Dactive%2C%2Efade%2Din%2Dlinear%2Dleave%2Dactive%7Btransition%3Aopacity%20%2E2s%20linear%7D%2Eel%2Dfade%2Din%2Denter%2Dactive%2C%2Eel%2Dfade%2Din%2Dleave%2Dactive%2C%2Eel%2Dzoom%2Din%2Dcenter%2Denter%2Dactive%2C%2Eel%2Dzoom%2Din%2Dcenter%2Dleave%2Dactive%7Btransition%3Aall%20%2E3s%20cubic%2Dbezier%28%2E55%2C0%2C%2E1%2C1%29%7D%2Eel%2Dzoom%2Din%2Dcenter%2Denter%2C%2Eel%2Dzoom%2Din%2Dcenter%2Dleave%2Dactive%7Bopacity%3A0%3B%2Dms%2Dtransform%3AscaleX%280%29%3Btransform%3AscaleX%280%29%7D%2Eel%2Dzoom%2Din%2Dtop%2Denter%2Dactive%2C%2Eel%2Dzoom%2Din%2Dtop%2Dleave%2Dactive%7Bopacity%3A1%3B%2Dms%2Dtransform%3AscaleY%281%29%3Btransform%3AscaleY%281%29%3Btransition%3Atransform%20%2E3s%20cubic%2Dbezier%28%2E23%2C1%2C%2E32%2C1%29%20%2E1s%2Copacity%20%2E3s%20cubic%2Dbezier%28%2E23%2C1%2C%2E32%2C1%29%20%2E1s%3B%2Dms%2Dtransform%2Dorigin%3Acenter%20top%3Btransform%2Dorigin%3Acenter%20top%7D%2Eel%2Dzoom%2Din%2Dtop%2Denter%2C%2Eel%2Dzoom%2Din%2Dtop%2Dleave%2Dactive%7Bopacity%3A0%3B%2Dms%2Dtransform%3AscaleY%280%29%3Btransform%3AscaleY%280%29%7D%2Eel%2Dzoom%2Din%2Dbottom%2Denter%2Dactive%2C%2Eel%2Dzoom%2Din%2Dbottom%2Dleave%2Dactive%7Bopacity%3A1%3B%2Dms%2Dtransform%3AscaleY%281%29%3Btransform%3AscaleY%281%29%3Btransition%3Atransform%20%2E3s%20cubic%2Dbezier%28%2E23%2C1%2C%2E32%2C1%29%20%2E1s%2Copacity%20%2E3s%20cubic%2Dbezier%28%2E23%2C1%2C%2E32%2C1%29%20%2E1s%3B%2Dms%2Dtransform%2Dorigin%3Acenter%20bottom%3Btransform%2Dorigin%3Acenter%20bottom%7D%2Eel%2Dzoom%2Din%2Dbottom%2Denter%2C%2Eel%2Dzoom%2Din%2Dbottom%2Dleave%2Dactive%7Bopacity%3A0%3B%2Dms%2Dtransform%3AscaleY%280%29%3Btransform%3AscaleY%280%29%7D%2Ecollapse%2Dtransition%7Btransition%3A%2E3s%20height%20ease%2Din%2Dout%2C%2E3s%20padding%2Dtop%20ease%2Din%2Dout%2C%2E3s%20padding%2Dbottom%20ease%2Din%2Dout%7D%2Elist%2Denter%2Dactive%2C%2Elist%2Dleave%2Dactive%7Btransition%3Aall%201s%7D%2Elist%2Denter%2C%2Elist%2Dleave%2Dactive%7Bopacity%3A0%3B%2Dms%2Dtransform%3AtranslateY%28%2D30px%29%3Btransform%3AtranslateY%28%2D30px%29%7D%2Eel%2Ddate%2Deditor%7Bposition%3Arelative%3Bdisplay%3Ainline%2Dblock%7D%2Eel%2Ddate%2Deditor%20%2Eel%2Dpicker%2Dpanel%7Bposition%3Aabsolute%3Bmin%2Dwidth%3A180px%3Bbox%2Dsizing%3Aborder%2Dbox%3Bbox%2Dshadow%3A0%202px%206px%20%23ccc%3Bbackground%3A%23fff%3Bz%2Dindex%3A10%3Btop%3A41px%7D%2Eel%2Ddate%2Deditor%2Eel%2Dinput%7Bwidth%3A193px%7D%2Eel%2Ddate%2Deditor%2D%2Ddaterange%2Eel%2Dinput%7Bwidth%3A220px%7D%2Eel%2Ddate%2Deditor%2D%2Ddatetimerange%2Eel%2Dinput%7Bwidth%3A350px%7D%2Eel%2Dtime%2Dspinner%2Ehas%2Dseconds%20%2Eel%2Dtime%2Dspinner%5F%5Fwrapper%7Bwidth%3A33%25%7D%2Eel%2Dtime%2Dspinner%2Ehas%2Dseconds%20%2Eel%2Dtime%2Dspinner%5F%5Fwrapper%20%2Eel%2Dscrollbar%5F%5Fwrap%3Anot%28%2Eel%2Dscrollbar%5F%5Fwrap%2D%2Dhidden%2Ddefault%29%7Bpadding%2Dbottom%3A15px%7D%2Eel%2Dtime%2Dspinner%2Ehas%2Dseconds%20%2Eel%2Dtime%2Dspinner%5F%5Fwrapper%3Anth%2Dchild%282%29%7Bmargin%2Dleft%3A1%25%7D%2Eel%2Dtime%2Dspinner%5F%5Fwrapper%7Bmax%2Dheight%3A190px%3Boverflow%3Aauto%3Bdisplay%3Ainline%2Dblock%3Bwidth%3A50%25%3Bvertical%2Dalign%3Atop%3Bposition%3Arelative%7D%2Eel%2Dtime%2Dspinner%5F%5Flist%7Bpadding%3A0%3Bmargin%3A0%3Blist%2Dstyle%3Anone%3Btext%2Dalign%3Acenter%7D%2Eel%2Dtime%2Dspinner%5F%5Flist%3A%3Aafter%2C%2Eel%2Dtime%2Dspinner%5F%5Flist%3A%3Abefore%7Bcontent%3A%27%27%3Bdisplay%3Ablock%3Bwidth%3A100%25%3Bheight%3A80px%7D%2Eel%2Dtime%2Dspinner%5F%5Fitem%7Bheight%3A32px%3Bline%2Dheight%3A32px%3Bfont%2Dsize%3A12px%7D%2Eel%2Dtime%2Dspinner%5F%5Fitem%3Ahover%3Anot%28%2Edisabled%29%3Anot%28%2Eactive%29%7Bbackground%3A%23e4e8f1%3Bcursor%3Apointer%7D%2Eel%2Dtime%2Dspinner%5F%5Fitem%2Eactive%3Anot%28%2Edisabled%29%7Bcolor%3A%23fff%7D%2Eel%2Dtime%2Dspinner%5F%5Fitem%2Edisabled%7Bcolor%3A%23d1dbe5%3Bcursor%3Anot%2Dallowed%7D%2Eel%2Dtime%2Dpanel%7Bmargin%3A5px%200%3Bborder%3A1px%20solid%20%23d1dbe5%3Bbackground%2Dcolor%3A%23fff%3Bbox%2Dshadow%3A0%202px%204px%20rgba%280%2C0%2C0%2C%2E12%29%2C0%200%206px%20rgba%280%2C0%2C0%2C%2E04%29%3Bborder%2Dradius%3A2px%3Bposition%3Aabsolute%3Bwidth%3A180px%3Bleft%3A0%3Bz%2Dindex%3A1000%3B%2Dmoz%2Duser%2Dselect%3Anone%3Buser%2Dselect%3Anone%7D%2Eel%2Dpopover%2C%2Eel%2Dtabs%2D%2Dborder%2Dcard%7Bbox%2Dshadow%3A0%202px%204px%200%20rgba%280%2C0%2C0%2C%2E12%29%2C0%200%206px%200%20rgba%280%2C0%2C0%2C%2E04%29%7D%2Eel%2Dbutton%2C%2Eel%2Dslider%5F%5Fbutton%2Dwrapper%7B%2Dwebkit%2Duser%2Dselect%3Anone%3B%2Dmoz%2Duser%2Dselect%3Anone%3B%2Dms%2Duser%2Dselect%3Anone%7D%2Eel%2Dtime%2Dpanel%5F%5Fcontent%7Bfont%2Dsize%3A0%3Bposition%3Arelative%3Boverflow%3Ahidden%7D%2Eel%2Dtime%2Dpanel%5F%5Fcontent%3A%3Aafter%2C%2Eel%2Dtime%2Dpanel%5F%5Fcontent%3A%3Abefore%7Bcontent%3A%22%3A%22%3Btop%3A50%25%3Bcolor%3A%23fff%3Bposition%3Aabsolute%3Bfont%2Dsize%3A14px%3Bmargin%2Dtop%3A%2D15px%3Bline%2Dheight%3A16px%3Bbackground%2Dcolor%3A%2320a0ff%3Bheight%3A32px%3Bz%2Dindex%3A%2D1%3Bleft%3A0%3Bright%3A0%3Bbox%2Dsizing%3Aborder%2Dbox%3Bpadding%2Dtop%3A6px%3Btext%2Dalign%3Aleft%7D%2Eel%2Dtime%2Dpanel%5F%5Fcontent%3A%3Aafter%7Bleft%3A50%25%3Bmargin%2Dleft%3A%2D2px%7D%2Eel%2Dtime%2Dpanel%5F%5Fcontent%3A%3Abefore%7Bpadding%2Dleft%3A50%25%3Bmargin%2Dright%3A%2D2px%7D%2Eel%2Dtime%2Dpanel%5F%5Fcontent%2Ehas%2Dseconds%3A%3Aafter%7Bleft%3A66%2E66667%25%7D%2Eel%2Dtime%2Dpanel%5F%5Fcontent%2Ehas%2Dseconds%3A%3Abefore%7Bpadding%2Dleft%3A33%2E33333%25%7D%2Eel%2Dtime%2Dpanel%5F%5Ffooter%7Bborder%2Dtop%3A1px%20solid%20%23e4e4e4%3Bpadding%3A4px%3Bheight%3A36px%3Bline%2Dheight%3A25px%3Btext%2Dalign%3Aright%3Bbox%2Dsizing%3Aborder%2Dbox%7D%2Eel%2Dtime%2Dpanel%5F%5Fbtn%7Bborder%3Anone%3Bline%2Dheight%3A28px%3Bpadding%3A0%205px%3Bmargin%3A0%205px%3Bcursor%3Apointer%3Bbackground%2Dcolor%3Atransparent%3Boutline%3A0%3Bfont%2Dsize%3A12px%3Bcolor%3A%238391a5%7D%2Eel%2Dtime%2Dpanel%5F%5Fbtn%2Econfirm%7Bfont%2Dweight%3A800%3Bcolor%3A%2320a0ff%7D%2Eel%2Dpopover%7Bposition%3Aabsolute%3Bbackground%3A%23fff%3Bmin%2Dwidth%3A150px%3Bborder%2Dradius%3A2px%3Bborder%3A1px%20solid%20%23d1dbe5%3Bpadding%3A10px%3Bz%2Dindex%3A2000%3Bfont%2Dsize%3A12px%7D%2Eel%2Dpopover%20%2Epopper%5F%5Farrow%2C%2Eel%2Dpopover%20%2Epopper%5F%5Farrow%3A%3Aafter%7Bposition%3Aabsolute%3Bdisplay%3Ablock%3Bwidth%3A0%3Bheight%3A0%3Bborder%2Dcolor%3Atransparent%3Bborder%2Dstyle%3Asolid%7D%2Eel%2Dpopover%20%2Epopper%5F%5Farrow%7Bborder%2Dwidth%3A6px%7D%2Eel%2Dpopover%20%2Epopper%5F%5Farrow%3A%3Aafter%7Bcontent%3A%22%20%22%3Bborder%2Dwidth%3A6px%7D%2Eel%2Dpopover%5Bx%2Dplacement%5E%3Dtop%5D%7Bmargin%2Dbottom%3A12px%7D%2Eel%2Dpopover%5Bx%2Dplacement%5E%3Dtop%5D%20%2Epopper%5F%5Farrow%7Bbottom%3A%2D6px%3Bleft%3A50%25%3Bmargin%2Dright%3A3px%3Bborder%2Dtop%2Dcolor%3A%23d1dbe5%3Bborder%2Dbottom%2Dwidth%3A0%7D%2Eel%2Dpopover%5Bx%2Dplacement%5E%3Dtop%5D%20%2Epopper%5F%5Farrow%3A%3Aafter%7Bbottom%3A1px%3Bmargin%2Dleft%3A%2D6px%3Bborder%2Dtop%2Dcolor%3A%23fff%3Bborder%2Dbottom%2Dwidth%3A0%7D%2Eel%2Dpopover%5Bx%2Dplacement%5E%3Dbottom%5D%7Bmargin%2Dtop%3A12px%7D%2Eel%2Dpopover%5Bx%2Dplacement%5E%3Dbottom%5D%20%2Epopper%5F%5Farrow%7Btop%3A%2D6px%3Bleft%3A50%25%3Bmargin%2Dright%3A3px%3Bborder%2Dtop%2Dwidth%3A0%3Bborder%2Dbottom%2Dcolor%3A%23d1dbe5%7D%2Eel%2Dpopover%5Bx%2Dplacement%5E%3Dbottom%5D%20%2Epopper%5F%5Farrow%3A%3Aafter%7Btop%3A1px%3Bmargin%2Dleft%3A%2D6px%3Bborder%2Dtop%2Dwidth%3A0%3Bborder%2Dbottom%2Dcolor%3A%23fff%7D%2Eel%2Dpopover%5Bx%2Dplacement%5E%3Dright%5D%7Bmargin%2Dleft%3A12px%7D%2Eel%2Dpopover%5Bx%2Dplacement%5E%3Dright%5D%20%2Epopper%5F%5Farrow%7Btop%3A50%25%3Bleft%3A%2D6px%3Bmargin%2Dbottom%3A3px%3Bborder%2Dright%2Dcolor%3A%23d1dbe5%3Bborder%2Dleft%2Dwidth%3A0%7D%2Eel%2Dpopover%5Bx%2Dplacement%5E%3Dright%5D%20%2Epopper%5F%5Farrow%3A%3Aafter%7Bbottom%3A%2D6px%3Bleft%3A1px%3Bborder%2Dright%2Dcolor%3A%23fff%3Bborder%2Dleft%2Dwidth%3A0%7D%2Eel%2Dpopover%5Bx%2Dplacement%5E%3Dleft%5D%7Bmargin%2Dright%3A12px%7D%2Eel%2Dpopover%5Bx%2Dplacement%5E%3Dleft%5D%20%2Epopper%5F%5Farrow%7Btop%3A50%25%3Bright%3A%2D6px%3Bmargin%2Dbottom%3A3px%3Bborder%2Dright%2Dwidth%3A0%3Bborder%2Dleft%2Dcolor%3A%23d1dbe5%7D%2Eel%2Dpopover%5Bx%2Dplacement%5E%3Dleft%5D%20%2Epopper%5F%5Farrow%3A%3Aafter%7Bright%3A1px%3Bbottom%3A%2D6px%3Bmargin%2Dleft%3A%2D6px%3Bborder%2Dright%2Dwidth%3A0%3Bborder%2Dleft%2Dcolor%3A%23fff%7D%2Eel%2Dpopover%5F%5Ftitle%7Bcolor%3A%231f2d3d%3Bfont%2Dsize%3A13px%3Bline%2Dheight%3A1%3Bmargin%2Dbottom%3A9px%7D%2Ev%2Dmodal%2Denter%7Banimation%3Av%2Dmodal%2Din%20%2E2s%20ease%7D%2Ev%2Dmodal%2Dleave%7Banimation%3Av%2Dmodal%2Dout%20%2E2s%20ease%20forwards%7D%40keyframes%20v%2Dmodal%2Din%7B0%25%7Bopacity%3A0%7D%7D%40keyframes%20v%2Dmodal%2Dout%7B100%25%7Bopacity%3A0%7D%7D%2Ev%2Dmodal%7Bposition%3Afixed%3Bleft%3A0%3Btop%3A0%3Bwidth%3A100%25%3Bheight%3A100%25%3Bopacity%3A%2E5%3Bbackground%3A%23000%7D%2Eel%2Dbutton%7Bdisplay%3Ainline%2Dblock%3Bline%2Dheight%3A1%3Bwhite%2Dspace%3Anowrap%3Bcursor%3Apointer%3Bbackground%3A%23fff%3Bborder%3A1px%20solid%20%23bfcbd9%3Bcolor%3A%231f2d3d%3B%2Dwebkit%2Dappearance%3Anone%3Btext%2Dalign%3Acenter%3Bbox%2Dsizing%3Aborder%2Dbox%3Boutline%3A0%3Bmargin%3A0%3Bpadding%3A10px%2015px%3Bfont%2Dsize%3A14px%3Bborder%2Dradius%3A4px%7D%2Eel%2Dbutton%2B%2Eel%2Dbutton%7Bmargin%2Dleft%3A10px%7D%2Eel%2Dbutton%3Afocus%2C%2Eel%2Dbutton%3Ahover%7Bcolor%3A%2320a0ff%3Bborder%2Dcolor%3A%2320a0ff%7D%2Eel%2Dbutton%3Aactive%7Bcolor%3A%231d90e6%3Bborder%2Dcolor%3A%231d90e6%3Boutline%3A0%7D%2Eel%2Dbutton%3A%3A%2Dmoz%2Dfocus%2Dinner%7Bborder%3A0%7D%2Eel%2Dbutton%20%5Bclass%2A%3Del%2Dicon%2D%5D%2Bspan%7Bmargin%2Dleft%3A5px%7D%2Eel%2Dbutton%2Eis%2Dloading%7Bposition%3Arelative%3Bpointer%2Devents%3Anone%7D%2Eel%2Dbutton%2Eis%2Dloading%3Abefore%7Bpointer%2Devents%3Anone%3Bcontent%3A%27%27%3Bposition%3Aabsolute%3Bleft%3A%2D1px%3Btop%3A%2D1px%3Bright%3A%2D1px%3Bbottom%3A%2D1px%3Bborder%2Dradius%3Ainherit%3Bbackground%2Dcolor%3Argba%28255%2C255%2C255%2C%2E35%29%7D%2Eel%2Dbutton%2Eis%2Ddisabled%2C%2Eel%2Dbutton%2Eis%2Ddisabled%3Afocus%2C%2Eel%2Dbutton%2Eis%2Ddisabled%3Ahover%7Bcolor%3A%23bfcbd9%3Bcursor%3Anot%2Dallowed%3Bbackground%2Dimage%3Anone%3Bbackground%2Dcolor%3A%23eef1f6%3Bborder%2Dcolor%3A%23d1dbe5%7D%2Eel%2Dbutton%2Eis%2Ddisabled%2Eel%2Dbutton%2D%2Dtext%7Bbackground%2Dcolor%3Atransparent%7D%2Eel%2Dbutton%2Eis%2Ddisabled%2Eis%2Dplain%2C%2Eel%2Dbutton%2Eis%2Ddisabled%2Eis%2Dplain%3Afocus%2C%2Eel%2Dbutton%2Eis%2Ddisabled%2Eis%2Dplain%3Ahover%7Bbackground%2Dcolor%3A%23fff%3Bborder%2Dcolor%3A%23d1dbe5%3Bcolor%3A%23bfcbd9%7D%2Eel%2Dbutton%2Eis%2Dactive%7Bcolor%3A%231d90e6%3Bborder%2Dcolor%3A%231d90e6%7D%2Eel%2Dbutton%2Eis%2Dplain%3Afocus%2C%2Eel%2Dbutton%2Eis%2Dplain%3Ahover%7Bbackground%3A%23fff%3Bborder%2Dcolor%3A%2320a0ff%3Bcolor%3A%2320a0ff%7D%2Eel%2Dbutton%2Eis%2Dplain%3Aactive%7Bbackground%3A%23fff%3Bborder%2Dcolor%3A%231d90e6%3Bcolor%3A%231d90e6%3Boutline%3A0%7D%2Eel%2Dbutton%2D%2Dprimary%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%2320a0ff%3Bborder%2Dcolor%3A%2320a0ff%7D%2Eel%2Dbutton%2D%2Dprimary%3Afocus%2C%2Eel%2Dbutton%2D%2Dprimary%3Ahover%7Bbackground%3A%234db3ff%3Bborder%2Dcolor%3A%234db3ff%3Bcolor%3A%23fff%7D%2Eel%2Dbutton%2D%2Dprimary%2Eis%2Dactive%2C%2Eel%2Dbutton%2D%2Dprimary%3Aactive%7Bbackground%3A%231d90e6%3Bborder%2Dcolor%3A%231d90e6%3Bcolor%3A%23fff%7D%2Eel%2Dbutton%2D%2Dprimary%3Aactive%7Boutline%3A0%7D%2Eel%2Dbutton%2D%2Dprimary%2Eis%2Dplain%7Bbackground%3A%23fff%3Bborder%3A1px%20solid%20%23bfcbd9%3Bcolor%3A%231f2d3d%7D%2Eel%2Dbutton%2D%2Dprimary%2Eis%2Dplain%3Afocus%2C%2Eel%2Dbutton%2D%2Dprimary%2Eis%2Dplain%3Ahover%7Bbackground%3A%23fff%3Bborder%2Dcolor%3A%2320a0ff%3Bcolor%3A%2320a0ff%7D%2Eel%2Dbutton%2D%2Dprimary%2Eis%2Dplain%3Aactive%7Bbackground%3A%23fff%3Bborder%2Dcolor%3A%231d90e6%3Bcolor%3A%231d90e6%3Boutline%3A0%7D%2Eel%2Dbutton%2D%2Dsuccess%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%2313ce66%3Bborder%2Dcolor%3A%2313ce66%7D%2Eel%2Dbutton%2D%2Dsuccess%3Afocus%2C%2Eel%2Dbutton%2D%2Dsuccess%3Ahover%7Bbackground%3A%2342d885%3Bborder%2Dcolor%3A%2342d885%3Bcolor%3A%23fff%7D%2Eel%2Dbutton%2D%2Dsuccess%2Eis%2Dactive%2C%2Eel%2Dbutton%2D%2Dsuccess%3Aactive%7Bbackground%3A%2311b95c%3Bborder%2Dcolor%3A%2311b95c%3Bcolor%3A%23fff%7D%2Eel%2Dbutton%2D%2Dsuccess%3Aactive%7Boutline%3A0%7D%2Eel%2Dbutton%2D%2Dsuccess%2Eis%2Dplain%7Bbackground%3A%23fff%3Bborder%3A1px%20solid%20%23bfcbd9%3Bcolor%3A%231f2d3d%7D%2Eel%2Dbutton%2D%2Dsuccess%2Eis%2Dplain%3Afocus%2C%2Eel%2Dbutton%2D%2Dsuccess%2Eis%2Dplain%3Ahover%7Bbackground%3A%23fff%3Bborder%2Dcolor%3A%2313ce66%3Bcolor%3A%2313ce66%7D%2Eel%2Dbutton%2D%2Dsuccess%2Eis%2Dplain%3Aactive%7Bbackground%3A%23fff%3Bborder%2Dcolor%3A%2311b95c%3Bcolor%3A%2311b95c%3Boutline%3A0%7D%2Eel%2Dbutton%2D%2Dwarning%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23f7ba2a%3Bborder%2Dcolor%3A%23f7ba2a%7D%2Eel%2Dbutton%2D%2Dwarning%3Afocus%2C%2Eel%2Dbutton%2D%2Dwarning%3Ahover%7Bbackground%3A%23f9c855%3Bborder%2Dcolor%3A%23f9c855%3Bcolor%3A%23fff%7D%2Eel%2Dbutton%2D%2Dwarning%2Eis%2Dactive%2C%2Eel%2Dbutton%2D%2Dwarning%3Aactive%7Bbackground%3A%23dea726%3Bborder%2Dcolor%3A%23dea726%3Bcolor%3A%23fff%7D%2Eel%2Dbutton%2D%2Dwarning%3Aactive%7Boutline%3A0%7D%2Eel%2Dbutton%2D%2Dwarning%2Eis%2Dplain%7Bbackground%3A%23fff%3Bborder%3A1px%20solid%20%23bfcbd9%3Bcolor%3A%231f2d3d%7D%2Eel%2Dbutton%2D%2Dwarning%2Eis%2Dplain%3Afocus%2C%2Eel%2Dbutton%2D%2Dwarning%2Eis%2Dplain%3Ahover%7Bbackground%3A%23fff%3Bborder%2Dcolor%3A%23f7ba2a%3Bcolor%3A%23f7ba2a%7D%2Eel%2Dbutton%2D%2Dwarning%2Eis%2Dplain%3Aactive%7Bbackground%3A%23fff%3Bborder%2Dcolor%3A%23dea726%3Bcolor%3A%23dea726%3Boutline%3A0%7D%2Eel%2Dbutton%2D%2Ddanger%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23ff4949%3Bborder%2Dcolor%3A%23ff4949%7D%2Eel%2Dbutton%2D%2Ddanger%3Afocus%2C%2Eel%2Dbutton%2D%2Ddanger%3Ahover%7Bbackground%3A%23ff6d6d%3Bborder%2Dcolor%3A%23ff6d6d%3Bcolor%3A%23fff%7D%2Eel%2Dbutton%2D%2Ddanger%2Eis%2Dactive%2C%2Eel%2Dbutton%2D%2Ddanger%3Aactive%7Bbackground%3A%23e64242%3Bborder%2Dcolor%3A%23e64242%3Bcolor%3A%23fff%7D%2Eel%2Dbutton%2D%2Ddanger%3Aactive%7Boutline%3A0%7D%2Eel%2Dbutton%2D%2Ddanger%2Eis%2Dplain%7Bbackground%3A%23fff%3Bborder%3A1px%20solid%20%23bfcbd9%3Bcolor%3A%231f2d3d%7D%2Eel%2Dbutton%2D%2Ddanger%2Eis%2Dplain%3Afocus%2C%2Eel%2Dbutton%2D%2Ddanger%2Eis%2Dplain%3Ahover%7Bbackground%3A%23fff%3Bborder%2Dcolor%3A%23ff4949%3Bcolor%3A%23ff4949%7D%2Eel%2Dbutton%2D%2Ddanger%2Eis%2Dplain%3Aactive%7Bbackground%3A%23fff%3Bborder%2Dcolor%3A%23e64242%3Bcolor%3A%23e64242%3Boutline%3A0%7D%2Eel%2Dbutton%2D%2Dinfo%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%2350bfff%3Bborder%2Dcolor%3A%2350bfff%7D%2Eel%2Dbutton%2D%2Dinfo%3Afocus%2C%2Eel%2Dbutton%2D%2Dinfo%3Ahover%7Bbackground%3A%2373ccff%3Bborder%2Dcolor%3A%2373ccff%3Bcolor%3A%23fff%7D%2Eel%2Dbutton%2D%2Dinfo%2Eis%2Dactive%2C%2Eel%2Dbutton%2D%2Dinfo%3Aactive%7Bbackground%3A%2348ace6%3Bborder%2Dcolor%3A%2348ace6%3Bcolor%3A%23fff%7D%2Eel%2Dbutton%2D%2Dinfo%3Aactive%7Boutline%3A0%7D%2Eel%2Dbutton%2D%2Dinfo%2Eis%2Dplain%7Bbackground%3A%23fff%3Bborder%3A1px%20solid%20%23bfcbd9%3Bcolor%3A%231f2d3d%7D%2Eel%2Dbutton%2D%2Dinfo%2Eis%2Dplain%3Afocus%2C%2Eel%2Dbutton%2D%2Dinfo%2Eis%2Dplain%3Ahover%7Bbackground%3A%23fff%3Bborder%2Dcolor%3A%2350bfff%3Bcolor%3A%2350bfff%7D%2Eel%2Dbutton%2D%2Dinfo%2Eis%2Dplain%3Aactive%7Bbackground%3A%23fff%3Bborder%2Dcolor%3A%2348ace6%3Bcolor%3A%2348ace6%3Boutline%3A0%7D%2Eel%2Dbutton%2D%2Dlarge%7Bpadding%3A11px%2019px%3Bfont%2Dsize%3A16px%3Bborder%2Dradius%3A4px%7D%2Eel%2Dbutton%2D%2Dsmall%7Bpadding%3A7px%209px%3Bfont%2Dsize%3A12px%3Bborder%2Dradius%3A4px%7D%2Eel%2Dbutton%2D%2Dmini%7Bpadding%3A4px%3Bfont%2Dsize%3A12px%3Bborder%2Dradius%3A4px%7D%2Eel%2Dbutton%2D%2Dtext%7Bborder%3Anone%3Bcolor%3A%2320a0ff%3Bbackground%3A0%200%3Bpadding%2Dleft%3A0%3Bpadding%2Dright%3A0%7D%2Eel%2Dbutton%2D%2Dtext%3Afocus%2C%2Eel%2Dbutton%2D%2Dtext%3Ahover%7Bcolor%3A%234db3ff%7D%2Eel%2Dbutton%2D%2Dtext%3Aactive%7Bcolor%3A%231d90e6%7D%2Eel%2Dbutton%2Dgroup%7Bdisplay%3Ainline%2Dblock%3Bvertical%2Dalign%3Amiddle%7D%2Eel%2Dbutton%2Dgroup%20%2Eel%2Dbutton%2D%2Dprimary%3Afirst%2Dchild%7Bborder%2Dright%2Dcolor%3Argba%28255%2C255%2C255%2C%2E5%29%7D%2Eel%2Dbutton%2Dgroup%20%2Eel%2Dbutton%2D%2Dprimary%3Alast%2Dchild%7Bborder%2Dleft%2Dcolor%3Argba%28255%2C255%2C255%2C%2E5%29%7D%2Eel%2Dbutton%2Dgroup%20%2Eel%2Dbutton%2D%2Dprimary%3Anot%28%3Afirst%2Dchild%29%3Anot%28%3Alast%2Dchild%29%7Bborder%2Dleft%2Dcolor%3Argba%28255%2C255%2C255%2C%2E5%29%3Bborder%2Dright%2Dcolor%3Argba%28255%2C255%2C255%2C%2E5%29%7D%2Eel%2Dbutton%2Dgroup%20%2Eel%2Dbutton%2D%2Dsuccess%3Afirst%2Dchild%7Bborder%2Dright%2Dcolor%3Argba%28255%2C255%2C255%2C%2E5%29%7D%2Eel%2Dbutton%2Dgroup%20%2Eel%2Dbutton%2D%2Dsuccess%3Alast%2Dchild%7Bborder%2Dleft%2Dcolor%3Argba%28255%2C255%2C255%2C%2E5%29%7D%2Eel%2Dbutton%2Dgroup%20%2Eel%2Dbutton%2D%2Dsuccess%3Anot%28%3Afirst%2Dchild%29%3Anot%28%3Alast%2Dchild%29%7Bborder%2Dleft%2Dcolor%3Argba%28255%2C255%2C255%2C%2E5%29%3Bborder%2Dright%2Dcolor%3Argba%28255%2C255%2C255%2C%2E5%29%7D%2Eel%2Dbutton%2Dgroup%20%2Eel%2Dbutton%2D%2Dwarning%3Afirst%2Dchild%7Bborder%2Dright%2Dcolor%3Argba%28255%2C255%2C255%2C%2E5%29%7D%2Eel%2Dbutton%2Dgroup%20%2Eel%2Dbutton%2D%2Dwarning%3Alast%2Dchild%7Bborder%2Dleft%2Dcolor%3Argba%28255%2C255%2C255%2C%2E5%29%7D%2Eel%2Dbutton%2Dgroup%20%2Eel%2Dbutton%2D%2Dwarning%3Anot%28%3Afirst%2Dchild%29%3Anot%28%3Alast%2Dchild%29%7Bborder%2Dleft%2Dcolor%3Argba%28255%2C255%2C255%2C%2E5%29%3Bborder%2Dright%2Dcolor%3Argba%28255%2C255%2C255%2C%2E5%29%7D%2Eel%2Dbutton%2Dgroup%20%2Eel%2Dbutton%2D%2Ddanger%3Afirst%2Dchild%7Bborder%2Dright%2Dcolor%3Argba%28255%2C255%2C255%2C%2E5%29%7D%2Eel%2Dbutton%2Dgroup%20%2Eel%2Dbutton%2D%2Ddanger%3Alast%2Dchild%7Bborder%2Dleft%2Dcolor%3Argba%28255%2C255%2C255%2C%2E5%29%7D%2Eel%2Dbutton%2Dgroup%20%2Eel%2Dbutton%2D%2Ddanger%3Anot%28%3Afirst%2Dchild%29%3Anot%28%3Alast%2Dchild%29%7Bborder%2Dleft%2Dcolor%3Argba%28255%2C255%2C255%2C%2E5%29%3Bborder%2Dright%2Dcolor%3Argba%28255%2C255%2C255%2C%2E5%29%7D%2Eel%2Dbutton%2Dgroup%20%2Eel%2Dbutton%2D%2Dinfo%3Afirst%2Dchild%7Bborder%2Dright%2Dcolor%3Argba%28255%2C255%2C255%2C%2E5%29%7D%2Eel%2Dbutton%2Dgroup%20%2Eel%2Dbutton%2D%2Dinfo%3Alast%2Dchild%7Bborder%2Dleft%2Dcolor%3Argba%28255%2C255%2C255%2C%2E5%29%7D%2Eel%2Dbutton%2Dgroup%20%2Eel%2Dbutton%2D%2Dinfo%3Anot%28%3Afirst%2Dchild%29%3Anot%28%3Alast%2Dchild%29%7Bborder%2Dleft%2Dcolor%3Argba%28255%2C255%2C255%2C%2E5%29%3Bborder%2Dright%2Dcolor%3Argba%28255%2C255%2C255%2C%2E5%29%7D%2Eel%2Dbutton%2Dgroup%20%2Eel%2Dbutton%7Bfloat%3Aleft%3Bposition%3Arelative%7D%2Eel%2Dbutton%2Dgroup%20%2Eel%2Dbutton%2B%2Eel%2Dbutton%7Bmargin%2Dleft%3A0%7D%2Eel%2Dbutton%2Dgroup%20%2Eel%2Dbutton%3Afirst%2Dchild%7Bborder%2Dtop%2Dright%2Dradius%3A0%3Bborder%2Dbottom%2Dright%2Dradius%3A0%7D%2Eel%2Dbutton%2Dgroup%20%2Eel%2Dbutton%3Alast%2Dchild%7Bborder%2Dtop%2Dleft%2Dradius%3A0%3Bborder%2Dbottom%2Dleft%2Dradius%3A0%7D%2Eel%2Dbutton%2Dgroup%20%2Eel%2Dbutton%3Anot%28%3Afirst%2Dchild%29%3Anot%28%3Alast%2Dchild%29%7Bborder%2Dradius%3A0%7D%2Eel%2Dbutton%2Dgroup%20%2Eel%2Dbutton%3Anot%28%3Alast%2Dchild%29%7Bmargin%2Dright%3A%2D1px%7D%2Eel%2Dbutton%2Dgroup%20%2Eel%2Dbutton%2Eis%2Dactive%2C%2Eel%2Dbutton%2Dgroup%20%2Eel%2Dbutton%3Aactive%2C%2Eel%2Dbutton%2Dgroup%20%2Eel%2Dbutton%3Afocus%2C%2Eel%2Dbutton%2Dgroup%20%2Eel%2Dbutton%3Ahover%7Bz%2Dindex%3A1%7D%2Eel%2Dmessage%2Dbox%7Btext%2Dalign%3Aleft%3Bdisplay%3Ainline%2Dblock%3Bvertical%2Dalign%3Amiddle%3Bbackground%2Dcolor%3A%23fff%3Bwidth%3A420px%3Bborder%2Dradius%3A3px%3Bfont%2Dsize%3A16px%3Boverflow%3Ahidden%3B%2Dwebkit%2Dbackface%2Dvisibility%3Ahidden%3Bbackface%2Dvisibility%3Ahidden%7D%2Eel%2Dmessage%2Dbox%5F%5Fwrapper%7Bposition%3Afixed%3Btop%3A0%3Bbottom%3A0%3Bleft%3A0%3Bright%3A0%3Btext%2Dalign%3Acenter%7D%2Eel%2Dmessage%2Dbox%5F%5Fwrapper%3A%3Aafter%7Bcontent%3A%22%22%3Bdisplay%3Ainline%2Dblock%3Bheight%3A100%25%3Bwidth%3A0%3Bvertical%2Dalign%3Amiddle%7D%2Eel%2Dmessage%2Dbox%5F%5Fheader%7Bposition%3Arelative%3Bpadding%3A20px%2020px%200%7D%2Eel%2Dmessage%2Dbox%5F%5Fcontent%7Bpadding%3A30px%2020px%3Bcolor%3A%2348576a%3Bfont%2Dsize%3A14px%3Bposition%3Arelative%7D%2Eel%2Dmessage%2Dbox%5F%5Fclose%7Bdisplay%3Ainline%2Dblock%3Bposition%3Aabsolute%3Btop%3A19px%3Bright%3A20px%3Bcolor%3A%23999%3Bcursor%3Apointer%3Bline%2Dheight%3A20px%3Btext%2Dalign%3Acenter%7D%2Eel%2Dmessage%2Dbox%5F%5Fclose%3Ahover%7Bcolor%3A%2320a0ff%7D%2Eel%2Dmessage%2Dbox%5F%5Finput%7Bpadding%2Dtop%3A15px%7D%2Eel%2Dmessage%2Dbox%5F%5Finput%20input%2Einvalid%2C%2Eel%2Dmessage%2Dbox%5F%5Finput%20input%2Einvalid%3Afocus%7Bborder%2Dcolor%3A%23ff4949%7D%2Eel%2Dmessage%2Dbox%5F%5Ferrormsg%7Bcolor%3A%23ff4949%3Bfont%2Dsize%3A12px%3Bmin%2Dheight%3A18px%3Bmargin%2Dtop%3A2px%7D%2Eel%2Dmessage%2Dbox%5F%5Ftitle%7Bpadding%2Dleft%3A0%3Bmargin%2Dbottom%3A0%3Bfont%2Dsize%3A16px%3Bfont%2Dweight%3A700%3Bheight%3A18px%3Bcolor%3A%23333%7D%2Eel%2Dmessage%2Dbox%5F%5Fmessage%7Bmargin%3A0%7D%2Eel%2Dmessage%2Dbox%5F%5Fmessage%20p%7Bmargin%3A0%3Bline%2Dheight%3A1%2E4%7D%2Eel%2Dmessage%2Dbox%5F%5Fbtns%7Bpadding%3A10px%2020px%2015px%3Btext%2Dalign%3Aright%7D%2Eel%2Dmessage%2Dbox%5F%5Fbtns%20button%3Anth%2Dchild%282%29%7Bmargin%2Dleft%3A10px%7D%2Eel%2Dmessage%2Dbox%5F%5Fbtns%2Dreverse%7B%2Dms%2Dflex%2Ddirection%3Arow%2Dreverse%3Bflex%2Ddirection%3Arow%2Dreverse%7D%2Eel%2Dmessage%2Dbox%5F%5Fstatus%7Bposition%3Aabsolute%3Btop%3A50%25%3B%2Dms%2Dtransform%3AtranslateY%28%2D50%25%29%3Btransform%3AtranslateY%28%2D50%25%29%3Bfont%2Dsize%3A36px%21important%7D%2Eel%2Dmessage%2Dbox%5F%5Fstatus%2Eel%2Dicon%2Dcircle%2Dcheck%7Bcolor%3A%2313ce66%7D%2Eel%2Dmessage%2Dbox%5F%5Fstatus%2Eel%2Dicon%2Dinformation%7Bcolor%3A%2350bfff%7D%2Eel%2Dmessage%2Dbox%5F%5Fstatus%2Eel%2Dicon%2Dwarning%7Bcolor%3A%23f7ba2a%7D%2Eel%2Dmessage%2Dbox%5F%5Fstatus%2Eel%2Dicon%2Dcircle%2Dcross%7Bcolor%3A%23ff4949%7D%2Emsgbox%2Dfade%2Denter%2Dactive%7Banimation%3Amsgbox%2Dfade%2Din%20%2E3s%7D%2Emsgbox%2Dfade%2Dleave%2Dactive%7Banimation%3Amsgbox%2Dfade%2Dout%20%2E3s%7D%40keyframes%20msgbox%2Dfade%2Din%7B0%25%7Btransform%3Atranslate3d%280%2C%2D20px%2C0%29%3Bopacity%3A0%7D100%25%7Btransform%3Atranslate3d%280%2C0%2C0%29%3Bopacity%3A1%7D%7D%40keyframes%20msgbox%2Dfade%2Dout%7B0%25%7Btransform%3Atranslate3d%280%2C0%2C0%29%3Bopacity%3A1%7D100%25%7Btransform%3Atranslate3d%280%2C%2D20px%2C0%29%3Bopacity%3A0%7D%7D%2Eel%2Dbreadcrumb%7Bfont%2Dsize%3A13px%3Bline%2Dheight%3A1%7D%2Eel%2Dbreadcrumb%5F%5Fseparator%7Bmargin%3A0%208px%3Bcolor%3A%23bfcbd9%7D%2Eel%2Dbreadcrumb%5F%5Fitem%7Bfloat%3Aleft%7D%2Eel%2Dbreadcrumb%5F%5Fitem%3Alast%2Dchild%20%2Eel%2Dbreadcrumb%5F%5Fitem%5F%5Finner%2C%2Eel%2Dbreadcrumb%5F%5Fitem%3Alast%2Dchild%20%2Eel%2Dbreadcrumb%5F%5Fitem%5F%5Finner%20a%2C%2Eel%2Dbreadcrumb%5F%5Fitem%3Alast%2Dchild%20%2Eel%2Dbreadcrumb%5F%5Fitem%5F%5Finner%20a%3Ahover%2C%2Eel%2Dbreadcrumb%5F%5Fitem%3Alast%2Dchild%20%2Eel%2Dbreadcrumb%5F%5Fitem%5F%5Finner%3Ahover%7Bcolor%3A%2397a8be%3Bcursor%3Atext%7D%2Eel%2Dbreadcrumb%5F%5Fitem%3Alast%2Dchild%20%2Eel%2Dbreadcrumb%5F%5Fseparator%7Bdisplay%3Anone%7D%2Eel%2Dbreadcrumb%5F%5Fitem%5F%5Finner%2C%2Eel%2Dbreadcrumb%5F%5Fitem%5F%5Finner%20a%7Btransition%3Acolor%20%2E15s%20linear%3Bcolor%3A%2348576a%7D%2Eel%2Dbreadcrumb%5F%5Fitem%5F%5Finner%20a%3Ahover%2C%2Eel%2Dbreadcrumb%5F%5Fitem%5F%5Finner%3Ahover%7Bcolor%3A%2320a0ff%3Bcursor%3Apointer%7D%2Eel%2Dform%2D%2Dlabel%2Dleft%20%2Eel%2Dform%2Ditem%5F%5Flabel%7Btext%2Dalign%3Aleft%7D%2Eel%2Dform%2D%2Dlabel%2Dtop%20%2Eel%2Dform%2Ditem%5F%5Flabel%7Bfloat%3Anone%3Bdisplay%3Ainline%2Dblock%3Btext%2Dalign%3Aleft%3Bpadding%3A0%200%2010px%7D%2Eel%2Dform%2D%2Dinline%20%2Eel%2Dform%2Ditem%7Bdisplay%3Ainline%2Dblock%3Bmargin%2Dright%3A10px%3Bvertical%2Dalign%3Atop%7D%2Eel%2Dform%2D%2Dinline%20%2Eel%2Dform%2Ditem%5F%5Flabel%7Bfloat%3Anone%3Bdisplay%3Ainline%2Dblock%7D%2Eel%2Dform%2D%2Dinline%20%2Eel%2Dform%2Ditem%5F%5Fcontent%7Bdisplay%3Ainline%2Dblock%3Bvertical%2Dalign%3Atop%7D%2Eel%2Dform%2D%2Dinline%2Eel%2Dform%2D%2Dlabel%2Dtop%20%2Eel%2Dform%2Ditem%5F%5Fcontent%7Bdisplay%3Ablock%7D%2Eel%2Dform%2Ditem%7Bmargin%2Dbottom%3A22px%7D%2Eel%2Dform%2Ditem%20%2Eel%2Dform%2Ditem%7Bmargin%2Dbottom%3A0%7D%2Eel%2Dform%2Ditem%20%2Eel%2Dform%2Ditem%20%2Eel%2Dform%2Ditem%5F%5Fcontent%7Bmargin%2Dleft%3A0%21important%7D%2Eel%2Dform%2Ditem%2Eis%2Derror%20%2Eel%2Dinput%2Dgroup%5F%5Fappend%20%2Eel%2Dinput%5F%5Finner%2C%2Eel%2Dform%2Ditem%2Eis%2Derror%20%2Eel%2Dinput%2Dgroup%5F%5Fprepend%20%2Eel%2Dinput%5F%5Finner%2C%2Eel%2Dform%2Ditem%2Eis%2Derror%20%2Eel%2Dinput%5F%5Finner%7Bborder%2Dcolor%3Atransparent%7D%2Eel%2Dform%2Ditem%2Eis%2Derror%20%2Eel%2Dinput%5F%5Finner%2C%2Eel%2Dform%2Ditem%2Eis%2Derror%20%2Eel%2Dtextarea%5F%5Finner%7Bborder%2Dcolor%3A%23ff4949%7D%2Eel%2Dform%2Ditem%2Eis%2Drequired%20%2Eel%2Dform%2Ditem%5F%5Flabel%3Abefore%7Bcontent%3A%27%2A%27%3Bcolor%3A%23ff4949%3Bmargin%2Dright%3A4px%7D%2Eel%2Dform%2Ditem%5F%5Flabel%7Btext%2Dalign%3Aright%3Bvertical%2Dalign%3Amiddle%3Bfloat%3Aleft%3Bfont%2Dsize%3A14px%3Bcolor%3A%2348576a%3Bline%2Dheight%3A1%3Bpadding%3A11px%2012px%2011px%200%3Bbox%2Dsizing%3Aborder%2Dbox%7D%2Eel%2Dform%2Ditem%5F%5Fcontent%7Bline%2Dheight%3A36px%3Bposition%3Arelative%3Bfont%2Dsize%3A14px%7D%2Eel%2Dform%2Ditem%5F%5Ferror%7Bcolor%3A%23ff4949%3Bfont%2Dsize%3A12px%3Bline%2Dheight%3A1%3Bpadding%2Dtop%3A4px%3Bposition%3Aabsolute%3Btop%3A100%25%3Bleft%3A0%7D%2Eel%2Dtabs%5F%5Fheader%7Bborder%2Dbottom%3A1px%20solid%20%23d1dbe5%3Bpadding%3A0%3Bposition%3Arelative%3Bmargin%3A0%200%2015px%7D%2Eel%2Dtabs%5F%5Factive%2Dbar%7Bposition%3Aabsolute%3Bbottom%3A0%3Bleft%3A0%3Bheight%3A3px%3Bbackground%2Dcolor%3A%2320a0ff%3Bz%2Dindex%3A1%3Btransition%3Atransform%20%2E3s%20cubic%2Dbezier%28%2E645%2C%2E045%2C%2E355%2C1%29%3Blist%2Dstyle%3Anone%7D%2Eel%2Dtabs%5F%5Fnew%2Dtab%7Bfloat%3Aright%3Bborder%3A1px%20solid%20%23d3dce6%3Bheight%3A18px%3Bwidth%3A18px%3Bline%2Dheight%3A18px%3Bmargin%3A12px%200%209px%2010px%3Bborder%2Dradius%3A3px%3Btext%2Dalign%3Acenter%3Bfont%2Dsize%3A12px%3Bcolor%3A%23d3dce6%3Bcursor%3Apointer%3Btransition%3Aall%20%2E15s%7D%2Eel%2Dtabs%5F%5Fnew%2Dtab%20%2Eel%2Dicon%2Dplus%7B%2Dms%2Dtransform%3Ascale%28%2E8%2C%2E8%29%3Btransform%3Ascale%28%2E8%2C%2E8%29%7D%2Eel%2Dtabs%5F%5Fnew%2Dtab%3Ahover%7Bcolor%3A%2320a0ff%7D%2Eel%2Dtabs%5F%5Fnav%2Dwrap%7Boverflow%3Ahidden%3Bmargin%2Dbottom%3A%2D1px%3Bposition%3Arelative%7D%2Eel%2Dtabs%5F%5Fnav%2Dwrap%2Eis%2Dscrollable%7Bpadding%3A0%2015px%7D%2Eel%2Dtabs%5F%5Fnav%2Dscroll%7Boverflow%3Ahidden%7D%2Eel%2Dtabs%5F%5Fnav%2Dnext%2C%2Eel%2Dtabs%5F%5Fnav%2Dprev%7Bposition%3Aabsolute%3Bcursor%3Apointer%3Bline%2Dheight%3A44px%3Bfont%2Dsize%3A12px%3Bcolor%3A%238391a5%7D%2Eel%2Dtabs%5F%5Fnav%2Dnext%7Bright%3A0%7D%2Eel%2Dtabs%5F%5Fnav%2Dprev%7Bleft%3A0%7D%2Eel%2Dtabs%5F%5Fnav%7Bwhite%2Dspace%3Anowrap%3Bposition%3Arelative%3Btransition%3Atransform%20%2E3s%3Bfloat%3Aleft%7D%2Eel%2Dtabs%5F%5Fitem%7Bpadding%3A0%2016px%3Bheight%3A42px%3Bbox%2Dsizing%3Aborder%2Dbox%3Bline%2Dheight%3A42px%3Bdisplay%3Ainline%2Dblock%3Blist%2Dstyle%3Anone%3Bfont%2Dsize%3A14px%3Bcolor%3A%238391a5%3Bposition%3Arelative%7D%2Eel%2Dtabs%5F%5Fitem%20%2Eel%2Dicon%2Dclose%7Bborder%2Dradius%3A50%25%3Btext%2Dalign%3Acenter%3Btransition%3Aall%20%2E3s%20cubic%2Dbezier%28%2E645%2C%2E045%2C%2E355%2C1%29%3Bmargin%2Dleft%3A5px%7D%2Eel%2Dtabs%5F%5Fitem%20%2Eel%2Dicon%2Dclose%3Abefore%7B%2Dms%2Dtransform%3Ascale%28%2E7%2C%2E7%29%3Btransform%3Ascale%28%2E7%2C%2E7%29%3Bdisplay%3Ainline%2Dblock%7D%2Eel%2Dtabs%5F%5Fitem%20%2Eel%2Dicon%2Dclose%3Ahover%7Bbackground%2Dcolor%3A%2397a8be%3Bcolor%3A%23fff%7D%2Eel%2Dtabs%5F%5Fitem%3Ahover%7Bcolor%3A%231f2d3d%3Bcursor%3Apointer%7D%2Eel%2Dtabs%5F%5Fitem%2Eis%2Ddisabled%7Bcolor%3A%23bbb%3Bcursor%3Adefault%7D%2Eel%2Dtabs%5F%5Fitem%2Eis%2Dactive%7Bcolor%3A%2320a0ff%7D%2Eel%2Dtabs%5F%5Fcontent%7Boverflow%3Ahidden%3Bposition%3Arelative%7D%2Eel%2Dtabs%2D%2Dcard%3E%2Eel%2Dtabs%5F%5Fheader%20%2Eel%2Dtabs%5F%5Factive%2Dbar%7Bdisplay%3Anone%7D%2Eel%2Dtag%2C%2EslideInLeft%2Dtransition%2C%2EslideInRight%2Dtransition%7Bdisplay%3Ainline%2Dblock%7D%2Eel%2Dtabs%2D%2Dcard%3E%2Eel%2Dtabs%5F%5Fheader%20%2Eel%2Dtabs%5F%5Fitem%20%2Eel%2Dicon%2Dclose%7Bposition%3Arelative%3Bfont%2Dsize%3A12px%3Bwidth%3A0%3Bheight%3A14px%3Bvertical%2Dalign%3Amiddle%3Bline%2Dheight%3A15px%3Boverflow%3Ahidden%3Btop%3A%2D1px%3Bright%3A%2D2px%3B%2Dms%2Dtransform%2Dorigin%3A100%25%2050%25%3Btransform%2Dorigin%3A100%25%2050%25%7D%2Eel%2Dtabs%2D%2Dcard%3E%2Eel%2Dtabs%5F%5Fheader%20%2Eel%2Dtabs%5F%5Fitem%2Eis%2Dactive%2Eis%2Dclosable%20%2Eel%2Dicon%2Dclose%2C%2Eel%2Dtabs%2D%2Dcard%3E%2Eel%2Dtabs%5F%5Fheader%20%2Eel%2Dtabs%5F%5Fitem%2Eis%2Dclosable%3Ahover%20%2Eel%2Dicon%2Dclose%7Bwidth%3A14px%7D%2Eel%2Dtabs%2D%2Dcard%3E%2Eel%2Dtabs%5F%5Fheader%20%2Eel%2Dtabs%5F%5Fitem%7Bborder%3A1px%20solid%20transparent%3Btransition%3Aall%20%2E3s%20cubic%2Dbezier%28%2E645%2C%2E045%2C%2E355%2C1%29%7D%2Eel%2Dtabs%2D%2Dcard%3E%2Eel%2Dtabs%5F%5Fheader%20%2Eel%2Dtabs%5F%5Fitem%2Eis%2Dclosable%3Ahover%7Bpadding%2Dright%3A9px%3Bpadding%2Dleft%3A9px%7D%2Eel%2Dtabs%2D%2Dcard%3E%2Eel%2Dtabs%5F%5Fheader%20%2Eel%2Dtabs%5F%5Fitem%2Eis%2Dactive%7Bborder%3A1px%20solid%20%23d1dbe5%3Bborder%2Dbottom%2Dcolor%3A%23fff%3Bborder%2Dradius%3A4px%204px%200%200%7D%2Eel%2Dtabs%2D%2Dcard%3E%2Eel%2Dtabs%5F%5Fheader%20%2Eel%2Dtabs%5F%5Fitem%2Eis%2Dactive%2Eis%2Dclosable%7Bpadding%2Dright%3A16px%3Bpadding%2Dleft%3A16px%7D%2Eel%2Dtabs%2D%2Dborder%2Dcard%7Bbackground%3A%23fff%3Bborder%3A1px%20solid%20%23d1dbe5%7D%2Eel%2Dtabs%2D%2Dborder%2Dcard%3E%2Eel%2Dtabs%5F%5Fcontent%7Bpadding%3A15px%7D%2Eel%2Dtabs%2D%2Dborder%2Dcard%3E%2Eel%2Dtabs%5F%5Fheader%7Bbackground%2Dcolor%3A%23eef1f6%3Bmargin%3A0%7D%2Eel%2Dtabs%2D%2Dborder%2Dcard%3E%2Eel%2Dtabs%5F%5Fheader%20%2Eel%2Dtabs%5F%5Fitem%7Btransition%3Aall%20%2E3s%20cubic%2Dbezier%28%2E645%2C%2E045%2C%2E355%2C1%29%3Bborder%3A1px%20solid%20transparent%3Bborder%2Dtop%3A0%3Bmargin%2Dright%3A%2D1px%3Bmargin%2Dleft%3A%2D1px%7D%2Eel%2Dtabs%2D%2Dborder%2Dcard%3E%2Eel%2Dtabs%5F%5Fheader%20%2Eel%2Dtabs%5F%5Fitem%2Eis%2Dactive%7Bbackground%2Dcolor%3A%23fff%3Bborder%2Dright%2Dcolor%3A%23d1dbe5%3Bborder%2Dleft%2Dcolor%3A%23d1dbe5%7D%2Eel%2Dtabs%2D%2Dborder%2Dcard%3E%2Eel%2Dtabs%5F%5Fheader%20%2Eel%2Dtabs%5F%5Fitem%2Eis%2Dactive%3Afirst%2Dchild%7Bborder%2Dleft%2Dcolor%3A%23d1dbe5%7D%2Eel%2Dtabs%2D%2Dborder%2Dcard%3E%2Eel%2Dtabs%5F%5Fheader%20%2Eel%2Dtabs%5F%5Fitem%2Eis%2Dactive%3Alast%2Dchild%7Bborder%2Dright%2Dcolor%3A%23d1dbe5%7D%2EslideInRight%2Denter%7Banimation%3AslideInRight%2Denter%20%2E3s%7D%2EslideInRight%2Dleave%7Bposition%3Aabsolute%3Bleft%3A0%3Bright%3A0%3Banimation%3AslideInRight%2Dleave%20%2E3s%7D%2EslideInLeft%2Denter%7Banimation%3AslideInLeft%2Denter%20%2E3s%7D%2EslideInLeft%2Dleave%7Bposition%3Aabsolute%3Bleft%3A0%3Bright%3A0%3Banimation%3AslideInLeft%2Dleave%20%2E3s%7D%40keyframes%20slideInRight%2Denter%7B0%25%7Bopacity%3A0%3Btransform%2Dorigin%3A0%200%3Btransform%3AtranslateX%28100%25%29%7Dto%7Bopacity%3A1%3Btransform%2Dorigin%3A0%200%3Btransform%3AtranslateX%280%29%7D%7D%40keyframes%20slideInRight%2Dleave%7B0%25%7Btransform%2Dorigin%3A0%200%3Btransform%3AtranslateX%280%29%3Bopacity%3A1%7D100%25%7Btransform%2Dorigin%3A0%200%3Btransform%3AtranslateX%28100%25%29%3Bopacity%3A0%7D%7D%40keyframes%20slideInLeft%2Denter%7B0%25%7Bopacity%3A0%3Btransform%2Dorigin%3A0%200%3Btransform%3AtranslateX%28%2D100%25%29%7Dto%7Bopacity%3A1%3Btransform%2Dorigin%3A0%200%3Btransform%3AtranslateX%280%29%7D%7D%40keyframes%20slideInLeft%2Dleave%7B0%25%7Btransform%2Dorigin%3A0%200%3Btransform%3AtranslateX%280%29%3Bopacity%3A1%7D100%25%7Btransform%2Dorigin%3A0%200%3Btransform%3AtranslateX%28%2D100%25%29%3Bopacity%3A0%7D%7D%2Eel%2Dtag%7Bbackground%2Dcolor%3A%238391a5%3Bpadding%3A0%205px%3Bheight%3A24px%3Bline%2Dheight%3A22px%3Bfont%2Dsize%3A12px%3Bcolor%3A%23fff%3Bborder%2Dradius%3A4px%3Bbox%2Dsizing%3Aborder%2Dbox%3Bborder%3A1px%20solid%20transparent%3Bwhite%2Dspace%3Anowrap%7D%2Eel%2Dtag%20%2Eel%2Dicon%2Dclose%7Bborder%2Dradius%3A50%25%3Btext%2Dalign%3Acenter%3Bposition%3Arelative%3Bcursor%3Apointer%3Bfont%2Dsize%3A12px%3B%2Dms%2Dtransform%3Ascale%28%2E75%2C%2E75%29%3Btransform%3Ascale%28%2E75%2C%2E75%29%3Bheight%3A18px%3Bwidth%3A18px%3Bline%2Dheight%3A18px%3Bvertical%2Dalign%3Amiddle%3Btop%3A%2D1px%3Bright%3A%2D2px%7D%2Eel%2Dtag%20%2Eel%2Dicon%2Dclose%3Ahover%7Bbackground%2Dcolor%3A%23fff%3Bcolor%3A%238391a5%7D%2Eel%2Dtag%2D%2Dgray%7Bbackground%2Dcolor%3A%23e4e8f1%3Bborder%2Dcolor%3A%23e4e8f1%3Bcolor%3A%2348576a%7D%2Eel%2Dtag%2D%2Dgray%20%2Eel%2Dtag%5F%5Fclose%3Ahover%7Bbackground%2Dcolor%3A%2348576a%3Bcolor%3A%23fff%7D%2Eel%2Dtag%2D%2Dgray%2Eis%2Dhit%7Bborder%2Dcolor%3A%2348576a%7D%2Eel%2Dtag%2D%2Dprimary%7Bbackground%2Dcolor%3Argba%2832%2C160%2C255%2C%2E1%29%3Bborder%2Dcolor%3Argba%2832%2C160%2C255%2C%2E2%29%3Bcolor%3A%2320a0ff%7D%2Eel%2Dtag%2D%2Dprimary%20%2Eel%2Dtag%5F%5Fclose%3Ahover%7Bbackground%2Dcolor%3A%2320a0ff%3Bcolor%3A%23fff%7D%2Eel%2Dtag%2D%2Dprimary%2Eis%2Dhit%7Bborder%2Dcolor%3A%2320a0ff%7D%2Eel%2Dtag%2D%2Dsuccess%7Bbackground%2Dcolor%3Argba%2818%2C206%2C102%2C%2E1%29%3Bborder%2Dcolor%3Argba%2818%2C206%2C102%2C%2E2%29%3Bcolor%3A%2313ce66%7D%2Eel%2Dtag%2D%2Dsuccess%20%2Eel%2Dtag%5F%5Fclose%3Ahover%7Bbackground%2Dcolor%3A%2313ce66%3Bcolor%3A%23fff%7D%2Eel%2Dtag%2D%2Dsuccess%2Eis%2Dhit%7Bborder%2Dcolor%3A%2313ce66%7D%2Eel%2Dtag%2D%2Dwarning%7Bbackground%2Dcolor%3Argba%28247%2C186%2C41%2C%2E1%29%3Bborder%2Dcolor%3Argba%28247%2C186%2C41%2C%2E2%29%3Bcolor%3A%23f7ba2a%7D%2Eel%2Dtag%2D%2Dwarning%20%2Eel%2Dtag%5F%5Fclose%3Ahover%7Bbackground%2Dcolor%3A%23f7ba2a%3Bcolor%3A%23fff%7D%2Eel%2Dtag%2D%2Dwarning%2Eis%2Dhit%7Bborder%2Dcolor%3A%23f7ba2a%7D%2Eel%2Dtag%2D%2Ddanger%7Bbackground%2Dcolor%3Argba%28255%2C73%2C73%2C%2E1%29%3Bborder%2Dcolor%3Argba%28255%2C73%2C73%2C%2E2%29%3Bcolor%3A%23ff4949%7D%2Eel%2Dtag%2D%2Ddanger%20%2Eel%2Dtag%5F%5Fclose%3Ahover%7Bbackground%2Dcolor%3A%23ff4949%3Bcolor%3A%23fff%7D%2Eel%2Dtag%2D%2Ddanger%2Eis%2Dhit%7Bborder%2Dcolor%3A%23ff4949%7D%2Eel%2Dtree%7Bcursor%3Adefault%3Bbackground%3A%23fff%3Bborder%3A1px%20solid%20%23d1dbe5%7D%2Eel%2Dtree%5F%5Fempty%2Dblock%7Bposition%3Arelative%3Bmin%2Dheight%3A60px%3Btext%2Dalign%3Acenter%3Bwidth%3A100%25%3Bheight%3A100%25%7D%2Eel%2Dtree%5F%5Fempty%2Dtext%7Bposition%3Aabsolute%3Bleft%3A50%25%3Btop%3A50%25%3B%2Dms%2Dtransform%3Atranslate%28%2D50%25%2C%2D50%25%29%3Btransform%3Atranslate%28%2D50%25%2C%2D50%25%29%3Bcolor%3A%235e7382%7D%2Eel%2Dtree%2Dnode%7Bwhite%2Dspace%3Anowrap%7D%2Eel%2Dtree%2Dnode%3E%2Eel%2Dtree%2Dnode%5F%5Fchildren%7Boverflow%3Ahidden%3Bbackground%2Dcolor%3Atransparent%7D%2Eel%2Dtree%2Dnode%2Eis%2Dexpanded%3E%2Eel%2Dtree%2Dnode%5F%5Fchildren%7Bdisplay%3Ablock%7D%2Eel%2Dtree%2Dnode%5F%5Fexpand%2Dicon%2C%2Eel%2Dtree%2Dnode%5F%5Flabel%2C%2Eel%2Dtree%2Dnode%5F%5Floading%2Dicon%7Bdisplay%3Ainline%2Dblock%3Bvertical%2Dalign%3Amiddle%7D%2Eel%2Dtree%2Dnode%5F%5Fcontent%7Bline%2Dheight%3A36px%3Bheight%3A36px%3Bcursor%3Apointer%7D%2Eel%2Dtree%2Dnode%5F%5Fcontent%3E%2Eel%2Dcheckbox%2C%2Eel%2Dtree%2Dnode%5F%5Fcontent%3E%2Eel%2Dtree%2Dnode%5F%5Fexpand%2Dicon%7Bmargin%2Dright%3A8px%7D%2Eel%2Dtree%2Dnode%5F%5Fcontent%3E%2Eel%2Dcheckbox%7Bvertical%2Dalign%3Amiddle%7D%2Eel%2Dtree%2Dnode%5F%5Fcontent%3Ahover%7Bbackground%3A%23e4e8f1%7D%2Eel%2Dtree%2Dnode%5F%5Fexpand%2Dicon%7Bcursor%3Apointer%3Bwidth%3A0%3Bheight%3A0%3Bmargin%2Dleft%3A10px%3Bborder%3A6px%20solid%20transparent%3Bborder%2Dright%2Dwidth%3A0%3Bborder%2Dleft%2Dcolor%3A%2397a8be%3Bborder%2Dleft%2Dwidth%3A7px%3B%2Dms%2Dtransform%3Arotate%280%29%3Btransform%3Arotate%280%29%3Btransition%3Atransform%20%2E3s%20ease%2Din%2Dout%7D%2Eel%2Dtree%2Dnode%5F%5Fexpand%2Dicon%3Ahover%7Bborder%2Dleft%2Dcolor%3A%23999%7D%2Eel%2Dtree%2Dnode%5F%5Fexpand%2Dicon%2Eexpanded%7B%2Dms%2Dtransform%3Arotate%2890deg%29%3Btransform%3Arotate%2890deg%29%7D%2Eel%2Dtree%2Dnode%5F%5Fexpand%2Dicon%2Eis%2Dleaf%7Bborder%2Dcolor%3Atransparent%3Bcursor%3Adefault%7D%2Eel%2Dtree%2Dnode%5F%5Flabel%7Bfont%2Dsize%3A14px%7D%2Eel%2Dtree%2Dnode%5F%5Floading%2Dicon%7Bmargin%2Dright%3A4px%3Bfont%2Dsize%3A14px%3Bcolor%3A%2397a8be%7D%2Eel%2Dtree%2D%2Dhighlight%2Dcurrent%20%2Eel%2Dtree%2Dnode%2Eis%2Dcurrent%3E%2Eel%2Dtree%2Dnode%5F%5Fcontent%7Bbackground%2Dcolor%3A%23edf7ff%7D%2Eel%2Dalert%7Bwidth%3A100%25%3Bpadding%3A8px%2016px%3Bmargin%3A0%3Bbox%2Dsizing%3Aborder%2Dbox%3Bborder%2Dradius%3A4px%3Bposition%3Arelative%3Bbackground%2Dcolor%3A%23fff%3Boverflow%3Ahidden%3Bcolor%3A%23fff%3Bopacity%3A1%3Bdisplay%3Atable%3Btransition%3Aopacity%20%2E2s%7D%2Eel%2Dalert%20%2Eel%2Dalert%5F%5Fdescription%7Bcolor%3A%23fff%3Bfont%2Dsize%3A12px%3Bmargin%3A5px%200%200%7D%2Eel%2Dalert%2D%2Dsuccess%7Bbackground%2Dcolor%3A%2313ce66%7D%2Eel%2Dalert%2D%2Dinfo%7Bbackground%2Dcolor%3A%2350bfff%7D%2Eel%2Dalert%2D%2Dwarning%7Bbackground%2Dcolor%3A%23f7ba2a%7D%2Eel%2Dalert%2D%2Derror%7Bbackground%2Dcolor%3A%23ff4949%7D%2Eel%2Dalert%5F%5Fcontent%7Bdisplay%3Atable%2Dcell%3Bpadding%3A0%208px%7D%2Eel%2Dalert%5F%5Ficon%7Bfont%2Dsize%3A16px%3Bwidth%3A16px%3Bdisplay%3Atable%2Dcell%3Bcolor%3A%23fff%3Bvertical%2Dalign%3Amiddle%7D%2Eel%2Dalert%5F%5Ficon%2Eis%2Dbig%7Bfont%2Dsize%3A28px%3Bwidth%3A28px%7D%2Eel%2Dalert%5F%5Ftitle%7Bfont%2Dsize%3A13px%3Bline%2Dheight%3A18px%7D%2Eel%2Dalert%5F%5Ftitle%2Eis%2Dbold%7Bfont%2Dweight%3A700%7D%2Eel%2Dalert%5F%5Fclosebtn%7Bfont%2Dsize%3A12px%3Bcolor%3A%23fff%3Bopacity%3A1%3Btop%3A12px%3Bright%3A15px%3Bposition%3Aabsolute%3Bcursor%3Apointer%7D%2Eel%2Dalert%2Dfade%2Denter%2C%2Eel%2Dalert%2Dfade%2Dleave%2Dactive%2C%2Eel%2Dloading%2Dfade%2Denter%2C%2Eel%2Dloading%2Dfade%2Dleave%2Dactive%2C%2Eel%2Dnotification%2Dfade%2Dleave%2Dactive%7Bopacity%3A0%7D%2Eel%2Dalert%5F%5Fclosebtn%2Eis%2Dcustomed%7Bfont%2Dstyle%3Anormal%3Bfont%2Dsize%3A13px%3Btop%3A9px%7D%2Eel%2Dnotification%7Bwidth%3A330px%3Bpadding%3A20px%3Bbox%2Dsizing%3Aborder%2Dbox%3Bborder%2Dradius%3A2px%3Bposition%3Afixed%3Bright%3A16px%3Bbackground%2Dcolor%3A%23fff%3Bbox%2Dshadow%3A0%202px%204px%20rgba%280%2C0%2C0%2C%2E12%29%2C0%200%206px%20rgba%280%2C0%2C0%2C%2E04%29%3Btransition%3Aopacity%20%2E3s%2Ctransform%20%2E3s%2Cright%20%2E3s%2Ctop%20%2E4s%3Boverflow%3Ahidden%7D%2Eel%2Dnotification%20%2Eel%2Dicon%2Dcircle%2Dcheck%7Bcolor%3A%2313ce66%7D%2Eel%2Dnotification%20%2Eel%2Dicon%2Dcircle%2Dcross%7Bcolor%3A%23ff4949%7D%2Eel%2Dnotification%20%2Eel%2Dicon%2Dinformation%7Bcolor%3A%2350bfff%7D%2Eel%2Dnotification%20%2Eel%2Dicon%2Dwarning%7Bcolor%3A%23f7ba2a%7D%2Eel%2Dnotification%5F%5Fgroup%7Bmargin%2Dleft%3A0%7D%2Eel%2Dnotification%5F%5Fgroup%2Eis%2Dwith%2Dicon%7Bmargin%2Dleft%3A55px%7D%2Eel%2Dnotification%5F%5Ftitle%7Bfont%2Dweight%3A400%3Bfont%2Dsize%3A16px%3Bcolor%3A%231f2d3d%3Bmargin%3A0%7D%2Eel%2Dnotification%5F%5Fcontent%7Bfont%2Dsize%3A14px%3Bline%2Dheight%3A21px%3Bmargin%3A10px%200%200%3Bcolor%3A%238391a5%3Btext%2Dalign%3Ajustify%7D%2Eel%2Dnotification%5F%5Ficon%7Bwidth%3A40px%3Bheight%3A40px%3Bfont%2Dsize%3A40px%3Bfloat%3Aleft%3Bposition%3Arelative%3Btop%3A3px%7D%2Eel%2Dnotification%5F%5FcloseBtn%7Btop%3A20px%3Bright%3A20px%3Bposition%3Aabsolute%3Bcursor%3Apointer%3Bcolor%3A%23bfcbd9%3Bfont%2Dsize%3A14px%7D%2Eel%2Dnotification%5F%5FcloseBtn%3Ahover%7Bcolor%3A%2397a8be%7D%2Eel%2Dnotification%2Dfade%2Denter%7B%2Dms%2Dtransform%3AtranslateX%28100%25%29%3Btransform%3AtranslateX%28100%25%29%3Bright%3A0%7D%2Eel%2Dinput%2Dnumber%7Bdisplay%3Ainline%2Dblock%3Boverflow%3Ahidden%3Bwidth%3A180px%3Bposition%3Arelative%7D%2Eel%2Dinput%2Dnumber%20%2Eel%2Dinput%7Bdisplay%3Ablock%7D%2Eel%2Dinput%2Dnumber%20%2Eel%2Dinput%5F%5Finner%7B%2Dwebkit%2Dappearance%3Anone%3B%2Dmoz%2Dappearance%3Anone%3Bappearance%3Anone%3Bpadding%2Dright%3A82px%7D%2Eel%2Dinput%2Dnumber%2Eis%2Dwithout%2Dcontrols%20%2Eel%2Dinput%5F%5Finner%7Bpadding%2Dright%3A10px%7D%2Eel%2Dinput%2Dnumber%2Eis%2Ddisabled%20%2Eel%2Dinput%2Dnumber%5F%5Fdecrease%2C%2Eel%2Dinput%2Dnumber%2Eis%2Ddisabled%20%2Eel%2Dinput%2Dnumber%5F%5Fincrease%7Bborder%2Dcolor%3A%23d1dbe5%3Bcolor%3A%23d1dbe5%7D%2Eel%2Dinput%2Dnumber%2Eis%2Ddisabled%20%2Eel%2Dinput%2Dnumber%5F%5Fdecrease%3Ahover%2C%2Eel%2Dinput%2Dnumber%2Eis%2Ddisabled%20%2Eel%2Dinput%2Dnumber%5F%5Fincrease%3Ahover%7Bcolor%3A%23d1dbe5%3Bcursor%3Anot%2Dallowed%7D%2Eel%2Dinput%2Dnumber%5F%5Fdecrease%2C%2Eel%2Dinput%2Dnumber%5F%5Fincrease%7Bheight%3Aauto%3Bborder%2Dleft%3A1px%20solid%20%23bfcbd9%3Bwidth%3A36px%3Bline%2Dheight%3A34px%3Btop%3A1px%3Btext%2Dalign%3Acenter%3Bcolor%3A%2397a8be%3Bcursor%3Apointer%3Bposition%3Aabsolute%3Bz%2Dindex%3A1%7D%2Eel%2Dinput%2Dnumber%5F%5Fdecrease%3Ahover%2C%2Eel%2Dinput%2Dnumber%5F%5Fincrease%3Ahover%7Bcolor%3A%2320a0ff%7D%2Eel%2Dinput%2Dnumber%5F%5Fdecrease%3Ahover%3Anot%28%2Eis%2Ddisabled%29%7E%2Eel%2Dinput%20%2Eel%2Dinput%5F%5Finner%3Anot%28%2Eis%2Ddisabled%29%2C%2Eel%2Dinput%2Dnumber%5F%5Fincrease%3Ahover%3Anot%28%2Eis%2Ddisabled%29%7E%2Eel%2Dinput%20%2Eel%2Dinput%5F%5Finner%3Anot%28%2Eis%2Ddisabled%29%7Bborder%2Dcolor%3A%2320a0ff%7D%2Eel%2Dinput%2Dnumber%5F%5Fdecrease%2Eis%2Ddisabled%2C%2Eel%2Dinput%2Dnumber%5F%5Fincrease%2Eis%2Ddisabled%7Bcolor%3A%23d1dbe5%3Bcursor%3Anot%2Dallowed%7D%2Eel%2Dinput%2Dnumber%5F%5Fincrease%7Bright%3A0%7D%2Eel%2Dinput%2Dnumber%5F%5Fdecrease%7Bright%3A37px%7D%2Eel%2Dinput%2Dnumber%2D%2Dlarge%7Bwidth%3A200px%7D%2Eel%2Dinput%2Dnumber%2D%2Dlarge%20%2Eel%2Dinput%2Dnumber%5F%5Fdecrease%2C%2Eel%2Dinput%2Dnumber%2D%2Dlarge%20%2Eel%2Dinput%2Dnumber%5F%5Fincrease%7Bline%2Dheight%3A42px%3Bwidth%3A42px%3Bfont%2Dsize%3A16px%7D%2Eel%2Dinput%2Dnumber%2D%2Dlarge%20%2Eel%2Dinput%2Dnumber%5F%5Fdecrease%7Bright%3A43px%7D%2Eel%2Dinput%2Dnumber%2D%2Dlarge%20%2Eel%2Dinput%5F%5Finner%7Bpadding%2Dright%3A94px%7D%2Eel%2Dinput%2Dnumber%2D%2Dsmall%7Bwidth%3A130px%7D%2Eel%2Dinput%2Dnumber%2D%2Dsmall%20%2Eel%2Dinput%2Dnumber%5F%5Fdecrease%2C%2Eel%2Dinput%2Dnumber%2D%2Dsmall%20%2Eel%2Dinput%2Dnumber%5F%5Fincrease%7Bline%2Dheight%3A30px%3Bwidth%3A30px%3Bfont%2Dsize%3A13px%7D%2Eel%2Dinput%2Dnumber%2D%2Dsmall%20%2Eel%2Dinput%2Dnumber%5F%5Fdecrease%7Bright%3A31px%7D%2Eel%2Dinput%2Dnumber%2D%2Dsmall%20%2Eel%2Dinput%5F%5Finner%7Bpadding%2Dright%3A70px%7D%2Eel%2Dtooltip%5F%5Fpopper%7Bposition%3Aabsolute%3Bborder%2Dradius%3A4px%3Bpadding%3A10px%3Bz%2Dindex%3A2000%3Bfont%2Dsize%3A12px%3Bline%2Dheight%3A1%2E2%7D%2Eel%2Dtooltip%5F%5Fpopper%20%2Epopper%5F%5Farrow%2C%2Eel%2Dtooltip%5F%5Fpopper%20%2Epopper%5F%5Farrow%3A%3Aafter%7Bposition%3Aabsolute%3Bdisplay%3Ablock%3Bwidth%3A0%3Bheight%3A0%3Bborder%2Dcolor%3Atransparent%3Bborder%2Dstyle%3Asolid%7D%2Eel%2Dtooltip%5F%5Fpopper%20%2Epopper%5F%5Farrow%7Bborder%2Dwidth%3A6px%7D%2Eel%2Dtooltip%5F%5Fpopper%20%2Epopper%5F%5Farrow%3A%3Aafter%7Bcontent%3A%22%20%22%3Bborder%2Dwidth%3A5px%7D%2Eel%2Dprogress%2Dbar%5F%5Finner%3Aafter%2C%2Eel%2Drow%3Aafter%2C%2Eel%2Drow%3Abefore%2C%2Eel%2Dslider%3Aafter%2C%2Eel%2Dslider%3Abefore%2C%2Eel%2Dslider%5F%5Fbutton%2Dwrapper%3Aafter%2C%2Eel%2Dupload%2Dcover%3Aafter%7Bcontent%3A%22%22%7D%2Eel%2Dtooltip%5F%5Fpopper%5Bx%2Dplacement%5E%3Dtop%5D%7Bmargin%2Dbottom%3A12px%7D%2Eel%2Dtooltip%5F%5Fpopper%5Bx%2Dplacement%5E%3Dtop%5D%20%2Epopper%5F%5Farrow%7Bbottom%3A%2D6px%3Bborder%2Dtop%2Dcolor%3A%231f2d3d%3Bborder%2Dbottom%2Dwidth%3A0%7D%2Eel%2Dtooltip%5F%5Fpopper%5Bx%2Dplacement%5E%3Dtop%5D%20%2Epopper%5F%5Farrow%3A%3Aafter%7Bbottom%3A1px%3Bmargin%2Dleft%3A%2D5px%3Bborder%2Dtop%2Dcolor%3A%231f2d3d%3Bborder%2Dbottom%2Dwidth%3A0%7D%2Eel%2Dtooltip%5F%5Fpopper%5Bx%2Dplacement%5E%3Dbottom%5D%7Bmargin%2Dtop%3A12px%7D%2Eel%2Dtooltip%5F%5Fpopper%5Bx%2Dplacement%5E%3Dbottom%5D%20%2Epopper%5F%5Farrow%7Btop%3A%2D6px%3Bborder%2Dtop%2Dwidth%3A0%3Bborder%2Dbottom%2Dcolor%3A%231f2d3d%7D%2Eel%2Dtooltip%5F%5Fpopper%5Bx%2Dplacement%5E%3Dbottom%5D%20%2Epopper%5F%5Farrow%3A%3Aafter%7Btop%3A1px%3Bmargin%2Dleft%3A%2D5px%3Bborder%2Dtop%2Dwidth%3A0%3Bborder%2Dbottom%2Dcolor%3A%231f2d3d%7D%2Eel%2Dtooltip%5F%5Fpopper%5Bx%2Dplacement%5E%3Dright%5D%7Bmargin%2Dleft%3A12px%7D%2Eel%2Dtooltip%5F%5Fpopper%5Bx%2Dplacement%5E%3Dright%5D%20%2Epopper%5F%5Farrow%7Bleft%3A%2D6px%3Bborder%2Dright%2Dcolor%3A%231f2d3d%3Bborder%2Dleft%2Dwidth%3A0%7D%2Eel%2Dtooltip%5F%5Fpopper%5Bx%2Dplacement%5E%3Dright%5D%20%2Epopper%5F%5Farrow%3A%3Aafter%7Bbottom%3A%2D5px%3Bleft%3A1px%3Bborder%2Dright%2Dcolor%3A%231f2d3d%3Bborder%2Dleft%2Dwidth%3A0%7D%2Eel%2Dtooltip%5F%5Fpopper%5Bx%2Dplacement%5E%3Dleft%5D%7Bmargin%2Dright%3A12px%7D%2Eel%2Dtooltip%5F%5Fpopper%5Bx%2Dplacement%5E%3Dleft%5D%20%2Epopper%5F%5Farrow%7Bright%3A%2D6px%3Bborder%2Dright%2Dwidth%3A0%3Bborder%2Dleft%2Dcolor%3A%231f2d3d%7D%2Eel%2Dtooltip%5F%5Fpopper%5Bx%2Dplacement%5E%3Dleft%5D%20%2Epopper%5F%5Farrow%3A%3Aafter%7Bright%3A1px%3Bbottom%3A%2D5px%3Bmargin%2Dleft%3A%2D5px%3Bborder%2Dright%2Dwidth%3A0%3Bborder%2Dleft%2Dcolor%3A%231f2d3d%7D%2Eel%2Dtooltip%5F%5Fpopper%2Eis%2Dlight%7Bbackground%3A%23fff%3Bborder%3A1px%20solid%20%231f2d3d%7D%2Eel%2Dtooltip%5F%5Fpopper%2Eis%2Dlight%5Bx%2Dplacement%5E%3Dtop%5D%20%2Epopper%5F%5Farrow%7Bborder%2Dtop%2Dcolor%3A%231f2d3d%7D%2Eel%2Dtooltip%5F%5Fpopper%2Eis%2Dlight%5Bx%2Dplacement%5E%3Dtop%5D%20%2Epopper%5F%5Farrow%3A%3Aafter%7Bborder%2Dtop%2Dcolor%3A%23fff%7D%2Eel%2Dtooltip%5F%5Fpopper%2Eis%2Dlight%5Bx%2Dplacement%5E%3Dbottom%5D%20%2Epopper%5F%5Farrow%7Bborder%2Dbottom%2Dcolor%3A%231f2d3d%7D%2Eel%2Dtooltip%5F%5Fpopper%2Eis%2Dlight%5Bx%2Dplacement%5E%3Dbottom%5D%20%2Epopper%5F%5Farrow%3A%3Aafter%7Bborder%2Dbottom%2Dcolor%3A%23fff%7D%2Eel%2Dtooltip%5F%5Fpopper%2Eis%2Dlight%5Bx%2Dplacement%5E%3Dleft%5D%20%2Epopper%5F%5Farrow%7Bborder%2Dleft%2Dcolor%3A%231f2d3d%7D%2Eel%2Dtooltip%5F%5Fpopper%2Eis%2Dlight%5Bx%2Dplacement%5E%3Dleft%5D%20%2Epopper%5F%5Farrow%3A%3Aafter%7Bborder%2Dleft%2Dcolor%3A%23fff%7D%2Eel%2Dtooltip%5F%5Fpopper%2Eis%2Dlight%5Bx%2Dplacement%5E%3Dright%5D%20%2Epopper%5F%5Farrow%7Bborder%2Dright%2Dcolor%3A%231f2d3d%7D%2Eel%2Dtooltip%5F%5Fpopper%2Eis%2Dlight%5Bx%2Dplacement%5E%3Dright%5D%20%2Epopper%5F%5Farrow%3A%3Aafter%7Bborder%2Dright%2Dcolor%3A%23fff%7D%2Eel%2Dtooltip%5F%5Fpopper%2Eis%2Ddark%7Bbackground%3A%231f2d3d%3Bcolor%3A%23fff%7D%2Eel%2Dslider%3Aafter%2C%2Eel%2Dslider%3Abefore%7Bdisplay%3Atable%7D%2Eel%2Dslider%5F%5Fbutton%2Dwrapper%20%2Eel%2Dtooltip%2C%2Eel%2Dslider%5F%5Fbutton%2Dwrapper%3Aafter%7Bdisplay%3Ainline%2Dblock%3Bvertical%2Dalign%3Amiddle%7D%2Eel%2Dslider%3Aafter%7Bclear%3Aboth%7D%2Eel%2Dslider%5F%5Frunway%7Bwidth%3A100%25%3Bheight%3A4px%3Bmargin%3A16px%200%3Bbackground%2Dcolor%3A%23e4e8f1%3Bborder%2Dradius%3A3px%3Bposition%3Arelative%3Bcursor%3Apointer%3Bvertical%2Dalign%3Amiddle%7D%2Eel%2Dslider%5F%5Frunway%2Eshow%2Dinput%7Bmargin%2Dright%3A160px%3Bwidth%3Aauto%7D%2Eel%2Dslider%5F%5Frunway%2Edisabled%7Bcursor%3Adefault%7D%2Eel%2Dslider%5F%5Frunway%2Edisabled%20%2Eel%2Dslider%5F%5Fbar%2C%2Eel%2Dslider%5F%5Frunway%2Edisabled%20%2Eel%2Dslider%5F%5Fbutton%7Bbackground%2Dcolor%3A%23bfcbd9%7D%2Eel%2Dslider%5F%5Frunway%2Edisabled%20%2Eel%2Dslider%5F%5Fbutton%2Dwrapper%2Edragging%2C%2Eel%2Dslider%5F%5Frunway%2Edisabled%20%2Eel%2Dslider%5F%5Fbutton%2Dwrapper%2Ehover%2C%2Eel%2Dslider%5F%5Frunway%2Edisabled%20%2Eel%2Dslider%5F%5Fbutton%2Dwrapper%3Ahover%7Bcursor%3Anot%2Dallowed%7D%2Eel%2Dslider%5F%5Frunway%2Edisabled%20%2Eel%2Dslider%5F%5Fbutton%2Edragging%2C%2Eel%2Dslider%5F%5Frunway%2Edisabled%20%2Eel%2Dslider%5F%5Fbutton%2Ehover%2C%2Eel%2Dslider%5F%5Frunway%2Edisabled%20%2Eel%2Dslider%5F%5Fbutton%3Ahover%7B%2Dms%2Dtransform%3Ascale%281%29%3Btransform%3Ascale%281%29%3Bcursor%3Anot%2Dallowed%7D%2Eel%2Dslider%5F%5Finput%7Bfloat%3Aright%3Bmargin%2Dtop%3A3px%7D%2Eel%2Dslider%5F%5Fbar%7Bheight%3A4px%3Bbackground%2Dcolor%3A%2320a0ff%3Bborder%2Dtop%2Dleft%2Dradius%3A3px%3Bborder%2Dbottom%2Dleft%2Dradius%3A3px%3Bposition%3Aabsolute%7D%2Eel%2Dslider%5F%5Fbutton%2Dwrapper%7Bwidth%3A36px%3Bheight%3A36px%3Bposition%3Aabsolute%3Bz%2Dindex%3A1001%3Btop%3A%2D16px%3B%2Dms%2Dtransform%3AtranslateX%28%2D50%25%29%3Btransform%3AtranslateX%28%2D50%25%29%3Bbackground%2Dcolor%3Atransparent%3Btext%2Dalign%3Acenter%3Buser%2Dselect%3Anone%7D%2Eel%2Dslider%5F%5Fbutton%2Dwrapper%3Aafter%7Bheight%3A100%25%7D%2Eel%2Dslider%5F%5Fbutton%2Dwrapper%2Ehover%2C%2Eel%2Dslider%5F%5Fbutton%2Dwrapper%3Ahover%7Bcursor%3A%2Dwebkit%2Dgrab%3Bcursor%3Agrab%7D%2Eel%2Dslider%5F%5Fbutton%2Dwrapper%2Edragging%7Bcursor%3A%2Dwebkit%2Dgrabbing%3Bcursor%3Agrabbing%7D%2Eel%2Dslider%5F%5Fbutton%7Bwidth%3A12px%3Bheight%3A12px%3Bbackground%2Dcolor%3A%2320a0ff%3Bborder%2Dradius%3A50%25%3Btransition%3A%2E2s%3B%2Dwebkit%2Duser%2Dselect%3Anone%3B%2Dmoz%2Duser%2Dselect%3Anone%3B%2Dms%2Duser%2Dselect%3Anone%3Buser%2Dselect%3Anone%7D%2Eel%2Dslider%5F%5Fbutton%2Edragging%2C%2Eel%2Dslider%5F%5Fbutton%2Ehover%2C%2Eel%2Dslider%5F%5Fbutton%3Ahover%7B%2Dms%2Dtransform%3Ascale%281%2E5%29%3Btransform%3Ascale%281%2E5%29%3Bbackground%2Dcolor%3A%231c8de0%7D%2Eel%2Dslider%5F%5Fbutton%2Ehover%2C%2Eel%2Dslider%5F%5Fbutton%3Ahover%7Bcursor%3A%2Dwebkit%2Dgrab%3Bcursor%3Agrab%7D%2Eel%2Dslider%5F%5Fbutton%2Edragging%7Bcursor%3A%2Dwebkit%2Dgrabbing%3Bcursor%3Agrabbing%7D%2Eel%2Dslider%5F%5Fstop%7Bposition%3Aabsolute%3Bwidth%3A4px%3Bheight%3A4px%3Bborder%2Dradius%3A100%25%3Bbackground%2Dcolor%3A%23bfcbd9%3B%2Dms%2Dtransform%3AtranslateX%28%2D50%25%29%3Btransform%3AtranslateX%28%2D50%25%29%7D%2Eel%2Dloading%2Dmask%7Bposition%3Aabsolute%3Bz%2Dindex%3A10000%3Bbackground%2Dcolor%3Argba%28255%2C255%2C255%2C%2E9%29%3Bmargin%3A0%3Btop%3A0%3Bright%3A0%3Bbottom%3A0%3Bleft%3A0%3Btransition%3Aopacity%20%2E3s%7D%2Eel%2Dloading%2Dmask%2Eis%2Dfullscreen%7Bposition%3Afixed%7D%2Eel%2Dloading%2Dmask%2Eis%2Dfullscreen%20%2Eel%2Dloading%2Dspinner%7Bmargin%2Dtop%3A%2D25px%7D%2Eel%2Dloading%2Dmask%2Eis%2Dfullscreen%20%2Eel%2Dloading%2Dspinner%20%2Ecircular%7Bwidth%3A50px%3Bheight%3A50px%7D%2Eel%2Dloading%2Dspinner%7Btop%3A50%25%3Bmargin%2Dtop%3A%2D21px%3Bwidth%3A100%25%3Btext%2Dalign%3Acenter%3Bposition%3Aabsolute%7D%2Eel%2Dcol%2Dpull%2D0%2C%2Eel%2Dcol%2Dpull%2D1%2C%2Eel%2Dcol%2Dpull%2D10%2C%2Eel%2Dcol%2Dpull%2D11%2C%2Eel%2Dcol%2Dpull%2D13%2C%2Eel%2Dcol%2Dpull%2D14%2C%2Eel%2Dcol%2Dpull%2D15%2C%2Eel%2Dcol%2Dpull%2D16%2C%2Eel%2Dcol%2Dpull%2D17%2C%2Eel%2Dcol%2Dpull%2D18%2C%2Eel%2Dcol%2Dpull%2D19%2C%2Eel%2Dcol%2Dpull%2D2%2C%2Eel%2Dcol%2Dpull%2D20%2C%2Eel%2Dcol%2Dpull%2D21%2C%2Eel%2Dcol%2Dpull%2D22%2C%2Eel%2Dcol%2Dpull%2D23%2C%2Eel%2Dcol%2Dpull%2D24%2C%2Eel%2Dcol%2Dpull%2D3%2C%2Eel%2Dcol%2Dpull%2D4%2C%2Eel%2Dcol%2Dpull%2D5%2C%2Eel%2Dcol%2Dpull%2D6%2C%2Eel%2Dcol%2Dpull%2D7%2C%2Eel%2Dcol%2Dpull%2D8%2C%2Eel%2Dcol%2Dpull%2D9%2C%2Eel%2Dcol%2Dpush%2D0%2C%2Eel%2Dcol%2Dpush%2D1%2C%2Eel%2Dcol%2Dpush%2D10%2C%2Eel%2Dcol%2Dpush%2D11%2C%2Eel%2Dcol%2Dpush%2D12%2C%2Eel%2Dcol%2Dpush%2D13%2C%2Eel%2Dcol%2Dpush%2D14%2C%2Eel%2Dcol%2Dpush%2D15%2C%2Eel%2Dcol%2Dpush%2D16%2C%2Eel%2Dcol%2Dpush%2D17%2C%2Eel%2Dcol%2Dpush%2D18%2C%2Eel%2Dcol%2Dpush%2D19%2C%2Eel%2Dcol%2Dpush%2D2%2C%2Eel%2Dcol%2Dpush%2D20%2C%2Eel%2Dcol%2Dpush%2D21%2C%2Eel%2Dcol%2Dpush%2D22%2C%2Eel%2Dcol%2Dpush%2D23%2C%2Eel%2Dcol%2Dpush%2D24%2C%2Eel%2Dcol%2Dpush%2D3%2C%2Eel%2Dcol%2Dpush%2D4%2C%2Eel%2Dcol%2Dpush%2D5%2C%2Eel%2Dcol%2Dpush%2D6%2C%2Eel%2Dcol%2Dpush%2D7%2C%2Eel%2Dcol%2Dpush%2D8%2C%2Eel%2Dcol%2Dpush%2D9%2C%2Eel%2Drow%7Bposition%3Arelative%7D%2Eel%2Dloading%2Dspinner%20%2Eel%2Dloading%2Dtext%7Bcolor%3A%2320a0ff%3Bmargin%3A3px%200%3Bfont%2Dsize%3A14px%7D%2Eel%2Dloading%2Dspinner%20%2Ecircular%7Bwidth%3A42px%3Bheight%3A42px%3Banimation%3Aloading%2Drotate%202s%20linear%20infinite%7D%2Eel%2Dloading%2Dspinner%20%2Epath%7Banimation%3Aloading%2Ddash%201%2E5s%20ease%2Din%2Dout%20infinite%3Bstroke%2Ddasharray%3A90%2C150%3Bstroke%2Ddashoffset%3A0%3Bstroke%2Dwidth%3A2%3Bstroke%3A%2320a0ff%3Bstroke%2Dlinecap%3Around%7D%40keyframes%20loading%2Drotate%7B100%25%7Btransform%3Arotate%28360deg%29%7D%7D%40keyframes%20loading%2Ddash%7B0%25%7Bstroke%2Ddasharray%3A1%2C200%3Bstroke%2Ddashoffset%3A0%7D50%25%7Bstroke%2Ddasharray%3A90%2C150%3Bstroke%2Ddashoffset%3A%2D40px%7D100%25%7Bstroke%2Ddasharray%3A90%2C150%3Bstroke%2Ddashoffset%3A%2D120px%7D%7D%2Eel%2Drow%7Bbox%2Dsizing%3Aborder%2Dbox%7D%2Eel%2Drow%3Aafter%2C%2Eel%2Drow%3Abefore%7Bdisplay%3Atable%7D%2Eel%2Drow%3Aafter%7Bclear%3Aboth%7D%2Eel%2Drow%2D%2Dflex%7Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%7D%2Eel%2Drow%2D%2Dflex%3Aafter%2C%2Eel%2Drow%2D%2Dflex%3Abefore%7Bdisplay%3Anone%7D%2Eel%2Drow%2D%2Dflex%2Eis%2Dalign%2Dbottom%7B%2Dms%2Dflex%2Dalign%3Aend%3Balign%2Ditems%3Aflex%2Dend%7D%2Eel%2Drow%2D%2Dflex%2Eis%2Dalign%2Dmiddle%7B%2Dms%2Dflex%2Dalign%3Acenter%3Balign%2Ditems%3Acenter%7D%2Eel%2Drow%2D%2Dflex%2Eis%2Djustify%2Dspace%2Daround%7B%2Dms%2Dflex%2Dpack%3Adistribute%3Bjustify%2Dcontent%3Aspace%2Daround%7D%2Eel%2Drow%2D%2Dflex%2Eis%2Djustify%2Dspace%2Dbetween%7B%2Dms%2Dflex%2Dpack%3Ajustify%3Bjustify%2Dcontent%3Aspace%2Dbetween%7D%2Eel%2Drow%2D%2Dflex%2Eis%2Djustify%2Dend%7B%2Dms%2Dflex%2Dpack%3Aend%3Bjustify%2Dcontent%3Aflex%2Dend%7D%2Eel%2Drow%2D%2Dflex%2Eis%2Djustify%2Dcenter%7B%2Dms%2Dflex%2Dpack%3Acenter%3Bjustify%2Dcontent%3Acenter%7D%2Eel%2Dcol%2D1%2C%2Eel%2Dcol%2D10%2C%2Eel%2Dcol%2D11%2C%2Eel%2Dcol%2D12%2C%2Eel%2Dcol%2D13%2C%2Eel%2Dcol%2D14%2C%2Eel%2Dcol%2D15%2C%2Eel%2Dcol%2D16%2C%2Eel%2Dcol%2D17%2C%2Eel%2Dcol%2D18%2C%2Eel%2Dcol%2D19%2C%2Eel%2Dcol%2D2%2C%2Eel%2Dcol%2D20%2C%2Eel%2Dcol%2D21%2C%2Eel%2Dcol%2D22%2C%2Eel%2Dcol%2D23%2C%2Eel%2Dcol%2D24%2C%2Eel%2Dcol%2D3%2C%2Eel%2Dcol%2D4%2C%2Eel%2Dcol%2D5%2C%2Eel%2Dcol%2D6%2C%2Eel%2Dcol%2D7%2C%2Eel%2Dcol%2D8%2C%2Eel%2Dcol%2D9%7Bfloat%3Aleft%3Bbox%2Dsizing%3Aborder%2Dbox%7D%2Eel%2Dcol%2D0%7Bwidth%3A0%7D%2Eel%2Dcol%2Doffset%2D0%7Bmargin%2Dleft%3A0%7D%2Eel%2Dcol%2Dpull%2D0%7Bright%3A0%7D%2Eel%2Dcol%2Dpush%2D0%7Bleft%3A0%7D%2Eel%2Dcol%2D1%7Bwidth%3A4%2E16667%25%7D%2Eel%2Dcol%2Doffset%2D1%7Bmargin%2Dleft%3A4%2E16667%25%7D%2Eel%2Dcol%2Dpull%2D1%7Bright%3A4%2E16667%25%7D%2Eel%2Dcol%2Dpush%2D1%7Bleft%3A4%2E16667%25%7D%2Eel%2Dcol%2D2%7Bwidth%3A8%2E33333%25%7D%2Eel%2Dcol%2Doffset%2D2%7Bmargin%2Dleft%3A8%2E33333%25%7D%2Eel%2Dcol%2Dpull%2D2%7Bright%3A8%2E33333%25%7D%2Eel%2Dcol%2Dpush%2D2%7Bleft%3A8%2E33333%25%7D%2Eel%2Dcol%2D3%7Bwidth%3A12%2E5%25%7D%2Eel%2Dcol%2Doffset%2D3%7Bmargin%2Dleft%3A12%2E5%25%7D%2Eel%2Dcol%2Dpull%2D3%7Bright%3A12%2E5%25%7D%2Eel%2Dcol%2Dpush%2D3%7Bleft%3A12%2E5%25%7D%2Eel%2Dcol%2D4%7Bwidth%3A16%2E66667%25%7D%2Eel%2Dcol%2Doffset%2D4%7Bmargin%2Dleft%3A16%2E66667%25%7D%2Eel%2Dcol%2Dpull%2D4%7Bright%3A16%2E66667%25%7D%2Eel%2Dcol%2Dpush%2D4%7Bleft%3A16%2E66667%25%7D%2Eel%2Dcol%2D5%7Bwidth%3A20%2E83333%25%7D%2Eel%2Dcol%2Doffset%2D5%7Bmargin%2Dleft%3A20%2E83333%25%7D%2Eel%2Dcol%2Dpull%2D5%7Bright%3A20%2E83333%25%7D%2Eel%2Dcol%2Dpush%2D5%7Bleft%3A20%2E83333%25%7D%2Eel%2Dcol%2D6%7Bwidth%3A25%25%7D%2Eel%2Dcol%2Doffset%2D6%7Bmargin%2Dleft%3A25%25%7D%2Eel%2Dcol%2Dpull%2D6%7Bright%3A25%25%7D%2Eel%2Dcol%2Dpush%2D6%7Bleft%3A25%25%7D%2Eel%2Dcol%2D7%7Bwidth%3A29%2E16667%25%7D%2Eel%2Dcol%2Doffset%2D7%7Bmargin%2Dleft%3A29%2E16667%25%7D%2Eel%2Dcol%2Dpull%2D7%7Bright%3A29%2E16667%25%7D%2Eel%2Dcol%2Dpush%2D7%7Bleft%3A29%2E16667%25%7D%2Eel%2Dcol%2D8%7Bwidth%3A33%2E33333%25%7D%2Eel%2Dcol%2Doffset%2D8%7Bmargin%2Dleft%3A33%2E33333%25%7D%2Eel%2Dcol%2Dpull%2D8%7Bright%3A33%2E33333%25%7D%2Eel%2Dcol%2Dpush%2D8%7Bleft%3A33%2E33333%25%7D%2Eel%2Dcol%2D9%7Bwidth%3A37%2E5%25%7D%2Eel%2Dcol%2Doffset%2D9%7Bmargin%2Dleft%3A37%2E5%25%7D%2Eel%2Dcol%2Dpull%2D9%7Bright%3A37%2E5%25%7D%2Eel%2Dcol%2Dpush%2D9%7Bleft%3A37%2E5%25%7D%2Eel%2Dcol%2D10%7Bwidth%3A41%2E66667%25%7D%2Eel%2Dcol%2Doffset%2D10%7Bmargin%2Dleft%3A41%2E66667%25%7D%2Eel%2Dcol%2Dpull%2D10%7Bright%3A41%2E66667%25%7D%2Eel%2Dcol%2Dpush%2D10%7Bleft%3A41%2E66667%25%7D%2Eel%2Dcol%2D11%7Bwidth%3A45%2E83333%25%7D%2Eel%2Dcol%2Doffset%2D11%7Bmargin%2Dleft%3A45%2E83333%25%7D%2Eel%2Dcol%2Dpull%2D11%7Bright%3A45%2E83333%25%7D%2Eel%2Dcol%2Dpush%2D11%7Bleft%3A45%2E83333%25%7D%2Eel%2Dcol%2D12%7Bwidth%3A50%25%7D%2Eel%2Dcol%2Doffset%2D12%7Bmargin%2Dleft%3A50%25%7D%2Eel%2Dcol%2Dpull%2D12%7Bposition%3Arelative%3Bright%3A50%25%7D%2Eel%2Dcol%2Dpush%2D12%7Bleft%3A50%25%7D%2Eel%2Dcol%2D13%7Bwidth%3A54%2E16667%25%7D%2Eel%2Dcol%2Doffset%2D13%7Bmargin%2Dleft%3A54%2E16667%25%7D%2Eel%2Dcol%2Dpull%2D13%7Bright%3A54%2E16667%25%7D%2Eel%2Dcol%2Dpush%2D13%7Bleft%3A54%2E16667%25%7D%2Eel%2Dcol%2D14%7Bwidth%3A58%2E33333%25%7D%2Eel%2Dcol%2Doffset%2D14%7Bmargin%2Dleft%3A58%2E33333%25%7D%2Eel%2Dcol%2Dpull%2D14%7Bright%3A58%2E33333%25%7D%2Eel%2Dcol%2Dpush%2D14%7Bleft%3A58%2E33333%25%7D%2Eel%2Dcol%2D15%7Bwidth%3A62%2E5%25%7D%2Eel%2Dcol%2Doffset%2D15%7Bmargin%2Dleft%3A62%2E5%25%7D%2Eel%2Dcol%2Dpull%2D15%7Bright%3A62%2E5%25%7D%2Eel%2Dcol%2Dpush%2D15%7Bleft%3A62%2E5%25%7D%2Eel%2Dcol%2D16%7Bwidth%3A66%2E66667%25%7D%2Eel%2Dcol%2Doffset%2D16%7Bmargin%2Dleft%3A66%2E66667%25%7D%2Eel%2Dcol%2Dpull%2D16%7Bright%3A66%2E66667%25%7D%2Eel%2Dcol%2Dpush%2D16%7Bleft%3A66%2E66667%25%7D%2Eel%2Dcol%2D17%7Bwidth%3A70%2E83333%25%7D%2Eel%2Dcol%2Doffset%2D17%7Bmargin%2Dleft%3A70%2E83333%25%7D%2Eel%2Dcol%2Dpull%2D17%7Bright%3A70%2E83333%25%7D%2Eel%2Dcol%2Dpush%2D17%7Bleft%3A70%2E83333%25%7D%2Eel%2Dcol%2D18%7Bwidth%3A75%25%7D%2Eel%2Dcol%2Doffset%2D18%7Bmargin%2Dleft%3A75%25%7D%2Eel%2Dcol%2Dpull%2D18%7Bright%3A75%25%7D%2Eel%2Dcol%2Dpush%2D18%7Bleft%3A75%25%7D%2Eel%2Dcol%2D19%7Bwidth%3A79%2E16667%25%7D%2Eel%2Dcol%2Doffset%2D19%7Bmargin%2Dleft%3A79%2E16667%25%7D%2Eel%2Dcol%2Dpull%2D19%7Bright%3A79%2E16667%25%7D%2Eel%2Dcol%2Dpush%2D19%7Bleft%3A79%2E16667%25%7D%2Eel%2Dcol%2D20%7Bwidth%3A83%2E33333%25%7D%2Eel%2Dcol%2Doffset%2D20%7Bmargin%2Dleft%3A83%2E33333%25%7D%2Eel%2Dcol%2Dpull%2D20%7Bright%3A83%2E33333%25%7D%2Eel%2Dcol%2Dpush%2D20%7Bleft%3A83%2E33333%25%7D%2Eel%2Dcol%2D21%7Bwidth%3A87%2E5%25%7D%2Eel%2Dcol%2Doffset%2D21%7Bmargin%2Dleft%3A87%2E5%25%7D%2Eel%2Dcol%2Dpull%2D21%7Bright%3A87%2E5%25%7D%2Eel%2Dcol%2Dpush%2D21%7Bleft%3A87%2E5%25%7D%2Eel%2Dcol%2D22%7Bwidth%3A91%2E66667%25%7D%2Eel%2Dcol%2Doffset%2D22%7Bmargin%2Dleft%3A91%2E66667%25%7D%2Eel%2Dcol%2Dpull%2D22%7Bright%3A91%2E66667%25%7D%2Eel%2Dcol%2Dpush%2D22%7Bleft%3A91%2E66667%25%7D%2Eel%2Dcol%2D23%7Bwidth%3A95%2E83333%25%7D%2Eel%2Dcol%2Doffset%2D23%7Bmargin%2Dleft%3A95%2E83333%25%7D%2Eel%2Dcol%2Dpull%2D23%7Bright%3A95%2E83333%25%7D%2Eel%2Dcol%2Dpush%2D23%7Bleft%3A95%2E83333%25%7D%2Eel%2Dcol%2D24%7Bwidth%3A100%25%7D%2Eel%2Dcol%2Doffset%2D24%7Bmargin%2Dleft%3A100%25%7D%2Eel%2Dcol%2Dpull%2D24%7Bright%3A100%25%7D%2Eel%2Dcol%2Dpush%2D24%7Bleft%3A100%25%7D%40media%20%28max%2Dwidth%3A768px%29%7B%2Eel%2Dcol%2Dxs%2D0%7Bwidth%3A0%7D%2Eel%2Dcol%2Dxs%2Doffset%2D0%7Bmargin%2Dleft%3A0%7D%2Eel%2Dcol%2Dxs%2Dpull%2D0%7Bposition%3Arelative%3Bright%3A0%7D%2Eel%2Dcol%2Dxs%2Dpush%2D0%7Bposition%3Arelative%3Bleft%3A0%7D%2Eel%2Dcol%2Dxs%2D1%7Bwidth%3A4%2E16667%25%7D%2Eel%2Dcol%2Dxs%2Doffset%2D1%7Bmargin%2Dleft%3A4%2E16667%25%7D%2Eel%2Dcol%2Dxs%2Dpull%2D1%7Bposition%3Arelative%3Bright%3A4%2E16667%25%7D%2Eel%2Dcol%2Dxs%2Dpush%2D1%7Bposition%3Arelative%3Bleft%3A4%2E16667%25%7D%2Eel%2Dcol%2Dxs%2D2%7Bwidth%3A8%2E33333%25%7D%2Eel%2Dcol%2Dxs%2Doffset%2D2%7Bmargin%2Dleft%3A8%2E33333%25%7D%2Eel%2Dcol%2Dxs%2Dpull%2D2%7Bposition%3Arelative%3Bright%3A8%2E33333%25%7D%2Eel%2Dcol%2Dxs%2Dpush%2D2%7Bposition%3Arelative%3Bleft%3A8%2E33333%25%7D%2Eel%2Dcol%2Dxs%2D3%7Bwidth%3A12%2E5%25%7D%2Eel%2Dcol%2Dxs%2Doffset%2D3%7Bmargin%2Dleft%3A12%2E5%25%7D%2Eel%2Dcol%2Dxs%2Dpull%2D3%7Bposition%3Arelative%3Bright%3A12%2E5%25%7D%2Eel%2Dcol%2Dxs%2Dpush%2D3%7Bposition%3Arelative%3Bleft%3A12%2E5%25%7D%2Eel%2Dcol%2Dxs%2D4%7Bwidth%3A16%2E66667%25%7D%2Eel%2Dcol%2Dxs%2Doffset%2D4%7Bmargin%2Dleft%3A16%2E66667%25%7D%2Eel%2Dcol%2Dxs%2Dpull%2D4%7Bposition%3Arelative%3Bright%3A16%2E66667%25%7D%2Eel%2Dcol%2Dxs%2Dpush%2D4%7Bposition%3Arelative%3Bleft%3A16%2E66667%25%7D%2Eel%2Dcol%2Dxs%2D5%7Bwidth%3A20%2E83333%25%7D%2Eel%2Dcol%2Dxs%2Doffset%2D5%7Bmargin%2Dleft%3A20%2E83333%25%7D%2Eel%2Dcol%2Dxs%2Dpull%2D5%7Bposition%3Arelative%3Bright%3A20%2E83333%25%7D%2Eel%2Dcol%2Dxs%2Dpush%2D5%7Bposition%3Arelative%3Bleft%3A20%2E83333%25%7D%2Eel%2Dcol%2Dxs%2D6%7Bwidth%3A25%25%7D%2Eel%2Dcol%2Dxs%2Doffset%2D6%7Bmargin%2Dleft%3A25%25%7D%2Eel%2Dcol%2Dxs%2Dpull%2D6%7Bposition%3Arelative%3Bright%3A25%25%7D%2Eel%2Dcol%2Dxs%2Dpush%2D6%7Bposition%3Arelative%3Bleft%3A25%25%7D%2Eel%2Dcol%2Dxs%2D7%7Bwidth%3A29%2E16667%25%7D%2Eel%2Dcol%2Dxs%2Doffset%2D7%7Bmargin%2Dleft%3A29%2E16667%25%7D%2Eel%2Dcol%2Dxs%2Dpull%2D7%7Bposition%3Arelative%3Bright%3A29%2E16667%25%7D%2Eel%2Dcol%2Dxs%2Dpush%2D7%7Bposition%3Arelative%3Bleft%3A29%2E16667%25%7D%2Eel%2Dcol%2Dxs%2D8%7Bwidth%3A33%2E33333%25%7D%2Eel%2Dcol%2Dxs%2Doffset%2D8%7Bmargin%2Dleft%3A33%2E33333%25%7D%2Eel%2Dcol%2Dxs%2Dpull%2D8%7Bposition%3Arelative%3Bright%3A33%2E33333%25%7D%2Eel%2Dcol%2Dxs%2Dpush%2D8%7Bposition%3Arelative%3Bleft%3A33%2E33333%25%7D%2Eel%2Dcol%2Dxs%2D9%7Bwidth%3A37%2E5%25%7D%2Eel%2Dcol%2Dxs%2Doffset%2D9%7Bmargin%2Dleft%3A37%2E5%25%7D%2Eel%2Dcol%2Dxs%2Dpull%2D9%7Bposition%3Arelative%3Bright%3A37%2E5%25%7D%2Eel%2Dcol%2Dxs%2Dpush%2D9%7Bposition%3Arelative%3Bleft%3A37%2E5%25%7D%2Eel%2Dcol%2Dxs%2D10%7Bwidth%3A41%2E66667%25%7D%2Eel%2Dcol%2Dxs%2Doffset%2D10%7Bmargin%2Dleft%3A41%2E66667%25%7D%2Eel%2Dcol%2Dxs%2Dpull%2D10%7Bposition%3Arelative%3Bright%3A41%2E66667%25%7D%2Eel%2Dcol%2Dxs%2Dpush%2D10%7Bposition%3Arelative%3Bleft%3A41%2E66667%25%7D%2Eel%2Dcol%2Dxs%2D11%7Bwidth%3A45%2E83333%25%7D%2Eel%2Dcol%2Dxs%2Doffset%2D11%7Bmargin%2Dleft%3A45%2E83333%25%7D%2Eel%2Dcol%2Dxs%2Dpull%2D11%7Bposition%3Arelative%3Bright%3A45%2E83333%25%7D%2Eel%2Dcol%2Dxs%2Dpush%2D11%7Bposition%3Arelative%3Bleft%3A45%2E83333%25%7D%2Eel%2Dcol%2Dxs%2D12%7Bwidth%3A50%25%7D%2Eel%2Dcol%2Dxs%2Doffset%2D12%7Bmargin%2Dleft%3A50%25%7D%2Eel%2Dcol%2Dxs%2Dpull%2D12%7Bposition%3Arelative%3Bright%3A50%25%7D%2Eel%2Dcol%2Dxs%2Dpush%2D12%7Bposition%3Arelative%3Bleft%3A50%25%7D%2Eel%2Dcol%2Dxs%2D13%7Bwidth%3A54%2E16667%25%7D%2Eel%2Dcol%2Dxs%2Doffset%2D13%7Bmargin%2Dleft%3A54%2E16667%25%7D%2Eel%2Dcol%2Dxs%2Dpull%2D13%7Bposition%3Arelative%3Bright%3A54%2E16667%25%7D%2Eel%2Dcol%2Dxs%2Dpush%2D13%7Bposition%3Arelative%3Bleft%3A54%2E16667%25%7D%2Eel%2Dcol%2Dxs%2D14%7Bwidth%3A58%2E33333%25%7D%2Eel%2Dcol%2Dxs%2Doffset%2D14%7Bmargin%2Dleft%3A58%2E33333%25%7D%2Eel%2Dcol%2Dxs%2Dpull%2D14%7Bposition%3Arelative%3Bright%3A58%2E33333%25%7D%2Eel%2Dcol%2Dxs%2Dpush%2D14%7Bposition%3Arelative%3Bleft%3A58%2E33333%25%7D%2Eel%2Dcol%2Dxs%2D15%7Bwidth%3A62%2E5%25%7D%2Eel%2Dcol%2Dxs%2Doffset%2D15%7Bmargin%2Dleft%3A62%2E5%25%7D%2Eel%2Dcol%2Dxs%2Dpull%2D15%7Bposition%3Arelative%3Bright%3A62%2E5%25%7D%2Eel%2Dcol%2Dxs%2Dpush%2D15%7Bposition%3Arelative%3Bleft%3A62%2E5%25%7D%2Eel%2Dcol%2Dxs%2D16%7Bwidth%3A66%2E66667%25%7D%2Eel%2Dcol%2Dxs%2Doffset%2D16%7Bmargin%2Dleft%3A66%2E66667%25%7D%2Eel%2Dcol%2Dxs%2Dpull%2D16%7Bposition%3Arelative%3Bright%3A66%2E66667%25%7D%2Eel%2Dcol%2Dxs%2Dpush%2D16%7Bposition%3Arelative%3Bleft%3A66%2E66667%25%7D%2Eel%2Dcol%2Dxs%2D17%7Bwidth%3A70%2E83333%25%7D%2Eel%2Dcol%2Dxs%2Doffset%2D17%7Bmargin%2Dleft%3A70%2E83333%25%7D%2Eel%2Dcol%2Dxs%2Dpull%2D17%7Bposition%3Arelative%3Bright%3A70%2E83333%25%7D%2Eel%2Dcol%2Dxs%2Dpush%2D17%7Bposition%3Arelative%3Bleft%3A70%2E83333%25%7D%2Eel%2Dcol%2Dxs%2D18%7Bwidth%3A75%25%7D%2Eel%2Dcol%2Dxs%2Doffset%2D18%7Bmargin%2Dleft%3A75%25%7D%2Eel%2Dcol%2Dxs%2Dpull%2D18%7Bposition%3Arelative%3Bright%3A75%25%7D%2Eel%2Dcol%2Dxs%2Dpush%2D18%7Bposition%3Arelative%3Bleft%3A75%25%7D%2Eel%2Dcol%2Dxs%2D19%7Bwidth%3A79%2E16667%25%7D%2Eel%2Dcol%2Dxs%2Doffset%2D19%7Bmargin%2Dleft%3A79%2E16667%25%7D%2Eel%2Dcol%2Dxs%2Dpull%2D19%7Bposition%3Arelative%3Bright%3A79%2E16667%25%7D%2Eel%2Dcol%2Dxs%2Dpush%2D19%7Bposition%3Arelative%3Bleft%3A79%2E16667%25%7D%2Eel%2Dcol%2Dxs%2D20%7Bwidth%3A83%2E33333%25%7D%2Eel%2Dcol%2Dxs%2Doffset%2D20%7Bmargin%2Dleft%3A83%2E33333%25%7D%2Eel%2Dcol%2Dxs%2Dpull%2D20%7Bposition%3Arelative%3Bright%3A83%2E33333%25%7D%2Eel%2Dcol%2Dxs%2Dpush%2D20%7Bposition%3Arelative%3Bleft%3A83%2E33333%25%7D%2Eel%2Dcol%2Dxs%2D21%7Bwidth%3A87%2E5%25%7D%2Eel%2Dcol%2Dxs%2Doffset%2D21%7Bmargin%2Dleft%3A87%2E5%25%7D%2Eel%2Dcol%2Dxs%2Dpull%2D21%7Bposition%3Arelative%3Bright%3A87%2E5%25%7D%2Eel%2Dcol%2Dxs%2Dpush%2D21%7Bposition%3Arelative%3Bleft%3A87%2E5%25%7D%2Eel%2Dcol%2Dxs%2D22%7Bwidth%3A91%2E66667%25%7D%2Eel%2Dcol%2Dxs%2Doffset%2D22%7Bmargin%2Dleft%3A91%2E66667%25%7D%2Eel%2Dcol%2Dxs%2Dpull%2D22%7Bposition%3Arelative%3Bright%3A91%2E66667%25%7D%2Eel%2Dcol%2Dxs%2Dpush%2D22%7Bposition%3Arelative%3Bleft%3A91%2E66667%25%7D%2Eel%2Dcol%2Dxs%2D23%7Bwidth%3A95%2E83333%25%7D%2Eel%2Dcol%2Dxs%2Doffset%2D23%7Bmargin%2Dleft%3A95%2E83333%25%7D%2Eel%2Dcol%2Dxs%2Dpull%2D23%7Bposition%3Arelative%3Bright%3A95%2E83333%25%7D%2Eel%2Dcol%2Dxs%2Dpush%2D23%7Bposition%3Arelative%3Bleft%3A95%2E83333%25%7D%2Eel%2Dcol%2Dxs%2D24%7Bwidth%3A100%25%7D%2Eel%2Dcol%2Dxs%2Doffset%2D24%7Bmargin%2Dleft%3A100%25%7D%2Eel%2Dcol%2Dxs%2Dpull%2D24%7Bposition%3Arelative%3Bright%3A100%25%7D%2Eel%2Dcol%2Dxs%2Dpush%2D24%7Bposition%3Arelative%3Bleft%3A100%25%7D%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Eel%2Dcol%2Dsm%2D0%7Bwidth%3A0%7D%2Eel%2Dcol%2Dsm%2Doffset%2D0%7Bmargin%2Dleft%3A0%7D%2Eel%2Dcol%2Dsm%2Dpull%2D0%7Bposition%3Arelative%3Bright%3A0%7D%2Eel%2Dcol%2Dsm%2Dpush%2D0%7Bposition%3Arelative%3Bleft%3A0%7D%2Eel%2Dcol%2Dsm%2D1%7Bwidth%3A4%2E16667%25%7D%2Eel%2Dcol%2Dsm%2Doffset%2D1%7Bmargin%2Dleft%3A4%2E16667%25%7D%2Eel%2Dcol%2Dsm%2Dpull%2D1%7Bposition%3Arelative%3Bright%3A4%2E16667%25%7D%2Eel%2Dcol%2Dsm%2Dpush%2D1%7Bposition%3Arelative%3Bleft%3A4%2E16667%25%7D%2Eel%2Dcol%2Dsm%2D2%7Bwidth%3A8%2E33333%25%7D%2Eel%2Dcol%2Dsm%2Doffset%2D2%7Bmargin%2Dleft%3A8%2E33333%25%7D%2Eel%2Dcol%2Dsm%2Dpull%2D2%7Bposition%3Arelative%3Bright%3A8%2E33333%25%7D%2Eel%2Dcol%2Dsm%2Dpush%2D2%7Bposition%3Arelative%3Bleft%3A8%2E33333%25%7D%2Eel%2Dcol%2Dsm%2D3%7Bwidth%3A12%2E5%25%7D%2Eel%2Dcol%2Dsm%2Doffset%2D3%7Bmargin%2Dleft%3A12%2E5%25%7D%2Eel%2Dcol%2Dsm%2Dpull%2D3%7Bposition%3Arelative%3Bright%3A12%2E5%25%7D%2Eel%2Dcol%2Dsm%2Dpush%2D3%7Bposition%3Arelative%3Bleft%3A12%2E5%25%7D%2Eel%2Dcol%2Dsm%2D4%7Bwidth%3A16%2E66667%25%7D%2Eel%2Dcol%2Dsm%2Doffset%2D4%7Bmargin%2Dleft%3A16%2E66667%25%7D%2Eel%2Dcol%2Dsm%2Dpull%2D4%7Bposition%3Arelative%3Bright%3A16%2E66667%25%7D%2Eel%2Dcol%2Dsm%2Dpush%2D4%7Bposition%3Arelative%3Bleft%3A16%2E66667%25%7D%2Eel%2Dcol%2Dsm%2D5%7Bwidth%3A20%2E83333%25%7D%2Eel%2Dcol%2Dsm%2Doffset%2D5%7Bmargin%2Dleft%3A20%2E83333%25%7D%2Eel%2Dcol%2Dsm%2Dpull%2D5%7Bposition%3Arelative%3Bright%3A20%2E83333%25%7D%2Eel%2Dcol%2Dsm%2Dpush%2D5%7Bposition%3Arelative%3Bleft%3A20%2E83333%25%7D%2Eel%2Dcol%2Dsm%2D6%7Bwidth%3A25%25%7D%2Eel%2Dcol%2Dsm%2Doffset%2D6%7Bmargin%2Dleft%3A25%25%7D%2Eel%2Dcol%2Dsm%2Dpull%2D6%7Bposition%3Arelative%3Bright%3A25%25%7D%2Eel%2Dcol%2Dsm%2Dpush%2D6%7Bposition%3Arelative%3Bleft%3A25%25%7D%2Eel%2Dcol%2Dsm%2D7%7Bwidth%3A29%2E16667%25%7D%2Eel%2Dcol%2Dsm%2Doffset%2D7%7Bmargin%2Dleft%3A29%2E16667%25%7D%2Eel%2Dcol%2Dsm%2Dpull%2D7%7Bposition%3Arelative%3Bright%3A29%2E16667%25%7D%2Eel%2Dcol%2Dsm%2Dpush%2D7%7Bposition%3Arelative%3Bleft%3A29%2E16667%25%7D%2Eel%2Dcol%2Dsm%2D8%7Bwidth%3A33%2E33333%25%7D%2Eel%2Dcol%2Dsm%2Doffset%2D8%7Bmargin%2Dleft%3A33%2E33333%25%7D%2Eel%2Dcol%2Dsm%2Dpull%2D8%7Bposition%3Arelative%3Bright%3A33%2E33333%25%7D%2Eel%2Dcol%2Dsm%2Dpush%2D8%7Bposition%3Arelative%3Bleft%3A33%2E33333%25%7D%2Eel%2Dcol%2Dsm%2D9%7Bwidth%3A37%2E5%25%7D%2Eel%2Dcol%2Dsm%2Doffset%2D9%7Bmargin%2Dleft%3A37%2E5%25%7D%2Eel%2Dcol%2Dsm%2Dpull%2D9%7Bposition%3Arelative%3Bright%3A37%2E5%25%7D%2Eel%2Dcol%2Dsm%2Dpush%2D9%7Bposition%3Arelative%3Bleft%3A37%2E5%25%7D%2Eel%2Dcol%2Dsm%2D10%7Bwidth%3A41%2E66667%25%7D%2Eel%2Dcol%2Dsm%2Doffset%2D10%7Bmargin%2Dleft%3A41%2E66667%25%7D%2Eel%2Dcol%2Dsm%2Dpull%2D10%7Bposition%3Arelative%3Bright%3A41%2E66667%25%7D%2Eel%2Dcol%2Dsm%2Dpush%2D10%7Bposition%3Arelative%3Bleft%3A41%2E66667%25%7D%2Eel%2Dcol%2Dsm%2D11%7Bwidth%3A45%2E83333%25%7D%2Eel%2Dcol%2Dsm%2Doffset%2D11%7Bmargin%2Dleft%3A45%2E83333%25%7D%2Eel%2Dcol%2Dsm%2Dpull%2D11%7Bposition%3Arelative%3Bright%3A45%2E83333%25%7D%2Eel%2Dcol%2Dsm%2Dpush%2D11%7Bposition%3Arelative%3Bleft%3A45%2E83333%25%7D%2Eel%2Dcol%2Dsm%2D12%7Bwidth%3A50%25%7D%2Eel%2Dcol%2Dsm%2Doffset%2D12%7Bmargin%2Dleft%3A50%25%7D%2Eel%2Dcol%2Dsm%2Dpull%2D12%7Bposition%3Arelative%3Bright%3A50%25%7D%2Eel%2Dcol%2Dsm%2Dpush%2D12%7Bposition%3Arelative%3Bleft%3A50%25%7D%2Eel%2Dcol%2Dsm%2D13%7Bwidth%3A54%2E16667%25%7D%2Eel%2Dcol%2Dsm%2Doffset%2D13%7Bmargin%2Dleft%3A54%2E16667%25%7D%2Eel%2Dcol%2Dsm%2Dpull%2D13%7Bposition%3Arelative%3Bright%3A54%2E16667%25%7D%2Eel%2Dcol%2Dsm%2Dpush%2D13%7Bposition%3Arelative%3Bleft%3A54%2E16667%25%7D%2Eel%2Dcol%2Dsm%2D14%7Bwidth%3A58%2E33333%25%7D%2Eel%2Dcol%2Dsm%2Doffset%2D14%7Bmargin%2Dleft%3A58%2E33333%25%7D%2Eel%2Dcol%2Dsm%2Dpull%2D14%7Bposition%3Arelative%3Bright%3A58%2E33333%25%7D%2Eel%2Dcol%2Dsm%2Dpush%2D14%7Bposition%3Arelative%3Bleft%3A58%2E33333%25%7D%2Eel%2Dcol%2Dsm%2D15%7Bwidth%3A62%2E5%25%7D%2Eel%2Dcol%2Dsm%2Doffset%2D15%7Bmargin%2Dleft%3A62%2E5%25%7D%2Eel%2Dcol%2Dsm%2Dpull%2D15%7Bposition%3Arelative%3Bright%3A62%2E5%25%7D%2Eel%2Dcol%2Dsm%2Dpush%2D15%7Bposition%3Arelative%3Bleft%3A62%2E5%25%7D%2Eel%2Dcol%2Dsm%2D16%7Bwidth%3A66%2E66667%25%7D%2Eel%2Dcol%2Dsm%2Doffset%2D16%7Bmargin%2Dleft%3A66%2E66667%25%7D%2Eel%2Dcol%2Dsm%2Dpull%2D16%7Bposition%3Arelative%3Bright%3A66%2E66667%25%7D%2Eel%2Dcol%2Dsm%2Dpush%2D16%7Bposition%3Arelative%3Bleft%3A66%2E66667%25%7D%2Eel%2Dcol%2Dsm%2D17%7Bwidth%3A70%2E83333%25%7D%2Eel%2Dcol%2Dsm%2Doffset%2D17%7Bmargin%2Dleft%3A70%2E83333%25%7D%2Eel%2Dcol%2Dsm%2Dpull%2D17%7Bposition%3Arelative%3Bright%3A70%2E83333%25%7D%2Eel%2Dcol%2Dsm%2Dpush%2D17%7Bposition%3Arelative%3Bleft%3A70%2E83333%25%7D%2Eel%2Dcol%2Dsm%2D18%7Bwidth%3A75%25%7D%2Eel%2Dcol%2Dsm%2Doffset%2D18%7Bmargin%2Dleft%3A75%25%7D%2Eel%2Dcol%2Dsm%2Dpull%2D18%7Bposition%3Arelative%3Bright%3A75%25%7D%2Eel%2Dcol%2Dsm%2Dpush%2D18%7Bposition%3Arelative%3Bleft%3A75%25%7D%2Eel%2Dcol%2Dsm%2D19%7Bwidth%3A79%2E16667%25%7D%2Eel%2Dcol%2Dsm%2Doffset%2D19%7Bmargin%2Dleft%3A79%2E16667%25%7D%2Eel%2Dcol%2Dsm%2Dpull%2D19%7Bposition%3Arelative%3Bright%3A79%2E16667%25%7D%2Eel%2Dcol%2Dsm%2Dpush%2D19%7Bposition%3Arelative%3Bleft%3A79%2E16667%25%7D%2Eel%2Dcol%2Dsm%2D20%7Bwidth%3A83%2E33333%25%7D%2Eel%2Dcol%2Dsm%2Doffset%2D20%7Bmargin%2Dleft%3A83%2E33333%25%7D%2Eel%2Dcol%2Dsm%2Dpull%2D20%7Bposition%3Arelative%3Bright%3A83%2E33333%25%7D%2Eel%2Dcol%2Dsm%2Dpush%2D20%7Bposition%3Arelative%3Bleft%3A83%2E33333%25%7D%2Eel%2Dcol%2Dsm%2D21%7Bwidth%3A87%2E5%25%7D%2Eel%2Dcol%2Dsm%2Doffset%2D21%7Bmargin%2Dleft%3A87%2E5%25%7D%2Eel%2Dcol%2Dsm%2Dpull%2D21%7Bposition%3Arelative%3Bright%3A87%2E5%25%7D%2Eel%2Dcol%2Dsm%2Dpush%2D21%7Bposition%3Arelative%3Bleft%3A87%2E5%25%7D%2Eel%2Dcol%2Dsm%2D22%7Bwidth%3A91%2E66667%25%7D%2Eel%2Dcol%2Dsm%2Doffset%2D22%7Bmargin%2Dleft%3A91%2E66667%25%7D%2Eel%2Dcol%2Dsm%2Dpull%2D22%7Bposition%3Arelative%3Bright%3A91%2E66667%25%7D%2Eel%2Dcol%2Dsm%2Dpush%2D22%7Bposition%3Arelative%3Bleft%3A91%2E66667%25%7D%2Eel%2Dcol%2Dsm%2D23%7Bwidth%3A95%2E83333%25%7D%2Eel%2Dcol%2Dsm%2Doffset%2D23%7Bmargin%2Dleft%3A95%2E83333%25%7D%2Eel%2Dcol%2Dsm%2Dpull%2D23%7Bposition%3Arelative%3Bright%3A95%2E83333%25%7D%2Eel%2Dcol%2Dsm%2Dpush%2D23%7Bposition%3Arelative%3Bleft%3A95%2E83333%25%7D%2Eel%2Dcol%2Dsm%2D24%7Bwidth%3A100%25%7D%2Eel%2Dcol%2Dsm%2Doffset%2D24%7Bmargin%2Dleft%3A100%25%7D%2Eel%2Dcol%2Dsm%2Dpull%2D24%7Bposition%3Arelative%3Bright%3A100%25%7D%2Eel%2Dcol%2Dsm%2Dpush%2D24%7Bposition%3Arelative%3Bleft%3A100%25%7D%7D%40media%20%28min%2Dwidth%3A992px%29%7B%2Eel%2Dcol%2Dmd%2D0%7Bwidth%3A0%7D%2Eel%2Dcol%2Dmd%2Doffset%2D0%7Bmargin%2Dleft%3A0%7D%2Eel%2Dcol%2Dmd%2Dpull%2D0%7Bposition%3Arelative%3Bright%3A0%7D%2Eel%2Dcol%2Dmd%2Dpush%2D0%7Bposition%3Arelative%3Bleft%3A0%7D%2Eel%2Dcol%2Dmd%2D1%7Bwidth%3A4%2E16667%25%7D%2Eel%2Dcol%2Dmd%2Doffset%2D1%7Bmargin%2Dleft%3A4%2E16667%25%7D%2Eel%2Dcol%2Dmd%2Dpull%2D1%7Bposition%3Arelative%3Bright%3A4%2E16667%25%7D%2Eel%2Dcol%2Dmd%2Dpush%2D1%7Bposition%3Arelative%3Bleft%3A4%2E16667%25%7D%2Eel%2Dcol%2Dmd%2D2%7Bwidth%3A8%2E33333%25%7D%2Eel%2Dcol%2Dmd%2Doffset%2D2%7Bmargin%2Dleft%3A8%2E33333%25%7D%2Eel%2Dcol%2Dmd%2Dpull%2D2%7Bposition%3Arelative%3Bright%3A8%2E33333%25%7D%2Eel%2Dcol%2Dmd%2Dpush%2D2%7Bposition%3Arelative%3Bleft%3A8%2E33333%25%7D%2Eel%2Dcol%2Dmd%2D3%7Bwidth%3A12%2E5%25%7D%2Eel%2Dcol%2Dmd%2Doffset%2D3%7Bmargin%2Dleft%3A12%2E5%25%7D%2Eel%2Dcol%2Dmd%2Dpull%2D3%7Bposition%3Arelative%3Bright%3A12%2E5%25%7D%2Eel%2Dcol%2Dmd%2Dpush%2D3%7Bposition%3Arelative%3Bleft%3A12%2E5%25%7D%2Eel%2Dcol%2Dmd%2D4%7Bwidth%3A16%2E66667%25%7D%2Eel%2Dcol%2Dmd%2Doffset%2D4%7Bmargin%2Dleft%3A16%2E66667%25%7D%2Eel%2Dcol%2Dmd%2Dpull%2D4%7Bposition%3Arelative%3Bright%3A16%2E66667%25%7D%2Eel%2Dcol%2Dmd%2Dpush%2D4%7Bposition%3Arelative%3Bleft%3A16%2E66667%25%7D%2Eel%2Dcol%2Dmd%2D5%7Bwidth%3A20%2E83333%25%7D%2Eel%2Dcol%2Dmd%2Doffset%2D5%7Bmargin%2Dleft%3A20%2E83333%25%7D%2Eel%2Dcol%2Dmd%2Dpull%2D5%7Bposition%3Arelative%3Bright%3A20%2E83333%25%7D%2Eel%2Dcol%2Dmd%2Dpush%2D5%7Bposition%3Arelative%3Bleft%3A20%2E83333%25%7D%2Eel%2Dcol%2Dmd%2D6%7Bwidth%3A25%25%7D%2Eel%2Dcol%2Dmd%2Doffset%2D6%7Bmargin%2Dleft%3A25%25%7D%2Eel%2Dcol%2Dmd%2Dpull%2D6%7Bposition%3Arelative%3Bright%3A25%25%7D%2Eel%2Dcol%2Dmd%2Dpush%2D6%7Bposition%3Arelative%3Bleft%3A25%25%7D%2Eel%2Dcol%2Dmd%2D7%7Bwidth%3A29%2E16667%25%7D%2Eel%2Dcol%2Dmd%2Doffset%2D7%7Bmargin%2Dleft%3A29%2E16667%25%7D%2Eel%2Dcol%2Dmd%2Dpull%2D7%7Bposition%3Arelative%3Bright%3A29%2E16667%25%7D%2Eel%2Dcol%2Dmd%2Dpush%2D7%7Bposition%3Arelative%3Bleft%3A29%2E16667%25%7D%2Eel%2Dcol%2Dmd%2D8%7Bwidth%3A33%2E33333%25%7D%2Eel%2Dcol%2Dmd%2Doffset%2D8%7Bmargin%2Dleft%3A33%2E33333%25%7D%2Eel%2Dcol%2Dmd%2Dpull%2D8%7Bposition%3Arelative%3Bright%3A33%2E33333%25%7D%2Eel%2Dcol%2Dmd%2Dpush%2D8%7Bposition%3Arelative%3Bleft%3A33%2E33333%25%7D%2Eel%2Dcol%2Dmd%2D9%7Bwidth%3A37%2E5%25%7D%2Eel%2Dcol%2Dmd%2Doffset%2D9%7Bmargin%2Dleft%3A37%2E5%25%7D%2Eel%2Dcol%2Dmd%2Dpull%2D9%7Bposition%3Arelative%3Bright%3A37%2E5%25%7D%2Eel%2Dcol%2Dmd%2Dpush%2D9%7Bposition%3Arelative%3Bleft%3A37%2E5%25%7D%2Eel%2Dcol%2Dmd%2D10%7Bwidth%3A41%2E66667%25%7D%2Eel%2Dcol%2Dmd%2Doffset%2D10%7Bmargin%2Dleft%3A41%2E66667%25%7D%2Eel%2Dcol%2Dmd%2Dpull%2D10%7Bposition%3Arelative%3Bright%3A41%2E66667%25%7D%2Eel%2Dcol%2Dmd%2Dpush%2D10%7Bposition%3Arelative%3Bleft%3A41%2E66667%25%7D%2Eel%2Dcol%2Dmd%2D11%7Bwidth%3A45%2E83333%25%7D%2Eel%2Dcol%2Dmd%2Doffset%2D11%7Bmargin%2Dleft%3A45%2E83333%25%7D%2Eel%2Dcol%2Dmd%2Dpull%2D11%7Bposition%3Arelative%3Bright%3A45%2E83333%25%7D%2Eel%2Dcol%2Dmd%2Dpush%2D11%7Bposition%3Arelative%3Bleft%3A45%2E83333%25%7D%2Eel%2Dcol%2Dmd%2D12%7Bwidth%3A50%25%7D%2Eel%2Dcol%2Dmd%2Doffset%2D12%7Bmargin%2Dleft%3A50%25%7D%2Eel%2Dcol%2Dmd%2Dpull%2D12%7Bposition%3Arelative%3Bright%3A50%25%7D%2Eel%2Dcol%2Dmd%2Dpush%2D12%7Bposition%3Arelative%3Bleft%3A50%25%7D%2Eel%2Dcol%2Dmd%2D13%7Bwidth%3A54%2E16667%25%7D%2Eel%2Dcol%2Dmd%2Doffset%2D13%7Bmargin%2Dleft%3A54%2E16667%25%7D%2Eel%2Dcol%2Dmd%2Dpull%2D13%7Bposition%3Arelative%3Bright%3A54%2E16667%25%7D%2Eel%2Dcol%2Dmd%2Dpush%2D13%7Bposition%3Arelative%3Bleft%3A54%2E16667%25%7D%2Eel%2Dcol%2Dmd%2D14%7Bwidth%3A58%2E33333%25%7D%2Eel%2Dcol%2Dmd%2Doffset%2D14%7Bmargin%2Dleft%3A58%2E33333%25%7D%2Eel%2Dcol%2Dmd%2Dpull%2D14%7Bposition%3Arelative%3Bright%3A58%2E33333%25%7D%2Eel%2Dcol%2Dmd%2Dpush%2D14%7Bposition%3Arelative%3Bleft%3A58%2E33333%25%7D%2Eel%2Dcol%2Dmd%2D15%7Bwidth%3A62%2E5%25%7D%2Eel%2Dcol%2Dmd%2Doffset%2D15%7Bmargin%2Dleft%3A62%2E5%25%7D%2Eel%2Dcol%2Dmd%2Dpull%2D15%7Bposition%3Arelative%3Bright%3A62%2E5%25%7D%2Eel%2Dcol%2Dmd%2Dpush%2D15%7Bposition%3Arelative%3Bleft%3A62%2E5%25%7D%2Eel%2Dcol%2Dmd%2D16%7Bwidth%3A66%2E66667%25%7D%2Eel%2Dcol%2Dmd%2Doffset%2D16%7Bmargin%2Dleft%3A66%2E66667%25%7D%2Eel%2Dcol%2Dmd%2Dpull%2D16%7Bposition%3Arelative%3Bright%3A66%2E66667%25%7D%2Eel%2Dcol%2Dmd%2Dpush%2D16%7Bposition%3Arelative%3Bleft%3A66%2E66667%25%7D%2Eel%2Dcol%2Dmd%2D17%7Bwidth%3A70%2E83333%25%7D%2Eel%2Dcol%2Dmd%2Doffset%2D17%7Bmargin%2Dleft%3A70%2E83333%25%7D%2Eel%2Dcol%2Dmd%2Dpull%2D17%7Bposition%3Arelative%3Bright%3A70%2E83333%25%7D%2Eel%2Dcol%2Dmd%2Dpush%2D17%7Bposition%3Arelative%3Bleft%3A70%2E83333%25%7D%2Eel%2Dcol%2Dmd%2D18%7Bwidth%3A75%25%7D%2Eel%2Dcol%2Dmd%2Doffset%2D18%7Bmargin%2Dleft%3A75%25%7D%2Eel%2Dcol%2Dmd%2Dpull%2D18%7Bposition%3Arelative%3Bright%3A75%25%7D%2Eel%2Dcol%2Dmd%2Dpush%2D18%7Bposition%3Arelative%3Bleft%3A75%25%7D%2Eel%2Dcol%2Dmd%2D19%7Bwidth%3A79%2E16667%25%7D%2Eel%2Dcol%2Dmd%2Doffset%2D19%7Bmargin%2Dleft%3A79%2E16667%25%7D%2Eel%2Dcol%2Dmd%2Dpull%2D19%7Bposition%3Arelative%3Bright%3A79%2E16667%25%7D%2Eel%2Dcol%2Dmd%2Dpush%2D19%7Bposition%3Arelative%3Bleft%3A79%2E16667%25%7D%2Eel%2Dcol%2Dmd%2D20%7Bwidth%3A83%2E33333%25%7D%2Eel%2Dcol%2Dmd%2Doffset%2D20%7Bmargin%2Dleft%3A83%2E33333%25%7D%2Eel%2Dcol%2Dmd%2Dpull%2D20%7Bposition%3Arelative%3Bright%3A83%2E33333%25%7D%2Eel%2Dcol%2Dmd%2Dpush%2D20%7Bposition%3Arelative%3Bleft%3A83%2E33333%25%7D%2Eel%2Dcol%2Dmd%2D21%7Bwidth%3A87%2E5%25%7D%2Eel%2Dcol%2Dmd%2Doffset%2D21%7Bmargin%2Dleft%3A87%2E5%25%7D%2Eel%2Dcol%2Dmd%2Dpull%2D21%7Bposition%3Arelative%3Bright%3A87%2E5%25%7D%2Eel%2Dcol%2Dmd%2Dpush%2D21%7Bposition%3Arelative%3Bleft%3A87%2E5%25%7D%2Eel%2Dcol%2Dmd%2D22%7Bwidth%3A91%2E66667%25%7D%2Eel%2Dcol%2Dmd%2Doffset%2D22%7Bmargin%2Dleft%3A91%2E66667%25%7D%2Eel%2Dcol%2Dmd%2Dpull%2D22%7Bposition%3Arelative%3Bright%3A91%2E66667%25%7D%2Eel%2Dcol%2Dmd%2Dpush%2D22%7Bposition%3Arelative%3Bleft%3A91%2E66667%25%7D%2Eel%2Dcol%2Dmd%2D23%7Bwidth%3A95%2E83333%25%7D%2Eel%2Dcol%2Dmd%2Doffset%2D23%7Bmargin%2Dleft%3A95%2E83333%25%7D%2Eel%2Dcol%2Dmd%2Dpull%2D23%7Bposition%3Arelative%3Bright%3A95%2E83333%25%7D%2Eel%2Dcol%2Dmd%2Dpush%2D23%7Bposition%3Arelative%3Bleft%3A95%2E83333%25%7D%2Eel%2Dcol%2Dmd%2D24%7Bwidth%3A100%25%7D%2Eel%2Dcol%2Dmd%2Doffset%2D24%7Bmargin%2Dleft%3A100%25%7D%2Eel%2Dcol%2Dmd%2Dpull%2D24%7Bposition%3Arelative%3Bright%3A100%25%7D%2Eel%2Dcol%2Dmd%2Dpush%2D24%7Bposition%3Arelative%3Bleft%3A100%25%7D%7D%40media%20%28min%2Dwidth%3A1200px%29%7B%2Eel%2Dcol%2Dlg%2D0%7Bwidth%3A0%7D%2Eel%2Dcol%2Dlg%2Doffset%2D0%7Bmargin%2Dleft%3A0%7D%2Eel%2Dcol%2Dlg%2Dpull%2D0%7Bposition%3Arelative%3Bright%3A0%7D%2Eel%2Dcol%2Dlg%2Dpush%2D0%7Bposition%3Arelative%3Bleft%3A0%7D%2Eel%2Dcol%2Dlg%2D1%7Bwidth%3A4%2E16667%25%7D%2Eel%2Dcol%2Dlg%2Doffset%2D1%7Bmargin%2Dleft%3A4%2E16667%25%7D%2Eel%2Dcol%2Dlg%2Dpull%2D1%7Bposition%3Arelative%3Bright%3A4%2E16667%25%7D%2Eel%2Dcol%2Dlg%2Dpush%2D1%7Bposition%3Arelative%3Bleft%3A4%2E16667%25%7D%2Eel%2Dcol%2Dlg%2D2%7Bwidth%3A8%2E33333%25%7D%2Eel%2Dcol%2Dlg%2Doffset%2D2%7Bmargin%2Dleft%3A8%2E33333%25%7D%2Eel%2Dcol%2Dlg%2Dpull%2D2%7Bposition%3Arelative%3Bright%3A8%2E33333%25%7D%2Eel%2Dcol%2Dlg%2Dpush%2D2%7Bposition%3Arelative%3Bleft%3A8%2E33333%25%7D%2Eel%2Dcol%2Dlg%2D3%7Bwidth%3A12%2E5%25%7D%2Eel%2Dcol%2Dlg%2Doffset%2D3%7Bmargin%2Dleft%3A12%2E5%25%7D%2Eel%2Dcol%2Dlg%2Dpull%2D3%7Bposition%3Arelative%3Bright%3A12%2E5%25%7D%2Eel%2Dcol%2Dlg%2Dpush%2D3%7Bposition%3Arelative%3Bleft%3A12%2E5%25%7D%2Eel%2Dcol%2Dlg%2D4%7Bwidth%3A16%2E66667%25%7D%2Eel%2Dcol%2Dlg%2Doffset%2D4%7Bmargin%2Dleft%3A16%2E66667%25%7D%2Eel%2Dcol%2Dlg%2Dpull%2D4%7Bposition%3Arelative%3Bright%3A16%2E66667%25%7D%2Eel%2Dcol%2Dlg%2Dpush%2D4%7Bposition%3Arelative%3Bleft%3A16%2E66667%25%7D%2Eel%2Dcol%2Dlg%2D5%7Bwidth%3A20%2E83333%25%7D%2Eel%2Dcol%2Dlg%2Doffset%2D5%7Bmargin%2Dleft%3A20%2E83333%25%7D%2Eel%2Dcol%2Dlg%2Dpull%2D5%7Bposition%3Arelative%3Bright%3A20%2E83333%25%7D%2Eel%2Dcol%2Dlg%2Dpush%2D5%7Bposition%3Arelative%3Bleft%3A20%2E83333%25%7D%2Eel%2Dcol%2Dlg%2D6%7Bwidth%3A25%25%7D%2Eel%2Dcol%2Dlg%2Doffset%2D6%7Bmargin%2Dleft%3A25%25%7D%2Eel%2Dcol%2Dlg%2Dpull%2D6%7Bposition%3Arelative%3Bright%3A25%25%7D%2Eel%2Dcol%2Dlg%2Dpush%2D6%7Bposition%3Arelative%3Bleft%3A25%25%7D%2Eel%2Dcol%2Dlg%2D7%7Bwidth%3A29%2E16667%25%7D%2Eel%2Dcol%2Dlg%2Doffset%2D7%7Bmargin%2Dleft%3A29%2E16667%25%7D%2Eel%2Dcol%2Dlg%2Dpull%2D7%7Bposition%3Arelative%3Bright%3A29%2E16667%25%7D%2Eel%2Dcol%2Dlg%2Dpush%2D7%7Bposition%3Arelative%3Bleft%3A29%2E16667%25%7D%2Eel%2Dcol%2Dlg%2D8%7Bwidth%3A33%2E33333%25%7D%2Eel%2Dcol%2Dlg%2Doffset%2D8%7Bmargin%2Dleft%3A33%2E33333%25%7D%2Eel%2Dcol%2Dlg%2Dpull%2D8%7Bposition%3Arelative%3Bright%3A33%2E33333%25%7D%2Eel%2Dcol%2Dlg%2Dpush%2D8%7Bposition%3Arelative%3Bleft%3A33%2E33333%25%7D%2Eel%2Dcol%2Dlg%2D9%7Bwidth%3A37%2E5%25%7D%2Eel%2Dcol%2Dlg%2Doffset%2D9%7Bmargin%2Dleft%3A37%2E5%25%7D%2Eel%2Dcol%2Dlg%2Dpull%2D9%7Bposition%3Arelative%3Bright%3A37%2E5%25%7D%2Eel%2Dcol%2Dlg%2Dpush%2D9%7Bposition%3Arelative%3Bleft%3A37%2E5%25%7D%2Eel%2Dcol%2Dlg%2D10%7Bwidth%3A41%2E66667%25%7D%2Eel%2Dcol%2Dlg%2Doffset%2D10%7Bmargin%2Dleft%3A41%2E66667%25%7D%2Eel%2Dcol%2Dlg%2Dpull%2D10%7Bposition%3Arelative%3Bright%3A41%2E66667%25%7D%2Eel%2Dcol%2Dlg%2Dpush%2D10%7Bposition%3Arelative%3Bleft%3A41%2E66667%25%7D%2Eel%2Dcol%2Dlg%2D11%7Bwidth%3A45%2E83333%25%7D%2Eel%2Dcol%2Dlg%2Doffset%2D11%7Bmargin%2Dleft%3A45%2E83333%25%7D%2Eel%2Dcol%2Dlg%2Dpull%2D11%7Bposition%3Arelative%3Bright%3A45%2E83333%25%7D%2Eel%2Dcol%2Dlg%2Dpush%2D11%7Bposition%3Arelative%3Bleft%3A45%2E83333%25%7D%2Eel%2Dcol%2Dlg%2D12%7Bwidth%3A50%25%7D%2Eel%2Dcol%2Dlg%2Doffset%2D12%7Bmargin%2Dleft%3A50%25%7D%2Eel%2Dcol%2Dlg%2Dpull%2D12%7Bposition%3Arelative%3Bright%3A50%25%7D%2Eel%2Dcol%2Dlg%2Dpush%2D12%7Bposition%3Arelative%3Bleft%3A50%25%7D%2Eel%2Dcol%2Dlg%2D13%7Bwidth%3A54%2E16667%25%7D%2Eel%2Dcol%2Dlg%2Doffset%2D13%7Bmargin%2Dleft%3A54%2E16667%25%7D%2Eel%2Dcol%2Dlg%2Dpull%2D13%7Bposition%3Arelative%3Bright%3A54%2E16667%25%7D%2Eel%2Dcol%2Dlg%2Dpush%2D13%7Bposition%3Arelative%3Bleft%3A54%2E16667%25%7D%2Eel%2Dcol%2Dlg%2D14%7Bwidth%3A58%2E33333%25%7D%2Eel%2Dcol%2Dlg%2Doffset%2D14%7Bmargin%2Dleft%3A58%2E33333%25%7D%2Eel%2Dcol%2Dlg%2Dpull%2D14%7Bposition%3Arelative%3Bright%3A58%2E33333%25%7D%2Eel%2Dcol%2Dlg%2Dpush%2D14%7Bposition%3Arelative%3Bleft%3A58%2E33333%25%7D%2Eel%2Dcol%2Dlg%2D15%7Bwidth%3A62%2E5%25%7D%2Eel%2Dcol%2Dlg%2Doffset%2D15%7Bmargin%2Dleft%3A62%2E5%25%7D%2Eel%2Dcol%2Dlg%2Dpull%2D15%7Bposition%3Arelative%3Bright%3A62%2E5%25%7D%2Eel%2Dcol%2Dlg%2Dpush%2D15%7Bposition%3Arelative%3Bleft%3A62%2E5%25%7D%2Eel%2Dcol%2Dlg%2D16%7Bwidth%3A66%2E66667%25%7D%2Eel%2Dcol%2Dlg%2Doffset%2D16%7Bmargin%2Dleft%3A66%2E66667%25%7D%2Eel%2Dcol%2Dlg%2Dpull%2D16%7Bposition%3Arelative%3Bright%3A66%2E66667%25%7D%2Eel%2Dcol%2Dlg%2Dpush%2D16%7Bposition%3Arelative%3Bleft%3A66%2E66667%25%7D%2Eel%2Dcol%2Dlg%2D17%7Bwidth%3A70%2E83333%25%7D%2Eel%2Dcol%2Dlg%2Doffset%2D17%7Bmargin%2Dleft%3A70%2E83333%25%7D%2Eel%2Dcol%2Dlg%2Dpull%2D17%7Bposition%3Arelative%3Bright%3A70%2E83333%25%7D%2Eel%2Dcol%2Dlg%2Dpush%2D17%7Bposition%3Arelative%3Bleft%3A70%2E83333%25%7D%2Eel%2Dcol%2Dlg%2D18%7Bwidth%3A75%25%7D%2Eel%2Dcol%2Dlg%2Doffset%2D18%7Bmargin%2Dleft%3A75%25%7D%2Eel%2Dcol%2Dlg%2Dpull%2D18%7Bposition%3Arelative%3Bright%3A75%25%7D%2Eel%2Dcol%2Dlg%2Dpush%2D18%7Bposition%3Arelative%3Bleft%3A75%25%7D%2Eel%2Dcol%2Dlg%2D19%7Bwidth%3A79%2E16667%25%7D%2Eel%2Dcol%2Dlg%2Doffset%2D19%7Bmargin%2Dleft%3A79%2E16667%25%7D%2Eel%2Dcol%2Dlg%2Dpull%2D19%7Bposition%3Arelative%3Bright%3A79%2E16667%25%7D%2Eel%2Dcol%2Dlg%2Dpush%2D19%7Bposition%3Arelative%3Bleft%3A79%2E16667%25%7D%2Eel%2Dcol%2Dlg%2D20%7Bwidth%3A83%2E33333%25%7D%2Eel%2Dcol%2Dlg%2Doffset%2D20%7Bmargin%2Dleft%3A83%2E33333%25%7D%2Eel%2Dcol%2Dlg%2Dpull%2D20%7Bposition%3Arelative%3Bright%3A83%2E33333%25%7D%2Eel%2Dcol%2Dlg%2Dpush%2D20%7Bposition%3Arelative%3Bleft%3A83%2E33333%25%7D%2Eel%2Dcol%2Dlg%2D21%7Bwidth%3A87%2E5%25%7D%2Eel%2Dcol%2Dlg%2Doffset%2D21%7Bmargin%2Dleft%3A87%2E5%25%7D%2Eel%2Dcol%2Dlg%2Dpull%2D21%7Bposition%3Arelative%3Bright%3A87%2E5%25%7D%2Eel%2Dcol%2Dlg%2Dpush%2D21%7Bposition%3Arelative%3Bleft%3A87%2E5%25%7D%2Eel%2Dcol%2Dlg%2D22%7Bwidth%3A91%2E66667%25%7D%2Eel%2Dcol%2Dlg%2Doffset%2D22%7Bmargin%2Dleft%3A91%2E66667%25%7D%2Eel%2Dcol%2Dlg%2Dpull%2D22%7Bposition%3Arelative%3Bright%3A91%2E66667%25%7D%2Eel%2Dcol%2Dlg%2Dpush%2D22%7Bposition%3Arelative%3Bleft%3A91%2E66667%25%7D%2Eel%2Dcol%2Dlg%2D23%7Bwidth%3A95%2E83333%25%7D%2Eel%2Dcol%2Dlg%2Doffset%2D23%7Bmargin%2Dleft%3A95%2E83333%25%7D%2Eel%2Dcol%2Dlg%2Dpull%2D23%7Bposition%3Arelative%3Bright%3A95%2E83333%25%7D%2Eel%2Dcol%2Dlg%2Dpush%2D23%7Bposition%3Arelative%3Bleft%3A95%2E83333%25%7D%2Eel%2Dcol%2Dlg%2D24%7Bwidth%3A100%25%7D%2Eel%2Dcol%2Dlg%2Doffset%2D24%7Bmargin%2Dleft%3A100%25%7D%2Eel%2Dcol%2Dlg%2Dpull%2D24%7Bposition%3Arelative%3Bright%3A100%25%7D%2Eel%2Dcol%2Dlg%2Dpush%2D24%7Bposition%3Arelative%3Bleft%3A100%25%7D%7D%2Eel%2Dprogress%2Dbar%5F%5Finner%3Aafter%7Bdisplay%3Ainline%2Dblock%3Bheight%3A100%25%3Bvertical%2Dalign%3Amiddle%7D%2Eel%2Dupload%7Bdisplay%3Ainline%2Dblock%3Btext%2Dalign%3Acenter%3Bcursor%3Apointer%7D%2Eel%2Dupload%20iframe%7Bposition%3Aabsolute%3Bz%2Dindex%3A%2D1%3Btop%3A0%3Bleft%3A0%3Bopacity%3A0%3Bfilter%3Aalpha%28opacity%3D0%29%7D%2Eel%2Dupload%5F%5Finput%7Bdisplay%3Anone%7D%2Eel%2Dupload%5F%5Ftip%7Bfont%2Dsize%3A12px%3Bcolor%3A%238391a5%3Bmargin%2Dtop%3A7px%7D%2Eel%2Dupload%2D%2Dpicture%2Dcard%7Bbackground%2Dcolor%3A%23fbfdff%3Bborder%3A1px%20dashed%20%23c0ccda%3Bborder%2Dradius%3A6px%3Bbox%2Dsizing%3Aborder%2Dbox%3Bwidth%3A148px%3Bheight%3A148px%3Bcursor%3Apointer%3Bline%2Dheight%3A146px%3Bvertical%2Dalign%3Atop%7D%2Eel%2Dupload%2D%2Dpicture%2Dcard%20i%7Bfont%2Dsize%3A28px%3Bcolor%3A%238c939d%7D%2Eel%2Dupload%2D%2Dpicture%2Dcard%3Ahover%7Bborder%2Dcolor%3A%2320a0ff%3Bcolor%3A%2320a0ff%7D%2Eel%2Dupload%2Ddragger%7Bbackground%2Dcolor%3A%23fff%3Bborder%3A1px%20dashed%20%23d9d9d9%3Bborder%2Dradius%3A6px%3Bbox%2Dsizing%3Aborder%2Dbox%3Bwidth%3A360px%3Bheight%3A180px%3Btext%2Dalign%3Acenter%3Bcursor%3Apointer%3Bposition%3Arelative%3Boverflow%3Ahidden%7D%2Eel%2Dupload%2Ddragger%20%2Eel%2Dupload%5F%5Ftext%7Bcolor%3A%2397a8be%3Bfont%2Dsize%3A14px%3Btext%2Dalign%3Acenter%7D%2Eel%2Dupload%2Ddragger%20%2Eel%2Dupload%5F%5Ftext%20em%7Bcolor%3A%2320a0ff%3Bfont%2Dstyle%3Anormal%7D%2Eel%2Dupload%2Ddragger%20%2Eel%2Dicon%2Dupload%7Bfont%2Dsize%3A67px%3Bcolor%3A%2397a8be%3Bmargin%3A40px%200%2016px%3Bline%2Dheight%3A50px%7D%2Eel%2Dupload%2Ddragger%2B%2Eel%2Dupload%5F%5Ftip%7Btext%2Dalign%3Acenter%7D%2Eel%2Dupload%2Ddragger%7E%2Eel%2Dupload%5F%5Ffiles%7Bborder%2Dtop%3A1px%20solid%20rgba%28191%2C203%2C217%2C%2E2%29%3Bmargin%2Dtop%3A7px%3Bpadding%2Dtop%3A5px%7D%2Eel%2Dupload%2Ddragger%3Ahover%7Bborder%2Dcolor%3A%2320a0ff%7D%2Eel%2Dupload%2Ddragger%2Eis%2Ddragover%7Bbackground%2Dcolor%3Argba%2832%2C159%2C255%2C%2E06%29%3Bborder%3A2px%20dashed%20%2320a0ff%7D%2Eel%2Dupload%2Dlist%7Bmargin%3A0%3Bpadding%3A0%3Blist%2Dstyle%3Anone%7D%2Eel%2Dupload%2Dlist%5F%5Fitem%7Btransition%3Aall%20%2E5s%20cubic%2Dbezier%28%2E55%2C0%2C%2E1%2C1%29%3Bfont%2Dsize%3A14px%3Bcolor%3A%2348576a%3Bline%2Dheight%3A1%2E8%3Bmargin%2Dtop%3A5px%3Bbox%2Dsizing%3Aborder%2Dbox%3Bborder%2Dradius%3A4px%3Bwidth%3A100%25%3Bposition%3Arelative%7D%2Eel%2Dupload%2Dlist%5F%5Fitem%20%2Eel%2Dprogress%2Dbar%7Bmargin%2Dright%3A0%3Bpadding%2Dright%3A0%7D%2Eel%2Dupload%2Dlist%5F%5Fitem%20%2Eel%2Dprogress%7Bposition%3Aabsolute%3Bbottom%3A%2D3px%3Bwidth%3A100%25%7D%2Eel%2Dupload%2Dlist%5F%5Fitem%20%2Eel%2Dprogress%5F%5Ftext%7Bposition%3Aabsolute%3Btop%3A%2D10px%3Bright%3A0%7D%2Eel%2Dupload%2Dlist%5F%5Fitem%3Afirst%2Dchild%7Bmargin%2Dtop%3A10px%7D%2Eel%2Dupload%2Dlist%5F%5Fitem%20%2Eel%2Dicon%2Dcheck%2C%2Eel%2Dupload%2Dlist%5F%5Fitem%20%2Eel%2Dicon%2Dcircle%2Dcheck%7Bcolor%3A%2313ce66%7D%2Eel%2Dupload%2Dlist%5F%5Fitem%20%2Eel%2Dicon%2Dclose%7Bdisplay%3Anone%3Bcursor%3Apointer%3Bopacity%3A%2E75%3B%2Dms%2Dtransform%3Ascale%28%2E7%29%3Btransform%3Ascale%28%2E7%29%3Bcolor%3A%2348576a%7D%2Eel%2Dupload%2Dlist%5F%5Fitem%20%2Eel%2Dicon%2Dclose%3Ahover%7Bopacity%3A1%7D%2Eel%2Dupload%2Dlist%5F%5Fitem%3Ahover%7Bbackground%2Dcolor%3A%23eef1f6%7D%2Eel%2Dupload%2Dlist%5F%5Fitem%3Ahover%20%2Eel%2Dicon%2Dclose%7Bdisplay%3Ainline%2Dblock%7D%2Eel%2Dupload%2Dlist%5F%5Fitem%2Eis%2Dsuccess%20%2Eel%2Dupload%2Dlist%5F%5Fitem%2Dname%3Ahover%7Bcolor%3A%2320a0ff%3Bcursor%3Apointer%7D%2Eel%2Dupload%2Dlist%5F%5Fitem%2Eis%2Dsuccess%3Ahover%20%2Eel%2Dicon%2Dcheck%2C%2Eel%2Dupload%2Dlist%5F%5Fitem%2Eis%2Dsuccess%3Ahover%20%2Eel%2Dicon%2Dcircle%2Dcheck%7Bdisplay%3Anone%7D%2Eel%2Dupload%2Dlist%5F%5Fitem%2Dname%7Bcolor%3A%2348576a%3Bdisplay%3Ablock%3Bmargin%2Dright%3A40px%3Boverflow%3Ahidden%3Bpadding%2Dleft%3A4px%3Btext%2Doverflow%3Aellipsis%3Btransition%3Acolor%20%2E3s%3Bwhite%2Dspace%3Anowrap%7D%2Eel%2Dupload%2Dlist%5F%5Fitem%2Dname%20%5Bclass%5E%3Del%2Dicon%5D%7Bcolor%3A%2397a8be%3Bmargin%2Dright%3A7px%3Bheight%3A100%25%3Bline%2Dheight%3Ainherit%7D%2Eel%2Dupload%2Dlist%5F%5Fitem%2Dstatus%2Dlabel%7Bposition%3Aabsolute%3Bright%3A10px%3Btop%3A0%3Bline%2Dheight%3Ainherit%7D%2Eel%2Dupload%2Dlist%5F%5Fitem%2Ddelete%7Bposition%3Aabsolute%3Bright%3A10px%3Btop%3A0%3Bfont%2Dsize%3A12px%3Bcolor%3A%2348576a%3Bdisplay%3Anone%7D%2Eel%2Dupload%2Dlist%5F%5Fitem%2Ddelete%3Ahover%7Bcolor%3A%2320a0ff%7D%2Eel%2Dupload%2Dlist%2D%2Dpicture%2Dcard%7Bmargin%3A0%3Bdisplay%3Ainline%3Bvertical%2Dalign%3Atop%7D%2Eel%2Dupload%2Dlist%2D%2Dpicture%2Dcard%20%2Eel%2Dupload%2Dlist%5F%5Fitem%7Boverflow%3Ahidden%3Bbackground%2Dcolor%3A%23fff%3Bborder%3A1px%20solid%20%23c0ccda%3Bborder%2Dradius%3A6px%3Bbox%2Dsizing%3Aborder%2Dbox%3Bwidth%3A148px%3Bheight%3A148px%3Bmargin%3A0%208px%208px%200%3Bdisplay%3Ainline%2Dblock%7D%2Eel%2Dupload%2Dlist%2D%2Dpicture%2Dcard%20%2Eel%2Dupload%2Dlist%5F%5Fitem%20%2Eel%2Dicon%2Dcheck%2C%2Eel%2Dupload%2Dlist%2D%2Dpicture%2Dcard%20%2Eel%2Dupload%2Dlist%5F%5Fitem%20%2Eel%2Dicon%2Dcircle%2Dcheck%7Bcolor%3A%23fff%7D%2Eel%2Dupload%2Dlist%2D%2Dpicture%2Dcard%20%2Eel%2Dupload%2Dlist%5F%5Fitem%2Dname%2C%2Eel%2Dupload%2Dlist%2D%2Dpicture%2Dcard%20%2Eel%2Dupload%2Dlist%5F%5Fitem%3Ahover%20%2Eel%2Dupload%2Dlist%5F%5Fitem%2Dstatus%2Dlabel%7Bdisplay%3Anone%7D%2Eel%2Dupload%2Dlist%2D%2Dpicture%2Dcard%20%2Eel%2Dupload%2Dlist%5F%5Fitem%2Dthumbnail%7Bwidth%3A100%25%3Bheight%3A100%25%7D%2Eel%2Dupload%2Dlist%2D%2Dpicture%2Dcard%20%2Eel%2Dupload%2Dlist%5F%5Fitem%2Dstatus%2Dlabel%7Bposition%3Aabsolute%3Bright%3A%2D15px%3Btop%3A%2D6px%3Bwidth%3A40px%3Bheight%3A24px%3Bbackground%3A%2313ce66%3Btext%2Dalign%3Acenter%3B%2Dms%2Dtransform%3Arotate%2845deg%29%3Btransform%3Arotate%2845deg%29%3Bbox%2Dshadow%3A0%200%201pc%201px%20rgba%280%2C0%2C0%2C%2E2%29%7D%2Eel%2Dupload%2Dlist%2D%2Dpicture%2Dcard%20%2Eel%2Dupload%2Dlist%5F%5Fitem%2Dstatus%2Dlabel%20i%7Bfont%2Dsize%3A12px%3Bmargin%2Dtop%3A11px%3B%2Dms%2Dtransform%3Arotate%28%2D45deg%29%20scale%28%2E8%29%3Btransform%3Arotate%28%2D45deg%29%20scale%28%2E8%29%7D%2Eel%2Dupload%2Dlist%2D%2Dpicture%2Dcard%20%2Eel%2Dupload%2Dlist%5F%5Fitem%2Dactions%7Bposition%3Aabsolute%3Bwidth%3A100%25%3Bheight%3A100%25%3Bleft%3A0%3Btop%3A0%3Bcursor%3Adefault%3Btext%2Dalign%3Acenter%3Bcolor%3A%23fff%3Bopacity%3A0%3Bfont%2Dsize%3A20px%3Bbackground%2Dcolor%3Argba%280%2C0%2C0%2C%2E5%29%3Btransition%3Aopacity%20%2E3s%7D%2Eel%2Dupload%2Dlist%2D%2Dpicture%2Dcard%20%2Eel%2Dupload%2Dlist%5F%5Fitem%2Dactions%3Aafter%7Bdisplay%3Ainline%2Dblock%3Bcontent%3A%22%22%3Bheight%3A100%25%3Bvertical%2Dalign%3Amiddle%7D%2Eel%2Dupload%2Dlist%2D%2Dpicture%2Dcard%20%2Eel%2Dupload%2Dlist%5F%5Fitem%2Dactions%20span%7Bdisplay%3Anone%3Bcursor%3Apointer%7D%2Eel%2Dupload%2Dlist%2D%2Dpicture%2Dcard%20%2Eel%2Dupload%2Dlist%5F%5Fitem%2Dactions%20span%2Bspan%7Bmargin%2Dleft%3A15px%7D%2Eel%2Dupload%2Dlist%2D%2Dpicture%2Dcard%20%2Eel%2Dupload%2Dlist%5F%5Fitem%2Dactions%20%2Eel%2Dupload%2Dlist%5F%5Fitem%2Ddelete%7Bposition%3Astatic%3Bfont%2Dsize%3Ainherit%3Bcolor%3Ainherit%7D%2Eel%2Dupload%2Dlist%2D%2Dpicture%2Dcard%20%2Eel%2Dupload%2Dlist%5F%5Fitem%2Dactions%3Ahover%7Bopacity%3A1%7D%2Eel%2Dupload%2Dlist%2D%2Dpicture%2Dcard%20%2Eel%2Dupload%2Dlist%5F%5Fitem%2Dactions%3Ahover%20span%7Bdisplay%3Ainline%2Dblock%7D%2Eel%2Dupload%2Dlist%2D%2Dpicture%2Dcard%20%2Eel%2Dprogress%7Btop%3A50%25%3Bleft%3A50%25%3B%2Dms%2Dtransform%3Atranslate%28%2D50%25%2C%2D50%25%29%3Btransform%3Atranslate%28%2D50%25%2C%2D50%25%29%3Bbottom%3Aauto%3Bwidth%3A126px%7D%2Eel%2Dupload%2Dlist%2D%2Dpicture%2Dcard%20%2Eel%2Dprogress%20%2Eel%2Dprogress%5F%5Ftext%7Btop%3A50%25%7D%2Eel%2Dupload%2Dlist%2D%2Dpicture%20%2Eel%2Dupload%2Dlist%5F%5Fitem%7Boverflow%3Ahidden%3Bbackground%2Dcolor%3A%23fff%3Bborder%3A1px%20solid%20%23c0ccda%3Bborder%2Dradius%3A6px%3Bbox%2Dsizing%3Aborder%2Dbox%3Bmargin%2Dtop%3A10px%3Bpadding%3A10px%2010px%2010px%2090px%3Bheight%3A92px%7D%2Eel%2Dupload%2Dlist%2D%2Dpicture%20%2Eel%2Dupload%2Dlist%5F%5Fitem%20%2Eel%2Dicon%2Dcheck%2C%2Eel%2Dupload%2Dlist%2D%2Dpicture%20%2Eel%2Dupload%2Dlist%5F%5Fitem%20%2Eel%2Dicon%2Dcircle%2Dcheck%7Bcolor%3A%23fff%7D%2Eel%2Dupload%2Dlist%2D%2Dpicture%20%2Eel%2Dupload%2Dlist%5F%5Fitem%3Ahover%20%2Eel%2Dupload%2Dlist%5F%5Fitem%2Dstatus%2Dlabel%7Bbackground%3A0%200%3Bbox%2Dshadow%3Anone%3Btop%3A%2D2px%3Bright%3A%2D12px%7D%2Eel%2Dupload%2Dlist%2D%2Dpicture%20%2Eel%2Dupload%2Dlist%5F%5Fitem%3Ahover%20%2Eel%2Dupload%2Dlist%5F%5Fitem%2Dstatus%2Dlabel%20%2Eel%2Dicon%2Dclose%7B%2Dms%2Dtransform%3Arotate%2845deg%29%20scale%28%2E7%29%3Btransform%3Arotate%2845deg%29%20scale%28%2E7%29%7D%2Eel%2Dupload%2Dlist%2D%2Dpicture%20%2Eel%2Dupload%2Dlist%5F%5Fitem%2Eis%2Dsuccess%20%2Eel%2Dupload%2Dlist%5F%5Fitem%2Dname%7Bline%2Dheight%3A70px%3Bmargin%2Dtop%3A0%7D%2Eel%2Dupload%2Dlist%2D%2Dpicture%20%2Eel%2Dupload%2Dlist%5F%5Fitem%2Eis%2Dsuccess%20%2Eel%2Dupload%2Dlist%5F%5Fitem%2Dname%20i%7Bdisplay%3Anone%7D%2Eel%2Dupload%2Dlist%2D%2Dpicture%20%2Eel%2Dupload%2Dlist%5F%5Fitem%2Dthumbnail%7Bvertical%2Dalign%3Amiddle%3Bdisplay%3Ainline%2Dblock%3Bwidth%3A70px%3Bheight%3A70px%3Bfloat%3Aleft%3Bmargin%2Dleft%3A%2D80px%7D%2Eel%2Dupload%2Dlist%2D%2Dpicture%20%2Eel%2Dupload%2Dlist%5F%5Fitem%2Dname%7Bdisplay%3Ablock%3Bmargin%2Dtop%3A20px%7D%2Eel%2Dupload%2Dlist%2D%2Dpicture%20%2Eel%2Dupload%2Dlist%5F%5Fitem%2Dname%20i%7Bfont%2Dsize%3A70px%3Bline%2Dheight%3A1%3Bposition%3Aabsolute%3Bleft%3A9px%3Btop%3A10px%7D%2Eel%2Dupload%2Dlist%2D%2Dpicture%20%2Eel%2Dupload%2Dlist%5F%5Fitem%2Dstatus%2Dlabel%7Bposition%3Aabsolute%3Bright%3A%2D17px%3Btop%3A%2D7px%3Bwidth%3A46px%3Bheight%3A26px%3Bbackground%3A%2313ce66%3Btext%2Dalign%3Acenter%3B%2Dms%2Dtransform%3Arotate%2845deg%29%3Btransform%3Arotate%2845deg%29%3Bbox%2Dshadow%3A0%201px%201px%20%23ccc%7D%2Eel%2Dupload%2Dlist%2D%2Dpicture%20%2Eel%2Dupload%2Dlist%5F%5Fitem%2Dstatus%2Dlabel%20i%7Bfont%2Dsize%3A12px%3Bmargin%2Dtop%3A12px%3B%2Dms%2Dtransform%3Arotate%28%2D45deg%29%20scale%28%2E8%29%3Btransform%3Arotate%28%2D45deg%29%20scale%28%2E8%29%7D%2Eel%2Dupload%2Dlist%2D%2Dpicture%20%2Eel%2Dprogress%7Bposition%3Astatic%7D%2Eel%2Dupload%2Dcover%7Bposition%3Aabsolute%3Bleft%3A0%3Btop%3A0%3Bwidth%3A100%25%3Bheight%3A100%25%3Boverflow%3Ahidden%3Bz%2Dindex%3A10%3Bcursor%3Adefault%7D%2Eel%2Dupload%2Dcover%3Aafter%7Bdisplay%3Ainline%2Dblock%3Bheight%3A100%25%3Bvertical%2Dalign%3Amiddle%7D%2Eel%2Dupload%2Dcover%20img%7Bdisplay%3Ablock%3Bwidth%3A100%25%3Bheight%3A100%25%7D%2Eel%2Dupload%2Dcover%2B%2Eel%2Dupload%5F%5Finner%7Bopacity%3A0%3Bposition%3Arelative%3Bz%2Dindex%3A1%7D%2Eel%2Dupload%2Dcover%5F%5Flabel%7Bposition%3Aabsolute%3Bright%3A%2D15px%3Btop%3A%2D6px%3Bwidth%3A40px%3Bheight%3A24px%3Bbackground%3A%2313ce66%3Btext%2Dalign%3Acenter%3B%2Dms%2Dtransform%3Arotate%2845deg%29%3Btransform%3Arotate%2845deg%29%3Bbox%2Dshadow%3A0%200%201pc%201px%20rgba%280%2C0%2C0%2C%2E2%29%7D%2Eel%2Dupload%2Dcover%5F%5Flabel%20i%7Bfont%2Dsize%3A12px%3Bmargin%2Dtop%3A11px%3B%2Dms%2Dtransform%3Arotate%28%2D45deg%29%20scale%28%2E8%29%3Btransform%3Arotate%28%2D45deg%29%20scale%28%2E8%29%3Bcolor%3A%23fff%7D%2Eel%2Dupload%2Dcover%5F%5Fprogress%7Bdisplay%3Ainline%2Dblock%3Bvertical%2Dalign%3Amiddle%3Bposition%3Astatic%3Bwidth%3A243px%7D%2Eel%2Dupload%2Dcover%5F%5Fprogress%2B%2Eel%2Dupload%5F%5Finner%7Bopacity%3A0%7D%2Eel%2Dupload%2Dcover%5F%5Fcontent%7Bposition%3Aabsolute%3Btop%3A0%3Bleft%3A0%3Bwidth%3A100%25%3Bheight%3A100%25%7D%2Eel%2Dupload%2Dcover%5F%5Finteract%7Bposition%3Aabsolute%3Bbottom%3A0%3Bleft%3A0%3Bwidth%3A100%25%3Bheight%3A100%25%3Bbackground%2Dcolor%3Argba%280%2C0%2C0%2C%2E72%29%3Btext%2Dalign%3Acenter%7D%2Eel%2Dupload%2Dcover%5F%5Finteract%20%2Ebtn%7Bdisplay%3Ainline%2Dblock%3Bcolor%3A%23fff%3Bfont%2Dsize%3A14px%3Bcursor%3Apointer%3Bvertical%2Dalign%3Amiddle%3Btransition%3Atransform%20%2E3s%20cubic%2Dbezier%28%2E23%2C1%2C%2E32%2C1%29%20%2E1s%2Copacity%20%2E3s%20cubic%2Dbezier%28%2E23%2C1%2C%2E32%2C1%29%20%2E1s%3Bmargin%2Dtop%3A60px%7D%2Eel%2Dupload%2Dcover%5F%5Finteract%20%2Ebtn%20span%7Bopacity%3A0%3Btransition%3Aopacity%20%2E15s%20linear%7D%2Eel%2Dupload%2Dcover%5F%5Finteract%20%2Ebtn%3Anot%28%3Afirst%2Dchild%29%7Bmargin%2Dleft%3A35px%7D%2Eel%2Dupload%2Dcover%5F%5Finteract%20%2Ebtn%3Ahover%7B%2Dms%2Dtransform%3AtranslateY%28%2D13px%29%3Btransform%3AtranslateY%28%2D13px%29%7D%2Eel%2Dupload%2Dcover%5F%5Finteract%20%2Ebtn%3Ahover%20span%7Bopacity%3A1%7D%2Eel%2Dupload%2Dcover%5F%5Finteract%20%2Ebtn%20i%7Bcolor%3A%23fff%3Bdisplay%3Ablock%3Bfont%2Dsize%3A24px%3Bline%2Dheight%3Ainherit%3Bmargin%3A0%20auto%205px%7D%2Eel%2Dupload%2Dcover%5F%5Ftitle%7Bposition%3Aabsolute%3Bbottom%3A0%3Bleft%3A0%3Bbackground%2Dcolor%3A%23fff%3Bheight%3A36px%3Bwidth%3A100%25%3Boverflow%3Ahidden%3Btext%2Doverflow%3Aellipsis%3Bwhite%2Dspace%3Anowrap%3Bfont%2Dweight%3A400%3Btext%2Dalign%3Aleft%3Bpadding%3A0%2010px%3Bmargin%3A0%3Bline%2Dheight%3A36px%3Bfont%2Dsize%3A14px%3Bcolor%3A%2348576a%7D%2Eel%2Dprogress%7Bposition%3Arelative%3Bline%2Dheight%3A1%7D%2Eel%2Dprogress%2Eis%2Dexception%20%2Eel%2Dprogress%2Dbar%5F%5Finner%7Bbackground%2Dcolor%3A%23ff4949%7D%2Eel%2Dprogress%2Eis%2Dexception%20%2Eel%2Dprogress%5F%5Ftext%7Bcolor%3A%23ff4949%7D%2Eel%2Dprogress%2Eis%2Dsuccess%20%2Eel%2Dprogress%2Dbar%5F%5Finner%7Bbackground%2Dcolor%3A%2313ce66%7D%2Eel%2Dprogress%2Eis%2Dsuccess%20%2Eel%2Dprogress%5F%5Ftext%7Bcolor%3A%2313ce66%7D%2Eel%2Dprogress%5F%5Ftext%7Bfont%2Dsize%3A14px%3Bcolor%3A%2348576a%3Bdisplay%3Ainline%2Dblock%3Bvertical%2Dalign%3Amiddle%3Bmargin%2Dleft%3A10px%3Bline%2Dheight%3A1%7D%2Eel%2Dprogress%5F%5Ftext%20i%7Bvertical%2Dalign%3Amiddle%3Bdisplay%3Ablock%7D%2Eel%2Dprogress%2D%2Dcircle%7Bdisplay%3Ainline%2Dblock%7D%2Eel%2Dprogress%2D%2Dcircle%20%2Eel%2Dprogress%5F%5Ftext%7Bposition%3Aabsolute%3Btop%3A50%25%3Bleft%3A0%3Bwidth%3A100%25%3Btext%2Dalign%3Acenter%3Bmargin%3A0%3B%2Dms%2Dtransform%3Atranslate%280%2C%2D50%25%29%3Btransform%3Atranslate%280%2C%2D50%25%29%7D%2Eel%2Dprogress%2D%2Dcircle%20%2Eel%2Dprogress%5F%5Ftext%20i%7Bvertical%2Dalign%3Amiddle%3Bdisplay%3Ainline%2Dblock%7D%2Eel%2Dprogress%2D%2Dwithout%2Dtext%20%2Eel%2Dprogress%5F%5Ftext%7Bdisplay%3Anone%7D%2Eel%2Dprogress%2D%2Dwithout%2Dtext%20%2Eel%2Dprogress%2Dbar%7Bpadding%2Dright%3A0%3Bmargin%2Dright%3A0%3Bdisplay%3Ablock%7D%2Eel%2Dprogress%2Dbar%2C%2Eel%2Dprogress%2Dbar%5F%5FinnerText%2C%2Eel%2Dspinner%7Bdisplay%3Ainline%2Dblock%3Bvertical%2Dalign%3Amiddle%7D%2Eel%2Dprogress%2D%2Dtext%2Dinside%20%2Eel%2Dprogress%2Dbar%7Bpadding%2Dright%3A0%3Bmargin%2Dright%3A0%7D%2Eel%2Dprogress%2Dbar%7Bpadding%2Dright%3A50px%3Bwidth%3A100%25%3Bmargin%2Dright%3A%2D55px%3Bbox%2Dsizing%3Aborder%2Dbox%7D%2Eel%2Dprogress%2Dbar%5F%5Fouter%7Bheight%3A6px%3Bborder%2Dradius%3A100px%3Bbackground%2Dcolor%3A%23e4e8f1%3Boverflow%3Ahidden%3Bposition%3Arelative%3Bvertical%2Dalign%3Amiddle%7D%2Eel%2Dprogress%2Dbar%5F%5Finner%7Bposition%3Aabsolute%3Bleft%3A0%3Btop%3A0%3Bheight%3A100%25%3Bbackground%2Dcolor%3A%2320a0ff%3Btext%2Dalign%3Aright%3Bborder%2Dradius%3A100px%3Bline%2Dheight%3A1%7D%2Eel%2Dprogress%2Dbar%5F%5FinnerText%7Bcolor%3A%23fff%3Bfont%2Dsize%3A12px%3Bmargin%3A0%205px%7D%40keyframes%20progress%7B0%25%7Bbackground%2Dposition%3A0%200%7D100%25%7Bbackground%2Dposition%3A32px%200%7D%7D%2Eel%2Dtime%2Dspinner%7Bwidth%3A100%25%3Bwhite%2Dspace%3Anowrap%7D%2Eel%2Dspinner%2Dinner%7Banimation%3Arotate%202s%20linear%20infinite%3Bwidth%3A50px%3Bheight%3A50px%7D%2Eel%2Dspinner%2Dinner%20%2Epath%7Bstroke%3A%23ececec%3Bstroke%2Dlinecap%3Around%3Banimation%3Adash%201%2E5s%20ease%2Din%2Dout%20infinite%7D%40keyframes%20rotate%7B100%25%7Btransform%3Arotate%28360deg%29%7D%7D%40keyframes%20dash%7B0%25%7Bstroke%2Ddasharray%3A1%2C150%3Bstroke%2Ddashoffset%3A0%7D50%25%7Bstroke%2Ddasharray%3A90%2C150%3Bstroke%2Ddashoffset%3A%2D35%7D100%25%7Bstroke%2Ddasharray%3A90%2C150%3Bstroke%2Ddashoffset%3A%2D124%7D%7D%2Eel%2Dmessage%7Bbox%2Dshadow%3A0%202px%204px%20rgba%280%2C0%2C0%2C%2E12%29%2C0%200%206px%20rgba%280%2C0%2C0%2C%2E04%29%3Bmin%2Dwidth%3A300px%3Bpadding%3A10px%2012px%3Bbox%2Dsizing%3Aborder%2Dbox%3Bborder%2Dradius%3A2px%3Bposition%3Afixed%3Bleft%3A50%25%3Btop%3A20px%3B%2Dms%2Dtransform%3AtranslateX%28%2D50%25%29%3Btransform%3AtranslateX%28%2D50%25%29%3Bbackground%2Dcolor%3A%23fff%3Btransition%3Aopacity%20%2E3s%2Ctransform%20%2E4s%3Boverflow%3Ahidden%7D%2Eel%2Dmessage%20%2Eel%2Dicon%2Dcircle%2Dcheck%7Bcolor%3A%2313ce66%7D%2Eel%2Dmessage%20%2Eel%2Dicon%2Dcircle%2Dcross%7Bcolor%3A%23ff4949%7D%2Eel%2Dmessage%20%2Eel%2Dicon%2Dinformation%7Bcolor%3A%2350bfff%7D%2Eel%2Dmessage%20%2Eel%2Dicon%2Dwarning%7Bcolor%3A%23f7ba2a%7D%2Eel%2Dmessage%5F%5Fgroup%7Bmargin%2Dleft%3A38px%3Bposition%3Arelative%3Bheight%3A20px%3Bline%2Dheight%3A20px%3Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dms%2Dflex%2Dalign%3Acenter%3Balign%2Ditems%3Acenter%7D%2Eel%2Dmessage%5F%5Fgroup%20p%7Bfont%2Dsize%3A14px%3Bmargin%3A0%2034px%200%200%3Bwhite%2Dspace%3Anowrap%3Bcolor%3A%238391a5%3Btext%2Dalign%3Ajustify%7D%2Eel%2Dstep%5F%5Fhead%2C%2Eel%2Dsteps%2Eis%2Dhorizontal%2Eis%2Dcenter%7Btext%2Dalign%3Acenter%7D%2Eel%2Dmessage%5F%5Fgroup%2Eis%2Dwith%2Dicon%7Bmargin%2Dleft%3A0%7D%2Eel%2Dmessage%5F%5Fimg%7Bwidth%3A40px%3Bheight%3A40px%3Bposition%3Aabsolute%3Bleft%3A0%3Btop%3A0%7D%2Eel%2Dmessage%5F%5Ficon%7Bvertical%2Dalign%3Amiddle%3Bmargin%2Dright%3A8px%7D%2Eel%2Dmessage%5F%5FcloseBtn%7Btop%3A3px%3Bright%3A0%3Bposition%3Aabsolute%3Bcursor%3Apointer%3Bcolor%3A%23bfcbd9%3Bfont%2Dsize%3A14px%7D%2Eel%2Dmessage%5F%5FcloseBtn%3Ahover%7Bcolor%3A%2397a8be%7D%2Eel%2Dmessage%2Dfade%2Denter%2C%2Eel%2Dmessage%2Dfade%2Dleave%2Dactive%7Bopacity%3A0%3B%2Dms%2Dtransform%3Atranslate%28%2D50%25%2C%2D100%25%29%3Btransform%3Atranslate%28%2D50%25%2C%2D100%25%29%7D%2Eel%2Dbadge%7Bposition%3Arelative%3Bvertical%2Dalign%3Amiddle%3Bdisplay%3Ainline%2Dblock%7D%2Eel%2Dbadge%5F%5Fcontent%7Bbackground%2Dcolor%3A%23ff4949%3Bborder%2Dradius%3A10px%3Bcolor%3A%23fff%3Bdisplay%3Ainline%2Dblock%3Bfont%2Dsize%3A12px%3Bheight%3A18px%3Bline%2Dheight%3A18px%3Bpadding%3A0%206px%3Btext%2Dalign%3Acenter%3Bwhite%2Dspace%3Anowrap%3Bborder%3A1px%20solid%20%23fff%7D%2Eel%2Dbadge%5F%5Fcontent%2Eis%2Ddot%7Bwidth%3A8px%3Bheight%3A8px%3Bpadding%3A0%3Bright%3A0%3Bborder%2Dradius%3A50%25%7D%2Eel%2Dbadge%5F%5Fcontent%2Eis%2Dfixed%7Btop%3A0%3Bright%3A10px%3Bposition%3Aabsolute%3B%2Dms%2Dtransform%3AtranslateY%28%2D50%25%29%20translateX%28100%25%29%3Btransform%3AtranslateY%28%2D50%25%29%20translateX%28100%25%29%7D%2Eel%2Drate%5F%5Ficon%2C%2Eel%2Drate%5F%5Fitem%7Bposition%3Arelative%3Bdisplay%3Ainline%2Dblock%7D%2Eel%2Dbadge%5F%5Fcontent%2Eis%2Dfixed%2Eis%2Ddot%7Bright%3A5px%7D%2Eel%2Dcard%7Bborder%3A1px%20solid%20%23d1dbe5%3Bborder%2Dradius%3A4px%3Bbackground%2Dcolor%3A%23fff%3Boverflow%3Ahidden%3Bbox%2Dshadow%3A0%202px%204px%200%20rgba%280%2C0%2C0%2C%2E12%29%2C0%200%206px%200%20rgba%280%2C0%2C0%2C%2E04%29%7D%2Eel%2Dcard%5F%5Fheader%7Bpadding%3A18px%2020px%3Bborder%2Dbottom%3A1px%20solid%20%23d1dbe5%3Bbox%2Dsizing%3Aborder%2Dbox%7D%2Eel%2Dcard%5F%5Fbody%7Bpadding%3A20px%7D%2Eel%2Drate%7Bheight%3A20px%3Bline%2Dheight%3A1%7D%2Eel%2Drate%5F%5Fitem%7Bfont%2Dsize%3A0%3Bvertical%2Dalign%3Amiddle%7D%2Eel%2Drate%5F%5Ficon%7Bfont%2Dsize%3A18px%3Bmargin%2Dright%3A6px%3Bcolor%3A%23bfcbd9%3Btransition%3A%2E3s%7D%2Eel%2Drate%5F%5Fdecimal%2C%2Eel%2Drate%5F%5Ficon%20%2Epath2%7Bposition%3Aabsolute%3Btop%3A0%3Bleft%3A0%7D%2Eel%2Drate%5F%5Ficon%2Ehover%7B%2Dms%2Dtransform%3Ascale%281%2E15%29%3Btransform%3Ascale%281%2E15%29%7D%2Eel%2Drate%5F%5Fdecimal%7Bdisplay%3Ainline%2Dblock%3Boverflow%3Ahidden%7D%2Eel%2Drate%5F%5Ftext%7Bfont%2Dsize%3A14px%3Bvertical%2Dalign%3Amiddle%7D%2Eel%2Dsteps%7Bfont%2Dsize%3A0%7D%2Eel%2Dsteps%3E%3Alast%2Dchild%20%2Eel%2Dstep%5F%5Fline%7Bdisplay%3Anone%7D%2Eel%2Dstep%2Eis%2Dhorizontal%2C%2Eel%2Dstep%2Eis%2Dvertical%20%2Eel%2Dstep%5F%5Fhead%2C%2Eel%2Dstep%2Eis%2Dvertical%20%2Eel%2Dstep%5F%5Fmain%2C%2Eel%2Dstep%5F%5Fline%7Bdisplay%3Ainline%2Dblock%7D%2Eel%2Dsteps%2Eis%2Dhorizontal%7Bwhite%2Dspace%3Anowrap%7D%2Eel%2Dstep%7Bposition%3Arelative%3Bvertical%2Dalign%3Atop%7D%2Eel%2Dstep%3Alast%2Dchild%20%2Eel%2Dstep%5F%5Fmain%7Bpadding%2Dright%3A0%7D%2Eel%2Dstep%2Eis%2Dvertical%20%2Eel%2Dstep%5F%5Fmain%7Bpadding%2Dleft%3A10px%7D%2Eel%2Dstep%5F%5Fline%7Bposition%3Aabsolute%3Bborder%2Dcolor%3Ainherit%3Bbackground%2Dcolor%3A%23bfcbd9%7D%2Eel%2Dstep%5F%5Fline%2Eis%2Dvertical%7Bwidth%3A2px%3Bbox%2Dsizing%3Aborder%2Dbox%3Btop%3A32px%3Bbottom%3A0%3Bleft%3A15px%7D%2Eel%2Dstep%5F%5Fline%2Eis%2Dhorizontal%7Btop%3A15px%3Bheight%3A2px%3Bleft%3A32px%3Bright%3A0%7D%2Eel%2Dstep%5F%5Fline%2Eis%2Dicon%2Eis%2Dhorizontal%7Bright%3A4px%7D%2Eel%2Dstep%5F%5Fline%2Dinner%7Bdisplay%3Ablock%3Bborder%2Dwidth%3A1px%3Bborder%2Dstyle%3Asolid%3Bborder%2Dcolor%3Ainherit%3Btransition%3Aall%20150ms%3Bwidth%3A0%3Bheight%3A0%7D%2Eel%2Dstep%5F%5Ficon%7Bdisplay%3Ablock%3Bline%2Dheight%3A28px%7D%2Eel%2Dstep%5F%5Ficon%3E%2A%7Bline%2Dheight%3Ainherit%3Bvertical%2Dalign%3Amiddle%7D%2Eel%2Dstep%5F%5Fhead%7Bwidth%3A28px%3Bheight%3A28px%3Bborder%2Dradius%3A50%25%3Bbackground%2Dcolor%3Atransparent%3Bline%2Dheight%3A28px%3Bfont%2Dsize%3A28px%3Bvertical%2Dalign%3Atop%3Btransition%3Aall%20150ms%7D%2Eel%2Dcarousel%5F%5Farrow%2C%2Eel%2Dcarousel%5F%5Fbutton%7Bmargin%3A0%3Btransition%3A%2E3s%3Bcursor%3Apointer%3Boutline%3A0%7D%2Eel%2Dstep%5F%5Fhead%2Eis%2Dfinish%7Bcolor%3A%2320a0ff%3Bborder%2Dcolor%3A%2320a0ff%7D%2Eel%2Dstep%5F%5Fhead%2Eis%2Derror%7Bcolor%3A%23ff4949%3Bborder%2Dcolor%3A%23ff4949%7D%2Eel%2Dstep%5F%5Fhead%2Eis%2Dsuccess%7Bcolor%3A%2313ce66%3Bborder%2Dcolor%3A%2313ce66%7D%2Eel%2Dstep%5F%5Fhead%2Eis%2Dprocess%2C%2Eel%2Dstep%5F%5Fhead%2Eis%2Dwait%7Bcolor%3A%23bfcbd9%3Bborder%2Dcolor%3A%23bfcbd9%7D%2Eel%2Dstep%5F%5Fhead%2Eis%2Dtext%7Bfont%2Dsize%3A14px%3Bborder%2Dwidth%3A2px%3Bborder%2Dstyle%3Asolid%7D%2Eel%2Dstep%5F%5Fhead%2Eis%2Dtext%2Eis%2Dfinish%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%2320a0ff%3Bborder%2Dcolor%3A%2320a0ff%7D%2Eel%2Dstep%5F%5Fhead%2Eis%2Dtext%2Eis%2Derror%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23ff4949%3Bborder%2Dcolor%3A%23ff4949%7D%2Eel%2Dstep%5F%5Fhead%2Eis%2Dtext%2Eis%2Dsuccess%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%2313ce66%3Bborder%2Dcolor%3A%2313ce66%7D%2Eel%2Dstep%5F%5Fhead%2Eis%2Dtext%2Eis%2Dwait%7Bcolor%3A%23bfcbd9%3Bbackground%2Dcolor%3A%23fff%3Bborder%2Dcolor%3A%23bfcbd9%7D%2Eel%2Dstep%5F%5Fhead%2Eis%2Dtext%2Eis%2Dprocess%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23bfcbd9%3Bborder%2Dcolor%3A%23bfcbd9%7D%2Eel%2Dstep%5F%5Fmain%7Bwhite%2Dspace%3Anormal%3Bpadding%2Dright%3A10px%3Btext%2Dalign%3Aleft%7D%2Eel%2Dstep%5F%5Ftitle%7Bfont%2Dsize%3A14px%3Bline%2Dheight%3A32px%3Bdisplay%3Ainline%2Dblock%7D%2Eel%2Dstep%5F%5Ftitle%2Eis%2Dfinish%7Bfont%2Dweight%3A700%3Bcolor%3A%2320a0ff%7D%2Eel%2Dstep%5F%5Ftitle%2Eis%2Derror%7Bfont%2Dweight%3A700%3Bcolor%3A%23ff4949%7D%2Eel%2Dstep%5F%5Ftitle%2Eis%2Dsuccess%7Bfont%2Dweight%3A700%3Bcolor%3A%2313ce66%7D%2Eel%2Dstep%5F%5Ftitle%2Eis%2Dwait%7Bfont%2Dweight%3A400%3Bcolor%3A%2397a8be%7D%2Eel%2Dstep%5F%5Ftitle%2Eis%2Dprocess%7Bfont%2Dweight%3A700%3Bcolor%3A%2348576a%7D%2Eel%2Dstep%5F%5Fdescription%7Bfont%2Dsize%3A12px%3Bfont%2Dweight%3A400%3Bline%2Dheight%3A14px%7D%2Eel%2Dstep%5F%5Fdescription%2Eis%2Dfinish%7Bcolor%3A%2320a0ff%7D%2Eel%2Dstep%5F%5Fdescription%2Eis%2Derror%7Bcolor%3A%23ff4949%7D%2Eel%2Dstep%5F%5Fdescription%2Eis%2Dsuccess%7Bcolor%3A%2313ce66%7D%2Eel%2Dstep%5F%5Fdescription%2Eis%2Dwait%7Bcolor%3A%23bfcbd9%7D%2Eel%2Dstep%5F%5Fdescription%2Eis%2Dprocess%7Bcolor%3A%238391a5%7D%2Eel%2Dcarousel%7Boverflow%2Dx%3Ahidden%3Bposition%3Arelative%7D%2Eel%2Dcarousel%5F%5Fcontainer%7Bposition%3Arelative%3Bheight%3A300px%7D%2Eel%2Dcarousel%5F%5Farrow%7Bborder%3Anone%3Bpadding%3A0%3Bwidth%3A36px%3Bheight%3A36px%3Bborder%2Dradius%3A50%25%3Bbackground%2Dcolor%3Argba%2831%2C45%2C61%2C%2E11%29%3Bcolor%3A%23fff%3Bposition%3Aabsolute%3Btop%3A50%25%3Bz%2Dindex%3A10%3B%2Dms%2Dtransform%3AtranslateY%28%2D50%25%29%3Btransform%3AtranslateY%28%2D50%25%29%3Btext%2Dalign%3Acenter%3Bfont%2Dsize%3A12px%7D%2Eel%2Dcarousel%5F%5Farrow%3Ahover%7Bbackground%2Dcolor%3Argba%2831%2C45%2C61%2C%2E23%29%7D%2Eel%2Dcarousel%5F%5Farrow%20i%7Bcursor%3Apointer%7D%2Eel%2Dcarousel%5F%5Farrow%2D%2Dleft%7Bleft%3A16px%7D%2Eel%2Dcarousel%5F%5Farrow%2D%2Dright%7Bright%3A16px%7D%2Eel%2Dcarousel%5F%5Findicators%7Bposition%3Aabsolute%3Blist%2Dstyle%3Anone%3Bbottom%3A0%3Bleft%3A50%25%3B%2Dms%2Dtransform%3AtranslateX%28%2D50%25%29%3Btransform%3AtranslateX%28%2D50%25%29%3Bmargin%3A0%3Bpadding%3A0%3Bz%2Dindex%3A2%7D%2Eel%2Dcarousel%5F%5Findicators%2D%2Doutside%7Bbottom%3A26px%3Btext%2Dalign%3Acenter%3Bposition%3Astatic%3B%2Dms%2Dtransform%3Anone%3Btransform%3Anone%7D%2Eel%2Dcarousel%5F%5Findicators%2D%2Doutside%20%2Eel%2Dcarousel%5F%5Findicator%3Ahover%20button%7Bopacity%3A%2E64%7D%2Eel%2Dcarousel%5F%5Findicators%2D%2Doutside%20button%7Bbackground%2Dcolor%3A%238391a5%3Bopacity%3A%2E24%7D%2Eel%2Dcarousel%5F%5Findicator%7Bdisplay%3Ainline%2Dblock%3Bbackground%2Dcolor%3Atransparent%3Bpadding%3A12px%204px%3Bcursor%3Apointer%7D%2Eel%2Dcarousel%5F%5Findicator%3Ahover%20button%7Bopacity%3A%2E72%7D%2Eel%2Dcarousel%5F%5Findicator%2Eis%2Dactive%20button%7Bopacity%3A1%7D%2Eel%2Dcarousel%5F%5Fbutton%7Bdisplay%3Ablock%3Bopacity%3A%2E48%3Bwidth%3A30px%3Bheight%3A2px%3Bbackground%2Dcolor%3A%23fff%3Bborder%3Anone%3Bpadding%3A0%7D%2Ecarousel%2Darrow%2Dleft%2Denter%2C%2Ecarousel%2Darrow%2Dleft%2Dleave%2Dactive%7B%2Dms%2Dtransform%3AtranslateY%28%2D50%25%29%20translateX%28%2D10px%29%3Btransform%3AtranslateY%28%2D50%25%29%20translateX%28%2D10px%29%3Bopacity%3A0%7D%2Ecarousel%2Darrow%2Dright%2Denter%2C%2Ecarousel%2Darrow%2Dright%2Dleave%2Dactive%7B%2Dms%2Dtransform%3AtranslateY%28%2D50%25%29%20translateX%2810px%29%3Btransform%3AtranslateY%28%2D50%25%29%20translateX%2810px%29%3Bopacity%3A0%7D%2Eel%2Dscrollbar%7Boverflow%3Ahidden%3Bposition%3Arelative%7D%2Eel%2Dscrollbar%3Aactive%20%2Eel%2Dscrollbar%5F%5Fbar%2C%2Eel%2Dscrollbar%3Afocus%20%2Eel%2Dscrollbar%5F%5Fbar%2C%2Eel%2Dscrollbar%3Ahover%20%2Eel%2Dscrollbar%5F%5Fbar%7Bopacity%3A1%3Btransition%3Aopacity%20340ms%20ease%2Dout%7D%2Eel%2Dscrollbar%5F%5Fwrap%7Boverflow%3Ascroll%7D%2Eel%2Dscrollbar%5F%5Fwrap%2D%2Dhidden%2Ddefault%3A%3A%2Dwebkit%2Dscrollbar%7Bwidth%3A0%3Bheight%3A0%7D%2Eel%2Dscrollbar%5F%5Fthumb%7Bposition%3Arelative%3Bdisplay%3Ablock%3Bwidth%3A0%3Bheight%3A0%3Bcursor%3Apointer%3Bborder%2Dradius%3Ainherit%3Bbackground%2Dcolor%3Argba%28151%2C168%2C190%2C%2E3%29%3Btransition%3A%2E3s%20background%2Dcolor%7D%2Eel%2Dscrollbar%5F%5Fthumb%3Ahover%7Bbackground%2Dcolor%3Argba%28151%2C168%2C190%2C%2E5%29%7D%2Eel%2Dscrollbar%5F%5Fbar%7Bposition%3Aabsolute%3Bright%3A2px%3Bbottom%3A2px%3Bz%2Dindex%3A1%3Bborder%2Dradius%3A4px%3Bopacity%3A0%3Btransition%3Aopacity%20120ms%20ease%2Dout%7D%2Eel%2Dscrollbar%5F%5Fbar%2Eis%2Dhorizontal%7Bheight%3A6px%3Bleft%3A2px%7D%2Eel%2Dscrollbar%5F%5Fbar%2Eis%2Dhorizontal%3Ediv%7Bheight%3A100%25%7D%2Eel%2Dscrollbar%5F%5Fbar%2Eis%2Dvertical%7Bwidth%3A6px%3Btop%3A2px%7D%2Eel%2Dscrollbar%5F%5Fbar%2Eis%2Dvertical%3Ediv%7Bwidth%3A100%25%7D%2Eel%2Dcarousel%5F%5Fitem%7Bposition%3Aabsolute%3Btop%3A0%3Bleft%3A0%3Bwidth%3A100%25%3Bheight%3A100%25%3Bdisplay%3Ainline%2Dblock%3Btransition%3A%2E4s%20ease%2Din%2Dout%3Boverflow%3Ahidden%3Bz%2Dindex%3A0%7D%2Eel%2Dcarousel%5F%5Fitem%2Eis%2Dactive%7Bz%2Dindex%3A2%7D%2Eel%2Dcarousel%5F%5Fitem%2D%2Dcard%7Bwidth%3A50%25%7D%2Eel%2Dcarousel%5F%5Fitem%2D%2Dcard%2Eis%2Din%2Dstage%7Bcursor%3Apointer%3Bz%2Dindex%3A1%7D%2Eel%2Dcarousel%5F%5Fitem%2D%2Dcard%2Eis%2Dactive%2C%2Eel%2Dcascader%20%2Eel%2Dicon%2Dcircle%2Dclose%2C%2Eel%2Dcascader%2Dmenus%7Bz%2Dindex%3A2%7D%2Eel%2Dcarousel%5F%5Fitem%2D%2Dcard%2Eis%2Din%2Dstage%2Eis%2Dhover%20%2Eel%2Dcarousel%5F%5Fmask%2C%2Eel%2Dcarousel%5F%5Fitem%2D%2Dcard%2Eis%2Din%2Dstage%3Ahover%20%2Eel%2Dcarousel%5F%5Fmask%7Bopacity%3A%2E12%7D%2Eel%2Dcarousel%5F%5Fmask%7Bposition%3Aabsolute%3Bwidth%3A100%25%3Bheight%3A100%25%3Btop%3A0%3Bleft%3A0%3Bbackground%2Dcolor%3A%23fff%3Bopacity%3A%2E24%3Btransition%3A%2E2s%7D%2Eel%2Dcollapse%7Bborder%3A1px%20solid%20%23dfe6ec%3Bborder%2Dradius%3A0%7D%2Eel%2Dcollapse%2Ditem%3Alast%2Dchild%7Bmargin%2Dbottom%3A%2D1px%7D%2Eel%2Dcollapse%2Ditem%2Eis%2Dactive%3E%2Eel%2Dcollapse%2Ditem%5F%5Fheader%20%2Eel%2Dcollapse%2Ditem%5F%5Fheader%5F%5Farrow%7B%2Dms%2Dtransform%3Arotate%2890deg%29%3Btransform%3Arotate%2890deg%29%7D%2Eel%2Dcollapse%2Ditem%5F%5Fheader%7Bheight%3A43px%3Bline%2Dheight%3A43px%3Bpadding%2Dleft%3A15px%3Bbackground%2Dcolor%3A%23fff%3Bcolor%3A%2348576a%3Bcursor%3Apointer%3Bborder%2Dbottom%3A1px%20solid%20%23dfe6ec%3Bfont%2Dsize%3A13px%7D%2Eel%2Dcollapse%2Ditem%5F%5Fheader%5F%5Farrow%7Bmargin%2Dright%3A8px%3Btransition%3Atransform%20%2E3s%7D%2Eel%2Dcollapse%2Ditem%5F%5Fwrap%7Bwill%2Dchange%3Aheight%3Bbackground%2Dcolor%3A%23fbfdff%3Boverflow%3Ahidden%3Bbox%2Dsizing%3Aborder%2Dbox%3Bborder%2Dbottom%3A1px%20solid%20%23dfe6ec%7D%2Eel%2Dcollapse%2Ditem%5F%5Fcontent%7Bpadding%3A10px%2015px%3Bfont%2Dsize%3A13px%3Bcolor%3A%231f2d3d%3Bline%2Dheight%3A1%2E769230769230769%7D%2Eel%2Dinput%7Bposition%3Arelative%3Bfont%2Dsize%3A14px%3Bdisplay%3Ainline%2Dblock%3Bwidth%3A100%25%7D%2Eel%2Dinput%2Eis%2Ddisabled%20%2Eel%2Dinput%5F%5Finner%7Bbackground%2Dcolor%3A%23eef1f6%3Bborder%2Dcolor%3A%23d1dbe5%3Bcolor%3A%23bbb%3Bcursor%3Anot%2Dallowed%7D%2Eel%2Dinput%2Eis%2Ddisabled%20%2Eel%2Dinput%5F%5Finner%3A%3A%2Dwebkit%2Dinput%2Dplaceholder%7Bcolor%3A%23bfcbd9%7D%2Eel%2Dinput%2Eis%2Ddisabled%20%2Eel%2Dinput%5F%5Finner%3A%3A%2Dmoz%2Dplaceholder%7Bcolor%3A%23bfcbd9%7D%2Eel%2Dinput%2Eis%2Ddisabled%20%2Eel%2Dinput%5F%5Finner%3A%2Dms%2Dinput%2Dplaceholder%7Bcolor%3A%23bfcbd9%7D%2Eel%2Dinput%2Eis%2Ddisabled%20%2Eel%2Dinput%5F%5Finner%3A%3Aplaceholder%7Bcolor%3A%23bfcbd9%7D%2Eel%2Dinput%2Eis%2Dactive%20%2Eel%2Dinput%5F%5Finner%7Boutline%3A0%3Bborder%2Dcolor%3A%2320a0ff%7D%2Eel%2Dinput%5F%5Finner%7B%2Dwebkit%2Dappearance%3Anone%3B%2Dmoz%2Dappearance%3Anone%3Bappearance%3Anone%3Bbackground%2Dcolor%3A%23fff%3Bbackground%2Dimage%3Anone%3Bborder%2Dradius%3A4px%3Bborder%3A1px%20solid%20%23bfcbd9%3Bbox%2Dsizing%3Aborder%2Dbox%3Bcolor%3A%231f2d3d%3Bdisplay%3Ablock%3Bfont%2Dsize%3Ainherit%3Bheight%3A36px%3Bline%2Dheight%3A1%3Boutline%3A0%3Bpadding%3A3px%2010px%3Btransition%3Aborder%2Dcolor%20%2E2s%20cubic%2Dbezier%28%2E645%2C%2E045%2C%2E355%2C1%29%3Bwidth%3A100%25%7D%2Eel%2Dinput%5F%5Finner%3A%3A%2Dwebkit%2Dinput%2Dplaceholder%7Bcolor%3A%2397a8be%7D%2Eel%2Dinput%5F%5Finner%3A%3A%2Dmoz%2Dplaceholder%7Bcolor%3A%2397a8be%7D%2Eel%2Dinput%5F%5Finner%3A%2Dms%2Dinput%2Dplaceholder%7Bcolor%3A%2397a8be%7D%2Eel%2Dinput%5F%5Finner%3A%3Aplaceholder%7Bcolor%3A%2397a8be%7D%2Eel%2Dinput%5F%5Finner%3Ahover%7Bborder%2Dcolor%3A%238391a5%7D%2Eel%2Dinput%5F%5Finner%3Afocus%7Boutline%3A0%3Bborder%2Dcolor%3A%2320a0ff%7D%2Eel%2Dinput%5F%5Ficon%7Bposition%3Aabsolute%3Bwidth%3A35px%3Bheight%3A100%25%3Bright%3A0%3Btop%3A0%3Btext%2Dalign%3Acenter%3Bcolor%3A%23bfcbd9%3Btransition%3Aall%20%2E3s%7D%2Eel%2Dinput%5F%5Ficon%3Aafter%7Bcontent%3A%27%27%3Bheight%3A100%25%3Bwidth%3A0%3Bdisplay%3Ainline%2Dblock%3Bvertical%2Dalign%3Amiddle%7D%2Eel%2Dinput%5F%5Ficon%2B%2Eel%2Dinput%5F%5Finner%7Bpadding%2Dright%3A35px%7D%2Eel%2Dinput%5F%5Ficon%2Eis%2Dclickable%3Ahover%7Bcursor%3Apointer%3Bcolor%3A%238391a5%7D%2Eel%2Dinput%5F%5Ficon%2Eis%2Dclickable%3Ahover%2B%2Eel%2Dinput%5F%5Finner%7Bborder%2Dcolor%3A%238391a5%7D%2Eel%2Dinput%2D%2Dlarge%7Bfont%2Dsize%3A16px%7D%2Eel%2Dinput%2D%2Dlarge%20%2Eel%2Dinput%5F%5Finner%7Bheight%3A42px%7D%2Eel%2Dinput%2D%2Dsmall%7Bfont%2Dsize%3A13px%7D%2Eel%2Dinput%2D%2Dsmall%20%2Eel%2Dinput%5F%5Finner%7Bheight%3A30px%7D%2Eel%2Dinput%2D%2Dmini%7Bfont%2Dsize%3A12px%7D%2Eel%2Dinput%2D%2Dmini%20%2Eel%2Dinput%5F%5Finner%7Bheight%3A22px%7D%2Eel%2Dinput%2Dgroup%7Bline%2Dheight%3Anormal%3Bdisplay%3Ainline%2Dtable%3Bwidth%3A100%25%3Bborder%2Dcollapse%3Aseparate%7D%2Eel%2Dinput%2Dgroup%3E%2Eel%2Dinput%5F%5Finner%7Bvertical%2Dalign%3Amiddle%3Bdisplay%3Atable%2Dcell%7D%2Eel%2Dinput%2Dgroup%5F%5Fappend%2C%2Eel%2Dinput%2Dgroup%5F%5Fprepend%7Bbackground%2Dcolor%3A%23fbfdff%3Bcolor%3A%2397a8be%3Bvertical%2Dalign%3Amiddle%3Bdisplay%3Atable%2Dcell%3Bposition%3Arelative%3Bborder%3A1px%20solid%20%23bfcbd9%3Bborder%2Dradius%3A4px%3Bpadding%3A0%2010px%3Bwidth%3A1%25%3Bwhite%2Dspace%3Anowrap%7D%2Eel%2Dinput%2Dgroup%2D%2Dprepend%20%2Eel%2Dinput%5F%5Finner%2C%2Eel%2Dinput%2Dgroup%5F%5Fappend%7Bborder%2Dtop%2Dleft%2Dradius%3A0%3Bborder%2Dbottom%2Dleft%2Dradius%3A0%7D%2Eel%2Dinput%2Dgroup%2D%2Dappend%20%2Eel%2Dinput%5F%5Finner%2C%2Eel%2Dinput%2Dgroup%5F%5Fprepend%7Bborder%2Dtop%2Dright%2Dradius%3A0%3Bborder%2Dbottom%2Dright%2Dradius%3A0%7D%2Eel%2Dinput%2Dgroup%5F%5Fappend%20%2Eel%2Dbutton%2C%2Eel%2Dinput%2Dgroup%5F%5Fappend%20%2Eel%2Dselect%2C%2Eel%2Dinput%2Dgroup%5F%5Fprepend%20%2Eel%2Dbutton%2C%2Eel%2Dinput%2Dgroup%5F%5Fprepend%20%2Eel%2Dselect%7Bdisplay%3Ablock%3Bmargin%3A%2D10px%7D%2Eel%2Dinput%2Dgroup%5F%5Fappend%20%2Eel%2Dbutton%2C%2Eel%2Dinput%2Dgroup%5F%5Fappend%20%2Eel%2Dselect%20%2Eel%2Dinput%5F%5Finner%2C%2Eel%2Dinput%2Dgroup%5F%5Fappend%20%2Eel%2Dselect%3Ahover%20%2Eel%2Dinput%5F%5Finner%2C%2Eel%2Dinput%2Dgroup%5F%5Fprepend%20%2Eel%2Dbutton%2C%2Eel%2Dinput%2Dgroup%5F%5Fprepend%20%2Eel%2Dselect%20%2Eel%2Dinput%5F%5Finner%2C%2Eel%2Dinput%2Dgroup%5F%5Fprepend%20%2Eel%2Dselect%3Ahover%20%2Eel%2Dinput%5F%5Finner%7Bborder%2Dcolor%3Atransparent%3Bbackground%2Dcolor%3Atransparent%3Bcolor%3Ainherit%3Bborder%2Dtop%3A0%3Bborder%2Dbottom%3A0%7D%2Eel%2Dinput%2Dgroup%5F%5Fappend%20%2Eel%2Dbutton%2C%2Eel%2Dinput%2Dgroup%5F%5Fappend%20%2Eel%2Dinput%2C%2Eel%2Dinput%2Dgroup%5F%5Fprepend%20%2Eel%2Dbutton%2C%2Eel%2Dinput%2Dgroup%5F%5Fprepend%20%2Eel%2Dinput%7Bfont%2Dsize%3Ainherit%7D%2Eel%2Dinput%2Dgroup%5F%5Fprepend%7Bborder%2Dright%3A0%7D%2Eel%2Dinput%2Dgroup%5F%5Fappend%7Bborder%2Dleft%3A0%7D%2Eel%2Dtextarea%7Bdisplay%3Ainline%2Dblock%3Bwidth%3A100%25%3Bvertical%2Dalign%3Abottom%7D%2Eel%2Dtextarea%2Eis%2Ddisabled%20%2Eel%2Dtextarea%5F%5Finner%7Bbackground%2Dcolor%3A%23eef1f6%3Bborder%2Dcolor%3A%23d1dbe5%3Bcolor%3A%23bbb%3Bcursor%3Anot%2Dallowed%7D%2Eel%2Dcascader%2Dmenu%2C%2Eel%2Dtextarea%5F%5Finner%7Bbackground%2Dcolor%3A%23fff%3Bbox%2Dsizing%3Aborder%2Dbox%7D%2Eel%2Dtextarea%2Eis%2Ddisabled%20%2Eel%2Dtextarea%5F%5Finner%3A%3A%2Dwebkit%2Dinput%2Dplaceholder%7Bcolor%3A%23bfcbd9%7D%2Eel%2Dtextarea%2Eis%2Ddisabled%20%2Eel%2Dtextarea%5F%5Finner%3A%3A%2Dmoz%2Dplaceholder%7Bcolor%3A%23bfcbd9%7D%2Eel%2Dtextarea%2Eis%2Ddisabled%20%2Eel%2Dtextarea%5F%5Finner%3A%2Dms%2Dinput%2Dplaceholder%7Bcolor%3A%23bfcbd9%7D%2Eel%2Dtextarea%2Eis%2Ddisabled%20%2Eel%2Dtextarea%5F%5Finner%3A%3Aplaceholder%7Bcolor%3A%23bfcbd9%7D%2Eel%2Dtextarea%5F%5Finner%7Bdisplay%3Ablock%3Bresize%3Avertical%3Bpadding%3A5px%207px%3Bline%2Dheight%3A1%2E5%3Bwidth%3A100%25%3Bfont%2Dsize%3A14px%3Bcolor%3A%231f2d3d%3Bbackground%2Dimage%3Anone%3Bborder%3A1px%20solid%20%23bfcbd9%3Bborder%2Dradius%3A4px%3Btransition%3Aborder%2Dcolor%20%2E2s%20cubic%2Dbezier%28%2E645%2C%2E045%2C%2E355%2C1%29%7D%2Eel%2Dtextarea%5F%5Finner%3A%3A%2Dwebkit%2Dinput%2Dplaceholder%7Bcolor%3A%2397a8be%7D%2Eel%2Dtextarea%5F%5Finner%3A%3A%2Dmoz%2Dplaceholder%7Bcolor%3A%2397a8be%7D%2Eel%2Dtextarea%5F%5Finner%3A%2Dms%2Dinput%2Dplaceholder%7Bcolor%3A%2397a8be%7D%2Eel%2Dtextarea%5F%5Finner%3A%3Aplaceholder%7Bcolor%3A%2397a8be%7D%2Eel%2Dtextarea%5F%5Finner%3Ahover%7Bborder%2Dcolor%3A%238391a5%7D%2Eel%2Dtextarea%5F%5Finner%3Afocus%7Boutline%3A0%3Bborder%2Dcolor%3A%2320a0ff%7D%2Eel%2Dcascader%7Bdisplay%3Ainline%2Dblock%3Bposition%3Arelative%7D%2Eel%2Dcascader%20%2Eel%2Dinput%2C%2Eel%2Dcascader%20%2Eel%2Dinput%5F%5Finner%7Bcursor%3Apointer%7D%2Eel%2Dcascader%20%2Eel%2Dinput%5F%5Ficon%7Btransition%3Anone%7D%2Eel%2Dcascader%20%2Eel%2Dicon%2Dcaret%2Dbottom%7Btransition%3Atransform%20%2E3s%7D%2Eel%2Dcascader%20%2Eel%2Dicon%2Dcaret%2Dbottom%2Eis%2Dreverse%7B%2Dms%2Dtransform%3Arotate%28180deg%29%3Btransform%3ArotateZ%28180deg%29%7D%2Eel%2Dcascader%2Eis%2Ddisabled%20%2Eel%2Dcascader%5F%5Flabel%7Bz%2Dindex%3A2%3Bcolor%3A%23bbb%7D%2Eel%2Dcascader%5F%5Flabel%7Bposition%3Aabsolute%3Bleft%3A0%3Btop%3A0%3Bheight%3A100%25%3Bline%2Dheight%3A34px%3Bpadding%3A0%2025px%200%2010px%3Bcolor%3A%231f2d3d%3Bwidth%3A100%25%3Bwhite%2Dspace%3Anowrap%3Btext%2Doverflow%3Aellipsis%3Boverflow%3Ahidden%3Bbox%2Dsizing%3Aborder%2Dbox%3Bcursor%3Apointer%3Bfont%2Dsize%3A14px%3Btext%2Dalign%3Aleft%7D%2Eel%2Dcascader%5F%5Flabel%20span%7Bcolor%3A%2397a8be%7D%2Eel%2Dcascader%2D%2Dlarge%7Bfont%2Dsize%3A16px%7D%2Eel%2Dcascader%2D%2Dlarge%20%2Eel%2Dcascader%5F%5Flabel%7Bline%2Dheight%3A40px%7D%2Eel%2Dcascader%2D%2Dsmall%7Bfont%2Dsize%3A13px%7D%2Eel%2Dcascader%2D%2Dsmall%20%2Eel%2Dcascader%5F%5Flabel%7Bline%2Dheight%3A28px%7D%2Eel%2Dcascader%2Dmenus%7Bwhite%2Dspace%3Anowrap%3Bbackground%3A%23fff%3Bposition%3Aabsolute%3Bmargin%3A5px%200%3Bborder%3A1px%20solid%20%23d1dbe5%3Bborder%2Dradius%3A2px%3Bbox%2Dshadow%3A0%202px%204px%20rgba%280%2C0%2C0%2C%2E12%29%2C0%200%206px%20rgba%280%2C0%2C0%2C%2E04%29%7D%2Eel%2Dcascader%2Dmenu%7Bdisplay%3Ainline%2Dblock%3Bvertical%2Dalign%3Atop%3Bheight%3A204px%3Boverflow%3Aauto%3Bborder%2Dright%3Asolid%201px%20%23d1dbe5%3Bmargin%3A0%3Bpadding%3A6px%200%3Bmin%2Dwidth%3A160px%7D%2Eel%2Dcascader%2Dmenu%3Alast%2Dchild%7Bborder%2Dright%3A0%7D%2Eel%2Dcascader%2Dmenu%5F%5Fitem%7Bfont%2Dsize%3A14px%3Bpadding%3A8px%2030px%208px%2010px%3Bposition%3Arelative%3Bwhite%2Dspace%3Anowrap%3Boverflow%3Ahidden%3Btext%2Doverflow%3Aellipsis%3Bcolor%3A%2348576a%3Bheight%3A36px%3Bline%2Dheight%3A1%2E5%3Bbox%2Dsizing%3Aborder%2Dbox%3Bcursor%3Apointer%7D%2Eel%2Dcascader%2Dmenu%5F%5Fitem%3Ahover%7Bbackground%2Dcolor%3A%23e4e8f1%7D%2Eel%2Dcascader%2Dmenu%5F%5Fitem%2Eselected%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%2320a0ff%7D%2Eel%2Dcascader%2Dmenu%5F%5Fitem%2Eselected%2Ehover%7Bbackground%2Dcolor%3A%231c8de0%7D%2Eel%2Dcascader%2Dmenu%5F%5Fitem%2Eis%2Dactive%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%2320a0ff%7D%2Eel%2Dcascader%2Dmenu%5F%5Fitem%2Eis%2Dactive%3Ahover%7Bbackground%2Dcolor%3A%231c8de0%7D%2Eel%2Dcascader%2Dmenu%5F%5Fitem%2Eis%2Ddisabled%7Bcolor%3A%23bfcbd9%3Bbackground%2Dcolor%3A%23fff%3Bcursor%3Anot%2Dallowed%7D%2Eel%2Dcascader%2Dmenu%5F%5Fitem%2Eis%2Ddisabled%3Ahover%7Bbackground%2Dcolor%3A%23fff%7D%2Eel%2Dcascader%2Dmenu%5F%5Fitem%5F%5Fkeyword%7Bfont%2Dweight%3A700%7D%2Eel%2Dcascader%2Dmenu%5F%5Fitem%2D%2Dextensible%3Aafter%7Bfont%2Dfamily%3Aelement%2Dicons%3Bcontent%3A%22%5Ce606%22%3Bfont%2Dsize%3A12px%3B%2Dms%2Dtransform%3Ascale%28%2E8%29%3Btransform%3Ascale%28%2E8%29%3Bcolor%3A%23bfcbd9%3Bposition%3Aabsolute%3Bright%3A10px%3Bmargin%2Dtop%3A1px%7D%2Eel%2Dcascader%2Dmenu%2D%2Dflexible%7Bheight%3Aauto%3Bmax%2Dheight%3A180px%3Boverflow%3Aauto%7D%2Eel%2Dcascader%2Dmenu%2D%2Dflexible%20%2Eel%2Dcascader%2Dmenu%5F%5Fitem%7Boverflow%3Avisible%7D%2Eel%2Dcolor%2Dhue%2Dslider%7Bposition%3Arelative%3Bbox%2Dsizing%3Aborder%2Dbox%3Bwidth%3A280px%3Bheight%3A12px%3Bbackground%2Dcolor%3Ared%3Bpadding%3A0%202px%7D%2Eel%2Dcolor%2Dhue%2Dslider%2Eis%2Dvertical%7Bwidth%3A12px%3Bheight%3A180px%3Bpadding%3A2px%200%7D%2Eel%2Dcolor%2Dhue%2Dslider%2Eis%2Dvertical%20%2Eel%2Dcolor%2Dhue%2Dslider%5F%5Fbar%7Bbackground%3Alinear%2Dgradient%28to%20bottom%2Cred%200%2C%23ff0%2017%25%2C%230f0%2033%25%2C%230ff%2050%25%2C%2300f%2067%25%2C%23f0f%2083%25%2Cred%20100%25%29%7D%2Eel%2Dcolor%2Dhue%2Dslider%2Eis%2Dvertical%20%2Eel%2Dcolor%2Dhue%2Dslider%5F%5Fthumb%7Bleft%3A0%3Btop%3A0%3Bwidth%3A100%25%3Bheight%3A4px%7D%2Eel%2Dcolor%2Dhue%2Dslider%5F%5Fbar%7Bposition%3Arelative%3Bbackground%3Alinear%2Dgradient%28to%20right%2Cred%200%2C%23ff0%2017%25%2C%230f0%2033%25%2C%230ff%2050%25%2C%2300f%2067%25%2C%23f0f%2083%25%2Cred%20100%25%29%3Bheight%3A100%25%7D%2Eel%2Dcolor%2Dhue%2Dslider%5F%5Fthumb%7Bposition%3Aabsolute%3Bcursor%3Apointer%3Bbox%2Dsizing%3Aborder%2Dbox%3Bleft%3A0%3Btop%3A0%3Bwidth%3A4px%3Bheight%3A100%25%3Bborder%2Dradius%3A1px%3Bbackground%3A%23fff%3Bborder%3A1px%20solid%20%23f0f0f0%3Bbox%2Dshadow%3A0%200%202px%20rgba%280%2C0%2C0%2C%2E6%29%3Bz%2Dindex%3A1%7D%2Eel%2Dcolor%2Dsvpanel%7Bposition%3Arelative%3Bwidth%3A280px%3Bheight%3A180px%7D%2Eel%2Dcolor%2Dsvpanel%5F%5Fblack%2C%2Eel%2Dcolor%2Dsvpanel%5F%5Fwhite%7Bposition%3Aabsolute%3Btop%3A0%3Bleft%3A0%3Bright%3A0%3Bbottom%3A0%7D%2Eel%2Dcolor%2Dsvpanel%5F%5Fwhite%7Bbackground%3Alinear%2Dgradient%28to%20right%2C%23fff%2Crgba%28255%2C255%2C255%2C0%29%29%7D%2Eel%2Dcolor%2Dsvpanel%5F%5Fblack%7Bbackground%3Alinear%2Dgradient%28to%20top%2C%23000%2Crgba%280%2C0%2C0%2C0%29%29%7D%2Eel%2Dcolor%2Dsvpanel%5F%5Fcursor%7Bposition%3Aabsolute%7D%2Eel%2Dcolor%2Dsvpanel%5F%5Fcursor%3Ediv%7Bcursor%3Ahead%3Bwidth%3A4px%3Bheight%3A4px%3Bbox%2Dshadow%3A0%200%200%201%2E5px%20%23fff%2Cinset%200%200%201px%201px%20rgba%280%2C0%2C0%2C%2E3%29%2C0%200%201px%202px%20rgba%280%2C0%2C0%2C%2E4%29%3Bborder%2Dradius%3A50%25%3B%2Dms%2Dtransform%3Atranslate%28%2D2px%2C%2D2px%29%3Btransform%3Atranslate%28%2D2px%2C%2D2px%29%7D%2Eel%2Dcolor%2Dalpha%2Dslider%7Bposition%3Arelative%3Bbox%2Dsizing%3Aborder%2Dbox%3Bwidth%3A280px%3Bheight%3A12px%3Bbackground%3Aurl%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH%2BYwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg%3D%3D%29%7D%2Eel%2Dcolor%2Dalpha%2Dslider%2Eis%2Dvertical%7Bwidth%3A20px%3Bheight%3A180px%7D%2Eel%2Dcolor%2Dalpha%2Dslider%2Eis%2Dvertical%20%2Eel%2Dcolor%2Dalpha%2Dslider%5F%5Fbar%7Bbackground%3Alinear%2Dgradient%28to%20bottom%2Crgba%28255%2C255%2C255%2C0%29%200%2Crgba%28255%2C255%2C255%2C1%29%20100%25%29%7D%2Eel%2Dcolor%2Dalpha%2Dslider%2Eis%2Dvertical%20%2Eel%2Dcolor%2Dalpha%2Dslider%5F%5Fthumb%7Bleft%3A0%3Btop%3A0%3Bwidth%3A100%25%3Bheight%3A4px%7D%2Eel%2Dcolor%2Dalpha%2Dslider%5F%5Fbar%7Bposition%3Arelative%3Bbackground%3Alinear%2Dgradient%28to%20right%2Crgba%28255%2C255%2C255%2C0%29%200%2Crgba%28255%2C255%2C255%2C1%29%20100%25%29%3Bheight%3A100%25%7D%2Eel%2Dcolor%2Dalpha%2Dslider%5F%5Fthumb%7Bposition%3Aabsolute%3Bcursor%3Apointer%3Bbox%2Dsizing%3Aborder%2Dbox%3Bleft%3A0%3Btop%3A0%3Bwidth%3A4px%3Bheight%3A100%25%3Bborder%2Dradius%3A1px%3Bbackground%3A%23fff%3Bborder%3A1px%20solid%20%23f0f0f0%3Bbox%2Dshadow%3A0%200%202px%20rgba%280%2C0%2C0%2C%2E6%29%3Bz%2Dindex%3A1%7D%2Eel%2Dcolor%2Ddropdown%7Bwidth%3A300px%7D%2Eel%2Dcolor%2Ddropdown%5F%5Fmain%2Dwrapper%7Bmargin%2Dbottom%3A6px%7D%2Eel%2Dcolor%2Ddropdown%5F%5Fmain%2Dwrapper%3A%3Aafter%7Bcontent%3A%22%22%3Bdisplay%3Atable%3Bclear%3Aboth%7D%2Eel%2Dcolor%2Ddropdown%5F%5Fbtns%7Bmargin%2Dtop%3A6px%3Btext%2Dalign%3Aright%7D%2Eel%2Dcolor%2Ddropdown%5F%5Fvalue%7Bfloat%3Aleft%3Bline%2Dheight%3A26px%3Bfont%2Dsize%3A12px%3Bcolor%3A%231f2d3d%7D%2Eel%2Dcolor%2Ddropdown%5F%5Fbtn%7Bborder%3A1px%20solid%20%23dcdcdc%3Bcolor%3A%23333%3Bline%2Dheight%3A24px%3Bborder%2Dradius%3A2px%3Bpadding%3A0%2020px%3Bcursor%3Apointer%3Bbackground%2Dcolor%3Atransparent%3Boutline%3A0%3Bfont%2Dsize%3A12px%7D%2Eel%2Dcolor%2Ddropdown%5F%5Fbtn%5Bdisabled%5D%7Bcolor%3A%23ccc%3Bcursor%3Anot%2Dallowed%7D%2Eel%2Dcolor%2Ddropdown%5F%5Fbtn%3Ahover%7Bcolor%3A%2320a0ff%3Bborder%2Dcolor%3A%2320a0ff%7D%2Eel%2Dcolor%2Ddropdown%5F%5Flink%2Dbtn%7Bcursor%3Apointer%3Bcolor%3A%2320a0ff%3Btext%2Ddecoration%3Anone%3Bpadding%3A15px%3Bfont%2Dsize%3A12px%7D%2Eel%2Dcolor%2Ddropdown%5F%5Flink%2Dbtn%3Ahover%7Bcolor%3A%234db3ff%7D%2Eel%2Dcolor%2Dpicker%7Bdisplay%3Ainline%2Dblock%3Bposition%3Arelative%3Bline%2Dheight%3Anormal%7D%2Eel%2Dcolor%2Dpicker%5F%5Ftrigger%7Bdisplay%3Ainline%2Dblock%3Bbox%2Dsizing%3Aborder%2Dbox%3Bheight%3A36px%3Bpadding%3A6px%3Bborder%3A1px%20solid%20%23bfcbd9%3Bborder%2Dradius%3A4px%3Bfont%2Dsize%3A0%7D%2Eel%2Dcolor%2Dpicker%5F%5Fcolor%7Bposition%3Arelative%3Bdisplay%3Ainline%2Dblock%3Bbox%2Dsizing%3Aborder%2Dbox%3Bborder%3A1px%20solid%20%23666%3Bwidth%3A22px%3Bheight%3A22px%3Btext%2Dalign%3Acenter%7D%2Eel%2Dcolor%2Dpicker%5F%5Fcolor%2Eis%2Dalpha%7Bbackground%2Dimage%3Aurl%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH%2BYwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg%3D%3D%29%7D%2Eel%2Dcolor%2Dpicker%5F%5Fcolor%2Dinner%7Bposition%3Aabsolute%3Bleft%3A0%3Btop%3A0%3Bright%3A0%3Bbottom%3A0%7D%2Eel%2Dcolor%2Dpicker%5F%5Fempty%7Bfont%2Dsize%3A12px%3Bvertical%2Dalign%3Amiddle%3Bcolor%3A%23666%3Bposition%3Aabsolute%3Btop%3A4px%3Bleft%3A4px%7D%2Eel%2Dcolor%2Dpicker%5F%5Ficon%7Bdisplay%3Ainline%2Dblock%3Bposition%3Arelative%3Btop%3A%2D6px%3Bmargin%2Dleft%3A8px%3Bwidth%3A12px%3Bcolor%3A%23888%3Bfont%2Dsize%3A12px%7D%2Eel%2Dcolor%2Dpicker%5F%5Fpanel%7Bposition%3Aabsolute%3Bz%2Dindex%3A10%3Bpadding%3A6px%3Bbackground%2Dcolor%3A%23fff%3Bborder%3A1px%20solid%20%23d1dbe5%3Bbox%2Dshadow%3A0%202px%204px%20rgba%280%2C0%2C0%2C%2E12%29%2C0%200%206px%20rgba%280%2C0%2C0%2C%2E12%29%7D" rel="stylesheet" />
<script src="data:application/javascript;base64,IWZ1bmN0aW9uKGUsdCl7Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz10KHJlcXVpcmUoInZ1ZSIpKToiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZSgiRUxFTUVOVCIsWyJ2dWUiXSx0KToib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHM/ZXhwb3J0cy5FTEVNRU5UPXQocmVxdWlyZSgidnVlIikpOmUuRUxFTUVOVD10KGUuVnVlKX0odGhpcyxmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuKXtpZihpW25dKXJldHVybiBpW25dLmV4cG9ydHM7dmFyIHM9aVtuXT17ZXhwb3J0czp7fSxpZDpuLGxvYWRlZDohMX07cmV0dXJuIGVbbl0uY2FsbChzLmV4cG9ydHMscyxzLmV4cG9ydHMsdCkscy5sb2FkZWQ9ITAscy5leHBvcnRzfXZhciBpPXt9O3JldHVybiB0Lm09ZSx0LmM9aSx0LnA9Ii9kaXN0LyIsdCgwKX0oW2Z1bmN0aW9uKGUsdCxpKXtlLmV4cG9ydHM9aSgxKX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX12YXIgcz1pKDIpLG89bihzKSxhPWkoNTEpLHI9bihhKSxsPWkoNTUpLHU9bihsKSxjPWkoNjIpLGQ9bihjKSxoPWkoNzMpLGY9bihoKSxwPWkoNzcpLG09bihwKSx2PWkoODEpLGc9bih2KSx5PWkoODUpLGI9bih5KSxfPWkoOTEpLEM9bihfKSx4PWkoOTUpLHc9bih4KSxNPWkoMTkpLGs9bihNKSxEPWkoOTkpLFM9bihEKSxJPWkoMTAzKSxOPW4oSSksVD1pKDEwNyksRT1uKFQpLCQ9aSgxMTEpLE89bigkKSxBPWkoMTE1KSxQPW4oQSksTD1pKDExOSksaj1uKEwpLHo9aSgxMjMpLEY9bih6KSxWPWkoOCksUj1uKFYpLEI9aSg1MCksVz1uKEIpLEg9aSgxMjcpLFk9bihIKSxVPWkoNjUpLHE9bihVKSxHPWkoNjkpLFo9bihHKSxRPWkoMTMxKSxLPW4oUSksSj1pKDE0NyksWD1uKEopLGVlPWkoMTQ5KSx0ZT1uKGVlKSxpZT1pKDE3NyksbmU9bihpZSksc2U9aSgxODIpLG9lPW4oc2UpLGFlPWkoMTg3KSxyZT1uKGFlKSxsZT1pKDEzOCksdWU9bihsZSksY2U9aSgxOTIpLGRlPW4oY2UpLGhlPWkoMTk3KSxmZT1uKGhlKSxwZT1pKDIwMSksbWU9bihwZSksdmU9aSgyMDUpLGdlPW4odmUpLHllPWkoMjA5KSxiZT1uKHllKSxfZT1pKDIzOCksQ2U9bihfZSkseGU9aSgyNDYpLHdlPW4oeGUpLE1lPWkoMzcpLGtlPW4oTWUpLERlPWkoMjUwKSxTZT1uKERlKSxJZT1pKDI2MCksTmU9bihJZSksVGU9aSgyNjQpLEVlPW4oVGUpLCRlPWkoMjY5KSxPZT1uKCRlKSxBZT1pKDI3NiksUGU9bihBZSksTGU9aSgyODIpLGplPW4oTGUpLHplPWkoMjg2KSxGZT1uKHplKSxWZT1pKDI5MCksUmU9bihWZSksQmU9aSgyOTIpLFdlPW4oQmUpLEhlPWkoMjk3KSxZZT1uKEhlKSxVZT1pKDMxMSkscWU9bihVZSksR2U9aSgzMTUpLFplPW4oR2UpLFFlPWkoMzI1KSxLZT1uKFFlKSxKZT1pKDMyOSksWGU9bihKZSksZXQ9aSgzMzMpLHR0PW4oZXQpLGl0PWkoMzM3KSxudD1uKGl0KSxzdD1pKDM0MSksb3Q9bihzdCksYXQ9aSgzNDUpLHJ0PW4oYXQpLGx0PWkoNDEpLHV0PW4obHQpLGN0PWkoMzQ5KSxkdD1uKGN0KSxodD1pKDM1MyksZnQ9bihodCkscHQ9aSgzNTcpLG10PW4ocHQpLHZ0PWkoMzYxKSxndD1uKHZ0KSx5dD1pKDM2OCksYnQ9bih5dCksX3Q9aSgxMyksQ3Q9bihfdCkseHQ9W28uZGVmYXVsdCxyLmRlZmF1bHQsdS5kZWZhdWx0LGQuZGVmYXVsdCxmLmRlZmF1bHQsbS5kZWZhdWx0LGcuZGVmYXVsdCxiLmRlZmF1bHQsQy5kZWZhdWx0LHcuZGVmYXVsdCxrLmRlZmF1bHQsUy5kZWZhdWx0LE4uZGVmYXVsdCxFLmRlZmF1bHQsTy5kZWZhdWx0LFAuZGVmYXVsdCxqLmRlZmF1bHQsRi5kZWZhdWx0LFIuZGVmYXVsdCxXLmRlZmF1bHQsWS5kZWZhdWx0LHEuZGVmYXVsdCxaLmRlZmF1bHQsSy5kZWZhdWx0LFguZGVmYXVsdCx0ZS5kZWZhdWx0LG5lLmRlZmF1bHQsb2UuZGVmYXVsdCxyZS5kZWZhdWx0LHVlLmRlZmF1bHQsZmUuZGVmYXVsdCxtZS5kZWZhdWx0LGdlLmRlZmF1bHQsYmUuZGVmYXVsdCxDZS5kZWZhdWx0LHdlLmRlZmF1bHQsa2UuZGVmYXVsdCxTZS5kZWZhdWx0LE5lLmRlZmF1bHQsT2UuZGVmYXVsdCxqZS5kZWZhdWx0LEZlLmRlZmF1bHQsUmUuZGVmYXVsdCxXZS5kZWZhdWx0LFllLmRlZmF1bHQscWUuZGVmYXVsdCxLZS5kZWZhdWx0LFhlLmRlZmF1bHQsdHQuZGVmYXVsdCxudC5kZWZhdWx0LG90LmRlZmF1bHQscnQuZGVmYXVsdCx1dC5kZWZhdWx0LGR0LmRlZmF1bHQsZnQuZGVmYXVsdCxtdC5kZWZhdWx0LGd0LmRlZmF1bHQsYnQuZGVmYXVsdF0sd3Q9ZnVuY3Rpb24gZSh0KXt2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307ZS5pbnN0YWxsZWR8fChDdC5kZWZhdWx0LnVzZShpLmxvY2FsZSksQ3QuZGVmYXVsdC5pMThuKGkuaTE4bikseHQubWFwKGZ1bmN0aW9uKGUpe3QuY29tcG9uZW50KGUubmFtZSxlKX0pLHQudXNlKFBlLmRlZmF1bHQuZGlyZWN0aXZlKSx0LnByb3RvdHlwZS4kbG9hZGluZz1QZS5kZWZhdWx0LnNlcnZpY2UsdC5wcm90b3R5cGUuJG1zZ2JveD1kZS5kZWZhdWx0LHQucHJvdG90eXBlLiRhbGVydD1kZS5kZWZhdWx0LmFsZXJ0LHQucHJvdG90eXBlLiRjb25maXJtPWRlLmRlZmF1bHQuY29uZmlybSx0LnByb3RvdHlwZS4kcHJvbXB0PWRlLmRlZmF1bHQucHJvbXB0LHQucHJvdG90eXBlLiRub3RpZnk9RWUuZGVmYXVsdCx0LnByb3RvdHlwZS4kbWVzc2FnZT1aZS5kZWZhdWx0KX07InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdy5WdWUmJnd0KHdpbmRvdy5WdWUpLGUuZXhwb3J0cz17dmVyc2lvbjoiMS4yLjkiLGxvY2FsZTpDdC5kZWZhdWx0LnVzZSxpMThuOkN0LmRlZmF1bHQuaTE4bixpbnN0YWxsOnd0LExvYWRpbmc6UGUuZGVmYXVsdCxQYWdpbmF0aW9uOm8uZGVmYXVsdCxEaWFsb2c6ci5kZWZhdWx0LEF1dG9jb21wbGV0ZTp1LmRlZmF1bHQsRHJvcGRvd246ZC5kZWZhdWx0LERyb3Bkb3duTWVudTpmLmRlZmF1bHQsRHJvcGRvd25JdGVtOm0uZGVmYXVsdCxNZW51OmcuZGVmYXVsdCxTdWJtZW51OmIuZGVmYXVsdCxNZW51SXRlbTpDLmRlZmF1bHQsTWVudUl0ZW1Hcm91cDp3LmRlZmF1bHQsSW5wdXQ6ay5kZWZhdWx0LElucHV0TnVtYmVyOlMuZGVmYXVsdCxSYWRpbzpOLmRlZmF1bHQsUmFkaW9Hcm91cDpFLmRlZmF1bHQsUmFkaW9CdXR0b246Ty5kZWZhdWx0LENoZWNrYm94OlAuZGVmYXVsdCxDaGVja2JveEdyb3VwOmouZGVmYXVsdCxTd2l0Y2g6Ri5kZWZhdWx0LFNlbGVjdDpSLmRlZmF1bHQsT3B0aW9uOlcuZGVmYXVsdCxPcHRpb25Hcm91cDpZLmRlZmF1bHQsQnV0dG9uOnEuZGVmYXVsdCxCdXR0b25Hcm91cDpaLmRlZmF1bHQsVGFibGU6Sy5kZWZhdWx0LFRhYmxlQ29sdW1uOlguZGVmYXVsdCxEYXRlUGlja2VyOnRlLmRlZmF1bHQsVGltZVNlbGVjdDpuZS5kZWZhdWx0LFRpbWVQaWNrZXI6b2UuZGVmYXVsdCxQb3BvdmVyOnJlLmRlZmF1bHQsVG9vbHRpcDp1ZS5kZWZhdWx0LE1lc3NhZ2VCb3g6ZGUuZGVmYXVsdCxCcmVhZGNydW1iOmZlLmRlZmF1bHQsQnJlYWRjcnVtYkl0ZW06bWUuZGVmYXVsdCxGb3JtOmdlLmRlZmF1bHQsRm9ybUl0ZW06YmUuZGVmYXVsdCxUYWJzOkNlLmRlZmF1bHQsVGFiUGFuZTp3ZS5kZWZhdWx0LFRhZzprZS5kZWZhdWx0LFRyZWU6U2UuZGVmYXVsdCxBbGVydDpOZS5kZWZhdWx0LE5vdGlmaWNhdGlvbjpFZS5kZWZhdWx0LFNsaWRlcjpPZS5kZWZhdWx0LEljb246amUuZGVmYXVsdCxSb3c6RmUuZGVmYXVsdCxDb2w6UmUuZGVmYXVsdCxVcGxvYWQ6V2UuZGVmYXVsdCxQcm9ncmVzczpZZS5kZWZhdWx0LFNwaW5uZXI6cWUuZGVmYXVsdCxNZXNzYWdlOlplLmRlZmF1bHQsQmFkZ2U6S2UuZGVmYXVsdCxDYXJkOlhlLmRlZmF1bHQsUmF0ZTp0dC5kZWZhdWx0LFN0ZXBzOm50LmRlZmF1bHQsU3RlcDpvdC5kZWZhdWx0LENhcm91c2VsOnJ0LmRlZmF1bHQsU2Nyb2xsYmFyOnV0LmRlZmF1bHQsQ2Fyb3VzZWxJdGVtOmR0LmRlZmF1bHQsQ29sbGFwc2U6ZnQuZGVmYXVsdCxDb2xsYXBzZUl0ZW06bXQuZGVmYXVsdCxDYXNjYWRlcjpndC5kZWZhdWx0LENvbG9yUGlja2VyOmJ0LmRlZmF1bHR9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXQuX19lc01vZHVsZT0hMDt2YXIgcz1pKDMpLG89bihzKTtvLmRlZmF1bHQuaW5zdGFsbD1mdW5jdGlvbihlKXtlLmNvbXBvbmVudChvLmRlZmF1bHQubmFtZSxvLmRlZmF1bHQpfSx0LmRlZmF1bHQ9by5kZWZhdWx0fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXQuX19lc01vZHVsZT0hMDt2YXIgcz1pKDQpLG89bihzKSxhPWkoOCkscj1uKGEpLGw9aSg1MCksdT1uKGwpLGM9aSgxMiksZD1uKGMpO3QuZGVmYXVsdD17bmFtZToiRWxQYWdpbmF0aW9uIixwcm9wczp7cGFnZVNpemU6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MTB9LHNtYWxsOkJvb2xlYW4sdG90YWw6TnVtYmVyLHBhZ2VDb3VudDpOdW1iZXIsY3VycmVudFBhZ2U6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MX0sbGF5b3V0OntkZWZhdWx0OiJwcmV2LCBwYWdlciwgbmV4dCwganVtcGVyLCAtPiwgdG90YWwifSxwYWdlU2l6ZXM6e3R5cGU6QXJyYXksZGVmYXVsdDpmdW5jdGlvbigpe3JldHVyblsxMCwyMCwzMCw0MCw1MCwxMDBdfX19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57aW50ZXJuYWxDdXJyZW50UGFnZToxLGludGVybmFsUGFnZVNpemU6MH19LHJlbmRlcjpmdW5jdGlvbihlKXt2YXIgdD1lKCJkaXYiLHtjbGFzczoiZWwtcGFnaW5hdGlvbiJ9LFtdKSxpPXRoaXMubGF5b3V0fHwiIjtpZihpKXt2YXIgbj17cHJldjplKCJwcmV2IixudWxsLFtdKSxqdW1wZXI6ZSgianVtcGVyIixudWxsLFtdKSxwYWdlcjplKCJwYWdlciIse2F0dHJzOntjdXJyZW50UGFnZTp0aGlzLmludGVybmFsQ3VycmVudFBhZ2UscGFnZUNvdW50OnRoaXMuaW50ZXJuYWxQYWdlQ291bnR9LG9uOntjaGFuZ2U6dGhpcy5oYW5kbGVDdXJyZW50Q2hhbmdlfX0sW10pLG5leHQ6ZSgibmV4dCIsbnVsbCxbXSksc2l6ZXM6ZSgic2l6ZXMiLHthdHRyczp7cGFnZVNpemVzOnRoaXMucGFnZVNpemVzfX0sW10pLHNsb3Q6ZSgibXktc2xvdCIsbnVsbCxbXSksdG90YWw6ZSgidG90YWwiLG51bGwsW10pfSxzPWkuc3BsaXQoIiwiKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbSgpfSksbz1lKCJkaXYiLHtjbGFzczoiZWwtcGFnaW5hdGlvbl9fcmlnaHR3cmFwcGVyIn0sW10pLGE9ITE7cmV0dXJuIHRoaXMuc21hbGwmJih0LmRhdGEuY2xhc3MrPSIgZWwtcGFnaW5hdGlvbi0tc21hbGwiKSxzLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIi0+Ij09PWU/dm9pZChhPSEwKTp2b2lkKGE/by5jaGlsZHJlbi5wdXNoKG5bZV0pOnQuY2hpbGRyZW4ucHVzaChuW2VdKSl9KSxhJiZ0LmNoaWxkcmVuLnB1c2gobyksdH19LGNvbXBvbmVudHM6e015U2xvdDp7cmVuZGVyOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLiRwYXJlbnQuJHNsb3RzLmRlZmF1bHQ/dGhpcy4kcGFyZW50LiRzbG90cy5kZWZhdWx0WzBdOiIifX0sUHJldjp7cmVuZGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlKCJidXR0b24iLHthdHRyczp7dHlwZToiYnV0dG9uIn0sY2xhc3M6WyJidG4tcHJldiIse2Rpc2FibGVkOnRoaXMuJHBhcmVudC5pbnRlcm5hbEN1cnJlbnRQYWdlPD0xfV0sb246e2NsaWNrOnRoaXMuJHBhcmVudC5wcmV2fX0sW2UoImkiLHtjbGFzczoiZWwtaWNvbiBlbC1pY29uLWFycm93LWxlZnQifSxbXSldKX19LE5leHQ6e3JlbmRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZSgiYnV0dG9uIix7YXR0cnM6e3R5cGU6ImJ1dHRvbiJ9LGNsYXNzOlsiYnRuLW5leHQiLHtkaXNhYmxlZDp0aGlzLiRwYXJlbnQuaW50ZXJuYWxDdXJyZW50UGFnZT09PXRoaXMuJHBhcmVudC5pbnRlcm5hbFBhZ2VDb3VudHx8MD09PXRoaXMuJHBhcmVudC5pbnRlcm5hbFBhZ2VDb3VudH1dLG9uOntjbGljazp0aGlzLiRwYXJlbnQubmV4dH19LFtlKCJpIix7Y2xhc3M6ImVsLWljb24gZWwtaWNvbi1hcnJvdy1yaWdodCJ9LFtdKV0pfX0sU2l6ZXM6e21peGluczpbZC5kZWZhdWx0XSxwcm9wczp7cGFnZVNpemVzOkFycmF5fSx3YXRjaDp7cGFnZVNpemVzOntpbW1lZGlhdGU6ITAsaGFuZGxlcjpmdW5jdGlvbihlKXtBcnJheS5pc0FycmF5KGUpJiYodGhpcy4kcGFyZW50LmludGVybmFsUGFnZVNpemU9ZS5pbmRleE9mKHRoaXMuJHBhcmVudC5wYWdlU2l6ZSk+LTE/dGhpcy4kcGFyZW50LnBhZ2VTaXplOnRoaXMucGFnZVNpemVzWzBdKX19fSxyZW5kZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztyZXR1cm4gZSgic3BhbiIse2NsYXNzOiJlbC1wYWdpbmF0aW9uX19zaXplcyJ9LFtlKCJlbC1zZWxlY3QiLHthdHRyczp7dmFsdWU6dGhpcy4kcGFyZW50LmludGVybmFsUGFnZVNpemV9LG9uOntpbnB1dDp0aGlzLmhhbmRsZUNoYW5nZX19LFt0aGlzLnBhZ2VTaXplcy5tYXAoZnVuY3Rpb24oaSl7cmV0dXJuIGUoImVsLW9wdGlvbiIse2F0dHJzOnt2YWx1ZTppLGxhYmVsOmkrIiAiK3QudCgiZWwucGFnaW5hdGlvbi5wYWdlc2l6ZSIpfX0sW10pfSldKV0pfSxjb21wb25lbnRzOntFbFNlbGVjdDpyLmRlZmF1bHQsRWxPcHRpb246dS5kZWZhdWx0fSxtZXRob2RzOntoYW5kbGVDaGFuZ2U6ZnVuY3Rpb24oZSl7ZSE9PXRoaXMuJHBhcmVudC5pbnRlcm5hbFBhZ2VTaXplJiYodGhpcy4kcGFyZW50LmludGVybmFsUGFnZVNpemU9ZT1wYXJzZUludChlLDEwKSx0aGlzLiRwYXJlbnQuJGVtaXQoInNpemUtY2hhbmdlIixlKSl9fX0sSnVtcGVyOnttaXhpbnM6W2QuZGVmYXVsdF0sZGF0YTpmdW5jdGlvbigpe3JldHVybntvbGRWYWx1ZTpudWxsfX0sbWV0aG9kczp7aGFuZGxlRm9jdXM6ZnVuY3Rpb24oZSl7dGhpcy5vbGRWYWx1ZT1lLnRhcmdldC52YWx1ZX0saGFuZGxlQ2hhbmdlOmZ1bmN0aW9uKGUpe3ZhciB0PWUudGFyZ2V0O3RoaXMuJHBhcmVudC5pbnRlcm5hbEN1cnJlbnRQYWdlPXRoaXMuJHBhcmVudC5nZXRWYWxpZEN1cnJlbnRQYWdlKHQudmFsdWUpLHRoaXMub2xkVmFsdWU9bnVsbH19LHJlbmRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZSgic3BhbiIse2NsYXNzOiJlbC1wYWdpbmF0aW9uX19qdW1wIn0sW3RoaXMudCgiZWwucGFnaW5hdGlvbi5nb3RvIiksZSgiaW5wdXQiLHtjbGFzczoiZWwtcGFnaW5hdGlvbl9fZWRpdG9yIixhdHRyczp7dHlwZToibnVtYmVyIixtaW46MSxtYXg6dGhpcy5pbnRlcm5hbFBhZ2VDb3VudCxudW1iZXI6ITB9LGRvbVByb3BzOnt2YWx1ZTp0aGlzLiRwYXJlbnQuaW50ZXJuYWxDdXJyZW50UGFnZX0sb246e2NoYW5nZTp0aGlzLmhhbmRsZUNoYW5nZSxmb2N1czp0aGlzLmhhbmRsZUZvY3VzfSxzdHlsZTp7d2lkdGg6IjMwcHgifX0sW10pLHRoaXMudCgiZWwucGFnaW5hdGlvbi5wYWdlQ2xhc3NpZmllciIpXSl9fSxUb3RhbDp7bWl4aW5zOltkLmRlZmF1bHRdLHJlbmRlcjpmdW5jdGlvbihlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHRoaXMuJHBhcmVudC50b3RhbD9lKCJzcGFuIix7Y2xhc3M6ImVsLXBhZ2luYXRpb25fX3RvdGFsIn0sW3RoaXMudCgiZWwucGFnaW5hdGlvbi50b3RhbCIse3RvdGFsOnRoaXMuJHBhcmVudC50b3RhbH0pXSk6IiJ9fSxQYWdlcjpvLmRlZmF1bHR9LG1ldGhvZHM6e2hhbmRsZUN1cnJlbnRDaGFuZ2U6ZnVuY3Rpb24oZSl7dGhpcy5pbnRlcm5hbEN1cnJlbnRQYWdlPXRoaXMuZ2V0VmFsaWRDdXJyZW50UGFnZShlKX0scHJldjpmdW5jdGlvbigpe3ZhciBlPXRoaXMuaW50ZXJuYWxDdXJyZW50UGFnZS0xO3RoaXMuaW50ZXJuYWxDdXJyZW50UGFnZT10aGlzLmdldFZhbGlkQ3VycmVudFBhZ2UoZSl9LG5leHQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmludGVybmFsQ3VycmVudFBhZ2UrMTt0aGlzLmludGVybmFsQ3VycmVudFBhZ2U9dGhpcy5nZXRWYWxpZEN1cnJlbnRQYWdlKGUpfSxnZXRWYWxpZEN1cnJlbnRQYWdlOmZ1bmN0aW9uKGUpe2U9cGFyc2VJbnQoZSwxMCk7dmFyIHQ9Im51bWJlciI9PXR5cGVvZiB0aGlzLmludGVybmFsUGFnZUNvdW50LGk9dm9pZCAwO3JldHVybiB0P2U8MT9pPTE6ZT50aGlzLmludGVybmFsUGFnZUNvdW50JiYoaT10aGlzLmludGVybmFsUGFnZUNvdW50KTooaXNOYU4oZSl8fGU8MSkmJihpPTEpLHZvaWQgMD09PWkmJmlzTmFOKGUpP2k9MTowPT09aSYmKGk9MSksdm9pZCAwPT09aT9lOml9fSxjb21wdXRlZDp7aW50ZXJuYWxQYWdlQ291bnQ6ZnVuY3Rpb24oKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHRoaXMudG90YWw/TWF0aC5jZWlsKHRoaXMudG90YWwvdGhpcy5pbnRlcm5hbFBhZ2VTaXplKToibnVtYmVyIj09dHlwZW9mIHRoaXMucGFnZUNvdW50P3RoaXMucGFnZUNvdW50Om51bGx9fSx3YXRjaDp7Y3VycmVudFBhZ2U6e2ltbWVkaWF0ZTohMCxoYW5kbGVyOmZ1bmN0aW9uKGUpe3RoaXMuaW50ZXJuYWxDdXJyZW50UGFnZT1lfX0scGFnZVNpemU6e2ltbWVkaWF0ZTohMCxoYW5kbGVyOmZ1bmN0aW9uKGUpe3RoaXMuaW50ZXJuYWxQYWdlU2l6ZT1lfX0saW50ZXJuYWxDdXJyZW50UGFnZTpmdW5jdGlvbihlLHQpe3ZhciBpPXRoaXM7ZT1wYXJzZUludChlLDEwKSxlPWlzTmFOKGUpP3R8fDE6dGhpcy5nZXRWYWxpZEN1cnJlbnRQYWdlKGUpLHZvaWQgMCE9PWU/dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtpLmludGVybmFsQ3VycmVudFBhZ2U9ZSx0IT09ZSYmaS4kZW1pdCgiY3VycmVudC1jaGFuZ2UiLGkuaW50ZXJuYWxDdXJyZW50UGFnZSl9KTp0aGlzLiRlbWl0KCJjdXJyZW50LWNoYW5nZSIsdGhpcy5pbnRlcm5hbEN1cnJlbnRQYWdlKX0saW50ZXJuYWxQYWdlQ291bnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5pbnRlcm5hbEN1cnJlbnRQYWdlO2U+MCYmMD09PXQ/dGhpcy5pbnRlcm5hbEN1cnJlbnRQYWdlPTE6dD5lJiYodGhpcy5pbnRlcm5hbEN1cnJlbnRQYWdlPTA9PT1lPzE6ZSl9fX19LGZ1bmN0aW9uKGUsdCxpKXt2YXIgbj1pKDUpKGkoNiksaSg3KSxudWxsLG51bGwpO2UuZXhwb3J0cz1uLmV4cG9ydHN9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxpLG4pe3ZhciBzLG89ZT1lfHx7fSxhPXR5cGVvZiBlLmRlZmF1bHQ7Im9iamVjdCIhPT1hJiYiZnVuY3Rpb24iIT09YXx8KHM9ZSxvPWUuZGVmYXVsdCk7dmFyIHI9ImZ1bmN0aW9uIj09dHlwZW9mIG8/by5vcHRpb25zOm87aWYodCYmKHIucmVuZGVyPXQucmVuZGVyLHIuc3RhdGljUmVuZGVyRm5zPXQuc3RhdGljUmVuZGVyRm5zKSxpJiYoci5fc2NvcGVJZD1pKSxuKXt2YXIgbD1yLmNvbXB1dGVkfHwoci5jb21wdXRlZD17fSk7T2JqZWN0LmtleXMobikuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1uW2VdO2xbZV09ZnVuY3Rpb24oKXtyZXR1cm4gdH19KX1yZXR1cm57ZXNNb2R1bGU6cyxleHBvcnRzOm8sb3B0aW9uczpyfX19LGZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO3QuX19lc01vZHVsZT0hMCx0LmRlZmF1bHQ9e25hbWU6IkVsUGFnZXIiLHByb3BzOntjdXJyZW50UGFnZTpOdW1iZXIscGFnZUNvdW50Ok51bWJlcn0sd2F0Y2g6e3Nob3dQcmV2TW9yZTpmdW5jdGlvbihlKXtlfHwodGhpcy5xdWlja3ByZXZJY29uQ2xhc3M9ImVsLWljb24tbW9yZSIpfSxzaG93TmV4dE1vcmU6ZnVuY3Rpb24oZSl7ZXx8KHRoaXMucXVpY2tuZXh0SWNvbkNsYXNzPSJlbC1pY29uLW1vcmUiKX19LG1ldGhvZHM6e29uUGFnZXJDbGljazpmdW5jdGlvbihlKXt2YXIgdD1lLnRhcmdldDtpZigiVUwiIT09dC50YWdOYW1lKXt2YXIgaT1OdW1iZXIoZS50YXJnZXQudGV4dENvbnRlbnQpLG49dGhpcy5wYWdlQ291bnQscz10aGlzLmN1cnJlbnRQYWdlO3QuY2xhc3NOYW1lLmluZGV4T2YoIm1vcmUiKSE9PS0xJiYodC5jbGFzc05hbWUuaW5kZXhPZigicXVpY2twcmV2IikhPT0tMT9pPXMtNTp0LmNsYXNzTmFtZS5pbmRleE9mKCJxdWlja25leHQiKSE9PS0xJiYoaT1zKzUpKSxpc05hTihpKXx8KGk8MSYmKGk9MSksaT5uJiYoaT1uKSksaSE9PXMmJnRoaXMuJGVtaXQoImNoYW5nZSIsaSl9fX0sY29tcHV0ZWQ6e3BhZ2VyczpmdW5jdGlvbigpe3ZhciBlPTcsdD1OdW1iZXIodGhpcy5jdXJyZW50UGFnZSksaT1OdW1iZXIodGhpcy5wYWdlQ291bnQpLG49ITEscz0hMTtpPmUmJih0PmUtMiYmKG49ITApLHQ8aS0yJiYocz0hMCkpO3ZhciBvPVtdO2lmKG4mJiFzKWZvcih2YXIgYT1pLShlLTIpLHI9YTtyPGk7cisrKW8ucHVzaChyKTtlbHNlIGlmKCFuJiZzKWZvcih2YXIgbD0yO2w8ZTtsKyspby5wdXNoKGwpO2Vsc2UgaWYobiYmcylmb3IodmFyIHU9TWF0aC5mbG9vcihlLzIpLTEsYz10LXU7Yzw9dCt1O2MrKylvLnB1c2goYyk7ZWxzZSBmb3IodmFyIGQ9MjtkPGk7ZCsrKW8ucHVzaChkKTtyZXR1cm4gdGhpcy5zaG93UHJldk1vcmU9bix0aGlzLnNob3dOZXh0TW9yZT1zLG99fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnQ6bnVsbCxzaG93UHJldk1vcmU6ITEsc2hvd05leHRNb3JlOiExLHF1aWNrbmV4dEljb25DbGFzczoiZWwtaWNvbi1tb3JlIixxdWlja3ByZXZJY29uQ2xhc3M6ImVsLWljb24tbW9yZSJ9fX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxpPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIGkoInVsIix7c3RhdGljQ2xhc3M6ImVsLXBhZ2VyIixvbjp7Y2xpY2s6ZS5vblBhZ2VyQ2xpY2t9fSxbZS5wYWdlQ291bnQ+MD9pKCJsaSIse3N0YXRpY0NsYXNzOiJudW1iZXIiLGNsYXNzOnthY3RpdmU6MT09PWUuY3VycmVudFBhZ2V9fSxbZS5fdigiMSIpXSk6ZS5fZSgpLGUuc2hvd1ByZXZNb3JlP2koImxpIix7c3RhdGljQ2xhc3M6ImVsLWljb24gbW9yZSBidG4tcXVpY2twcmV2IixjbGFzczpbZS5xdWlja3ByZXZJY29uQ2xhc3NdLG9uOnttb3VzZWVudGVyOmZ1bmN0aW9uKHQpe2UucXVpY2twcmV2SWNvbkNsYXNzPSJlbC1pY29uLWQtYXJyb3ctbGVmdCJ9LG1vdXNlbGVhdmU6ZnVuY3Rpb24odCl7ZS5xdWlja3ByZXZJY29uQ2xhc3M9ImVsLWljb24tbW9yZSJ9fX0pOmUuX2UoKSxlLl9sKGUucGFnZXJzLGZ1bmN0aW9uKHQpe3JldHVybiBpKCJsaSIse3N0YXRpY0NsYXNzOiJudW1iZXIiLGNsYXNzOnthY3RpdmU6ZS5jdXJyZW50UGFnZT09PXR9fSxbZS5fdihlLl9zKHQpKV0pfSksZS5zaG93TmV4dE1vcmU/aSgibGkiLHtzdGF0aWNDbGFzczoiZWwtaWNvbiBtb3JlIGJ0bi1xdWlja25leHQiLGNsYXNzOltlLnF1aWNrbmV4dEljb25DbGFzc10sb246e21vdXNlZW50ZXI6ZnVuY3Rpb24odCl7ZS5xdWlja25leHRJY29uQ2xhc3M9ImVsLWljb24tZC1hcnJvdy1yaWdodCJ9LG1vdXNlbGVhdmU6ZnVuY3Rpb24odCl7ZS5xdWlja25leHRJY29uQ2xhc3M9ImVsLWljb24tbW9yZSJ9fX0pOmUuX2UoKSxlLnBhZ2VDb3VudD4xP2koImxpIix7c3RhdGljQ2xhc3M6Im51bWJlciIsY2xhc3M6e2FjdGl2ZTplLmN1cnJlbnRQYWdlPT09ZS5wYWdlQ291bnR9fSxbZS5fdihlLl9zKGUucGFnZUNvdW50KSldKTplLl9lKCldLDIpfSxzdGF0aWNSZW5kZXJGbnM6W119fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXQuX19lc01vZHVsZT0hMDt2YXIgcz1pKDkpLG89bihzKTtvLmRlZmF1bHQuaW5zdGFsbD1mdW5jdGlvbihlKXtlLmNvbXBvbmVudChvLmRlZmF1bHQubmFtZSxvLmRlZmF1bHQpfSx0LmRlZmF1bHQ9by5kZWZhdWx0fSxmdW5jdGlvbihlLHQsaSl7dmFyIG49aSg1KShpKDEwKSxpKDQ5KSxudWxsLG51bGwpO2UuZXhwb3J0cz1uLmV4cG9ydHN9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5fX2VzTW9kdWxlPSEwO3ZhciBzPWkoMTEpLG89bihzKSxhPWkoMTIpLHI9bihhKSxsPWkoMTkpLHU9bihsKSxjPWkoMjUpLGQ9bihjKSxoPWkoMzQpLGY9bihoKSxwPWkoMzcpLG09bihwKSx2PWkoNDEpLGc9bih2KSx5PWkoNDYpLGI9bih5KSxfPWkoNDgpLEM9bihfKSx4PWkoMzApLHc9aSg0MyksTT1pKDEzKSxrPXtsYXJnZTo0MixzbWFsbDozMCxtaW5pOjIyfTt0LmRlZmF1bHQ9e21peGluczpbby5kZWZhdWx0LHIuZGVmYXVsdF0sbmFtZToiRWxTZWxlY3QiLGNvbXBvbmVudE5hbWU6IkVsU2VsZWN0Iixjb21wdXRlZDp7aWNvbkNsYXNzOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jbGVhcmFibGUmJiF0aGlzLmRpc2FibGVkJiZ0aGlzLmlucHV0SG92ZXJpbmcmJiF0aGlzLm11bHRpcGxlJiZ2b2lkIDAhPT10aGlzLnZhbHVlJiYiIiE9PXRoaXMudmFsdWU7cmV0dXJuIGU/ImNpcmNsZS1jbG9zZSBpcy1zaG93LWNsb3NlIjp0aGlzLnJlbW90ZSYmdGhpcy5maWx0ZXJhYmxlPyIiOiJjYXJldC10b3AifSxkZWJvdW5jZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlbW90ZT8zMDA6MH0sZW1wdHlUZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG9hZGluZz90aGlzLmxvYWRpbmdUZXh0fHx0aGlzLnQoImVsLnNlbGVjdC5sb2FkaW5nIik6KCF0aGlzLnJlbW90ZXx8IiIhPT10aGlzLnF1ZXJ5fHwwIT09dGhpcy5vcHRpb25zLmxlbmd0aCkmJih0aGlzLmZpbHRlcmFibGUmJnRoaXMub3B0aW9ucy5sZW5ndGg+MCYmMD09PXRoaXMuZmlsdGVyZWRPcHRpb25zQ291bnQ/dGhpcy5ub01hdGNoVGV4dHx8dGhpcy50KCJlbC5zZWxlY3Qubm9NYXRjaCIpOjA9PT10aGlzLm9wdGlvbnMubGVuZ3RoP3RoaXMubm9EYXRhVGV4dHx8dGhpcy50KCJlbC5zZWxlY3Qubm9EYXRhIik6bnVsbCl9LHNob3dOZXdPcHRpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5vcHRpb25zLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5jcmVhdGVkfSkuc29tZShmdW5jdGlvbih0KXtyZXR1cm4gdC5jdXJyZW50TGFiZWw9PT1lLnF1ZXJ5fSk7cmV0dXJuIHRoaXMuZmlsdGVyYWJsZSYmdGhpcy5hbGxvd0NyZWF0ZSYmIiIhPT10aGlzLnF1ZXJ5JiYhdH19LGNvbXBvbmVudHM6e0VsSW5wdXQ6dS5kZWZhdWx0LEVsU2VsZWN0TWVudTpkLmRlZmF1bHQsRWxPcHRpb246Zi5kZWZhdWx0LEVsVGFnOm0uZGVmYXVsdCxFbFNjcm9sbGJhcjpnLmRlZmF1bHR9LGRpcmVjdGl2ZXM6e0NsaWNrb3V0c2lkZTpDLmRlZmF1bHR9LHByb3BzOntuYW1lOlN0cmluZyx2YWx1ZTp7fSxzaXplOlN0cmluZyxkaXNhYmxlZDpCb29sZWFuLGNsZWFyYWJsZTpCb29sZWFuLGZpbHRlcmFibGU6Qm9vbGVhbixhbGxvd0NyZWF0ZTpCb29sZWFuLGxvYWRpbmc6Qm9vbGVhbixwb3BwZXJDbGFzczpTdHJpbmcscmVtb3RlOkJvb2xlYW4sbG9hZGluZ1RleHQ6U3RyaW5nLG5vTWF0Y2hUZXh0OlN0cmluZyxub0RhdGFUZXh0OlN0cmluZyxyZW1vdGVNZXRob2Q6RnVuY3Rpb24sZmlsdGVyTWV0aG9kOkZ1bmN0aW9uLG11bHRpcGxlOkJvb2xlYW4sbXVsdGlwbGVMaW1pdDp7dHlwZTpOdW1iZXIsZGVmYXVsdDowfSxwbGFjZWhvbGRlcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpmdW5jdGlvbigpe3JldHVybigwLE0udCkoImVsLnNlbGVjdC5wbGFjZWhvbGRlciIpfX19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57b3B0aW9uczpbXSxjYWNoZWRPcHRpb25zOltdLGNyZWF0ZWRMYWJlbDpudWxsLGNyZWF0ZWRTZWxlY3RlZDohMSxzZWxlY3RlZDp0aGlzLm11bHRpcGxlP1tdOnt9LGlzU2VsZWN0OiEwLGlucHV0TGVuZ3RoOjIwLGlucHV0V2lkdGg6MCxjYWNoZWRQbGFjZUhvbGRlcjoiIixvcHRpb25zQ291bnQ6MCxmaWx0ZXJlZE9wdGlvbnNDb3VudDowLGRyb3Bkb3duVWw6bnVsbCx2aXNpYmxlOiExLHNlbGVjdGVkTGFiZWw6IiIsaG92ZXJJbmRleDotMSxxdWVyeToiIixib3R0b21PdmVyZmxvdzowLHRvcE92ZXJmbG93OjAsb3B0aW9uc0FsbERpc2FibGVkOiExLGlucHV0SG92ZXJpbmc6ITEsY3VycmVudFBsYWNlaG9sZGVyOiIifX0sd2F0Y2g6e3BsYWNlaG9sZGVyOmZ1bmN0aW9uKGUpe3RoaXMuY2FjaGVkUGxhY2VIb2xkZXI9dGhpcy5jdXJyZW50UGxhY2Vob2xkZXI9ZX0sdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5tdWx0aXBsZSYmKHRoaXMucmVzZXRJbnB1dEhlaWdodCgpLGUubGVuZ3RoPjB8fHRoaXMuJHJlZnMuaW5wdXQmJiIiIT09dGhpcy5xdWVyeT90aGlzLmN1cnJlbnRQbGFjZWhvbGRlcj0iIjp0aGlzLmN1cnJlbnRQbGFjZWhvbGRlcj10aGlzLmNhY2hlZFBsYWNlSG9sZGVyKSx0aGlzLnNldFNlbGVjdGVkKCksdGhpcy5maWx0ZXJhYmxlJiYhdGhpcy5tdWx0aXBsZSYmKHRoaXMuaW5wdXRMZW5ndGg9MjApLHRoaXMuJGVtaXQoImNoYW5nZSIsZSksdGhpcy5kaXNwYXRjaCgiRWxGb3JtSXRlbSIsImVsLmZvcm0uY2hhbmdlIixlKX0scXVlcnk6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpczt0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe3QudmlzaWJsZSYmdC5icm9hZGNhc3QoIkVsU2VsZWN0RHJvcGRvd24iLCJ1cGRhdGVQb3BwZXIiKX0pLHRoaXMuaG92ZXJJbmRleD0tMSx0aGlzLm11bHRpcGxlJiZ0aGlzLmZpbHRlcmFibGUmJih0aGlzLmlucHV0TGVuZ3RoPTE1KnRoaXMuJHJlZnMuaW5wdXQudmFsdWUubGVuZ3RoKzIwLHRoaXMubWFuYWdlUGxhY2Vob2xkZXIoKSx0aGlzLnJlc2V0SW5wdXRIZWlnaHQoKSksdGhpcy5yZW1vdGUmJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlbW90ZU1ldGhvZD8odGhpcy5ob3ZlckluZGV4PS0xLHRoaXMucmVtb3RlTWV0aG9kKGUpLHRoaXMuYnJvYWRjYXN0KCJFbE9wdGlvbiIsInJlc2V0SW5kZXgiKSk6ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuZmlsdGVyTWV0aG9kPyh0aGlzLmZpbHRlck1ldGhvZChlKSx0aGlzLmJyb2FkY2FzdCgiRWxPcHRpb25Hcm91cCIsInF1ZXJ5Q2hhbmdlIikpOih0aGlzLmZpbHRlcmVkT3B0aW9uc0NvdW50PXRoaXMub3B0aW9uc0NvdW50LHRoaXMuYnJvYWRjYXN0KCJFbE9wdGlvbiIsInF1ZXJ5Q2hhbmdlIixlKSx0aGlzLmJyb2FkY2FzdCgiRWxPcHRpb25Hcm91cCIsInF1ZXJ5Q2hhbmdlIikpfSx2aXNpYmxlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7ZT8odGhpcy5oYW5kbGVJY29uU2hvdygpLHRoaXMuYnJvYWRjYXN0KCJFbFNlbGVjdERyb3Bkb3duIiwidXBkYXRlUG9wcGVyIiksdGhpcy5maWx0ZXJhYmxlJiYodGhpcy5xdWVyeT10aGlzLnNlbGVjdGVkTGFiZWwsdGhpcy5tdWx0aXBsZT90aGlzLiRyZWZzLmlucHV0LmZvY3VzKCk6KHRoaXMucmVtb3RlfHwodGhpcy5icm9hZGNhc3QoIkVsT3B0aW9uIiwicXVlcnlDaGFuZ2UiLCIiKSx0aGlzLmJyb2FkY2FzdCgiRWxPcHRpb25Hcm91cCIsInF1ZXJ5Q2hhbmdlIikpLHRoaXMuYnJvYWRjYXN0KCJFbElucHV0IiwiaW5wdXRTZWxlY3QiKSkpKToodGhpcy4kcmVmcy5yZWZlcmVuY2UuJGVsLnF1ZXJ5U2VsZWN0b3IoImlucHV0IikuYmx1cigpLHRoaXMuaGFuZGxlSWNvbkhpZGUoKSx0aGlzLmJyb2FkY2FzdCgiRWxTZWxlY3REcm9wZG93biIsImRlc3Ryb3lQb3BwZXIiKSx0aGlzLiRyZWZzLmlucHV0JiZ0aGlzLiRyZWZzLmlucHV0LmJsdXIoKSx0aGlzLnF1ZXJ5PSIiLHRoaXMuc2VsZWN0ZWRMYWJlbD0iIix0aGlzLmlucHV0TGVuZ3RoPTIwLHRoaXMucmVzZXRIb3ZlckluZGV4KCksdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXt0LiRyZWZzLmlucHV0JiYiIj09PXQuJHJlZnMuaW5wdXQudmFsdWUmJjA9PT10LnNlbGVjdGVkLmxlbmd0aCYmKHQuY3VycmVudFBsYWNlaG9sZGVyPXQuY2FjaGVkUGxhY2VIb2xkZXIpfSksdGhpcy5tdWx0aXBsZXx8KHRoaXMuZ2V0T3ZlcmZsb3dzKCksdGhpcy5zZWxlY3RlZCYmKHRoaXMuZmlsdGVyYWJsZSYmdGhpcy5hbGxvd0NyZWF0ZSYmdGhpcy5jcmVhdGVkU2VsZWN0ZWQmJnRoaXMuY3JlYXRlZE9wdGlvbj90aGlzLnNlbGVjdGVkTGFiZWw9dGhpcy5jcmVhdGVkTGFiZWw6dGhpcy5zZWxlY3RlZExhYmVsPXRoaXMuc2VsZWN0ZWQuY3VycmVudExhYmVsLHRoaXMuZmlsdGVyYWJsZSYmKHRoaXMucXVlcnk9dGhpcy5zZWxlY3RlZExhYmVsKSkpKSx0aGlzLiRlbWl0KCJ2aXNpYmxlLWNoYW5nZSIsZSl9LG9wdGlvbnM6ZnVuY3Rpb24oZSl7aWYoIXRoaXMuJGlzU2VydmVyKXt0aGlzLm9wdGlvbnNBbGxEaXNhYmxlZD1lLmxlbmd0aD09PWUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLmRpc2FibGVkPT09ITB9KS5sZW5ndGgsdGhpcy5tdWx0aXBsZSYmdGhpcy5yZXNldElucHV0SGVpZ2h0KCk7dmFyIHQ9dGhpcy4kZWwucXVlcnlTZWxlY3RvckFsbCgiaW5wdXQiKTtbXS5pbmRleE9mLmNhbGwodCxkb2N1bWVudC5hY3RpdmVFbGVtZW50KT09PS0xJiZ0aGlzLnNldFNlbGVjdGVkKCl9fX0sbWV0aG9kczp7aGFuZGxlSWNvbkhpZGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLiRlbC5xdWVyeVNlbGVjdG9yKCIuZWwtaW5wdXRfX2ljb24iKTtlJiYoMCx4LnJlbW92ZUNsYXNzKShlLCJpcy1yZXZlcnNlIil9LGhhbmRsZUljb25TaG93OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy4kZWwucXVlcnlTZWxlY3RvcigiLmVsLWlucHV0X19pY29uIik7ZSYmISgwLHguaGFzQ2xhc3MpKGUsImVsLWljb24tY2lyY2xlLWNsb3NlIikmJigwLHguYWRkQ2xhc3MpKGUsImlzLXJldmVyc2UiKX0saGFuZGxlTWVudUVudGVyOmZ1bmN0aW9uKCl7dGhpcy5kcm9wZG93blVsfHwodGhpcy5kcm9wZG93blVsPXRoaXMuJHJlZnMucG9wcGVyLiRlbC5xdWVyeVNlbGVjdG9yKCIuZWwtc2VsZWN0LWRyb3Bkb3duX193cmFwIiksdGhpcy5nZXRPdmVyZmxvd3MoKSksIXRoaXMubXVsdGlwbGUmJnRoaXMuZHJvcGRvd25VbCYmdGhpcy5yZXNldE1lbnVTY3JvbGwoKX0sZ2V0T3ZlcmZsb3dzOmZ1bmN0aW9uKCl7aWYodGhpcy5kcm9wZG93blVsJiZ0aGlzLnNlbGVjdGVkJiZ0aGlzLnNlbGVjdGVkLiRlbCl7dmFyIGU9dGhpcy5zZWxlY3RlZC4kZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdD10aGlzLiRyZWZzLnBvcHBlci4kZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5ib3R0b21PdmVyZmxvdz1lLmJvdHRvbS10LmJvdHRvbSx0aGlzLnRvcE92ZXJmbG93PWUudG9wLXQudG9wfX0scmVzZXRNZW51U2Nyb2xsOmZ1bmN0aW9uKCl7dGhpcy5ib3R0b21PdmVyZmxvdz4wP3RoaXMuZHJvcGRvd25VbC5zY3JvbGxUb3ArPXRoaXMuYm90dG9tT3ZlcmZsb3c6dGhpcy50b3BPdmVyZmxvdzwwJiYodGhpcy5kcm9wZG93blVsLnNjcm9sbFRvcCs9dGhpcy50b3BPdmVyZmxvdyl9LGdldE9wdGlvbjpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dm9pZCAwLGk9dGhpcy5jYWNoZWRPcHRpb25zLmxlbmd0aC0xO2k+PTA7aS0tKXt2YXIgbj10aGlzLmNhY2hlZE9wdGlvbnNbaV07aWYobi52YWx1ZT09PWUpe3Q9bjticmVha319aWYodClyZXR1cm4gdDt2YXIgcz0ic3RyaW5nIj09dHlwZW9mIGV8fCJudW1iZXIiPT10eXBlb2YgZT9lOiIiLG89e3ZhbHVlOmUsY3VycmVudExhYmVsOnN9O3JldHVybiB0aGlzLm11bHRpcGxlJiYoby5oaXRTdGF0ZT0hMSksb30sc2V0U2VsZWN0ZWQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKCF0aGlzLm11bHRpcGxlKXt2YXIgdD10aGlzLmdldE9wdGlvbih0aGlzLnZhbHVlKTtyZXR1cm4gdC5jcmVhdGVkPyh0aGlzLmNyZWF0ZWRMYWJlbD10LmN1cnJlbnRMYWJlbCx0aGlzLmNyZWF0ZWRTZWxlY3RlZD0hMCk6dGhpcy5jcmVhdGVkU2VsZWN0ZWQ9ITEsdGhpcy5zZWxlY3RlZExhYmVsPXQuY3VycmVudExhYmVsLHRoaXMuc2VsZWN0ZWQ9dCx2b2lkKHRoaXMuZmlsdGVyYWJsZSYmKHRoaXMucXVlcnk9dGhpcy5zZWxlY3RlZExhYmVsKSl9dmFyIGk9W107QXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSYmdGhpcy52YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2kucHVzaChlLmdldE9wdGlvbih0KSl9KSx0aGlzLnNlbGVjdGVkPWksdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtlLnJlc2V0SW5wdXRIZWlnaHQoKX0pfSxoYW5kbGVGb2N1czpmdW5jdGlvbigpe3RoaXMudmlzaWJsZT0hMH0saGFuZGxlSWNvbkNsaWNrOmZ1bmN0aW9uKGUpe3RoaXMuaWNvbkNsYXNzLmluZGV4T2YoImNpcmNsZS1jbG9zZSIpPi0xP3RoaXMuZGVsZXRlU2VsZWN0ZWQoZSk6dGhpcy50b2dnbGVNZW51KCl9LGhhbmRsZU1vdXNlRG93bjpmdW5jdGlvbihlKXsiSU5QVVQiPT09ZS50YXJnZXQudGFnTmFtZSYmdGhpcy52aXNpYmxlJiYodGhpcy5oYW5kbGVDbG9zZSgpLGUucHJldmVudERlZmF1bHQoKSl9LGRvRGVzdHJveTpmdW5jdGlvbigpe3RoaXMuJHJlZnMucG9wcGVyJiZ0aGlzLiRyZWZzLnBvcHBlci5kb0Rlc3Ryb3koKX0saGFuZGxlQ2xvc2U6ZnVuY3Rpb24oKXt0aGlzLnZpc2libGU9ITF9LHRvZ2dsZUxhc3RPcHRpb25IaXRTdGF0ZTpmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KHRoaXMuc2VsZWN0ZWQpKXt2YXIgdD10aGlzLnNlbGVjdGVkW3RoaXMuc2VsZWN0ZWQubGVuZ3RoLTFdO2lmKHQpcmV0dXJuIGU9PT0hMHx8ZT09PSExPyh0LmhpdFN0YXRlPWUsZSk6KHQuaGl0U3RhdGU9IXQuaGl0U3RhdGUsdC5oaXRTdGF0ZSl9fSxkZWxldGVQcmV2VGFnOmZ1bmN0aW9uKGUpe2UudGFyZ2V0LnZhbHVlLmxlbmd0aDw9MCYmIXRoaXMudG9nZ2xlTGFzdE9wdGlvbkhpdFN0YXRlKCkmJnRoaXMudmFsdWUucG9wKCl9LG1hbmFnZVBsYWNlaG9sZGVyOmZ1bmN0aW9uKCl7IiIhPT10aGlzLmN1cnJlbnRQbGFjZWhvbGRlciYmKHRoaXMuY3VycmVudFBsYWNlaG9sZGVyPXRoaXMuJHJlZnMuaW5wdXQudmFsdWU/IiI6dGhpcy5jYWNoZWRQbGFjZUhvbGRlcil9LHJlc2V0SW5wdXRTdGF0ZTpmdW5jdGlvbihlKXs4IT09ZS5rZXlDb2RlJiZ0aGlzLnRvZ2dsZUxhc3RPcHRpb25IaXRTdGF0ZSghMSksdGhpcy5pbnB1dExlbmd0aD0xNSp0aGlzLiRyZWZzLmlucHV0LnZhbHVlLmxlbmd0aCsyMCx0aGlzLnJlc2V0SW5wdXRIZWlnaHQoKX0scmVzZXRJbnB1dEhlaWdodDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtpZihlLiRyZWZzLnJlZmVyZW5jZSl7dmFyIHQ9ZS4kcmVmcy5yZWZlcmVuY2UuJGVsLmNoaWxkTm9kZXMsaT1bXS5maWx0ZXIuY2FsbCh0LGZ1bmN0aW9uKGUpe3JldHVybiJJTlBVVCI9PT1lLnRhZ05hbWV9KVswXTtpLnN0eWxlLmhlaWdodD1NYXRoLm1heChlLiRyZWZzLnRhZ3MuY2xpZW50SGVpZ2h0KzYsa1tlLnNpemVdfHwzNikrInB4IixlLnZpc2libGUmJmUuZW1wdHlUZXh0IT09ITEmJmUuYnJvYWRjYXN0KCJFbFNlbGVjdERyb3Bkb3duIiwidXBkYXRlUG9wcGVyIil9fSl9LHJlc2V0SG92ZXJJbmRleDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7c2V0VGltZW91dChmdW5jdGlvbigpe2UubXVsdGlwbGU/ZS5zZWxlY3RlZC5sZW5ndGg+MD9lLmhvdmVySW5kZXg9TWF0aC5taW4uYXBwbHkobnVsbCxlLnNlbGVjdGVkLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZS5vcHRpb25zLmluZGV4T2YodCl9KSk6ZS5ob3ZlckluZGV4PS0xOmUuaG92ZXJJbmRleD1lLm9wdGlvbnMuaW5kZXhPZihlLnNlbGVjdGVkKX0sMzAwKX0saGFuZGxlT3B0aW9uU2VsZWN0OmZ1bmN0aW9uKGUpe2lmKHRoaXMubXVsdGlwbGUpe3ZhciB0PS0xO3RoaXMudmFsdWUuZm9yRWFjaChmdW5jdGlvbihpLG4pe2k9PT1lLnZhbHVlJiYodD1uKX0pLHQ+LTE/dGhpcy52YWx1ZS5zcGxpY2UodCwxKToodGhpcy5tdWx0aXBsZUxpbWl0PD0wfHx0aGlzLnZhbHVlLmxlbmd0aDx0aGlzLm11bHRpcGxlTGltaXQpJiZ0aGlzLnZhbHVlLnB1c2goZS52YWx1ZSksZS5jcmVhdGVkJiYodGhpcy5xdWVyeT0iIix0aGlzLmlucHV0TGVuZ3RoPTIwKSx0aGlzLmZpbHRlcmFibGUmJnRoaXMuJHJlZnMuaW5wdXQuZm9jdXMoKX1lbHNlIHRoaXMuJGVtaXQoImlucHV0IixlLnZhbHVlKSx0aGlzLnZpc2libGU9ITF9LHRvZ2dsZU1lbnU6ZnVuY3Rpb24oKXt0aGlzLmZpbHRlcmFibGUmJiIiPT09dGhpcy5xdWVyeSYmdGhpcy52aXNpYmxlfHx0aGlzLmRpc2FibGVkfHwodGhpcy52aXNpYmxlPSF0aGlzLnZpc2libGUpfSxuYXZpZ2F0ZU9wdGlvbnM6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudmlzaWJsZT92b2lkKDAhPT10aGlzLm9wdGlvbnMubGVuZ3RoJiYwIT09dGhpcy5maWx0ZXJlZE9wdGlvbnNDb3VudCYmKHRoaXMub3B0aW9uc0FsbERpc2FibGVkPXRoaXMub3B0aW9ucy5sZW5ndGg9PT10aGlzLm9wdGlvbnMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLmRpc2FibGVkPT09ITB9KS5sZW5ndGgsdGhpcy5vcHRpb25zQWxsRGlzYWJsZWR8fCgibmV4dCI9PT1lJiYodGhpcy5ob3ZlckluZGV4KyssdGhpcy5ob3ZlckluZGV4PT09dGhpcy5vcHRpb25zLmxlbmd0aCYmKHRoaXMuaG92ZXJJbmRleD0wKSx0aGlzLnJlc2V0U2Nyb2xsVG9wKCksdGhpcy5vcHRpb25zW3RoaXMuaG92ZXJJbmRleF0uZGlzYWJsZWQhPT0hMCYmdGhpcy5vcHRpb25zW3RoaXMuaG92ZXJJbmRleF0uZ3JvdXBEaXNhYmxlZCE9PSEwJiZ0aGlzLm9wdGlvbnNbdGhpcy5ob3ZlckluZGV4XS52aXNpYmxlfHx0aGlzLm5hdmlnYXRlT3B0aW9ucygibmV4dCIpKSwicHJldiI9PT1lJiYodGhpcy5ob3ZlckluZGV4LS0sdGhpcy5ob3ZlckluZGV4PDAmJih0aGlzLmhvdmVySW5kZXg9dGhpcy5vcHRpb25zLmxlbmd0aC0xKSx0aGlzLnJlc2V0U2Nyb2xsVG9wKCksdGhpcy5vcHRpb25zW3RoaXMuaG92ZXJJbmRleF0uZGlzYWJsZWQhPT0hMCYmdGhpcy5vcHRpb25zW3RoaXMuaG92ZXJJbmRleF0uZ3JvdXBEaXNhYmxlZCE9PSEwJiZ0aGlzLm9wdGlvbnNbdGhpcy5ob3ZlckluZGV4XS52aXNpYmxlfHx0aGlzLm5hdmlnYXRlT3B0aW9ucygicHJldiIpKSkpKTp2b2lkKHRoaXMudmlzaWJsZT0hMCl9LHJlc2V0U2Nyb2xsVG9wOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zW3RoaXMuaG92ZXJJbmRleF0uJGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbS10aGlzLiRyZWZzLnBvcHBlci4kZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tLHQ9dGhpcy5vcHRpb25zW3RoaXMuaG92ZXJJbmRleF0uJGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcC10aGlzLiRyZWZzLnBvcHBlci4kZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO2U+MCYmKHRoaXMuZHJvcGRvd25VbC5zY3JvbGxUb3ArPWUpLHQ8MCYmKHRoaXMuZHJvcGRvd25VbC5zY3JvbGxUb3ArPXQpfSxzZWxlY3RPcHRpb246ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnNbdGhpcy5ob3ZlckluZGV4XSYmdGhpcy5oYW5kbGVPcHRpb25TZWxlY3QodGhpcy5vcHRpb25zW3RoaXMuaG92ZXJJbmRleF0pfSxkZWxldGVTZWxlY3RlZDpmdW5jdGlvbihlKXtlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuJGVtaXQoImlucHV0IiwiIiksdGhpcy52aXNpYmxlPSExfSxkZWxldGVUYWc6ZnVuY3Rpb24oZSx0KXt2YXIgaT10aGlzLnNlbGVjdGVkLmluZGV4T2YodCk7aT4tMSYmIXRoaXMuZGlzYWJsZWQmJih0aGlzLnZhbHVlLnNwbGljZShpLDEpLHRoaXMuJGVtaXQoInJlbW92ZS10YWciLHQpKSxlLnN0b3BQcm9wYWdhdGlvbigpfSxvbklucHV0Q2hhbmdlOmZ1bmN0aW9uKCl7dGhpcy5maWx0ZXJhYmxlJiYodGhpcy5xdWVyeT10aGlzLnNlbGVjdGVkTGFiZWwpfSxvbk9wdGlvbkRlc3Ryb3k6ZnVuY3Rpb24oZSl7dGhpcy5vcHRpb25zQ291bnQtLSx0aGlzLmZpbHRlcmVkT3B0aW9uc0NvdW50LS07dmFyIHQ9dGhpcy5vcHRpb25zLmluZGV4T2YoZSk7dD4tMSYmdGhpcy5vcHRpb25zLnNwbGljZSh0LDEpLHRoaXMuYnJvYWRjYXN0KCJFbE9wdGlvbiIsInJlc2V0SW5kZXgiKX0scmVzZXRJbnB1dFdpZHRoOmZ1bmN0aW9uKCl7dGhpcy5pbnB1dFdpZHRoPXRoaXMuJHJlZnMucmVmZXJlbmNlLiRlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aH0saGFuZGxlUmVzaXplOmZ1bmN0aW9uKCl7dGhpcy5yZXNldElucHV0V2lkdGgoKSx0aGlzLm11bHRpcGxlJiZ0aGlzLnJlc2V0SW5wdXRIZWlnaHQoKX19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuY2FjaGVkUGxhY2VIb2xkZXI9dGhpcy5jdXJyZW50UGxhY2Vob2xkZXI9dGhpcy5wbGFjZWhvbGRlcix0aGlzLm11bHRpcGxlJiYhQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSYmdGhpcy4kZW1pdCgiaW5wdXQiLFtdKSwhdGhpcy5tdWx0aXBsZSYmQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSYmdGhpcy4kZW1pdCgiaW5wdXQiLCIiKSx0aGlzLnNldFNlbGVjdGVkKCksdGhpcy5kZWJvdW5jZWRPbklucHV0Q2hhbmdlPSgwLGIuZGVmYXVsdCkodGhpcy5kZWJvdW5jZSxmdW5jdGlvbigpe2Uub25JbnB1dENoYW5nZSgpfSksdGhpcy4kb24oImhhbmRsZU9wdGlvbkNsaWNrIix0aGlzLmhhbmRsZU9wdGlvblNlbGVjdCksdGhpcy4kb24oIm9uT3B0aW9uRGVzdHJveSIsdGhpcy5vbk9wdGlvbkRlc3Ryb3kpLHRoaXMuJG9uKCJzZXRTZWxlY3RlZCIsdGhpcy5zZXRTZWxlY3RlZCl9LG1vdW50ZWQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMubXVsdGlwbGUmJkFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkmJnRoaXMudmFsdWUubGVuZ3RoPjAmJih0aGlzLmN1cnJlbnRQbGFjZWhvbGRlcj0iIiksKDAsdy5hZGRSZXNpemVMaXN0ZW5lcikodGhpcy4kZWwsdGhpcy5oYW5kbGVSZXNpemUpLHRoaXMucmVtb3RlJiZ0aGlzLm11bHRpcGxlJiZ0aGlzLnJlc2V0SW5wdXRIZWlnaHQoKSx0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe2UuJHJlZnMucmVmZXJlbmNlJiZlLiRyZWZzLnJlZmVyZW5jZS4kZWwmJihlLmlucHV0V2lkdGg9ZS4kcmVmcy5yZWZlcmVuY2UuJGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKX0pfSxiZWZvcmVEZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy4kZWwmJnRoaXMuaGFuZGxlUmVzaXplJiYoMCx3LnJlbW92ZVJlc2l6ZUxpc3RlbmVyKSh0aGlzLiRlbCx0aGlzLmhhbmRsZVJlc2l6ZSl9fX0sZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gaShlLHQsbil7dGhpcy4kY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihzKXt2YXIgbz1zLiRvcHRpb25zLmNvbXBvbmVudE5hbWU7bz09PWU/cy4kZW1pdC5hcHBseShzLFt0XS5jb25jYXQobikpOmkuYXBwbHkocyxbZSx0XS5jb25jYXQoW25dKSl9KX10Ll9fZXNNb2R1bGU9ITAsdC5kZWZhdWx0PXttZXRob2RzOntkaXNwYXRjaDpmdW5jdGlvbihlLHQsaSl7Zm9yKHZhciBuPXRoaXMuJHBhcmVudHx8dGhpcy4kcm9vdCxzPW4uJG9wdGlvbnMuY29tcG9uZW50TmFtZTtuJiYoIXN8fHMhPT1lKTspbj1uLiRwYXJlbnQsbiYmKHM9bi4kb3B0aW9ucy5jb21wb25lbnROYW1lKTtuJiZuLiRlbWl0LmFwcGx5KG4sW3RdLmNvbmNhdChpKSl9LGJyb2FkY2FzdDpmdW5jdGlvbihlLHQsbil7aS5jYWxsKHRoaXMsZSx0LG4pfX19fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3QuX19lc01vZHVsZT0hMDt2YXIgbj1pKDEzKTt0LmRlZmF1bHQ9e21ldGhvZHM6e3Q6ZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PUFycmF5KGUpLGk9MDtpPGU7aSsrKXRbaV09YXJndW1lbnRzW2ldO3JldHVybiBuLnQuYXBwbHkodGhpcyx0KX19fX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX10Ll9fZXNNb2R1bGU9ITAsdC5pMThuPXQudXNlPXQudD12b2lkIDA7dmFyIHM9aSgxNCksbz1uKHMpLGE9aSgxNSkscj1uKGEpLGw9aSgxNiksdT1uKGwpLGM9aSgxNyksZD1uKGMpLGg9KDAsZC5kZWZhdWx0KShyLmRlZmF1bHQpLGY9by5kZWZhdWx0LHA9ITEsbT1mdW5jdGlvbigpe3ZhciBlPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzfHxyLmRlZmF1bHQpLiR0O2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlKXJldHVybiBwfHwocD0hMCxyLmRlZmF1bHQubG9jYWxlKHIuZGVmYXVsdC5jb25maWcubGFuZywoMCx1LmRlZmF1bHQpKGYsci5kZWZhdWx0LmxvY2FsZShyLmRlZmF1bHQuY29uZmlnLmxhbmcpfHx7fSx7Y2xvbmU6ITB9KSkpLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSx2PXQudD1mdW5jdGlvbihlLHQpe3ZhciBpPW0uYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKG51bGwhPT1pJiZ2b2lkIDAhPT1pKXJldHVybiBpO2Zvcih2YXIgbj1lLnNwbGl0KCIuIikscz1mLG89MCxhPW4ubGVuZ3RoO288YTtvKyspe3ZhciByPW5bb107aWYoaT1zW3JdLG89PT1hLTEpcmV0dXJuIGgoaSx0KTtpZighaSlyZXR1cm4iIjtzPWl9cmV0dXJuIiJ9LGc9dC51c2U9ZnVuY3Rpb24oZSl7Zj1lfHxmfSx5PXQuaTE4bj1mdW5jdGlvbihlKXttPWV8fG19O3QuZGVmYXVsdD17dXNlOmcsdDp2LGkxOG46eX19LGZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO3QuX19lc01vZHVsZT0hMCx0LmRlZmF1bHQ9e2VsOntjb2xvcnBpY2tlcjp7Y29uZmlybToi56Gu5a6aIixjbGVhcjoi5riF56m6In0sZGF0ZXBpY2tlcjp7bm93OiLmraTliLsiLHRvZGF5OiLku4rlpKkiLGNhbmNlbDoi5Y+W5raIIixjbGVhcjoi5riF56m6Iixjb25maXJtOiLnoa7lrpoiLHNlbGVjdERhdGU6IumAieaLqeaXpeacnyIsc2VsZWN0VGltZToi6YCJ5oup5pe26Ze0IixzdGFydERhdGU6IuW8gOWni+aXpeacnyIsc3RhcnRUaW1lOiLlvIDlp4vml7bpl7QiLGVuZERhdGU6Iue7k+adn+aXpeacnyIsZW5kVGltZToi57uT5p2f5pe26Ze0Iix5ZWFyOiLlubQiLG1vbnRoMToiMSDmnIgiLG1vbnRoMjoiMiDmnIgiLG1vbnRoMzoiMyDmnIgiLG1vbnRoNDoiNCDmnIgiLG1vbnRoNToiNSDmnIgiLG1vbnRoNjoiNiDmnIgiLG1vbnRoNzoiNyDmnIgiLG1vbnRoODoiOCDmnIgiLG1vbnRoOToiOSDmnIgiLG1vbnRoMTA6IjEwIOaciCIsbW9udGgxMToiMTEg5pyIIixtb250aDEyOiIxMiDmnIgiLHdlZWtzOntzdW46IuaXpSIsbW9uOiLkuIAiLHR1ZToi5LqMIix3ZWQ6IuS4iSIsdGh1OiLlm5siLGZyaToi5LqUIixzYXQ6IuWFrSJ9LG1vbnRoczp7amFuOiLkuIDmnIgiLGZlYjoi5LqM5pyIIixtYXI6IuS4ieaciCIsYXByOiLlm5vmnIgiLG1heToi5LqU5pyIIixqdW46IuWFreaciCIsanVsOiLkuIPmnIgiLGF1Zzoi5YWr5pyIIixzZXA6IuS5neaciCIsb2N0OiLljYHmnIgiLG5vdjoi5Y2B5LiA5pyIIixkZWM6IuWNgeS6jOaciCJ9fSxzZWxlY3Q6e2xvYWRpbmc6IuWKoOi9veS4rSIsbm9NYXRjaDoi5peg5Yy56YWN5pWw5o2uIixub0RhdGE6IuaXoOaVsOaNriIscGxhY2Vob2xkZXI6Iuivt+mAieaLqSJ9LGNhc2NhZGVyOntub01hdGNoOiLml6DljLnphY3mlbDmja4iLHBsYWNlaG9sZGVyOiLor7fpgInmi6kifSxwYWdpbmF0aW9uOntnb3RvOiLliY3lvoAiLHBhZ2VzaXplOiLmnaEv6aG1Iix0b3RhbDoi5YWxIHt0b3RhbH0g5p2hIixwYWdlQ2xhc3NpZmllcjoi6aG1In0sbWVzc2FnZWJveDp7dGl0bGU6IuaPkOekuiIsY29uZmlybToi56Gu5a6aIixjYW5jZWw6IuWPlua2iCIsZXJyb3I6Iui+k+WFpeeahOaVsOaNruS4jeWQiOazlSEifSx1cGxvYWQ6e2RlbGV0ZToi5Yig6ZmkIixwcmV2aWV3OiLmn6XnnIvlm77niYciLGNvbnRpbnVlOiLnu6fnu63kuIrkvKAifSx0YWJsZTp7ZW1wdHlUZXh0OiLmmoLml6DmlbDmja4iLGNvbmZpcm1GaWx0ZXI6Iuetm+mAiSIscmVzZXRGaWx0ZXI6IumHjee9riIsY2xlYXJGaWx0ZXI6IuWFqOmDqCJ9LHRyZWU6e2VtcHR5VGV4dDoi5pqC5peg5pWw5o2uIn19fX0sZnVuY3Rpb24odCxpKXt0LmV4cG9ydHM9ZX0sZnVuY3Rpb24oZSx0LGkpe3ZhciBuLHM7IWZ1bmN0aW9uKG8sYSl7bj1hLHM9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5jYWxsKHQsaSx0LGUpOm4sISh2b2lkIDAhPT1zJiYoZS5leHBvcnRzPXMpKX0odGhpcyxmdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dmFyIHQ9ZSYmIm9iamVjdCI9PXR5cGVvZiBlO3JldHVybiB0JiYiW29iamVjdCBSZWdFeHBdIiE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSYmIltvYmplY3QgRGF0ZV0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpfWZ1bmN0aW9uIHQoZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/W106e319ZnVuY3Rpb24gaShpLG4pe3ZhciBzPW4mJm4uY2xvbmU9PT0hMDtyZXR1cm4gcyYmZShpKT9vKHQoaSksaSxuKTppfWZ1bmN0aW9uIG4odCxuLHMpe3ZhciBhPXQuc2xpY2UoKTtyZXR1cm4gbi5mb3JFYWNoKGZ1bmN0aW9uKG4scil7InVuZGVmaW5lZCI9PXR5cGVvZiBhW3JdP2Fbcl09aShuLHMpOmUobik/YVtyXT1vKHRbcl0sbixzKTp0LmluZGV4T2Yobik9PT0tMSYmYS5wdXNoKGkobixzKSl9KSxhfWZ1bmN0aW9uIHModCxuLHMpe3ZhciBhPXt9O3JldHVybiBlKHQpJiZPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2FbZV09aSh0W2VdLHMpfSksT2JqZWN0LmtleXMobikuZm9yRWFjaChmdW5jdGlvbihyKXtlKG5bcl0pJiZ0W3JdP2Fbcl09byh0W3JdLG5bcl0scyk6YVtyXT1pKG5bcl0scyl9KSxhfWZ1bmN0aW9uIG8oZSx0LG8pe3ZhciBhPUFycmF5LmlzQXJyYXkodCkscj1vfHx7YXJyYXlNZXJnZTpufSxsPXIuYXJyYXlNZXJnZXx8bjtyZXR1cm4gYT9BcnJheS5pc0FycmF5KGUpP2woZSx0LG8pOmkodCxvKTpzKGUsdCxvKX1yZXR1cm4gby5hbGw9ZnVuY3Rpb24oZSx0KXtpZighQXJyYXkuaXNBcnJheShlKXx8ZS5sZW5ndGg8Mil0aHJvdyBuZXcgRXJyb3IoImZpcnN0IGFyZ3VtZW50IHNob3VsZCBiZSBhbiBhcnJheSB3aXRoIGF0IGxlYXN0IHR3byBlbGVtZW50cyIpO3JldHVybiBlLnJlZHVjZShmdW5jdGlvbihlLGkpe3JldHVybiBvKGUsaSx0KX0pfSxvfSl9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dC5fX2VzTW9kdWxlPSEwO3ZhciBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfTt0LmRlZmF1bHQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxpPUFycmF5KHQ+MT90LTE6MCksYT0xO2E8dDthKyspaVthLTFdPWFyZ3VtZW50c1thXTtyZXR1cm4gMT09PWkubGVuZ3RoJiYib2JqZWN0Ij09PW4oaVswXSkmJihpPWlbMF0pLGkmJmkuaGFzT3duUHJvcGVydHl8fChpPXt9KSxlLnJlcGxhY2UobyxmdW5jdGlvbih0LG4sbyxhKXt2YXIgcj12b2lkIDA7cmV0dXJuInsiPT09ZVthLTFdJiYifSI9PT1lW2ErdC5sZW5ndGhdP286KHI9KDAscy5oYXNPd24pKGksbyk/aVtvXTpudWxsLG51bGw9PT1yfHx2b2lkIDA9PT1yPyIiOnIpfSl9cmV0dXJuIHR9O3ZhciBzPWkoMTgpLG89LyglfClceyhbMC05YS16QS1aX10rKVx9L2d9LGZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGkoZSx0KXtyZXR1cm4gby5jYWxsKGUsdCl9ZnVuY3Rpb24gbihlLHQpe2Zvcih2YXIgaSBpbiB0KWVbaV09dFtpXTtyZXR1cm4gZX1mdW5jdGlvbiBzKGUpe2Zvcih2YXIgdD17fSxpPTA7aTxlLmxlbmd0aDtpKyspZVtpXSYmbih0LGVbaV0pO3JldHVybiB0fXQuX19lc01vZHVsZT0hMCx0Lmhhc093bj1pLHQudG9PYmplY3Q9czt2YXIgbz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXQuX19lc01vZHVsZT0hMDt2YXIgcz1pKDIwKSxvPW4ocyk7by5kZWZhdWx0Lmluc3RhbGw9ZnVuY3Rpb24oZSl7ZS5jb21wb25lbnQoby5kZWZhdWx0Lm5hbWUsby5kZWZhdWx0KX0sdC5kZWZhdWx0PW8uZGVmYXVsdH0sZnVuY3Rpb24oZSx0LGkpe3ZhciBuPWkoNSkoaSgyMSksaSgyNCksbnVsbCxudWxsKTtlLmV4cG9ydHM9bi5leHBvcnRzfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXQuX19lc01vZHVsZT0hMDt2YXIgcz1pKDExKSxvPW4ocyksYT1pKDIyKSxyPW4oYSksbD1pKDIzKSx1PW4obCk7dC5kZWZhdWx0PXtuYW1lOiJFbElucHV0Iixjb21wb25lbnROYW1lOiJFbElucHV0IixtaXhpbnM6W28uZGVmYXVsdF0sZGF0YTpmdW5jdGlvbigpe3JldHVybntjdXJyZW50VmFsdWU6dGhpcy52YWx1ZSx0ZXh0YXJlYUNhbGNTdHlsZTp7fX19LHByb3BzOnt2YWx1ZTpbU3RyaW5nLE51bWJlcl0scGxhY2Vob2xkZXI6U3RyaW5nLHNpemU6U3RyaW5nLHJlc2l6ZTpTdHJpbmcscmVhZG9ubHk6Qm9vbGVhbixhdXRvZm9jdXM6Qm9vbGVhbixpY29uOlN0cmluZyxkaXNhYmxlZDpCb29sZWFuLHR5cGU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6InRleHQifSxuYW1lOlN0cmluZyxhdXRvc2l6ZTp7dHlwZTpbQm9vbGVhbixPYmplY3RdLGRlZmF1bHQ6ITF9LHJvd3M6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6Mn0sYXV0b0NvbXBsZXRlOnt0eXBlOlN0cmluZyxkZWZhdWx0OiJvZmYifSxmb3JtOlN0cmluZyxtYXhsZW5ndGg6TnVtYmVyLG1pbmxlbmd0aDpOdW1iZXIsbWF4Ont9LG1pbjp7fSxzdGVwOnt9LHZhbGlkYXRlRXZlbnQ6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiEwfSxvbkljb25DbGljazpGdW5jdGlvbn0sY29tcHV0ZWQ6e3ZhbGlkYXRpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idmFsaWRhdGluZyI9PT10aGlzLiRwYXJlbnQudmFsaWRhdGVTdGF0ZX0sdGV4dGFyZWFTdHlsZTpmdW5jdGlvbigpe3JldHVybigwLHUuZGVmYXVsdCkoe30sdGhpcy50ZXh0YXJlYUNhbGNTdHlsZSx7cmVzaXplOnRoaXMucmVzaXplfSl9fSx3YXRjaDp7dmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzLnNldEN1cnJlbnRWYWx1ZShlKX19LG1ldGhvZHM6e2hhbmRsZUJsdXI6ZnVuY3Rpb24oZSl7dGhpcy4kZW1pdCgiYmx1ciIsZSksdGhpcy52YWxpZGF0ZUV2ZW50JiZ0aGlzLmRpc3BhdGNoKCJFbEZvcm1JdGVtIiwiZWwuZm9ybS5ibHVyIixbdGhpcy5jdXJyZW50VmFsdWVdKX0saW5wdXRTZWxlY3Q6ZnVuY3Rpb24oKXt0aGlzLiRyZWZzLmlucHV0LnNlbGVjdCgpfSxyZXNpemVUZXh0YXJlYTpmdW5jdGlvbigpe2lmKCF0aGlzLiRpc1NlcnZlcil7dmFyIGU9dGhpcy5hdXRvc2l6ZSx0PXRoaXMudHlwZTtpZihlJiYidGV4dGFyZWEiPT09dCl7dmFyIGk9ZS5taW5Sb3dzLG49ZS5tYXhSb3dzO3RoaXMudGV4dGFyZWFDYWxjU3R5bGU9KDAsci5kZWZhdWx0KSh0aGlzLiRyZWZzLnRleHRhcmVhLGksbil9fX0saGFuZGxlRm9jdXM6ZnVuY3Rpb24oZSl7dGhpcy4kZW1pdCgiZm9jdXMiLGUpfSxoYW5kbGVJbnB1dDpmdW5jdGlvbihlKXt2YXIgdD1lLnRhcmdldC52YWx1ZTt0aGlzLiRlbWl0KCJpbnB1dCIsdCksdGhpcy5zZXRDdXJyZW50VmFsdWUodCksdGhpcy4kZW1pdCgiY2hhbmdlIix0KX0saGFuZGxlSWNvbkNsaWNrOmZ1bmN0aW9uKGUpe3RoaXMub25JY29uQ2xpY2smJnRoaXMub25JY29uQ2xpY2soZSksdGhpcy4kZW1pdCgiY2xpY2siLGUpfSxzZXRDdXJyZW50VmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztlIT09dGhpcy5jdXJyZW50VmFsdWUmJih0aGlzLiRuZXh0VGljayhmdW5jdGlvbihlKXt0LnJlc2l6ZVRleHRhcmVhKCl9KSx0aGlzLmN1cnJlbnRWYWx1ZT1lLHRoaXMudmFsaWRhdGVFdmVudCYmdGhpcy5kaXNwYXRjaCgiRWxGb3JtSXRlbSIsImVsLmZvcm0uY2hhbmdlIixbZV0pKX19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLiRvbigiaW5wdXRTZWxlY3QiLHRoaXMuaW5wdXRTZWxlY3QpfSxtb3VudGVkOmZ1bmN0aW9uKCl7dGhpcy5yZXNpemVUZXh0YXJlYSgpfX19LGZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGkoZSl7dmFyIHQ9d2luZG93LmdldENvbXB1dGVkU3R5bGUoZSksaT10LmdldFByb3BlcnR5VmFsdWUoImJveC1zaXppbmciKSxuPXBhcnNlRmxvYXQodC5nZXRQcm9wZXJ0eVZhbHVlKCJwYWRkaW5nLWJvdHRvbSIpKStwYXJzZUZsb2F0KHQuZ2V0UHJvcGVydHlWYWx1ZSgicGFkZGluZy10b3AiKSkscz1wYXJzZUZsb2F0KHQuZ2V0UHJvcGVydHlWYWx1ZSgiYm9yZGVyLWJvdHRvbS13aWR0aCIpKStwYXJzZUZsb2F0KHQuZ2V0UHJvcGVydHlWYWx1ZSgiYm9yZGVyLXRvcC13aWR0aCIpKSxvPWEubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlKyI6Iit0LmdldFByb3BlcnR5VmFsdWUoZSl9KS5qb2luKCI7Iik7cmV0dXJue2NvbnRleHRTdHlsZTpvLHBhZGRpbmdTaXplOm4sYm9yZGVyU2l6ZTpzLGJveFNpemluZzppfX1mdW5jdGlvbiBuKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsLG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOm51bGw7c3x8KHM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGV4dGFyZWEiKSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHMpKTt2YXIgYT1pKGUpLHI9YS5wYWRkaW5nU2l6ZSxsPWEuYm9yZGVyU2l6ZSx1PWEuYm94U2l6aW5nLGM9YS5jb250ZXh0U3R5bGU7cy5zZXRBdHRyaWJ1dGUoInN0eWxlIixjKyI7IitvKSxzLnZhbHVlPWUudmFsdWV8fGUucGxhY2Vob2xkZXJ8fCIiO3ZhciBkPXMuc2Nyb2xsSGVpZ2h0OyJib3JkZXItYm94Ij09PXU/ZCs9bDoiY29udGVudC1ib3giPT09dSYmKGQtPXIpLHMudmFsdWU9IiI7dmFyIGg9cy5zY3JvbGxIZWlnaHQtcjtpZihudWxsIT09dCl7dmFyIGY9aCp0OyJib3JkZXItYm94Ij09PXUmJihmPWYrcitsKSxkPU1hdGgubWF4KGYsZCl9aWYobnVsbCE9PW4pe3ZhciBwPWgqbjsiYm9yZGVyLWJveCI9PT11JiYocD1wK3IrbCksZD1NYXRoLm1pbihwLGQpfXJldHVybntoZWlnaHQ6ZCsicHgifX10Ll9fZXNNb2R1bGU9ITAsdC5kZWZhdWx0PW47dmFyIHM9dm9pZCAwLG89IlxuICBoZWlnaHQ6MCAhaW1wb3J0YW50O1xuICB2aXNpYmlsaXR5OmhpZGRlbiAhaW1wb3J0YW50O1xuICBvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudDtcbiAgcG9zaXRpb246YWJzb2x1dGUgIWltcG9ydGFudDtcbiAgei1pbmRleDotMTAwMCAhaW1wb3J0YW50O1xuICB0b3A6MCAhaW1wb3J0YW50O1xuICByaWdodDowICFpbXBvcnRhbnRcbiIsYT1bImxldHRlci1zcGFjaW5nIiwibGluZS1oZWlnaHQiLCJwYWRkaW5nLXRvcCIsInBhZGRpbmctYm90dG9tIiwiZm9udC1mYW1pbHkiLCJmb250LXdlaWdodCIsImZvbnQtc2l6ZSIsInRleHQtcmVuZGVyaW5nIiwidGV4dC10cmFuc2Zvcm0iLCJ3aWR0aCIsInRleHQtaW5kZW50IiwicGFkZGluZy1sZWZ0IiwicGFkZGluZy1yaWdodCIsImJvcmRlci13aWR0aCIsImJveC1zaXppbmciXX0sZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7dC5fX2VzTW9kdWxlPSEwLHQuZGVmYXVsdD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MSxpPWFyZ3VtZW50cy5sZW5ndGg7dDxpO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdfHx7fTtmb3IodmFyIHMgaW4gbilpZihuLmhhc093blByb3BlcnR5KHMpKXt2YXIgbz1uW3NdO3ZvaWQgMCE9PW8mJihlW3NdPW8pfX1yZXR1cm4gZX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxpPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIGkoImRpdiIse2NsYXNzOlsidGV4dGFyZWEiPT09ZS50eXBlPyJlbC10ZXh0YXJlYSI6ImVsLWlucHV0IixlLnNpemU/ImVsLWlucHV0LS0iK2Uuc2l6ZToiIix7ImlzLWRpc2FibGVkIjplLmRpc2FibGVkLCJlbC1pbnB1dC1ncm91cCI6ZS4kc2xvdHMucHJlcGVuZHx8ZS4kc2xvdHMuYXBwZW5kLCJlbC1pbnB1dC1ncm91cC0tYXBwZW5kIjplLiRzbG90cy5hcHBlbmQsImVsLWlucHV0LWdyb3VwLS1wcmVwZW5kIjplLiRzbG90cy5wcmVwZW5kfV19LFsidGV4dGFyZWEiIT09ZS50eXBlP1tlLiRzbG90cy5wcmVwZW5kP2koImRpdiIse3N0YXRpY0NsYXNzOiJlbC1pbnB1dC1ncm91cF9fcHJlcGVuZCJ9LFtlLl90KCJwcmVwZW5kIildLDIpOmUuX2UoKSxlLl90KCJpY29uIixbZS5pY29uP2koImkiLHtzdGF0aWNDbGFzczoiZWwtaW5wdXRfX2ljb24iLGNsYXNzOlsiZWwtaWNvbi0iK2UuaWNvbixlLm9uSWNvbkNsaWNrPyJpcy1jbGlja2FibGUiOiIiXSxvbjp7Y2xpY2s6ZS5oYW5kbGVJY29uQ2xpY2t9fSk6ZS5fZSgpXSksInRleHRhcmVhIiE9PWUudHlwZT9pKCJpbnB1dCIse3JlZjoiaW5wdXQiLHN0YXRpY0NsYXNzOiJlbC1pbnB1dF9faW5uZXIiLGF0dHJzOnt0eXBlOmUudHlwZSxuYW1lOmUubmFtZSxwbGFjZWhvbGRlcjplLnBsYWNlaG9sZGVyLGRpc2FibGVkOmUuZGlzYWJsZWQscmVhZG9ubHk6ZS5yZWFkb25seSxtYXhsZW5ndGg6ZS5tYXhsZW5ndGgsbWlubGVuZ3RoOmUubWlubGVuZ3RoLGF1dG9jb21wbGV0ZTplLmF1dG9Db21wbGV0ZSwKYXV0b2ZvY3VzOmUuYXV0b2ZvY3VzLG1pbjplLm1pbixtYXg6ZS5tYXgsc3RlcDplLnN0ZXAsZm9ybTplLmZvcm19LGRvbVByb3BzOnt2YWx1ZTplLmN1cnJlbnRWYWx1ZX0sb246e2lucHV0OmUuaGFuZGxlSW5wdXQsZm9jdXM6ZS5oYW5kbGVGb2N1cyxibHVyOmUuaGFuZGxlQmx1cn19KTplLl9lKCksZS52YWxpZGF0aW5nP2koImkiLHtzdGF0aWNDbGFzczoiZWwtaW5wdXRfX2ljb24gZWwtaWNvbi1sb2FkaW5nIn0pOmUuX2UoKSxlLiRzbG90cy5hcHBlbmQ/aSgiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLWlucHV0LWdyb3VwX19hcHBlbmQifSxbZS5fdCgiYXBwZW5kIildLDIpOmUuX2UoKV06aSgidGV4dGFyZWEiLHtyZWY6InRleHRhcmVhIixzdGF0aWNDbGFzczoiZWwtdGV4dGFyZWFfX2lubmVyIixzdHlsZTplLnRleHRhcmVhU3R5bGUsYXR0cnM6e25hbWU6ZS5uYW1lLHBsYWNlaG9sZGVyOmUucGxhY2Vob2xkZXIsZGlzYWJsZWQ6ZS5kaXNhYmxlZCxyZWFkb25seTplLnJlYWRvbmx5LHJvd3M6ZS5yb3dzLGZvcm06ZS5mb3JtLGF1dG9mb2N1czplLmF1dG9mb2N1cyxtYXhsZW5ndGg6ZS5tYXhsZW5ndGgsbWlubGVuZ3RoOmUubWlubGVuZ3RofSxkb21Qcm9wczp7dmFsdWU6ZS5jdXJyZW50VmFsdWV9LG9uOntpbnB1dDplLmhhbmRsZUlucHV0LGZvY3VzOmUuaGFuZGxlRm9jdXMsYmx1cjplLmhhbmRsZUJsdXJ9fSldLDIpfSxzdGF0aWNSZW5kZXJGbnM6W119fSxmdW5jdGlvbihlLHQsaSl7dmFyIG49aSg1KShpKDI2KSxpKDMzKSxudWxsLG51bGwpO2UuZXhwb3J0cz1uLmV4cG9ydHN9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5fX2VzTW9kdWxlPSEwO3ZhciBzPWkoMjcpLG89bihzKTt0LmRlZmF1bHQ9e25hbWU6IkVsU2VsZWN0RHJvcGRvd24iLGNvbXBvbmVudE5hbWU6IkVsU2VsZWN0RHJvcGRvd24iLG1peGluczpbby5kZWZhdWx0XSxwcm9wczp7cGxhY2VtZW50OntkZWZhdWx0OiJib3R0b20tc3RhcnQifSxib3VuZGFyaWVzUGFkZGluZzp7ZGVmYXVsdDowfSxwb3BwZXJPcHRpb25zOntkZWZhdWx0OmZ1bmN0aW9uKCl7cmV0dXJue2ZvcmNlQWJzb2x1dGU6ITAsZ3B1QWNjZWxlcmF0aW9uOiExfX19fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue21pbldpZHRoOiIifX0sY29tcHV0ZWQ6e3BvcHBlckNsYXNzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHBhcmVudC5wb3BwZXJDbGFzc319LHdhdGNoOnsiJHBhcmVudC5pbnB1dFdpZHRoIjpmdW5jdGlvbigpe3RoaXMubWluV2lkdGg9dGhpcy4kcGFyZW50LiRlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCsicHgifX0sbW91bnRlZDpmdW5jdGlvbigpe3RoaXMucmVmZXJlbmNlRWxtPXRoaXMuJHBhcmVudC4kcmVmcy5yZWZlcmVuY2UuJGVsLHRoaXMuJHBhcmVudC5wb3BwZXJFbG09dGhpcy5wb3BwZXJFbG09dGhpcy4kZWwsdGhpcy4kb24oInVwZGF0ZVBvcHBlciIsdGhpcy51cGRhdGVQb3BwZXIpLHRoaXMuJG9uKCJkZXN0cm95UG9wcGVyIix0aGlzLmRlc3Ryb3lQb3BwZXIpfX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5fX2VzTW9kdWxlPSEwO3ZhciBzPWkoMTUpLG89bihzKSxhPWkoMjgpLHI9by5kZWZhdWx0LnByb3RvdHlwZS4kaXNTZXJ2ZXI/ZnVuY3Rpb24oKXt9OmkoMzIpLGw9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3RvcFByb3BhZ2F0aW9uKCl9O3QuZGVmYXVsdD17cHJvcHM6e3BsYWNlbWVudDp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiYm90dG9tIn0sYm91bmRhcmllc1BhZGRpbmc6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6NX0scmVmZXJlbmNlOnt9LHBvcHBlcjp7fSxvZmZzZXQ6e2RlZmF1bHQ6MH0sdmFsdWU6Qm9vbGVhbix2aXNpYmxlQXJyb3c6Qm9vbGVhbix0cmFuc2l0aW9uOlN0cmluZyxhcHBlbmRUb0JvZHk6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiEwfSxwb3BwZXJPcHRpb25zOnt0eXBlOk9iamVjdCxkZWZhdWx0OmZ1bmN0aW9uKCl7cmV0dXJue2dwdUFjY2VsZXJhdGlvbjohMX19fX0sZGF0YTpmdW5jdGlvbigpe3JldHVybntzaG93UG9wcGVyOiExLGN1cnJlbnRQbGFjZW1lbnQ6IiJ9fSx3YXRjaDp7dmFsdWU6e2ltbWVkaWF0ZTohMCxoYW5kbGVyOmZ1bmN0aW9uKGUpe3RoaXMuc2hvd1BvcHBlcj1lLHRoaXMuJGVtaXQoImlucHV0IixlKX19LHNob3dQb3BwZXI6ZnVuY3Rpb24oZSl7ZT90aGlzLnVwZGF0ZVBvcHBlcigpOnRoaXMuZGVzdHJveVBvcHBlcigpLHRoaXMuJGVtaXQoImlucHV0IixlKX19LG1ldGhvZHM6e2NyZWF0ZVBvcHBlcjpmdW5jdGlvbigpe3ZhciBlPXRoaXM7aWYoIXRoaXMuJGlzU2VydmVyJiYodGhpcy5jdXJyZW50UGxhY2VtZW50PXRoaXMuY3VycmVudFBsYWNlbWVudHx8dGhpcy5wbGFjZW1lbnQsL14odG9wfGJvdHRvbXxsZWZ0fHJpZ2h0KSgtc3RhcnR8LWVuZCk/JC9nLnRlc3QodGhpcy5jdXJyZW50UGxhY2VtZW50KSkpe3ZhciB0PXRoaXMucG9wcGVyT3B0aW9ucyxpPXRoaXMucG9wcGVyRWxtPXRoaXMucG9wcGVyRWxtfHx0aGlzLnBvcHBlcnx8dGhpcy4kcmVmcy5wb3BwZXIsbj10aGlzLnJlZmVyZW5jZUVsbT10aGlzLnJlZmVyZW5jZUVsbXx8dGhpcy5yZWZlcmVuY2V8fHRoaXMuJHJlZnMucmVmZXJlbmNlOyFuJiZ0aGlzLiRzbG90cy5yZWZlcmVuY2UmJnRoaXMuJHNsb3RzLnJlZmVyZW5jZVswXSYmKG49dGhpcy5yZWZlcmVuY2VFbG09dGhpcy4kc2xvdHMucmVmZXJlbmNlWzBdLmVsbSksaSYmbiYmKHRoaXMudmlzaWJsZUFycm93JiZ0aGlzLmFwcGVuZEFycm93KGkpLHRoaXMuYXBwZW5kVG9Cb2R5JiZkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMucG9wcGVyRWxtKSx0aGlzLnBvcHBlckpTJiZ0aGlzLnBvcHBlckpTLmRlc3Ryb3kmJnRoaXMucG9wcGVySlMuZGVzdHJveSgpLHQucGxhY2VtZW50PXRoaXMuY3VycmVudFBsYWNlbWVudCx0Lm9mZnNldD10aGlzLm9mZnNldCx0aGlzLnBvcHBlckpTPW5ldyByKG4saSx0KSx0aGlzLnBvcHBlckpTLm9uQ3JlYXRlKGZ1bmN0aW9uKHQpe2UuJGVtaXQoImNyZWF0ZWQiLGUpLGUucmVzZXRUcmFuc2Zvcm1PcmlnaW4oKSxlLiRuZXh0VGljayhlLnVwZGF0ZVBvcHBlcil9KSwiZnVuY3Rpb24iPT10eXBlb2YgdC5vblVwZGF0ZSYmdGhpcy5wb3BwZXJKUy5vblVwZGF0ZSh0Lm9uVXBkYXRlKSx0aGlzLnBvcHBlckpTLl9wb3BwZXIuc3R5bGUuekluZGV4PWEuUG9wdXBNYW5hZ2VyLm5leHRaSW5kZXgoKSx0aGlzLnBvcHBlckVsbS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsbCkpfX0sdXBkYXRlUG9wcGVyOmZ1bmN0aW9uKCl7dGhpcy5wb3BwZXJKUz90aGlzLnBvcHBlckpTLnVwZGF0ZSgpOnRoaXMuY3JlYXRlUG9wcGVyKCl9LGRvRGVzdHJveTpmdW5jdGlvbigpeyF0aGlzLnNob3dQb3BwZXImJnRoaXMucG9wcGVySlMmJih0aGlzLnBvcHBlckpTLmRlc3Ryb3koKSx0aGlzLnBvcHBlckpTPW51bGwpfSxkZXN0cm95UG9wcGVyOmZ1bmN0aW9uKCl7dGhpcy5wb3BwZXJKUyYmdGhpcy5yZXNldFRyYW5zZm9ybU9yaWdpbigpfSxyZXNldFRyYW5zZm9ybU9yaWdpbjpmdW5jdGlvbigpe3ZhciBlPXt0b3A6ImJvdHRvbSIsYm90dG9tOiJ0b3AiLGxlZnQ6InJpZ2h0IixyaWdodDoibGVmdCJ9LHQ9dGhpcy5wb3BwZXJKUy5fcG9wcGVyLmdldEF0dHJpYnV0ZSgieC1wbGFjZW1lbnQiKS5zcGxpdCgiLSIpWzBdLGk9ZVt0XTt0aGlzLnBvcHBlckpTLl9wb3BwZXIuc3R5bGUudHJhbnNmb3JtT3JpZ2luPVsidG9wIiwiYm90dG9tIl0uaW5kZXhPZih0KT4tMT8iY2VudGVyICIraTppKyIgY2VudGVyIn0sYXBwZW5kQXJyb3c6ZnVuY3Rpb24oZSl7dmFyIHQ9dm9pZCAwO2lmKCF0aGlzLmFwcGVuZGVkKXt0aGlzLmFwcGVuZGVkPSEwO2Zvcih2YXIgaSBpbiBlLmF0dHJpYnV0ZXMpaWYoL15fdi0vLnRlc3QoZS5hdHRyaWJ1dGVzW2ldLm5hbWUpKXt0PWUuYXR0cmlidXRlc1tpXS5uYW1lO2JyZWFrfXZhciBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3QmJm4uc2V0QXR0cmlidXRlKHQsIiIpLG4uc2V0QXR0cmlidXRlKCJ4LWFycm93IiwiIiksbi5jbGFzc05hbWU9InBvcHBlcl9fYXJyb3ciLGUuYXBwZW5kQ2hpbGQobil9fX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe3RoaXMuZG9EZXN0cm95KCksdGhpcy5wb3BwZXJFbG0mJnRoaXMucG9wcGVyRWxtLnBhcmVudE5vZGU9PT1kb2N1bWVudC5ib2R5JiYodGhpcy5wb3BwZXJFbG0ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLGwpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGhpcy5wb3BwZXJFbG0pKX0sZGVhY3RpdmF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLiRvcHRpb25zLmJlZm9yZURlc3Ryb3lbMF0uY2FsbCh0aGlzKX19fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXQuX19lc01vZHVsZT0hMCx0LlBvcHVwTWFuYWdlcj12b2lkIDA7dmFyIHM9aSgxNSksbz1uKHMpLGE9aSgyMykscj1uKGEpLGw9aSgyOSksdT1uKGwpLGM9aSgzMSksZD1uKGMpLGg9MSxmPVtdLHA9ZnVuY3Rpb24oZSl7aWYoZi5pbmRleE9mKGUpPT09LTEpe3ZhciB0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuX192dWVfXztpZighdCl7dmFyIGk9ZS5wcmV2aW91c1NpYmxpbmc7aS5fX3Z1ZV9fJiYodD1pLl9fdnVlX18pfXJldHVybiB0fTtvLmRlZmF1bHQudHJhbnNpdGlvbihlLHthZnRlckVudGVyOmZ1bmN0aW9uKGUpe3ZhciBpPXQoZSk7aSYmaS5kb0FmdGVyT3BlbiYmaS5kb0FmdGVyT3BlbigpfSxhZnRlckxlYXZlOmZ1bmN0aW9uKGUpe3ZhciBpPXQoZSk7aSYmaS5kb0FmdGVyQ2xvc2UmJmkuZG9BZnRlckNsb3NlKCl9fSl9fSxtPXZvaWQgMCx2PWZ1bmN0aW9uIGUodCl7cmV0dXJuIDM9PT10Lm5vZGVUeXBlJiYodD10Lm5leHRFbGVtZW50U2libGluZ3x8dC5uZXh0U2libGluZyxlKHQpKSx0fTt0LmRlZmF1bHQ9e3Byb3BzOnt2YWx1ZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LHRyYW5zaXRpb246e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9LG9wZW5EZWxheTp7fSxjbG9zZURlbGF5Ont9LHpJbmRleDp7fSxtb2RhbDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LG1vZGFsRmFkZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITB9LG1vZGFsQ2xhc3M6e30sbW9kYWxBcHBlbmRUb0JvZHk6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxsb2NrU2Nyb2xsOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMH0sY2xvc2VPblByZXNzRXNjYXBlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sY2xvc2VPbkNsaWNrTW9kYWw6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfX0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMudHJhbnNpdGlvbiYmcCh0aGlzLnRyYW5zaXRpb24pfSxiZWZvcmVNb3VudDpmdW5jdGlvbigpe3RoaXMuX3BvcHVwSWQ9InBvcHVwLSIraCsrLHUuZGVmYXVsdC5yZWdpc3Rlcih0aGlzLl9wb3B1cElkLHRoaXMpfSxiZWZvcmVEZXN0cm95OmZ1bmN0aW9uKCl7dS5kZWZhdWx0LmRlcmVnaXN0ZXIodGhpcy5fcG9wdXBJZCksdS5kZWZhdWx0LmNsb3NlTW9kYWwodGhpcy5fcG9wdXBJZCksdGhpcy5tb2RhbCYmbnVsbCE9PXRoaXMuYm9keU92ZXJmbG93JiYiaGlkZGVuIiE9PXRoaXMuYm9keU92ZXJmbG93JiYoZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdz10aGlzLmJvZHlPdmVyZmxvdyxkb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmdSaWdodD10aGlzLmJvZHlQYWRkaW5nUmlnaHQpLHRoaXMuYm9keU92ZXJmbG93PW51bGwsdGhpcy5ib2R5UGFkZGluZ1JpZ2h0PW51bGx9LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57b3BlbmVkOiExLGJvZHlPdmVyZmxvdzpudWxsLGJvZHlQYWRkaW5nUmlnaHQ6bnVsbCxyZW5kZXJlZDohMX19LHdhdGNoOnt2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzO2lmKGUpe2lmKHRoaXMuX29wZW5pbmcpcmV0dXJuO3RoaXMucmVuZGVyZWQ/dGhpcy5vcGVuKCk6KHRoaXMucmVuZGVyZWQ9ITAsby5kZWZhdWx0Lm5leHRUaWNrKGZ1bmN0aW9uKCl7dC5vcGVuKCl9KSl9ZWxzZSB0aGlzLmNsb3NlKCl9fSxtZXRob2RzOntvcGVuOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dGhpcy5yZW5kZXJlZHx8KHRoaXMucmVuZGVyZWQ9ITAsdGhpcy4kZW1pdCgiaW5wdXQiLCEwKSk7dmFyIGk9KDAsci5kZWZhdWx0KSh7fSx0aGlzLiRwcm9wc3x8dGhpcyxlKTt0aGlzLl9jbG9zZVRpbWVyJiYoY2xlYXJUaW1lb3V0KHRoaXMuX2Nsb3NlVGltZXIpLHRoaXMuX2Nsb3NlVGltZXI9bnVsbCksY2xlYXJUaW1lb3V0KHRoaXMuX29wZW5UaW1lcik7dmFyIG49TnVtYmVyKGkub3BlbkRlbGF5KTtuPjA/dGhpcy5fb3BlblRpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXt0Ll9vcGVuVGltZXI9bnVsbCx0LmRvT3BlbihpKX0sbik6dGhpcy5kb09wZW4oaSl9LGRvT3BlbjpmdW5jdGlvbihlKXtpZighdGhpcy4kaXNTZXJ2ZXImJighdGhpcy53aWxsT3Blbnx8dGhpcy53aWxsT3BlbigpKSYmIXRoaXMub3BlbmVkKXt0aGlzLl9vcGVuaW5nPSEwLHRoaXMudmlzaWJsZT0hMCx0aGlzLiRlbWl0KCJpbnB1dCIsITApO3ZhciB0PXYodGhpcy4kZWwpLGk9ZS5tb2RhbCxuPWUuekluZGV4O2lmKG4mJih1LmRlZmF1bHQuekluZGV4PW4pLGkmJih0aGlzLl9jbG9zaW5nJiYodS5kZWZhdWx0LmNsb3NlTW9kYWwodGhpcy5fcG9wdXBJZCksdGhpcy5fY2xvc2luZz0hMSksdS5kZWZhdWx0Lm9wZW5Nb2RhbCh0aGlzLl9wb3B1cElkLHUuZGVmYXVsdC5uZXh0WkluZGV4KCksdGhpcy5tb2RhbEFwcGVuZFRvQm9keT92b2lkIDA6dCxlLm1vZGFsQ2xhc3MsZS5tb2RhbEZhZGUpLGUubG9ja1Njcm9sbCkpe3RoaXMuYm9keU92ZXJmbG93fHwodGhpcy5ib2R5UGFkZGluZ1JpZ2h0PWRvY3VtZW50LmJvZHkuc3R5bGUucGFkZGluZ1JpZ2h0LHRoaXMuYm9keU92ZXJmbG93PWRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cpLG09KDAsZC5kZWZhdWx0KSgpO3ZhciBzPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ8ZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQ7bT4wJiZzJiYoZG9jdW1lbnQuYm9keS5zdHlsZS5wYWRkaW5nUmlnaHQ9bSsicHgiKSxkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93PSJoaWRkZW4ifSJzdGF0aWMiPT09Z2V0Q29tcHV0ZWRTdHlsZSh0KS5wb3NpdGlvbiYmKHQuc3R5bGUucG9zaXRpb249ImFic29sdXRlIiksdC5zdHlsZS56SW5kZXg9dS5kZWZhdWx0Lm5leHRaSW5kZXgoKSx0aGlzLm9wZW5lZD0hMCx0aGlzLm9uT3BlbiYmdGhpcy5vbk9wZW4oKSx0aGlzLnRyYW5zaXRpb258fHRoaXMuZG9BZnRlck9wZW4oKX19LGRvQWZ0ZXJPcGVuOmZ1bmN0aW9uKCl7dGhpcy5fb3BlbmluZz0hMX0sY2xvc2U6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKCF0aGlzLndpbGxDbG9zZXx8dGhpcy53aWxsQ2xvc2UoKSl7bnVsbCE9PXRoaXMuX29wZW5UaW1lciYmKGNsZWFyVGltZW91dCh0aGlzLl9vcGVuVGltZXIpLHRoaXMuX29wZW5UaW1lcj1udWxsKSxjbGVhclRpbWVvdXQodGhpcy5fY2xvc2VUaW1lcik7dmFyIHQ9TnVtYmVyKHRoaXMuY2xvc2VEZWxheSk7dD4wP3RoaXMuX2Nsb3NlVGltZXI9c2V0VGltZW91dChmdW5jdGlvbigpe2UuX2Nsb3NlVGltZXI9bnVsbCxlLmRvQ2xvc2UoKX0sdCk6dGhpcy5kb0Nsb3NlKCl9fSxkb0Nsb3NlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLnZpc2libGU9ITEsdGhpcy4kZW1pdCgiaW5wdXQiLCExKSx0aGlzLl9jbG9zaW5nPSEwLHRoaXMub25DbG9zZSYmdGhpcy5vbkNsb3NlKCksdGhpcy5sb2NrU2Nyb2xsJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5tb2RhbCYmImhpZGRlbiIhPT1lLmJvZHlPdmVyZmxvdyYmKGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c9ZS5ib2R5T3ZlcmZsb3csZG9jdW1lbnQuYm9keS5zdHlsZS5wYWRkaW5nUmlnaHQ9ZS5ib2R5UGFkZGluZ1JpZ2h0KSxlLmJvZHlPdmVyZmxvdz1udWxsLGUuYm9keVBhZGRpbmdSaWdodD1udWxsfSwyMDApLHRoaXMub3BlbmVkPSExLHRoaXMudHJhbnNpdGlvbnx8dGhpcy5kb0FmdGVyQ2xvc2UoKX0sZG9BZnRlckNsb3NlOmZ1bmN0aW9uKCl7dS5kZWZhdWx0LmNsb3NlTW9kYWwodGhpcy5fcG9wdXBJZCksdGhpcy5fY2xvc2luZz0hMX19fSx0LlBvcHVwTWFuYWdlcj11LmRlZmF1bHR9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5fX2VzTW9kdWxlPSEwO3ZhciBzPWkoMTUpLG89bihzKSxhPWkoMzApLHI9ITEsbD1mdW5jdGlvbigpe2lmKCFvLmRlZmF1bHQucHJvdG90eXBlLiRpc1NlcnZlcil7dmFyIGU9Yy5tb2RhbERvbTtyZXR1cm4gZT9yPSEwOihyPSExLGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksYy5tb2RhbERvbT1lLGUuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIixmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKX0pLGUuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7Yy5kb09uTW9kYWxDbGljayYmYy5kb09uTW9kYWxDbGljaygpfSkpLGV9fSx1PXt9LGM9e3pJbmRleDoyZTMsbW9kYWxGYWRlOiEwLGdldEluc3RhbmNlOmZ1bmN0aW9uKGUpe3JldHVybiB1W2VdfSxyZWdpc3RlcjpmdW5jdGlvbihlLHQpe2UmJnQmJih1W2VdPXQpfSxkZXJlZ2lzdGVyOmZ1bmN0aW9uKGUpe2UmJih1W2VdPW51bGwsZGVsZXRlIHVbZV0pfSxuZXh0WkluZGV4OmZ1bmN0aW9uKCl7cmV0dXJuIGMuekluZGV4Kyt9LG1vZGFsU3RhY2s6W10sZG9Pbk1vZGFsQ2xpY2s6ZnVuY3Rpb24oKXt2YXIgZT1jLm1vZGFsU3RhY2tbYy5tb2RhbFN0YWNrLmxlbmd0aC0xXTtpZihlKXt2YXIgdD1jLmdldEluc3RhbmNlKGUuaWQpO3QmJnQuY2xvc2VPbkNsaWNrTW9kYWwmJnQuY2xvc2UoKX19LG9wZW5Nb2RhbDpmdW5jdGlvbihlLHQsaSxuLHMpe2lmKCFvLmRlZmF1bHQucHJvdG90eXBlLiRpc1NlcnZlciYmZSYmdm9pZCAwIT09dCl7dGhpcy5tb2RhbEZhZGU9cztmb3IodmFyIHU9dGhpcy5tb2RhbFN0YWNrLGM9MCxkPXUubGVuZ3RoO2M8ZDtjKyspe3ZhciBoPXVbY107aWYoaC5pZD09PWUpcmV0dXJufXZhciBmPWwoKTtpZigoMCxhLmFkZENsYXNzKShmLCJ2LW1vZGFsIiksdGhpcy5tb2RhbEZhZGUmJiFyJiYoMCxhLmFkZENsYXNzKShmLCJ2LW1vZGFsLWVudGVyIiksbil7dmFyIHA9bi50cmltKCkuc3BsaXQoL1xzKy8pO3AuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4oMCxhLmFkZENsYXNzKShmLGUpfSl9c2V0VGltZW91dChmdW5jdGlvbigpeygwLGEucmVtb3ZlQ2xhc3MpKGYsInYtbW9kYWwtZW50ZXIiKX0sMjAwKSxpJiZpLnBhcmVudE5vZGUmJjExIT09aS5wYXJlbnROb2RlLm5vZGVUeXBlP2kucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChmKTpkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGYpLHQmJihmLnN0eWxlLnpJbmRleD10KSxmLnN0eWxlLmRpc3BsYXk9IiIsdGhpcy5tb2RhbFN0YWNrLnB1c2goe2lkOmUsekluZGV4OnQsbW9kYWxDbGFzczpufSl9fSxjbG9zZU1vZGFsOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubW9kYWxTdGFjayxpPWwoKTtpZih0Lmxlbmd0aD4wKXt2YXIgbj10W3QubGVuZ3RoLTFdO2lmKG4uaWQ9PT1lKXtpZihuLm1vZGFsQ2xhc3Mpe3ZhciBzPW4ubW9kYWxDbGFzcy50cmltKCkuc3BsaXQoL1xzKy8pO3MuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4oMCxhLnJlbW92ZUNsYXNzKShpLGUpfSl9dC5wb3AoKSx0Lmxlbmd0aD4wJiYoaS5zdHlsZS56SW5kZXg9dFt0Lmxlbmd0aC0xXS56SW5kZXgpfWVsc2UgZm9yKHZhciBvPXQubGVuZ3RoLTE7bz49MDtvLS0paWYodFtvXS5pZD09PWUpe3Quc3BsaWNlKG8sMSk7YnJlYWt9fTA9PT10Lmxlbmd0aCYmKHRoaXMubW9kYWxGYWRlJiYoMCxhLmFkZENsYXNzKShpLCJ2LW1vZGFsLWxlYXZlIiksc2V0VGltZW91dChmdW5jdGlvbigpezA9PT10Lmxlbmd0aCYmKGkucGFyZW50Tm9kZSYmaS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGkpLGkuc3R5bGUuZGlzcGxheT0ibm9uZSIsYy5tb2RhbERvbT12b2lkIDApLCgwLGEucmVtb3ZlQ2xhc3MpKGksInYtbW9kYWwtbGVhdmUiKX0sMjAwKSl9fTshby5kZWZhdWx0LnByb3RvdHlwZS4kaXNTZXJ2ZXImJndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixmdW5jdGlvbihlKXtpZigyNz09PWUua2V5Q29kZSYmYy5tb2RhbFN0YWNrLmxlbmd0aD4wKXt2YXIgdD1jLm1vZGFsU3RhY2tbYy5tb2RhbFN0YWNrLmxlbmd0aC0xXTtpZighdClyZXR1cm47dmFyIGk9Yy5nZXRJbnN0YW5jZSh0LmlkKTtpLmNsb3NlT25QcmVzc0VzY2FwZSYmaS5jbG9zZSgpfX0pLHQuZGVmYXVsdD1jfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIHMoZSx0KXtpZighZXx8IXQpcmV0dXJuITE7aWYodC5pbmRleE9mKCIgIikhPT0tMSl0aHJvdyBuZXcgRXJyb3IoImNsYXNzTmFtZSBzaG91bGQgbm90IGNvbnRhaW4gc3BhY2UuIik7cmV0dXJuIGUuY2xhc3NMaXN0P2UuY2xhc3NMaXN0LmNvbnRhaW5zKHQpOigiICIrZS5jbGFzc05hbWUrIiAiKS5pbmRleE9mKCIgIit0KyIgIik+LTF9ZnVuY3Rpb24gbyhlLHQpe2lmKGUpe2Zvcih2YXIgaT1lLmNsYXNzTmFtZSxuPSh0fHwiIikuc3BsaXQoIiAiKSxvPTAsYT1uLmxlbmd0aDtvPGE7bysrKXt2YXIgcj1uW29dO3ImJihlLmNsYXNzTGlzdD9lLmNsYXNzTGlzdC5hZGQocik6cyhlLHIpfHwoaSs9IiAiK3IpKX1lLmNsYXNzTGlzdHx8KGUuY2xhc3NOYW1lPWkpfX1mdW5jdGlvbiBhKGUsdCl7aWYoZSYmdCl7Zm9yKHZhciBpPXQuc3BsaXQoIiAiKSxuPSIgIitlLmNsYXNzTmFtZSsiICIsbz0wLGE9aS5sZW5ndGg7bzxhO28rKyl7dmFyIHI9aVtvXTtyJiYoZS5jbGFzc0xpc3Q/ZS5jbGFzc0xpc3QucmVtb3ZlKHIpOnMoZSxyKSYmKG49bi5yZXBsYWNlKCIgIityKyIgIiwiICIpKSl9ZS5jbGFzc0xpc3R8fChlLmNsYXNzTmFtZT1tKG4pKX19ZnVuY3Rpb24gcihlLHQsaSl7aWYoZSYmdClpZigib2JqZWN0Ij09PSgidW5kZWZpbmVkIj09dHlwZW9mIHQ/InVuZGVmaW5lZCI6bCh0KSkpZm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmcihlLG4sdFtuXSk7ZWxzZSB0PXYodCksIm9wYWNpdHkiPT09dCYmcDw5P2Uuc3R5bGUuZmlsdGVyPWlzTmFOKGkpPyIiOiJhbHBoYShvcGFjaXR5PSIrMTAwKmkrIikiOmUuc3R5bGVbdF09aX10Ll9fZXNNb2R1bGU9ITAsdC5nZXRTdHlsZT10Lm9uY2U9dC5vZmY9dC5vbj12b2lkIDA7dmFyIGw9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9O3QuaGFzQ2xhc3M9cyx0LmFkZENsYXNzPW8sdC5yZW1vdmVDbGFzcz1hLHQuc2V0U3R5bGU9cjt2YXIgdT1pKDE1KSxjPW4odSksZD1jLmRlZmF1bHQucHJvdG90eXBlLiRpc1NlcnZlcixoPS8oW1w6XC1cX10rKC4pKS9nLGY9L15tb3ooW0EtWl0pLyxwPWQ/MDpOdW1iZXIoZG9jdW1lbnQuZG9jdW1lbnRNb2RlKSxtPWZ1bmN0aW9uKGUpe3JldHVybihlfHwiIikucmVwbGFjZSgvXltcc1x1RkVGRl0rfFtcc1x1RkVGRl0rJC9nLCIiKX0sdj1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKGgsZnVuY3Rpb24oZSx0LGksbil7cmV0dXJuIG4/aS50b1VwcGVyQ2FzZSgpOml9KS5yZXBsYWNlKGYsIk1veiQxIil9LGc9dC5vbj1mdW5jdGlvbigpe3JldHVybiFkJiZkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyP2Z1bmN0aW9uKGUsdCxpKXtlJiZ0JiZpJiZlLmFkZEV2ZW50TGlzdGVuZXIodCxpLCExKX06ZnVuY3Rpb24oZSx0LGkpe2UmJnQmJmkmJmUuYXR0YWNoRXZlbnQoIm9uIit0LGkpfX0oKSx5PXQub2ZmPWZ1bmN0aW9uKCl7cmV0dXJuIWQmJmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXI/ZnVuY3Rpb24oZSx0LGkpe2UmJnQmJmUucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LGksITEpfTpmdW5jdGlvbihlLHQsaSl7ZSYmdCYmZS5kZXRhY2hFdmVudCgib24iK3QsaSl9fSgpO3Qub25jZT1mdW5jdGlvbihlLHQsaSl7dmFyIG49ZnVuY3Rpb24gbigpe2kmJmkuYXBwbHkodGhpcyxhcmd1bWVudHMpLHkoZSx0LG4pfTtnKGUsdCxuKX0sdC5nZXRTdHlsZT1wPDk/ZnVuY3Rpb24oZSx0KXtpZighZCl7aWYoIWV8fCF0KXJldHVybiBudWxsO3Q9dih0KSwiZmxvYXQiPT09dCYmKHQ9InN0eWxlRmxvYXQiKTt0cnl7c3dpdGNoKHQpe2Nhc2Uib3BhY2l0eSI6dHJ5e3JldHVybiBlLmZpbHRlcnMuaXRlbSgiYWxwaGEiKS5vcGFjaXR5LzEwMH1jYXRjaChlKXtyZXR1cm4gMX1kZWZhdWx0OnJldHVybiBlLnN0eWxlW3RdfHxlLmN1cnJlbnRTdHlsZT9lLmN1cnJlbnRTdHlsZVt0XTpudWxsfX1jYXRjaChpKXtyZXR1cm4gZS5zdHlsZVt0XX19fTpmdW5jdGlvbihlLHQpe2lmKCFkKXtpZighZXx8IXQpcmV0dXJuIG51bGw7dD12KHQpLCJmbG9hdCI9PT10JiYodD0iY3NzRmxvYXQiKTt0cnl7dmFyIGk9ZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlLCIiKTtyZXR1cm4gZS5zdHlsZVt0XXx8aT9pW3RdOm51bGx9Y2F0Y2goaSl7cmV0dXJuIGUuc3R5bGVbdF19fX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5fX2VzTW9kdWxlPSEwLHQuZGVmYXVsdD1mdW5jdGlvbigpe2lmKG8uZGVmYXVsdC5wcm90b3R5cGUuJGlzU2VydmVyKXJldHVybiAwO2lmKHZvaWQgMCE9PWEpcmV0dXJuIGE7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7ZS5jbGFzc05hbWU9ImVsLXNjcm9sbGJhcl9fd3JhcCIsZS5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4iLGUuc3R5bGUud2lkdGg9IjEwMHB4IixlLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsZS5zdHlsZS50b3A9Ii05OTk5cHgiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZSk7dmFyIHQ9ZS5vZmZzZXRXaWR0aDtlLnN0eWxlLm92ZXJmbG93PSJzY3JvbGwiO3ZhciBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2kuc3R5bGUud2lkdGg9IjEwMCUiLGUuYXBwZW5kQ2hpbGQoaSk7dmFyIG49aS5vZmZzZXRXaWR0aDtyZXR1cm4gZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGUpLHQtbn07dmFyIHM9aSgxNSksbz1uKHMpLGE9dm9pZCAwfSxmdW5jdGlvbihlLHQsaSl7dmFyIG4sczshZnVuY3Rpb24obyxhKXtuPWEscz0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmNhbGwodCxpLHQsZSk6biwhKHZvaWQgMCE9PXMmJihlLmV4cG9ydHM9cykpfSh0aGlzLGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGUoZSx0LGkpe3RoaXMuX3JlZmVyZW5jZT1lLmpxdWVyeT9lWzBdOmUsdGhpcy5zdGF0ZT17fTt2YXIgbj0idW5kZWZpbmVkIj09dHlwZW9mIHR8fG51bGw9PT10LHM9dCYmIltvYmplY3QgT2JqZWN0XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCk7cmV0dXJuIG58fHM/dGhpcy5fcG9wcGVyPXRoaXMucGFyc2Uocz90Ont9KTp0aGlzLl9wb3BwZXI9dC5qcXVlcnk/dFswXTp0LHRoaXMuX29wdGlvbnM9T2JqZWN0LmFzc2lnbih7fSx2LGkpLHRoaXMuX29wdGlvbnMubW9kaWZpZXJzPXRoaXMuX29wdGlvbnMubW9kaWZpZXJzLm1hcChmdW5jdGlvbihlKXtpZih0aGlzLl9vcHRpb25zLm1vZGlmaWVyc0lnbm9yZWQuaW5kZXhPZihlKT09PS0xKXJldHVybiJhcHBseVN0eWxlIj09PWUmJnRoaXMuX3BvcHBlci5zZXRBdHRyaWJ1dGUoIngtcGxhY2VtZW50Iix0aGlzLl9vcHRpb25zLnBsYWNlbWVudCksdGhpcy5tb2RpZmllcnNbZV18fGV9LmJpbmQodGhpcykpLHRoaXMuc3RhdGUucG9zaXRpb249dGhpcy5fZ2V0UG9zaXRpb24odGhpcy5fcG9wcGVyLHRoaXMuX3JlZmVyZW5jZSksdSh0aGlzLl9wb3BwZXIse3Bvc2l0aW9uOnRoaXMuc3RhdGUucG9zaXRpb24sdG9wOjB9KSx0aGlzLnVwZGF0ZSgpLHRoaXMuX3NldHVwRXZlbnRMaXN0ZW5lcnMoKSx0aGlzfWZ1bmN0aW9uIHQoZSl7dmFyIHQ9ZS5zdHlsZS5kaXNwbGF5LGk9ZS5zdHlsZS52aXNpYmlsaXR5O2Uuc3R5bGUuZGlzcGxheT0iYmxvY2siLGUuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIjt2YXIgbj0oZS5vZmZzZXRXaWR0aCxtLmdldENvbXB1dGVkU3R5bGUoZSkpLHM9cGFyc2VGbG9hdChuLm1hcmdpblRvcCkrcGFyc2VGbG9hdChuLm1hcmdpbkJvdHRvbSksbz1wYXJzZUZsb2F0KG4ubWFyZ2luTGVmdCkrcGFyc2VGbG9hdChuLm1hcmdpblJpZ2h0KSxhPXt3aWR0aDplLm9mZnNldFdpZHRoK28saGVpZ2h0OmUub2Zmc2V0SGVpZ2h0K3N9O3JldHVybiBlLnN0eWxlLmRpc3BsYXk9dCxlLnN0eWxlLnZpc2liaWxpdHk9aSxhfWZ1bmN0aW9uIGkoZSl7dmFyIHQ9e2xlZnQ6InJpZ2h0IixyaWdodDoibGVmdCIsYm90dG9tOiJ0b3AiLHRvcDoiYm90dG9tIn07cmV0dXJuIGUucmVwbGFjZSgvbGVmdHxyaWdodHxib3R0b218dG9wL2csZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KX1mdW5jdGlvbiBuKGUpe3ZhciB0PU9iamVjdC5hc3NpZ24oe30sZSk7cmV0dXJuIHQucmlnaHQ9dC5sZWZ0K3Qud2lkdGgsdC5ib3R0b209dC50b3ArdC5oZWlnaHQsdH1mdW5jdGlvbiBzKGUsdCl7dmFyIGksbj0wO2ZvcihpIGluIGUpe2lmKGVbaV09PT10KXJldHVybiBuO24rK31yZXR1cm4gbnVsbH1mdW5jdGlvbiBvKGUsdCl7dmFyIGk9bS5nZXRDb21wdXRlZFN0eWxlKGUsbnVsbCk7cmV0dXJuIGlbdF19ZnVuY3Rpb24gYShlKXt2YXIgdD1lLm9mZnNldFBhcmVudDtyZXR1cm4gdCE9PW0uZG9jdW1lbnQuYm9keSYmdD90Om0uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fWZ1bmN0aW9uIHIoZSl7dmFyIHQ9ZS5wYXJlbnROb2RlO3JldHVybiB0P3Q9PT1tLmRvY3VtZW50P20uZG9jdW1lbnQuYm9keS5zY3JvbGxUb3A/bS5kb2N1bWVudC5ib2R5Om0uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Olsic2Nyb2xsIiwiYXV0byJdLmluZGV4T2Yobyh0LCJvdmVyZmxvdyIpKSE9PS0xfHxbInNjcm9sbCIsImF1dG8iXS5pbmRleE9mKG8odCwib3ZlcmZsb3cteCIpKSE9PS0xfHxbInNjcm9sbCIsImF1dG8iXS5pbmRleE9mKG8odCwib3ZlcmZsb3cteSIpKSE9PS0xP3Q6cihlLnBhcmVudE5vZGUpOmV9ZnVuY3Rpb24gbChlKXtyZXR1cm4gZSE9PW0uZG9jdW1lbnQuYm9keSYmKCJmaXhlZCI9PT1vKGUsInBvc2l0aW9uIil8fChlLnBhcmVudE5vZGU/bChlLnBhcmVudE5vZGUpOmUpKX1mdW5jdGlvbiB1KGUsdCl7ZnVuY3Rpb24gaShlKXtyZXR1cm4iIiE9PWUmJiFpc05hTihwYXJzZUZsb2F0KGUpKSYmaXNGaW5pdGUoZSl9T2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcz0iIjtbIndpZHRoIiwiaGVpZ2h0IiwidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0Il0uaW5kZXhPZihuKSE9PS0xJiZpKHRbbl0pJiYocz0icHgiKSxlLnN0eWxlW25dPXRbbl0rc30pfWZ1bmN0aW9uIGMoZSl7dmFyIHQ9e307cmV0dXJuIGUmJiJbb2JqZWN0IEZ1bmN0aW9uXSI9PT10LnRvU3RyaW5nLmNhbGwoZSl9ZnVuY3Rpb24gZChlKXt2YXIgdD17d2lkdGg6ZS5vZmZzZXRXaWR0aCxoZWlnaHQ6ZS5vZmZzZXRIZWlnaHQsbGVmdDplLm9mZnNldExlZnQsdG9wOmUub2Zmc2V0VG9wfTtyZXR1cm4gdC5yaWdodD10LmxlZnQrdC53aWR0aCx0LmJvdHRvbT10LnRvcCt0LmhlaWdodCx0fWZ1bmN0aW9uIGgoZSl7dmFyIHQ9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxpPW5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiTVNJRSIpIT0tMSxuPWkmJiJIVE1MIj09PWUudGFnTmFtZT8tZS5zY3JvbGxUb3A6dC50b3A7cmV0dXJue2xlZnQ6dC5sZWZ0LHRvcDpuLHJpZ2h0OnQucmlnaHQsYm90dG9tOnQuYm90dG9tLHdpZHRoOnQucmlnaHQtdC5sZWZ0LGhlaWdodDp0LmJvdHRvbS1ufX1mdW5jdGlvbiBmKGUsdCxpKXt2YXIgbj1oKGUpLHM9aCh0KTtpZihpKXt2YXIgbz1yKHQpO3MudG9wKz1vLnNjcm9sbFRvcCxzLmJvdHRvbSs9by5zY3JvbGxUb3Ascy5sZWZ0Kz1vLnNjcm9sbExlZnQscy5yaWdodCs9by5zY3JvbGxMZWZ0fXZhciBhPXt0b3A6bi50b3Atcy50b3AsbGVmdDpuLmxlZnQtcy5sZWZ0LGJvdHRvbTpuLnRvcC1zLnRvcCtuLmhlaWdodCxyaWdodDpuLmxlZnQtcy5sZWZ0K24ud2lkdGgsd2lkdGg6bi53aWR0aCxoZWlnaHQ6bi5oZWlnaHR9O3JldHVybiBhfWZ1bmN0aW9uIHAoZSl7Zm9yKHZhciB0PVsiIiwibXMiLCJ3ZWJraXQiLCJtb3oiLCJvIl0saT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgbj10W2ldP3RbaV0rZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStlLnNsaWNlKDEpOmU7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBtLmRvY3VtZW50LmJvZHkuc3R5bGVbbl0pcmV0dXJuIG59cmV0dXJuIG51bGx9dmFyIG09d2luZG93LHY9e3BsYWNlbWVudDoiYm90dG9tIixncHVBY2NlbGVyYXRpb246ITAsb2Zmc2V0OjAsYm91bmRhcmllc0VsZW1lbnQ6InZpZXdwb3J0Iixib3VuZGFyaWVzUGFkZGluZzo1LHByZXZlbnRPdmVyZmxvd09yZGVyOlsibGVmdCIsInJpZ2h0IiwidG9wIiwiYm90dG9tIl0sZmxpcEJlaGF2aW9yOiJmbGlwIixhcnJvd0VsZW1lbnQ6Ilt4LWFycm93XSIsbW9kaWZpZXJzOlsic2hpZnQiLCJvZmZzZXQiLCJwcmV2ZW50T3ZlcmZsb3ciLCJrZWVwVG9nZXRoZXIiLCJhcnJvdyIsImZsaXAiLCJhcHBseVN0eWxlIl0sbW9kaWZpZXJzSWdub3JlZDpbXSxmb3JjZUFic29sdXRlOiExfTtyZXR1cm4gZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3BwZXIucmVtb3ZlQXR0cmlidXRlKCJ4LXBsYWNlbWVudCIpLHRoaXMuX3BvcHBlci5zdHlsZS5sZWZ0PSIiLHRoaXMuX3BvcHBlci5zdHlsZS5wb3NpdGlvbj0iIix0aGlzLl9wb3BwZXIuc3R5bGUudG9wPSIiLHRoaXMuX3BvcHBlci5zdHlsZVtwKCJ0cmFuc2Zvcm0iKV09IiIsdGhpcy5fcmVtb3ZlRXZlbnRMaXN0ZW5lcnMoKSx0aGlzLl9vcHRpb25zLnJlbW92ZU9uRGVzdHJveSYmdGhpcy5fcG9wcGVyLnJlbW92ZSgpLHRoaXN9LGUucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe3ZhciBlPXtpbnN0YW5jZTp0aGlzLHN0eWxlczp7fX07ZS5wbGFjZW1lbnQ9dGhpcy5fb3B0aW9ucy5wbGFjZW1lbnQsZS5fb3JpZ2luYWxQbGFjZW1lbnQ9dGhpcy5fb3B0aW9ucy5wbGFjZW1lbnQsZS5vZmZzZXRzPXRoaXMuX2dldE9mZnNldHModGhpcy5fcG9wcGVyLHRoaXMuX3JlZmVyZW5jZSxlLnBsYWNlbWVudCksZS5ib3VuZGFyaWVzPXRoaXMuX2dldEJvdW5kYXJpZXMoZSx0aGlzLl9vcHRpb25zLmJvdW5kYXJpZXNQYWRkaW5nLHRoaXMuX29wdGlvbnMuYm91bmRhcmllc0VsZW1lbnQpLGU9dGhpcy5ydW5Nb2RpZmllcnMoZSx0aGlzLl9vcHRpb25zLm1vZGlmaWVycyksImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuc3RhdGUudXBkYXRlQ2FsbGJhY2smJnRoaXMuc3RhdGUudXBkYXRlQ2FsbGJhY2soZSl9LGUucHJvdG90eXBlLm9uQ3JlYXRlPWZ1bmN0aW9uKGUpe3JldHVybiBlKHRoaXMpLHRoaXN9LGUucHJvdG90eXBlLm9uVXBkYXRlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnN0YXRlLnVwZGF0ZUNhbGxiYWNrPWUsdGhpc30sZS5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlLHQpe3QuZm9yRWFjaChmdW5jdGlvbih0KXtlLmNsYXNzTGlzdC5hZGQodCl9KX1mdW5jdGlvbiBpKGUsdCl7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2Uuc2V0QXR0cmlidXRlKHQuc3BsaXQoIjoiKVswXSx0LnNwbGl0KCI6IilbMV18fCIiKX0pfXZhciBuPXt0YWdOYW1lOiJkaXYiLGNsYXNzTmFtZXM6WyJwb3BwZXIiXSxhdHRyaWJ1dGVzOltdLHBhcmVudDptLmRvY3VtZW50LmJvZHksY29udGVudDoiIixjb250ZW50VHlwZToidGV4dCIsYXJyb3dUYWdOYW1lOiJkaXYiLGFycm93Q2xhc3NOYW1lczpbInBvcHBlcl9fYXJyb3ciXSxhcnJvd0F0dHJpYnV0ZXM6WyJ4LWFycm93Il19O2U9T2JqZWN0LmFzc2lnbih7fSxuLGUpO3ZhciBzPW0uZG9jdW1lbnQsbz1zLmNyZWF0ZUVsZW1lbnQoZS50YWdOYW1lKTtpZih0KG8sZS5jbGFzc05hbWVzKSxpKG8sZS5hdHRyaWJ1dGVzKSwibm9kZSI9PT1lLmNvbnRlbnRUeXBlP28uYXBwZW5kQ2hpbGQoZS5jb250ZW50LmpxdWVyeT9lLmNvbnRlbnRbMF06ZS5jb250ZW50KToiaHRtbCI9PT1lLmNvbnRlbnRUeXBlP28uaW5uZXJIVE1MPWUuY29udGVudDpvLnRleHRDb250ZW50PWUuY29udGVudCxlLmFycm93VGFnTmFtZSl7dmFyIGE9cy5jcmVhdGVFbGVtZW50KGUuYXJyb3dUYWdOYW1lKTt0KGEsZS5hcnJvd0NsYXNzTmFtZXMpLGkoYSxlLmFycm93QXR0cmlidXRlcyksby5hcHBlbmRDaGlsZChhKX12YXIgcj1lLnBhcmVudC5qcXVlcnk/ZS5wYXJlbnRbMF06ZS5wYXJlbnQ7aWYoInN0cmluZyI9PXR5cGVvZiByKXtpZihyPXMucXVlcnlTZWxlY3RvckFsbChlLnBhcmVudCksci5sZW5ndGg+MSYmY29uc29sZS53YXJuKCJXQVJOSU5HOiB0aGUgZ2l2ZW4gYHBhcmVudGAgcXVlcnkoIitlLnBhcmVudCsiKSBtYXRjaGVkIG1vcmUgdGhhbiBvbmUgZWxlbWVudCwgdGhlIGZpcnN0IG9uZSB3aWxsIGJlIHVzZWQiKSwwPT09ci5sZW5ndGgpdGhyb3ciRVJST1I6IHRoZSBnaXZlbiBgcGFyZW50YCBkb2Vzbid0IGV4aXN0cyEiO3I9clswXX1yZXR1cm4gci5sZW5ndGg+MSYmciBpbnN0YW5jZW9mIEVsZW1lbnQ9PSExJiYoY29uc29sZS53YXJuKCJXQVJOSU5HOiB5b3UgaGF2ZSBwYXNzZWQgYXMgcGFyZW50IGEgbGlzdCBvZiBlbGVtZW50cywgdGhlIGZpcnN0IG9uZSB3aWxsIGJlIHVzZWQiKSxyPXJbMF0pLHIuYXBwZW5kQ2hpbGQobyksb30sZS5wcm90b3R5cGUuX2dldFBvc2l0aW9uPWZ1bmN0aW9uKGUsdCl7dmFyIGk9YSh0KTtpZih0aGlzLl9vcHRpb25zLmZvcmNlQWJzb2x1dGUpcmV0dXJuImFic29sdXRlIjt2YXIgbj1sKHQsaSk7cmV0dXJuIG4/ImZpeGVkIjoiYWJzb2x1dGUifSxlLnByb3RvdHlwZS5fZ2V0T2Zmc2V0cz1mdW5jdGlvbihlLGksbil7bj1uLnNwbGl0KCItIilbMF07dmFyIHM9e307cy5wb3NpdGlvbj10aGlzLnN0YXRlLnBvc2l0aW9uO3ZhciBvPSJmaXhlZCI9PT1zLnBvc2l0aW9uLHI9ZihpLGEoZSksbyksbD10KGUpO3JldHVyblsicmlnaHQiLCJsZWZ0Il0uaW5kZXhPZihuKSE9PS0xPyhzLnRvcD1yLnRvcCtyLmhlaWdodC8yLWwuaGVpZ2h0LzIsImxlZnQiPT09bj9zLmxlZnQ9ci5sZWZ0LWwud2lkdGg6cy5sZWZ0PXIucmlnaHQpOihzLmxlZnQ9ci5sZWZ0K3Iud2lkdGgvMi1sLndpZHRoLzIsInRvcCI9PT1uP3MudG9wPXIudG9wLWwuaGVpZ2h0OnMudG9wPXIuYm90dG9tKSxzLndpZHRoPWwud2lkdGgscy5oZWlnaHQ9bC5oZWlnaHQse3BvcHBlcjpzLHJlZmVyZW5jZTpyfX0sZS5wcm90b3R5cGUuX3NldHVwRXZlbnRMaXN0ZW5lcnM9ZnVuY3Rpb24oKXtpZih0aGlzLnN0YXRlLnVwZGF0ZUJvdW5kPXRoaXMudXBkYXRlLmJpbmQodGhpcyksbS5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMuc3RhdGUudXBkYXRlQm91bmQpLCJ3aW5kb3ciIT09dGhpcy5fb3B0aW9ucy5ib3VuZGFyaWVzRWxlbWVudCl7dmFyIGU9cih0aGlzLl9yZWZlcmVuY2UpO2UhPT1tLmRvY3VtZW50LmJvZHkmJmUhPT1tLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudHx8KGU9bSksZS5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuc3RhdGUudXBkYXRlQm91bmQpfX0sZS5wcm90b3R5cGUuX3JlbW92ZUV2ZW50TGlzdGVuZXJzPWZ1bmN0aW9uKCl7aWYobS5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMuc3RhdGUudXBkYXRlQm91bmQpLCJ3aW5kb3ciIT09dGhpcy5fb3B0aW9ucy5ib3VuZGFyaWVzRWxlbWVudCl7dmFyIGU9cih0aGlzLl9yZWZlcmVuY2UpO2UhPT1tLmRvY3VtZW50LmJvZHkmJmUhPT1tLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudHx8KGU9bSksZS5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuc3RhdGUudXBkYXRlQm91bmQpfXRoaXMuc3RhdGUudXBkYXRlQm91bmQ9bnVsbH0sZS5wcm90b3R5cGUuX2dldEJvdW5kYXJpZXM9ZnVuY3Rpb24oZSx0LGkpe3ZhciBuLHMsbz17fTtpZigid2luZG93Ij09PWkpe3ZhciBsPW0uZG9jdW1lbnQuYm9keSx1PW0uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O3M9TWF0aC5tYXgobC5zY3JvbGxIZWlnaHQsbC5vZmZzZXRIZWlnaHQsdS5jbGllbnRIZWlnaHQsdS5zY3JvbGxIZWlnaHQsdS5vZmZzZXRIZWlnaHQpLG49TWF0aC5tYXgobC5zY3JvbGxXaWR0aCxsLm9mZnNldFdpZHRoLHUuY2xpZW50V2lkdGgsdS5zY3JvbGxXaWR0aCx1Lm9mZnNldFdpZHRoKSxvPXt0b3A6MCxyaWdodDpuLGJvdHRvbTpzLGxlZnQ6MH19ZWxzZSBpZigidmlld3BvcnQiPT09aSl7dmFyIGM9YSh0aGlzLl9wb3BwZXIpLGg9cih0aGlzLl9wb3BwZXIpLGY9ZChjKSxwPWZ1bmN0aW9uKGUpe3JldHVybiBlPT1kb2N1bWVudC5ib2R5P01hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AsZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ApOmUuc2Nyb2xsVG9wfSx2PWZ1bmN0aW9uKGUpe3JldHVybiBlPT1kb2N1bWVudC5ib2R5P01hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0LGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCk6ZS5zY3JvbGxMZWZ0fSxnPSJmaXhlZCI9PT1lLm9mZnNldHMucG9wcGVyLnBvc2l0aW9uPzA6cChoKSx5PSJmaXhlZCI9PT1lLm9mZnNldHMucG9wcGVyLnBvc2l0aW9uPzA6dihoKTtvPXt0b3A6MC0oZi50b3AtZykscmlnaHQ6bS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgtKGYubGVmdC15KSxib3R0b206bS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LShmLnRvcC1nKSxsZWZ0OjAtKGYubGVmdC15KX19ZWxzZSBvPWEodGhpcy5fcG9wcGVyKT09PWk/e3RvcDowLGxlZnQ6MCxyaWdodDppLmNsaWVudFdpZHRoLGJvdHRvbTppLmNsaWVudEhlaWdodH06ZChpKTtyZXR1cm4gby5sZWZ0Kz10LG8ucmlnaHQtPXQsby50b3A9by50b3ArdCxvLmJvdHRvbT1vLmJvdHRvbS10LG99LGUucHJvdG90eXBlLnJ1bk1vZGlmaWVycz1mdW5jdGlvbihlLHQsaSl7dmFyIG49dC5zbGljZSgpO3JldHVybiB2b2lkIDAhPT1pJiYobj10aGlzLl9vcHRpb25zLm1vZGlmaWVycy5zbGljZSgwLHModGhpcy5fb3B0aW9ucy5tb2RpZmllcnMsaSkpKSxuLmZvckVhY2goZnVuY3Rpb24odCl7Yyh0KSYmKGU9dC5jYWxsKHRoaXMsZSkpfS5iaW5kKHRoaXMpKSxlfSxlLnByb3RvdHlwZS5pc01vZGlmaWVyUmVxdWlyZWQ9ZnVuY3Rpb24oZSx0KXt2YXIgaT1zKHRoaXMuX29wdGlvbnMubW9kaWZpZXJzLGUpO3JldHVybiEhdGhpcy5fb3B0aW9ucy5tb2RpZmllcnMuc2xpY2UoMCxpKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT10fSkubGVuZ3RofSxlLnByb3RvdHlwZS5tb2RpZmllcnM9e30sZS5wcm90b3R5cGUubW9kaWZpZXJzLmFwcGx5U3R5bGU9ZnVuY3Rpb24oZSl7dmFyIHQsaT17cG9zaXRpb246ZS5vZmZzZXRzLnBvcHBlci5wb3NpdGlvbn0sbj1NYXRoLnJvdW5kKGUub2Zmc2V0cy5wb3BwZXIubGVmdCkscz1NYXRoLnJvdW5kKGUub2Zmc2V0cy5wb3BwZXIudG9wKTtyZXR1cm4gdGhpcy5fb3B0aW9ucy5ncHVBY2NlbGVyYXRpb24mJih0PXAoInRyYW5zZm9ybSIpKT8oaVt0XT0idHJhbnNsYXRlM2QoIituKyJweCwgIitzKyJweCwgMCkiLGkudG9wPTAsaS5sZWZ0PTApOihpLmxlZnQ9bixpLnRvcD1zKSxPYmplY3QuYXNzaWduKGksZS5zdHlsZXMpLHUodGhpcy5fcG9wcGVyLGkpLHRoaXMuX3BvcHBlci5zZXRBdHRyaWJ1dGUoIngtcGxhY2VtZW50IixlLnBsYWNlbWVudCksdGhpcy5pc01vZGlmaWVyUmVxdWlyZWQodGhpcy5tb2RpZmllcnMuYXBwbHlTdHlsZSx0aGlzLm1vZGlmaWVycy5hcnJvdykmJmUub2Zmc2V0cy5hcnJvdyYmdShlLmFycm93RWxlbWVudCxlLm9mZnNldHMuYXJyb3cpLGV9LGUucHJvdG90eXBlLm1vZGlmaWVycy5zaGlmdD1mdW5jdGlvbihlKXt2YXIgdD1lLnBsYWNlbWVudCxpPXQuc3BsaXQoIi0iKVswXSxzPXQuc3BsaXQoIi0iKVsxXTtpZihzKXt2YXIgbz1lLm9mZnNldHMucmVmZXJlbmNlLGE9bihlLm9mZnNldHMucG9wcGVyKSxyPXt5OntzdGFydDp7dG9wOm8udG9wfSxlbmQ6e3RvcDpvLnRvcCtvLmhlaWdodC1hLmhlaWdodH19LHg6e3N0YXJ0OntsZWZ0Om8ubGVmdH0sZW5kOntsZWZ0Om8ubGVmdCtvLndpZHRoLWEud2lkdGh9fX0sbD1bImJvdHRvbSIsInRvcCJdLmluZGV4T2YoaSkhPT0tMT8ieCI6InkiO2Uub2Zmc2V0cy5wb3BwZXI9T2JqZWN0LmFzc2lnbihhLHJbbF1bc10pfXJldHVybiBlfSxlLnByb3RvdHlwZS5tb2RpZmllcnMucHJldmVudE92ZXJmbG93PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX29wdGlvbnMucHJldmVudE92ZXJmbG93T3JkZXIsaT1uKGUub2Zmc2V0cy5wb3BwZXIpLHM9e2xlZnQ6ZnVuY3Rpb24oKXt2YXIgdD1pLmxlZnQ7cmV0dXJuIGkubGVmdDxlLmJvdW5kYXJpZXMubGVmdCYmKHQ9TWF0aC5tYXgoaS5sZWZ0LGUuYm91bmRhcmllcy5sZWZ0KSkse2xlZnQ6dH19LHJpZ2h0OmZ1bmN0aW9uKCl7dmFyIHQ9aS5sZWZ0O3JldHVybiBpLnJpZ2h0PmUuYm91bmRhcmllcy5yaWdodCYmKHQ9TWF0aC5taW4oaS5sZWZ0LGUuYm91bmRhcmllcy5yaWdodC1pLndpZHRoKSkse2xlZnQ6dH19LHRvcDpmdW5jdGlvbigpe3ZhciB0PWkudG9wO3JldHVybiBpLnRvcDxlLmJvdW5kYXJpZXMudG9wJiYodD1NYXRoLm1heChpLnRvcCxlLmJvdW5kYXJpZXMudG9wKSkse3RvcDp0fX0sYm90dG9tOmZ1bmN0aW9uKCl7dmFyIHQ9aS50b3A7cmV0dXJuIGkuYm90dG9tPmUuYm91bmRhcmllcy5ib3R0b20mJih0PU1hdGgubWluKGkudG9wLGUuYm91bmRhcmllcy5ib3R0b20taS5oZWlnaHQpKSx7dG9wOnR9fX07cmV0dXJuIHQuZm9yRWFjaChmdW5jdGlvbih0KXtlLm9mZnNldHMucG9wcGVyPU9iamVjdC5hc3NpZ24oaSxzW3RdKCkpfSksZX0sZS5wcm90b3R5cGUubW9kaWZpZXJzLmtlZXBUb2dldGhlcj1mdW5jdGlvbihlKXt2YXIgdD1uKGUub2Zmc2V0cy5wb3BwZXIpLGk9ZS5vZmZzZXRzLnJlZmVyZW5jZSxzPU1hdGguZmxvb3I7cmV0dXJuIHQucmlnaHQ8cyhpLmxlZnQpJiYoZS5vZmZzZXRzLnBvcHBlci5sZWZ0PXMoaS5sZWZ0KS10LndpZHRoKSx0LmxlZnQ+cyhpLnJpZ2h0KSYmKGUub2Zmc2V0cy5wb3BwZXIubGVmdD1zKGkucmlnaHQpKSx0LmJvdHRvbTxzKGkudG9wKSYmKGUub2Zmc2V0cy5wb3BwZXIudG9wPXMoaS50b3ApLXQuaGVpZ2h0KSx0LnRvcD5zKGkuYm90dG9tKSYmKGUub2Zmc2V0cy5wb3BwZXIudG9wPXMoaS5ib3R0b20pKSxlfSxlLnByb3RvdHlwZS5tb2RpZmllcnMuZmxpcD1mdW5jdGlvbihlKXtpZighdGhpcy5pc01vZGlmaWVyUmVxdWlyZWQodGhpcy5tb2RpZmllcnMuZmxpcCx0aGlzLm1vZGlmaWVycy5wcmV2ZW50T3ZlcmZsb3cpKXJldHVybiBjb25zb2xlLndhcm4oIldBUk5JTkc6IHByZXZlbnRPdmVyZmxvdyBtb2RpZmllciBpcyByZXF1aXJlZCBieSBmbGlwIG1vZGlmaWVyIGluIG9yZGVyIHRvIHdvcmssIGJlIHN1cmUgdG8gaW5jbHVkZSBpdCBiZWZvcmUgZmxpcCEiKSxlO2lmKGUuZmxpcHBlZCYmZS5wbGFjZW1lbnQ9PT1lLl9vcmlnaW5hbFBsYWNlbWVudClyZXR1cm4gZTt2YXIgdD1lLnBsYWNlbWVudC5zcGxpdCgiLSIpWzBdLHM9aSh0KSxvPWUucGxhY2VtZW50LnNwbGl0KCItIilbMV18fCIiLGE9W107cmV0dXJuIGE9ImZsaXAiPT09dGhpcy5fb3B0aW9ucy5mbGlwQmVoYXZpb3I/W3Qsc106dGhpcy5fb3B0aW9ucy5mbGlwQmVoYXZpb3IsYS5mb3JFYWNoKGZ1bmN0aW9uKHIsbCl7aWYodD09PXImJmEubGVuZ3RoIT09bCsxKXt0PWUucGxhY2VtZW50LnNwbGl0KCItIilbMF0scz1pKHQpO3ZhciB1PW4oZS5vZmZzZXRzLnBvcHBlciksYz1bInJpZ2h0IiwiYm90dG9tIl0uaW5kZXhPZih0KSE9PS0xOyhjJiZNYXRoLmZsb29yKGUub2Zmc2V0cy5yZWZlcmVuY2VbdF0pPk1hdGguZmxvb3IodVtzXSl8fCFjJiZNYXRoLmZsb29yKGUub2Zmc2V0cy5yZWZlcmVuY2VbdF0pPE1hdGguZmxvb3IodVtzXSkpJiYoZS5mbGlwcGVkPSEwLGUucGxhY2VtZW50PWFbbCsxXSxvJiYoZS5wbGFjZW1lbnQrPSItIitvKSxlLm9mZnNldHMucG9wcGVyPXRoaXMuX2dldE9mZnNldHModGhpcy5fcG9wcGVyLHRoaXMuX3JlZmVyZW5jZSxlLnBsYWNlbWVudCkucG9wcGVyLGU9dGhpcy5ydW5Nb2RpZmllcnMoZSx0aGlzLl9vcHRpb25zLm1vZGlmaWVycyx0aGlzLl9mbGlwKSl9fS5iaW5kKHRoaXMpKSxlfSxlLnByb3RvdHlwZS5tb2RpZmllcnMub2Zmc2V0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX29wdGlvbnMub2Zmc2V0LGk9ZS5vZmZzZXRzLnBvcHBlcjtyZXR1cm4gZS5wbGFjZW1lbnQuaW5kZXhPZigibGVmdCIpIT09LTE/aS50b3AtPXQ6ZS5wbGFjZW1lbnQuaW5kZXhPZigicmlnaHQiKSE9PS0xP2kudG9wKz10OmUucGxhY2VtZW50LmluZGV4T2YoInRvcCIpIT09LTE/aS5sZWZ0LT10OmUucGxhY2VtZW50LmluZGV4T2YoImJvdHRvbSIpIT09LTEmJihpLmxlZnQrPXQpLGV9LGUucHJvdG90eXBlLm1vZGlmaWVycy5hcnJvdz1mdW5jdGlvbihlKXt2YXIgaT10aGlzLl9vcHRpb25zLmFycm93RWxlbWVudDtpZigic3RyaW5nIj09dHlwZW9mIGkmJihpPXRoaXMuX3BvcHBlci5xdWVyeVNlbGVjdG9yKGkpKSwhaSlyZXR1cm4gZTtpZighdGhpcy5fcG9wcGVyLmNvbnRhaW5zKGkpKXJldHVybiBjb25zb2xlLndhcm4oIldBUk5JTkc6IGBhcnJvd0VsZW1lbnRgIG11c3QgYmUgY2hpbGQgb2YgaXRzIHBvcHBlciBlbGVtZW50ISIpLGU7aWYoIXRoaXMuaXNNb2RpZmllclJlcXVpcmVkKHRoaXMubW9kaWZpZXJzLmFycm93LHRoaXMubW9kaWZpZXJzLmtlZXBUb2dldGhlcikpcmV0dXJuIGNvbnNvbGUud2FybigiV0FSTklORzoga2VlcFRvZ2V0aGVyIG1vZGlmaWVyIGlzIHJlcXVpcmVkIGJ5IGFycm93IG1vZGlmaWVyIGluIG9yZGVyIHRvIHdvcmssIGJlIHN1cmUgdG8gaW5jbHVkZSBpdCBiZWZvcmUgYXJyb3chIiksZTt2YXIgcz17fSxvPWUucGxhY2VtZW50LnNwbGl0KCItIilbMF0sYT1uKGUub2Zmc2V0cy5wb3BwZXIpLHI9ZS5vZmZzZXRzLnJlZmVyZW5jZSxsPVsibGVmdCIsInJpZ2h0Il0uaW5kZXhPZihvKSE9PS0xLHU9bD8iaGVpZ2h0Ijoid2lkdGgiLGM9bD8idG9wIjoibGVmdCIsZD1sPyJsZWZ0IjoidG9wIixoPWw/ImJvdHRvbSI6InJpZ2h0IixmPXQoaSlbdV07cltoXS1mPGFbY10mJihlLm9mZnNldHMucG9wcGVyW2NdLT1hW2NdLShyW2hdLWYpKSxyW2NdK2Y+YVtoXSYmKGUub2Zmc2V0cy5wb3BwZXJbY10rPXJbY10rZi1hW2hdKTt2YXIgcD1yW2NdK3JbdV0vMi1mLzIsbT1wLWFbY107cmV0dXJuIG09TWF0aC5tYXgoTWF0aC5taW4oYVt1XS1mLG0pLDApLHNbY109bSxzW2RdPSIiLGUub2Zmc2V0cy5hcnJvdz1zLGUuYXJyb3dFbGVtZW50PWksZX0sT2JqZWN0LmFzc2lnbnx8T2JqZWN0LmRlZmluZVByb3BlcnR5KE9iamVjdCwiYXNzaWduIix7ZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZXx8bnVsbD09PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNvbnZlcnQgZmlyc3QgYXJndW1lbnQgdG8gb2JqZWN0Iik7Zm9yKHZhciB0PU9iamVjdChlKSxpPTE7aTxhcmd1bWVudHMubGVuZ3RoO2krKyl7dmFyIG49YXJndW1lbnRzW2ldO2lmKHZvaWQgMCE9PW4mJm51bGwhPT1uKXtuPU9iamVjdChuKTtmb3IodmFyIHM9T2JqZWN0LmtleXMobiksbz0wLGE9cy5sZW5ndGg7bzxhO28rKyl7dmFyIHI9c1tvXSxsPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixyKTt2b2lkIDAhPT1sJiZsLmVudW1lcmFibGUmJih0W3JdPW5bcl0pfX19cmV0dXJuIHR9fSksZX0pfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuJGNyZWF0ZUVsZW1lbnQsaT1lLl9zZWxmLl9jfHx0O3JldHVybiBpKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtc2VsZWN0LWRyb3Bkb3duIixjbGFzczpbeyJpcy1tdWx0aXBsZSI6ZS4kcGFyZW50Lm11bHRpcGxlfSxlLnBvcHBlckNsYXNzXSxzdHlsZTp7bWluV2lkdGg6ZS5taW5XaWR0aH19LFtlLl90KCJkZWZhdWx0IildLDIpfSxzdGF0aWNSZW5kZXJGbnM6W119fSxmdW5jdGlvbihlLHQsaSl7dmFyIG49aSg1KShpKDM1KSxpKDM2KSxudWxsLG51bGwpO2UuZXhwb3J0cz1uLmV4cG9ydHN9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5fX2VzTW9kdWxlPSEwO3ZhciBzPWkoMTEpLG89bihzKTt0LmRlZmF1bHQ9e21peGluczpbby5kZWZhdWx0XSxuYW1lOiJFbE9wdGlvbiIsY29tcG9uZW50TmFtZToiRWxPcHRpb24iLHByb3BzOnt2YWx1ZTp7cmVxdWlyZWQ6ITB9LGxhYmVsOltTdHJpbmcsTnVtYmVyXSxjcmVhdGVkOkJvb2xlYW4sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfX0sZGF0YTpmdW5jdGlvbigpe3JldHVybntpbmRleDotMSxncm91cERpc2FibGVkOiExLHZpc2libGU6ITAsaGl0U3RhdGU6ITF9fSxjb21wdXRlZDp7Y3VycmVudExhYmVsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGFiZWx8fCgic3RyaW5nIj09dHlwZW9mIHRoaXMudmFsdWV8fCJudW1iZXIiPT10eXBlb2YgdGhpcy52YWx1ZT90aGlzLnZhbHVlOiIiKX0sY3VycmVudFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsdWV8fHRoaXMubGFiZWx8fCIifSxwYXJlbnQ6ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy4kcGFyZW50OyFlLmlzU2VsZWN0OyllPWUuJHBhcmVudDtyZXR1cm4gZX0saXRlbVNlbGVjdGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50Lm11bHRpcGxlP3RoaXMucGFyZW50LnZhbHVlLmluZGV4T2YodGhpcy52YWx1ZSk+LTE6dGhpcy52YWx1ZT09PXRoaXMucGFyZW50LnZhbHVlfSxsaW1pdFJlYWNoZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMucGFyZW50Lm11bHRpcGxlJiYoIXRoaXMuaXRlbVNlbGVjdGVkJiZ0aGlzLnBhcmVudC52YWx1ZS5sZW5ndGg+PXRoaXMucGFyZW50Lm11bHRpcGxlTGltaXQmJnRoaXMucGFyZW50Lm11bHRpcGxlTGltaXQ+MCl9fSx3YXRjaDp7Y3VycmVudExhYmVsOmZ1bmN0aW9uKCl7dGhpcy5jcmVhdGVkfHx0aGlzLnBhcmVudC5yZW1vdGV8fHRoaXMuZGlzcGF0Y2goIkVsU2VsZWN0Iiwic2V0U2VsZWN0ZWQiKX0sdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmNyZWF0ZWR8fHRoaXMucGFyZW50LnJlbW90ZXx8dGhpcy5kaXNwYXRjaCgiRWxTZWxlY3QiLCJzZXRTZWxlY3RlZCIpfX0sbWV0aG9kczp7aGFuZGxlR3JvdXBEaXNhYmxlZDpmdW5jdGlvbihlKXt0aGlzLmdyb3VwRGlzYWJsZWQ9ZX0saG92ZXJJdGVtOmZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZHx8dGhpcy5ncm91cERpc2FibGVkfHwodGhpcy5wYXJlbnQuaG92ZXJJbmRleD10aGlzLnBhcmVudC5vcHRpb25zLmluZGV4T2YodGhpcykpfSxzZWxlY3RPcHRpb25DbGljazpmdW5jdGlvbigpe3RoaXMuZGlzYWJsZWQhPT0hMCYmdGhpcy5ncm91cERpc2FibGVkIT09ITAmJnRoaXMuZGlzcGF0Y2goIkVsU2VsZWN0IiwiaGFuZGxlT3B0aW9uQ2xpY2siLHRoaXMpfSxxdWVyeUNoYW5nZTpmdW5jdGlvbihlKXt2YXIgdD1TdHJpbmcoZSkucmVwbGFjZSgvKFxefFwofFwpfFxbfFxdfFwkfFwqfFwrfFwufFw/fFxcfFx7fFx9fFx8KS9nLCJcXCQxIik7dGhpcy52aXNpYmxlPW5ldyBSZWdFeHAodCwiaSIpLnRlc3QodGhpcy5jdXJyZW50TGFiZWwpfHx0aGlzLmNyZWF0ZWQsdGhpcy52aXNpYmxlfHx0aGlzLnBhcmVudC5maWx0ZXJlZE9wdGlvbnNDb3VudC0tfSxyZXNldEluZGV4OmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe2UuaW5kZXg9ZS5wYXJlbnQub3B0aW9ucy5pbmRleE9mKGUpfSl9fSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5wYXJlbnQub3B0aW9ucy5wdXNoKHRoaXMpLHRoaXMucGFyZW50LmNhY2hlZE9wdGlvbnMucHVzaCh0aGlzKSx0aGlzLnBhcmVudC5vcHRpb25zQ291bnQrKyx0aGlzLnBhcmVudC5maWx0ZXJlZE9wdGlvbnNDb3VudCsrLHRoaXMuaW5kZXg9dGhpcy5wYXJlbnQub3B0aW9ucy5pbmRleE9mKHRoaXMpLHRoaXMuJG9uKCJxdWVyeUNoYW5nZSIsdGhpcy5xdWVyeUNoYW5nZSksdGhpcy4kb24oImhhbmRsZUdyb3VwRGlzYWJsZWQiLHRoaXMuaGFuZGxlR3JvdXBEaXNhYmxlZCksdGhpcy4kb24oInJlc2V0SW5kZXgiLHRoaXMucmVzZXRJbmRleCl9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmRpc3BhdGNoKCJFbFNlbGVjdCIsIm9uT3B0aW9uRGVzdHJveSIsdGhpcyl9fX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLiRjcmVhdGVFbGVtZW50LGk9ZS5fc2VsZi5fY3x8dDtyZXR1cm4gaSgibGkiLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZTplLnZpc2libGUsZXhwcmVzc2lvbjoidmlzaWJsZSJ9XSxzdGF0aWNDbGFzczoiZWwtc2VsZWN0LWRyb3Bkb3duX19pdGVtIixjbGFzczp7c2VsZWN0ZWQ6ZS5pdGVtU2VsZWN0ZWQsImlzLWRpc2FibGVkIjplLmRpc2FibGVkfHxlLmdyb3VwRGlzYWJsZWR8fGUubGltaXRSZWFjaGVkLGhvdmVyOmUucGFyZW50LmhvdmVySW5kZXg9PT1lLmluZGV4fSxvbjp7bW91c2VlbnRlcjplLmhvdmVySXRlbSxjbGljazpmdW5jdGlvbih0KXt0LnN0b3BQcm9wYWdhdGlvbigpLGUuc2VsZWN0T3B0aW9uQ2xpY2sodCl9fX0sW2UuX3QoImRlZmF1bHQiLFtpKCJzcGFuIixbZS5fdihlLl9zKGUuY3VycmVudExhYmVsKSldKV0pXSwyKX0sc3RhdGljUmVuZGVyRm5zOltdfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX10Ll9fZXNNb2R1bGU9ITA7dmFyIHM9aSgzOCksbz1uKHMpO28uZGVmYXVsdC5pbnN0YWxsPWZ1bmN0aW9uKGUpe2UuY29tcG9uZW50KG8uZGVmYXVsdC5uYW1lLG8uZGVmYXVsdCl9LHQuZGVmYXVsdD1vLmRlZmF1bHR9LGZ1bmN0aW9uKGUsdCxpKXt2YXIgbj1pKDUpKGkoMzkpLGkoNDApLG51bGwsbnVsbCk7ZS5leHBvcnRzPW4uZXhwb3J0c30sZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7dC5fX2VzTW9kdWxlPSEwLHQuZGVmYXVsdD17bmFtZToiRWxUYWciLHByb3BzOnt0ZXh0OlN0cmluZyxjbG9zYWJsZTpCb29sZWFuLHR5cGU6U3RyaW5nLGhpdDpCb29sZWFuLGNsb3NlVHJhbnNpdGlvbjpCb29sZWFuLGNvbG9yOlN0cmluZ30sbWV0aG9kczp7aGFuZGxlQ2xvc2U6ZnVuY3Rpb24oZSl7dGhpcy4kZW1pdCgiY2xvc2UiLGUpfX19fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuJGNyZWF0ZUVsZW1lbnQsaT1lLl9zZWxmLl9jfHx0O3JldHVybiBpKCJ0cmFuc2l0aW9uIix7YXR0cnM6e25hbWU6ZS5jbG9zZVRyYW5zaXRpb24/IiI6ImVsLXpvb20taW4tY2VudGVyIn19LFtpKCJzcGFuIix7c3RhdGljQ2xhc3M6ImVsLXRhZyIsY2xhc3M6W2UudHlwZT8iZWwtdGFnLS0iK2UudHlwZToiIix7ImlzLWhpdCI6ZS5oaXR9XSxzdHlsZTp7YmFja2dyb3VuZENvbG9yOmUuY29sb3J9fSxbZS5fdCgiZGVmYXVsdCIpLGUuY2xvc2FibGU/aSgiaSIse3N0YXRpY0NsYXNzOiJlbC10YWdfX2Nsb3NlIGVsLWljb24tY2xvc2UiLG9uOntjbGljazplLmhhbmRsZUNsb3NlfX0pOmUuX2UoKV0sMildKX0sc3RhdGljUmVuZGVyRm5zOltdfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX10Ll9fZXNNb2R1bGU9ITA7dmFyIHM9aSg0Miksbz1uKHMpO28uZGVmYXVsdC5pbnN0YWxsPWZ1bmN0aW9uKGUpe2UuY29tcG9uZW50KG8uZGVmYXVsdC5uYW1lLG8uZGVmYXVsdCl9LHQuZGVmYXVsdD1vLmRlZmF1bHR9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5fX2VzTW9kdWxlPSEwO3ZhciBzPWkoNDMpLG89aSgzMSksYT1uKG8pLHI9aSgxOCksbD1pKDQ0KSx1PW4obCk7dC5kZWZhdWx0PXtuYW1lOiJFbFNjcm9sbGJhciIsY29tcG9uZW50czp7QmFyOnUuZGVmYXVsdH0scHJvcHM6e25hdGl2ZTpCb29sZWFuLHdyYXBTdHlsZTp7fSx3cmFwQ2xhc3M6e30sdmlld0NsYXNzOnt9LHZpZXdTdHlsZTp7fSxub3Jlc2l6ZTpCb29sZWFuLHRhZzp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiZGl2In19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57c2l6ZVdpZHRoOiIwIixzaXplSGVpZ2h0OiIwIixtb3ZlWDowLG1vdmVZOjB9fSxjb21wdXRlZDp7d3JhcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRyZWZzLndyYXB9fSxyZW5kZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9KDAsYS5kZWZhdWx0KSgpLGk9dGhpcy53cmFwU3R5bGU7aWYodCl7dmFyIG49Ii0iK3QrInB4IixzPSJtYXJnaW4tYm90dG9tOiAiK24rIjsgbWFyZ2luLXJpZ2h0OiAiK24rIjsiO0FycmF5LmlzQXJyYXkodGhpcy53cmFwU3R5bGUpPyhpPSgwLHIudG9PYmplY3QpKHRoaXMud3JhcFN0eWxlKSxpLm1hcmdpblJpZ2h0PWkubWFyZ2luQm90dG9tPW4pOiJzdHJpbmciPT10eXBlb2YgdGhpcy53cmFwU3R5bGU/aSs9czppPXN9dmFyIG89ZSh0aGlzLnRhZyx7Y2xhc3M6WyJlbC1zY3JvbGxiYXJfX3ZpZXciLHRoaXMudmlld0NsYXNzXSxzdHlsZTp0aGlzLnZpZXdTdHlsZSxyZWY6InJlc2l6ZSJ9LHRoaXMuJHNsb3RzLmRlZmF1bHQpLGw9ZSgiZGl2Iix7cmVmOiJ3cmFwIixzdHlsZTppLG9uOntzY3JvbGw6dGhpcy5oYW5kbGVTY3JvbGx9LGNsYXNzOlt0aGlzLndyYXBDbGFzcywiZWwtc2Nyb2xsYmFyX193cmFwIix0PyIiOiJlbC1zY3JvbGxiYXJfX3dyYXAtLWhpZGRlbi1kZWZhdWx0Il19LFtbb11dKSxjPXZvaWQgMDtyZXR1cm4gYz10aGlzLm5hdGl2ZT9bZSgiZGl2Iix7cmVmOiJ3cmFwIixjbGFzczpbdGhpcy53cmFwQ2xhc3MsImVsLXNjcm9sbGJhcl9fd3JhcCJdLHN0eWxlOml9LFtbb11dKV06W2wsZSh1LmRlZmF1bHQse2F0dHJzOnttb3ZlOnRoaXMubW92ZVgsc2l6ZTp0aGlzLnNpemVXaWR0aH19LFtdKSxlKHUuZGVmYXVsdCx7YXR0cnM6e3ZlcnRpY2FsOiEwLG1vdmU6dGhpcy5tb3ZlWSxzaXplOnRoaXMuc2l6ZUhlaWdodH19LFtdKV0sZSgiZGl2Iix7Y2xhc3M6ImVsLXNjcm9sbGJhciJ9LGMpfSxtZXRob2RzOntoYW5kbGVTY3JvbGw6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLndyYXA7dGhpcy5tb3ZlWT0xMDAqZS5zY3JvbGxUb3AvZS5jbGllbnRIZWlnaHQsdGhpcy5tb3ZlWD0xMDAqZS5zY3JvbGxMZWZ0L2UuY2xpZW50V2lkdGh9LHVwZGF0ZTpmdW5jdGlvbigpe3ZhciBlPXZvaWQgMCx0PXZvaWQgMCxpPXRoaXMud3JhcDtpJiYoZT0xMDAqaS5jbGllbnRIZWlnaHQvaS5zY3JvbGxIZWlnaHQsdD0xMDAqaS5jbGllbnRXaWR0aC9pLnNjcm9sbFdpZHRoLHRoaXMuc2l6ZUhlaWdodD1lPDEwMD9lKyIlIjoiIix0aGlzLnNpemVXaWR0aD10PDEwMD90KyIlIjoiIil9fSxtb3VudGVkOmZ1bmN0aW9uKCl7dGhpcy5uYXRpdmV8fCh0aGlzLiRuZXh0VGljayh0aGlzLnVwZGF0ZSksIXRoaXMubm9yZXNpemUmJigwLHMuYWRkUmVzaXplTGlzdGVuZXIpKHRoaXMuJHJlZnMucmVzaXplLHRoaXMudXBkYXRlKSl9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLm5hdGl2ZXx8IXRoaXMubm9yZXNpemUmJigwLApzLnJlbW92ZVJlc2l6ZUxpc3RlbmVyKSh0aGlzLiRyZWZzLnJlc2l6ZSx0aGlzLnVwZGF0ZSl9fX0sZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7dC5fX2VzTW9kdWxlPSEwO3ZhciBpPSJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93LG49ZnVuY3Rpb24oKXtpZighaSl7dmFyIGU9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZXx8d2luZG93Lm1velJlcXVlc3RBbmltYXRpb25GcmFtZXx8d2luZG93LndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZXx8ZnVuY3Rpb24oZSl7cmV0dXJuIHdpbmRvdy5zZXRUaW1lb3V0KGUsMjApfTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUodCl9fX0oKSxzPWZ1bmN0aW9uKCl7aWYoIWkpe3ZhciBlPXdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZXx8d2luZG93Lm1vekNhbmNlbEFuaW1hdGlvbkZyYW1lfHx3aW5kb3cud2Via2l0Q2FuY2VsQW5pbWF0aW9uRnJhbWV8fHdpbmRvdy5jbGVhclRpbWVvdXQ7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpfX19KCksbz1mdW5jdGlvbihlKXt2YXIgdD1lLl9fcmVzaXplVHJpZ2dlcl9fLGk9dC5maXJzdEVsZW1lbnRDaGlsZCxuPXQubGFzdEVsZW1lbnRDaGlsZCxzPWkuZmlyc3RFbGVtZW50Q2hpbGQ7bi5zY3JvbGxMZWZ0PW4uc2Nyb2xsV2lkdGgsbi5zY3JvbGxUb3A9bi5zY3JvbGxIZWlnaHQscy5zdHlsZS53aWR0aD1pLm9mZnNldFdpZHRoKzErInB4IixzLnN0eWxlLmhlaWdodD1pLm9mZnNldEhlaWdodCsxKyJweCIsaS5zY3JvbGxMZWZ0PWkuc2Nyb2xsV2lkdGgsaS5zY3JvbGxUb3A9aS5zY3JvbGxIZWlnaHR9LGE9ZnVuY3Rpb24oZSl7cmV0dXJuIGUub2Zmc2V0V2lkdGghPT1lLl9fcmVzaXplTGFzdF9fLndpZHRofHxlLm9mZnNldEhlaWdodCE9PWUuX19yZXNpemVMYXN0X18uaGVpZ2h0fSxyPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7byh0aGlzKSx0aGlzLl9fcmVzaXplUkFGX18mJnModGhpcy5fX3Jlc2l6ZVJBRl9fKSx0aGlzLl9fcmVzaXplUkFGX189bihmdW5jdGlvbigpe2EodCkmJih0Ll9fcmVzaXplTGFzdF9fLndpZHRoPXQub2Zmc2V0V2lkdGgsdC5fX3Jlc2l6ZUxhc3RfXy5oZWlnaHQ9dC5vZmZzZXRIZWlnaHQsdC5fX3Jlc2l6ZUxpc3RlbmVyc19fLmZvckVhY2goZnVuY3Rpb24oaSl7aS5jYWxsKHQsZSl9KSl9KX0sbD1pP3t9OmRvY3VtZW50LmF0dGFjaEV2ZW50LHU9IldlYmtpdCBNb3ogTyBtcyIuc3BsaXQoIiAiKSxjPSJ3ZWJraXRBbmltYXRpb25TdGFydCBhbmltYXRpb25zdGFydCBvQW5pbWF0aW9uU3RhcnQgTVNBbmltYXRpb25TdGFydCIuc3BsaXQoIiAiKSxkPSJyZXNpemVhbmltIixoPSExLGY9IiIscD0iYW5pbWF0aW9uc3RhcnQiO2lmKCFsJiYhaSl7dmFyIG09ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZmFrZWVsZW1lbnQiKTtpZih2b2lkIDAhPT1tLnN0eWxlLmFuaW1hdGlvbk5hbWUmJihoPSEwKSxoPT09ITEpZm9yKHZhciB2PSIiLGc9MDtnPHUubGVuZ3RoO2crKylpZih2b2lkIDAhPT1tLnN0eWxlW3VbZ10rIkFuaW1hdGlvbk5hbWUiXSl7dj11W2ddLGY9Ii0iK3YudG9Mb3dlckNhc2UoKSsiLSIscD1jW2ddLGg9ITA7YnJlYWt9fXZhciB5PSExLGI9ZnVuY3Rpb24oKXtpZigheSYmIWkpe3ZhciBlPSJAIitmKyJrZXlmcmFtZXMgIitkKyIgeyBmcm9tIHsgb3BhY2l0eTogMDsgfSB0byB7IG9wYWNpdHk6IDA7IH0gfSAiLHQ9ZisiYW5pbWF0aW9uOiAxbXMgIitkKyI7IixuPWUrIlxuICAgICAgLnJlc2l6ZS10cmlnZ2VycyB7ICIrdCsnIHZpc2liaWxpdHk6IGhpZGRlbjsgb3BhY2l0eTogMDsgfVxuICAgICAgLnJlc2l6ZS10cmlnZ2VycywgLnJlc2l6ZS10cmlnZ2VycyA+IGRpdiwgLmNvbnRyYWN0LXRyaWdnZXI6YmVmb3JlIHsgY29udGVudDogIiAiOyBkaXNwbGF5OiBibG9jazsgcG9zaXRpb246IGFic29sdXRlOyB0b3A6IDA7IGxlZnQ6IDA7IGhlaWdodDogMTAwJTsgd2lkdGg6IDEwMCU7IG92ZXJmbG93OiBoaWRkZW47IH1cbiAgICAgIC5yZXNpemUtdHJpZ2dlcnMgPiBkaXYgeyBiYWNrZ3JvdW5kOiAjZWVlOyBvdmVyZmxvdzogYXV0bzsgfVxuICAgICAgLmNvbnRyYWN0LXRyaWdnZXI6YmVmb3JlIHsgd2lkdGg6IDIwMCU7IGhlaWdodDogMjAwJTsgfScscz1kb2N1bWVudC5oZWFkfHxkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtvLnR5cGU9InRleHQvY3NzIixvLnN0eWxlU2hlZXQ/by5zdHlsZVNoZWV0LmNzc1RleHQ9bjpvLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG4pKSxzLmFwcGVuZENoaWxkKG8pLHk9ITB9fTt0LmFkZFJlc2l6ZUxpc3RlbmVyPWZ1bmN0aW9uKGUsdCl7aWYoIWkpaWYobCllLmF0dGFjaEV2ZW50KCJvbnJlc2l6ZSIsdCk7ZWxzZXtpZighZS5fX3Jlc2l6ZVRyaWdnZXJfXyl7InN0YXRpYyI9PT1nZXRDb21wdXRlZFN0eWxlKGUpLnBvc2l0aW9uJiYoZS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiKSxiKCksZS5fX3Jlc2l6ZUxhc3RfXz17fSxlLl9fcmVzaXplTGlzdGVuZXJzX189W107dmFyIG49ZS5fX3Jlc2l6ZVRyaWdnZXJfXz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtuLmNsYXNzTmFtZT0icmVzaXplLXRyaWdnZXJzIixuLmlubmVySFRNTD0nPGRpdiBjbGFzcz0iZXhwYW5kLXRyaWdnZXIiPjxkaXY+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0iY29udHJhY3QtdHJpZ2dlciI+PC9kaXY+JyxlLmFwcGVuZENoaWxkKG4pLG8oZSksZS5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLHIsITApLHAmJm4uYWRkRXZlbnRMaXN0ZW5lcihwLGZ1bmN0aW9uKHQpe3QuYW5pbWF0aW9uTmFtZT09PWQmJm8oZSl9KX1lLl9fcmVzaXplTGlzdGVuZXJzX18ucHVzaCh0KX19LHQucmVtb3ZlUmVzaXplTGlzdGVuZXI9ZnVuY3Rpb24oZSx0KXtsP2UuZGV0YWNoRXZlbnQoIm9ucmVzaXplIix0KTooZS5fX3Jlc2l6ZUxpc3RlbmVyc19fLnNwbGljZShlLl9fcmVzaXplTGlzdGVuZXJzX18uaW5kZXhPZih0KSwxKSxlLl9fcmVzaXplTGlzdGVuZXJzX18ubGVuZ3RofHwoZS5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLHIpLGUuX19yZXNpemVUcmlnZ2VyX189IWUucmVtb3ZlQ2hpbGQoZS5fX3Jlc2l6ZVRyaWdnZXJfXykpKX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dC5fX2VzTW9kdWxlPSEwO3ZhciBuPWkoMzApLHM9aSg0NSk7dC5kZWZhdWx0PXtuYW1lOiJCYXIiLHByb3BzOnt2ZXJ0aWNhbDpCb29sZWFuLHNpemU6U3RyaW5nLG1vdmU6TnVtYmVyfSxjb21wdXRlZDp7YmFyOmZ1bmN0aW9uKCl7cmV0dXJuIHMuQkFSX01BUFt0aGlzLnZlcnRpY2FsPyJ2ZXJ0aWNhbCI6Imhvcml6b250YWwiXX0sd3JhcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRwYXJlbnQud3JhcH19LHJlbmRlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnNpemUsaT10aGlzLm1vdmUsbj10aGlzLmJhcjtyZXR1cm4gZSgiZGl2Iix7Y2xhc3M6WyJlbC1zY3JvbGxiYXJfX2JhciIsImlzLSIrbi5rZXldLG9uOnttb3VzZWRvd246dGhpcy5jbGlja1RyYWNrSGFuZGxlcn19LFtlKCJkaXYiLHtyZWY6InRodW1iIixjbGFzczoiZWwtc2Nyb2xsYmFyX190aHVtYiIsb246e21vdXNlZG93bjp0aGlzLmNsaWNrVGh1bWJIYW5kbGVyfSxzdHlsZTooMCxzLnJlbmRlclRodW1iU3R5bGUpKHtzaXplOnQsbW92ZTppLGJhcjpufSl9LFtdKV0pfSxtZXRob2RzOntjbGlja1RodW1iSGFuZGxlcjpmdW5jdGlvbihlKXt0aGlzLnN0YXJ0RHJhZyhlKSx0aGlzW3RoaXMuYmFyLmF4aXNdPWUuY3VycmVudFRhcmdldFt0aGlzLmJhci5vZmZzZXRdLShlW3RoaXMuYmFyLmNsaWVudF0tZS5jdXJyZW50VGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW3RoaXMuYmFyLmRpcmVjdGlvbl0pfSxjbGlja1RyYWNrSGFuZGxlcjpmdW5jdGlvbihlKXt2YXIgdD1NYXRoLmFicyhlLnRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVt0aGlzLmJhci5kaXJlY3Rpb25dLWVbdGhpcy5iYXIuY2xpZW50XSksaT10aGlzLiRyZWZzLnRodW1iW3RoaXMuYmFyLm9mZnNldF0vMixuPTEwMCoodC1pKS90aGlzLiRlbFt0aGlzLmJhci5vZmZzZXRdO3RoaXMud3JhcFt0aGlzLmJhci5zY3JvbGxdPW4qdGhpcy53cmFwW3RoaXMuYmFyLnNjcm9sbFNpemVdLzEwMH0sc3RhcnREcmFnOmZ1bmN0aW9uKGUpe2Uuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksdGhpcy5jdXJzb3JEb3duPSEwLCgwLG4ub24pKGRvY3VtZW50LCJtb3VzZW1vdmUiLHRoaXMubW91c2VNb3ZlRG9jdW1lbnRIYW5kbGVyKSwoMCxuLm9uKShkb2N1bWVudCwibW91c2V1cCIsdGhpcy5tb3VzZVVwRG9jdW1lbnRIYW5kbGVyKSxkb2N1bWVudC5vbnNlbGVjdHN0YXJ0PWZ1bmN0aW9uKCl7cmV0dXJuITF9fSxtb3VzZU1vdmVEb2N1bWVudEhhbmRsZXI6ZnVuY3Rpb24oZSl7aWYodGhpcy5jdXJzb3JEb3duIT09ITEpe3ZhciB0PXRoaXNbdGhpcy5iYXIuYXhpc107aWYodCl7dmFyIGk9KHRoaXMuJGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW3RoaXMuYmFyLmRpcmVjdGlvbl0tZVt0aGlzLmJhci5jbGllbnRdKSotMSxuPXRoaXMuJHJlZnMudGh1bWJbdGhpcy5iYXIub2Zmc2V0XS10LHM9MTAwKihpLW4pL3RoaXMuJGVsW3RoaXMuYmFyLm9mZnNldF07dGhpcy53cmFwW3RoaXMuYmFyLnNjcm9sbF09cyp0aGlzLndyYXBbdGhpcy5iYXIuc2Nyb2xsU2l6ZV0vMTAwfX19LG1vdXNlVXBEb2N1bWVudEhhbmRsZXI6ZnVuY3Rpb24oZSl7dGhpcy5jdXJzb3JEb3duPSExLHRoaXNbdGhpcy5iYXIuYXhpc109MCwoMCxuLm9mZikoZG9jdW1lbnQsIm1vdXNlbW92ZSIsdGhpcy5tb3VzZU1vdmVEb2N1bWVudEhhbmRsZXIpLGRvY3VtZW50Lm9uc2VsZWN0c3RhcnQ9bnVsbH19LGRlc3Ryb3llZDpmdW5jdGlvbigpeygwLG4ub2ZmKShkb2N1bWVudCwibW91c2V1cCIsdGhpcy5tb3VzZVVwRG9jdW1lbnRIYW5kbGVyKX19fSxmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBpKGUpe3ZhciB0PWUubW92ZSxpPWUuc2l6ZSxuPWUuYmFyLHM9e30sbz0idHJhbnNsYXRlIituLmF4aXMrIigiK3QrIiUpIjtyZXR1cm4gc1tuLnNpemVdPWkscy50cmFuc2Zvcm09byxzLm1zVHJhbnNmb3JtPW8scy53ZWJraXRUcmFuc2Zvcm09byxzfXQuX19lc01vZHVsZT0hMCx0LnJlbmRlclRodW1iU3R5bGU9aTt0LkJBUl9NQVA9e3ZlcnRpY2FsOntvZmZzZXQ6Im9mZnNldEhlaWdodCIsc2Nyb2xsOiJzY3JvbGxUb3AiLHNjcm9sbFNpemU6InNjcm9sbEhlaWdodCIsc2l6ZToiaGVpZ2h0IixrZXk6InZlcnRpY2FsIixheGlzOiJZIixjbGllbnQ6ImNsaWVudFkiLGRpcmVjdGlvbjoidG9wIn0saG9yaXpvbnRhbDp7b2Zmc2V0OiJvZmZzZXRXaWR0aCIsc2Nyb2xsOiJzY3JvbGxMZWZ0IixzY3JvbGxTaXplOiJzY3JvbGxXaWR0aCIsc2l6ZToid2lkdGgiLGtleToiaG9yaXpvbnRhbCIsYXhpczoiWCIsY2xpZW50OiJjbGllbnRYIixkaXJlY3Rpb246ImxlZnQifX19LGZ1bmN0aW9uKGUsdCxpKXt2YXIgbj1pKDQ3KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LGkpe3JldHVybiB2b2lkIDA9PT1pP24oZSx0LCExKTpuKGUsaSx0IT09ITEpfX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LGksbil7ZnVuY3Rpb24gcygpe2Z1bmN0aW9uIHMoKXthPU51bWJlcihuZXcgRGF0ZSksaS5hcHBseShsLGMpfWZ1bmN0aW9uIHIoKXtvPXZvaWQgMH12YXIgbD10aGlzLHU9TnVtYmVyKG5ldyBEYXRlKS1hLGM9YXJndW1lbnRzO24mJiFvJiZzKCksbyYmY2xlYXJUaW1lb3V0KG8pLHZvaWQgMD09PW4mJnU+ZT9zKCk6dCE9PSEwJiYobz1zZXRUaW1lb3V0KG4/cjpzLHZvaWQgMD09PW4/ZS11OmUpKX12YXIgbyxhPTA7cmV0dXJuImJvb2xlYW4iIT10eXBlb2YgdCYmKG49aSxpPXQsdD12b2lkIDApLHN9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXQuX19lc01vZHVsZT0hMDt2YXIgcz1pKDE1KSxvPW4ocyksYT1pKDMwKSxyPVtdLGw9IkBAY2xpY2tvdXRzaWRlQ29udGV4dCIsdT12b2lkIDA7IW8uZGVmYXVsdC5wcm90b3R5cGUuJGlzU2VydmVyJiYoMCxhLm9uKShkb2N1bWVudCwibW91c2Vkb3duIixmdW5jdGlvbihlKXtyZXR1cm4gdT1lfSksIW8uZGVmYXVsdC5wcm90b3R5cGUuJGlzU2VydmVyJiYoMCxhLm9uKShkb2N1bWVudCwibW91c2V1cCIsZnVuY3Rpb24oZSl7ci5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0W2xdLmRvY3VtZW50SGFuZGxlcihlLHUpfSl9KSx0LmRlZmF1bHQ9e2JpbmQ6ZnVuY3Rpb24oZSx0LGkpe3ZhciBuPXIucHVzaChlKS0xLHM9ZnVuY3Rpb24obixzKXshaS5jb250ZXh0fHxlLmNvbnRhaW5zKG4udGFyZ2V0KXx8aS5jb250ZXh0LnBvcHBlckVsbSYmKGkuY29udGV4dC5wb3BwZXJFbG0uY29udGFpbnMobi50YXJnZXQpfHxpLmNvbnRleHQucG9wcGVyRWxtLmNvbnRhaW5zKHMudGFyZ2V0KSl8fCh0LmV4cHJlc3Npb24mJmVbbF0ubWV0aG9kTmFtZSYmaS5jb250ZXh0W2VbbF0ubWV0aG9kTmFtZV0/aS5jb250ZXh0W2VbbF0ubWV0aG9kTmFtZV0oKTplW2xdLmJpbmRpbmdGbiYmZVtsXS5iaW5kaW5nRm4oKSl9O2VbbF09e2lkOm4sZG9jdW1lbnRIYW5kbGVyOnMsbWV0aG9kTmFtZTp0LmV4cHJlc3Npb24sYmluZGluZ0ZuOnQudmFsdWV9fSx1cGRhdGU6ZnVuY3Rpb24oZSx0KXtlW2xdLm1ldGhvZE5hbWU9dC5leHByZXNzaW9uLGVbbF0uYmluZGluZ0ZuPXQudmFsdWV9LHVuYmluZDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9ci5sZW5ndGgsaT0wO2k8dDtpKyspaWYocltpXVtsXS5pZD09PWVbbF0uaWQpe3Iuc3BsaWNlKGksMSk7YnJlYWt9fX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxpPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIGkoImRpdiIse2RpcmVjdGl2ZXM6W3tuYW1lOiJjbGlja291dHNpZGUiLHJhd05hbWU6InYtY2xpY2tvdXRzaWRlIix2YWx1ZTplLmhhbmRsZUNsb3NlLGV4cHJlc3Npb246ImhhbmRsZUNsb3NlIn1dLHN0YXRpY0NsYXNzOiJlbC1zZWxlY3QifSxbZS5tdWx0aXBsZT9pKCJkaXYiLHtyZWY6InRhZ3MiLHN0YXRpY0NsYXNzOiJlbC1zZWxlY3RfX3RhZ3MiLHN0eWxlOnsibWF4LXdpZHRoIjplLmlucHV0V2lkdGgtMzIrInB4In0sb246e2NsaWNrOmZ1bmN0aW9uKHQpe3Quc3RvcFByb3BhZ2F0aW9uKCksZS50b2dnbGVNZW51KHQpfX19LFtpKCJ0cmFuc2l0aW9uLWdyb3VwIix7b246eyJhZnRlci1sZWF2ZSI6ZS5yZXNldElucHV0SGVpZ2h0fX0sZS5fbChlLnNlbGVjdGVkLGZ1bmN0aW9uKHQpe3JldHVybiBpKCJlbC10YWciLHtrZXk6dC52YWx1ZSxhdHRyczp7Y2xvc2FibGU6IiIsaGl0OnQuaGl0U3RhdGUsdHlwZToicHJpbWFyeSIsImNsb3NlLXRyYW5zaXRpb24iOiIifSxvbjp7Y2xvc2U6ZnVuY3Rpb24oaSl7ZS5kZWxldGVUYWcoaSx0KX19fSxbaSgic3BhbiIse3N0YXRpY0NsYXNzOiJlbC1zZWxlY3RfX3RhZ3MtdGV4dCJ9LFtlLl92KGUuX3ModC5jdXJyZW50TGFiZWwpKV0pXSl9KSksZS5maWx0ZXJhYmxlP2koImlucHV0Iix7ZGlyZWN0aXZlczpbe25hbWU6Im1vZGVsIixyYXdOYW1lOiJ2LW1vZGVsIix2YWx1ZTplLnF1ZXJ5LGV4cHJlc3Npb246InF1ZXJ5In1dLHJlZjoiaW5wdXQiLHN0YXRpY0NsYXNzOiJlbC1zZWxlY3RfX2lucHV0IixjbGFzczoiaXMtIitlLnNpemUsc3R5bGU6e3dpZHRoOmUuaW5wdXRMZW5ndGgrInB4IiwibWF4LXdpZHRoIjplLmlucHV0V2lkdGgtNDIrInB4In0sYXR0cnM6e3R5cGU6InRleHQiLGRpc2FibGVkOmUuZGlzYWJsZWQsZGVib3VuY2U6ZS5yZW1vdGU/MzAwOjB9LGRvbVByb3BzOnt2YWx1ZTplLl9zKGUucXVlcnkpfSxvbjp7Zm9jdXM6ZnVuY3Rpb24odCl7ZS52aXNpYmxlPSEwfSxrZXl1cDplLm1hbmFnZVBsYWNlaG9sZGVyLGtleWRvd246W2UucmVzZXRJbnB1dFN0YXRlLGZ1bmN0aW9uKHQpe2UuX2sodC5rZXlDb2RlLCJkb3duIiw0MCl8fCh0LnByZXZlbnREZWZhdWx0KCksZS5uYXZpZ2F0ZU9wdGlvbnMoIm5leHQiKSl9LGZ1bmN0aW9uKHQpe2UuX2sodC5rZXlDb2RlLCJ1cCIsMzgpfHwodC5wcmV2ZW50RGVmYXVsdCgpLGUubmF2aWdhdGVPcHRpb25zKCJwcmV2IikpfSxmdW5jdGlvbih0KXtlLl9rKHQua2V5Q29kZSwiZW50ZXIiLDEzKXx8KHQucHJldmVudERlZmF1bHQoKSxlLnNlbGVjdE9wdGlvbih0KSl9LGZ1bmN0aW9uKHQpe2UuX2sodC5rZXlDb2RlLCJlc2MiLDI3KXx8KHQucHJldmVudERlZmF1bHQoKSxlLnZpc2libGU9ITEpfSxmdW5jdGlvbih0KXtlLl9rKHQua2V5Q29kZSwiZGVsZXRlIixbOCw0Nl0pfHxlLmRlbGV0ZVByZXZUYWcodCl9XSxpbnB1dDpmdW5jdGlvbih0KXt0LnRhcmdldC5jb21wb3Npbmd8fChlLnF1ZXJ5PXQudGFyZ2V0LnZhbHVlKX19fSk6ZS5fZSgpXSwxKTplLl9lKCksaSgiZWwtaW5wdXQiLHtkaXJlY3RpdmVzOlt7bmFtZToibW9kZWwiLHJhd05hbWU6InYtbW9kZWwiLHZhbHVlOmUuc2VsZWN0ZWRMYWJlbCxleHByZXNzaW9uOiJzZWxlY3RlZExhYmVsIn1dLHJlZjoicmVmZXJlbmNlIixhdHRyczp7dHlwZToidGV4dCIscGxhY2Vob2xkZXI6ZS5jdXJyZW50UGxhY2Vob2xkZXIsbmFtZTplLm5hbWUsc2l6ZTplLnNpemUsZGlzYWJsZWQ6ZS5kaXNhYmxlZCxyZWFkb25seTohZS5maWx0ZXJhYmxlfHxlLm11bHRpcGxlLCJ2YWxpZGF0ZS1ldmVudCI6ITEsaWNvbjplLmljb25DbGFzc30sZG9tUHJvcHM6e3ZhbHVlOmUuc2VsZWN0ZWRMYWJlbH0sb246e2ZvY3VzOmUuaGFuZGxlRm9jdXMsY2xpY2s6ZS5oYW5kbGVJY29uQ2xpY2ssaW5wdXQ6ZnVuY3Rpb24odCl7ZS5zZWxlY3RlZExhYmVsPXR9fSxuYXRpdmVPbjp7bW91c2Vkb3duOmZ1bmN0aW9uKHQpe2UuaGFuZGxlTW91c2VEb3duKHQpfSxrZXl1cDpmdW5jdGlvbih0KXtlLmRlYm91bmNlZE9uSW5wdXRDaGFuZ2UodCl9LGtleWRvd246W2Z1bmN0aW9uKHQpe2UuX2sodC5rZXlDb2RlLCJkb3duIiw0MCl8fCh0LnByZXZlbnREZWZhdWx0KCksZS5uYXZpZ2F0ZU9wdGlvbnMoIm5leHQiKSl9LGZ1bmN0aW9uKHQpe2UuX2sodC5rZXlDb2RlLCJ1cCIsMzgpfHwodC5wcmV2ZW50RGVmYXVsdCgpLGUubmF2aWdhdGVPcHRpb25zKCJwcmV2IikpfSxmdW5jdGlvbih0KXtlLl9rKHQua2V5Q29kZSwiZW50ZXIiLDEzKXx8KHQucHJldmVudERlZmF1bHQoKSxlLnNlbGVjdE9wdGlvbih0KSl9LGZ1bmN0aW9uKHQpe2UuX2sodC5rZXlDb2RlLCJlc2MiLDI3KXx8KHQucHJldmVudERlZmF1bHQoKSxlLnZpc2libGU9ITEpfSxmdW5jdGlvbih0KXtlLl9rKHQua2V5Q29kZSwidGFiIiw5KXx8KGUudmlzaWJsZT0hMSl9XSxwYXN0ZTpmdW5jdGlvbih0KXtlLmRlYm91bmNlZE9uSW5wdXRDaGFuZ2UodCl9LG1vdXNlZW50ZXI6ZnVuY3Rpb24odCl7ZS5pbnB1dEhvdmVyaW5nPSEwfSxtb3VzZWxlYXZlOmZ1bmN0aW9uKHQpe2UuaW5wdXRIb3ZlcmluZz0hMX19fSksaSgidHJhbnNpdGlvbiIse2F0dHJzOntuYW1lOiJlbC16b29tLWluLXRvcCJ9LG9uOnsiYWZ0ZXItbGVhdmUiOmUuZG9EZXN0cm95LCJhZnRlci1lbnRlciI6ZS5oYW5kbGVNZW51RW50ZXJ9fSxbaSgiZWwtc2VsZWN0LW1lbnUiLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZTplLnZpc2libGUmJmUuZW1wdHlUZXh0IT09ITEsZXhwcmVzc2lvbjoidmlzaWJsZSAmJiBlbXB0eVRleHQgIT09IGZhbHNlIn1dLHJlZjoicG9wcGVyIn0sW2koImVsLXNjcm9sbGJhciIse2RpcmVjdGl2ZXM6W3tuYW1lOiJzaG93IixyYXdOYW1lOiJ2LXNob3ciLHZhbHVlOmUub3B0aW9ucy5sZW5ndGg+MCYmIWUubG9hZGluZyxleHByZXNzaW9uOiJvcHRpb25zLmxlbmd0aCA+IDAgJiYgIWxvYWRpbmcifV0sY2xhc3M6eyJpcy1lbXB0eSI6IWUuYWxsb3dDcmVhdGUmJjA9PT1lLmZpbHRlcmVkT3B0aW9uc0NvdW50fSxhdHRyczp7dGFnOiJ1bCIsIndyYXAtY2xhc3MiOiJlbC1zZWxlY3QtZHJvcGRvd25fX3dyYXAiLCJ2aWV3LWNsYXNzIjoiZWwtc2VsZWN0LWRyb3Bkb3duX19saXN0In19LFtlLnNob3dOZXdPcHRpb24/aSgiZWwtb3B0aW9uIix7YXR0cnM6e3ZhbHVlOmUucXVlcnksY3JlYXRlZDoiIn19KTplLl9lKCksZS5fdCgiZGVmYXVsdCIpXSwyKSxlLmVtcHR5VGV4dCYmIWUuYWxsb3dDcmVhdGU/aSgicCIse3N0YXRpY0NsYXNzOiJlbC1zZWxlY3QtZHJvcGRvd25fX2VtcHR5In0sW2UuX3YoZS5fcyhlLmVtcHR5VGV4dCkpXSk6ZS5fZSgpXSwxKV0sMSldLDEpfSxzdGF0aWNSZW5kZXJGbnM6W119fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXQuX19lc01vZHVsZT0hMDt2YXIgcz1pKDM0KSxvPW4ocyk7by5kZWZhdWx0Lmluc3RhbGw9ZnVuY3Rpb24oZSl7ZS5jb21wb25lbnQoby5kZWZhdWx0Lm5hbWUsby5kZWZhdWx0KX0sdC5kZWZhdWx0PW8uZGVmYXVsdH0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX10Ll9fZXNNb2R1bGU9ITA7dmFyIHM9aSg1Miksbz1uKHMpO28uZGVmYXVsdC5pbnN0YWxsPWZ1bmN0aW9uKGUpe2UuY29tcG9uZW50KG8uZGVmYXVsdC5uYW1lLG8uZGVmYXVsdCl9LHQuZGVmYXVsdD1vLmRlZmF1bHR9LGZ1bmN0aW9uKGUsdCxpKXt2YXIgbj1pKDUpKGkoNTMpLGkoNTQpLG51bGwsbnVsbCk7ZS5leHBvcnRzPW4uZXhwb3J0c30sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX10Ll9fZXNNb2R1bGU9ITA7dmFyIHM9aSgyOCksbz1uKHMpLGE9aSgxMSkscj1uKGEpO3QuZGVmYXVsdD17bmFtZToiRWxEaWFsb2ciLG1peGluczpbby5kZWZhdWx0LHIuZGVmYXVsdF0scHJvcHM6e3RpdGxlOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifSxtb2RhbDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITB9LG1vZGFsQXBwZW5kVG9Cb2R5Ont0eXBlOkJvb2xlYW4sZGVmYXVsdDohMH0sbG9ja1Njcm9sbDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITB9LGNsb3NlT25DbGlja01vZGFsOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMH0sY2xvc2VPblByZXNzRXNjYXBlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMH0sc2hvd0Nsb3NlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMH0sc2l6ZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDoic21hbGwifSxjdXN0b21DbGFzczp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn0sdG9wOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIxNSUifX0sZGF0YTpmdW5jdGlvbigpe3JldHVybnt2aXNpYmxlOiExfX0sd2F0Y2g6e3ZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMudmlzaWJsZT1lfSx2aXNpYmxlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dGhpcy4kZW1pdCgiaW5wdXQiLGUpLGU/KHRoaXMuJGVtaXQoIm9wZW4iKSx0aGlzLiRlbC5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMudXBkYXRlUG9wcGVyKSx0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe3QuJHJlZnMuZGlhbG9nLnNjcm9sbFRvcD0wfSkpOih0aGlzLiRlbC5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMudXBkYXRlUG9wcGVyKSx0aGlzLiRlbWl0KCJjbG9zZSIpKX19LGNvbXB1dGVkOntzaXplQ2xhc3M6ZnVuY3Rpb24oKXtyZXR1cm4iZWwtZGlhbG9nLS0iK3RoaXMuc2l6ZX0sc3R5bGU6ZnVuY3Rpb24oKXtyZXR1cm4iZnVsbCI9PT10aGlzLnNpemU/e306e3RvcDp0aGlzLnRvcH19fSxtZXRob2RzOntoYW5kbGVXcmFwcGVyQ2xpY2s6ZnVuY3Rpb24oKXt0aGlzLmNsb3NlT25DbGlja01vZGFsJiZ0aGlzLmNsb3NlKCl9LHVwZGF0ZVBvcHBlcjpmdW5jdGlvbigpe3RoaXMuYnJvYWRjYXN0KCJFbFNlbGVjdERyb3Bkb3duIiwidXBkYXRlUG9wcGVyIiksdGhpcy5icm9hZGNhc3QoIkVsRHJvcGRvd25NZW51IiwidXBkYXRlUG9wcGVyIil9fSxtb3VudGVkOmZ1bmN0aW9uKCl7dGhpcy52YWx1ZSYmKHRoaXMucmVuZGVyZWQ9ITAsdGhpcy5vcGVuKCkpfX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxpPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIGkoInRyYW5zaXRpb24iLHthdHRyczp7bmFtZToiZGlhbG9nLWZhZGUifX0sW2koImRpdiIse2RpcmVjdGl2ZXM6W3tuYW1lOiJzaG93IixyYXdOYW1lOiJ2LXNob3ciLHZhbHVlOmUudmlzaWJsZSxleHByZXNzaW9uOiJ2aXNpYmxlIn1dLHN0YXRpY0NsYXNzOiJlbC1kaWFsb2dfX3dyYXBwZXIiLG9uOntjbGljazpmdW5jdGlvbih0KXt0LnRhcmdldD09PXQuY3VycmVudFRhcmdldCYmZS5oYW5kbGVXcmFwcGVyQ2xpY2sodCl9fX0sW2koImRpdiIse3JlZjoiZGlhbG9nIixzdGF0aWNDbGFzczoiZWwtZGlhbG9nIixjbGFzczpbZS5zaXplQ2xhc3MsZS5jdXN0b21DbGFzc10sc3R5bGU6ZS5zdHlsZX0sW2koImRpdiIse3N0YXRpY0NsYXNzOiJlbC1kaWFsb2dfX2hlYWRlciJ9LFtlLl90KCJ0aXRsZSIsW2koInNwYW4iLHtzdGF0aWNDbGFzczoiZWwtZGlhbG9nX190aXRsZSJ9LFtlLl92KGUuX3MoZS50aXRsZSkpXSldKSxpKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtZGlhbG9nX19oZWFkZXJidG4ifSxbZS5zaG93Q2xvc2U/aSgiaSIse3N0YXRpY0NsYXNzOiJlbC1kaWFsb2dfX2Nsb3NlIGVsLWljb24gZWwtaWNvbi1jbG9zZSIsb246e2NsaWNrOmZ1bmN0aW9uKHQpe2UuY2xvc2UoKX19fSk6ZS5fZSgpXSldLDIpLGUucmVuZGVyZWQ/aSgiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLWRpYWxvZ19fYm9keSJ9LFtlLl90KCJkZWZhdWx0IildLDIpOmUuX2UoKSxlLiRzbG90cy5mb290ZXI/aSgiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLWRpYWxvZ19fZm9vdGVyIn0sW2UuX3QoImZvb3RlciIpXSwyKTplLl9lKCldKV0pXSl9LHN0YXRpY1JlbmRlckZuczpbXX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5fX2VzTW9kdWxlPSEwO3ZhciBzPWkoNTYpLG89bihzKTtvLmRlZmF1bHQuaW5zdGFsbD1mdW5jdGlvbihlKXtlLmNvbXBvbmVudChvLmRlZmF1bHQubmFtZSxvLmRlZmF1bHQpfSx0LmRlZmF1bHQ9by5kZWZhdWx0fSxmdW5jdGlvbihlLHQsaSl7dmFyIG49aSg1KShpKDU3KSxpKDYxKSxudWxsLG51bGwpO2UuZXhwb3J0cz1uLmV4cG9ydHN9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5fX2VzTW9kdWxlPSEwO3ZhciBzPWkoMTkpLG89bihzKSxhPWkoNDgpLHI9bihhKSxsPWkoNTgpLHU9bihsKSxjPWkoMTEpLGQ9bihjKTt0LmRlZmF1bHQ9e25hbWU6IkVsQXV0b2NvbXBsZXRlIixtaXhpbnM6W2QuZGVmYXVsdF0sY29tcG9uZW50TmFtZToiRWxBdXRvY29tcGxldGUiLGNvbXBvbmVudHM6e0VsSW5wdXQ6by5kZWZhdWx0LEVsQXV0b2NvbXBsZXRlU3VnZ2VzdGlvbnM6dS5kZWZhdWx0fSxkaXJlY3RpdmVzOntDbGlja291dHNpZGU6ci5kZWZhdWx0fSxwcm9wczp7cG9wcGVyQ2xhc3M6U3RyaW5nLHBsYWNlaG9sZGVyOlN0cmluZyxkaXNhYmxlZDpCb29sZWFuLG5hbWU6U3RyaW5nLHNpemU6U3RyaW5nLHZhbHVlOlN0cmluZyxhdXRvZm9jdXM6Qm9vbGVhbixmZXRjaFN1Z2dlc3Rpb25zOkZ1bmN0aW9uLHRyaWdnZXJPbkZvY3VzOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMH0sY3VzdG9tSXRlbTpTdHJpbmcsaWNvbjpTdHJpbmcsb25JY29uQ2xpY2s6RnVuY3Rpb259LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57aXNGb2N1czohMSxzdWdnZXN0aW9uczpbXSxsb2FkaW5nOiExLGhpZ2hsaWdodGVkSW5kZXg6LTF9fSxjb21wdXRlZDp7c3VnZ2VzdGlvblZpc2libGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN1Z2dlc3Rpb25zLHQ9QXJyYXkuaXNBcnJheShlKSYmZS5sZW5ndGg+MDtyZXR1cm4odHx8dGhpcy5sb2FkaW5nKSYmdGhpcy5pc0ZvY3VzfX0sd2F0Y2g6e3N1Z2dlc3Rpb25WaXNpYmxlOmZ1bmN0aW9uKGUpe3RoaXMuYnJvYWRjYXN0KCJFbEF1dG9jb21wbGV0ZVN1Z2dlc3Rpb25zIiwidmlzaWJsZSIsW2UsdGhpcy4kcmVmcy5pbnB1dC4kcmVmcy5pbnB1dC5vZmZzZXRXaWR0aF0pfX0sbWV0aG9kczp7Z2V0RGF0YTpmdW5jdGlvbihlKXt2YXIgdD10aGlzO3RoaXMubG9hZGluZz0hMCx0aGlzLmZldGNoU3VnZ2VzdGlvbnMoZSxmdW5jdGlvbihlKXt0LmxvYWRpbmc9ITEsQXJyYXkuaXNBcnJheShlKT90LnN1Z2dlc3Rpb25zPWU6Y29uc29sZS5lcnJvcigiYXV0b2NvbXBsZXRlIHN1Z2dlc3Rpb25zIG11c3QgYmUgYW4gYXJyYXkiKX0pfSxoYW5kbGVDaGFuZ2U6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuJGVtaXQoImlucHV0IixlKSx0aGlzLnRyaWdnZXJPbkZvY3VzfHxlP3ZvaWQgdGhpcy5nZXREYXRhKGUpOnZvaWQodGhpcy5zdWdnZXN0aW9ucz1bXSl9LGhhbmRsZUZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5pc0ZvY3VzPSEwLHRoaXMudHJpZ2dlck9uRm9jdXMmJnRoaXMuZ2V0RGF0YSh0aGlzLnZhbHVlKX0saGFuZGxlQmx1cjpmdW5jdGlvbigpe3ZhciBlPXRoaXM7c2V0VGltZW91dChmdW5jdGlvbih0KXtlLmlzRm9jdXM9ITF9LDEwMCl9LGhhbmRsZUtleUVudGVyOmZ1bmN0aW9uKCl7dGhpcy5zdWdnZXN0aW9uVmlzaWJsZSYmdGhpcy5oaWdobGlnaHRlZEluZGV4Pj0wJiZ0aGlzLmhpZ2hsaWdodGVkSW5kZXg8dGhpcy5zdWdnZXN0aW9ucy5sZW5ndGgmJnRoaXMuc2VsZWN0KHRoaXMuc3VnZ2VzdGlvbnNbdGhpcy5oaWdobGlnaHRlZEluZGV4XSl9LGhhbmRsZUNsaWNrb3V0c2lkZTpmdW5jdGlvbigpe3RoaXMuaXNGb2N1cz0hMX0sc2VsZWN0OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dGhpcy4kZW1pdCgiaW5wdXQiLGUudmFsdWUpLHRoaXMuJGVtaXQoInNlbGVjdCIsZSksdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oZSl7dC5zdWdnZXN0aW9ucz1bXX0pfSxoaWdobGlnaHQ6ZnVuY3Rpb24oZSl7aWYodGhpcy5zdWdnZXN0aW9uVmlzaWJsZSYmIXRoaXMubG9hZGluZyl7ZTwwJiYoZT0wKSxlPj10aGlzLnN1Z2dlc3Rpb25zLmxlbmd0aCYmKGU9dGhpcy5zdWdnZXN0aW9ucy5sZW5ndGgtMSk7dmFyIHQ9dGhpcy4kcmVmcy5zdWdnZXN0aW9ucy4kZWwucXVlcnlTZWxlY3RvcigiLmVsLWF1dG9jb21wbGV0ZS1zdWdnZXN0aW9uX193cmFwIiksaT10LnF1ZXJ5U2VsZWN0b3JBbGwoIi5lbC1hdXRvY29tcGxldGUtc3VnZ2VzdGlvbl9fbGlzdCBsaSIpLG49aVtlXSxzPXQuc2Nyb2xsVG9wLG89bi5vZmZzZXRUb3A7bytuLnNjcm9sbEhlaWdodD5zK3QuY2xpZW50SGVpZ2h0JiYodC5zY3JvbGxUb3ArPW4uc2Nyb2xsSGVpZ2h0KSxvPHMmJih0LnNjcm9sbFRvcC09bi5zY3JvbGxIZWlnaHQpLHRoaXMuaGlnaGxpZ2h0ZWRJbmRleD1lfX19LG1vdW50ZWQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuJG9uKCJpdGVtLWNsaWNrIixmdW5jdGlvbih0KXtlLnNlbGVjdCh0KX0pfSxiZWZvcmVEZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy4kcmVmcy5zdWdnZXN0aW9ucy4kZGVzdHJveSgpfX19LGZ1bmN0aW9uKGUsdCxpKXt2YXIgbj1pKDUpKGkoNTkpLGkoNjApLG51bGwsbnVsbCk7ZS5leHBvcnRzPW4uZXhwb3J0c30sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX10Ll9fZXNNb2R1bGU9ITA7dmFyIHM9aSgyNyksbz1uKHMpLGE9aSgxMSkscj1uKGEpLGw9aSg0MSksdT1uKGwpO3QuZGVmYXVsdD17Y29tcG9uZW50czp7RWxTY3JvbGxiYXI6dS5kZWZhdWx0fSxtaXhpbnM6W28uZGVmYXVsdCxyLmRlZmF1bHRdLGNvbXBvbmVudE5hbWU6IkVsQXV0b2NvbXBsZXRlU3VnZ2VzdGlvbnMiLGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57cGFyZW50OnRoaXMuJHBhcmVudCxkcm9wZG93bldpZHRoOiIifX0scHJvcHM6e3N1Z2dlc3Rpb25zOkFycmF5LG9wdGlvbnM6e2RlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9yY2VBYnNvbHV0ZTohMCxncHVBY2NlbGVyYXRpb246ITF9fX19LG1ldGhvZHM6e3NlbGVjdDpmdW5jdGlvbihlKXt0aGlzLmRpc3BhdGNoKCJFbEF1dG9jb21wbGV0ZSIsIml0ZW0tY2xpY2siLGUpfX0sdXBkYXRlZDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24odCl7ZS51cGRhdGVQb3BwZXIoKX0pfSxtb3VudGVkOmZ1bmN0aW9uKCl7dGhpcy5wb3BwZXJFbG09dGhpcy4kZWwsdGhpcy5yZWZlcmVuY2VFbG09dGhpcy4kcGFyZW50LiRyZWZzLmlucHV0LiRyZWZzLmlucHV0fSxjcmVhdGVkOmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLiRvbigidmlzaWJsZSIsZnVuY3Rpb24odCxpKXtlLmRyb3Bkb3duV2lkdGg9aSsicHgiLGUuc2hvd1BvcHBlcj10fSl9fX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLiRjcmVhdGVFbGVtZW50LGk9ZS5fc2VsZi5fY3x8dDtyZXR1cm4gaSgidHJhbnNpdGlvbiIse2F0dHJzOntuYW1lOiJlbC16b29tLWluLXRvcCJ9LG9uOnsiYWZ0ZXItbGVhdmUiOmUuZG9EZXN0cm95fX0sW2koImRpdiIse2RpcmVjdGl2ZXM6W3tuYW1lOiJzaG93IixyYXdOYW1lOiJ2LXNob3ciLHZhbHVlOmUuc2hvd1BvcHBlcixleHByZXNzaW9uOiJzaG93UG9wcGVyIn1dLHN0YXRpY0NsYXNzOiJlbC1hdXRvY29tcGxldGUtc3VnZ2VzdGlvbiIsY2xhc3M6eyJpcy1sb2FkaW5nIjplLnBhcmVudC5sb2FkaW5nfSxzdHlsZTp7d2lkdGg6ZS5kcm9wZG93bldpZHRofX0sW2koImVsLXNjcm9sbGJhciIse2F0dHJzOnt0YWc6InVsIiwid3JhcC1jbGFzcyI6ImVsLWF1dG9jb21wbGV0ZS1zdWdnZXN0aW9uX193cmFwIiwidmlldy1jbGFzcyI6ImVsLWF1dG9jb21wbGV0ZS1zdWdnZXN0aW9uX19saXN0In19LFtlLnBhcmVudC5sb2FkaW5nP2koImxpIixbaSgiaSIse3N0YXRpY0NsYXNzOiJlbC1pY29uLWxvYWRpbmcifSldKTplLl9sKGUuc3VnZ2VzdGlvbnMsZnVuY3Rpb24odCxuKXtyZXR1cm5bZS5wYXJlbnQuY3VzdG9tSXRlbT9pKGUucGFyZW50LmN1c3RvbUl0ZW0se3RhZzoiY29tcG9uZW50IixjbGFzczp7aGlnaGxpZ2h0ZWQ6ZS5wYXJlbnQuaGlnaGxpZ2h0ZWRJbmRleD09PW59LGF0dHJzOntpdGVtOnQsaW5kZXg6bn0sb246e2NsaWNrOmZ1bmN0aW9uKGkpe2Uuc2VsZWN0KHQpfX19KTppKCJsaSIse2NsYXNzOntoaWdobGlnaHRlZDplLnBhcmVudC5oaWdobGlnaHRlZEluZGV4PT09bn0sb246e2NsaWNrOmZ1bmN0aW9uKGkpe2Uuc2VsZWN0KHQpfX19LFtlLl92KCJcbiAgICAgICAgICAiK2UuX3ModC52YWx1ZSkrIlxuICAgICAgICAiKV0pXX0pXSwyKV0sMSldKX0sc3RhdGljUmVuZGVyRm5zOltdfX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLiRjcmVhdGVFbGVtZW50LGk9ZS5fc2VsZi5fY3x8dDtyZXR1cm4gaSgiZGl2Iix7ZGlyZWN0aXZlczpbe25hbWU6ImNsaWNrb3V0c2lkZSIscmF3TmFtZToidi1jbGlja291dHNpZGUiLHZhbHVlOmUuaGFuZGxlQ2xpY2tvdXRzaWRlLGV4cHJlc3Npb246ImhhbmRsZUNsaWNrb3V0c2lkZSJ9XSxzdGF0aWNDbGFzczoiZWwtYXV0b2NvbXBsZXRlIn0sW2koImVsLWlucHV0Iix7cmVmOiJpbnB1dCIsYXR0cnM6e3ZhbHVlOmUudmFsdWUsZGlzYWJsZWQ6ZS5kaXNhYmxlZCxwbGFjZWhvbGRlcjplLnBsYWNlaG9sZGVyLG5hbWU6ZS5uYW1lLHNpemU6ZS5zaXplLGljb246ZS5pY29uLCJvbi1pY29uLWNsaWNrIjplLm9uSWNvbkNsaWNrfSxvbjp7Y2hhbmdlOmUuaGFuZGxlQ2hhbmdlLGZvY3VzOmUuaGFuZGxlRm9jdXMsYmx1cjplLmhhbmRsZUJsdXJ9LG5hdGl2ZU9uOntrZXlkb3duOltmdW5jdGlvbih0KXtlLl9rKHQua2V5Q29kZSwidXAiLDM4KXx8KHQucHJldmVudERlZmF1bHQoKSxlLmhpZ2hsaWdodChlLmhpZ2hsaWdodGVkSW5kZXgtMSkpfSxmdW5jdGlvbih0KXtlLl9rKHQua2V5Q29kZSwiZG93biIsNDApfHwodC5wcmV2ZW50RGVmYXVsdCgpLGUuaGlnaGxpZ2h0KGUuaGlnaGxpZ2h0ZWRJbmRleCsxKSl9LGZ1bmN0aW9uKHQpe2UuX2sodC5rZXlDb2RlLCJlbnRlciIsMTMpfHwodC5zdG9wUHJvcGFnYXRpb24oKSxlLmhhbmRsZUtleUVudGVyKHQpKX1dfX0sW2UuJHNsb3RzLnByZXBlbmQ/aSgidGVtcGxhdGUiLHtzbG90OiJwcmVwZW5kIn0sW2UuX3QoInByZXBlbmQiKV0sMik6ZS5fZSgpLGUuJHNsb3RzLmFwcGVuZD9pKCJ0ZW1wbGF0ZSIse3Nsb3Q6ImFwcGVuZCJ9LFtlLl90KCJhcHBlbmQiKV0sMik6ZS5fZSgpXSwyKSxpKCJlbC1hdXRvY29tcGxldGUtc3VnZ2VzdGlvbnMiLHtyZWY6InN1Z2dlc3Rpb25zIixjbGFzczpbZS5wb3BwZXJDbGFzcz9lLnBvcHBlckNsYXNzOiIiXSxhdHRyczp7c3VnZ2VzdGlvbnM6ZS5zdWdnZXN0aW9uc319KV0sMSl9LHN0YXRpY1JlbmRlckZuczpbXX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5fX2VzTW9kdWxlPSEwO3ZhciBzPWkoNjMpLG89bihzKTtvLmRlZmF1bHQuaW5zdGFsbD1mdW5jdGlvbihlKXtlLmNvbXBvbmVudChvLmRlZmF1bHQubmFtZSxvLmRlZmF1bHQpfSx0LmRlZmF1bHQ9by5kZWZhdWx0fSxmdW5jdGlvbihlLHQsaSl7dmFyIG49aSg1KShpKDY0KSxudWxsLG51bGwsbnVsbCk7ZS5leHBvcnRzPW4uZXhwb3J0c30sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX10Ll9fZXNNb2R1bGU9ITA7dmFyIHM9aSg0OCksbz1uKHMpLGE9aSgxMSkscj1uKGEpLGw9aSg2NSksdT1uKGwpLGM9aSg2OSksZD1uKGMpO3QuZGVmYXVsdD17bmFtZToiRWxEcm9wZG93biIsY29tcG9uZW50TmFtZToiRWxEcm9wZG93biIsbWl4aW5zOltyLmRlZmF1bHRdLGRpcmVjdGl2ZXM6e0NsaWNrb3V0c2lkZTpvLmRlZmF1bHR9LGNvbXBvbmVudHM6e0VsQnV0dG9uOnUuZGVmYXVsdCxFbEJ1dHRvbkdyb3VwOmQuZGVmYXVsdH0scHJvcHM6e3RyaWdnZXI6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6ImhvdmVyIn0sbWVudUFsaWduOnt0eXBlOlN0cmluZyxkZWZhdWx0OiJlbmQifSx0eXBlOlN0cmluZyxzaXplOlN0cmluZyxzcGxpdEJ1dHRvbjpCb29sZWFuLGhpZGVPbkNsaWNrOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMH19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57dGltZW91dDpudWxsLHZpc2libGU6ITF9fSxtb3VudGVkOmZ1bmN0aW9uKCl7dGhpcy4kb24oIm1lbnUtaXRlbS1jbGljayIsdGhpcy5oYW5kbGVNZW51SXRlbUNsaWNrKSx0aGlzLmluaXRFdmVudCgpfSx3YXRjaDp7dmlzaWJsZTpmdW5jdGlvbihlKXt0aGlzLmJyb2FkY2FzdCgiRWxEcm9wZG93bk1lbnUiLCJ2aXNpYmxlIixlKX19LG1ldGhvZHM6e3Nob3c6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2NsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpLHRoaXMudGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS52aXNpYmxlPSEwfSwyNTApfSxoaWRlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcztjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KSx0aGlzLnRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe2UudmlzaWJsZT0hMX0sMTUwKX0saGFuZGxlQ2xpY2s6ZnVuY3Rpb24oKXt0aGlzLnZpc2libGU9IXRoaXMudmlzaWJsZX0saW5pdEV2ZW50OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy50cmlnZ2VyLHQ9dGhpcy5zaG93LGk9dGhpcy5oaWRlLG49dGhpcy5oYW5kbGVDbGljayxzPXRoaXMuc3BsaXRCdXR0b24sbz1zP3RoaXMuJHJlZnMudHJpZ2dlci4kZWw6dGhpcy4kc2xvdHMuZGVmYXVsdFswXS5lbG07aWYoImhvdmVyIj09PWUpe28uYWRkRXZlbnRMaXN0ZW5lcigibW91c2VlbnRlciIsdCksby5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWxlYXZlIixpKTt2YXIgYT10aGlzLiRzbG90cy5kcm9wZG93blswXS5lbG07YS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWVudGVyIix0KSxhLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbGVhdmUiLGkpfWVsc2UiY2xpY2siPT09ZSYmby5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsbil9LGhhbmRsZU1lbnVJdGVtQ2xpY2s6ZnVuY3Rpb24oZSx0KXt0aGlzLmhpZGVPbkNsaWNrJiYodGhpcy52aXNpYmxlPSExKSx0aGlzLiRlbWl0KCJjb21tYW5kIixlLHQpfX0scmVuZGVyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsaT10aGlzLmhpZGUsbj10aGlzLnNwbGl0QnV0dG9uLHM9dGhpcy50eXBlLG89dGhpcy5zaXplLGE9ZnVuY3Rpb24oZSl7dC4kZW1pdCgiY2xpY2siKX0scj1uP2UoImVsLWJ1dHRvbi1ncm91cCIsbnVsbCxbZSgiZWwtYnV0dG9uIix7YXR0cnM6e3R5cGU6cyxzaXplOm99LG5hdGl2ZU9uOntjbGljazphfX0sW3RoaXMuJHNsb3RzLmRlZmF1bHRdKSxlKCJlbC1idXR0b24iLHtyZWY6InRyaWdnZXIiLGF0dHJzOnt0eXBlOnMsc2l6ZTpvfSxjbGFzczoiZWwtZHJvcGRvd25fX2NhcmV0LWJ1dHRvbiJ9LFtlKCJpIix7Y2xhc3M6ImVsLWRyb3Bkb3duX19pY29uIGVsLWljb24tY2FyZXQtYm90dG9tIn0sW10pXSldKTp0aGlzLiRzbG90cy5kZWZhdWx0O3JldHVybiBlKCJkaXYiLHtjbGFzczoiZWwtZHJvcGRvd24iLGRpcmVjdGl2ZXM6W3tuYW1lOiJjbGlja291dHNpZGUiLHZhbHVlOml9XX0sW3IsdGhpcy4kc2xvdHMuZHJvcGRvd25dKX19fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXQuX19lc01vZHVsZT0hMDt2YXIgcz1pKDY2KSxvPW4ocyk7by5kZWZhdWx0Lmluc3RhbGw9ZnVuY3Rpb24oZSl7ZS5jb21wb25lbnQoby5kZWZhdWx0Lm5hbWUsby5kZWZhdWx0KX0sdC5kZWZhdWx0PW8uZGVmYXVsdH0sZnVuY3Rpb24oZSx0LGkpe3ZhciBuPWkoNSkoaSg2NyksaSg2OCksbnVsbCxudWxsKTtlLmV4cG9ydHM9bi5leHBvcnRzfSxmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0Ijt0Ll9fZXNNb2R1bGU9ITAsdC5kZWZhdWx0PXtuYW1lOiJFbEJ1dHRvbiIscHJvcHM6e3R5cGU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6ImRlZmF1bHQifSxzaXplOlN0cmluZyxpY29uOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifSxuYXRpdmVUeXBlOnt0eXBlOlN0cmluZyxkZWZhdWx0OiJidXR0b24ifSxsb2FkaW5nOkJvb2xlYW4sZGlzYWJsZWQ6Qm9vbGVhbixwbGFpbjpCb29sZWFuLGF1dG9mb2N1czpCb29sZWFufSxtZXRob2RzOntoYW5kbGVDbGljazpmdW5jdGlvbihlKXt0aGlzLiRlbWl0KCJjbGljayIsZSl9fX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxpPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIGkoImJ1dHRvbiIse3N0YXRpY0NsYXNzOiJlbC1idXR0b24iLGNsYXNzOltlLnR5cGU/ImVsLWJ1dHRvbi0tIitlLnR5cGU6IiIsZS5zaXplPyJlbC1idXR0b24tLSIrZS5zaXplOiIiLHsiaXMtZGlzYWJsZWQiOmUuZGlzYWJsZWQsImlzLWxvYWRpbmciOmUubG9hZGluZywiaXMtcGxhaW4iOmUucGxhaW59XSxhdHRyczp7ZGlzYWJsZWQ6ZS5kaXNhYmxlZCxhdXRvZm9jdXM6ZS5hdXRvZm9jdXMsdHlwZTplLm5hdGl2ZVR5cGV9LG9uOntjbGljazplLmhhbmRsZUNsaWNrfX0sW2UubG9hZGluZz9pKCJpIix7c3RhdGljQ2xhc3M6ImVsLWljb24tbG9hZGluZyJ9KTplLl9lKCksZS5pY29uJiYhZS5sb2FkaW5nP2koImkiLHtjbGFzczoiZWwtaWNvbi0iK2UuaWNvbn0pOmUuX2UoKSxlLiRzbG90cy5kZWZhdWx0P2koInNwYW4iLFtlLl90KCJkZWZhdWx0IildLDIpOmUuX2UoKV0pfSxzdGF0aWNSZW5kZXJGbnM6W119fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXQuX19lc01vZHVsZT0hMDt2YXIgcz1pKDcwKSxvPW4ocyk7by5kZWZhdWx0Lmluc3RhbGw9ZnVuY3Rpb24oZSl7ZS5jb21wb25lbnQoby5kZWZhdWx0Lm5hbWUsby5kZWZhdWx0KX0sdC5kZWZhdWx0PW8uZGVmYXVsdH0sZnVuY3Rpb24oZSx0LGkpe3ZhciBuPWkoNSkoaSg3MSksaSg3MiksbnVsbCxudWxsKTtlLmV4cG9ydHM9bi5leHBvcnRzfSxmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0Ijt0Ll9fZXNNb2R1bGU9ITAsdC5kZWZhdWx0PXtuYW1lOiJFbEJ1dHRvbkdyb3VwIn19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxpPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIGkoImRpdiIse3N0YXRpY0NsYXNzOiJlbC1idXR0b24tZ3JvdXAifSxbZS5fdCgiZGVmYXVsdCIpXSwyKX0sc3RhdGljUmVuZGVyRm5zOltdfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX10Ll9fZXNNb2R1bGU9ITA7dmFyIHM9aSg3NCksbz1uKHMpO28uZGVmYXVsdC5pbnN0YWxsPWZ1bmN0aW9uKGUpe2UuY29tcG9uZW50KG8uZGVmYXVsdC5uYW1lLG8uZGVmYXVsdCl9LHQuZGVmYXVsdD1vLmRlZmF1bHR9LGZ1bmN0aW9uKGUsdCxpKXt2YXIgbj1pKDUpKGkoNzUpLGkoNzYpLG51bGwsbnVsbCk7ZS5leHBvcnRzPW4uZXhwb3J0c30sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX10Ll9fZXNNb2R1bGU9ITA7dmFyIHM9aSgyNyksbz1uKHMpO3QuZGVmYXVsdD17bmFtZToiRWxEcm9wZG93bk1lbnUiLGNvbXBvbmVudE5hbWU6IkVsRHJvcGRvd25NZW51IixtaXhpbnM6W28uZGVmYXVsdF0sY3JlYXRlZDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy4kb24oInVwZGF0ZVBvcHBlciIsdGhpcy51cGRhdGVQb3BwZXIpLHRoaXMuJG9uKCJ2aXNpYmxlIixmdW5jdGlvbih0KXtlLnNob3dQb3BwZXI9dH0pfSxtb3VudGVkOmZ1bmN0aW9uKCl7dGhpcy4kcGFyZW50LnBvcHBlckVsbT10aGlzLnBvcHBlckVsbT10aGlzLiRlbCx0aGlzLnJlZmVyZW5jZUVsbT10aGlzLiRwYXJlbnQuJGVsfSx3YXRjaDp7IiRwYXJlbnQubWVudUFsaWduIjp7aW1tZWRpYXRlOiEwLGhhbmRsZXI6ZnVuY3Rpb24oZSl7dGhpcy5jdXJyZW50UGxhY2VtZW50PSJib3R0b20tIitlfX19fX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLiRjcmVhdGVFbGVtZW50LGk9ZS5fc2VsZi5fY3x8dDtyZXR1cm4gaSgidHJhbnNpdGlvbiIse2F0dHJzOntuYW1lOiJlbC16b29tLWluLXRvcCJ9LG9uOnsiYWZ0ZXItbGVhdmUiOmUuZG9EZXN0cm95fX0sW2koInVsIix7ZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6ZS5zaG93UG9wcGVyLGV4cHJlc3Npb246InNob3dQb3BwZXIifV0sc3RhdGljQ2xhc3M6ImVsLWRyb3Bkb3duLW1lbnUifSxbZS5fdCgiZGVmYXVsdCIpXSwyKV0pfSxzdGF0aWNSZW5kZXJGbnM6W119fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXQuX19lc01vZHVsZT0hMDt2YXIgcz1pKDc4KSxvPW4ocyk7by5kZWZhdWx0Lmluc3RhbGw9ZnVuY3Rpb24oZSl7ZS5jb21wb25lbnQoby5kZWZhdWx0Lm5hbWUsby5kZWZhdWx0KX0sdC5kZWZhdWx0PW8uZGVmYXVsdH0sZnVuY3Rpb24oZSx0LGkpe3ZhciBuPWkoNSkoaSg3OSksaSg4MCksbnVsbCxudWxsKTtlLmV4cG9ydHM9bi5leHBvcnRzfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXQuX19lc01vZHVsZT0hMDt2YXIgcz1pKDExKSxvPW4ocyk7dC5kZWZhdWx0PXtuYW1lOiJFbERyb3Bkb3duSXRlbSIsbWl4aW5zOltvLmRlZmF1bHRdLHByb3BzOntjb21tYW5kOlN0cmluZyxkaXNhYmxlZDpCb29sZWFuLGRpdmlkZWQ6Qm9vbGVhbn0sbWV0aG9kczp7aGFuZGxlQ2xpY2s6ZnVuY3Rpb24oZSl7dGhpcy5kaXNwYXRjaCgiRWxEcm9wZG93biIsIm1lbnUtaXRlbS1jbGljayIsW3RoaXMuY29tbWFuZCx0aGlzXSl9fX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxpPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIGkoImxpIix7c3RhdGljQ2xhc3M6ImVsLWRyb3Bkb3duLW1lbnVfX2l0ZW0iLGNsYXNzOnsiaXMtZGlzYWJsZWQiOmUuZGlzYWJsZWQsImVsLWRyb3Bkb3duLW1lbnVfX2l0ZW0tLWRpdmlkZWQiOmUuZGl2aWRlZH0sb246e2NsaWNrOmUuaGFuZGxlQ2xpY2t9fSxbZS5fdCgiZGVmYXVsdCIpXSwyKX0sc3RhdGljUmVuZGVyRm5zOltdfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX10Ll9fZXNNb2R1bGU9ITA7dmFyIHM9aSg4Miksbz1uKHMpO28uZGVmYXVsdC5pbnN0YWxsPWZ1bmN0aW9uKGUpe2UuY29tcG9uZW50KG8uZGVmYXVsdC5uYW1lLG8uZGVmYXVsdCl9LHQuZGVmYXVsdD1vLmRlZmF1bHR9LGZ1bmN0aW9uKGUsdCxpKXt2YXIgbj1pKDUpKGkoODMpLGkoODQpLG51bGwsbnVsbCk7ZS5leHBvcnRzPW4uZXhwb3J0c30sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX10Ll9fZXNNb2R1bGU9ITA7dmFyIHM9aSgxMSksbz1uKHMpO3QuZGVmYXVsdD17bmFtZToiRWxNZW51Iixjb21wb25lbnROYW1lOiJFbE1lbnUiLG1peGluczpbby5kZWZhdWx0XSxwcm9wczp7bW9kZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDoidmVydGljYWwifSxkZWZhdWx0QWN0aXZlOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifSxkZWZhdWx0T3BlbmVkczpBcnJheSx0aGVtZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDoibGlnaHQifSx1bmlxdWVPcGVuZWQ6Qm9vbGVhbixyb3V0ZXI6Qm9vbGVhbixtZW51VHJpZ2dlcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiaG92ZXIifX0sZGF0YTpmdW5jdGlvbigpe3JldHVybnthY3RpdmVkSW5kZXg6dGhpcy5kZWZhdWx0QWN0aXZlLG9wZW5lZE1lbnVzOnRoaXMuZGVmYXVsdE9wZW5lZHM/dGhpcy5kZWZhdWx0T3BlbmVkcy5zbGljZSgwKTpbXSxpdGVtczp7fSxzdWJtZW51czp7fX19LHdhdGNoOntkZWZhdWx0QWN0aXZlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuaXRlbXNbZV07dD8odGhpcy5hY3RpdmVkSW5kZXg9dC5pbmRleCx0aGlzLmluaXRPcGVuZWRNZW51KCkpOnRoaXMuYWN0aXZlZEluZGV4PSIifSxkZWZhdWx0T3BlbmVkczpmdW5jdGlvbihlKXt0aGlzLm9wZW5lZE1lbnVzPWV9fSxtZXRob2RzOnthZGRJdGVtOmZ1bmN0aW9uKGUpe3RoaXMuJHNldCh0aGlzLml0ZW1zLGUuaW5kZXgsZSl9LHJlbW92ZUl0ZW06ZnVuY3Rpb24oZSl7ZGVsZXRlIHRoaXMuaXRlbXNbZS5pbmRleF19LGFkZFN1Ym1lbnU6ZnVuY3Rpb24oZSl7dGhpcy4kc2V0KHRoaXMuc3VibWVudXMsZS5pbmRleCxlKX0scmVtb3ZlU3VibWVudTpmdW5jdGlvbihlKXtkZWxldGUgdGhpcy5zdWJtZW51c1tlLmluZGV4XX0sb3Blbk1lbnU6ZnVuY3Rpb24oZSx0KXt2YXIgaT10aGlzLm9wZW5lZE1lbnVzO2kuaW5kZXhPZihlKT09PS0xJiYodGhpcy51bmlxdWVPcGVuZWQmJih0aGlzLm9wZW5lZE1lbnVzPWkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiB0LmluZGV4T2YoZSkhPT0tMX0pKSx0aGlzLm9wZW5lZE1lbnVzLnB1c2goZSkpfSxjbG9zZU1lbnU6ZnVuY3Rpb24oZSx0KXt0aGlzLm9wZW5lZE1lbnVzLnNwbGljZSh0aGlzLm9wZW5lZE1lbnVzLmluZGV4T2YoZSksMSl9LGhhbmRsZVN1Ym1lbnVDbGljazpmdW5jdGlvbihlKXt2YXIgdD1lLmluZGV4LGk9ZS5pbmRleFBhdGgsbj10aGlzLm9wZW5lZE1lbnVzLmluZGV4T2YodCkhPT0tMTtuPyh0aGlzLmNsb3NlTWVudSh0LGkpLHRoaXMuJGVtaXQoImNsb3NlIix0LGkpKToodGhpcy5vcGVuTWVudSh0LGkpLHRoaXMuJGVtaXQoIm9wZW4iLHQsaSkpfSxoYW5kbGVJdGVtQ2xpY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pbmRleCxpPWUuaW5kZXhQYXRoO3RoaXMuYWN0aXZlZEluZGV4PWUuaW5kZXgsdGhpcy4kZW1pdCgic2VsZWN0Iix0LGksZSksImhvcml6b250YWwiPT09dGhpcy5tb2RlJiYodGhpcy5vcGVuZWRNZW51cz1bXSksdGhpcy5yb3V0ZXImJnRoaXMucm91dGVUb0l0ZW0oZSl9LGluaXRPcGVuZWRNZW51OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMuYWN0aXZlZEluZGV4LGk9dGhpcy5pdGVtc1t0XTtpZihpJiYiaG9yaXpvbnRhbCIhPT10aGlzLm1vZGUpe3ZhciBuPWkuaW5kZXhQYXRoO24uZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgaT1lLnN1Ym1lbnVzW3RdO2kmJmUub3Blbk1lbnUodCxpLmluZGV4UGF0aCl9KX19LHJvdXRlVG9JdGVtOmZ1bmN0aW9uKGUpe3ZhciB0PWUucm91dGV8fGUuaW5kZXg7dHJ5e3RoaXMuJHJvdXRlci5wdXNoKHQpfWNhdGNoKGUpe2NvbnNvbGUuZXJyb3IoZSl9fX0sbW91bnRlZDpmdW5jdGlvbigpe3RoaXMuaW5pdE9wZW5lZE1lbnUoKSx0aGlzLiRvbigiaXRlbS1jbGljayIsdGhpcy5oYW5kbGVJdGVtQ2xpY2spLHRoaXMuJG9uKCJzdWJtZW51LWNsaWNrIix0aGlzLmhhbmRsZVN1Ym1lbnVDbGljayl9fX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLiRjcmVhdGVFbGVtZW50LGk9ZS5fc2VsZi5fY3x8dDtyZXR1cm4gaSgidWwiLHtzdGF0aWNDbGFzczoiZWwtbWVudSIsY2xhc3M6eyJlbC1tZW51LS1ob3Jpem9udGFsIjoiaG9yaXpvbnRhbCI9PT1lLm1vZGUsImVsLW1lbnUtLWRhcmsiOiJkYXJrIj09PWUudGhlbWV9fSxbZS5fdCgiZGVmYXVsdCIpXSwyKX0sc3RhdGljUmVuZGVyRm5zOltdfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX10Ll9fZXNNb2R1bGU9ITA7dmFyIHM9aSg4Niksbz1uKHMpO28uZGVmYXVsdC5pbnN0YWxsPWZ1bmN0aW9uKGUpe2UuY29tcG9uZW50KG8uZGVmYXVsdC5uYW1lLG8uZGVmYXVsdCl9LHQuZGVmYXVsdD1vLmRlZmF1bHR9LGZ1bmN0aW9uKGUsdCxpKXt2YXIgbj1pKDUpKGkoODcpLGkoOTApLG51bGwsbnVsbCk7ZS5leHBvcnRzPW4uZXhwb3J0c30sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX10Ll9fZXNNb2R1bGU9ITA7dmFyIHM9aSg4OCksbz1uKHMpLGE9aSgxMSkscj1uKGEpLGw9aSg4OSksdT1uKGwpO3QuZGVmYXVsdD17bmFtZToiRWxTdWJtZW51Iixjb21wb25lbnROYW1lOiJFbFN1Ym1lbnUiLG1peGluczpbby5kZWZhdWx0LHIuZGVmYXVsdF0sY29tcG9uZW50czp7Q29sbGFwc2VUcmFuc2l0aW9uOnUuZGVmYXVsdH0scHJvcHM6e2luZGV4Ont0eXBlOlN0cmluZyxyZXF1aXJlZDohMH19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57dGltZW91dDpudWxsLGl0ZW1zOnt9LHN1Ym1lbnVzOnt9fX0sY29tcHV0ZWQ6e29wZW5lZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJvb3RNZW51Lm9wZW5lZE1lbnVzLmluZGV4T2YodGhpcy5pbmRleCk+LTF9LGFjdGl2ZTp7Y2FjaGU6ITEsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9ITEsdD10aGlzLnN1Ym1lbnVzLGk9dGhpcy5pdGVtcztyZXR1cm4gT2JqZWN0LmtleXMoaSkuZm9yRWFjaChmdW5jdGlvbih0KXtpW3RdLmFjdGl2ZSYmKGU9ITApfSksT2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihpKXt0W2ldLmFjdGl2ZSYmKGU9ITApfSksZX19fSxtZXRob2RzOnthZGRJdGVtOmZ1bmN0aW9uKGUpe3RoaXMuJHNldCh0aGlzLml0ZW1zLGUuaW5kZXgsZSl9LHJlbW92ZUl0ZW06ZnVuY3Rpb24oZSl7ZGVsZXRlIHRoaXMuaXRlbXNbZS5pbmRleF19LGFkZFN1Ym1lbnU6ZnVuY3Rpb24oZSl7dGhpcy4kc2V0KHRoaXMuc3VibWVudXMsZS5pbmRleCxlKX0scmVtb3ZlU3VibWVudTpmdW5jdGlvbihlKXtkZWxldGUgdGhpcy5zdWJtZW51c1tlLmluZGV4XX0saGFuZGxlQ2xpY2s6ZnVuY3Rpb24oKXt0aGlzLmRpc3BhdGNoKCJFbE1lbnUiLCJzdWJtZW51LWNsaWNrIix0aGlzKX0saGFuZGxlTW91c2VlbnRlcjpmdW5jdGlvbigpe3ZhciBlPXRoaXM7Y2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCksdGhpcy50aW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLnJvb3RNZW51Lm9wZW5NZW51KGUuaW5kZXgsZS5pbmRleFBhdGgpfSwzMDApfSxoYW5kbGVNb3VzZWxlYXZlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcztjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KSx0aGlzLnRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe2Uucm9vdE1lbnUuY2xvc2VNZW51KGUuaW5kZXgsZS5pbmRleFBhdGgpfSwzMDApfSxpbml0RXZlbnRzOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yb290TWVudSx0PXRoaXMuaGFuZGxlTW91c2VlbnRlcixpPXRoaXMuaGFuZGxlTW91c2VsZWF2ZSxuPXRoaXMuaGFuZGxlQ2xpY2sscz12b2lkIDA7Imhvcml6b250YWwiPT09ZS5tb2RlJiYiaG92ZXIiPT09ZS5tZW51VHJpZ2dlcj8ocz10aGlzLiRlbCxzLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZW50ZXIiLHQpLHMuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VsZWF2ZSIsaSkpOihzPXRoaXMuJHJlZnNbInN1Ym1lbnUtdGl0bGUiXSxzLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixuKSl9fSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5wYXJlbnRNZW51LmFkZFN1Ym1lbnUodGhpcyksdGhpcy5yb290TWVudS5hZGRTdWJtZW51KHRoaXMpfSxiZWZvcmVEZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5wYXJlbnRNZW51LnJlbW92ZVN1Ym1lbnUodGhpcyksdGhpcy5yb290TWVudS5yZW1vdmVTdWJtZW51KHRoaXMpfSxtb3VudGVkOmZ1bmN0aW9uKCl7dGhpcy5pbml0RXZlbnRzKCl9fX0sZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7dC5fX2VzTW9kdWxlPSEwLHQuZGVmYXVsdD17Y29tcHV0ZWQ6e2luZGV4UGF0aDpmdW5jdGlvbigpe2Zvcih2YXIgZT1bdGhpcy5pbmRleF0sdD10aGlzLiRwYXJlbnQ7IkVsTWVudSIhPT10LiRvcHRpb25zLmNvbXBvbmVudE5hbWU7KXQuaW5kZXgmJmUudW5zaGlmdCh0LmluZGV4KSx0PXQuJHBhcmVudDtyZXR1cm4gZX0scm9vdE1lbnU6ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy4kcGFyZW50O2UmJiJFbE1lbnUiIT09ZS4kb3B0aW9ucy5jb21wb25lbnROYW1lOyllPWUuJHBhcmVudDtyZXR1cm4gZX0scGFyZW50TWVudTpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLiRwYXJlbnQ7ZSYmWyJFbE1lbnUiLCJFbFN1Ym1lbnUiXS5pbmRleE9mKGUuJG9wdGlvbnMuY29tcG9uZW50TmFtZSk9PT0tMTspZT1lLiRwYXJlbnQ7cmV0dXJuIGV9LHBhZGRpbmdTdHlsZTpmdW5jdGlvbigpe2lmKCJ2ZXJ0aWNhbCIhPT10aGlzLnJvb3RNZW51Lm1vZGUpcmV0dXJue307Zm9yKHZhciBlPTIwLHQ9dGhpcy4kcGFyZW50O3QmJiJFbE1lbnUiIT09dC4kb3B0aW9ucy5jb21wb25lbnROYW1lOykiRWxTdWJtZW51Ij09PXQuJG9wdGlvbnMuY29tcG9uZW50TmFtZSYmKGUrPTIwKSx0PXQuJHBhcmVudDtyZXR1cm57cGFkZGluZ0xlZnQ6ZSsicHgifX19fX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9dC5fX2VzTW9kdWxlPSEwO3ZhciBzPWkoMzApLG89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7bih0aGlzLGUpfXJldHVybiBlLnByb3RvdHlwZS5iZWZvcmVFbnRlcj1mdW5jdGlvbihlKXsoMCxzLmFkZENsYXNzKShlLCJjb2xsYXBzZS10cmFuc2l0aW9uIiksZS5kYXRhc2V0fHwoZS5kYXRhc2V0PXt9KSxlLmRhdGFzZXQub2xkUGFkZGluZ1RvcD1lLnN0eWxlLnBhZGRpbmdUb3AsZS5kYXRhc2V0Lm9sZFBhZGRpbmdCb3R0b209ZS5zdHlsZS5wYWRkaW5nQm90dG9tLGUuc3R5bGUuaGVpZ2h0PSIwIixlLnN0eWxlLnBhZGRpbmdUb3A9MCxlLnN0eWxlLnBhZGRpbmdCb3R0b209MH0sZS5wcm90b3R5cGUuZW50ZXI9ZnVuY3Rpb24oZSl7ZS5kYXRhc2V0Lm9sZE92ZXJmbG93PWUuc3R5bGUub3ZlcmZsb3csMCE9PWUuc2Nyb2xsSGVpZ2h0PyhlLnN0eWxlLmhlaWdodD1lLnNjcm9sbEhlaWdodCsicHgiLGUuc3R5bGUucGFkZGluZ1RvcD1lLmRhdGFzZXQub2xkUGFkZGluZ1RvcCxlLnN0eWxlLnBhZGRpbmdCb3R0b209ZS5kYXRhc2V0Lm9sZFBhZGRpbmdCb3R0b20pOihlLnN0eWxlLmhlaWdodD0iIixlLnN0eWxlLnBhZGRpbmdUb3A9ZS5kYXRhc2V0Lm9sZFBhZGRpbmdUb3AsZS5zdHlsZS5wYWRkaW5nQm90dG9tPWUuZGF0YXNldC5vbGRQYWRkaW5nQm90dG9tKSxlLnN0eWxlLm92ZXJmbG93PSJoaWRkZW4ifSxlLnByb3RvdHlwZS5hZnRlckVudGVyPWZ1bmN0aW9uKGUpeygwLHMucmVtb3ZlQ2xhc3MpKGUsImNvbGxhcHNlLXRyYW5zaXRpb24iKSxlLnN0eWxlLmhlaWdodD0iIixlLnN0eWxlLm92ZXJmbG93PWUuZGF0YXNldC5vbGRPdmVyZmxvd30sZS5wcm90b3R5cGUuYmVmb3JlTGVhdmU9ZnVuY3Rpb24oZSl7ZS5kYXRhc2V0fHwoZS5kYXRhc2V0PXt9KSxlLmRhdGFzZXQub2xkUGFkZGluZ1RvcD1lLnN0eWxlLnBhZGRpbmdUb3AsZS5kYXRhc2V0Lm9sZFBhZGRpbmdCb3R0b209ZS5zdHlsZS5wYWRkaW5nQm90dG9tLGUuZGF0YXNldC5vbGRPdmVyZmxvdz1lLnN0eWxlLm92ZXJmbG93LGUuc3R5bGUuaGVpZ2h0PWUuc2Nyb2xsSGVpZ2h0KyJweCIsZS5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIn0sZS5wcm90b3R5cGUubGVhdmU9ZnVuY3Rpb24oZSl7MCE9PWUuc2Nyb2xsSGVpZ2h0JiYoKDAscy5hZGRDbGFzcykoZSwiY29sbGFwc2UtdHJhbnNpdGlvbiIpLGUuc3R5bGUuaGVpZ2h0PTAsZS5zdHlsZS5wYWRkaW5nVG9wPTAsZS5zdHlsZS5wYWRkaW5nQm90dG9tPTApfSxlLnByb3RvdHlwZS5hZnRlckxlYXZlPWZ1bmN0aW9uKGUpeygwLHMucmVtb3ZlQ2xhc3MpKGUsImNvbGxhcHNlLXRyYW5zaXRpb24iKSxlLnN0eWxlLmhlaWdodD0iIixlLnN0eWxlLm92ZXJmbG93PWUuZGF0YXNldC5vbGRPdmVyZmxvdyxlLnN0eWxlLnBhZGRpbmdUb3A9ZS5kYXRhc2V0Lm9sZFBhZGRpbmdUb3AsZS5zdHlsZS5wYWRkaW5nQm90dG9tPWUuZGF0YXNldC5vbGRQYWRkaW5nQm90dG9tfSxlfSgpO3QuZGVmYXVsdD17ZnVuY3Rpb25hbDohMCxyZW5kZXI6ZnVuY3Rpb24oZSx0KXt2YXIgaT10LmNoaWxkcmVuLG49e29uOm5ldyBvfTtyZXR1cm4gZSgidHJhbnNpdGlvbiIsbixpKX19fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuJGNyZWF0ZUVsZW1lbnQsaT1lLl9zZWxmLl9jfHx0O3JldHVybiBpKCJsaSIse2NsYXNzOnsiZWwtc3VibWVudSI6ITAsImlzLWFjdGl2ZSI6ZS5hY3RpdmUsImlzLW9wZW5lZCI6ZS5vcGVuZWR9fSxbaSgiZGl2Iix7cmVmOiJzdWJtZW51LXRpdGxlIixzdGF0aWNDbGFzczoiZWwtc3VibWVudV9fdGl0bGUiLHN0eWxlOmUucGFkZGluZ1N0eWxlfSxbZS5fdCgidGl0bGUiKSxpKCJpIix7Y2xhc3M6eyJlbC1zdWJtZW51X19pY29uLWFycm93IjohMCwiZWwtaWNvbi1hcnJvdy1kb3duIjoidmVydGljYWwiPT09ZS5yb290TWVudS5tb2RlLCJlbC1pY29uLWNhcmV0LWJvdHRvbSI6Imhvcml6b250YWwiPT09ZS5yb290TWVudS5tb2RlfX0pXSwyKSwiaG9yaXpvbnRhbCI9PT1lLnJvb3RNZW51Lm1vZGU/W2koInRyYW5zaXRpb24iLHthdHRyczp7bmFtZToiZWwtem9vbS1pbi10b3AifX0sW2koInVsIix7CmRpcmVjdGl2ZXM6W3tuYW1lOiJzaG93IixyYXdOYW1lOiJ2LXNob3ciLHZhbHVlOmUub3BlbmVkLGV4cHJlc3Npb246Im9wZW5lZCJ9XSxzdGF0aWNDbGFzczoiZWwtbWVudSJ9LFtlLl90KCJkZWZhdWx0IildLDIpXSldOmkoImNvbGxhcHNlLXRyYW5zaXRpb24iLFtpKCJ1bCIse2RpcmVjdGl2ZXM6W3tuYW1lOiJzaG93IixyYXdOYW1lOiJ2LXNob3ciLHZhbHVlOmUub3BlbmVkLGV4cHJlc3Npb246Im9wZW5lZCJ9XSxzdGF0aWNDbGFzczoiZWwtbWVudSJ9LFtlLl90KCJkZWZhdWx0IildLDIpXSldLDIpfSxzdGF0aWNSZW5kZXJGbnM6W119fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXQuX19lc01vZHVsZT0hMDt2YXIgcz1pKDkyKSxvPW4ocyk7by5kZWZhdWx0Lmluc3RhbGw9ZnVuY3Rpb24oZSl7ZS5jb21wb25lbnQoby5kZWZhdWx0Lm5hbWUsby5kZWZhdWx0KX0sdC5kZWZhdWx0PW8uZGVmYXVsdH0sZnVuY3Rpb24oZSx0LGkpe3ZhciBuPWkoNSkoaSg5MyksaSg5NCksbnVsbCxudWxsKTtlLmV4cG9ydHM9bi5leHBvcnRzfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXQuX19lc01vZHVsZT0hMDt2YXIgcz1pKDg4KSxvPW4ocyksYT1pKDExKSxyPW4oYSk7dC5kZWZhdWx0PXtuYW1lOiJFbE1lbnVJdGVtIixjb21wb25lbnROYW1lOiJFbE1lbnVJdGVtIixtaXhpbnM6W28uZGVmYXVsdCxyLmRlZmF1bHRdLHByb3BzOntpbmRleDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LHJvdXRlOnt0eXBlOk9iamVjdCxyZXF1aXJlZDohMX0sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX19LGNvbXB1dGVkOnthY3RpdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmRleD09PXRoaXMucm9vdE1lbnUuYWN0aXZlZEluZGV4fX0sbWV0aG9kczp7aGFuZGxlQ2xpY2s6ZnVuY3Rpb24oKXt0aGlzLmRpc3BhdGNoKCJFbE1lbnUiLCJpdGVtLWNsaWNrIix0aGlzKSx0aGlzLiRlbWl0KCJjbGljayIsdGhpcyl9fSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5wYXJlbnRNZW51LmFkZEl0ZW0odGhpcyksdGhpcy5yb290TWVudS5hZGRJdGVtKHRoaXMpfSxiZWZvcmVEZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5wYXJlbnRNZW51LnJlbW92ZUl0ZW0odGhpcyksdGhpcy5yb290TWVudS5yZW1vdmVJdGVtKHRoaXMpfX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxpPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIGkoImxpIix7c3RhdGljQ2xhc3M6ImVsLW1lbnUtaXRlbSIsY2xhc3M6eyJpcy1hY3RpdmUiOmUuYWN0aXZlLCJpcy1kaXNhYmxlZCI6ZS5kaXNhYmxlZH0sc3R5bGU6ZS5wYWRkaW5nU3R5bGUsb246e2NsaWNrOmUuaGFuZGxlQ2xpY2t9fSxbZS5fdCgiZGVmYXVsdCIpXSwyKX0sc3RhdGljUmVuZGVyRm5zOltdfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX10Ll9fZXNNb2R1bGU9ITA7dmFyIHM9aSg5Niksbz1uKHMpO28uZGVmYXVsdC5pbnN0YWxsPWZ1bmN0aW9uKGUpe2UuY29tcG9uZW50KG8uZGVmYXVsdC5uYW1lLG8uZGVmYXVsdCl9LHQuZGVmYXVsdD1vLmRlZmF1bHR9LGZ1bmN0aW9uKGUsdCxpKXt2YXIgbj1pKDUpKGkoOTcpLGkoOTgpLG51bGwsbnVsbCk7ZS5leHBvcnRzPW4uZXhwb3J0c30sZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7dC5fX2VzTW9kdWxlPSEwLHQuZGVmYXVsdD17bmFtZToiRWxNZW51SXRlbUdyb3VwIixjb21wb25lbnROYW1lOiJFbE1lbnVJdGVtR3JvdXAiLHByb3BzOnt0aXRsZTp7dHlwZTpTdHJpbmd9fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3BhZGRpbmdMZWZ0OjIwfX0sY29tcHV0ZWQ6e2xldmVsUGFkZGluZzpmdW5jdGlvbigpe2Zvcih2YXIgZT0xMCx0PXRoaXMuJHBhcmVudDt0JiYiRWxNZW51IiE9PXQuJG9wdGlvbnMuY29tcG9uZW50TmFtZTspIkVsU3VibWVudSI9PT10LiRvcHRpb25zLmNvbXBvbmVudE5hbWUmJihlKz0yMCksdD10LiRwYXJlbnQ7cmV0dXJuIDEwPT09ZSYmKGU9MjApLGV9fX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxpPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIGkoImxpIix7c3RhdGljQ2xhc3M6ImVsLW1lbnUtaXRlbS1ncm91cCJ9LFtpKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtbWVudS1pdGVtLWdyb3VwX190aXRsZSIsc3R5bGU6e3BhZGRpbmdMZWZ0OmUubGV2ZWxQYWRkaW5nKyJweCJ9fSxbZS4kc2xvdHMudGl0bGU/ZS5fdCgidGl0bGUiKTpbZS5fdihlLl9zKGUudGl0bGUpKV1dLDIpLGkoInVsIixbZS5fdCgiZGVmYXVsdCIpXSwyKV0pfSxzdGF0aWNSZW5kZXJGbnM6W119fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXQuX19lc01vZHVsZT0hMDt2YXIgcz1pKDEwMCksbz1uKHMpO28uZGVmYXVsdC5pbnN0YWxsPWZ1bmN0aW9uKGUpe2UuY29tcG9uZW50KG8uZGVmYXVsdC5uYW1lLG8uZGVmYXVsdCl9LHQuZGVmYXVsdD1vLmRlZmF1bHR9LGZ1bmN0aW9uKGUsdCxpKXt2YXIgbj1pKDUpKGkoMTAxKSxpKDEwMiksbnVsbCxudWxsKTtlLmV4cG9ydHM9bi5leHBvcnRzfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXQuX19lc01vZHVsZT0hMDt2YXIgcz1pKDE5KSxvPW4ocyksYT1pKDMwKTt0LmRlZmF1bHQ9e25hbWU6IkVsSW5wdXROdW1iZXIiLGRpcmVjdGl2ZXM6e3JlcGVhdENsaWNrOntiaW5kOmZ1bmN0aW9uKGUsdCxpKXt2YXIgbj1udWxsLHM9dm9pZCAwLG89ZnVuY3Rpb24oKXtyZXR1cm4gaS5jb250ZXh0W3QuZXhwcmVzc2lvbl0uYXBwbHkoKX0scj1mdW5jdGlvbigpe25ldyBEYXRlLXM8MTAwJiZvKCksY2xlYXJJbnRlcnZhbChuKSxuPW51bGx9OygwLGEub24pKGUsIm1vdXNlZG93biIsZnVuY3Rpb24oKXtzPW5ldyBEYXRlLCgwLGEub25jZSkoZG9jdW1lbnQsIm1vdXNldXAiLHIpLGNsZWFySW50ZXJ2YWwobiksbj1zZXRJbnRlcnZhbChvLDEwMCl9KX19fSxjb21wb25lbnRzOntFbElucHV0Om8uZGVmYXVsdH0scHJvcHM6e3N0ZXA6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MX0sbWF4Ont0eXBlOk51bWJlcixkZWZhdWx0OjEvMH0sbWluOnt0eXBlOk51bWJlcixkZWZhdWx0Oi0oMS8wKX0sdmFsdWU6e2RlZmF1bHQ6MH0sZGlzYWJsZWQ6Qm9vbGVhbixzaXplOlN0cmluZyxjb250cm9sczp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITB9fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnRWYWx1ZTowfX0sd2F0Y2g6e3ZhbHVlOntpbW1lZGlhdGU6ITAsaGFuZGxlcjpmdW5jdGlvbihlKXt2YXIgdD1OdW1iZXIoZSk7aXNOYU4odCl8fCh0Pj10aGlzLm1heCYmKHQ9dGhpcy5tYXgpLHQ8PXRoaXMubWluJiYodD10aGlzLm1pbiksdGhpcy5jdXJyZW50VmFsdWU9dCx0aGlzLiRlbWl0KCJpbnB1dCIsdCkpfX19LGNvbXB1dGVkOnttaW5EaXNhYmxlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWNyZWFzZSh0aGlzLnZhbHVlLHRoaXMuc3RlcCk8dGhpcy5taW59LG1heERpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2luY3JlYXNlKHRoaXMudmFsdWUsdGhpcy5zdGVwKT50aGlzLm1heH0scHJlY2lzaW9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy52YWx1ZSx0PXRoaXMuc3RlcCxpPXRoaXMuZ2V0UHJlY2lzaW9uO3JldHVybiBNYXRoLm1heChpKGUpLGkodCkpfX0sbWV0aG9kczp7dG9QcmVjaXNpb246ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9dGhpcy5wcmVjaXNpb24pLHBhcnNlRmxvYXQocGFyc2VGbG9hdChOdW1iZXIoZSkudG9GaXhlZCh0KSkpfSxnZXRQcmVjaXNpb246ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50b1N0cmluZygpLGk9dC5pbmRleE9mKCIuIiksbj0wO3JldHVybiBpIT09LTEmJihuPXQubGVuZ3RoLWktMSksbn0sX2luY3JlYXNlOmZ1bmN0aW9uKGUsdCl7aWYoIm51bWJlciIhPXR5cGVvZiBlKXJldHVybiB0aGlzLmN1cnJlbnRWYWx1ZTt2YXIgaT1NYXRoLnBvdygxMCx0aGlzLnByZWNpc2lvbik7cmV0dXJuIHRoaXMudG9QcmVjaXNpb24oKGkqZStpKnQpL2kpfSxfZGVjcmVhc2U6ZnVuY3Rpb24oZSx0KXtpZigibnVtYmVyIiE9dHlwZW9mIGUpcmV0dXJuIHRoaXMuY3VycmVudFZhbHVlO3ZhciBpPU1hdGgucG93KDEwLHRoaXMucHJlY2lzaW9uKTtyZXR1cm4gdGhpcy50b1ByZWNpc2lvbigoaSplLWkqdCkvaSl9LGluY3JlYXNlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuZGlzYWJsZWQmJiF0aGlzLm1heERpc2FibGVkKXt2YXIgZT10aGlzLnZhbHVlfHwwLHQ9dGhpcy5faW5jcmVhc2UoZSx0aGlzLnN0ZXApO3Q+dGhpcy5tYXh8fHRoaXMuc2V0Q3VycmVudFZhbHVlKHQpfX0sZGVjcmVhc2U6ZnVuY3Rpb24oKXtpZighdGhpcy5kaXNhYmxlZCYmIXRoaXMubWluRGlzYWJsZWQpe3ZhciBlPXRoaXMudmFsdWV8fDAsdD10aGlzLl9kZWNyZWFzZShlLHRoaXMuc3RlcCk7dDx0aGlzLm1pbnx8dGhpcy5zZXRDdXJyZW50VmFsdWUodCl9fSxoYW5kbGVCbHVyOmZ1bmN0aW9uKCl7dGhpcy4kcmVmcy5pbnB1dC5zZXRDdXJyZW50VmFsdWUodGhpcy5jdXJyZW50VmFsdWUpfSxzZXRDdXJyZW50VmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jdXJyZW50VmFsdWU7ZT49dGhpcy5tYXgmJihlPXRoaXMubWF4KSxlPD10aGlzLm1pbiYmKGU9dGhpcy5taW4pLHQhPT1lJiYodGhpcy4kZW1pdCgiY2hhbmdlIixlLHQpLHRoaXMuJGVtaXQoImlucHV0IixlKSx0aGlzLmN1cnJlbnRWYWx1ZT1lKX0saGFuZGxlSW5wdXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9TnVtYmVyKGUpO2lzTmFOKHQpfHx0aGlzLnNldEN1cnJlbnRWYWx1ZSh0KX19fX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLiRjcmVhdGVFbGVtZW50LGk9ZS5fc2VsZi5fY3x8dDtyZXR1cm4gaSgiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLWlucHV0LW51bWJlciIsY2xhc3M6W2Uuc2l6ZT8iZWwtaW5wdXQtbnVtYmVyLS0iK2Uuc2l6ZToiIix7ImlzLWRpc2FibGVkIjplLmRpc2FibGVkfSx7ImlzLXdpdGhvdXQtY29udHJvbHMiOiFlLmNvbnRyb2xzfV19LFtlLmNvbnRyb2xzP2koInNwYW4iLHtkaXJlY3RpdmVzOlt7bmFtZToicmVwZWF0LWNsaWNrIixyYXdOYW1lOiJ2LXJlcGVhdC1jbGljayIsdmFsdWU6ZS5kZWNyZWFzZSxleHByZXNzaW9uOiJkZWNyZWFzZSJ9XSxzdGF0aWNDbGFzczoiZWwtaW5wdXQtbnVtYmVyX19kZWNyZWFzZSIsY2xhc3M6eyJpcy1kaXNhYmxlZCI6ZS5taW5EaXNhYmxlZH19LFtpKCJpIix7c3RhdGljQ2xhc3M6ImVsLWljb24tbWludXMifSldKTplLl9lKCksZS5jb250cm9scz9pKCJzcGFuIix7ZGlyZWN0aXZlczpbe25hbWU6InJlcGVhdC1jbGljayIscmF3TmFtZToidi1yZXBlYXQtY2xpY2siLHZhbHVlOmUuaW5jcmVhc2UsZXhwcmVzc2lvbjoiaW5jcmVhc2UifV0sc3RhdGljQ2xhc3M6ImVsLWlucHV0LW51bWJlcl9faW5jcmVhc2UiLGNsYXNzOnsiaXMtZGlzYWJsZWQiOmUubWF4RGlzYWJsZWR9fSxbaSgiaSIse3N0YXRpY0NsYXNzOiJlbC1pY29uLXBsdXMifSldKTplLl9lKCksaSgiZWwtaW5wdXQiLHtyZWY6ImlucHV0IixhdHRyczp7dmFsdWU6ZS5jdXJyZW50VmFsdWUsZGlzYWJsZWQ6ZS5kaXNhYmxlZCxzaXplOmUuc2l6ZSxtYXg6ZS5tYXgsbWluOmUubWlufSxvbjp7Ymx1cjplLmhhbmRsZUJsdXIsaW5wdXQ6ZS5oYW5kbGVJbnB1dH0sbmF0aXZlT246e2tleWRvd246W2Z1bmN0aW9uKHQpe2UuX2sodC5rZXlDb2RlLCJ1cCIsMzgpfHwodC5wcmV2ZW50RGVmYXVsdCgpLGUuaW5jcmVhc2UodCkpfSxmdW5jdGlvbih0KXtlLl9rKHQua2V5Q29kZSwiZG93biIsNDApfHwodC5wcmV2ZW50RGVmYXVsdCgpLGUuZGVjcmVhc2UodCkpfV19fSxbZS4kc2xvdHMucHJlcGVuZD9pKCJ0ZW1wbGF0ZSIse3Nsb3Q6InByZXBlbmQifSxbZS5fdCgicHJlcGVuZCIpXSwyKTplLl9lKCksZS4kc2xvdHMuYXBwZW5kP2koInRlbXBsYXRlIix7c2xvdDoiYXBwZW5kIn0sW2UuX3QoImFwcGVuZCIpXSwyKTplLl9lKCldLDIpXSwxKX0sc3RhdGljUmVuZGVyRm5zOltdfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX10Ll9fZXNNb2R1bGU9ITA7dmFyIHM9aSgxMDQpLG89bihzKTtvLmRlZmF1bHQuaW5zdGFsbD1mdW5jdGlvbihlKXtlLmNvbXBvbmVudCgiZWwtcmFkaW8iLG8uZGVmYXVsdCl9LHQuZGVmYXVsdD1vLmRlZmF1bHR9LGZ1bmN0aW9uKGUsdCxpKXt2YXIgbj1pKDUpKGkoMTA1KSxpKDEwNiksbnVsbCxudWxsKTtlLmV4cG9ydHM9bi5leHBvcnRzfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXQuX19lc01vZHVsZT0hMDt2YXIgcz1pKDExKSxvPW4ocyk7dC5kZWZhdWx0PXtuYW1lOiJFbFJhZGlvIixtaXhpbnM6W28uZGVmYXVsdF0sY29tcG9uZW50TmFtZToiRWxSYWRpbyIscHJvcHM6e3ZhbHVlOnt9LGxhYmVsOnt9LGRpc2FibGVkOkJvb2xlYW4sbmFtZTpTdHJpbmd9LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57Zm9jdXM6ITF9fSxjb21wdXRlZDp7aXNHcm91cDpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLiRwYXJlbnQ7ZTspe2lmKCJFbFJhZGlvR3JvdXAiPT09ZS4kb3B0aW9ucy5jb21wb25lbnROYW1lKXJldHVybiB0aGlzLl9yYWRpb0dyb3VwPWUsITA7ZT1lLiRwYXJlbnR9cmV0dXJuITF9LG1vZGVsOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0dyb3VwP3RoaXMuX3JhZGlvR3JvdXAudmFsdWU6dGhpcy52YWx1ZX0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuaXNHcm91cD90aGlzLmRpc3BhdGNoKCJFbFJhZGlvR3JvdXAiLCJpbnB1dCIsW2VdKTp0aGlzLiRlbWl0KCJpbnB1dCIsZSl9fSxpc0Rpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNHcm91cD90aGlzLl9yYWRpb0dyb3VwLmRpc2FibGVkfHx0aGlzLmRpc2FibGVkOnRoaXMuZGlzYWJsZWR9fX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxpPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIGkoImxhYmVsIix7c3RhdGljQ2xhc3M6ImVsLXJhZGlvIn0sW2koInNwYW4iLHtzdGF0aWNDbGFzczoiZWwtcmFkaW9fX2lucHV0IixjbGFzczp7ImlzLWRpc2FibGVkIjplLmlzRGlzYWJsZWQsImlzLWNoZWNrZWQiOmUubW9kZWw9PT1lLmxhYmVsLCJpcy1mb2N1cyI6ZS5mb2N1c319LFtpKCJzcGFuIix7c3RhdGljQ2xhc3M6ImVsLXJhZGlvX19pbm5lciJ9KSxpKCJpbnB1dCIse2RpcmVjdGl2ZXM6W3tuYW1lOiJtb2RlbCIscmF3TmFtZToidi1tb2RlbCIsdmFsdWU6ZS5tb2RlbCxleHByZXNzaW9uOiJtb2RlbCJ9XSxzdGF0aWNDbGFzczoiZWwtcmFkaW9fX29yaWdpbmFsIixhdHRyczp7dHlwZToicmFkaW8iLG5hbWU6ZS5uYW1lLGRpc2FibGVkOmUuaXNEaXNhYmxlZH0sZG9tUHJvcHM6e3ZhbHVlOmUubGFiZWwsY2hlY2tlZDplLl9xKGUubW9kZWwsZS5sYWJlbCl9LG9uOntmb2N1czpmdW5jdGlvbih0KXtlLmZvY3VzPSEwfSxibHVyOmZ1bmN0aW9uKHQpe2UuZm9jdXM9ITF9LGNoYW5nZTpmdW5jdGlvbih0KXtlLm1vZGVsPWUubGFiZWx9fX0pXSksaSgic3BhbiIse3N0YXRpY0NsYXNzOiJlbC1yYWRpb19fbGFiZWwifSxbZS5fdCgiZGVmYXVsdCIpLGUuJHNsb3RzLmRlZmF1bHQ/ZS5fZSgpOltlLl92KGUuX3MoZS5sYWJlbCkpXV0sMildKX0sc3RhdGljUmVuZGVyRm5zOltdfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX10Ll9fZXNNb2R1bGU9ITA7dmFyIHM9aSgxMDgpLG89bihzKTtvLmRlZmF1bHQuaW5zdGFsbD1mdW5jdGlvbihlKXtlLmNvbXBvbmVudChvLmRlZmF1bHQubmFtZSxvLmRlZmF1bHQpfSx0LmRlZmF1bHQ9by5kZWZhdWx0fSxmdW5jdGlvbihlLHQsaSl7dmFyIG49aSg1KShpKDEwOSksaSgxMTApLG51bGwsbnVsbCk7ZS5leHBvcnRzPW4uZXhwb3J0c30sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX10Ll9fZXNNb2R1bGU9ITA7dmFyIHM9aSgxMSksbz1uKHMpO3QuZGVmYXVsdD17bmFtZToiRWxSYWRpb0dyb3VwIixjb21wb25lbnROYW1lOiJFbFJhZGlvR3JvdXAiLG1peGluczpbby5kZWZhdWx0XSxwcm9wczp7dmFsdWU6e30sc2l6ZTpTdHJpbmcsZmlsbDpTdHJpbmcsdGV4dENvbG9yOlN0cmluZyxkaXNhYmxlZDpCb29sZWFufSx3YXRjaDp7dmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy4kZW1pdCgiY2hhbmdlIixlKSx0aGlzLmRpc3BhdGNoKCJFbEZvcm1JdGVtIiwiZWwuZm9ybS5jaGFuZ2UiLFt0aGlzLnZhbHVlXSl9fX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxpPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIGkoImRpdiIse3N0YXRpY0NsYXNzOiJlbC1yYWRpby1ncm91cCJ9LFtlLl90KCJkZWZhdWx0IildLDIpfSxzdGF0aWNSZW5kZXJGbnM6W119fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXQuX19lc01vZHVsZT0hMDt2YXIgcz1pKDExMiksbz1uKHMpO28uZGVmYXVsdC5pbnN0YWxsPWZ1bmN0aW9uKGUpe2UuY29tcG9uZW50KG8uZGVmYXVsdC5uYW1lLG8uZGVmYXVsdCl9LHQuZGVmYXVsdD1vLmRlZmF1bHR9LGZ1bmN0aW9uKGUsdCxpKXt2YXIgbj1pKDUpKGkoMTEzKSxpKDExNCksbnVsbCxudWxsKTtlLmV4cG9ydHM9bi5leHBvcnRzfSxmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0Ijt0Ll9fZXNNb2R1bGU9ITAsdC5kZWZhdWx0PXtuYW1lOiJFbFJhZGlvQnV0dG9uIixwcm9wczp7bGFiZWw6e30sZGlzYWJsZWQ6Qm9vbGVhbixuYW1lOlN0cmluZ30sY29tcHV0ZWQ6e3ZhbHVlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmFkaW9Hcm91cC52YWx1ZX0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3JhZGlvR3JvdXAuJGVtaXQoImlucHV0IixlKX19LF9yYWRpb0dyb3VwOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuJHBhcmVudDtlOyl7aWYoIkVsUmFkaW9Hcm91cCI9PT1lLiRvcHRpb25zLmNvbXBvbmVudE5hbWUpcmV0dXJuIGU7ZT1lLiRwYXJlbnR9cmV0dXJuITF9LGFjdGl2ZVN0eWxlOmZ1bmN0aW9uKCl7cmV0dXJue2JhY2tncm91bmRDb2xvcjp0aGlzLl9yYWRpb0dyb3VwLmZpbGx8fCIiLGJvcmRlckNvbG9yOnRoaXMuX3JhZGlvR3JvdXAuZmlsbHx8IiIsYm94U2hhZG93OnRoaXMuX3JhZGlvR3JvdXAuZmlsbD8iLTFweCAwIDAgMCAiK3RoaXMuX3JhZGlvR3JvdXAuZmlsbDoiIixjb2xvcjp0aGlzLl9yYWRpb0dyb3VwLnRleHRDb2xvcnx8IiJ9fSxzaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JhZGlvR3JvdXAuc2l6ZX0saXNEaXNhYmxlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc2FibGVkfHx0aGlzLl9yYWRpb0dyb3VwLmRpc2FibGVkfX19fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuJGNyZWF0ZUVsZW1lbnQsaT1lLl9zZWxmLl9jfHx0O3JldHVybiBpKCJsYWJlbCIse3N0YXRpY0NsYXNzOiJlbC1yYWRpby1idXR0b24iLGNsYXNzOltlLnNpemU/ImVsLXJhZGlvLWJ1dHRvbi0tIitlLnNpemU6IiIseyJpcy1hY3RpdmUiOmUudmFsdWU9PT1lLmxhYmVsfSx7ImlzLWRpc2FibGVkIjplLmlzRGlzYWJsZWR9XX0sW2koImlucHV0Iix7ZGlyZWN0aXZlczpbe25hbWU6Im1vZGVsIixyYXdOYW1lOiJ2LW1vZGVsIix2YWx1ZTplLnZhbHVlLGV4cHJlc3Npb246InZhbHVlIn1dLHN0YXRpY0NsYXNzOiJlbC1yYWRpby1idXR0b25fX29yaWctcmFkaW8iLGF0dHJzOnt0eXBlOiJyYWRpbyIsbmFtZTplLm5hbWUsZGlzYWJsZWQ6ZS5pc0Rpc2FibGVkfSxkb21Qcm9wczp7dmFsdWU6ZS5sYWJlbCxjaGVja2VkOmUuX3EoZS52YWx1ZSxlLmxhYmVsKX0sb246e2NoYW5nZTpmdW5jdGlvbih0KXtlLnZhbHVlPWUubGFiZWx9fX0pLGkoInNwYW4iLHtzdGF0aWNDbGFzczoiZWwtcmFkaW8tYnV0dG9uX19pbm5lciIsc3R5bGU6ZS52YWx1ZT09PWUubGFiZWw/ZS5hY3RpdmVTdHlsZTpudWxsfSxbZS5fdCgiZGVmYXVsdCIpLGUuJHNsb3RzLmRlZmF1bHQ/ZS5fZSgpOltlLl92KGUuX3MoZS5sYWJlbCkpXV0sMildKX0sc3RhdGljUmVuZGVyRm5zOltdfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX10Ll9fZXNNb2R1bGU9ITA7dmFyIHM9aSgxMTYpLG89bihzKTtvLmRlZmF1bHQuaW5zdGFsbD1mdW5jdGlvbihlKXtlLmNvbXBvbmVudChvLmRlZmF1bHQubmFtZSxvLmRlZmF1bHQpfSx0LmRlZmF1bHQ9by5kZWZhdWx0fSxmdW5jdGlvbihlLHQsaSl7dmFyIG49aSg1KShpKDExNyksaSgxMTgpLG51bGwsbnVsbCk7ZS5leHBvcnRzPW4uZXhwb3J0c30sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX10Ll9fZXNNb2R1bGU9ITA7dmFyIHM9aSgxMSksbz1uKHMpO3QuZGVmYXVsdD17bmFtZToiRWxDaGVja2JveCIsbWl4aW5zOltvLmRlZmF1bHRdLGNvbXBvbmVudE5hbWU6IkVsQ2hlY2tib3giLGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57c2VsZk1vZGVsOiExLGZvY3VzOiExfX0sY29tcHV0ZWQ6e21vZGVsOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0dyb3VwP3RoaXMuc3RvcmU6dm9pZCAwIT09dGhpcy52YWx1ZT90aGlzLnZhbHVlOnRoaXMuc2VsZk1vZGVsfSxzZXQ6ZnVuY3Rpb24oZSl7aWYodGhpcy5pc0dyb3VwKXt2YXIgdD0hMTt2b2lkIDAhPT10aGlzLl9jaGVja2JveEdyb3VwLm1pbiYmZS5sZW5ndGg8dGhpcy5fY2hlY2tib3hHcm91cC5taW4mJih0PSEwKSx2b2lkIDAhPT10aGlzLl9jaGVja2JveEdyb3VwLm1heCYmZS5sZW5ndGg+dGhpcy5fY2hlY2tib3hHcm91cC5tYXgmJih0PSEwKSx0PT09ITEmJnRoaXMuZGlzcGF0Y2goIkVsQ2hlY2tib3hHcm91cCIsImlucHV0IixbZV0pfWVsc2Ugdm9pZCAwIT09dGhpcy52YWx1ZT90aGlzLiRlbWl0KCJpbnB1dCIsZSk6dGhpcy5zZWxmTW9kZWw9ZX19LGlzQ2hlY2tlZDpmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEJvb2xlYW5dIj09PXt9LnRvU3RyaW5nLmNhbGwodGhpcy5tb2RlbCk/dGhpcy5tb2RlbDpBcnJheS5pc0FycmF5KHRoaXMubW9kZWwpP3RoaXMubW9kZWwuaW5kZXhPZih0aGlzLmxhYmVsKT4tMTpudWxsIT09dGhpcy5tb2RlbCYmdm9pZCAwIT09dGhpcy5tb2RlbD90aGlzLm1vZGVsPT09dGhpcy50cnVlTGFiZWw6dm9pZCAwfSxpc0dyb3VwOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuJHBhcmVudDtlOyl7aWYoIkVsQ2hlY2tib3hHcm91cCI9PT1lLiRvcHRpb25zLmNvbXBvbmVudE5hbWUpcmV0dXJuIHRoaXMuX2NoZWNrYm94R3JvdXA9ZSwhMDtlPWUuJHBhcmVudH1yZXR1cm4hMX0sc3RvcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hlY2tib3hHcm91cD90aGlzLl9jaGVja2JveEdyb3VwLnZhbHVlOnRoaXMudmFsdWV9fSxwcm9wczp7dmFsdWU6e30sbGFiZWw6e30saW5kZXRlcm1pbmF0ZTpCb29sZWFuLGRpc2FibGVkOkJvb2xlYW4sY2hlY2tlZDpCb29sZWFuLG5hbWU6U3RyaW5nLHRydWVMYWJlbDpbU3RyaW5nLE51bWJlcl0sZmFsc2VMYWJlbDpbU3RyaW5nLE51bWJlcl19LG1ldGhvZHM6e2FkZFRvU3RvcmU6ZnVuY3Rpb24oKXtBcnJheS5pc0FycmF5KHRoaXMubW9kZWwpJiZ0aGlzLm1vZGVsLmluZGV4T2YodGhpcy5sYWJlbCk9PT0tMT90aGlzLm1vZGVsLnB1c2godGhpcy5sYWJlbCk6dGhpcy5tb2RlbD10aGlzLnRydWVMYWJlbHx8ITB9LGhhbmRsZUNoYW5nZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzO3RoaXMuJGVtaXQoImNoYW5nZSIsZSksdGhpcy5pc0dyb3VwJiZ0aGlzLiRuZXh0VGljayhmdW5jdGlvbihlKXt0LmRpc3BhdGNoKCJFbENoZWNrYm94R3JvdXAiLCJjaGFuZ2UiLFt0Ll9jaGVja2JveEdyb3VwLnZhbHVlXSl9KX19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLmNoZWNrZWQmJnRoaXMuYWRkVG9TdG9yZSgpfX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxpPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIGkoImxhYmVsIix7c3RhdGljQ2xhc3M6ImVsLWNoZWNrYm94In0sW2koInNwYW4iLHtzdGF0aWNDbGFzczoiZWwtY2hlY2tib3hfX2lucHV0IixjbGFzczp7ImlzLWRpc2FibGVkIjplLmRpc2FibGVkLCJpcy1jaGVja2VkIjplLmlzQ2hlY2tlZCwiaXMtaW5kZXRlcm1pbmF0ZSI6ZS5pbmRldGVybWluYXRlLCJpcy1mb2N1cyI6ZS5mb2N1c319LFtpKCJzcGFuIix7c3RhdGljQ2xhc3M6ImVsLWNoZWNrYm94X19pbm5lciJ9KSxlLnRydWVMYWJlbHx8ZS5mYWxzZUxhYmVsP2koImlucHV0Iix7ZGlyZWN0aXZlczpbe25hbWU6Im1vZGVsIixyYXdOYW1lOiJ2LW1vZGVsIix2YWx1ZTplLm1vZGVsLGV4cHJlc3Npb246Im1vZGVsIn1dLHN0YXRpY0NsYXNzOiJlbC1jaGVja2JveF9fb3JpZ2luYWwiLGF0dHJzOnt0eXBlOiJjaGVja2JveCIsbmFtZTplLm5hbWUsZGlzYWJsZWQ6ZS5kaXNhYmxlZCwidHJ1ZS12YWx1ZSI6ZS50cnVlTGFiZWwsImZhbHNlLXZhbHVlIjplLmZhbHNlTGFiZWx9LGRvbVByb3BzOntjaGVja2VkOkFycmF5LmlzQXJyYXkoZS5tb2RlbCk/ZS5faShlLm1vZGVsLG51bGwpPi0xOmUuX3EoZS5tb2RlbCxlLnRydWVMYWJlbCl9LG9uOntjaGFuZ2U6W2Z1bmN0aW9uKHQpe3ZhciBpPWUubW9kZWwsbj10LnRhcmdldCxzPW4uY2hlY2tlZD9lLnRydWVMYWJlbDplLmZhbHNlTGFiZWw7aWYoQXJyYXkuaXNBcnJheShpKSl7dmFyIG89bnVsbCxhPWUuX2koaSxvKTtzP2E8MCYmKGUubW9kZWw9aS5jb25jYXQobykpOmE+LTEmJihlLm1vZGVsPWkuc2xpY2UoMCxhKS5jb25jYXQoaS5zbGljZShhKzEpKSl9ZWxzZSBlLm1vZGVsPXN9LGUuaGFuZGxlQ2hhbmdlXSxmb2N1czpmdW5jdGlvbih0KXtlLmZvY3VzPSEwfSxibHVyOmZ1bmN0aW9uKHQpe2UuZm9jdXM9ITF9fX0pOmkoImlucHV0Iix7ZGlyZWN0aXZlczpbe25hbWU6Im1vZGVsIixyYXdOYW1lOiJ2LW1vZGVsIix2YWx1ZTplLm1vZGVsLGV4cHJlc3Npb246Im1vZGVsIn1dLHN0YXRpY0NsYXNzOiJlbC1jaGVja2JveF9fb3JpZ2luYWwiLGF0dHJzOnt0eXBlOiJjaGVja2JveCIsZGlzYWJsZWQ6ZS5kaXNhYmxlZCxuYW1lOmUubmFtZX0sZG9tUHJvcHM6e3ZhbHVlOmUubGFiZWwsY2hlY2tlZDpBcnJheS5pc0FycmF5KGUubW9kZWwpP2UuX2koZS5tb2RlbCxlLmxhYmVsKT4tMTplLm1vZGVsfSxvbjp7Y2hhbmdlOltmdW5jdGlvbih0KXt2YXIgaT1lLm1vZGVsLG49dC50YXJnZXQscz0hIW4uY2hlY2tlZDtpZihBcnJheS5pc0FycmF5KGkpKXt2YXIgbz1lLmxhYmVsLGE9ZS5faShpLG8pO3M/YTwwJiYoZS5tb2RlbD1pLmNvbmNhdChvKSk6YT4tMSYmKGUubW9kZWw9aS5zbGljZSgwLGEpLmNvbmNhdChpLnNsaWNlKGErMSkpKX1lbHNlIGUubW9kZWw9c30sZS5oYW5kbGVDaGFuZ2VdLGZvY3VzOmZ1bmN0aW9uKHQpe2UuZm9jdXM9ITB9LGJsdXI6ZnVuY3Rpb24odCl7ZS5mb2N1cz0hMX19fSldKSxlLiRzbG90cy5kZWZhdWx0fHxlLmxhYmVsP2koInNwYW4iLHtzdGF0aWNDbGFzczoiZWwtY2hlY2tib3hfX2xhYmVsIn0sW2UuX3QoImRlZmF1bHQiKSxlLiRzbG90cy5kZWZhdWx0P2UuX2UoKTpbZS5fdihlLl9zKGUubGFiZWwpKV1dLDIpOmUuX2UoKV0pfSxzdGF0aWNSZW5kZXJGbnM6W119fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXQuX19lc01vZHVsZT0hMDt2YXIgcz1pKDEyMCksbz1uKHMpO28uZGVmYXVsdC5pbnN0YWxsPWZ1bmN0aW9uKGUpe2UuY29tcG9uZW50KG8uZGVmYXVsdC5uYW1lLG8uZGVmYXVsdCl9LHQuZGVmYXVsdD1vLmRlZmF1bHR9LGZ1bmN0aW9uKGUsdCxpKXt2YXIgbj1pKDUpKGkoMTIxKSxpKDEyMiksbnVsbCxudWxsKTtlLmV4cG9ydHM9bi5leHBvcnRzfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXQuX19lc01vZHVsZT0hMDt2YXIgcz1pKDExKSxvPW4ocyk7dC5kZWZhdWx0PXtuYW1lOiJFbENoZWNrYm94R3JvdXAiLGNvbXBvbmVudE5hbWU6IkVsQ2hlY2tib3hHcm91cCIsbWl4aW5zOltvLmRlZmF1bHRdLHByb3BzOnt2YWx1ZTp7fSxtaW46TnVtYmVyLG1heDpOdW1iZXJ9LHdhdGNoOnt2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmRpc3BhdGNoKCJFbEZvcm1JdGVtIiwiZWwuZm9ybS5jaGFuZ2UiLFtlXSl9fX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxpPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIGkoImRpdiIse3N0YXRpY0NsYXNzOiJlbC1jaGVja2JveC1ncm91cCJ9LFtlLl90KCJkZWZhdWx0IildLDIpfSxzdGF0aWNSZW5kZXJGbnM6W119fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXQuX19lc01vZHVsZT0hMDt2YXIgcz1pKDEyNCksbz1uKHMpO28uZGVmYXVsdC5pbnN0YWxsPWZ1bmN0aW9uKGUpe2UuY29tcG9uZW50KG8uZGVmYXVsdC5uYW1lLG8uZGVmYXVsdCl9LHQuZGVmYXVsdD1vLmRlZmF1bHR9LGZ1bmN0aW9uKGUsdCxpKXt2YXIgbj1pKDUpKGkoMTI1KSxpKDEyNiksbnVsbCxudWxsKTtlLmV4cG9ydHM9bi5leHBvcnRzfSxmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0Ijt0Ll9fZXNNb2R1bGU9ITAsdC5kZWZhdWx0PXtuYW1lOiJFbFN3aXRjaCIscHJvcHM6e3ZhbHVlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMH0sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSx3aWR0aDp7dHlwZTpOdW1iZXIsZGVmYXVsdDowfSxvbkljb25DbGFzczp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn0sb2ZmSWNvbkNsYXNzOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifSxvblRleHQ6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6Ik9OIn0sb2ZmVGV4dDp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiT0ZGIn0sb25Db2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn0sb2ZmQ29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9LG5hbWU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2NvcmVXaWR0aDp0aGlzLndpZHRofX0sY29tcHV0ZWQ6e2hhc1RleHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vblRleHR8fHRoaXMub2ZmVGV4dH0sX3ZhbHVlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWx1ZX0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuJGVtaXQoImlucHV0IixlKX19LHRyYW5zZm9ybTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlPyJ0cmFuc2xhdGUoIisodGhpcy5jb3JlV2lkdGgtMjApKyJweCwgMnB4KSI6InRyYW5zbGF0ZSgycHgsIDJweCkifX0sd2F0Y2g6e3ZhbHVlOmZ1bmN0aW9uKCl7KHRoaXMub25Db2xvcnx8dGhpcy5vZmZDb2xvcikmJnRoaXMuc2V0QmFja2dyb3VuZENvbG9yKCl9fSxtZXRob2RzOntoYW5kbGVDaGFuZ2U6ZnVuY3Rpb24oZSl7dGhpcy4kZW1pdCgiY2hhbmdlIixlLmN1cnJlbnRUYXJnZXQuY2hlY2tlZCl9LHNldEJhY2tncm91bmRDb2xvcjpmdW5jdGlvbigpe3ZhciBlPXRoaXMudmFsdWU/dGhpcy5vbkNvbG9yOnRoaXMub2ZmQ29sb3I7dGhpcy4kcmVmcy5jb3JlLnN0eWxlLmJvcmRlckNvbG9yPWUsdGhpcy4kcmVmcy5jb3JlLnN0eWxlLmJhY2tncm91bmRDb2xvcj1lfX0sbW91bnRlZDpmdW5jdGlvbigpezA9PT10aGlzLndpZHRoJiYodGhpcy5jb3JlV2lkdGg9dGhpcy5oYXNUZXh0PzU4OjQ2KSwodGhpcy5vbkNvbG9yfHx0aGlzLm9mZkNvbG9yKSYmdGhpcy5zZXRCYWNrZ3JvdW5kQ29sb3IoKX19fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuJGNyZWF0ZUVsZW1lbnQsaT1lLl9zZWxmLl9jfHx0O3JldHVybiBpKCJsYWJlbCIse3N0YXRpY0NsYXNzOiJlbC1zd2l0Y2giLGNsYXNzOnsiaXMtZGlzYWJsZWQiOmUuZGlzYWJsZWQsImVsLXN3aXRjaC0td2lkZSI6ZS5oYXNUZXh0fX0sW2koImRpdiIse2RpcmVjdGl2ZXM6W3tuYW1lOiJzaG93IixyYXdOYW1lOiJ2LXNob3ciLHZhbHVlOmUuZGlzYWJsZWQsZXhwcmVzc2lvbjoiZGlzYWJsZWQifV0sc3RhdGljQ2xhc3M6ImVsLXN3aXRjaF9fbWFzayJ9KSxpKCJpbnB1dCIse2RpcmVjdGl2ZXM6W3tuYW1lOiJtb2RlbCIscmF3TmFtZToidi1tb2RlbCIsdmFsdWU6ZS5fdmFsdWUsZXhwcmVzc2lvbjoiX3ZhbHVlIn1dLHN0YXRpY0NsYXNzOiJlbC1zd2l0Y2hfX2lucHV0IixhdHRyczp7dHlwZToiY2hlY2tib3giLG5hbWU6ZS5uYW1lLGRpc2FibGVkOmUuZGlzYWJsZWR9LGRvbVByb3BzOntjaGVja2VkOkFycmF5LmlzQXJyYXkoZS5fdmFsdWUpP2UuX2koZS5fdmFsdWUsbnVsbCk+LTE6ZS5fdmFsdWV9LG9uOntjaGFuZ2U6W2Z1bmN0aW9uKHQpe3ZhciBpPWUuX3ZhbHVlLG49dC50YXJnZXQscz0hIW4uY2hlY2tlZDtpZihBcnJheS5pc0FycmF5KGkpKXt2YXIgbz1udWxsLGE9ZS5faShpLG8pO3M/YTwwJiYoZS5fdmFsdWU9aS5jb25jYXQobykpOmE+LTEmJihlLl92YWx1ZT1pLnNsaWNlKDAsYSkuY29uY2F0KGkuc2xpY2UoYSsxKSkpfWVsc2UgZS5fdmFsdWU9c30sZS5oYW5kbGVDaGFuZ2VdfX0pLGkoInNwYW4iLHtyZWY6ImNvcmUiLHN0YXRpY0NsYXNzOiJlbC1zd2l0Y2hfX2NvcmUiLHN0eWxlOnt3aWR0aDplLmNvcmVXaWR0aCsicHgifX0sW2koInNwYW4iLHtzdGF0aWNDbGFzczoiZWwtc3dpdGNoX19idXR0b24iLHN0eWxlOnt0cmFuc2Zvcm06ZS50cmFuc2Zvcm19fSldKSxpKCJ0cmFuc2l0aW9uIix7YXR0cnM6e25hbWU6ImxhYmVsLWZhZGUifX0sW2koImRpdiIse2RpcmVjdGl2ZXM6W3tuYW1lOiJzaG93IixyYXdOYW1lOiJ2LXNob3ciLHZhbHVlOmUudmFsdWUsZXhwcmVzc2lvbjoidmFsdWUifV0sc3RhdGljQ2xhc3M6ImVsLXN3aXRjaF9fbGFiZWwgZWwtc3dpdGNoX19sYWJlbC0tbGVmdCIsc3R5bGU6e3dpZHRoOmUuY29yZVdpZHRoKyJweCJ9fSxbZS5vbkljb25DbGFzcz9pKCJpIix7Y2xhc3M6W2Uub25JY29uQ2xhc3NdfSk6ZS5fZSgpLCFlLm9uSWNvbkNsYXNzJiZlLm9uVGV4dD9pKCJzcGFuIixbZS5fdihlLl9zKGUub25UZXh0KSldKTplLl9lKCldKV0pLGkoInRyYW5zaXRpb24iLHthdHRyczp7bmFtZToibGFiZWwtZmFkZSJ9fSxbaSgiZGl2Iix7ZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6IWUudmFsdWUsZXhwcmVzc2lvbjoiIXZhbHVlIn1dLHN0YXRpY0NsYXNzOiJlbC1zd2l0Y2hfX2xhYmVsIGVsLXN3aXRjaF9fbGFiZWwtLXJpZ2h0IixzdHlsZTp7d2lkdGg6ZS5jb3JlV2lkdGgrInB4In19LFtlLm9mZkljb25DbGFzcz9pKCJpIix7Y2xhc3M6W2Uub2ZmSWNvbkNsYXNzXX0pOmUuX2UoKSwhZS5vZmZJY29uQ2xhc3MmJmUub2ZmVGV4dD9pKCJzcGFuIixbZS5fdihlLl9zKGUub2ZmVGV4dCkpXSk6ZS5fZSgpXSldKV0sMSl9LHN0YXRpY1JlbmRlckZuczpbXX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5fX2VzTW9kdWxlPSEwO3ZhciBzPWkoMTI4KSxvPW4ocyk7by5kZWZhdWx0Lmluc3RhbGw9ZnVuY3Rpb24oZSl7ZS5jb21wb25lbnQoby5kZWZhdWx0Lm5hbWUsby5kZWZhdWx0KX0sdC5kZWZhdWx0PW8uZGVmYXVsdH0sZnVuY3Rpb24oZSx0LGkpe3ZhciBuPWkoNSkoaSgxMjkpLGkoMTMwKSxudWxsLG51bGwpO2UuZXhwb3J0cz1uLmV4cG9ydHN9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5fX2VzTW9kdWxlPSEwO3ZhciBzPWkoMTEpLG89bihzKTt0LmRlZmF1bHQ9e21peGluczpbby5kZWZhdWx0XSxuYW1lOiJFbE9wdGlvbkdyb3VwIixjb21wb25lbnROYW1lOiJFbE9wdGlvbkdyb3VwIixwcm9wczp7bGFiZWw6U3RyaW5nLGRpc2FibGVkOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57dmlzaWJsZTohMH19LHdhdGNoOntkaXNhYmxlZDpmdW5jdGlvbihlKXt0aGlzLmJyb2FkY2FzdCgiRWxPcHRpb24iLCJoYW5kbGVHcm91cERpc2FibGVkIixlKX19LG1ldGhvZHM6e3F1ZXJ5Q2hhbmdlOmZ1bmN0aW9uKCl7dGhpcy52aXNpYmxlPXRoaXMuJGNoaWxkcmVuJiZBcnJheS5pc0FycmF5KHRoaXMuJGNoaWxkcmVuKSYmdGhpcy4kY2hpbGRyZW4uc29tZShmdW5jdGlvbihlKXtyZXR1cm4gZS52aXNpYmxlPT09ITB9KX19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLiRvbigicXVlcnlDaGFuZ2UiLHRoaXMucXVlcnlDaGFuZ2UpfSxtb3VudGVkOmZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZCYmdGhpcy5icm9hZGNhc3QoIkVsT3B0aW9uIiwiaGFuZGxlR3JvdXBEaXNhYmxlZCIsdGhpcy5kaXNhYmxlZCl9fX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLiRjcmVhdGVFbGVtZW50LGk9ZS5fc2VsZi5fY3x8dDtyZXR1cm4gaSgidWwiLHtzdGF0aWNDbGFzczoiZWwtc2VsZWN0LWdyb3VwX193cmFwIn0sW2koImxpIix7ZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6ZS52aXNpYmxlLGV4cHJlc3Npb246InZpc2libGUifV0sc3RhdGljQ2xhc3M6ImVsLXNlbGVjdC1ncm91cF9fdGl0bGUifSxbZS5fdihlLl9zKGUubGFiZWwpKV0pLGkoImxpIixbaSgidWwiLHtzdGF0aWNDbGFzczoiZWwtc2VsZWN0LWdyb3VwIn0sW2UuX3QoImRlZmF1bHQiKV0sMildKV0pfSxzdGF0aWNSZW5kZXJGbnM6W119fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXQuX19lc01vZHVsZT0hMDt2YXIgcz1pKDEzMiksbz1uKHMpO28uZGVmYXVsdC5pbnN0YWxsPWZ1bmN0aW9uKGUpe2UuY29tcG9uZW50KG8uZGVmYXVsdC5uYW1lLG8uZGVmYXVsdCl9LHQuZGVmYXVsdD1vLmRlZmF1bHR9LGZ1bmN0aW9uKGUsdCxpKXt2YXIgbj1pKDUpKGkoMTMzKSxpKDE0NiksbnVsbCxudWxsKTtlLmV4cG9ydHM9bi5leHBvcnRzfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXQuX19lc01vZHVsZT0hMDt2YXIgcz1pKDExNSksbz1uKHMpLGE9aSg0Nykscj1uKGEpLGw9aSg0NiksdT1uKGwpLGM9aSg0MyksZD1pKDEyKSxoPW4oZCksZj1pKDEzNCkscD1uKGYpLG09aSgxMzYpLHY9bihtKSxnPWkoMTM3KSx5PW4oZyksYj1pKDE0MSksXz1uKGIpLEM9aSgxMzUpLHg9MTt0LmRlZmF1bHQ9e25hbWU6IkVsVGFibGUiLG1peGluczpbaC5kZWZhdWx0XSxwcm9wczp7ZGF0YTp7dHlwZTpBcnJheSxkZWZhdWx0OmZ1bmN0aW9uKCl7cmV0dXJuW119fSx3aWR0aDpbU3RyaW5nLE51bWJlcl0saGVpZ2h0OltTdHJpbmcsTnVtYmVyXSxtYXhIZWlnaHQ6W1N0cmluZyxOdW1iZXJdLGZpdDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITB9LHN0cmlwZTpCb29sZWFuLGJvcmRlcjpCb29sZWFuLHJvd0tleTpbU3RyaW5nLEZ1bmN0aW9uXSxjb250ZXh0Ont9LHNob3dIZWFkZXI6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiEwfSxyb3dDbGFzc05hbWU6W1N0cmluZyxGdW5jdGlvbl0scm93U3R5bGU6W09iamVjdCxGdW5jdGlvbl0saGlnaGxpZ2h0Q3VycmVudFJvdzpCb29sZWFuLGN1cnJlbnRSb3dLZXk6W1N0cmluZyxOdW1iZXJdLGVtcHR5VGV4dDpTdHJpbmcsZXhwYW5kUm93S2V5czpBcnJheSxkZWZhdWx0RXhwYW5kQWxsOkJvb2xlYW4sZGVmYXVsdFNvcnQ6T2JqZWN0LHRvb2x0aXBFZmZlY3Q6U3RyaW5nfSxjb21wb25lbnRzOntUYWJsZUhlYWRlcjpfLmRlZmF1bHQsVGFibGVCb2R5OnkuZGVmYXVsdCxFbENoZWNrYm94Om8uZGVmYXVsdH0sbWV0aG9kczp7dG9nZ2xlUm93U2VsZWN0aW9uOmZ1bmN0aW9uKGUsdCl7dGhpcy5zdG9yZS50b2dnbGVSb3dTZWxlY3Rpb24oZSx0KSx0aGlzLnN0b3JlLnVwZGF0ZUFsbFNlbGVjdGVkKCl9LGNsZWFyU2VsZWN0aW9uOmZ1bmN0aW9uKCl7dGhpcy5zdG9yZS5jbGVhclNlbGVjdGlvbigpfSxoYW5kbGVNb3VzZUxlYXZlOmZ1bmN0aW9uKCl7dGhpcy5zdG9yZS5jb21taXQoInNldEhvdmVyUm93IixudWxsKSx0aGlzLmhvdmVyU3RhdGUmJih0aGlzLmhvdmVyU3RhdGU9bnVsbCl9LHVwZGF0ZVNjcm9sbFk6ZnVuY3Rpb24oKXt0aGlzLmxheW91dC51cGRhdGVTY3JvbGxZKCl9LGJpbmRFdmVudHM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy4kcmVmcy5oZWFkZXJXcmFwcGVyLGk9dGhpcy4kcmVmczt0aGlzLmJvZHlXcmFwcGVyLmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsZnVuY3Rpb24oKXt0JiYodC5zY3JvbGxMZWZ0PXRoaXMuc2Nyb2xsTGVmdCksaS5maXhlZEJvZHlXcmFwcGVyJiYoaS5maXhlZEJvZHlXcmFwcGVyLnNjcm9sbFRvcD10aGlzLnNjcm9sbFRvcCksaS5yaWdodEZpeGVkQm9keVdyYXBwZXImJihpLnJpZ2h0Rml4ZWRCb2R5V3JhcHBlci5zY3JvbGxUb3A9dGhpcy5zY3JvbGxUb3ApfSksdCYmKDAsQy5tb3VzZXdoZWVsKSh0LCgwLHIuZGVmYXVsdCkoMTYsZnVuY3Rpb24odCl7dmFyIGk9dC5kZWx0YVg7aT4wP2UuYm9keVdyYXBwZXIuc2Nyb2xsTGVmdCs9MTA6ZS5ib2R5V3JhcHBlci5zY3JvbGxMZWZ0LT0xMH0pKSx0aGlzLmZpdCYmKHRoaXMud2luZG93UmVzaXplTGlzdGVuZXI9KDAsci5kZWZhdWx0KSg1MCxmdW5jdGlvbigpe2UuJHJlYWR5JiZlLmRvTGF5b3V0KCl9KSwoMCxjLmFkZFJlc2l6ZUxpc3RlbmVyKSh0aGlzLiRlbCx0aGlzLndpbmRvd1Jlc2l6ZUxpc3RlbmVyKSl9LGRvTGF5b3V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLnN0b3JlLnVwZGF0ZUNvbHVtbnMoKSx0aGlzLmxheW91dC51cGRhdGUoKSx0aGlzLnVwZGF0ZVNjcm9sbFkoKSx0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe2UuaGVpZ2h0P2UubGF5b3V0LnNldEhlaWdodChlLmhlaWdodCk6ZS5tYXhIZWlnaHQ/ZS5sYXlvdXQuc2V0TWF4SGVpZ2h0KGUubWF4SGVpZ2h0KTplLnNob3VsZFVwZGF0ZUhlaWdodCYmZS5sYXlvdXQudXBkYXRlSGVpZ2h0KCl9KX19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMudGFibGVJZD0iZWwtdGFibGVfIit4KyJfIix0aGlzLmRlYm91bmNlZExheW91dD0oMCx1LmRlZmF1bHQpKDUwLGZ1bmN0aW9uKCl7cmV0dXJuIGUuZG9MYXlvdXQoKX0pfSxjb21wdXRlZDp7Ym9keVdyYXBwZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kcmVmcy5ib2R5V3JhcHBlcn0sc2hvdWxkVXBkYXRlSGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0aGlzLmhlaWdodHx8dGhpcy5maXhlZENvbHVtbnMubGVuZ3RoPjB8fHRoaXMucmlnaHRGaXhlZENvbHVtbnMubGVuZ3RoPjB9LHNlbGVjdGlvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0b3JlLnNlbGVjdGlvbn0sY29sdW1uczpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0b3JlLnN0YXRlcy5jb2x1bW5zfSx0YWJsZURhdGE6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdG9yZS5zdGF0ZXMuZGF0YX0sZml4ZWRDb2x1bW5zOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RvcmUuc3RhdGVzLmZpeGVkQ29sdW1uc30scmlnaHRGaXhlZENvbHVtbnM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdG9yZS5zdGF0ZXMucmlnaHRGaXhlZENvbHVtbnN9LGJvZHlIZWlnaHQ6ZnVuY3Rpb24oKXt2YXIgZT17fTtyZXR1cm4gdGhpcy5oZWlnaHQ/ZT17aGVpZ2h0OnRoaXMubGF5b3V0LmJvZHlIZWlnaHQ/dGhpcy5sYXlvdXQuYm9keUhlaWdodCsicHgiOiIifTp0aGlzLm1heEhlaWdodCYmKGU9eyJtYXgtaGVpZ2h0IjoodGhpcy5zaG93SGVhZGVyP3RoaXMubWF4SGVpZ2h0LXRoaXMubGF5b3V0LmhlYWRlckhlaWdodDp0aGlzLm1heEhlaWdodCkrInB4In0pLGV9LGJvZHlXaWR0aDpmdW5jdGlvbiBlKCl7dmFyIHQ9dGhpcy5sYXlvdXQsZT10LmJvZHlXaWR0aCxpPXQuc2Nyb2xsWSxuPXQuZ3V0dGVyV2lkdGg7cmV0dXJuIGU/ZS0oaT9uOjApKyJweCI6IiJ9LGZpeGVkQm9keUhlaWdodDpmdW5jdGlvbigpe3ZhciBlPXt9O2lmKHRoaXMuaGVpZ2h0KWU9e2hlaWdodDp0aGlzLmxheW91dC5maXhlZEJvZHlIZWlnaHQ/dGhpcy5sYXlvdXQuZml4ZWRCb2R5SGVpZ2h0KyJweCI6IiJ9O2Vsc2UgaWYodGhpcy5tYXhIZWlnaHQpe3ZhciB0PXRoaXMubGF5b3V0LnNjcm9sbFg/dGhpcy5tYXhIZWlnaHQtdGhpcy5sYXlvdXQuZ3V0dGVyV2lkdGg6dGhpcy5tYXhIZWlnaHQ7dGhpcy5zaG93SGVhZGVyJiYodC09dGhpcy5sYXlvdXQuaGVhZGVySGVpZ2h0KSxlPXsibWF4LWhlaWdodCI6dCsicHgifX1yZXR1cm4gZX0sZml4ZWRIZWlnaHQ6ZnVuY3Rpb24oKXt2YXIgZT17fTtyZXR1cm4gZT10aGlzLm1heEhlaWdodD97Ym90dG9tOnRoaXMubGF5b3V0LnNjcm9sbFgmJnRoaXMuZGF0YS5sZW5ndGg/dGhpcy5sYXlvdXQuZ3V0dGVyV2lkdGgrInB4IjoiIn06e2hlaWdodDp0aGlzLmxheW91dC52aWV3cG9ydEhlaWdodD90aGlzLmxheW91dC52aWV3cG9ydEhlaWdodCsicHgiOiIifX19LHdhdGNoOntoZWlnaHQ6ZnVuY3Rpb24oZSl7dGhpcy5sYXlvdXQuc2V0SGVpZ2h0KGUpfSxjdXJyZW50Um93S2V5OmZ1bmN0aW9uKGUpe3RoaXMuc3RvcmUuc2V0Q3VycmVudFJvd0tleShlKX0sZGF0YTp7aW1tZWRpYXRlOiEwLGhhbmRsZXI6ZnVuY3Rpb24oZSl7dGhpcy5zdG9yZS5jb21taXQoInNldERhdGEiLGUpfX0sZXhwYW5kUm93S2V5czpmdW5jdGlvbihlKXt0aGlzLnN0b3JlLnNldEV4cGFuZFJvd0tleXMoZSl9fSxkZXN0cm95ZWQ6ZnVuY3Rpb24oKXt0aGlzLndpbmRvd1Jlc2l6ZUxpc3RlbmVyJiYoMCxjLnJlbW92ZVJlc2l6ZUxpc3RlbmVyKSh0aGlzLiRlbCx0aGlzLndpbmRvd1Jlc2l6ZUxpc3RlbmVyKX0sbW91bnRlZDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5iaW5kRXZlbnRzKCksdGhpcy5kb0xheW91dCgpLHRoaXMuc3RvcmUuc3RhdGVzLmNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbih0KXt0LmZpbHRlcmVkVmFsdWUmJnQuZmlsdGVyZWRWYWx1ZS5sZW5ndGgmJmUuc3RvcmUuY29tbWl0KCJmaWx0ZXJDaGFuZ2UiLHtjb2x1bW46dCx2YWx1ZXM6dC5maWx0ZXJlZFZhbHVlLHNpbGVudDohMH0pfSksdGhpcy4kcmVhZHk9ITB9LGRhdGE6ZnVuY3Rpb24oKXt2YXIgZT1uZXcgcC5kZWZhdWx0KHRoaXMse3Jvd0tleTp0aGlzLnJvd0tleSxkZWZhdWx0RXhwYW5kQWxsOnRoaXMuZGVmYXVsdEV4cGFuZEFsbH0pLHQ9bmV3IHYuZGVmYXVsdCh7c3RvcmU6ZSx0YWJsZTp0aGlzLGZpdDp0aGlzLmZpdCxzaG93SGVhZGVyOnRoaXMuc2hvd0hlYWRlcn0pO3JldHVybntzdG9yZTplLGxheW91dDp0LHJlbmRlckV4cGFuZGVkOm51bGwscmVzaXplUHJveHlWaXNpYmxlOiExfX19fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXQuX19lc01vZHVsZT0hMDt2YXIgcz1pKDE1KSxvPW4ocyksYT1pKDQ2KSxyPW4oYSksbD1pKDEzNSksdT1mdW5jdGlvbihlLHQpe3ZhciBpPXQuc29ydGluZ0NvbHVtbjtyZXR1cm4gaSYmInN0cmluZyIhPXR5cGVvZiBpLnNvcnRhYmxlPygwLGwub3JkZXJCeSkoZSx0LnNvcnRQcm9wLHQuc29ydE9yZGVyLGkuc29ydE1ldGhvZCk6ZX0sYz1mdW5jdGlvbihlLHQpe3ZhciBpPXt9O3JldHVybihlfHxbXSkuZm9yRWFjaChmdW5jdGlvbihlLG4pe2lbKDAsbC5nZXRSb3dJZGVudGl0eSkoZSx0KV09e3JvdzplLGluZGV4Om59fSksaX0sZD1mdW5jdGlvbihlLHQsaSl7dmFyIG49ITEscz1lLnNlbGVjdGlvbixvPXMuaW5kZXhPZih0KTtyZXR1cm4idW5kZWZpbmVkIj09dHlwZW9mIGk/bz09PS0xPyhzLnB1c2godCksbj0hMCk6KHMuc3BsaWNlKG8sMSksbj0hMCk6aSYmbz09PS0xPyhzLnB1c2godCksbj0hMCk6IWkmJm8+LTEmJihzLnNwbGljZShvLDEpLG49ITApLG59LGg9ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O2lmKCFlKXRocm93IG5ldyBFcnJvcigiVGFibGUgaXMgcmVxdWlyZWQuIik7dGhpcy50YWJsZT1lLHRoaXMuc3RhdGVzPXtyb3dLZXk6bnVsbCxfY29sdW1uczpbXSxvcmlnaW5Db2x1bW5zOltdLGNvbHVtbnM6W10sZml4ZWRDb2x1bW5zOltdLHJpZ2h0Rml4ZWRDb2x1bW5zOltdLGlzQ29tcGxleDohMSxfZGF0YTpudWxsLGZpbHRlcmVkRGF0YTpudWxsLGRhdGE6bnVsbCxzb3J0aW5nQ29sdW1uOm51bGwsc29ydFByb3A6bnVsbCxzb3J0T3JkZXI6bnVsbCxpc0FsbFNlbGVjdGVkOiExLHNlbGVjdGlvbjpbXSxyZXNlcnZlU2VsZWN0aW9uOiExLHNlbGVjdGFibGU6bnVsbCxjdXJyZW50Um93Om51bGwsaG92ZXJSb3c6bnVsbCxmaWx0ZXJzOnt9LGV4cGFuZFJvd3M6W10sZGVmYXVsdEV4cGFuZEFsbDohMX07Zm9yKHZhciBpIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShpKSYmdGhpcy5zdGF0ZXMuaGFzT3duUHJvcGVydHkoaSkmJih0aGlzLnN0YXRlc1tpXT10W2ldKX07aC5wcm90b3R5cGUubXV0YXRpb25zPXtzZXREYXRhOmZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpcyxuPWUuX2RhdGEhPT10O2UuX2RhdGE9dCxlLmRhdGE9dSh0fHxbXSxlKSx0aGlzLnVwZGF0ZUN1cnJlbnRSb3coKSxlLnJlc2VydmVTZWxlY3Rpb24/IWZ1bmN0aW9uKCl7dmFyIHQ9ZS5yb3dLZXk7dD8hZnVuY3Rpb24oKXt2YXIgbj1lLnNlbGVjdGlvbixzPWMobix0KTtlLmRhdGEuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgaT0oMCxsLmdldFJvd0lkZW50aXR5KShlLHQpLG89c1tpXTtvJiYobltvLmluZGV4XT1lKX0pLGkudXBkYXRlQWxsU2VsZWN0ZWQoKX0oKTpjb25zb2xlLndhcm4oIldBUk46IHJvd0tleSBpcyByZXF1aXJlZCB3aGVuIHJlc2VydmUtc2VsZWN0aW9uIGlzIGVuYWJsZWQuIil9KCk6KG4/dGhpcy5jbGVhclNlbGVjdGlvbigpOnRoaXMuY2xlYW5TZWxlY3Rpb24oKSx0aGlzLnVwZGF0ZUFsbFNlbGVjdGVkKCkpO3ZhciBzPWUuZGVmYXVsdEV4cGFuZEFsbDtzJiYodGhpcy5zdGF0ZXMuZXhwYW5kUm93cz0oZS5kYXRhfHxbXSkuc2xpY2UoMCkpLG8uZGVmYXVsdC5uZXh0VGljayhmdW5jdGlvbigpe3JldHVybiBpLnRhYmxlLnVwZGF0ZVNjcm9sbFkoKX0pfSxjaGFuZ2VTb3J0Q29uZGl0aW9uOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7ZS5kYXRhPXUoZS5maWx0ZXJlZERhdGF8fGUuX2RhdGF8fFtdLGUpLHRoaXMudGFibGUuJGVtaXQoInNvcnQtY2hhbmdlIix7Y29sdW1uOnRoaXMuc3RhdGVzLnNvcnRpbmdDb2x1bW4scHJvcDp0aGlzLnN0YXRlcy5zb3J0UHJvcCxvcmRlcjp0aGlzLnN0YXRlcy5zb3J0T3JkZXJ9KSxvLmRlZmF1bHQubmV4dFRpY2soZnVuY3Rpb24oKXtyZXR1cm4gdC50YWJsZS51cGRhdGVTY3JvbGxZKCl9KX0sZmlsdGVyQ2hhbmdlOmZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpcyxuPXQuY29sdW1uLHM9dC52YWx1ZXMsYT10LnNpbGVudDtzJiYhQXJyYXkuaXNBcnJheShzKSYmKHM9W3NdKTt2YXIgcj1uLnByb3BlcnR5LGM9e307ciYmKGUuZmlsdGVyc1tuLmlkXT1zLGNbbi5jb2x1bW5LZXl8fG4uaWRdPXMpO3ZhciBkPWUuX2RhdGE7T2JqZWN0LmtleXMoZS5maWx0ZXJzKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBuPWUuZmlsdGVyc1t0XTtpZihuJiYwIT09bi5sZW5ndGgpe3ZhciBzPSgwLGwuZ2V0Q29sdW1uQnlJZCkoaS5zdGF0ZXMsdCk7cyYmcy5maWx0ZXJNZXRob2QmJihkPWQuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBuLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIHMuZmlsdGVyTWV0aG9kLmNhbGwobnVsbCx0LGUpfSl9KSl9fSksZS5maWx0ZXJlZERhdGE9ZCxlLmRhdGE9dShkLGUpLGF8fHRoaXMudGFibGUuJGVtaXQoImZpbHRlci1jaGFuZ2UiLGMpLG8uZGVmYXVsdC5uZXh0VGljayhmdW5jdGlvbigpe3JldHVybiBpLnRhYmxlLnVwZGF0ZVNjcm9sbFkoKX0pfSxpbnNlcnRDb2x1bW46ZnVuY3Rpb24oZSx0LGksbil7dmFyIHM9ZS5fY29sdW1ucztuJiYocz1uLmNoaWxkcmVuLHN8fChzPW4uY2hpbGRyZW49W10pKSwidW5kZWZpbmVkIiE9dHlwZW9mIGk/cy5zcGxpY2UoaSwwLHQpOnMucHVzaCh0KSwic2VsZWN0aW9uIj09PXQudHlwZSYmKGUuc2VsZWN0YWJsZT10LnNlbGVjdGFibGUsZS5yZXNlcnZlU2VsZWN0aW9uPXQucmVzZXJ2ZVNlbGVjdGlvbiksdGhpcy51cGRhdGVDb2x1bW5zKCksdGhpcy5zY2hlZHVsZUxheW91dCgpfSxyZW1vdmVDb2x1bW46ZnVuY3Rpb24oZSx0KXt2YXIgaT1lLl9jb2x1bW5zO2kmJmkuc3BsaWNlKGkuaW5kZXhPZih0KSwxKSx0aGlzLnVwZGF0ZUNvbHVtbnMoKSx0aGlzLnNjaGVkdWxlTGF5b3V0KCl9LHNldEhvdmVyUm93OmZ1bmN0aW9uKGUsdCl7ZS5ob3ZlclJvdz10fSxzZXRDdXJyZW50Um93OmZ1bmN0aW9uKGUsdCl7dmFyIGk9ZS5jdXJyZW50Um93O2UuY3VycmVudFJvdz10LGkhPT10JiZ0aGlzLnRhYmxlLiRlbWl0KCJjdXJyZW50LWNoYW5nZSIsdCxpKX0scm93U2VsZWN0ZWRDaGFuZ2VkOmZ1bmN0aW9uKGUsdCl7dmFyIGk9ZChlLHQpLG49ZS5zZWxlY3Rpb247aWYoaSl7dmFyIHM9dGhpcy50YWJsZTtzLiRlbWl0KCJzZWxlY3Rpb24tY2hhbmdlIixuKSxzLiRlbWl0KCJzZWxlY3QiLG4sdCl9dGhpcy51cGRhdGVBbGxTZWxlY3RlZCgpfSx0b2dnbGVSb3dFeHBhbmRlZDpmdW5jdGlvbihlLHQsaSl7dmFyIG49ZS5leHBhbmRSb3dzO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgaSl7dmFyIHM9bi5pbmRleE9mKHQpO2k/cz09PS0xJiZuLnB1c2godCk6cyE9PS0xJiZuLnNwbGljZShzLDEpfWVsc2V7dmFyIG89bi5pbmRleE9mKHQpO289PT0tMT9uLnB1c2godCk6bi5zcGxpY2UobywxKX10aGlzLnRhYmxlLiRlbWl0KCJleHBhbmQiLHQsbi5pbmRleE9mKHQpIT09LTEpfSx0b2dnbGVBbGxTZWxlY3Rpb246KDAsci5kZWZhdWx0KSgxMCxmdW5jdGlvbihlKXt2YXIgdD1lLmRhdGF8fFtdLGk9IWUuaXNBbGxTZWxlY3RlZCxuPXRoaXMuc3RhdGVzLnNlbGVjdGlvbixzPSExO3QuZm9yRWFjaChmdW5jdGlvbih0LG4pe2Uuc2VsZWN0YWJsZT9lLnNlbGVjdGFibGUuY2FsbChudWxsLHQsbikmJmQoZSx0LGkpJiYocz0hMCk6ZChlLHQsaSkmJihzPSEwKX0pO3ZhciBvPXRoaXMudGFibGU7cyYmby4kZW1pdCgic2VsZWN0aW9uLWNoYW5nZSIsbiksby4kZW1pdCgic2VsZWN0LWFsbCIsbiksZS5pc0FsbFNlbGVjdGVkPWl9KX07dmFyIGY9ZnVuY3Rpb24gZSh0KXt2YXIgaT1bXTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuY2hpbGRyZW4/aS5wdXNoLmFwcGx5KGksZSh0LmNoaWxkcmVuKSk6aS5wdXNoKHQpfSksaX07aC5wcm90b3R5cGUudXBkYXRlQ29sdW1ucz1mdW5jdGlvbigpe3ZhciBlPXRoaXMuc3RhdGVzLHQ9ZS5fY29sdW1uc3x8W107ZS5maXhlZENvbHVtbnM9dC5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZml4ZWQ9PT0hMHx8ImxlZnQiPT09ZS5maXhlZH0pLGUucmlnaHRGaXhlZENvbHVtbnM9dC5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuInJpZ2h0Ij09PWUuZml4ZWR9KSxlLmZpeGVkQ29sdW1ucy5sZW5ndGg+MCYmdFswXSYmInNlbGVjdGlvbiI9PT10WzBdLnR5cGUmJiF0WzBdLmZpeGVkJiYodFswXS5maXhlZD0hMCxlLmZpeGVkQ29sdW1ucy51bnNoaWZ0KHRbMF0pKSxlLm9yaWdpbkNvbHVtbnM9W10uY29uY2F0KGUuZml4ZWRDb2x1bW5zKS5jb25jYXQodC5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZml4ZWR9KSkuY29uY2F0KGUucmlnaHRGaXhlZENvbHVtbnMpLGUuY29sdW1ucz1mKGUub3JpZ2luQ29sdW1ucyksZS5pc0NvbXBsZXg9ZS5maXhlZENvbHVtbnMubGVuZ3RoPjB8fGUucmlnaHRGaXhlZENvbHVtbnMubGVuZ3RoPjB9LGgucHJvdG90eXBlLmlzU2VsZWN0ZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuKHRoaXMuc3RhdGVzLnNlbGVjdGlvbnx8W10pLmluZGV4T2YoZSk+LTF9LGgucHJvdG90eXBlLmNsZWFyU2VsZWN0aW9uPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdGF0ZXM7ZS5pc0FsbFNlbGVjdGVkPSExO3ZhciB0PWUuc2VsZWN0aW9uO2Uuc2VsZWN0aW9uPVtdLHQubGVuZ3RoPjAmJnRoaXMudGFibGUuJGVtaXQoInNlbGVjdGlvbi1jaGFuZ2UiLGUuc2VsZWN0aW9uKX0saC5wcm90b3R5cGUuc2V0RXhwYW5kUm93S2V5cz1mdW5jdGlvbihlKXt2YXIgdD1bXSxpPXRoaXMuc3RhdGVzLmRhdGEsbj10aGlzLnN0YXRlcy5yb3dLZXk7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJbVGFibGVdIHByb3Agcm93LWtleSBzaG91bGQgbm90IGJlIGVtcHR5LiIpO3ZhciBzPWMoaSxuKTtlLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIGk9c1tlXTtpJiZ0LnB1c2goaS5yb3cpfSksdGhpcy5zdGF0ZXMuZXhwYW5kUm93cz10fSxoLnByb3RvdHlwZS50b2dnbGVSb3dTZWxlY3Rpb249ZnVuY3Rpb24oZSx0KXt2YXIgaT1kKHRoaXMuc3RhdGVzLGUsdCk7aSYmdGhpcy50YWJsZS4kZW1pdCgic2VsZWN0aW9uLWNoYW5nZSIsdGhpcy5zdGF0ZXMuc2VsZWN0aW9uKX0saC5wcm90b3R5cGUuY2xlYW5TZWxlY3Rpb249ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0YXRlcy5zZWxlY3Rpb258fFtdLHQ9dGhpcy5zdGF0ZXMuZGF0YSxpPXRoaXMuc3RhdGVzLnJvd0tleSxuPXZvaWQgMDtpZihpKXtuPVtdO3ZhciBzPWMoZSxpKSxvPWModCxpKTtmb3IodmFyIGEgaW4gcylzLmhhc093blByb3BlcnR5KGEpJiYhb1thXSYmbi5wdXNoKHNbYV0ucm93KX1lbHNlIG49ZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIHQuaW5kZXhPZihlKT09PS0xfSk7bi5mb3JFYWNoKGZ1bmN0aW9uKHQpe2Uuc3BsaWNlKGUuaW5kZXhPZih0KSwxKX0pLG4ubGVuZ3RoJiZ0aGlzLnRhYmxlLiRlbWl0KCJzZWxlY3Rpb24tY2hhbmdlIixlKX0saC5wcm90b3R5cGUudXBkYXRlQWxsU2VsZWN0ZWQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0YXRlcyx0PWUuc2VsZWN0aW9uLGk9ZS5yb3dLZXksbj1lLnNlbGVjdGFibGUscz1lLmRhdGE7aWYoIXN8fDA9PT1zLmxlbmd0aClyZXR1cm4gdm9pZChlLmlzQWxsU2VsZWN0ZWQ9ITEpO3ZhciBvPXZvaWQgMDtpJiYobz1jKGUuc2VsZWN0aW9uLGkpKTtmb3IodmFyIGE9ZnVuY3Rpb24oZSl7cmV0dXJuIG8/ISFvWygwLGwuZ2V0Um93SWRlbnRpdHkpKGUsaSldOnQuaW5kZXhPZihlKSE9PS0xfSxyPSEwLHU9MCxkPTAsaD1zLmxlbmd0aDtkPGg7ZCsrKXt2YXIgZj1zW2RdO2lmKG4pe3ZhciBwPW4uY2FsbChudWxsLGYsZCk7aWYocCl7aWYoIWEoZikpe3I9ITE7YnJlYWt9dSsrfX1lbHNle2lmKCFhKGYpKXtyPSExO2JyZWFrfXUrK319MD09PXUmJihyPSExKSxlLmlzQWxsU2VsZWN0ZWQ9cn0saC5wcm90b3R5cGUuc2NoZWR1bGVMYXlvdXQ9ZnVuY3Rpb24oKXt0aGlzLnRhYmxlLmRlYm91bmNlZExheW91dCgpfSxoLnByb3RvdHlwZS5zZXRDdXJyZW50Um93S2V5PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuc3RhdGVzLGk9dC5yb3dLZXk7aWYoIWkpdGhyb3cgbmV3IEVycm9yKCJbVGFibGVdIHJvdy1rZXkgc2hvdWxkIG5vdCBiZSBlbXB0eS4iKTt2YXIgbj10LmRhdGF8fFtdLHM9YyhuLGkpLG89c1tlXTtvJiYodC5jdXJyZW50Um93PW8ucm93KX0saC5wcm90b3R5cGUudXBkYXRlQ3VycmVudFJvdz1mdW5jdGlvbigpe3ZhciBlPXRoaXMuc3RhdGVzLHQ9dGhpcy50YWJsZSxpPWUuZGF0YXx8W10sbj1lLmN1cnJlbnRSb3c7aS5pbmRleE9mKG4pPT09LTEmJihlLmN1cnJlbnRSb3c9bnVsbCxlLmN1cnJlbnRSb3chPT1uJiZ0LiRlbWl0KCJjdXJyZW50LWNoYW5nZSIsbnVsbCxuKSl9LGgucHJvdG90eXBlLmNvbW1pdD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLm11dGF0aW9ucztpZighdFtlXSl0aHJvdyBuZXcgRXJyb3IoIkFjdGlvbiBub3QgZm91bmQ6ICIrZSk7Zm9yKHZhciBpPWFyZ3VtZW50cy5sZW5ndGgsbj1BcnJheShpPjE/aS0xOjApLHM9MTtzPGk7cysrKW5bcy0xXT1hcmd1bWVudHNbc107dFtlXS5hcHBseSh0aGlzLFt0aGlzLnN0YXRlc10uY29uY2F0KG4pKX0sdC5kZWZhdWx0PWh9LGZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO3QuX19lc01vZHVsZT0hMDt2YXIgaT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbj0odC5nZXRDZWxsPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLnRhcmdldDt0JiYiSFRNTCIhPT10LnRhZ05hbWUudG9VcHBlckNhc2UoKTspe2lmKCJURCI9PT10LnRhZ05hbWUudG9VcHBlckNhc2UoKSlyZXR1cm4gdDt0PXQucGFyZW50Tm9kZX1yZXR1cm4gbnVsbH0sdC5nZXRWYWx1ZUJ5UGF0aD1mdW5jdGlvbihlLHQpe3Q9dHx8IiI7Zm9yKHZhciBpPXQuc3BsaXQoIi4iKSxuPWUscz1udWxsLG89MCxhPWkubGVuZ3RoO288YTtvKyspe3ZhciByPWlbb107aWYoIW4pYnJlYWs7aWYobz09PWEtMSl7cz1uW3JdO2JyZWFrfW49bltyXX1yZXR1cm4gc30pLHM9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPT1lJiYib2JqZWN0Ij09PSgidW5kZWZpbmVkIj09dHlwZW9mIGU/InVuZGVmaW5lZCI6aShlKSl9LG89KHQub3JkZXJCeT1mdW5jdGlvbihlLHQsaSxvKXtpZigic3RyaW5nIj09dHlwZW9mIGkmJihpPSJkZXNjZW5kaW5nIj09PWk/LTE6MSksIXQpcmV0dXJuIGU7dmFyIGE9aSYmaTwwPy0xOjE7cmV0dXJuIGUuc2xpY2UoKS5zb3J0KG8/ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbyhlLHQpP2E6LWF9OmZ1bmN0aW9uKGUsaSl7cmV0dXJuIiRrZXkiIT09dCYmKHMoZSkmJiIkdmFsdWUiaW4gZSYmKGU9ZS4kdmFsdWUpLHMoaSkmJiIkdmFsdWUiaW4gaSYmKGk9aS4kdmFsdWUpKSxlPXMoZSk/bihlLHQpOmUsaT1zKGkpP24oaSx0KTppLGU9PT1pPzA6ZT5pP2E6LWF9KX0sdC5nZXRDb2x1bW5CeUlkPWZ1bmN0aW9uKGUsdCl7dmFyIGk9bnVsbDtyZXR1cm4gZS5jb2x1bW5zLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5pZD09PXQmJihpPWUpfSksaX0pLGE9KHQuZ2V0Q29sdW1uQnlDZWxsPWZ1bmN0aW9uKGUsdCl7dmFyIGk9KHQuY2xhc3NOYW1lfHwiIikubWF0Y2goL2VsLXRhYmxlX1teXHNdKy9nbSk7cmV0dXJuIGk/byhlLGlbMF0pOm51bGx9LCJ1bmRlZmluZWQiIT10eXBlb2YgbmF2aWdhdG9yJiZuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5kZXhPZigiZmlyZWZveCIpPi0xKTt0Lm1vdXNld2hlZWw9ZnVuY3Rpb24oZSx0KXtlJiZlLmFkZEV2ZW50TGlzdGVuZXImJmUuYWRkRXZlbnRMaXN0ZW5lcihhPyJET01Nb3VzZVNjcm9sbCI6Im1vdXNld2hlZWwiLHQpOwp9LHQuZ2V0Um93SWRlbnRpdHk9ZnVuY3Rpb24oZSx0KXtpZighZSl0aHJvdyBuZXcgRXJyb3IoInJvdyBpcyByZXF1aXJlZCB3aGVuIGdldCByb3cgaWRlbnRpdHkiKTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/ZVt0XToiZnVuY3Rpb24iPT10eXBlb2YgdD90LmNhbGwobnVsbCxlKTp2b2lkIDB9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIHMoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX10Ll9fZXNNb2R1bGU9ITA7dmFyIG89aSgzMSksYT1uKG8pLHI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3ModGhpcyxlKSx0aGlzLnRhYmxlPW51bGwsdGhpcy5zdG9yZT1udWxsLHRoaXMuY29sdW1ucz1udWxsLHRoaXMuZml0PSEwLHRoaXMuc2hvd0hlYWRlcj0hMCx0aGlzLmhlaWdodD1udWxsLHRoaXMuc2Nyb2xsWD0hMSx0aGlzLnNjcm9sbFk9ITEsdGhpcy5ib2R5V2lkdGg9bnVsbCx0aGlzLmZpeGVkV2lkdGg9bnVsbCx0aGlzLnJpZ2h0Rml4ZWRXaWR0aD1udWxsLHRoaXMudGFibGVIZWlnaHQ9bnVsbCx0aGlzLmhlYWRlckhlaWdodD00NCx0aGlzLnZpZXdwb3J0SGVpZ2h0PW51bGwsdGhpcy5ib2R5SGVpZ2h0PW51bGwsdGhpcy5maXhlZEJvZHlIZWlnaHQ9bnVsbCx0aGlzLmd1dHRlcldpZHRoPSgwLGEuZGVmYXVsdCkoKTtmb3IodmFyIGkgaW4gdCl0Lmhhc093blByb3BlcnR5KGkpJiYodGhpc1tpXT10W2ldKTtpZighdGhpcy50YWJsZSl0aHJvdyBuZXcgRXJyb3IoInRhYmxlIGlzIHJlcXVpcmVkIGZvciBUYWJsZSBMYXlvdXQiKTtpZighdGhpcy5zdG9yZSl0aHJvdyBuZXcgRXJyb3IoInN0b3JlIGlzIHJlcXVpcmVkIGZvciBUYWJsZSBMYXlvdXQiKX1yZXR1cm4gZS5wcm90b3R5cGUudXBkYXRlU2Nyb2xsWT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuaGVpZ2h0O2lmKCJzdHJpbmciPT10eXBlb2YgZXx8Im51bWJlciI9PXR5cGVvZiBlKXt2YXIgdD10aGlzLnRhYmxlLmJvZHlXcmFwcGVyO2lmKHRoaXMudGFibGUuJGVsJiZ0KXt2YXIgaT10LnF1ZXJ5U2VsZWN0b3IoIi5lbC10YWJsZV9fYm9keSIpO3RoaXMuc2Nyb2xsWT1pLm9mZnNldEhlaWdodD50Lm9mZnNldEhlaWdodH19fSxlLnByb3RvdHlwZS5zZXRIZWlnaHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJoZWlnaHQiLGk9dGhpcy50YWJsZS4kZWw7InN0cmluZyI9PXR5cGVvZiBlJiYvXlxkKyQvLnRlc3QoZSkmJihlPU51bWJlcihlKSksdGhpcy5oZWlnaHQ9ZSxpJiYoIm51bWJlciI9PXR5cGVvZiBlPyhpLnN0eWxlW3RdPWUrInB4Iix0aGlzLnVwZGF0ZUhlaWdodCgpKToic3RyaW5nIj09dHlwZW9mIGUmJigiIj09PWUmJihpLnN0eWxlW3RdPSIiKSx0aGlzLnVwZGF0ZUhlaWdodCgpKSl9LGUucHJvdG90eXBlLnNldE1heEhlaWdodD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zZXRIZWlnaHQoZSwibWF4LWhlaWdodCIpfSxlLnByb3RvdHlwZS51cGRhdGVIZWlnaHQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnRhYmxlSGVpZ2h0PXRoaXMudGFibGUuJGVsLmNsaWVudEhlaWdodCx0PSF0aGlzLnRhYmxlLmRhdGF8fDA9PT10aGlzLnRhYmxlLmRhdGEubGVuZ3RoLGk9dGhpcy50YWJsZS4kcmVmcy5oZWFkZXJXcmFwcGVyO2lmKCF0aGlzLnNob3dIZWFkZXJ8fGkpe2lmKHRoaXMuc2hvd0hlYWRlcil7dmFyIG49dGhpcy5oZWFkZXJIZWlnaHQ9aS5vZmZzZXRIZWlnaHQscz1lLW47bnVsbD09PXRoaXMuaGVpZ2h0fHxpc05hTih0aGlzLmhlaWdodCkmJiJzdHJpbmciIT10eXBlb2YgdGhpcy5oZWlnaHR8fCh0aGlzLmJvZHlIZWlnaHQ9cyksdGhpcy5maXhlZEJvZHlIZWlnaHQ9dGhpcy5zY3JvbGxYP3MtdGhpcy5ndXR0ZXJXaWR0aDpzfWVsc2UgdGhpcy5oZWFkZXJIZWlnaHQ9MCxudWxsPT09dGhpcy5oZWlnaHR8fGlzTmFOKHRoaXMuaGVpZ2h0KSYmInN0cmluZyIhPXR5cGVvZiB0aGlzLmhlaWdodHx8KHRoaXMuYm9keUhlaWdodD1lKSx0aGlzLmZpeGVkQm9keUhlaWdodD10aGlzLnNjcm9sbFg/ZS10aGlzLmd1dHRlcldpZHRoOmU7dGhpcy52aWV3cG9ydEhlaWdodD10aGlzLnNjcm9sbFg/ZS0odD8wOnRoaXMuZ3V0dGVyV2lkdGgpOmV9fSxlLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmZpdCx0PXRoaXMudGFibGUuY29sdW1ucyxpPXRoaXMudGFibGUuJGVsLmNsaWVudFdpZHRoLG49MCxzPVtdO3QuZm9yRWFjaChmdW5jdGlvbihlKXtlLmlzQ29sdW1uR3JvdXA/cy5wdXNoLmFwcGx5KHMsZS5jb2x1bW5zKTpzLnB1c2goZSl9KTt2YXIgbz1zLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIGUud2lkdGh9KTtpZihvLmxlbmd0aD4wJiZlKXtpZihzLmZvckVhY2goZnVuY3Rpb24oZSl7bis9ZS53aWR0aHx8ZS5taW5XaWR0aHx8ODB9KSxuPGktdGhpcy5ndXR0ZXJXaWR0aCl7dGhpcy5zY3JvbGxYPSExO3ZhciBhPWktdGhpcy5ndXR0ZXJXaWR0aC1uOzE9PT1vLmxlbmd0aD9vWzBdLnJlYWxXaWR0aD0ob1swXS5taW5XaWR0aHx8ODApK2E6IWZ1bmN0aW9uKCl7dmFyIGU9by5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSsodC5taW5XaWR0aHx8ODApfSwwKSx0PWEvZSxpPTA7by5mb3JFYWNoKGZ1bmN0aW9uKGUsbil7aWYoMCE9PW4pe3ZhciBzPU1hdGguZmxvb3IoKGUubWluV2lkdGh8fDgwKSp0KTtpKz1zLGUucmVhbFdpZHRoPShlLm1pbldpZHRofHw4MCkrc319KSxvWzBdLnJlYWxXaWR0aD0ob1swXS5taW5XaWR0aHx8ODApK2EtaX0oKX1lbHNlIHRoaXMuc2Nyb2xsWD0hMCxvLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5yZWFsV2lkdGg9ZS5taW5XaWR0aH0pO3RoaXMuYm9keVdpZHRoPU1hdGgubWF4KG4saSl9ZWxzZSBzLmZvckVhY2goZnVuY3Rpb24oZSl7ZS53aWR0aHx8ZS5taW5XaWR0aD9lLnJlYWxXaWR0aD1lLndpZHRofHxlLm1pbldpZHRoOmUucmVhbFdpZHRoPTgwLG4rPWUucmVhbFdpZHRofSksdGhpcy5zY3JvbGxYPW4+aSx0aGlzLmJvZHlXaWR0aD1uO3ZhciByPXRoaXMuc3RvcmUuc3RhdGVzLmZpeGVkQ29sdW1ucztpZihyLmxlbmd0aD4wKXt2YXIgbD0wO3IuZm9yRWFjaChmdW5jdGlvbihlKXtsKz1lLnJlYWxXaWR0aH0pLHRoaXMuZml4ZWRXaWR0aD1sfXZhciB1PXRoaXMuc3RvcmUuc3RhdGVzLnJpZ2h0Rml4ZWRDb2x1bW5zO2lmKHUubGVuZ3RoPjApe3ZhciBjPTA7dS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2MrPWUucmVhbFdpZHRofSksdGhpcy5yaWdodEZpeGVkV2lkdGg9Y319LGV9KCk7dC5kZWZhdWx0PXJ9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5fX2VzTW9kdWxlPSEwO3ZhciBzPWkoMTM1KSxvPWkoMzApLGE9aSgxMTUpLHI9bihhKSxsPWkoMTM4KSx1PW4obCksYz1pKDQ2KSxkPW4oYyk7dC5kZWZhdWx0PXtjb21wb25lbnRzOntFbENoZWNrYm94OnIuZGVmYXVsdCxFbFRvb2x0aXA6dS5kZWZhdWx0fSxwcm9wczp7c3RvcmU6e3JlcXVpcmVkOiEwfSxjb250ZXh0Ont9LGxheW91dDp7cmVxdWlyZWQ6ITB9LHJvd0NsYXNzTmFtZTpbU3RyaW5nLEZ1bmN0aW9uXSxyb3dTdHlsZTpbT2JqZWN0LEZ1bmN0aW9uXSxmaXhlZDpTdHJpbmcsaGlnaGxpZ2h0OkJvb2xlYW59LHJlbmRlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLGk9dGhpcy5jb2x1bW5zLm1hcChmdW5jdGlvbihlLGkpe3JldHVybiB0LmlzQ29sdW1uSGlkZGVuKGkpfSk7cmV0dXJuIGUoInRhYmxlIix7Y2xhc3M6ImVsLXRhYmxlX19ib2R5IixhdHRyczp7Y2VsbHNwYWNpbmc6IjAiLGNlbGxwYWRkaW5nOiIwIixib3JkZXI6IjAifX0sW2UoImNvbGdyb3VwIixudWxsLFt0aGlzLl9sKHRoaXMuY29sdW1ucyxmdW5jdGlvbih0KXtyZXR1cm4gZSgiY29sIix7YXR0cnM6e25hbWU6dC5pZCx3aWR0aDp0LnJlYWxXaWR0aHx8dC53aWR0aH19LFtdKX0pXSksZSgidGJvZHkiLG51bGwsW3RoaXMuX2wodGhpcy5kYXRhLGZ1bmN0aW9uKG4scyl7cmV0dXJuW2UoInRyIix7c3R5bGU6dC5yb3dTdHlsZT90LmdldFJvd1N0eWxlKG4scyk6bnVsbCxrZXk6dC50YWJsZS5yb3dLZXk/dC5nZXRLZXlPZlJvdyhuLHMpOnMsb246e2RibGNsaWNrOmZ1bmN0aW9uKGUpe3JldHVybiB0LmhhbmRsZURvdWJsZUNsaWNrKGUsbil9LGNsaWNrOmZ1bmN0aW9uKGUpe3JldHVybiB0LmhhbmRsZUNsaWNrKGUsbil9LGNvbnRleHRtZW51OmZ1bmN0aW9uKGUpe3JldHVybiB0LmhhbmRsZUNvbnRleHRNZW51KGUsbil9LG1vdXNlZW50ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHQuaGFuZGxlTW91c2VFbnRlcihzKX0sbW91c2VsZWF2ZTpmdW5jdGlvbihlKXtyZXR1cm4gdC5oYW5kbGVNb3VzZUxlYXZlKCl9fSxjbGFzczpbdC5nZXRSb3dDbGFzcyhuLHMpXX0sW3QuX2wodC5jb2x1bW5zLGZ1bmN0aW9uKG8sYSl7cmV0dXJuIGUoInRkIix7Y2xhc3M6W28uaWQsby5hbGlnbixvLmNsYXNzTmFtZXx8IiIsaVthXT8iaXMtaGlkZGVuIjoiIl0sb246e21vdXNlZW50ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHQuaGFuZGxlQ2VsbE1vdXNlRW50ZXIoZSxuKX0sbW91c2VsZWF2ZTp0LmhhbmRsZUNlbGxNb3VzZUxlYXZlfX0sW28ucmVuZGVyQ2VsbC5jYWxsKHQuX3JlbmRlclByb3h5LGUse3JvdzpuLGNvbHVtbjpvLCRpbmRleDpzLHN0b3JlOnQuc3RvcmUsX3NlbGY6dC5jb250ZXh0fHx0LnRhYmxlLiR2bm9kZS5jb250ZXh0fSxpW2FdKV0pfSksIXQuZml4ZWQmJnQubGF5b3V0LnNjcm9sbFkmJnQubGF5b3V0Lmd1dHRlcldpZHRoP2UoInRkIix7Y2xhc3M6Imd1dHRlciJ9LFtdKToiIl0pLHQuc3RvcmUuc3RhdGVzLmV4cGFuZFJvd3MuaW5kZXhPZihuKT4tMT9lKCJ0ciIsbnVsbCxbZSgidGQiLHthdHRyczp7Y29sc3Bhbjp0LmNvbHVtbnMubGVuZ3RofSxjbGFzczoiZWwtdGFibGVfX2V4cGFuZGVkLWNlbGwifSxbdC50YWJsZS5yZW5kZXJFeHBhbmRlZD90LnRhYmxlLnJlbmRlckV4cGFuZGVkKGUse3JvdzpuLCRpbmRleDpzLHN0b3JlOnQuc3RvcmV9KToiIl0pXSk6IiJdfSkuY29uY2F0KGUoImVsLXRvb2x0aXAiLHthdHRyczp7ZWZmZWN0OnRoaXMudGFibGUudG9vbHRpcEVmZmVjdCxwbGFjZW1lbnQ6InRvcCIsY29udGVudDp0aGlzLnRvb2x0aXBDb250ZW50fSxyZWY6InRvb2x0aXAifSxbXSkpXSldKX0sd2F0Y2g6eyJzdG9yZS5zdGF0ZXMuaG92ZXJSb3ciOmZ1bmN0aW9uKGUsdCl7aWYodGhpcy5zdG9yZS5zdGF0ZXMuaXNDb21wbGV4KXt2YXIgaT10aGlzLiRlbDtpZihpKXt2YXIgbj1pLnF1ZXJ5U2VsZWN0b3JBbGwoInRib2R5ID4gdHIiKSxzPW5bdF0sbz1uW2VdO3MmJnMuY2xhc3NMaXN0LnJlbW92ZSgiaG92ZXItcm93IiksbyYmby5jbGFzc0xpc3QuYWRkKCJob3Zlci1yb3ciKX19fSwic3RvcmUuc3RhdGVzLmN1cnJlbnRSb3ciOmZ1bmN0aW9uKGUsdCl7aWYodGhpcy5oaWdobGlnaHQpe3ZhciBpPXRoaXMuJGVsO2lmKGkpe3ZhciBuPXRoaXMuc3RvcmUuc3RhdGVzLmRhdGEscz1pLnF1ZXJ5U2VsZWN0b3JBbGwoInRib2R5ID4gdHIiKSxvPXNbbi5pbmRleE9mKHQpXSxhPXNbbi5pbmRleE9mKGUpXTtvP28uY2xhc3NMaXN0LnJlbW92ZSgiY3VycmVudC1yb3ciKTpzJiZbXS5mb3JFYWNoLmNhbGwocyxmdW5jdGlvbihlKXtyZXR1cm4gZS5jbGFzc0xpc3QucmVtb3ZlKCJjdXJyZW50LXJvdyIpfSksYSYmYS5jbGFzc0xpc3QuYWRkKCJjdXJyZW50LXJvdyIpfX19fSxjb21wdXRlZDp7dGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kcGFyZW50fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RvcmUuc3RhdGVzLmRhdGF9LGNvbHVtbnNDb3VudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0b3JlLnN0YXRlcy5jb2x1bW5zLmxlbmd0aH0sbGVmdEZpeGVkQ291bnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdG9yZS5zdGF0ZXMuZml4ZWRDb2x1bW5zLmxlbmd0aH0scmlnaHRGaXhlZENvdW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RvcmUuc3RhdGVzLnJpZ2h0Rml4ZWRDb2x1bW5zLmxlbmd0aH0sY29sdW1uczpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0b3JlLnN0YXRlcy5jb2x1bW5zfX0sZGF0YTpmdW5jdGlvbigpe3JldHVybnt0b29sdGlwQ29udGVudDoiIn19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLmFjdGl2YXRlVG9vbHRpcD0oMCxkLmRlZmF1bHQpKDUwLGZ1bmN0aW9uKGUpe3JldHVybiBlLmhhbmRsZVNob3dQb3BwZXIoKX0pfSxtZXRob2RzOntnZXRLZXlPZlJvdzpmdW5jdGlvbihlLHQpe3ZhciBpPXRoaXMudGFibGUucm93S2V5O3JldHVybiBpPygwLHMuZ2V0Um93SWRlbnRpdHkpKGUsaSk6dH0saXNDb2x1bW5IaWRkZW46ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZml4ZWQ9PT0hMHx8ImxlZnQiPT09dGhpcy5maXhlZD9lPj10aGlzLmxlZnRGaXhlZENvdW50OiJyaWdodCI9PT10aGlzLmZpeGVkP2U8dGhpcy5jb2x1bW5zQ291bnQtdGhpcy5yaWdodEZpeGVkQ291bnQ6ZTx0aGlzLmxlZnRGaXhlZENvdW50fHxlPj10aGlzLmNvbHVtbnNDb3VudC10aGlzLnJpZ2h0Rml4ZWRDb3VudH0sZ2V0Um93U3R5bGU6ZnVuY3Rpb24oZSx0KXt2YXIgaT10aGlzLnJvd1N0eWxlO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBpP2kuY2FsbChudWxsLGUsdCk6aX0sZ2V0Um93Q2xhc3M6ZnVuY3Rpb24oZSx0KXt2YXIgaT1bXSxuPXRoaXMucm93Q2xhc3NOYW1lO3JldHVybiJzdHJpbmciPT10eXBlb2Ygbj9pLnB1c2gobik6ImZ1bmN0aW9uIj09dHlwZW9mIG4mJmkucHVzaChuLmNhbGwobnVsbCxlLHQpfHwiIiksaS5qb2luKCIgIil9LGhhbmRsZUNlbGxNb3VzZUVudGVyOmZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpcy50YWJsZSxuPSgwLHMuZ2V0Q2VsbCkoZSk7aWYobil7dmFyIGE9KDAscy5nZXRDb2x1bW5CeUNlbGwpKGksbikscj1pLmhvdmVyU3RhdGU9e2NlbGw6bixjb2x1bW46YSxyb3c6dH07aS4kZW1pdCgiY2VsbC1tb3VzZS1lbnRlciIsci5yb3csci5jb2x1bW4sci5jZWxsLGUpfXZhciBsPWUudGFyZ2V0LnF1ZXJ5U2VsZWN0b3IoIi5jZWxsIik7aWYoKDAsby5oYXNDbGFzcykobCwiZWwtdG9vbHRpcCIpJiZsLnNjcm9sbFdpZHRoPmwub2Zmc2V0V2lkdGgpe3ZhciB1PXRoaXMuJHJlZnMudG9vbHRpcDt0aGlzLnRvb2x0aXBDb250ZW50PW4uaW5uZXJUZXh0LHUucmVmZXJlbmNlRWxtPW4sdS4kcmVmcy5wb3BwZXIuc3R5bGUuZGlzcGxheT0ibm9uZSIsdS5kb0Rlc3Ryb3koKSx1LnNldEV4cGVjdGVkU3RhdGUoITApLHRoaXMuYWN0aXZhdGVUb29sdGlwKHUpfX0saGFuZGxlQ2VsbE1vdXNlTGVhdmU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy4kcmVmcy50b29sdGlwO3QmJih0LnNldEV4cGVjdGVkU3RhdGUoITEpLHQuaGFuZGxlQ2xvc2VQb3BwZXIoKSk7dmFyIGk9KDAscy5nZXRDZWxsKShlKTtpZihpKXt2YXIgbj10aGlzLnRhYmxlLmhvdmVyU3RhdGU7dGhpcy50YWJsZS4kZW1pdCgiY2VsbC1tb3VzZS1sZWF2ZSIsbi5yb3csbi5jb2x1bW4sbi5jZWxsLGUpfX0saGFuZGxlTW91c2VFbnRlcjpmdW5jdGlvbihlKXt0aGlzLnN0b3JlLmNvbW1pdCgic2V0SG92ZXJSb3ciLGUpfSxoYW5kbGVNb3VzZUxlYXZlOmZ1bmN0aW9uKCl7dGhpcy5zdG9yZS5jb21taXQoInNldEhvdmVyUm93IixudWxsKX0saGFuZGxlQ29udGV4dE1lbnU6ZnVuY3Rpb24oZSx0KXt0aGlzLmhhbmRsZUV2ZW50KGUsdCwiY29udGV4dG1lbnUiKX0saGFuZGxlRG91YmxlQ2xpY2s6ZnVuY3Rpb24oZSx0KXt0aGlzLmhhbmRsZUV2ZW50KGUsdCwiZGJsY2xpY2siKX0saGFuZGxlQ2xpY2s6ZnVuY3Rpb24oZSx0KXt0aGlzLnN0b3JlLmNvbW1pdCgic2V0Q3VycmVudFJvdyIsdCksdGhpcy5oYW5kbGVFdmVudChlLHQsImNsaWNrIil9LGhhbmRsZUV2ZW50OmZ1bmN0aW9uKGUsdCxpKXt2YXIgbj10aGlzLnRhYmxlLG89KDAscy5nZXRDZWxsKShlKSxhPXZvaWQgMDtvJiYoYT0oMCxzLmdldENvbHVtbkJ5Q2VsbCkobixvKSxhJiZuLiRlbWl0KCJjZWxsLSIraSx0LGEsbyxlKSksbi4kZW1pdCgicm93LSIraSx0LGUsYSl9LGhhbmRsZUV4cGFuZENsaWNrOmZ1bmN0aW9uKGUpe3RoaXMuc3RvcmUuY29tbWl0KCJ0b2dnbGVSb3dFeHBhbmRlZCIsZSl9fX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5fX2VzTW9kdWxlPSEwO3ZhciBzPWkoMTM5KSxvPW4ocyk7by5kZWZhdWx0Lmluc3RhbGw9ZnVuY3Rpb24oZSl7ZS5jb21wb25lbnQoby5kZWZhdWx0Lm5hbWUsby5kZWZhdWx0KX0sdC5kZWZhdWx0PW8uZGVmYXVsdH0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX10Ll9fZXNNb2R1bGU9ITA7dmFyIHM9aSgyNyksbz1uKHMpLGE9aSg0Nikscj1uKGEpLGw9aSgxNDApLHU9aSgxNSksYz1uKHUpO3QuZGVmYXVsdD17bmFtZToiRWxUb29sdGlwIixtaXhpbnM6W28uZGVmYXVsdF0scHJvcHM6e29wZW5EZWxheTp7dHlwZTpOdW1iZXIsZGVmYXVsdDowfSxkaXNhYmxlZDpCb29sZWFuLG1hbnVhbDpCb29sZWFuLGVmZmVjdDp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiZGFyayJ9LHBvcHBlckNsYXNzOlN0cmluZyxjb250ZW50OlN0cmluZyx2aXNpYmxlQXJyb3c6e2RlZmF1bHQ6ITB9LHRyYW5zaXRpb246e3R5cGU6U3RyaW5nLGRlZmF1bHQ6ImZhZGUtaW4tbGluZWFyIn0scG9wcGVyT3B0aW9uczp7ZGVmYXVsdDpmdW5jdGlvbigpe3JldHVybntib3VuZGFyaWVzUGFkZGluZzoxMCxncHVBY2NlbGVyYXRpb246ITF9fX0sZW50ZXJhYmxlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMH19LGJlZm9yZUNyZWF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy4kaXNTZXJ2ZXJ8fCh0aGlzLnBvcHBlclZNPW5ldyBjLmRlZmF1bHQoe2RhdGE6e25vZGU6IiJ9LHJlbmRlcjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5ub2RlfX0pLiRtb3VudCgpLHRoaXMuZGVib3VuY2VDbG9zZT0oMCxyLmRlZmF1bHQpKDIwMCxmdW5jdGlvbigpe3JldHVybiBlLmhhbmRsZUNsb3NlUG9wcGVyKCl9KSl9LHJlbmRlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzO2lmKHRoaXMucG9wcGVyVk0mJih0aGlzLnBvcHBlclZNLm5vZGU9ZSgidHJhbnNpdGlvbiIse2F0dHJzOntuYW1lOnRoaXMudHJhbnNpdGlvbn0sb246e2FmdGVyTGVhdmU6dGhpcy5kb0Rlc3Ryb3l9fSxbZSgiZGl2Iix7b246e21vdXNlbGVhdmU6ZnVuY3Rpb24oKXt0LnNldEV4cGVjdGVkU3RhdGUoITEpLHQuZGVib3VuY2VDbG9zZSgpfSxtb3VzZWVudGVyOmZ1bmN0aW9uKCl7dC5zZXRFeHBlY3RlZFN0YXRlKCEwKX19LHJlZjoicG9wcGVyIixkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIsdmFsdWU6IXRoaXMuZGlzYWJsZWQmJnRoaXMuc2hvd1BvcHBlcn1dLGNsYXNzOlsiZWwtdG9vbHRpcF9fcG9wcGVyIiwiaXMtIit0aGlzLmVmZmVjdCx0aGlzLnBvcHBlckNsYXNzXX0sW3RoaXMuJHNsb3RzLmNvbnRlbnR8fHRoaXMuY29udGVudF0pXSkpLCF0aGlzLiRzbG90cy5kZWZhdWx0fHwhdGhpcy4kc2xvdHMuZGVmYXVsdC5sZW5ndGgpcmV0dXJuIHRoaXMuJHNsb3RzLmRlZmF1bHQ7dmFyIGk9KDAsbC5nZXRGaXJzdENvbXBvbmVudENoaWxkKSh0aGlzLiRzbG90cy5kZWZhdWx0KTtpZighaSlyZXR1cm4gaTt2YXIgbj1pLmRhdGE9aS5kYXRhfHx7fSxzPWkuZGF0YS5vbj1pLmRhdGEub258fHt9O3JldHVybiBzLm1vdXNlZW50ZXI9dGhpcy5hZGRFdmVudEhhbmRsZShzLm1vdXNlZW50ZXIsZnVuY3Rpb24oKXt0LnNldEV4cGVjdGVkU3RhdGUoITApLHQuaGFuZGxlU2hvd1BvcHBlcigpfSkscy5tb3VzZWxlYXZlPXRoaXMuYWRkRXZlbnRIYW5kbGUocy5tb3VzZWxlYXZlLGZ1bmN0aW9uKCl7dC5zZXRFeHBlY3RlZFN0YXRlKCExKSx0LmRlYm91bmNlQ2xvc2UoKX0pLG4uc3RhdGljQ2xhc3M9dGhpcy5jb25jYXRDbGFzcyhuLnN0YXRpY0NsYXNzLCJlbC10b29sdGlwIiksaX0sbW91bnRlZDpmdW5jdGlvbigpe3RoaXMucmVmZXJlbmNlRWxtPXRoaXMuJGVsfSxtZXRob2RzOnthZGRFdmVudEhhbmRsZTpmdW5jdGlvbihlLHQpe3JldHVybiBlP0FycmF5LmlzQXJyYXkoZSk/ZS5jb25jYXQodCk6W2UsdF06dH0sY29uY2F0Q2xhc3M6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmZS5pbmRleE9mKHQpPi0xP2U6ZT90P2UrIiAiK3Q6ZTp0fHwiIn0saGFuZGxlU2hvd1BvcHBlcjpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5leHBlY3RlZFN0YXRlJiYhdGhpcy5tYW51YWwmJihjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KSx0aGlzLnRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe2Uuc2hvd1BvcHBlcj0hMH0sdGhpcy5vcGVuRGVsYXkpKX0saGFuZGxlQ2xvc2VQb3BwZXI6ZnVuY3Rpb24oKXt0aGlzLmVudGVyYWJsZSYmdGhpcy5leHBlY3RlZFN0YXRlfHx0aGlzLm1hbnVhbHx8KGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpLHRoaXMuc2hvd1BvcHBlcj0hMSl9LHNldEV4cGVjdGVkU3RhdGU6ZnVuY3Rpb24oZSl7dGhpcy5leHBlY3RlZFN0YXRlPWV9fX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4ib2JqZWN0Ij09PSgidW5kZWZpbmVkIj09dHlwZW9mIGU/InVuZGVmaW5lZCI6byhlKSkmJigwLGEuaGFzT3duKShlLCJjb21wb25lbnRPcHRpb25zIil9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gZSYmZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUudGFnfSlbMF19dC5fX2VzTW9kdWxlPSEwO3ZhciBvPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfTt0LmlzVk5vZGU9bix0LmdldEZpcnN0Q29tcG9uZW50Q2hpbGQ9czt2YXIgYT1pKDE4KX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX10Ll9fZXNNb2R1bGU9ITA7dmFyIHM9aSgxMTUpLG89bihzKSxhPWkoMzcpLHI9bihhKSxsPWkoMTUpLHU9bihsKSxjPWkoMTQyKSxkPW4oYyksaD1mdW5jdGlvbiBlKHQpe3ZhciBpPVtdO3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24odCl7dC5jaGlsZHJlbj8oaS5wdXNoKHQpLGkucHVzaC5hcHBseShpLGUodC5jaGlsZHJlbikpKTppLnB1c2godCl9KSxpfSxmPWZ1bmN0aW9uKGUpe3ZhciB0PTEsaT1mdW5jdGlvbiBlKGksbil7aWYobiYmKGkubGV2ZWw9bi5sZXZlbCsxLHQ8aS5sZXZlbCYmKHQ9aS5sZXZlbCkpLGkuY2hpbGRyZW4pe3ZhciBzPTA7aS5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe2UodCxpKSxzKz10LmNvbFNwYW59KSxpLmNvbFNwYW49c31lbHNlIGkuY29sU3Bhbj0xfTtlLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5sZXZlbD0xLGkoZSl9KTtmb3IodmFyIG49W10scz0wO3M8dDtzKyspbi5wdXNoKFtdKTt2YXIgbz1oKGUpO3JldHVybiBvLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5jaGlsZHJlbj9lLnJvd1NwYW49MTplLnJvd1NwYW49dC1lLmxldmVsKzEsbltlLmxldmVsLTFdLnB1c2goZSl9KSxufTt0LmRlZmF1bHQ9e25hbWU6IkVsVGFibGVIZWFkZXIiLHJlbmRlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLGk9dGhpcy5zdG9yZS5zdGF0ZXMub3JpZ2luQ29sdW1ucyxuPWYoaSx0aGlzLmNvbHVtbnMpO3JldHVybiBlKCJ0YWJsZSIse2NsYXNzOiJlbC10YWJsZV9faGVhZGVyIixhdHRyczp7Y2VsbHNwYWNpbmc6IjAiLGNlbGxwYWRkaW5nOiIwIixib3JkZXI6IjAifX0sW2UoImNvbGdyb3VwIixudWxsLFt0aGlzLl9sKHRoaXMuY29sdW1ucyxmdW5jdGlvbih0KXtyZXR1cm4gZSgiY29sIix7YXR0cnM6e25hbWU6dC5pZCx3aWR0aDp0LnJlYWxXaWR0aHx8dC53aWR0aH19LFtdKX0pLCF0aGlzLmZpeGVkJiZ0aGlzLmxheW91dC5ndXR0ZXJXaWR0aD9lKCJjb2wiLHthdHRyczp7bmFtZToiZ3V0dGVyIix3aWR0aDp0aGlzLmxheW91dC5zY3JvbGxZP3RoaXMubGF5b3V0Lmd1dHRlcldpZHRoOiIifX0sW10pOiIiXSksZSgidGhlYWQiLG51bGwsW3RoaXMuX2wobixmdW5jdGlvbihpLG4pe3JldHVybiBlKCJ0ciIsbnVsbCxbdC5fbChpLGZ1bmN0aW9uKHMsbyl7cmV0dXJuIGUoInRoIix7YXR0cnM6e2NvbHNwYW46cy5jb2xTcGFuLHJvd3NwYW46cy5yb3dTcGFufSxvbjp7bW91c2Vtb3ZlOmZ1bmN0aW9uKGUpe3JldHVybiB0LmhhbmRsZU1vdXNlTW92ZShlLHMpfSxtb3VzZW91dDp0LmhhbmRsZU1vdXNlT3V0LG1vdXNlZG93bjpmdW5jdGlvbihlKXtyZXR1cm4gdC5oYW5kbGVNb3VzZURvd24oZSxzKX0sY2xpY2s6ZnVuY3Rpb24oZSl7cmV0dXJuIHQuaGFuZGxlSGVhZGVyQ2xpY2soZSxzKX19LGNsYXNzOltzLmlkLHMub3JkZXIscy5oZWFkZXJBbGlnbixzLmNsYXNzTmFtZXx8IiIsMD09PW4mJnQuaXNDZWxsSGlkZGVuKG8saSk/ImlzLWhpZGRlbiI6IiIscy5jaGlsZHJlbj8iIjoiaXMtbGVhZiIscy5sYWJlbENsYXNzTmFtZV19LFtlKCJkaXYiLHtjbGFzczpbImNlbGwiLHMuZmlsdGVyZWRWYWx1ZSYmcy5maWx0ZXJlZFZhbHVlLmxlbmd0aD4wPyJoaWdobGlnaHQiOiIiLHMubGFiZWxDbGFzc05hbWVdfSxbcy5yZW5kZXJIZWFkZXI/cy5yZW5kZXJIZWFkZXIuY2FsbCh0Ll9yZW5kZXJQcm94eSxlLHtjb2x1bW46cywkaW5kZXg6byxzdG9yZTp0LnN0b3JlLF9zZWxmOnQuJHBhcmVudC4kdm5vZGUuY29udGV4dH0pOnMubGFiZWwscy5zb3J0YWJsZT9lKCJzcGFuIix7Y2xhc3M6ImNhcmV0LXdyYXBwZXIiLG9uOntjbGljazpmdW5jdGlvbihlKXtyZXR1cm4gdC5oYW5kbGVTb3J0Q2xpY2soZSxzKX19fSxbZSgiaSIse2NsYXNzOiJzb3J0LWNhcmV0IGFzY2VuZGluZyIsb246e2NsaWNrOmZ1bmN0aW9uKGUpe3JldHVybiB0LmhhbmRsZVNvcnRDbGljayhlLHMsImFzY2VuZGluZyIpfX19LFtdKSxlKCJpIix7Y2xhc3M6InNvcnQtY2FyZXQgZGVzY2VuZGluZyIsb246e2NsaWNrOmZ1bmN0aW9uKGUpe3JldHVybiB0LmhhbmRsZVNvcnRDbGljayhlLHMsImRlc2NlbmRpbmciKX19fSxbXSldKToiIixzLmZpbHRlcmFibGU/ZSgic3BhbiIse2NsYXNzOiJlbC10YWJsZV9fY29sdW1uLWZpbHRlci10cmlnZ2VyIixvbjp7Y2xpY2s6ZnVuY3Rpb24oZSl7cmV0dXJuIHQuaGFuZGxlRmlsdGVyQ2xpY2soZSxzKX19fSxbZSgiaSIse2NsYXNzOlsiZWwtaWNvbi1hcnJvdy1kb3duIixzLmZpbHRlck9wZW5lZD8iZWwtaWNvbi1hcnJvdy11cCI6IiJdfSxbXSldKToiIl0pXSl9KSwhdC5maXhlZCYmdC5sYXlvdXQuZ3V0dGVyV2lkdGg/ZSgidGgiLHtjbGFzczoiZ3V0dGVyIixzdHlsZTp7d2lkdGg6dC5sYXlvdXQuc2Nyb2xsWT90LmxheW91dC5ndXR0ZXJXaWR0aCsicHgiOiIwIn19LFtdKToiIl0pfSldKV0pfSxwcm9wczp7Zml4ZWQ6U3RyaW5nLHN0b3JlOntyZXF1aXJlZDohMH0sbGF5b3V0OntyZXF1aXJlZDohMH0sYm9yZGVyOkJvb2xlYW4sZGVmYXVsdFNvcnQ6e3R5cGU6T2JqZWN0LGRlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm57cHJvcDoiIixvcmRlcjoiIn19fX0sY29tcG9uZW50czp7RWxDaGVja2JveDpvLmRlZmF1bHQsRWxUYWc6ci5kZWZhdWx0fSxjb21wdXRlZDp7aXNBbGxTZWxlY3RlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0b3JlLnN0YXRlcy5pc0FsbFNlbGVjdGVkfSxjb2x1bW5zQ291bnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdG9yZS5zdGF0ZXMuY29sdW1ucy5sZW5ndGh9LGxlZnRGaXhlZENvdW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RvcmUuc3RhdGVzLmZpeGVkQ29sdW1ucy5sZW5ndGh9LHJpZ2h0Rml4ZWRDb3VudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0b3JlLnN0YXRlcy5yaWdodEZpeGVkQ29sdW1ucy5sZW5ndGh9LGNvbHVtbnM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdG9yZS5zdGF0ZXMuY29sdW1uc319LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLmZpbHRlclBhbmVscz17fX0sbW91bnRlZDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5kZWZhdWx0U29ydC5wcm9wJiYhZnVuY3Rpb24oKXt2YXIgdD1lLnN0b3JlLnN0YXRlczt0LnNvcnRQcm9wPWUuZGVmYXVsdFNvcnQucHJvcCx0LnNvcnRPcmRlcj1lLmRlZmF1bHRTb3J0Lm9yZGVyfHwiYXNjZW5kaW5nIixlLiRuZXh0VGljayhmdW5jdGlvbihpKXtmb3IodmFyIG49MCxzPWUuY29sdW1ucy5sZW5ndGg7bjxzO24rKyl7dmFyIG89ZS5jb2x1bW5zW25dO2lmKG8ucHJvcGVydHk9PT10LnNvcnRQcm9wKXtvLm9yZGVyPXQuc29ydE9yZGVyLHQuc29ydGluZ0NvbHVtbj1vO2JyZWFrfX10LnNvcnRpbmdDb2x1bW4mJmUuc3RvcmUuY29tbWl0KCJjaGFuZ2VTb3J0Q29uZGl0aW9uIil9KX0oKX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZmlsdGVyUGFuZWxzO2Zvcih2YXIgdCBpbiBlKWUuaGFzT3duUHJvcGVydHkodCkmJmVbdF0mJmVbdF0uJGRlc3Ryb3koITApfSxtZXRob2RzOntpc0NlbGxIaWRkZW46ZnVuY3Rpb24oZSx0KXtpZih0aGlzLmZpeGVkPT09ITB8fCJsZWZ0Ij09PXRoaXMuZml4ZWQpcmV0dXJuIGU+PXRoaXMubGVmdEZpeGVkQ291bnQ7aWYoInJpZ2h0Ij09PXRoaXMuZml4ZWQpe2Zvcih2YXIgaT0wLG49MDtuPGU7bisrKWkrPXRbbl0uY29sU3BhbjtyZXR1cm4gaTx0aGlzLmNvbHVtbnNDb3VudC10aGlzLnJpZ2h0Rml4ZWRDb3VudH1yZXR1cm4gZTx0aGlzLmxlZnRGaXhlZENvdW50fHxlPj10aGlzLmNvbHVtbnNDb3VudC10aGlzLnJpZ2h0Rml4ZWRDb3VudH0sdG9nZ2xlQWxsU2VsZWN0aW9uOmZ1bmN0aW9uKCl7dGhpcy5zdG9yZS5jb21taXQoInRvZ2dsZUFsbFNlbGVjdGlvbiIpfSxoYW5kbGVGaWx0ZXJDbGljazpmdW5jdGlvbihlLHQpe2Uuc3RvcFByb3BhZ2F0aW9uKCk7dmFyIGk9ZS50YXJnZXQsbj1pLnBhcmVudE5vZGUscz10aGlzLiRwYXJlbnQsbz10aGlzLmZpbHRlclBhbmVsc1t0LmlkXTtyZXR1cm4gbyYmdC5maWx0ZXJPcGVuZWQ/dm9pZChvLnNob3dQb3BwZXI9ITEpOihvfHwobz1uZXcgdS5kZWZhdWx0KGQuZGVmYXVsdCksdGhpcy5maWx0ZXJQYW5lbHNbdC5pZF09byxvLnRhYmxlPXMsby5jZWxsPW4sby5jb2x1bW49dCwhdGhpcy4kaXNTZXJ2ZXImJm8uJG1vdW50KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKSksdm9pZCBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7by5zaG93UG9wcGVyPSEwfSwxNikpfSxoYW5kbGVIZWFkZXJDbGljazpmdW5jdGlvbihlLHQpeyF0LmZpbHRlcnMmJnQuc29ydGFibGU/dGhpcy5oYW5kbGVTb3J0Q2xpY2soZSx0KTp0LmZpbHRlcnMmJiF0LnNvcnRhYmxlJiZ0aGlzLmhhbmRsZUZpbHRlckNsaWNrKGUsdCksdGhpcy4kcGFyZW50LiRlbWl0KCJoZWFkZXItY2xpY2siLHQsZSl9LGhhbmRsZU1vdXNlRG93bjpmdW5jdGlvbihlLHQpe3ZhciBpPXRoaXM7dGhpcy4kaXNTZXJ2ZXJ8fHQuY2hpbGRyZW4mJnQuY2hpbGRyZW4ubGVuZ3RoPjB8fHRoaXMuZHJhZ2dpbmdDb2x1bW4mJnRoaXMuYm9yZGVyJiYhZnVuY3Rpb24oKXtpLmRyYWdnaW5nPSEwLGkuJHBhcmVudC5yZXNpemVQcm94eVZpc2libGU9ITA7dmFyIG49aS4kcGFyZW50LHM9bi4kZWwsbz1zLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQsYT1pLiRlbC5xdWVyeVNlbGVjdG9yKCJ0aC4iK3QuaWQpLHI9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxsPXIubGVmdC1vKzMwO2EuY2xhc3NMaXN0LmFkZCgibm9jbGljayIpLGkuZHJhZ1N0YXRlPXtzdGFydE1vdXNlTGVmdDplLmNsaWVudFgsc3RhcnRMZWZ0OnIucmlnaHQtbyxzdGFydENvbHVtbkxlZnQ6ci5sZWZ0LW8sdGFibGVMZWZ0Om99O3ZhciB1PW4uJHJlZnMucmVzaXplUHJveHk7dS5zdHlsZS5sZWZ0PWkuZHJhZ1N0YXRlLnN0YXJ0TGVmdCsicHgiLGRvY3VtZW50Lm9uc2VsZWN0c3RhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZG9jdW1lbnQub25kcmFnc3RhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX07dmFyIGM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jbGllbnRYLWkuZHJhZ1N0YXRlLnN0YXJ0TW91c2VMZWZ0LG49aS5kcmFnU3RhdGUuc3RhcnRMZWZ0K3Q7dS5zdHlsZS5sZWZ0PU1hdGgubWF4KGwsbikrInB4In0sZD1mdW5jdGlvbiBzKCl7aWYoaS5kcmFnZ2luZyl7dmFyIG89aS5kcmFnU3RhdGUscj1vLnN0YXJ0Q29sdW1uTGVmdCxsPW8uc3RhcnRMZWZ0LGQ9cGFyc2VJbnQodS5zdHlsZS5sZWZ0LDEwKSxoPWQtcjt0LndpZHRoPXQucmVhbFdpZHRoPWgsbi4kZW1pdCgiaGVhZGVyLWRyYWdlbmQiLHQud2lkdGgsbC1yLHQsZSksaS5zdG9yZS5zY2hlZHVsZUxheW91dCgpLGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yPSIiLGkuZHJhZ2dpbmc9ITEsaS5kcmFnZ2luZ0NvbHVtbj1udWxsLGkuZHJhZ1N0YXRlPXt9LG4ucmVzaXplUHJveHlWaXNpYmxlPSExfWRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsYyksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIscyksZG9jdW1lbnQub25zZWxlY3RzdGFydD1udWxsLGRvY3VtZW50Lm9uZHJhZ3N0YXJ0PW51bGwsc2V0VGltZW91dChmdW5jdGlvbigpe2EuY2xhc3NMaXN0LnJlbW92ZSgibm9jbGljayIpfSwwKX07ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIixjKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIixkKX0oKX0saGFuZGxlTW91c2VNb3ZlOmZ1bmN0aW9uKGUsdCl7aWYoISh0LmNoaWxkcmVuJiZ0LmNoaWxkcmVuLmxlbmd0aD4wKSl7Zm9yKHZhciBpPWUudGFyZ2V0O2kmJiJUSCIhPT1pLnRhZ05hbWU7KWk9aS5wYXJlbnROb2RlO2lmKHQmJnQucmVzaXphYmxlJiYhdGhpcy5kcmFnZ2luZyYmdGhpcy5ib3JkZXIpe3ZhciBuPWkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscz1kb2N1bWVudC5ib2R5LnN0eWxlO24ud2lkdGg+MTImJm4ucmlnaHQtZS5wYWdlWDw4PyhzLmN1cnNvcj0iY29sLXJlc2l6ZSIsdGhpcy5kcmFnZ2luZ0NvbHVtbj10KTp0aGlzLmRyYWdnaW5nfHwocy5jdXJzb3I9IiIsdGhpcy5kcmFnZ2luZ0NvbHVtbj1udWxsKX19fSxoYW5kbGVNb3VzZU91dDpmdW5jdGlvbigpe3RoaXMuJGlzU2VydmVyfHwoZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3I9IiIpfSx0b2dnbGVPcmRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT8iYXNjZW5kaW5nIj09PWU/ImRlc2NlbmRpbmciOm51bGw6ImFzY2VuZGluZyJ9LGhhbmRsZVNvcnRDbGljazpmdW5jdGlvbihlLHQsaSl7ZS5zdG9wUHJvcGFnYXRpb24oKTtmb3IodmFyIG49aXx8dGhpcy50b2dnbGVPcmRlcih0Lm9yZGVyKSxzPWUudGFyZ2V0O3MmJiJUSCIhPT1zLnRhZ05hbWU7KXM9cy5wYXJlbnROb2RlO2lmKHMmJiJUSCI9PT1zLnRhZ05hbWUmJnMuY2xhc3NMaXN0LmNvbnRhaW5zKCJub2NsaWNrIikpcmV0dXJuIHZvaWQgcy5jbGFzc0xpc3QucmVtb3ZlKCJub2NsaWNrIik7aWYodC5zb3J0YWJsZSl7dmFyIG89dGhpcy5zdG9yZS5zdGF0ZXMsYT1vLnNvcnRQcm9wLHI9dm9pZCAwLGw9by5zb3J0aW5nQ29sdW1uO2whPT10JiYobCYmKGwub3JkZXI9bnVsbCksby5zb3J0aW5nQ29sdW1uPXQsYT10LnByb3BlcnR5KSxuP3I9dC5vcmRlcj1uOihyPXQub3JkZXI9bnVsbCxvLnNvcnRpbmdDb2x1bW49bnVsbCxhPW51bGwpLG8uc29ydFByb3A9YSxvLnNvcnRPcmRlcj1yLHRoaXMuc3RvcmUuY29tbWl0KCJjaGFuZ2VTb3J0Q29uZGl0aW9uIil9fX0sZGF0YTpmdW5jdGlvbigpe3JldHVybntkcmFnZ2luZ0NvbHVtbjpudWxsLGRyYWdnaW5nOiExLGRyYWdTdGF0ZTp7fX19fX0sZnVuY3Rpb24oZSx0LGkpe3ZhciBuPWkoNSkoaSgxNDMpLGkoMTQ1KSxudWxsLG51bGwpO2UuZXhwb3J0cz1uLmV4cG9ydHN9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5fX2VzTW9kdWxlPSEwO3ZhciBzPWkoMjcpLG89bihzKSxhPWkoMjgpLHI9aSgxMiksbD1uKHIpLHU9aSg0OCksYz1uKHUpLGQ9aSgxNDQpLGg9bihkKSxmPWkoMTE1KSxwPW4oZiksbT1pKDExOSksdj1uKG0pO3QuZGVmYXVsdD17bmFtZToiRWxUYWJsZUZpbHRlclBhbmVsIixtaXhpbnM6W28uZGVmYXVsdCxsLmRlZmF1bHRdLGRpcmVjdGl2ZXM6e0NsaWNrb3V0c2lkZTpjLmRlZmF1bHR9LGNvbXBvbmVudHM6e0VsQ2hlY2tib3g6cC5kZWZhdWx0LEVsQ2hlY2tib3hHcm91cDp2LmRlZmF1bHR9LHByb3BzOntwbGFjZW1lbnQ6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6ImJvdHRvbS1lbmQifX0sY3VzdG9tUmVuZGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlKCJkaXYiLHtjbGFzczoiZWwtdGFibGUtZmlsdGVyIn0sW2UoImRpdiIse2NsYXNzOiJlbC10YWJsZS1maWx0ZXJfX2NvbnRlbnQifSxbXSksZSgiZGl2Iix7Y2xhc3M6ImVsLXRhYmxlLWZpbHRlcl9fYm90dG9tIn0sW2UoImJ1dHRvbiIse29uOntjbGljazp0aGlzLmhhbmRsZUNvbmZpcm19fSxbdGhpcy50KCJlbC50YWJsZS5jb25maXJtRmlsdGVyIildKSxlKCJidXR0b24iLHtvbjp7Y2xpY2s6dGhpcy5oYW5kbGVSZXNldH19LFt0aGlzLnQoImVsLnRhYmxlLnJlc2V0RmlsdGVyIildKV0pXSl9LG1ldGhvZHM6e2lzQWN0aXZlOmZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlPT09dGhpcy5maWx0ZXJWYWx1ZX0saGFuZGxlT3V0c2lkZUNsaWNrOmZ1bmN0aW9uKCl7dGhpcy5zaG93UG9wcGVyPSExfSxoYW5kbGVDb25maXJtOmZ1bmN0aW9uKCl7dGhpcy5jb25maXJtRmlsdGVyKHRoaXMuZmlsdGVyZWRWYWx1ZSksdGhpcy5oYW5kbGVPdXRzaWRlQ2xpY2soKX0saGFuZGxlUmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLmZpbHRlcmVkVmFsdWU9W10sdGhpcy5jb25maXJtRmlsdGVyKHRoaXMuZmlsdGVyZWRWYWx1ZSksdGhpcy5oYW5kbGVPdXRzaWRlQ2xpY2soKX0saGFuZGxlU2VsZWN0OmZ1bmN0aW9uKGUpe3RoaXMuZmlsdGVyVmFsdWU9ZSwidW5kZWZpbmVkIiE9dHlwZW9mIGUmJm51bGwhPT1lP3RoaXMuY29uZmlybUZpbHRlcih0aGlzLmZpbHRlcmVkVmFsdWUpOnRoaXMuY29uZmlybUZpbHRlcihbXSksdGhpcy5oYW5kbGVPdXRzaWRlQ2xpY2soKX0sY29uZmlybUZpbHRlcjpmdW5jdGlvbihlKXt0aGlzLnRhYmxlLnN0b3JlLmNvbW1pdCgiZmlsdGVyQ2hhbmdlIix7Y29sdW1uOnRoaXMuY29sdW1uLHZhbHVlczplfSl9fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3RhYmxlOm51bGwsY2VsbDpudWxsLGNvbHVtbjpudWxsfX0sY29tcHV0ZWQ6e2ZpbHRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb2x1bW4mJnRoaXMuY29sdW1uLmZpbHRlcnN9LGZpbHRlclZhbHVlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5jb2x1bW4uZmlsdGVyZWRWYWx1ZXx8W10pWzBdfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5maWx0ZXJlZFZhbHVlJiYoInVuZGVmaW5lZCIhPXR5cGVvZiBlJiZudWxsIT09ZT90aGlzLmZpbHRlcmVkVmFsdWUuc3BsaWNlKDAsMSxlKTp0aGlzLmZpbHRlcmVkVmFsdWUuc3BsaWNlKDAsMSkpfX0sZmlsdGVyZWRWYWx1ZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29sdW1uP3RoaXMuY29sdW1uLmZpbHRlcmVkVmFsdWV8fFtdOltdfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5jb2x1bW4mJih0aGlzLmNvbHVtbi5maWx0ZXJlZFZhbHVlPWUpfX0sbXVsdGlwbGU6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5jb2x1bW58fHRoaXMuY29sdW1uLmZpbHRlck11bHRpcGxlfX0sbW91bnRlZDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5wb3BwZXJFbG09dGhpcy4kZWwsdGhpcy5yZWZlcmVuY2VFbG09dGhpcy5jZWxsLHRoaXMudGFibGUuYm9keVdyYXBwZXIuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIixmdW5jdGlvbigpe2UudXBkYXRlUG9wcGVyKCl9KSx0aGlzLiR3YXRjaCgic2hvd1BvcHBlciIsZnVuY3Rpb24odCl7ZS5jb2x1bW4mJihlLmNvbHVtbi5maWx0ZXJPcGVuZWQ9dCksdD9oLmRlZmF1bHQub3BlbihlKTpoLmRlZmF1bHQuY2xvc2UoZSl9KX0sd2F0Y2g6e3Nob3dQb3BwZXI6ZnVuY3Rpb24oZSl7ZT09PSEwJiZwYXJzZUludCh0aGlzLnBvcHBlckpTLl9wb3BwZXIuc3R5bGUuekluZGV4LDEwKTxhLlBvcHVwTWFuYWdlci56SW5kZXgmJih0aGlzLnBvcHBlckpTLl9wb3BwZXIuc3R5bGUuekluZGV4PWEuUG9wdXBNYW5hZ2VyLm5leHRaSW5kZXgoKSl9fX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5fX2VzTW9kdWxlPSEwO3ZhciBzPWkoMTUpLG89bihzKSxhPVtdOyFvLmRlZmF1bHQucHJvdG90eXBlLiRpc1NlcnZlciYmZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKGUpe2EuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgaT1lLnRhcmdldDt0JiZ0LiRlbCYmKGk9PT10LiRlbHx8dC4kZWwuY29udGFpbnMoaSl8fHQuaGFuZGxlT3V0c2lkZUNsaWNrJiZ0LmhhbmRsZU91dHNpZGVDbGljayhlKSl9KX0pLHQuZGVmYXVsdD17b3BlbjpmdW5jdGlvbihlKXtlJiZhLnB1c2goZSl9LGNsb3NlOmZ1bmN0aW9uKGUpe3ZhciB0PWEuaW5kZXhPZihlKTt0IT09LTEmJmEuc3BsaWNlKGUsMSl9fX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLiRjcmVhdGVFbGVtZW50LGk9ZS5fc2VsZi5fY3x8dDtyZXR1cm4gaSgidHJhbnNpdGlvbiIse2F0dHJzOntuYW1lOiJlbC16b29tLWluLXRvcCJ9fSxbZS5tdWx0aXBsZT9pKCJkaXYiLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZTplLnNob3dQb3BwZXIsZXhwcmVzc2lvbjoic2hvd1BvcHBlciJ9XSxzdGF0aWNDbGFzczoiZWwtdGFibGUtZmlsdGVyIn0sW2koImRpdiIse3N0YXRpY0NsYXNzOiJlbC10YWJsZS1maWx0ZXJfX2NvbnRlbnQifSxbaSgiZWwtY2hlY2tib3gtZ3JvdXAiLHtkaXJlY3RpdmVzOlt7bmFtZToibW9kZWwiLHJhd05hbWU6InYtbW9kZWwiLHZhbHVlOmUuZmlsdGVyZWRWYWx1ZSxleHByZXNzaW9uOiJmaWx0ZXJlZFZhbHVlIn1dLHN0YXRpY0NsYXNzOiJlbC10YWJsZS1maWx0ZXJfX2NoZWNrYm94LWdyb3VwIixkb21Qcm9wczp7dmFsdWU6ZS5maWx0ZXJlZFZhbHVlfSxvbjp7aW5wdXQ6ZnVuY3Rpb24odCl7ZS5maWx0ZXJlZFZhbHVlPXR9fX0sZS5fbChlLmZpbHRlcnMsZnVuY3Rpb24odCl7cmV0dXJuIGkoImVsLWNoZWNrYm94Iix7YXR0cnM6e2xhYmVsOnQudmFsdWV9fSxbZS5fdihlLl9zKHQudGV4dCkpXSl9KSldLDEpLGkoImRpdiIse3N0YXRpY0NsYXNzOiJlbC10YWJsZS1maWx0ZXJfX2JvdHRvbSJ9LFtpKCJidXR0b24iLHtjbGFzczp7ImlzLWRpc2FibGVkIjowPT09ZS5maWx0ZXJlZFZhbHVlLmxlbmd0aH0sYXR0cnM6e2Rpc2FibGVkOjA9PT1lLmZpbHRlcmVkVmFsdWUubGVuZ3RofSxvbjp7Y2xpY2s6ZS5oYW5kbGVDb25maXJtfX0sW2UuX3YoZS5fcyhlLnQoImVsLnRhYmxlLmNvbmZpcm1GaWx0ZXIiKSkpXSksaSgiYnV0dG9uIix7b246e2NsaWNrOmUuaGFuZGxlUmVzZXR9fSxbZS5fdihlLl9zKGUudCgiZWwudGFibGUucmVzZXRGaWx0ZXIiKSkpXSldKV0pOmkoImRpdiIse2RpcmVjdGl2ZXM6W3tuYW1lOiJzaG93IixyYXdOYW1lOiJ2LXNob3ciLHZhbHVlOmUuc2hvd1BvcHBlcixleHByZXNzaW9uOiJzaG93UG9wcGVyIn1dLHN0YXRpY0NsYXNzOiJlbC10YWJsZS1maWx0ZXIifSxbaSgidWwiLHtzdGF0aWNDbGFzczoiZWwtdGFibGUtZmlsdGVyX19saXN0In0sW2koImxpIix7c3RhdGljQ2xhc3M6ImVsLXRhYmxlLWZpbHRlcl9fbGlzdC1pdGVtIixjbGFzczp7ImlzLWFjdGl2ZSI6IWUuZmlsdGVyVmFsdWV9LG9uOntjbGljazpmdW5jdGlvbih0KXtlLmhhbmRsZVNlbGVjdChudWxsKX19fSxbZS5fdihlLl9zKGUudCgiZWwudGFibGUuY2xlYXJGaWx0ZXIiKSkpXSksZS5fbChlLmZpbHRlcnMsZnVuY3Rpb24odCl7cmV0dXJuIGkoImxpIix7c3RhdGljQ2xhc3M6ImVsLXRhYmxlLWZpbHRlcl9fbGlzdC1pdGVtIixjbGFzczp7ImlzLWFjdGl2ZSI6ZS5pc0FjdGl2ZSh0KX0sYXR0cnM6e2xhYmVsOnQudmFsdWV9LG9uOntjbGljazpmdW5jdGlvbihpKXtlLmhhbmRsZVNlbGVjdCh0LnZhbHVlKX19fSxbZS5fdihlLl9zKHQudGV4dCkpXSl9KV0sMildKV0pfSxzdGF0aWNSZW5kZXJGbnM6W119fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuJGNyZWF0ZUVsZW1lbnQsaT1lLl9zZWxmLl9jfHx0O3JldHVybiBpKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtdGFibGUiLGNsYXNzOnsiZWwtdGFibGUtLWZpdCI6ZS5maXQsImVsLXRhYmxlLS1zdHJpcGVkIjplLnN0cmlwZSwiZWwtdGFibGUtLWJvcmRlciI6ZS5ib3JkZXIsImVsLXRhYmxlLS1mbHVpZC1oZWlnaHQiOmUubWF4SGVpZ2h0LCJlbC10YWJsZS0tZW5hYmxlLXJvdy1ob3ZlciI6IWUuc3RvcmUuc3RhdGVzLmlzQ29tcGxleCwiZWwtdGFibGUtLWVuYWJsZS1yb3ctdHJhbnNpdGlvbiI6ITB9LG9uOnttb3VzZWxlYXZlOmZ1bmN0aW9uKHQpe2UuaGFuZGxlTW91c2VMZWF2ZSh0KX19fSxbaSgiZGl2Iix7cmVmOiJoaWRkZW5Db2x1bW5zIixzdGF0aWNDbGFzczoiaGlkZGVuLWNvbHVtbnMifSxbZS5fdCgiZGVmYXVsdCIpXSwyKSxlLnNob3dIZWFkZXI/aSgiZGl2Iix7cmVmOiJoZWFkZXJXcmFwcGVyIixzdGF0aWNDbGFzczoiZWwtdGFibGVfX2hlYWRlci13cmFwcGVyIn0sW2koInRhYmxlLWhlYWRlciIse3N0eWxlOnt3aWR0aDplLmxheW91dC5ib2R5V2lkdGg/ZS5sYXlvdXQuYm9keVdpZHRoKyJweCI6IiJ9LGF0dHJzOntzdG9yZTplLnN0b3JlLGxheW91dDplLmxheW91dCxib3JkZXI6ZS5ib3JkZXIsImRlZmF1bHQtc29ydCI6ZS5kZWZhdWx0U29ydH19KV0sMSk6ZS5fZSgpLGkoImRpdiIse3JlZjoiYm9keVdyYXBwZXIiLHN0YXRpY0NsYXNzOiJlbC10YWJsZV9fYm9keS13cmFwcGVyIixzdHlsZTpbZS5ib2R5SGVpZ2h0XX0sW2koInRhYmxlLWJvZHkiLHtzdHlsZTp7d2lkdGg6ZS5ib2R5V2lkdGh9LGF0dHJzOntjb250ZXh0OmUuY29udGV4dCxzdG9yZTplLnN0b3JlLGxheW91dDplLmxheW91dCwicm93LWNsYXNzLW5hbWUiOmUucm93Q2xhc3NOYW1lLCJyb3ctc3R5bGUiOmUucm93U3R5bGUsaGlnaGxpZ2h0OmUuaGlnaGxpZ2h0Q3VycmVudFJvd319KSxlLmRhdGEmJjAhPT1lLmRhdGEubGVuZ3RoP2UuX2UoKTppKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtdGFibGVfX2VtcHR5LWJsb2NrIixzdHlsZTp7d2lkdGg6ZS5ib2R5V2lkdGh9fSxbaSgic3BhbiIse3N0YXRpY0NsYXNzOiJlbC10YWJsZV9fZW1wdHktdGV4dCJ9LFtlLl90KCJlbXB0eSIsW2UuX3YoZS5fcyhlLmVtcHR5VGV4dHx8ZS50KCJlbC50YWJsZS5lbXB0eVRleHQiKSkpXSldLDIpXSldLDEpLGUuZml4ZWRDb2x1bW5zLmxlbmd0aD4wP2koImRpdiIse3JlZjoiZml4ZWRXcmFwcGVyIixzdGF0aWNDbGFzczoiZWwtdGFibGVfX2ZpeGVkIixzdHlsZTpbe3dpZHRoOmUubGF5b3V0LmZpeGVkV2lkdGg/ZS5sYXlvdXQuZml4ZWRXaWR0aCsicHgiOiIifSxlLmZpeGVkSGVpZ2h0XX0sW2Uuc2hvd0hlYWRlcj9pKCJkaXYiLHtyZWY6ImZpeGVkSGVhZGVyV3JhcHBlciIsc3RhdGljQ2xhc3M6ImVsLXRhYmxlX19maXhlZC1oZWFkZXItd3JhcHBlciJ9LFtpKCJ0YWJsZS1oZWFkZXIiLHtzdHlsZTp7d2lkdGg6ZS5sYXlvdXQuZml4ZWRXaWR0aD9lLmxheW91dC5maXhlZFdpZHRoKyJweCI6IiJ9LGF0dHJzOntmaXhlZDoibGVmdCIsYm9yZGVyOmUuYm9yZGVyLHN0b3JlOmUuc3RvcmUsbGF5b3V0OmUubGF5b3V0fX0pXSwxKTplLl9lKCksaSgiZGl2Iix7cmVmOiJmaXhlZEJvZHlXcmFwcGVyIixzdGF0aWNDbGFzczoiZWwtdGFibGVfX2ZpeGVkLWJvZHktd3JhcHBlciIsc3R5bGU6W3t0b3A6ZS5sYXlvdXQuaGVhZGVySGVpZ2h0KyJweCJ9LGUuZml4ZWRCb2R5SGVpZ2h0XX0sW2koInRhYmxlLWJvZHkiLHtzdHlsZTp7d2lkdGg6ZS5sYXlvdXQuZml4ZWRXaWR0aD9lLmxheW91dC5maXhlZFdpZHRoKyJweCI6IiJ9LGF0dHJzOntmaXhlZDoibGVmdCIsc3RvcmU6ZS5zdG9yZSxsYXlvdXQ6ZS5sYXlvdXQsaGlnaGxpZ2h0OmUuaGlnaGxpZ2h0Q3VycmVudFJvdywicm93LWNsYXNzLW5hbWUiOmUucm93Q2xhc3NOYW1lLCJyb3ctc3R5bGUiOmUucm93U3R5bGV9fSldLDEpXSk6ZS5fZSgpLGUucmlnaHRGaXhlZENvbHVtbnMubGVuZ3RoPjA/aSgiZGl2Iix7cmVmOiJyaWdodEZpeGVkV3JhcHBlciIsc3RhdGljQ2xhc3M6ImVsLXRhYmxlX19maXhlZC1yaWdodCIsc3R5bGU6W3t3aWR0aDplLmxheW91dC5yaWdodEZpeGVkV2lkdGg/ZS5sYXlvdXQucmlnaHRGaXhlZFdpZHRoKyJweCI6IiJ9LHtyaWdodDplLmxheW91dC5zY3JvbGxZPyhlLmJvcmRlcj9lLmxheW91dC5ndXR0ZXJXaWR0aDplLmxheW91dC5ndXR0ZXJXaWR0aHx8MSkrInB4IjoiIn0sZS5maXhlZEhlaWdodF19LFtlLnNob3dIZWFkZXI/aSgiZGl2Iix7cmVmOiJyaWdodEZpeGVkSGVhZGVyV3JhcHBlciIsc3RhdGljQ2xhc3M6ImVsLXRhYmxlX19maXhlZC1oZWFkZXItd3JhcHBlciJ9LFtpKCJ0YWJsZS1oZWFkZXIiLHtzdHlsZTp7d2lkdGg6ZS5sYXlvdXQucmlnaHRGaXhlZFdpZHRoP2UubGF5b3V0LnJpZ2h0Rml4ZWRXaWR0aCsicHgiOiIifSxhdHRyczp7Zml4ZWQ6InJpZ2h0Iixib3JkZXI6ZS5ib3JkZXIsc3RvcmU6ZS5zdG9yZSxsYXlvdXQ6ZS5sYXlvdXR9fSldLDEpOmUuX2UoKSxpKCJkaXYiLHtyZWY6InJpZ2h0Rml4ZWRCb2R5V3JhcHBlciIsc3RhdGljQ2xhc3M6ImVsLXRhYmxlX19maXhlZC1ib2R5LXdyYXBwZXIiLHN0eWxlOlt7dG9wOmUubGF5b3V0LmhlYWRlckhlaWdodCsicHgifSxlLmZpeGVkQm9keUhlaWdodF19LFtpKCJ0YWJsZS1ib2R5Iix7c3R5bGU6e3dpZHRoOmUubGF5b3V0LnJpZ2h0Rml4ZWRXaWR0aD9lLmxheW91dC5yaWdodEZpeGVkV2lkdGgrInB4IjoiIn0sYXR0cnM6e2ZpeGVkOiJyaWdodCIsc3RvcmU6ZS5zdG9yZSxsYXlvdXQ6ZS5sYXlvdXQsInJvdy1jbGFzcy1uYW1lIjplLnJvd0NsYXNzTmFtZSwicm93LXN0eWxlIjplLnJvd1N0eWxlLGhpZ2hsaWdodDplLmhpZ2hsaWdodEN1cnJlbnRSb3d9fSldLDEpXSk6ZS5fZSgpLGUucmlnaHRGaXhlZENvbHVtbnMubGVuZ3RoPjA/aSgiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXRhYmxlX19maXhlZC1yaWdodC1wYXRjaCIsc3R5bGU6e3dpZHRoOmUubGF5b3V0LnNjcm9sbFk/ZS5sYXlvdXQuZ3V0dGVyV2lkdGgrInB4IjoiMCIsaGVpZ2h0OmUubGF5b3V0LmhlYWRlckhlaWdodCsicHgifX0pOmUuX2UoKSxpKCJkaXYiLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZTplLnJlc2l6ZVByb3h5VmlzaWJsZSxleHByZXNzaW9uOiJyZXNpemVQcm94eVZpc2libGUifV0scmVmOiJyZXNpemVQcm94eSIsc3RhdGljQ2xhc3M6ImVsLXRhYmxlX19jb2x1bW4tcmVzaXplLXByb3h5In0pXSl9LHN0YXRpY1JlbmRlckZuczpbXX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5fX2VzTW9kdWxlPSEwO3ZhciBzPWkoMTQ4KSxvPW4ocyk7by5kZWZhdWx0Lmluc3RhbGw9ZnVuY3Rpb24oZSl7ZS5jb21wb25lbnQoby5kZWZhdWx0Lm5hbWUsby5kZWZhdWx0KX0sdC5kZWZhdWx0PW8uZGVmYXVsdH0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBzKGUpe2lmKG51bGw9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGRlc3RydWN0dXJlIHVuZGVmaW5lZCIpfXQuX19lc01vZHVsZT0hMDt2YXIgbz1pKDExNSksYT1uKG8pLHI9aSgzNyksbD1uKHIpLHU9aSgyMyksYz1uKHUpLGQ9aSgxMzUpLGg9MSxmPXtkZWZhdWx0OntvcmRlcjoiIn0sc2VsZWN0aW9uOnt3aWR0aDo0OCxtaW5XaWR0aDo0OCxyZWFsV2lkdGg6NDgsb3JkZXI6IiIsY2xhc3NOYW1lOiJlbC10YWJsZS1jb2x1bW4tLXNlbGVjdGlvbiJ9LGV4cGFuZDp7d2lkdGg6NDgsbWluV2lkdGg6NDgscmVhbFdpZHRoOjQ4LG9yZGVyOiIifSxpbmRleDp7d2lkdGg6NDgsbWluV2lkdGg6NDgscmVhbFdpZHRoOjQ4LG9yZGVyOiIifX0scD17c2VsZWN0aW9uOntyZW5kZXJIZWFkZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGUoImVsLWNoZWNrYm94Iix7bmF0aXZlT246e2NsaWNrOnRoaXMudG9nZ2xlQWxsU2VsZWN0aW9ufSxkb21Qcm9wczp7dmFsdWU6dGhpcy5pc0FsbFNlbGVjdGVkfX0sW10pfSxyZW5kZXJDZWxsOmZ1bmN0aW9uKGUsdCl7dmFyIGk9dC5yb3csbj10LmNvbHVtbixzPXQuc3RvcmUsbz10LiRpbmRleDtyZXR1cm4gZSgiZWwtY2hlY2tib3giLHtkb21Qcm9wczp7dmFsdWU6cy5pc1NlbGVjdGVkKGkpfSxhdHRyczp7ZGlzYWJsZWQ6ISFuLnNlbGVjdGFibGUmJiFuLnNlbGVjdGFibGUuY2FsbChudWxsLGksbyl9LG9uOntpbnB1dDpmdW5jdGlvbigpe3MuY29tbWl0KCJyb3dTZWxlY3RlZENoYW5nZWQiLGkpfX19LFtdKX0sc29ydGFibGU6ITEscmVzaXphYmxlOiExfSxpbmRleDp7cmVuZGVySGVhZGVyOmZ1bmN0aW9uKGUsdCl7dmFyIGk9dC5jb2x1bW47cmV0dXJuIGkubGFiZWx8fCIjIn0scmVuZGVyQ2VsbDpmdW5jdGlvbihlLHQpe3ZhciBpPXQuJGluZGV4O3JldHVybiBlKCJkaXYiLG51bGwsW2krMV0pfSxzb3J0YWJsZTohMX0sZXhwYW5kOntyZW5kZXJIZWFkZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcyh0KSwiIn0scmVuZGVyQ2VsbDpmdW5jdGlvbihlLHQsaSl7dmFyIG49dC5yb3cscz10LnN0b3JlLG89cy5zdGF0ZXMuZXhwYW5kUm93cy5pbmRleE9mKG4pPi0xO3JldHVybiBlKCJkaXYiLHtjbGFzczoiZWwtdGFibGVfX2V4cGFuZC1pY29uICIrKG8/ImVsLXRhYmxlX19leHBhbmQtaWNvbi0tZXhwYW5kZWQiOiIiKSxvbjp7Y2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gaS5oYW5kbGVFeHBhbmRDbGljayhuKX19fSxbZSgiaSIse2NsYXNzOiJlbC1pY29uIGVsLWljb24tYXJyb3ctcmlnaHQifSxbXSldKX0sc29ydGFibGU6ITEscmVzaXphYmxlOiExLGNsYXNzTmFtZToiZWwtdGFibGVfX2V4cGFuZC1jb2x1bW4ifX0sbT1mdW5jdGlvbihlLHQpe3ZhciBpPXt9OygwLGMuZGVmYXVsdCkoaSxmW2V8fCJkZWZhdWx0Il0pO2Zvcih2YXIgbiBpbiB0KWlmKHQuaGFzT3duUHJvcGVydHkobikpe3ZhciBzPXRbbl07InVuZGVmaW5lZCIhPXR5cGVvZiBzJiYoaVtuXT1zKX1yZXR1cm4gaS5taW5XaWR0aHx8KGkubWluV2lkdGg9ODApLGkucmVhbFdpZHRoPWkud2lkdGh8fGkubWluV2lkdGgsaX0sdj1mdW5jdGlvbihlLHQpe3ZhciBpPXQucm93LG49dC5jb2x1bW4scz1uLnByb3BlcnR5O3JldHVybiBuJiZuLmZvcm1hdHRlcj9uLmZvcm1hdHRlcihpLG4pOnMmJnMuaW5kZXhPZigiLiIpPT09LTE/aVtzXTooMCxkLmdldFZhbHVlQnlQYXRoKShpLHMpfTt0LmRlZmF1bHQ9e25hbWU6IkVsVGFibGVDb2x1bW4iLHByb3BzOnt0eXBlOnt0eXBlOlN0cmluZyxkZWZhdWx0OiJkZWZhdWx0In0sbGFiZWw6U3RyaW5nLGNsYXNzTmFtZTpTdHJpbmcsbGFiZWxDbGFzc05hbWU6U3RyaW5nLHByb3BlcnR5OlN0cmluZyxwcm9wOlN0cmluZyx3aWR0aDp7fSxtaW5XaWR0aDp7fSxyZW5kZXJIZWFkZXI6RnVuY3Rpb24sc29ydGFibGU6e3R5cGU6W1N0cmluZyxCb29sZWFuXSxkZWZhdWx0OiExfSxzb3J0TWV0aG9kOkZ1bmN0aW9uLHJlc2l6YWJsZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITB9LGNvbnRleHQ6e30sY29sdW1uS2V5OlN0cmluZyxhbGlnbjpTdHJpbmcsaGVhZGVyQWxpZ246U3RyaW5nLHNob3dUb29sdGlwV2hlbk92ZXJmbG93OkJvb2xlYW4sc2hvd092ZXJmbG93VG9vbHRpcDpCb29sZWFuLGZpeGVkOltCb29sZWFuLFN0cmluZ10sZm9ybWF0dGVyOkZ1bmN0aW9uLHNlbGVjdGFibGU6RnVuY3Rpb24scmVzZXJ2ZVNlbGVjdGlvbjpCb29sZWFuLGZpbHRlck1ldGhvZDpGdW5jdGlvbixmaWx0ZXJlZFZhbHVlOkFycmF5LGZpbHRlcnM6QXJyYXksZmlsdGVyTXVsdGlwbGU6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiEwfX0sZGF0YTpmdW5jdGlvbigpe3JldHVybntpc1N1YkNvbHVtbjohMSxjb2x1bW5zOltdfX0sYmVmb3JlQ3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5yb3c9e30sdGhpcy5jb2x1bW49e30sdGhpcy4kaW5kZXg9MH0sY29tcG9uZW50czp7RWxDaGVja2JveDphLmRlZmF1bHQsRWxUYWc6bC5kZWZhdWx0fSxjb21wdXRlZDp7b3duZXI6ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy4kcGFyZW50O2UmJiFlLnRhYmxlSWQ7KWU9ZS4kcGFyZW50O3JldHVybiBlfX0sY3JlYXRlZDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5jdXN0b21SZW5kZXI9dGhpcy4kb3B0aW9ucy5yZW5kZXIsdGhpcy4kb3B0aW9ucy5yZW5kZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHQoImRpdiIsZS4kc2xvdHMuZGVmYXVsdCl9LHRoaXMuY29sdW1uSWQ9KHRoaXMuJHBhcmVudC50YWJsZUlkfHx0aGlzLiRwYXJlbnQuY29sdW1uSWQrIl8iKSsiY29sdW1uXyIraCsrO3ZhciB0PXRoaXMuJHBhcmVudCxpPXRoaXMub3duZXI7dGhpcy5pc1N1YkNvbHVtbj1pIT09dDt2YXIgbj10aGlzLnR5cGUscz10aGlzLndpZHRoO3ZvaWQgMCE9PXMmJihzPXBhcnNlSW50KHMsMTApLGlzTmFOKHMpJiYocz1udWxsKSk7dmFyIG89dGhpcy5taW5XaWR0aDt2b2lkIDAhPT1vJiYobz1wYXJzZUludChvLDEwKSxpc05hTihvKSYmKG89ODApKTt2YXIgYT0hMSxyPW0obix7aWQ6dGhpcy5jb2x1bW5JZCxjb2x1bW5LZXk6dGhpcy5jb2x1bW5LZXksbGFiZWw6dGhpcy5sYWJlbCxjbGFzc05hbWU6dGhpcy5jbGFzc05hbWUsbGFiZWxDbGFzc05hbWU6dGhpcy5sYWJlbENsYXNzTmFtZSxwcm9wZXJ0eTp0aGlzLnByb3B8fHRoaXMucHJvcGVydHksdHlwZTpuLHJlbmRlckNlbGw6bnVsbCxyZW5kZXJIZWFkZXI6dGhpcy5yZW5kZXJIZWFkZXIsbWluV2lkdGg6byx3aWR0aDpzLGlzQ29sdW1uR3JvdXA6YSxjb250ZXh0OnRoaXMuY29udGV4dCxhbGlnbjp0aGlzLmFsaWduPyJpcy0iK3RoaXMuYWxpZ246bnVsbCxoZWFkZXJBbGlnbjp0aGlzLmhlYWRlckFsaWduPyJpcy0iK3RoaXMuaGVhZGVyQWxpZ246dGhpcy5hbGlnbj8iaXMtIit0aGlzLmFsaWduOm51bGwsc29ydGFibGU6IiI9PT10aGlzLnNvcnRhYmxlfHx0aGlzLnNvcnRhYmxlLHNvcnRNZXRob2Q6dGhpcy5zb3J0TWV0aG9kLHJlc2l6YWJsZTp0aGlzLnJlc2l6YWJsZSxzaG93T3ZlcmZsb3dUb29sdGlwOnRoaXMuc2hvd092ZXJmbG93VG9vbHRpcHx8dGhpcy5zaG93VG9vbHRpcFdoZW5PdmVyZmxvdyxmb3JtYXR0ZXI6dGhpcy5mb3JtYXR0ZXIsc2VsZWN0YWJsZTp0aGlzLnNlbGVjdGFibGUscmVzZXJ2ZVNlbGVjdGlvbjp0aGlzLnJlc2VydmVTZWxlY3Rpb24sZml4ZWQ6IiI9PT10aGlzLmZpeGVkfHx0aGlzLmZpeGVkLGZpbHRlck1ldGhvZDp0aGlzLmZpbHRlck1ldGhvZCxmaWx0ZXJzOnRoaXMuZmlsdGVycyxmaWx0ZXJhYmxlOnRoaXMuZmlsdGVyc3x8dGhpcy5maWx0ZXJNZXRob2QsZmlsdGVyTXVsdGlwbGU6dGhpcy5maWx0ZXJNdWx0aXBsZSxmaWx0ZXJPcGVuZWQ6ITEsZmlsdGVyZWRWYWx1ZTp0aGlzLmZpbHRlcmVkVmFsdWV8fFtdfSk7KDAsYy5kZWZhdWx0KShyLHBbbl18fHt9KSx0aGlzLmNvbHVtbkNvbmZpZz1yO3ZhciBsPXIucmVuZGVyQ2VsbCx1PXRoaXM7cmV0dXJuImV4cGFuZCI9PT1uPyhpLnJlbmRlckV4cGFuZGVkPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHUuJHNjb3BlZFNsb3RzLmRlZmF1bHQ/dS4kc2NvcGVkU2xvdHMuZGVmYXVsdCh0KTp1LiRzbG90cy5kZWZhdWx0fSx2b2lkKHIucmVuZGVyQ2VsbD1mdW5jdGlvbihlLHQpe3JldHVybiBlKCJkaXYiLHtjbGFzczoiY2VsbCJ9LFtsKGUsdCx0aGlzLl9yZW5kZXJQcm94eSldKX0pKTp2b2lkKHIucmVuZGVyQ2VsbD1mdW5jdGlvbihlLHQpe3JldHVybiB1LiR2bm9kZS5kYXRhLmlubGluZVRlbXBsYXRlP2w9ZnVuY3Rpb24oKXtpZih0Ll9zZWxmPXUuY29udGV4dHx8dC5fc2VsZiwiW29iamVjdCBPYmplY3RdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0Ll9zZWxmKSlmb3IodmFyIGUgaW4gdC5fc2VsZil0Lmhhc093blByb3BlcnR5KGUpfHwodFtlXT10Ll9zZWxmW2VdKTtyZXR1cm4gdC5fc3RhdGljVHJlZXM9dS5fc3RhdGljVHJlZXMsdC4kb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnM9dS4kb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnMsdS5jdXN0b21SZW5kZXIuY2FsbCh0KX06dS4kc2NvcGVkU2xvdHMuZGVmYXVsdCYmKGw9ZnVuY3Rpb24oKXtyZXR1cm4gdS4kc2NvcGVkU2xvdHMuZGVmYXVsdCh0KX0pLGx8fChsPXYpLHUuc2hvd092ZXJmbG93VG9vbHRpcHx8dS5zaG93VG9vbHRpcFdoZW5PdmVyZmxvdz9lKCJkaXYiLHtjbGFzczoiY2VsbCBlbC10b29sdGlwIn0sW2woZSx0KV0pOmUoImRpdiIse2NsYXNzOiJjZWxsIn0sW2woZSx0KV0pfSl9LGRlc3Ryb3llZDpmdW5jdGlvbigpe3RoaXMuJHBhcmVudCYmdGhpcy5vd25lci5zdG9yZS5jb21taXQoInJlbW92ZUNvbHVtbiIsdGhpcy5jb2x1bW5Db25maWcpfSx3YXRjaDp7bGFiZWw6ZnVuY3Rpb24oZSl7dGhpcy5jb2x1bW5Db25maWcmJih0aGlzLmNvbHVtbkNvbmZpZy5sYWJlbD1lKX0scHJvcDpmdW5jdGlvbihlKXt0aGlzLmNvbHVtbkNvbmZpZyYmKHRoaXMuY29sdW1uQ29uZmlnLnByb3BlcnR5PWUpfSxwcm9wZXJ0eTpmdW5jdGlvbihlKXt0aGlzLmNvbHVtbkNvbmZpZyYmKHRoaXMuY29sdW1uQ29uZmlnLnByb3BlcnR5PWUpfSxmaWx0ZXJzOmZ1bmN0aW9uKGUpe3RoaXMuY29sdW1uQ29uZmlnJiYodGhpcy5jb2x1bW5Db25maWcuZmlsdGVycz1lKX0sZmlsdGVyTXVsdGlwbGU6ZnVuY3Rpb24oZSl7dGhpcy5jb2x1bW5Db25maWcmJih0aGlzLmNvbHVtbkNvbmZpZy5maWx0ZXJNdWx0aXBsZT1lKX0sYWxpZ246ZnVuY3Rpb24oZSl7dGhpcy5jb2x1bW5Db25maWcmJih0aGlzLmNvbHVtbkNvbmZpZy5hbGlnbj1lPyJpcy0iK2U6bnVsbCx0aGlzLmhlYWRlckFsaWdufHwodGhpcy5jb2x1bW5Db25maWcuaGVhZGVyQWxpZ249ZT8iaXMtIitlOm51bGwpKX0saGVhZGVyQWxpZ246ZnVuY3Rpb24oZSl7dGhpcy5jb2x1bW5Db25maWcmJih0aGlzLmNvbHVtbkNvbmZpZy5oZWFkZXJBbGlnbj0iaXMtIisoZT9lOnRoaXMuYWxpZ24pKX0sd2lkdGg6ZnVuY3Rpb24oZSl7dGhpcy5jb2x1bW5Db25maWcmJih0aGlzLmNvbHVtbkNvbmZpZy53aWR0aD1lLHRoaXMub3duZXIuc3RvcmUuc2NoZWR1bGVMYXlvdXQoKSl9LG1pbldpZHRoOmZ1bmN0aW9uKGUpe3RoaXMuY29sdW1uQ29uZmlnJiYodGhpcy5jb2x1bW5Db25maWcubWluV2lkdGg9ZSx0aGlzLm93bmVyLnN0b3JlLnNjaGVkdWxlTGF5b3V0KCkpfSxmaXhlZDpmdW5jdGlvbihlKXt0aGlzLmNvbHVtbkNvbmZpZyYmKHRoaXMuY29sdW1uQ29uZmlnLmZpeGVkPWUsdGhpcy5vd25lci5zdG9yZS5zY2hlZHVsZUxheW91dCgpKX19LG1vdW50ZWQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm93bmVyLHQ9dGhpcy4kcGFyZW50LGk9dm9pZCAwO2k9dGhpcy5pc1N1YkNvbHVtbj9bXS5pbmRleE9mLmNhbGwodC4kZWwuY2hpbGRyZW4sdGhpcy4kZWwpOltdLmluZGV4T2YuY2FsbCh0LiRyZWZzLmhpZGRlbkNvbHVtbnMuY2hpbGRyZW4sdGhpcy4kZWwpLGUuc3RvcmUuY29tbWl0KCJpbnNlcnRDb2x1bW4iLHRoaXMuY29sdW1uQ29uZmlnLGksdGhpcy5pc1N1YkNvbHVtbj90LmNvbHVtbkNvbmZpZzpudWxsKX19fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7CnJldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX10Ll9fZXNNb2R1bGU9ITA7dmFyIHM9aSgxNTApLG89bihzKTtvLmRlZmF1bHQuaW5zdGFsbD1mdW5jdGlvbihlKXtlLmNvbXBvbmVudChvLmRlZmF1bHQubmFtZSxvLmRlZmF1bHQpfSx0LmRlZmF1bHQ9by5kZWZhdWx0fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXQuX19lc01vZHVsZT0hMDt2YXIgcz1pKDE1MSksbz1uKHMpLGE9aSgxNTYpLHI9bihhKSxsPWkoMTc0KSx1PW4obCksYz1mdW5jdGlvbihlKXtyZXR1cm4iZGF0ZXJhbmdlIj09PWV8fCJkYXRldGltZXJhbmdlIj09PWU/dS5kZWZhdWx0OnIuZGVmYXVsdH07dC5kZWZhdWx0PXttaXhpbnM6W28uZGVmYXVsdF0sbmFtZToiRWxEYXRlUGlja2VyIixwcm9wczp7dHlwZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiZGF0ZSJ9fSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5wYW5lbD1jKHRoaXMudHlwZSl9fX0sZnVuY3Rpb24oZSx0LGkpe3ZhciBuPWkoNSkoaSgxNTIpLGkoMTU1KSxudWxsLG51bGwpO2UuZXhwb3J0cz1uLmV4cG9ydHN9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5fX2VzTW9kdWxlPSEwO3ZhciBzPWkoMTUpLG89bihzKSxhPWkoNDgpLHI9bihhKSxsPWkoMTUzKSx1PWkoMjcpLGM9bih1KSxkPWkoMTEpLGg9bihkKSxmPWkoMTkpLHA9bihmKSxtPXtwcm9wczp7YXBwZW5kVG9Cb2R5OmMuZGVmYXVsdC5wcm9wcy5hcHBlbmRUb0JvZHksb2Zmc2V0OmMuZGVmYXVsdC5wcm9wcy5vZmZzZXQsYm91bmRhcmllc1BhZGRpbmc6Yy5kZWZhdWx0LnByb3BzLmJvdW5kYXJpZXNQYWRkaW5nfSxtZXRob2RzOmMuZGVmYXVsdC5tZXRob2RzLGRhdGE6Yy5kZWZhdWx0LmRhdGEsYmVmb3JlRGVzdHJveTpjLmRlZmF1bHQuYmVmb3JlRGVzdHJveX0sdj17ZGF0ZToieXl5eS1NTS1kZCIsbW9udGg6Inl5eXktTU0iLGRhdGV0aW1lOiJ5eXl5LU1NLWRkIEhIOm1tOnNzIix0aW1lOiJISDptbTpzcyIsd2VlazoieXl5eXdXVyIsdGltZXJhbmdlOiJISDptbTpzcyIsZGF0ZXJhbmdlOiJ5eXl5LU1NLWRkIixkYXRldGltZXJhbmdlOiJ5eXl5LU1NLWRkIEhIOm1tOnNzIix5ZWFyOiJ5eXl5In0sZz1bImRhdGUiLCJkYXRldGltZSIsInRpbWUiLCJ0aW1lLXNlbGVjdCIsIndlZWsiLCJtb250aCIsInllYXIiLCJkYXRlcmFuZ2UiLCJ0aW1lcmFuZ2UiLCJkYXRldGltZXJhbmdlIl0seT1mdW5jdGlvbihlLHQpe3JldHVybigwLGwuZm9ybWF0RGF0ZSkoZSx0KX0sYj1mdW5jdGlvbihlLHQpe3JldHVybigwLGwucGFyc2VEYXRlKShlLHQpfSxfPWZ1bmN0aW9uKGUsdCxpKXtpZihBcnJheS5pc0FycmF5KGUpJiYyPT09ZS5sZW5ndGgpe3ZhciBuPWVbMF0scz1lWzFdO2lmKG4mJnMpcmV0dXJuKDAsbC5mb3JtYXREYXRlKShuLHQpK2krKDAsbC5mb3JtYXREYXRlKShzLHQpfXJldHVybiIifSxDPWZ1bmN0aW9uKGUsdCxpKXt2YXIgbj1lLnNwbGl0KGkpO2lmKDI9PT1uLmxlbmd0aCl7dmFyIHM9blswXSxvPW5bMV07cmV0dXJuWygwLGwucGFyc2VEYXRlKShzLHQpLCgwLGwucGFyc2VEYXRlKShvLHQpXX1yZXR1cm5bXX0seD17ZGVmYXVsdDp7Zm9ybWF0dGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPyIiK2U6IiJ9LHBhcnNlcjpmdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZXx8IiI9PT1lP251bGw6ZX19LHdlZWs6e2Zvcm1hdHRlcjpmdW5jdGlvbihlLHQpe3ZhciBpPSgwLGwuZm9ybWF0RGF0ZSkoZSx0KSxuPSgwLGwuZ2V0V2Vla051bWJlcikoZSk7cmV0dXJuIGk9L1dXLy50ZXN0KGkpP2kucmVwbGFjZSgvV1cvLG48MTA/IjAiK246bik6aS5yZXBsYWNlKC9XLyxuKX0scGFyc2VyOmZ1bmN0aW9uKGUpe3ZhciB0PShlfHwiIikuc3BsaXQoInciKTtpZigyPT09dC5sZW5ndGgpe3ZhciBpPU51bWJlcih0WzBdKSxuPU51bWJlcih0WzFdKTtpZighaXNOYU4oaSkmJiFpc05hTihuKSYmbjw1NClyZXR1cm4gZX1yZXR1cm4gbnVsbH19LGRhdGU6e2Zvcm1hdHRlcjp5LHBhcnNlcjpifSxkYXRldGltZTp7Zm9ybWF0dGVyOnkscGFyc2VyOmJ9LGRhdGVyYW5nZTp7Zm9ybWF0dGVyOl8scGFyc2VyOkN9LGRhdGV0aW1lcmFuZ2U6e2Zvcm1hdHRlcjpfLHBhcnNlcjpDfSx0aW1lcmFuZ2U6e2Zvcm1hdHRlcjpfLHBhcnNlcjpDfSx0aW1lOntmb3JtYXR0ZXI6eSxwYXJzZXI6Yn0sbW9udGg6e2Zvcm1hdHRlcjp5LHBhcnNlcjpifSx5ZWFyOntmb3JtYXR0ZXI6eSxwYXJzZXI6Yn0sbnVtYmVyOntmb3JtYXR0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/IiIrZToiIn0scGFyc2VyOmZ1bmN0aW9uKGUpe3ZhciB0PU51bWJlcihlKTtyZXR1cm4gaXNOYU4oZSk/bnVsbDp0fX19LHc9e2xlZnQ6ImJvdHRvbS1zdGFydCIsY2VudGVyOiJib3R0b20tY2VudGVyIixyaWdodDoiYm90dG9tLWVuZCJ9O3QuZGVmYXVsdD17bWl4aW5zOltoLmRlZmF1bHQsbV0scHJvcHM6e3NpemU6U3RyaW5nLGZvcm1hdDpTdHJpbmcscmVhZG9ubHk6Qm9vbGVhbixwbGFjZWhvbGRlcjpTdHJpbmcsZGlzYWJsZWQ6Qm9vbGVhbixjbGVhcmFibGU6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiEwfSxwb3BwZXJDbGFzczpTdHJpbmcsZWRpdGFibGU6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiEwfSxhbGlnbjp7dHlwZTpTdHJpbmcsZGVmYXVsdDoibGVmdCJ9LHZhbHVlOnt9LHJhbmdlU2VwYXJhdG9yOntkZWZhdWx0OiIgLSAifSxwaWNrZXJPcHRpb25zOnt9fSxjb21wb25lbnRzOntFbElucHV0OnAuZGVmYXVsdH0sZGlyZWN0aXZlczp7Q2xpY2tvdXRzaWRlOnIuZGVmYXVsdH0sZGF0YTpmdW5jdGlvbigpe3JldHVybntwaWNrZXJWaXNpYmxlOiExLHNob3dDbG9zZTohMSxjdXJyZW50VmFsdWU6IiJ9fSx3YXRjaDp7cGlja2VyVmlzaWJsZTpmdW5jdGlvbihlKXtlfHx0aGlzLmRpc3BhdGNoKCJFbEZvcm1JdGVtIiwiZWwuZm9ybS5ibHVyIiksdGhpcy5yZWFkb25seXx8dGhpcy5kaXNhYmxlZHx8KGU/dGhpcy5zaG93UGlja2VyKCk6dGhpcy5oaWRlUGlja2VyKCkpfSxjdXJyZW50VmFsdWU6ZnVuY3Rpb24oZSl7ZXx8KHRoaXMucGlja2VyJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5waWNrZXIuaGFuZGxlQ2xlYXI/dGhpcy5waWNrZXIuaGFuZGxlQ2xlYXIoKTp0aGlzLiRlbWl0KCJpbnB1dCIpKX0sdmFsdWU6e2ltbWVkaWF0ZTohMCxoYW5kbGVyOmZ1bmN0aW9uKGUpe3RoaXMuY3VycmVudFZhbHVlPSgwLGwuaXNEYXRlKShlKT9uZXcgRGF0ZShlKTplfX0sZGlzcGxheVZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuJGVtaXQoImNoYW5nZSIsZSksdGhpcy5kaXNwYXRjaCgiRWxGb3JtSXRlbSIsImVsLmZvcm0uY2hhbmdlIil9fSxjb21wdXRlZDp7cmVmZXJlbmNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHJlZnMucmVmZXJlbmNlLiRlbH0scmVmSW5wdXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWZlcmVuY2U/dGhpcy5yZWZlcmVuY2UucXVlcnlTZWxlY3RvcigiaW5wdXQiKTp7fX0sdmFsdWVJc0VtcHR5OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jdXJyZW50VmFsdWU7aWYoQXJyYXkuaXNBcnJheShlKSl7Zm9yKHZhciB0PTAsaT1lLmxlbmd0aDt0PGk7dCsrKWlmKGVbdF0pcmV0dXJuITF9ZWxzZSBpZihlKXJldHVybiExO3JldHVybiEwfSx0cmlnZ2VyQ2xhc3M6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50eXBlLmluZGV4T2YoInRpbWUiKSE9PS0xPyJlbC1pY29uLXRpbWUiOiJlbC1pY29uLWRhdGUifSxzZWxlY3Rpb25Nb2RlOmZ1bmN0aW9uKCl7cmV0dXJuIndlZWsiPT09dGhpcy50eXBlPyJ3ZWVrIjoibW9udGgiPT09dGhpcy50eXBlPyJtb250aCI6InllYXIiPT09dGhpcy50eXBlPyJ5ZWFyIjoiZGF5In0saGF2ZVRyaWdnZXI6ZnVuY3Rpb24oKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIHRoaXMuc2hvd1RyaWdnZXI/dGhpcy5zaG93VHJpZ2dlcjpnLmluZGV4T2YodGhpcy50eXBlKSE9PS0xfSxkaXNwbGF5VmFsdWU6e2dldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY3VycmVudFZhbHVlO2lmKGUpe3ZhciB0PSh4W3RoaXMudHlwZV18fHguZGVmYXVsdCkuZm9ybWF0dGVyLGk9dlt0aGlzLnR5cGVdO3JldHVybiB0KGUsdGhpcy5mb3JtYXR8fGksdGhpcy5yYW5nZVNlcGFyYXRvcil9fSxzZXQ6ZnVuY3Rpb24oZSl7aWYoZSl7dmFyIHQ9dGhpcy50eXBlLGk9KHhbdF18fHguZGVmYXVsdCkucGFyc2VyLG49aShlLHRoaXMuZm9ybWF0fHx2W3RdLHRoaXMucmFuZ2VTZXBhcmF0b3IpO24mJnRoaXMucGlja2VyJiYodGhpcy5waWNrZXIudmFsdWU9bil9ZWxzZSB0aGlzLiRlbWl0KCJpbnB1dCIsZSksdGhpcy5waWNrZXIudmFsdWU9ZTt0aGlzLiRmb3JjZVVwZGF0ZSgpfX19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLnBvcHBlck9wdGlvbnM9e2JvdW5kYXJpZXNQYWRkaW5nOjAsZ3B1QWNjZWxlcmF0aW9uOiExfSx0aGlzLnBsYWNlbWVudD13W3RoaXMuYWxpZ25dfHx3LmxlZnR9LG1ldGhvZHM6e2hhbmRsZU1vdXNlRW50ZXJJY29uOmZ1bmN0aW9uKCl7dGhpcy5yZWFkb25seXx8dGhpcy5kaXNhYmxlZHx8IXRoaXMudmFsdWVJc0VtcHR5JiZ0aGlzLmNsZWFyYWJsZSYmKHRoaXMuc2hvd0Nsb3NlPSEwKX0saGFuZGxlQ2xpY2tJY29uOmZ1bmN0aW9uKCl7dGhpcy5yZWFkb25seXx8dGhpcy5kaXNhYmxlZHx8KHRoaXMuc2hvd0Nsb3NlPyh0aGlzLmN1cnJlbnRWYWx1ZT0iIix0aGlzLnNob3dDbG9zZT0hMSk6dGhpcy5waWNrZXJWaXNpYmxlPSF0aGlzLnBpY2tlclZpc2libGUpfSxkYXRlQ2hhbmdlZDpmdW5jdGlvbihlLHQpe2lmKEFycmF5LmlzQXJyYXkoZSkpe3ZhciBpPWUubGVuZ3RoO2lmKCF0KXJldHVybiEwO2Zvcig7aS0tOylpZighKDAsbC5lcXVhbERhdGUpKGVbaV0sdFtpXSkpcmV0dXJuITB9ZWxzZSBpZighKDAsbC5lcXVhbERhdGUpKGUsdCkpcmV0dXJuITA7cmV0dXJuITF9LGhhbmRsZUNsb3NlOmZ1bmN0aW9uKCl7dGhpcy5waWNrZXJWaXNpYmxlPSExfSxoYW5kbGVGb2N1czpmdW5jdGlvbigpe3ZhciBlPXRoaXMudHlwZTtnLmluZGV4T2YoZSk9PT0tMXx8dGhpcy5waWNrZXJWaXNpYmxlfHwodGhpcy5waWNrZXJWaXNpYmxlPSEwKSx0aGlzLiRlbWl0KCJmb2N1cyIsdGhpcyl9LGhhbmRsZUJsdXI6ZnVuY3Rpb24oKXt0aGlzLiRlbWl0KCJibHVyIix0aGlzKX0saGFuZGxlS2V5ZG93bjpmdW5jdGlvbihlKXt2YXIgdD1lLmtleUNvZGU7OT09PXQmJih0aGlzLnBpY2tlclZpc2libGU9ITEpfSxoaWRlUGlja2VyOmZ1bmN0aW9uKCl7dGhpcy5waWNrZXImJih0aGlzLnBpY2tlci5yZXNldFZpZXcmJnRoaXMucGlja2VyLnJlc2V0VmlldygpLHRoaXMucGlja2VyVmlzaWJsZT10aGlzLnBpY2tlci52aXNpYmxlPSExLHRoaXMuZGVzdHJveVBvcHBlcigpKX0sc2hvd1BpY2tlcjpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy4kaXNTZXJ2ZXJ8fCh0aGlzLnBpY2tlcj90aGlzLnBpY2tlclZpc2libGU9dGhpcy5waWNrZXIudmlzaWJsZT0hMDohZnVuY3Rpb24oKXtlLnBhbmVsLmRlZmF1bHRWYWx1ZT1lLmN1cnJlbnRWYWx1ZSxlLnBpY2tlcj1uZXcgby5kZWZhdWx0KGUucGFuZWwpLiRtb3VudCgpLGUucGlja2VyLnBvcHBlckNsYXNzPWUucG9wcGVyQ2xhc3MsZS5wb3BwZXJFbG09ZS5waWNrZXIuJGVsLGUucGlja2VyLndpZHRoPWUucmVmZXJlbmNlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoLGUucGlja2VyLnNob3dUaW1lPSJkYXRldGltZSI9PT1lLnR5cGV8fCJkYXRldGltZXJhbmdlIj09PWUudHlwZSxlLnBpY2tlci5zZWxlY3Rpb25Nb2RlPWUuc2VsZWN0aW9uTW9kZSxlLmZvcm1hdCYmKGUucGlja2VyLmZvcm1hdD1lLmZvcm1hdCk7dmFyIHQ9ZnVuY3Rpb24oKXt2YXIgdD1lLnBpY2tlck9wdGlvbnM7dCYmdC5zZWxlY3RhYmxlUmFuZ2UmJiFmdW5jdGlvbigpe3ZhciBpPXQuc2VsZWN0YWJsZVJhbmdlLG49eC5kYXRldGltZXJhbmdlLnBhcnNlcixzPXYudGltZXJhbmdlO2k9QXJyYXkuaXNBcnJheShpKT9pOltpXSxlLnBpY2tlci5zZWxlY3RhYmxlUmFuZ2U9aS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIG4odCxzLGUucmFuZ2VTZXBhcmF0b3IpfSl9KCk7Zm9yKHZhciBpIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShpKSYmInNlbGVjdGFibGVSYW5nZSIhPT1pJiYoZS5waWNrZXJbaV09dFtpXSl9O3QoKSxlLiR3YXRjaCgicGlja2VyT3B0aW9ucyIsZnVuY3Rpb24oKXtyZXR1cm4gdCgpfSx7ZGVlcDohMH0pLGUuJGVsLmFwcGVuZENoaWxkKGUucGlja2VyLiRlbCksZS5waWNrZXJWaXNpYmxlPWUucGlja2VyLnZpc2libGU9ITAsZS5waWNrZXIucmVzZXRWaWV3JiZlLnBpY2tlci5yZXNldFZpZXcoKSxlLnBpY2tlci4kb24oImRvZGVzdHJveSIsZS5kb0Rlc3Ryb3kpLGUucGlja2VyLiRvbigicGljayIsZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06IiIsaT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2UuJGVtaXQoImlucHV0Iix0KSxlLnBpY2tlclZpc2libGU9ZS5waWNrZXIudmlzaWJsZT1pLGUucGlja2VyLnJlc2V0VmlldyYmZS5waWNrZXIucmVzZXRWaWV3KCl9KSxlLnBpY2tlci4kb24oInNlbGVjdC1yYW5nZSIsZnVuY3Rpb24odCxpKXtlLnJlZklucHV0LnNldFNlbGVjdGlvblJhbmdlKHQsaSksZS5yZWZJbnB1dC5mb2N1cygpfSl9KCksdGhpcy51cGRhdGVQb3BwZXIoKSx0aGlzLmN1cnJlbnRWYWx1ZSBpbnN0YW5jZW9mIERhdGU/dGhpcy5waWNrZXIuZGF0ZT1uZXcgRGF0ZSh0aGlzLmN1cnJlbnRWYWx1ZS5nZXRUaW1lKCkpOnRoaXMucGlja2VyLnZhbHVlPXRoaXMuY3VycmVudFZhbHVlLHRoaXMucGlja2VyLnJlc2V0VmlldyYmdGhpcy5waWNrZXIucmVzZXRWaWV3KCksdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtlLnBpY2tlci5hanVzdFNjcm9sbFRvcCYmZS5waWNrZXIuYWp1c3RTY3JvbGxUb3AoKX0pKX19fX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX10Ll9fZXNNb2R1bGU9ITAsdC5saW1pdFJhbmdlPXQuZ2V0UmFuZ2VIb3Vycz10Lm5leHRNb250aD10LnByZXZNb250aD10LmdldFdlZWtOdW1iZXI9dC5nZXRTdGFydERhdGVPZk1vbnRoPXQuREFZX0RVUkFUSU9OPXQuZ2V0Rmlyc3REYXlPZk1vbnRoPXQuZ2V0RGF5Q291bnRPZk1vbnRoPXQucGFyc2VEYXRlPXQuZm9ybWF0RGF0ZT10LmlzRGF0ZT10LnRvRGF0ZT10LmVxdWFsRGF0ZT12b2lkIDA7dmFyIHM9aSgxNTQpLG89bihzKSxhPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBpPVtdLG49ZTtuPD10O24rKylpLnB1c2gobik7cmV0dXJuIGl9LHI9KHQuZXF1YWxEYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT10fHxuZXcgRGF0ZShlKS5nZXRUaW1lKCk9PT1uZXcgRGF0ZSh0KS5nZXRUaW1lKCl9LHQudG9EYXRlPWZ1bmN0aW9uKGUpe3JldHVybiBsKGUpP25ldyBEYXRlKGUpOm51bGx9KSxsPXQuaXNEYXRlPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT09ZSYmdm9pZCAwIT09ZSYmIWlzTmFOKG5ldyBEYXRlKGUpLmdldFRpbWUoKSl9LHU9KHQuZm9ybWF0RGF0ZT1mdW5jdGlvbihlLHQpe3JldHVybiBlPXIoZSksZT9vLmRlZmF1bHQuZm9ybWF0KGUsdHx8Inl5eXktTU0tZGQiKToiIn0sdC5wYXJzZURhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gby5kZWZhdWx0LnBhcnNlKGUsdHx8Inl5eXktTU0tZGQiKX0sdC5nZXREYXlDb3VudE9mTW9udGg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gMz09PXR8fDU9PT10fHw4PT09dHx8MTA9PT10PzMwOjE9PT10P2UlND09PTAmJmUlMTAwIT09MHx8ZSU0MDA9PT0wPzI5OjI4OjMxfSksYz0odC5nZXRGaXJzdERheU9mTW9udGg9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IERhdGUoZS5nZXRUaW1lKCkpO3JldHVybiB0LnNldERhdGUoMSksdC5nZXREYXkoKX0sdC5EQVlfRFVSQVRJT049ODY0ZTUpO3QuZ2V0U3RhcnREYXRlT2ZNb250aD1mdW5jdGlvbihlLHQpe3ZhciBpPW5ldyBEYXRlKGUsdCwxKSxuPWkuZ2V0RGF5KCk7cmV0dXJuIDA9PT1uP2kuc2V0VGltZShpLmdldFRpbWUoKS03KmMpOmkuc2V0VGltZShpLmdldFRpbWUoKS1jKm4pLGl9LHQuZ2V0V2Vla051bWJlcj1mdW5jdGlvbihlKXt2YXIgdD1uZXcgRGF0ZShlLmdldFRpbWUoKSk7dC5zZXRIb3VycygwLDAsMCwwKSx0LnNldERhdGUodC5nZXREYXRlKCkrMy0odC5nZXREYXkoKSs2KSU3KTt2YXIgaT1uZXcgRGF0ZSh0LmdldEZ1bGxZZWFyKCksMCw0KTtyZXR1cm4gMStNYXRoLnJvdW5kKCgodC5nZXRUaW1lKCktaS5nZXRUaW1lKCkpLzg2NGU1LTMrKGkuZ2V0RGF5KCkrNiklNykvNyl9LHQucHJldk1vbnRoPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0RnVsbFllYXIoKSxpPWUuZ2V0TW9udGgoKSxuPWUuZ2V0RGF0ZSgpLHM9MD09PWk/dC0xOnQsbz0wPT09aT8xMTppLTEsYT11KHMsbyk7cmV0dXJuIGE8biYmZS5zZXREYXRlKGEpLGUuc2V0TW9udGgobyksZS5zZXRGdWxsWWVhcihzKSxuZXcgRGF0ZShlLmdldFRpbWUoKSl9LHQubmV4dE1vbnRoPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0RnVsbFllYXIoKSxpPWUuZ2V0TW9udGgoKSxuPWUuZ2V0RGF0ZSgpLHM9MTE9PT1pP3QrMTp0LG89MTE9PT1pPzA6aSsxLGE9dShzLG8pO3JldHVybiBhPG4mJmUuc2V0RGF0ZShhKSxlLnNldE1vbnRoKG8pLGUuc2V0RnVsbFllYXIocyksbmV3IERhdGUoZS5nZXRUaW1lKCkpfSx0LmdldFJhbmdlSG91cnM9ZnVuY3Rpb24oZSl7dmFyIHQ9W10saT1bXTtpZigoZXx8W10pLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9ZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0SG91cnMoKX0pO2k9aS5jb25jYXQoYSh0WzBdLHRbMV0pKX0pLGkubGVuZ3RoKWZvcih2YXIgbj0wO248MjQ7bisrKXRbbl09aS5pbmRleE9mKG4pPT09LTE7ZWxzZSBmb3IodmFyIHM9MDtzPDI0O3MrKyl0W3NdPSExO3JldHVybiB0fSx0LmxpbWl0UmFuZ2U9ZnVuY3Rpb24oZSx0KXt2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06Inl5eXktTU0tZGQgSEg6bW06c3MiO2lmKCF0fHwhdC5sZW5ndGgpcmV0dXJuIGU7dmFyIG49dC5sZW5ndGg7ZT1vLmRlZmF1bHQucGFyc2Uoby5kZWZhdWx0LmZvcm1hdChlLGkpLGkpO2Zvcih2YXIgcz0wO3M8bjtzKyspe3ZhciBhPXRbc107aWYoZT49YVswXSYmZTw9YVsxXSlyZXR1cm4gZX12YXIgcj10WzBdWzBdLGw9dFswXVswXTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKGUpe2w9bmV3IERhdGUoTWF0aC5taW4oZVswXSxsKSkscj1uZXcgRGF0ZShNYXRoLm1heChlWzFdLHIpKX0pLGU8bD9sOnJ9fSxmdW5jdGlvbihlLHQsaSl7dmFyIG47IWZ1bmN0aW9uKHMpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBvKGUsdCl7Zm9yKHZhciBpPVtdLG49MCxzPWUubGVuZ3RoO248cztuKyspaS5wdXNoKGVbbl0uc3Vic3RyKDAsdCkpO3JldHVybiBpfWZ1bmN0aW9uIGEoZSl7cmV0dXJuIGZ1bmN0aW9uKHQsaSxuKXt2YXIgcz1uW2VdLmluZGV4T2YoaS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStpLnN1YnN0cigxKS50b0xvd2VyQ2FzZSgpKTt+cyYmKHQubW9udGg9cyl9fWZ1bmN0aW9uIHIoZSx0KXtmb3IoZT1TdHJpbmcoZSksdD10fHwyO2UubGVuZ3RoPHQ7KWU9IjAiK2U7cmV0dXJuIGV9dmFyIGw9e30sdT0vZHsxLDR9fE17MSw0fXx5eSg/Onl5KT98U3sxLDN9fERvfFpafChbSGhNc0RtXSlcMT98W2FBXXwiW14iXSoifCdbXiddKicvZyxjPS9cZFxkPy8sZD0vXGR7M30vLGg9L1xkezR9LyxmPS9bMC05XSpbJ2Etelx1MDBBMC1cdTA1RkZcdTA3MDAtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGRUZdK3xbXHUwNjAwLVx1MDZGRlwvXSsoXHMqP1tcdTA2MDAtXHUwNkZGXSspezEsMn0vaSxwPWZ1bmN0aW9uKCl7fSxtPVsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSx2PVsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxnPW8odiwzKSx5PW8obSwzKTtsLmkxOG49e2RheU5hbWVzU2hvcnQ6eSxkYXlOYW1lczptLG1vbnRoTmFtZXNTaG9ydDpnLG1vbnRoTmFtZXM6dixhbVBtOlsiYW0iLCJwbSJdLERvRm46ZnVuY3Rpb24oZSl7cmV0dXJuIGUrWyJ0aCIsInN0IiwibmQiLCJyZCJdW2UlMTA+Mz8wOihlLWUlMTAhPT0xMCkqZSUxMF19fTt2YXIgYj17RDpmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXREYXkoKX0sREQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZS5nZXREYXkoKSl9LERvOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuRG9GbihlLmdldERhdGUoKSl9LGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0RGF0ZSgpfSxkZDpmdW5jdGlvbihlKXtyZXR1cm4gcihlLmdldERhdGUoKSl9LGRkZDpmdW5jdGlvbihlLHQpe3JldHVybiB0LmRheU5hbWVzU2hvcnRbZS5nZXREYXkoKV19LGRkZGQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5kYXlOYW1lc1tlLmdldERheSgpXX0sTTpmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRNb250aCgpKzF9LE1NOmZ1bmN0aW9uKGUpe3JldHVybiByKGUuZ2V0TW9udGgoKSsxKX0sTU1NOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQubW9udGhOYW1lc1Nob3J0W2UuZ2V0TW9udGgoKV19LE1NTU06ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5tb250aE5hbWVzW2UuZ2V0TW9udGgoKV19LHl5OmZ1bmN0aW9uKGUpe3JldHVybiBTdHJpbmcoZS5nZXRGdWxsWWVhcigpKS5zdWJzdHIoMil9LHl5eXk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0RnVsbFllYXIoKX0saDpmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRIb3VycygpJTEyfHwxMn0saGg6ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZS5nZXRIb3VycygpJTEyfHwxMil9LEg6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0SG91cnMoKX0sSEg6ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZS5nZXRIb3VycygpKX0sbTpmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRNaW51dGVzKCl9LG1tOmZ1bmN0aW9uKGUpe3JldHVybiByKGUuZ2V0TWludXRlcygpKX0sczpmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRTZWNvbmRzKCl9LHNzOmZ1bmN0aW9uKGUpe3JldHVybiByKGUuZ2V0U2Vjb25kcygpKX0sUzpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlLmdldE1pbGxpc2Vjb25kcygpLzEwMCl9LFNTOmZ1bmN0aW9uKGUpe3JldHVybiByKE1hdGgucm91bmQoZS5nZXRNaWxsaXNlY29uZHMoKS8xMCksMil9LFNTUzpmdW5jdGlvbihlKXtyZXR1cm4gcihlLmdldE1pbGxpc2Vjb25kcygpLDMpfSxhOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZ2V0SG91cnMoKTwxMj90LmFtUG1bMF06dC5hbVBtWzFdfSxBOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZ2V0SG91cnMoKTwxMj90LmFtUG1bMF0udG9VcHBlckNhc2UoKTp0LmFtUG1bMV0udG9VcHBlckNhc2UoKX0sWlo6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5nZXRUaW1lem9uZU9mZnNldCgpO3JldHVybih0PjA/Ii0iOiIrIikrcigxMDAqTWF0aC5mbG9vcihNYXRoLmFicyh0KS82MCkrTWF0aC5hYnModCklNjAsNCl9fSxfPXtkOltjLGZ1bmN0aW9uKGUsdCl7ZS5kYXk9dH1dLE06W2MsZnVuY3Rpb24oZSx0KXtlLm1vbnRoPXQtMX1dLHl5OltjLGZ1bmN0aW9uKGUsdCl7dmFyIGk9bmV3IERhdGUsbj0rKCIiK2kuZ2V0RnVsbFllYXIoKSkuc3Vic3RyKDAsMik7ZS55ZWFyPSIiKyh0PjY4P24tMTpuKSt0fV0saDpbYyxmdW5jdGlvbihlLHQpe2UuaG91cj10fV0sbTpbYyxmdW5jdGlvbihlLHQpe2UubWludXRlPXR9XSxzOltjLGZ1bmN0aW9uKGUsdCl7ZS5zZWNvbmQ9dH1dLHl5eXk6W2gsZnVuY3Rpb24oZSx0KXtlLnllYXI9dH1dLFM6Wy9cZC8sZnVuY3Rpb24oZSx0KXtlLm1pbGxpc2Vjb25kPTEwMCp0fV0sU1M6Wy9cZHsyfS8sZnVuY3Rpb24oZSx0KXtlLm1pbGxpc2Vjb25kPTEwKnR9XSxTU1M6W2QsZnVuY3Rpb24oZSx0KXtlLm1pbGxpc2Vjb25kPXR9XSxEOltjLHBdLGRkZDpbZixwXSxNTU06W2YsYSgibW9udGhOYW1lc1Nob3J0IildLE1NTU06W2YsYSgibW9udGhOYW1lcyIpXSxhOltmLGZ1bmN0aW9uKGUsdCxpKXt2YXIgbj10LnRvTG93ZXJDYXNlKCk7bj09PWkuYW1QbVswXT9lLmlzUG09ITE6bj09PWkuYW1QbVsxXSYmKGUuaXNQbT0hMCl9XSxaWjpbL1tcK1wtXVxkXGQ6P1xkXGQvLGZ1bmN0aW9uKGUsdCl7dmFyIGksbj0odCsiIikubWF0Y2goLyhbXCtcLV18XGRcZCkvZ2kpO24mJihpPSsoNjAqblsxXSkrcGFyc2VJbnQoblsyXSwxMCksZS50aW1lem9uZU9mZnNldD0iKyI9PT1uWzBdP2k6LWkpfV19O18uREQ9Xy5ELF8uZGRkZD1fLmRkZCxfLkRvPV8uZGQ9Xy5kLF8ubW09Xy5tLF8uaGg9Xy5IPV8uSEg9Xy5oLF8uTU09Xy5NLF8uc3M9Xy5zLF8uQT1fLmEsbC5tYXNrcz17ZGVmYXVsdDoiZGRkIE1NTSBkZCB5eXl5IEhIOm1tOnNzIixzaG9ydERhdGU6Ik0vRC95eSIsbWVkaXVtRGF0ZToiTU1NIGQsIHl5eXkiLGxvbmdEYXRlOiJNTU1NIGQsIHl5eXkiLGZ1bGxEYXRlOiJkZGRkLCBNTU1NIGQsIHl5eXkiLHNob3J0VGltZToiSEg6bW0iLG1lZGl1bVRpbWU6IkhIOm1tOnNzIixsb25nVGltZToiSEg6bW06c3MuU1NTIn0sbC5mb3JtYXQ9ZnVuY3Rpb24oZSx0LGkpe3ZhciBuPWl8fGwuaTE4bjtpZigibnVtYmVyIj09dHlwZW9mIGUmJihlPW5ldyBEYXRlKGUpKSwiW29iamVjdCBEYXRlXSIhPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSl8fGlzTmFOKGUuZ2V0VGltZSgpKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgRGF0ZSBpbiBmZWNoYS5mb3JtYXQiKTtyZXR1cm4gdD1sLm1hc2tzW3RdfHx0fHxsLm1hc2tzLmRlZmF1bHQsdC5yZXBsYWNlKHUsZnVuY3Rpb24odCl7cmV0dXJuIHQgaW4gYj9iW3RdKGUsbik6dC5zbGljZSgxLHQubGVuZ3RoLTEpfSl9LGwucGFyc2U9ZnVuY3Rpb24oZSx0LGkpe3ZhciBuPWl8fGwuaTE4bjtpZigic3RyaW5nIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGZvcm1hdCBpbiBmZWNoYS5wYXJzZSIpO2lmKHQ9bC5tYXNrc1t0XXx8dCxlLmxlbmd0aD4xZTMpcmV0dXJuITE7dmFyIHM9ITAsbz17fTtpZih0LnJlcGxhY2UodSxmdW5jdGlvbih0KXtpZihfW3RdKXt2YXIgaT1fW3RdLGE9ZS5zZWFyY2goaVswXSk7fmE/ZS5yZXBsYWNlKGlbMF0sZnVuY3Rpb24odCl7cmV0dXJuIGlbMV0obyx0LG4pLGU9ZS5zdWJzdHIoYSt0Lmxlbmd0aCksdH0pOnM9ITF9cmV0dXJuIF9bdF0/IiI6dC5zbGljZSgxLHQubGVuZ3RoLTEpfSksIXMpcmV0dXJuITE7dmFyIGE9bmV3IERhdGU7by5pc1BtPT09ITAmJm51bGwhPW8uaG91ciYmMTIhPT0rby5ob3VyP28uaG91cj0rby5ob3VyKzEyOm8uaXNQbT09PSExJiYxMj09PStvLmhvdXImJihvLmhvdXI9MCk7dmFyIHI7cmV0dXJuIG51bGwhPW8udGltZXpvbmVPZmZzZXQ/KG8ubWludXRlPSsoby5taW51dGV8fDApLStvLnRpbWV6b25lT2Zmc2V0LHI9bmV3IERhdGUoRGF0ZS5VVEMoby55ZWFyfHxhLmdldEZ1bGxZZWFyKCksby5tb250aHx8MCxvLmRheXx8MSxvLmhvdXJ8fDAsby5taW51dGV8fDAsby5zZWNvbmR8fDAsby5taWxsaXNlY29uZHx8MCkpKTpyPW5ldyBEYXRlKG8ueWVhcnx8YS5nZXRGdWxsWWVhcigpLG8ubW9udGh8fDAsby5kYXl8fDEsby5ob3VyfHwwLG8ubWludXRlfHwwLG8uc2Vjb25kfHwwLG8ubWlsbGlzZWNvbmR8fDApLHJ9LCJ1bmRlZmluZWQiIT10eXBlb2YgZSYmZS5leHBvcnRzP2UuZXhwb3J0cz1sOihuPWZ1bmN0aW9uKCl7cmV0dXJuIGx9LmNhbGwodCxpLHQsZSksISh2b2lkIDAhPT1uJiYoZS5leHBvcnRzPW4pKSl9KHRoaXMpfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuJGNyZWF0ZUVsZW1lbnQsaT1lLl9zZWxmLl9jfHx0O3JldHVybiBpKCJlbC1pbnB1dCIse2RpcmVjdGl2ZXM6W3tuYW1lOiJjbGlja291dHNpZGUiLHJhd05hbWU6InYtY2xpY2tvdXRzaWRlIix2YWx1ZTplLmhhbmRsZUNsb3NlLGV4cHJlc3Npb246ImhhbmRsZUNsb3NlIn1dLHJlZjoicmVmZXJlbmNlIixzdGF0aWNDbGFzczoiZWwtZGF0ZS1lZGl0b3IiLGNsYXNzOiJlbC1kYXRlLWVkaXRvci0tIitlLnR5cGUsYXR0cnM6e3JlYWRvbmx5OiFlLmVkaXRhYmxlfHxlLnJlYWRvbmx5LGRpc2FibGVkOmUuZGlzYWJsZWQsc2l6ZTplLnNpemUscGxhY2Vob2xkZXI6ZS5wbGFjZWhvbGRlcix2YWx1ZTplLmRpc3BsYXlWYWx1ZSx2YWxpZGF0ZUV2ZW50OiExfSxvbjp7Zm9jdXM6ZS5oYW5kbGVGb2N1cyxibHVyOmUuaGFuZGxlQmx1cn0sbmF0aXZlT246e2tleWRvd246ZnVuY3Rpb24odCl7ZS5oYW5kbGVLZXlkb3duKHQpfSxjaGFuZ2U6ZnVuY3Rpb24odCl7ZS5kaXNwbGF5VmFsdWU9dC50YXJnZXQudmFsdWV9fX0sW2UuaGF2ZVRyaWdnZXI/aSgiaSIse3N0YXRpY0NsYXNzOiJlbC1pbnB1dF9faWNvbiIsY2xhc3M6W2Uuc2hvd0Nsb3NlPyJlbC1pY29uLWNsb3NlIjplLnRyaWdnZXJDbGFzc10sb246e2NsaWNrOmUuaGFuZGxlQ2xpY2tJY29uLG1vdXNlZW50ZXI6ZS5oYW5kbGVNb3VzZUVudGVySWNvbixtb3VzZWxlYXZlOmZ1bmN0aW9uKHQpe2Uuc2hvd0Nsb3NlPSExfX0sc2xvdDoiaWNvbiJ9KTplLl9lKCldKX0sc3RhdGljUmVuZGVyRm5zOltdfX0sZnVuY3Rpb24oZSx0LGkpe3ZhciBuPWkoNSkoaSgxNTcpLGkoMTczKSxudWxsLG51bGwpO2UuZXhwb3J0cz1uLmV4cG9ydHN9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5fX2VzTW9kdWxlPSEwO3ZhciBzPWkoMTUzKSxvPWkoMTIpLGE9bihvKSxyPWkoMTkpLGw9bihyKSx1PWkoMTU4KSxjPW4odSksZD1pKDE2NCksaD1uKGQpLGY9aSgxNjcpLHA9bihmKSxtPWkoMTcwKSx2PW4obSk7dC5kZWZhdWx0PXttaXhpbnM6W2EuZGVmYXVsdF0sd2F0Y2g6e3Nob3dUaW1lOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7ZSYmdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oZSl7dmFyIGk9dC4kcmVmcy5pbnB1dC4kZWw7aSYmKHQucGlja2VyV2lkdGg9aS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCsxMCl9KX0sdmFsdWU6ZnVuY3Rpb24oZSl7aWYoZSYmKGU9bmV3IERhdGUoZSksIWlzTmFOKGUpKSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuZGlzYWJsZWREYXRlJiZ0aGlzLmRpc2FibGVkRGF0ZShuZXcgRGF0ZShlKSkpcmV0dXJuO3RoaXMuZGF0ZT1lLHRoaXMueWVhcj1lLmdldEZ1bGxZZWFyKCksdGhpcy5tb250aD1lLmdldE1vbnRoKCksdGhpcy4kZW1pdCgicGljayIsZSwhMCl9fSx0aW1lUGlja2VyVmlzaWJsZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzO2UmJnRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7cmV0dXJuIHQuJHJlZnMudGltZXBpY2tlci5hanVzdFNjcm9sbFRvcCgpfSl9LHNlbGVjdGlvbk1vZGU6ZnVuY3Rpb24oZSl7Im1vbnRoIj09PWU/InllYXIiPT09dGhpcy5jdXJyZW50VmlldyYmIm1vbnRoIj09PXRoaXMuY3VycmVudFZpZXd8fCh0aGlzLmN1cnJlbnRWaWV3PSJtb250aCIpOiJ3ZWVrIj09PWUmJih0aGlzLndlZWs9KDAscy5nZXRXZWVrTnVtYmVyKSh0aGlzLmRhdGUpKX0sZGF0ZTpmdW5jdGlvbihlKXt0aGlzLnllYXI9ZS5nZXRGdWxsWWVhcigpLHRoaXMubW9udGg9ZS5nZXRNb250aCgpfX0sbWV0aG9kczp7aGFuZGxlQ2xlYXI6ZnVuY3Rpb24oKXt0aGlzLmRhdGU9bmV3IERhdGUsdGhpcy4kZW1pdCgicGljayIpfSxyZXNldERhdGU6ZnVuY3Rpb24oKXt0aGlzLmRhdGU9bmV3IERhdGUodGhpcy5kYXRlKX0sc2hvd01vbnRoUGlja2VyOmZ1bmN0aW9uKCl7dGhpcy5jdXJyZW50Vmlldz0ibW9udGgifSxzaG93WWVhclBpY2tlcjpmdW5jdGlvbigpe3RoaXMuY3VycmVudFZpZXc9InllYXIifSxwcmV2TW9udGg6ZnVuY3Rpb24oKXt0aGlzLm1vbnRoLS0sdGhpcy5tb250aDwwJiYodGhpcy5tb250aD0xMSx0aGlzLnllYXItLSl9LG5leHRNb250aDpmdW5jdGlvbigpe3RoaXMubW9udGgrKyx0aGlzLm1vbnRoPjExJiYodGhpcy5tb250aD0wLHRoaXMueWVhcisrKX0sbmV4dFllYXI6ZnVuY3Rpb24oKXsieWVhciI9PT10aGlzLmN1cnJlbnRWaWV3P3RoaXMuJHJlZnMueWVhclRhYmxlLm5leHRUZW5ZZWFyKCk6KHRoaXMueWVhcisrLHRoaXMuZGF0ZS5zZXRGdWxsWWVhcih0aGlzLnllYXIpLHRoaXMucmVzZXREYXRlKCkpfSxwcmV2WWVhcjpmdW5jdGlvbigpeyJ5ZWFyIj09PXRoaXMuY3VycmVudFZpZXc/dGhpcy4kcmVmcy55ZWFyVGFibGUucHJldlRlblllYXIoKToodGhpcy55ZWFyLS0sdGhpcy5kYXRlLnNldEZ1bGxZZWFyKHRoaXMueWVhciksdGhpcy5yZXNldERhdGUoKSl9LGhhbmRsZVNob3J0Y3V0Q2xpY2s6ZnVuY3Rpb24oZSl7ZS5vbkNsaWNrJiZlLm9uQ2xpY2sodGhpcyl9LGhhbmRsZVRpbWVQaWNrOmZ1bmN0aW9uKGUsdCxpKXtpZihlKXt2YXIgbj1uZXcgRGF0ZSh0aGlzLmRhdGUuZ2V0VGltZSgpKSxzPWUuZ2V0SG91cnMoKSxvPWUuZ2V0TWludXRlcygpLGE9ZS5nZXRTZWNvbmRzKCk7bi5zZXRIb3VycyhzKSxuLnNldE1pbnV0ZXMobyksbi5zZXRTZWNvbmRzKGEpLHRoaXMuZGF0ZT1uZXcgRGF0ZShuLmdldFRpbWUoKSl9aXx8KHRoaXMudGltZVBpY2tlclZpc2libGU9dCl9LGhhbmRsZU1vbnRoUGljazpmdW5jdGlvbihlKXt0aGlzLm1vbnRoPWU7dmFyIHQ9dGhpcy5zZWxlY3Rpb25Nb2RlO2lmKCJtb250aCIhPT10KXRoaXMuZGF0ZS5zZXRNb250aChlKSx0aGlzLmN1cnJlbnRWaWV3PSJkYXRlIix0aGlzLnJlc2V0RGF0ZSgpO2Vsc2V7dGhpcy5kYXRlLnNldE1vbnRoKGUpLHRoaXMueWVhciYmdGhpcy5kYXRlLnNldEZ1bGxZZWFyKHRoaXMueWVhciksdGhpcy5yZXNldERhdGUoKTt2YXIgaT1uZXcgRGF0ZSh0aGlzLmRhdGUuZ2V0RnVsbFllYXIoKSxlLDEpO3RoaXMuJGVtaXQoInBpY2siLGkpfX0saGFuZGxlRGF0ZVBpY2s6ZnVuY3Rpb24oZSl7ImRheSI9PT10aGlzLnNlbGVjdGlvbk1vZGU/KHRoaXMuc2hvd1RpbWV8fHRoaXMuJGVtaXQoInBpY2siLG5ldyBEYXRlKGUuZ2V0VGltZSgpKSksdGhpcy5kYXRlLnNldEZ1bGxZZWFyKGUuZ2V0RnVsbFllYXIoKSksdGhpcy5kYXRlLnNldE1vbnRoKGUuZ2V0TW9udGgoKSxlLmdldERhdGUoKSkpOiJ3ZWVrIj09PXRoaXMuc2VsZWN0aW9uTW9kZSYmKHRoaXMud2Vlaz1lLndlZWssdGhpcy4kZW1pdCgicGljayIsZS5kYXRlKSksdGhpcy5yZXNldERhdGUoKX0saGFuZGxlWWVhclBpY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXTt0aGlzLnllYXI9ZSx0JiYodGhpcy5kYXRlLnNldEZ1bGxZZWFyKGUpLCJ5ZWFyIj09PXRoaXMuc2VsZWN0aW9uTW9kZT90aGlzLiRlbWl0KCJwaWNrIixuZXcgRGF0ZShlKSk6dGhpcy5jdXJyZW50Vmlldz0ibW9udGgiLHRoaXMucmVzZXREYXRlKCkpfSxjaGFuZ2VUb05vdzpmdW5jdGlvbigpe3RoaXMuZGF0ZS5zZXRUaW1lKCtuZXcgRGF0ZSksdGhpcy4kZW1pdCgicGljayIsbmV3IERhdGUodGhpcy5kYXRlLmdldFRpbWUoKSkpLHRoaXMucmVzZXREYXRlKCl9LGNvbmZpcm06ZnVuY3Rpb24oKXt0aGlzLiRlbWl0KCJwaWNrIix0aGlzLmRhdGUpfSxyZXNldFZpZXc6ZnVuY3Rpb24oKXsibW9udGgiPT09dGhpcy5zZWxlY3Rpb25Nb2RlP3RoaXMuY3VycmVudFZpZXc9Im1vbnRoIjoieWVhciI9PT10aGlzLnNlbGVjdGlvbk1vZGU/dGhpcy5jdXJyZW50Vmlldz0ieWVhciI6dGhpcy5jdXJyZW50Vmlldz0iZGF0ZSIsIndlZWsiIT09dGhpcy5zZWxlY3Rpb25Nb2RlJiYodGhpcy55ZWFyPXRoaXMuZGF0ZS5nZXRGdWxsWWVhcigpLHRoaXMubW9udGg9dGhpcy5kYXRlLmdldE1vbnRoKCkpfX0sY29tcG9uZW50czp7VGltZVBpY2tlcjpjLmRlZmF1bHQsWWVhclRhYmxlOmguZGVmYXVsdCxNb250aFRhYmxlOnAuZGVmYXVsdCxEYXRlVGFibGU6di5kZWZhdWx0LEVsSW5wdXQ6bC5kZWZhdWx0fSxtb3VudGVkOmZ1bmN0aW9uKCl7dGhpcy5kYXRlJiYhdGhpcy55ZWFyJiYodGhpcy55ZWFyPXRoaXMuZGF0ZS5nZXRGdWxsWWVhcigpLHRoaXMubW9udGg9dGhpcy5kYXRlLmdldE1vbnRoKCkpfSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3BvcHBlckNsYXNzOiIiLHBpY2tlcldpZHRoOjAsZGF0ZTpuZXcgRGF0ZSx2YWx1ZToiIixzaG93VGltZTohMSxzZWxlY3Rpb25Nb2RlOiJkYXkiLHNob3J0Y3V0czoiIix2aXNpYmxlOiExLGN1cnJlbnRWaWV3OiJkYXRlIixkaXNhYmxlZERhdGU6IiIsZmlyc3REYXlPZldlZWs6Nyx5ZWFyOm51bGwsbW9udGg6bnVsbCx3ZWVrOm51bGwsc2hvd1dlZWtOdW1iZXI6ITEsdGltZVBpY2tlclZpc2libGU6ITEsd2lkdGg6MH19LGNvbXB1dGVkOntmb290ZXJWaXNpYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hvd1RpbWV9LHZpc2libGVUaW1lOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxzLmZvcm1hdERhdGUpKHRoaXMuZGF0ZSwiSEg6bW06c3MiKX0sc2V0OmZ1bmN0aW9uKGUpe2lmKGUpe3ZhciB0PSgwLHMucGFyc2VEYXRlKShlLCJISDptbTpzcyIpO3QmJih0LnNldEZ1bGxZZWFyKHRoaXMuZGF0ZS5nZXRGdWxsWWVhcigpKSx0LnNldE1vbnRoKHRoaXMuZGF0ZS5nZXRNb250aCgpKSx0LnNldERhdGUodGhpcy5kYXRlLmdldERhdGUoKSksdGhpcy5kYXRlPXQsdGhpcy4kcmVmcy50aW1lcGlja2VyLnZhbHVlPXQsdGhpcy50aW1lUGlja2VyVmlzaWJsZT0hMSl9fX0sdmlzaWJsZURhdGU6e2dldDpmdW5jdGlvbigpe3JldHVybigwLHMuZm9ybWF0RGF0ZSkodGhpcy5kYXRlKX0sc2V0OmZ1bmN0aW9uKGUpe3ZhciB0PSgwLHMucGFyc2VEYXRlKShlLCJ5eXl5LU1NLWRkIik7dCYmKHQuc2V0SG91cnModGhpcy5kYXRlLmdldEhvdXJzKCkpLHQuc2V0TWludXRlcyh0aGlzLmRhdGUuZ2V0TWludXRlcygpKSx0LnNldFNlY29uZHModGhpcy5kYXRlLmdldFNlY29uZHMoKSksdGhpcy5kYXRlPXQsdGhpcy5yZXNldFZpZXcoKSl9fSx5ZWFyTGFiZWw6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnllYXI7aWYoIWUpcmV0dXJuIiI7dmFyIHQ9dGhpcy50KCJlbC5kYXRlcGlja2VyLnllYXIiKTtpZigieWVhciI9PT10aGlzLmN1cnJlbnRWaWV3KXt2YXIgaT0xMCpNYXRoLmZsb29yKGUvMTApO3JldHVybiB0P2krIiAiK3QrIiAtICIrKGkrOSkrIiAiK3Q6aSsiIC0gIisoaSs5KX1yZXR1cm4gdGhpcy55ZWFyKyIgIit0fX19fSxmdW5jdGlvbihlLHQsaSl7dmFyIG49aSg1KShpKDE1OSksaSgxNjMpLG51bGwsbnVsbCk7ZS5leHBvcnRzPW4uZXhwb3J0c30sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX10Ll9fZXNNb2R1bGU9ITA7dmFyIHM9aSgxNTMpLG89aSgxMiksYT1uKG8pO3QuZGVmYXVsdD17bWl4aW5zOlthLmRlZmF1bHRdLGNvbXBvbmVudHM6e1RpbWVTcGlubmVyOmkoMTYwKX0scHJvcHM6e3BpY2tlcldpZHRoOnt9LGRhdGU6e2RlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IERhdGV9fSx2aXNpYmxlOkJvb2xlYW59LHdhdGNoOnt2aXNpYmxlOmZ1bmN0aW9uKGUpe3RoaXMuY3VycmVudFZpc2libGU9ZX0scGlja2VyV2lkdGg6ZnVuY3Rpb24oZSl7dGhpcy53aWR0aD1lfSx2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLGk9dm9pZCAwO2UgaW5zdGFuY2VvZiBEYXRlP2k9KDAscy5saW1pdFJhbmdlKShlLHRoaXMuc2VsZWN0YWJsZVJhbmdlKTplfHwoaT1uZXcgRGF0ZSksdGhpcy5oYW5kbGVDaGFuZ2Uoe2hvdXJzOmkuZ2V0SG91cnMoKSxtaW51dGVzOmkuZ2V0TWludXRlcygpLHNlY29uZHM6aS5nZXRTZWNvbmRzKCl9KSx0aGlzLiRuZXh0VGljayhmdW5jdGlvbihlKXtyZXR1cm4gdC5hanVzdFNjcm9sbFRvcCgpfSl9LHNlbGVjdGFibGVSYW5nZTpmdW5jdGlvbihlKXt0aGlzLiRyZWZzLnNwaW5uZXIuc2VsZWN0YWJsZVJhbmdlPWV9fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3BvcHBlckNsYXNzOiIiLGZvcm1hdDoiSEg6bW06c3MiLHZhbHVlOiIiLGhvdXJzOjAsbWludXRlczowLHNlY29uZHM6MCxzZWxlY3RhYmxlUmFuZ2U6W10sY3VycmVudERhdGU6dGhpcy4kb3B0aW9ucy5kZWZhdWx0VmFsdWV8fHRoaXMuZGF0ZXx8bmV3IERhdGUsY3VycmVudFZpc2libGU6dGhpcy52aXNpYmxlfHwhMSx3aWR0aDp0aGlzLnBpY2tlcldpZHRofHwwfX0sY29tcHV0ZWQ6e3Nob3dTZWNvbmRzOmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuZm9ybWF0fHwiIikuaW5kZXhPZigic3MiKSE9PS0xfX0sbWV0aG9kczp7aGFuZGxlQ2xlYXI6ZnVuY3Rpb24oKXt0aGlzLiRlbWl0KCJwaWNrIil9LGhhbmRsZUNhbmNlbDpmdW5jdGlvbigpe3RoaXMuJGVtaXQoInBpY2siKX0saGFuZGxlQ2hhbmdlOmZ1bmN0aW9uKGUpe3ZvaWQgMCE9PWUuaG91cnMmJih0aGlzLmN1cnJlbnREYXRlLnNldEhvdXJzKGUuaG91cnMpLHRoaXMuaG91cnM9dGhpcy5jdXJyZW50RGF0ZS5nZXRIb3VycygpKSx2b2lkIDAhPT1lLm1pbnV0ZXMmJih0aGlzLmN1cnJlbnREYXRlLnNldE1pbnV0ZXMoZS5taW51dGVzKSx0aGlzLm1pbnV0ZXM9dGhpcy5jdXJyZW50RGF0ZS5nZXRNaW51dGVzKCkpLHZvaWQgMCE9PWUuc2Vjb25kcyYmKHRoaXMuY3VycmVudERhdGUuc2V0U2Vjb25kcyhlLnNlY29uZHMpLHRoaXMuc2Vjb25kcz10aGlzLmN1cnJlbnREYXRlLmdldFNlY29uZHMoKSksdGhpcy5oYW5kbGVDb25maXJtKCEwKX0sc2V0U2VsZWN0aW9uUmFuZ2U6ZnVuY3Rpb24oZSx0KXt0aGlzLiRlbWl0KCJzZWxlY3QtcmFuZ2UiLGUsdCl9LGhhbmRsZUNvbmZpcm06ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdLHQ9YXJndW1lbnRzWzFdO2lmKCF0KXt2YXIgaT1uZXcgRGF0ZSgoMCxzLmxpbWl0UmFuZ2UpKHRoaXMuY3VycmVudERhdGUsdGhpcy5zZWxlY3RhYmxlUmFuZ2UsIkhIOm1tOnNzIikpO3RoaXMuJGVtaXQoInBpY2siLGksZSx0KX19LGFqdXN0U2Nyb2xsVG9wOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHJlZnMuc3Bpbm5lci5hanVzdFNjcm9sbFRvcCgpfX0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuaG91cnM9dGhpcy5jdXJyZW50RGF0ZS5nZXRIb3VycygpLHRoaXMubWludXRlcz10aGlzLmN1cnJlbnREYXRlLmdldE1pbnV0ZXMoKSx0aGlzLnNlY29uZHM9dGhpcy5jdXJyZW50RGF0ZS5nZXRTZWNvbmRzKCl9LG1vdW50ZWQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7cmV0dXJuIGUuaGFuZGxlQ29uZmlybSghMCwhMCl9KX19fSxmdW5jdGlvbihlLHQsaSl7dmFyIG49aSg1KShpKDE2MSksaSgxNjIpLG51bGwsbnVsbCk7ZS5leHBvcnRzPW4uZXhwb3J0c30sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX10Ll9fZXNNb2R1bGU9ITA7dmFyIHM9aSgxNTMpLG89aSg0MSksYT1uKG8pO3QuZGVmYXVsdD17Y29tcG9uZW50czp7RWxTY3JvbGxiYXI6YS5kZWZhdWx0fSxwcm9wczp7aG91cnM6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MH0sbWludXRlczp7dHlwZTpOdW1iZXIsZGVmYXVsdDowfSxzZWNvbmRzOnt0eXBlOk51bWJlcixkZWZhdWx0OjB9LHNob3dTZWNvbmRzOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMH19LHdhdGNoOntob3Vyc1ByaXZhdGU6ZnVuY3Rpb24oZSx0KXtlPj0wJiZlPD0yM3x8KHRoaXMuaG91cnNQcml2YXRlPXQpLHRoaXMuYWp1c3RFbFRvcCgiaG91ciIsZSksdGhpcy4kZW1pdCgiY2hhbmdlIix7aG91cnM6ZX0pfSxtaW51dGVzUHJpdmF0ZTpmdW5jdGlvbihlLHQpe2U+PTAmJmU8PTU5fHwodGhpcy5taW51dGVzUHJpdmF0ZT10KSx0aGlzLmFqdXN0RWxUb3AoIm1pbnV0ZSIsZSksdGhpcy4kZW1pdCgiY2hhbmdlIix7bWludXRlczplfSl9LHNlY29uZHNQcml2YXRlOmZ1bmN0aW9uKGUsdCl7ZT49MCYmZTw9NTl8fCh0aGlzLnNlY29uZHNQcml2YXRlPXQpLHRoaXMuYWp1c3RFbFRvcCgic2Vjb25kIixlKSx0aGlzLiRlbWl0KCJjaGFuZ2UiLHtzZWNvbmRzOmV9KX19LGNvbXB1dGVkOntob3Vyc0xpc3Q6ZnVuY3Rpb24oKXtyZXR1cm4oMCxzLmdldFJhbmdlSG91cnMpKHRoaXMuc2VsZWN0YWJsZVJhbmdlKX0saG91ckVsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHJlZnMuaG91ci53cmFwfSxtaW51dGVFbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRyZWZzLm1pbnV0ZS53cmFwfSxzZWNvbmRFbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRyZWZzLnNlY29uZC53cmFwfX0sZGF0YTpmdW5jdGlvbigpe3JldHVybntob3Vyc1ByaXZhdGU6MCxtaW51dGVzUHJpdmF0ZTowLHNlY29uZHNQcml2YXRlOjAsc2VsZWN0YWJsZVJhbmdlOltdfX0sbW91bnRlZDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtlLmJpbmRTY3JvbGxFdmVudCgpfSl9LG1ldGhvZHM6e2hhbmRsZUNsaWNrOmZ1bmN0aW9uKGUsdCxpKXt0LmRpc2FibGVkfHwodGhpc1tlKyJQcml2YXRlIl09dC52YWx1ZT49MD90LnZhbHVlOnQsdGhpcy5lbWl0U2VsZWN0UmFuZ2UoZSkpfSxlbWl0U2VsZWN0UmFuZ2U6ZnVuY3Rpb24oZSl7ImhvdXJzIj09PWU/dGhpcy4kZW1pdCgic2VsZWN0LXJhbmdlIiwwLDIpOiJtaW51dGVzIj09PWU/dGhpcy4kZW1pdCgic2VsZWN0LXJhbmdlIiwzLDUpOiJzZWNvbmRzIj09PWUmJnRoaXMuJGVtaXQoInNlbGVjdC1yYW5nZSIsNiw4KX0sYmluZFNjcm9sbEV2ZW50OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWZ1bmN0aW9uKHQpe2VbdCsiRWwiXS5vbnNjcm9sbD1mdW5jdGlvbihpKXtyZXR1cm4gZS5oYW5kbGVTY3JvbGwodCxpKX19O3QoImhvdXIiKSx0KCJtaW51dGUiKSx0KCJzZWNvbmQiKX0saGFuZGxlU2Nyb2xsOmZ1bmN0aW9uKGUpe3ZhciB0PXt9O3RbZSsicyJdPU1hdGgubWluKE1hdGguZmxvb3IoKHRoaXNbZSsiRWwiXS5zY3JvbGxUb3AtODApLzMyKzMpLDU5KSx0aGlzLiRlbWl0KCJjaGFuZ2UiLHQpfSxhanVzdFNjcm9sbFRvcDpmdW5jdGlvbigpe3RoaXMuYWp1c3RFbFRvcCgiaG91ciIsdGhpcy5ob3VycyksdGhpcy5hanVzdEVsVG9wKCJtaW51dGUiLHRoaXMubWludXRlcyksdGhpcy5hanVzdEVsVG9wKCJzZWNvbmQiLHRoaXMuc2Vjb25kcyl9LGFqdXN0RWxUb3A6ZnVuY3Rpb24oZSx0KXt0aGlzW2UrIkVsIl0uc2Nyb2xsVG9wPU1hdGgubWF4KDAsMzIqKHQtMi41KSs4MCl9fX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxpPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIGkoImRpdiIse3N0YXRpY0NsYXNzOiJlbC10aW1lLXNwaW5uZXIiLGNsYXNzOnsiaGFzLXNlY29uZHMiOmUuc2hvd1NlY29uZHN9fSxbaSgiZWwtc2Nyb2xsYmFyIix7cmVmOiJob3VyIixzdGF0aWNDbGFzczoiZWwtdGltZS1zcGlubmVyX193cmFwcGVyIixhdHRyczp7IndyYXAtc3R5bGUiOiJtYXgtaGVpZ2h0OiBpbmhlcml0OyIsInZpZXctY2xhc3MiOiJlbC10aW1lLXNwaW5uZXJfX2xpc3QiLG5vcmVzaXplOiIiLHRhZzoidWwifSxuYXRpdmVPbjp7bW91c2VlbnRlcjpmdW5jdGlvbih0KXtlLmVtaXRTZWxlY3RSYW5nZSgiaG91cnMiKX19fSxlLl9sKGUuaG91cnNMaXN0LGZ1bmN0aW9uKHQsbil7cmV0dXJuIGkoImxpIix7c3RhdGljQ2xhc3M6ImVsLXRpbWUtc3Bpbm5lcl9faXRlbSIsY2xhc3M6e2FjdGl2ZTpuPT09ZS5ob3VycyxkaXNhYmxlZDp0fSxhdHRyczp7InRyYWNrLWJ5IjoiaG91ciJ9LGRvbVByb3BzOnt0ZXh0Q29udGVudDplLl9zKG4pfSxvbjp7Y2xpY2s6ZnVuY3Rpb24oaSl7ZS5oYW5kbGVDbGljaygiaG91cnMiLHt2YWx1ZTpuLGRpc2FibGVkOnR9LCEwKX19fSl9KSksaSgiZWwtc2Nyb2xsYmFyIix7cmVmOiJtaW51dGUiLHN0YXRpY0NsYXNzOiJlbC10aW1lLXNwaW5uZXJfX3dyYXBwZXIiLGF0dHJzOnsid3JhcC1zdHlsZSI6Im1heC1oZWlnaHQ6IGluaGVyaXQ7Iiwidmlldy1jbGFzcyI6ImVsLXRpbWUtc3Bpbm5lcl9fbGlzdCIsbm9yZXNpemU6IiIsdGFnOiJ1bCJ9LG5hdGl2ZU9uOnttb3VzZWVudGVyOmZ1bmN0aW9uKHQpe2UuZW1pdFNlbGVjdFJhbmdlKCJtaW51dGVzIil9fX0sZS5fbCg2MCxmdW5jdGlvbih0LG4pe3JldHVybiBpKCJsaSIse3N0YXRpY0NsYXNzOiJlbC10aW1lLXNwaW5uZXJfX2l0ZW0iLGNsYXNzOnthY3RpdmU6bj09PWUubWludXRlc30sZG9tUHJvcHM6e3RleHRDb250ZW50OmUuX3Mobil9LG9uOntjbGljazpmdW5jdGlvbih0KXtlLmhhbmRsZUNsaWNrKCJtaW51dGVzIixuLCEwKX19fSl9KSksaSgiZWwtc2Nyb2xsYmFyIix7ZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6ZS5zaG93U2Vjb25kcyxleHByZXNzaW9uOiJzaG93U2Vjb25kcyJ9XSxyZWY6InNlY29uZCIsc3RhdGljQ2xhc3M6ImVsLXRpbWUtc3Bpbm5lcl9fd3JhcHBlciIsYXR0cnM6eyJ3cmFwLXN0eWxlIjoibWF4LWhlaWdodDogaW5oZXJpdDsiLCJ2aWV3LWNsYXNzIjoiZWwtdGltZS1zcGlubmVyX19saXN0Iixub3Jlc2l6ZToiIix0YWc6InVsIn0sbmF0aXZlT246e21vdXNlZW50ZXI6ZnVuY3Rpb24odCl7ZS5lbWl0U2VsZWN0UmFuZ2UoInNlY29uZHMiKX19fSxlLl9sKDYwLGZ1bmN0aW9uKHQsbil7cmV0dXJuIGkoImxpIix7c3RhdGljQ2xhc3M6ImVsLXRpbWUtc3Bpbm5lcl9faXRlbSIsY2xhc3M6e2FjdGl2ZTpuPT09ZS5zZWNvbmRzfSxkb21Qcm9wczp7dGV4dENvbnRlbnQ6ZS5fcyhuKX0sb246e2NsaWNrOmZ1bmN0aW9uKHQpe2UuaGFuZGxlQ2xpY2soInNlY29uZHMiLG4sITApfX19KX0pKV0sMSl9LHN0YXRpY1JlbmRlckZuczpbXX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxpPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIGkoInRyYW5zaXRpb24iLHthdHRyczp7bmFtZToiZWwtem9vbS1pbi10b3AifSxvbjp7ImFmdGVyLWxlYXZlIjpmdW5jdGlvbih0KXtlLiRlbWl0KCJkb2Rlc3Ryb3kiKX19fSxbaSgiZGl2Iix7ZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6ZS5jdXJyZW50VmlzaWJsZSxleHByZXNzaW9uOiJjdXJyZW50VmlzaWJsZSJ9XSxzdGF0aWNDbGFzczoiZWwtdGltZS1wYW5lbCIsY2xhc3M6ZS5wb3BwZXJDbGFzcyxzdHlsZTp7d2lkdGg6ZS53aWR0aCsicHgifX0sW2koImRpdiIse3N0YXRpY0NsYXNzOiJlbC10aW1lLXBhbmVsX19jb250ZW50IixjbGFzczp7Imhhcy1zZWNvbmRzIjplLnNob3dTZWNvbmRzfX0sW2koInRpbWUtc3Bpbm5lciIse3JlZjoic3Bpbm5lciIsYXR0cnM6eyJzaG93LXNlY29uZHMiOmUuc2hvd1NlY29uZHMsaG91cnM6ZS5ob3VycyxtaW51dGVzOmUubWludXRlcyxzZWNvbmRzOmUuc2Vjb25kc30sb246e2NoYW5nZTplLmhhbmRsZUNoYW5nZSwic2VsZWN0LXJhbmdlIjplLnNldFNlbGVjdGlvblJhbmdlfX0pXSwxKSxpKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtdGltZS1wYW5lbF9fZm9vdGVyIn0sW2koImJ1dHRvbiIse3N0YXRpY0NsYXNzOiJlbC10aW1lLXBhbmVsX19idG4gY2FuY2VsIixhdHRyczp7dHlwZToiYnV0dG9uIn0sb246e2NsaWNrOmUuaGFuZGxlQ2FuY2VsfX0sW2UuX3YoZS5fcyhlLnQoImVsLmRhdGVwaWNrZXIuY2FuY2VsIikpKV0pLGkoImJ1dHRvbiIse3N0YXRpY0NsYXNzOiJlbC10aW1lLXBhbmVsX19idG4gY29uZmlybSIsYXR0cnM6e3R5cGU6ImJ1dHRvbiJ9LG9uOntjbGljazpmdW5jdGlvbih0KXtlLmhhbmRsZUNvbmZpcm0oKX19fSxbZS5fdihlLl9zKGUudCgiZWwuZGF0ZXBpY2tlci5jb25maXJtIikpKV0pXSldKV0pfSxzdGF0aWNSZW5kZXJGbnM6W119fSxmdW5jdGlvbihlLHQsaSl7dmFyIG49aSg1KShpKDE2NSksaSgxNjYpLG51bGwsbnVsbCk7ZS5leHBvcnRzPW4uZXhwb3J0c30sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt0Ll9fZXNNb2R1bGU9ITA7dmFyIG49aSgzMCk7dC5kZWZhdWx0PXtwcm9wczp7ZGlzYWJsZWREYXRlOnt9LGRhdGU6e30seWVhcjp7fX0sY29tcHV0ZWQ6e3N0YXJ0WWVhcjpmdW5jdGlvbigpe3JldHVybiAxMCpNYXRoLmZsb29yKHRoaXMueWVhci8xMCl9fSxtZXRob2RzOntnZXRDZWxsU3R5bGU6ZnVuY3Rpb24oZSl7dmFyIHQ9e30saT1uZXcgRGF0ZSh0aGlzLmRhdGUpO3JldHVybiBpLnNldEZ1bGxZZWFyKGUpLHQuZGlzYWJsZWQ9ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuZGlzYWJsZWREYXRlJiZ0aGlzLmRpc2FibGVkRGF0ZShpKSx0LmN1cnJlbnQ9TnVtYmVyKHRoaXMueWVhcik9PT1lLHR9LG5leHRUZW5ZZWFyOmZ1bmN0aW9uKCl7dGhpcy4kZW1pdCgicGljayIsTnVtYmVyKHRoaXMueWVhcikrMTAsITEpfSxwcmV2VGVuWWVhcjpmdW5jdGlvbigpe3RoaXMuJGVtaXQoInBpY2siLE51bWJlcih0aGlzLnllYXIpLTEwLCExKX0saGFuZGxlWWVhclRhYmxlQ2xpY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50YXJnZXQ7aWYoIkEiPT09dC50YWdOYW1lKXtpZigoMCxuLmhhc0NsYXNzKSh0LnBhcmVudE5vZGUsImRpc2FibGVkIikpcmV0dXJuO3ZhciBpPXQudGV4dENvbnRlbnR8fHQuaW5uZXJUZXh0O3RoaXMuJGVtaXQoInBpY2siLGkpfX19fX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLiRjcmVhdGVFbGVtZW50LGk9ZS5fc2VsZi5fY3x8dDtyZXR1cm4gaSgidGFibGUiLHtzdGF0aWNDbGFzczoiZWwteWVhci10YWJsZSIsb246e2NsaWNrOmUuaGFuZGxlWWVhclRhYmxlQ2xpY2t9fSxbaSgidGJvZHkiLFtpKCJ0ciIsW2koInRkIix7c3RhdGljQ2xhc3M6ImF2YWlsYWJsZSIsY2xhc3M6ZS5nZXRDZWxsU3R5bGUoZS5zdGFydFllYXIrMCl9LFtpKCJhIix7c3RhdGljQ2xhc3M6ImNlbGwifSxbZS5fdihlLl9zKGUuc3RhcnRZZWFyKSldKV0pLGkoInRkIix7c3RhdGljQ2xhc3M6ImF2YWlsYWJsZSIsY2xhc3M6ZS5nZXRDZWxsU3R5bGUoZS5zdGFydFllYXIrMSl9LFtpKCJhIix7c3RhdGljQ2xhc3M6ImNlbGwifSxbZS5fdihlLl9zKGUuc3RhcnRZZWFyKzEpKV0pXSksaSgidGQiLHtzdGF0aWNDbGFzczoiYXZhaWxhYmxlIixjbGFzczplLmdldENlbGxTdHlsZShlLnN0YXJ0WWVhcisyKX0sW2koImEiLHtzdGF0aWNDbGFzczoiY2VsbCJ9LFtlLl92KGUuX3MoZS5zdGFydFllYXIrMikpXSldKSxpKCJ0ZCIse3N0YXRpY0NsYXNzOiJhdmFpbGFibGUiLGNsYXNzOmUuZ2V0Q2VsbFN0eWxlKGUuc3RhcnRZZWFyKzMpfSxbaSgiYSIse3N0YXRpY0NsYXNzOiJjZWxsIn0sW2UuX3YoZS5fcyhlLnN0YXJ0WWVhciszKSldKV0pXSksaSgidHIiLFtpKCJ0ZCIse3N0YXRpY0NsYXNzOiJhdmFpbGFibGUiLGNsYXNzOmUuZ2V0Q2VsbFN0eWxlKGUuc3RhcnRZZWFyKzQpfSxbaSgiYSIse3N0YXRpY0NsYXNzOiJjZWxsIn0sW2UuX3YoZS5fcyhlLnN0YXJ0WWVhcis0KSldKV0pLGkoInRkIix7c3RhdGljQ2xhc3M6ImF2YWlsYWJsZSIsY2xhc3M6ZS5nZXRDZWxsU3R5bGUoZS5zdGFydFllYXIrNSl9LFtpKCJhIix7c3RhdGljQ2xhc3M6ImNlbGwifSxbZS5fdihlLl9zKGUuc3RhcnRZZWFyKzUpKV0pXSksaSgidGQiLHtzdGF0aWNDbGFzczoiYXZhaWxhYmxlIixjbGFzczplLmdldENlbGxTdHlsZShlLnN0YXJ0WWVhcis2KX0sW2koImEiLHtzdGF0aWNDbGFzczoiY2VsbCJ9LFtlLl92KGUuX3MoZS5zdGFydFllYXIrNikpXSldKSxpKCJ0ZCIse3N0YXRpY0NsYXNzOiJhdmFpbGFibGUiLGNsYXNzOmUuZ2V0Q2VsbFN0eWxlKGUuc3RhcnRZZWFyKzcpfSxbaSgiYSIse3N0YXRpY0NsYXNzOiJjZWxsIn0sW2UuX3YoZS5fcyhlLnN0YXJ0WWVhcis3KSldKV0pXSksaSgidHIiLFtpKCJ0ZCIse3N0YXRpY0NsYXNzOiJhdmFpbGFibGUiLGNsYXNzOmUuZ2V0Q2VsbFN0eWxlKGUuc3RhcnRZZWFyKzgpfSxbaSgiYSIse3N0YXRpY0NsYXNzOiJjZWxsIn0sW2UuX3YoZS5fcyhlLnN0YXJ0WWVhcis4KSldKV0pLGkoInRkIix7c3RhdGljQ2xhc3M6ImF2YWlsYWJsZSIsY2xhc3M6ZS5nZXRDZWxsU3R5bGUoZS5zdGFydFllYXIrOSl9LFtpKCJhIix7c3RhdGljQ2xhc3M6ImNlbGwifSxbZS5fdihlLl9zKGUuc3RhcnRZZWFyKzkpKV0pXSksaSgidGQiKSxpKCJ0ZCIpXSldKV0pfSxzdGF0aWNSZW5kZXJGbnM6W119fSxmdW5jdGlvbihlLHQsaSl7dmFyIG49aSg1KShpKDE2OCksaSgxNjkpLG51bGwsbnVsbCk7ZS5leHBvcnRzPW4uZXhwb3J0c30sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX10Ll9fZXNNb2R1bGU9ITA7dmFyIHM9aSgxMiksbz1uKHMpLGE9aSgzMCk7dC5kZWZhdWx0PXtwcm9wczp7ZGlzYWJsZWREYXRlOnt9LGRhdGU6e30sbW9udGg6e3R5cGU6TnVtYmVyfX0sbWl4aW5zOltvLmRlZmF1bHRdLG1ldGhvZHM6e2dldENlbGxTdHlsZTpmdW5jdGlvbihlKXt2YXIgdD17fSxpPW5ldyBEYXRlKHRoaXMuZGF0ZSk7cmV0dXJuIGkuc2V0TW9udGgoZSksdC5kaXNhYmxlZD0iZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5kaXNhYmxlZERhdGUmJnRoaXMuZGlzYWJsZWREYXRlKGkpLHQuY3VycmVudD10aGlzLm1vbnRoPT09ZSx0fSxoYW5kbGVNb250aFRhYmxlQ2xpY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50YXJnZXQ7aWYoIkEiPT09dC50YWdOYW1lJiYhKDAsYS5oYXNDbGFzcykodC5wYXJlbnROb2RlLCJkaXNhYmxlZCIpKXt2YXIgaT10LnBhcmVudE5vZGUuY2VsbEluZGV4LG49dC5wYXJlbnROb2RlLnBhcmVudE5vZGUucm93SW5kZXgscz00Km4raTt0aGlzLiRlbWl0KCJwaWNrIixzKX19fX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxpPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIGkoInRhYmxlIix7c3RhdGljQ2xhc3M6ImVsLW1vbnRoLXRhYmxlIixvbjp7Y2xpY2s6ZS5oYW5kbGVNb250aFRhYmxlQ2xpY2t9fSxbaSgidGJvZHkiLFtpKCJ0ciIsW2koInRkIix7Y2xhc3M6ZS5nZXRDZWxsU3R5bGUoMCl9LFtpKCJhIix7c3RhdGljQ2xhc3M6ImNlbGwifSxbZS5fdihlLl9zKGUudCgiZWwuZGF0ZXBpY2tlci5tb250aHMuamFuIikpKV0pXSksaSgidGQiLHtjbGFzczplLmdldENlbGxTdHlsZSgxKX0sW2koImEiLHtzdGF0aWNDbGFzczoiY2VsbCJ9LFtlLl92KGUuX3MoZS50KCJlbC5kYXRlcGlja2VyLm1vbnRocy5mZWIiKSkpXSldKSxpKCJ0ZCIse2NsYXNzOmUuZ2V0Q2VsbFN0eWxlKDIpfSxbaSgiYSIse3N0YXRpY0NsYXNzOiJjZWxsIn0sW2UuX3YoZS5fcyhlLnQoImVsLmRhdGVwaWNrZXIubW9udGhzLm1hciIpKSldKV0pLGkoInRkIix7Y2xhc3M6ZS5nZXRDZWxsU3R5bGUoMyl9LFtpKCJhIix7c3RhdGljQ2xhc3M6ImNlbGwifSxbZS5fdihlLl9zKGUudCgiZWwuZGF0ZXBpY2tlci5tb250aHMuYXByIikpKV0pXSldKSxpKCJ0ciIsW2koInRkIix7Y2xhc3M6ZS5nZXRDZWxsU3R5bGUoNCl9LFtpKCJhIix7c3RhdGljQ2xhc3M6ImNlbGwifSxbZS5fdihlLl9zKGUudCgiZWwuZGF0ZXBpY2tlci5tb250aHMubWF5IikpKV0pXSksaSgidGQiLHtjbGFzczplLmdldENlbGxTdHlsZSg1KX0sW2koImEiLHtzdGF0aWNDbGFzczoiY2VsbCJ9LFtlLl92KGUuX3MoZS50KCJlbC5kYXRlcGlja2VyLm1vbnRocy5qdW4iKSkpXSldKSxpKCJ0ZCIse2NsYXNzOmUuZ2V0Q2VsbFN0eWxlKDYpfSxbaSgiYSIse3N0YXRpY0NsYXNzOiJjZWxsIn0sW2UuX3YoZS5fcyhlLnQoImVsLmRhdGVwaWNrZXIubW9udGhzLmp1bCIpKSldKV0pLGkoInRkIix7Y2xhc3M6ZS5nZXRDZWxsU3R5bGUoNyl9LFtpKCJhIix7c3RhdGljQ2xhc3M6ImNlbGwifSxbZS5fdihlLl9zKGUudCgiZWwuZGF0ZXBpY2tlci5tb250aHMuYXVnIikpKV0pXSldKSxpKCJ0ciIsW2koInRkIix7Y2xhc3M6ZS5nZXRDZWxsU3R5bGUoOCl9LFtpKCJhIix7c3RhdGljQ2xhc3M6ImNlbGwifSxbZS5fdihlLl9zKGUudCgiZWwuZGF0ZXBpY2tlci5tb250aHMuc2VwIikpKV0pXSksaSgidGQiLHtjbGFzczplLmdldENlbGxTdHlsZSg5KX0sW2koImEiLHtzdGF0aWNDbGFzczoiY2VsbCJ9LFtlLl92KGUuX3MoZS50KCJlbC5kYXRlcGlja2VyLm1vbnRocy5vY3QiKSkpXSldKSxpKCJ0ZCIse2NsYXNzOmUuZ2V0Q2VsbFN0eWxlKDEwKX0sW2koImEiLHtzdGF0aWNDbGFzczoiY2VsbCJ9LFtlLl92KGUuX3MoZS50KCJlbC5kYXRlcGlja2VyLm1vbnRocy5ub3YiKSkpXSldKSxpKCJ0ZCIse2NsYXNzOmUuZ2V0Q2VsbFN0eWxlKDExKX0sW2koImEiLHtzdGF0aWNDbGFzczoiY2VsbCJ9LFtlLl92KGUuX3MoZS50KCJlbC5kYXRlcGlja2VyLm1vbnRocy5kZWMiKSkpXSldKV0pXSldKX0sc3RhdGljUmVuZGVyRm5zOltdfX0sZnVuY3Rpb24oZSx0LGkpe3ZhciBuPWkoNSkoaSgxNzEpLGkoMTcyKSxudWxsLG51bGwpO2UuZXhwb3J0cz1uLmV4cG9ydHN9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5fX2VzTW9kdWxlPSEwO3ZhciBzPWkoMTUzKSxvPWkoMzApLGE9aSgxMikscj1uKGEpLGw9WyJzdW4iLCJtb24iLCJ0dWUiLCJ3ZWQiLCJ0aHUiLCJmcmkiLCJzYXQiXSx1PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBEYXRlKGUpO3JldHVybiB0LnNldEhvdXJzKDAsMCwwLDApLHQuZ2V0VGltZSgpfTt0LmRlZmF1bHQ9e21peGluczpbci5kZWZhdWx0XSxwcm9wczp7Zmlyc3REYXlPZldlZWs6e2RlZmF1bHQ6Nyx0eXBlOk51bWJlcix2YWxpZGF0b3I6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTEmJmU8PTd9fSxkYXRlOnt9LHllYXI6e30sbW9udGg6e30sd2Vlazp7fSxzZWxlY3Rpb25Nb2RlOntkZWZhdWx0OiJkYXkifSxzaG93V2Vla051bWJlcjp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LGRpc2FibGVkRGF0ZTp7fSxtaW5EYXRlOnt9LG1heERhdGU6e30scmFuZ2VTdGF0ZTp7ZGVmYXVsdDpmdW5jdGlvbigpe3JldHVybntlbmREYXRlOm51bGwsc2VsZWN0aW5nOiExLHJvdzpudWxsLGNvbHVtbjpudWxsfX19fSxjb21wdXRlZDp7b2Zmc2V0RGF5OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5maXJzdERheU9mV2VlaztyZXR1cm4gZT4zPzctZTotZX0sV0VFS1M6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmZpcnN0RGF5T2ZXZWVrO3JldHVybiBsLmNvbmNhdChsKS5zbGljZShlLGUrNyl9LG1vbnRoRGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGUuZ2V0RGF0ZSgpfSxzdGFydERhdGU6ZnVuY3Rpb24oKXtyZXR1cm4oMCxzLmdldFN0YXJ0RGF0ZU9mTW9udGgpKHRoaXMueWVhcix0aGlzLm1vbnRoKX0scm93czpmdW5jdGlvbiBlKCl7dmFyIHQ9bmV3IERhdGUodGhpcy55ZWFyLHRoaXMubW9udGgsMSksaT0oMCxzLmdldEZpcnN0RGF5T2ZNb250aCkodCksbj0oMCxzLmdldERheUNvdW50T2ZNb250aCkodC5nZXRGdWxsWWVhcigpLHQuZ2V0TW9udGgoKSksbz0oMCxzLmdldERheUNvdW50T2ZNb250aCkodC5nZXRGdWxsWWVhcigpLDA9PT10LmdldE1vbnRoKCk/MTE6dC5nZXRNb250aCgpLTEpO2k9MD09PWk/NzppO2Zvcih2YXIgYT10aGlzLm9mZnNldERheSxlPXRoaXMudGFibGVSb3dzLHI9MSxsPXZvaWQgMCxjPXRoaXMuc3RhcnREYXRlLGQ9dGhpcy5kaXNhYmxlZERhdGUsaD11KG5ldyBEYXRlKSxmPTA7Zjw2O2YrKyl7dmFyIHA9ZVtmXTt0aGlzLnNob3dXZWVrTnVtYmVyJiYocFswXXx8KHBbMF09e3R5cGU6IndlZWsiLHRleHQ6KDAscy5nZXRXZWVrTnVtYmVyKShuZXcgRGF0ZShjLmdldFRpbWUoKStzLkRBWV9EVVJBVElPTiooNypmKzEpKSl9KSk7Zm9yKHZhciBtPTA7bTw3O20rKyl7CnZhciB2PXBbdGhpcy5zaG93V2Vla051bWJlcj9tKzE6bV07dnx8KHY9e3JvdzpmLGNvbHVtbjptLHR5cGU6Im5vcm1hbCIsaW5SYW5nZTohMSxzdGFydDohMSxlbmQ6ITF9KSx2LnR5cGU9Im5vcm1hbCI7dmFyIGc9NypmK20seT1jLmdldFRpbWUoKStzLkRBWV9EVVJBVElPTiooZy1hKTt2LmluUmFuZ2U9eT49dSh0aGlzLm1pbkRhdGUpJiZ5PD11KHRoaXMubWF4RGF0ZSksdi5zdGFydD10aGlzLm1pbkRhdGUmJnk9PT11KHRoaXMubWluRGF0ZSksdi5lbmQ9dGhpcy5tYXhEYXRlJiZ5PT09dSh0aGlzLm1heERhdGUpO3ZhciBiPXk9PT1oO2ImJih2LnR5cGU9InRvZGF5IiksZj49MCYmZjw9MT9tKzcqZj49aSthPyh2LnRleHQ9cisrLDI9PT1yJiYobD03KmYrbSkpOih2LnRleHQ9by0oaSthLW0lNykrMSs3KmYsdi50eXBlPSJwcmV2LW1vbnRoIik6cjw9bj8odi50ZXh0PXIrKywyPT09ciYmKGw9NypmK20pKToodi50ZXh0PXIrKy1uLHYudHlwZT0ibmV4dC1tb250aCIpLHYuZGlzYWJsZWQ9ImZ1bmN0aW9uIj09dHlwZW9mIGQmJmQobmV3IERhdGUoeSkpLHRoaXMuJHNldChwLHRoaXMuc2hvd1dlZWtOdW1iZXI/bSsxOm0sdil9aWYoIndlZWsiPT09dGhpcy5zZWxlY3Rpb25Nb2RlKXt2YXIgXz10aGlzLnNob3dXZWVrTnVtYmVyPzE6MCxDPXRoaXMuc2hvd1dlZWtOdW1iZXI/Nzo2LHg9dGhpcy5pc1dlZWtBY3RpdmUocFtfKzFdKTtwW19dLmluUmFuZ2U9eCxwW19dLnN0YXJ0PXgscFtDXS5pblJhbmdlPXgscFtDXS5lbmQ9eH19cmV0dXJuIGUuZmlyc3REYXlQb3NpdGlvbj1sLGV9fSx3YXRjaDp7InJhbmdlU3RhdGUuZW5kRGF0ZSI6ZnVuY3Rpb24oZSl7dGhpcy5tYXJrUmFuZ2UoZSl9LG1pbkRhdGU6ZnVuY3Rpb24oZSx0KXtlJiYhdD8odGhpcy5yYW5nZVN0YXRlLnNlbGVjdGluZz0hMCx0aGlzLm1hcmtSYW5nZShlKSk6ZT90aGlzLm1hcmtSYW5nZSgpOih0aGlzLnJhbmdlU3RhdGUuc2VsZWN0aW5nPSExLHRoaXMubWFya1JhbmdlKGUpKX0sbWF4RGF0ZTpmdW5jdGlvbihlLHQpe2UmJiF0JiYodGhpcy5yYW5nZVN0YXRlLnNlbGVjdGluZz0hMSx0aGlzLm1hcmtSYW5nZShlKSx0aGlzLiRlbWl0KCJwaWNrIix7bWluRGF0ZTp0aGlzLm1pbkRhdGUsbWF4RGF0ZTp0aGlzLm1heERhdGV9KSl9fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3RhYmxlUm93czpbW10sW10sW10sW10sW10sW11dfX0sbWV0aG9kczp7Z2V0Q2VsbENsYXNzZXM6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5zZWxlY3Rpb25Nb2RlLGk9dGhpcy5tb250aERhdGUsbj1bXTtyZXR1cm4ibm9ybWFsIiE9PWUudHlwZSYmInRvZGF5IiE9PWUudHlwZXx8ZS5kaXNhYmxlZD9uLnB1c2goZS50eXBlKToobi5wdXNoKCJhdmFpbGFibGUiKSwidG9kYXkiPT09ZS50eXBlJiZuLnB1c2goInRvZGF5IikpLCJkYXkiIT09dHx8Im5vcm1hbCIhPT1lLnR5cGUmJiJ0b2RheSIhPT1lLnR5cGV8fE51bWJlcih0aGlzLnllYXIpIT09dGhpcy5kYXRlLmdldEZ1bGxZZWFyKCl8fHRoaXMubW9udGghPT10aGlzLmRhdGUuZ2V0TW9udGgoKXx8aSE9PU51bWJlcihlLnRleHQpfHxuLnB1c2goImN1cnJlbnQiKSwhZS5pblJhbmdlfHwibm9ybWFsIiE9PWUudHlwZSYmInRvZGF5IiE9PWUudHlwZSYmIndlZWsiIT09dGhpcy5zZWxlY3Rpb25Nb2RlfHwobi5wdXNoKCJpbi1yYW5nZSIpLGUuc3RhcnQmJm4ucHVzaCgic3RhcnQtZGF0ZSIpLGUuZW5kJiZuLnB1c2goImVuZC1kYXRlIikpLGUuZGlzYWJsZWQmJm4ucHVzaCgiZGlzYWJsZWQiKSxuLmpvaW4oIiAiKX0sZ2V0RGF0ZU9mQ2VsbDpmdW5jdGlvbihlLHQpe3ZhciBpPXRoaXMuc3RhcnREYXRlO3JldHVybiBuZXcgRGF0ZShpLmdldFRpbWUoKSsoNyplKyh0LSh0aGlzLnNob3dXZWVrTnVtYmVyPzE6MCkpLXRoaXMub2Zmc2V0RGF5KSpzLkRBWV9EVVJBVElPTil9LGdldENlbGxCeURhdGU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5zdGFydERhdGUsaT10aGlzLnJvd3Msbj0oZS10KS9zLkRBWV9EVVJBVElPTixvPWlbTWF0aC5mbG9vcihuLzcpXTtyZXR1cm4gdGhpcy5zaG93V2Vla051bWJlcj9vW24lNysxXTpvW24lN119LGlzV2Vla0FjdGl2ZTpmdW5jdGlvbihlKXtpZigid2VlayIhPT10aGlzLnNlbGVjdGlvbk1vZGUpcmV0dXJuITE7dmFyIHQ9bmV3IERhdGUodGhpcy55ZWFyLHRoaXMubW9udGgsMSksaT10LmdldEZ1bGxZZWFyKCksbj10LmdldE1vbnRoKCk7cmV0dXJuInByZXYtbW9udGgiPT09ZS50eXBlJiYodC5zZXRNb250aCgwPT09bj8xMTpuLTEpLHQuc2V0RnVsbFllYXIoMD09PW4/aS0xOmkpKSwibmV4dC1tb250aCI9PT1lLnR5cGUmJih0LnNldE1vbnRoKDExPT09bj8wOm4rMSksdC5zZXRGdWxsWWVhcigxMT09PW4/aSsxOmkpKSx0LnNldERhdGUocGFyc2VJbnQoZS50ZXh0LDEwKSksKDAscy5nZXRXZWVrTnVtYmVyKSh0KT09PXRoaXMud2Vla30sbWFya1JhbmdlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuc3RhcnREYXRlO2V8fChlPXRoaXMubWF4RGF0ZSk7Zm9yKHZhciBpPXRoaXMucm93cyxuPXRoaXMubWluRGF0ZSxvPTAsYT1pLmxlbmd0aDtvPGE7bysrKWZvcih2YXIgcj1pW29dLGw9MCxjPXIubGVuZ3RoO2w8YztsKyspaWYoIXRoaXMuc2hvd1dlZWtOdW1iZXJ8fDAhPT1sKXt2YXIgZD1yW2xdLGg9NypvK2wrKHRoaXMuc2hvd1dlZWtOdW1iZXI/LTE6MCksZj10LmdldFRpbWUoKStzLkRBWV9EVVJBVElPTiooaC10aGlzLm9mZnNldERheSk7ZC5pblJhbmdlPW4mJmY+PXUobikmJmY8PXUoZSksZC5zdGFydD1uJiZmPT09dShuLmdldFRpbWUoKSksZC5lbmQ9ZSYmZj09PXUoZS5nZXRUaW1lKCkpfX0saGFuZGxlTW91c2VNb3ZlOmZ1bmN0aW9uKGUpe2lmKHRoaXMucmFuZ2VTdGF0ZS5zZWxlY3Rpbmcpe3RoaXMuJGVtaXQoImNoYW5nZXJhbmdlIix7bWluRGF0ZTp0aGlzLm1pbkRhdGUsbWF4RGF0ZTp0aGlzLm1heERhdGUscmFuZ2VTdGF0ZTp0aGlzLnJhbmdlU3RhdGV9KTt2YXIgdD1lLnRhcmdldDtpZigiVEQiPT09dC50YWdOYW1lKXt2YXIgaT10LmNlbGxJbmRleCxuPXQucGFyZW50Tm9kZS5yb3dJbmRleC0xLHM9dGhpcy5yYW5nZVN0YXRlLG89cy5yb3csYT1zLmNvbHVtbjtvPT09biYmYT09PWl8fCh0aGlzLnJhbmdlU3RhdGUucm93PW4sdGhpcy5yYW5nZVN0YXRlLmNvbHVtbj1pLHRoaXMucmFuZ2VTdGF0ZS5lbmREYXRlPXRoaXMuZ2V0RGF0ZU9mQ2VsbChuLGkpKX19fSxoYW5kbGVDbGljazpmdW5jdGlvbihlKXt2YXIgdD1lLnRhcmdldDtpZigiVEQiPT09dC50YWdOYW1lJiYhKDAsby5oYXNDbGFzcykodCwiZGlzYWJsZWQiKSYmISgwLG8uaGFzQ2xhc3MpKHQsIndlZWsiKSl7dmFyIGk9dGhpcy5zZWxlY3Rpb25Nb2RlOyJ3ZWVrIj09PWkmJih0PXQucGFyZW50Tm9kZS5jZWxsc1sxXSk7dmFyIG49TnVtYmVyKHRoaXMueWVhciksYT1OdW1iZXIodGhpcy5tb250aCkscj10LmNlbGxJbmRleCxsPXQucGFyZW50Tm9kZS5yb3dJbmRleCx1PXRoaXMucm93c1tsLTFdW3JdLGM9dS50ZXh0LGQ9dC5jbGFzc05hbWUsaD1uZXcgRGF0ZShuLGEsMSk7aWYoZC5pbmRleE9mKCJwcmV2IikhPT0tMT8oMD09PWE/KG4tPTEsYT0xMSk6YS09MSxoLnNldEZ1bGxZZWFyKG4pLGguc2V0TW9udGgoYSkpOmQuaW5kZXhPZigibmV4dCIpIT09LTEmJigxMT09PWE/KG4rPTEsYT0wKTphKz0xLGguc2V0RnVsbFllYXIobiksaC5zZXRNb250aChhKSksaC5zZXREYXRlKHBhcnNlSW50KGMsMTApKSwicmFuZ2UiPT09dGhpcy5zZWxlY3Rpb25Nb2RlKXtpZih0aGlzLm1pbkRhdGUmJnRoaXMubWF4RGF0ZSl7dmFyIGY9bmV3IERhdGUoaC5nZXRUaW1lKCkpLHA9bnVsbDt0aGlzLiRlbWl0KCJwaWNrIix7bWluRGF0ZTpmLG1heERhdGU6cH0sITEpLHRoaXMucmFuZ2VTdGF0ZS5zZWxlY3Rpbmc9ITAsdGhpcy5tYXJrUmFuZ2UodGhpcy5taW5EYXRlKX1lbHNlIGlmKHRoaXMubWluRGF0ZSYmIXRoaXMubWF4RGF0ZSlpZihoPj10aGlzLm1pbkRhdGUpe3ZhciBtPW5ldyBEYXRlKGguZ2V0VGltZSgpKTt0aGlzLnJhbmdlU3RhdGUuc2VsZWN0aW5nPSExLHRoaXMuJGVtaXQoInBpY2siLHttaW5EYXRlOnRoaXMubWluRGF0ZSxtYXhEYXRlOm19KX1lbHNle3ZhciB2PW5ldyBEYXRlKGguZ2V0VGltZSgpKTt0aGlzLiRlbWl0KCJwaWNrIix7bWluRGF0ZTp2LG1heERhdGU6dGhpcy5tYXhEYXRlfSwhMSl9ZWxzZSBpZighdGhpcy5taW5EYXRlKXt2YXIgZz1uZXcgRGF0ZShoLmdldFRpbWUoKSk7dGhpcy4kZW1pdCgicGljayIse21pbkRhdGU6ZyxtYXhEYXRlOnRoaXMubWF4RGF0ZX0sITEpLHRoaXMucmFuZ2VTdGF0ZS5zZWxlY3Rpbmc9ITAsdGhpcy5tYXJrUmFuZ2UodGhpcy5taW5EYXRlKX19ZWxzZSBpZigiZGF5Ij09PWkpdGhpcy4kZW1pdCgicGljayIsaCk7ZWxzZSBpZigid2VlayI9PT1pKXt2YXIgeT0oMCxzLmdldFdlZWtOdW1iZXIpKGgpLGI9aC5nZXRGdWxsWWVhcigpKyJ3Iit5O3RoaXMuJGVtaXQoInBpY2siLHt5ZWFyOmguZ2V0RnVsbFllYXIoKSx3ZWVrOnksdmFsdWU6YixkYXRlOmh9KX19fX19fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuJGNyZWF0ZUVsZW1lbnQsaT1lLl9zZWxmLl9jfHx0O3JldHVybiBpKCJ0YWJsZSIse3N0YXRpY0NsYXNzOiJlbC1kYXRlLXRhYmxlIixjbGFzczp7ImlzLXdlZWstbW9kZSI6IndlZWsiPT09ZS5zZWxlY3Rpb25Nb2RlfSxhdHRyczp7Y2VsbHNwYWNpbmc6IjAiLGNlbGxwYWRkaW5nOiIwIn0sb246e2NsaWNrOmUuaGFuZGxlQ2xpY2ssbW91c2Vtb3ZlOmUuaGFuZGxlTW91c2VNb3ZlfX0sW2koInRib2R5IixbaSgidHIiLFtlLnNob3dXZWVrTnVtYmVyP2koInRoIixbZS5fdihlLl9zKGUudCgiZWwuZGF0ZXBpY2tlci53ZWVrIikpKV0pOmUuX2UoKSxlLl9sKGUuV0VFS1MsZnVuY3Rpb24odCl7cmV0dXJuIGkoInRoIixbZS5fdihlLl9zKGUudCgiZWwuZGF0ZXBpY2tlci53ZWVrcy4iK3QpKSldKX0pXSwyKSxlLl9sKGUucm93cyxmdW5jdGlvbih0KXtyZXR1cm4gaSgidHIiLHtzdGF0aWNDbGFzczoiZWwtZGF0ZS10YWJsZV9fcm93IixjbGFzczp7Y3VycmVudDplLmlzV2Vla0FjdGl2ZSh0WzFdKX19LGUuX2wodCxmdW5jdGlvbih0KXtyZXR1cm4gaSgidGQiLHtjbGFzczplLmdldENlbGxDbGFzc2VzKHQpLGRvbVByb3BzOnt0ZXh0Q29udGVudDplLl9zKCJ0b2RheSI9PT10LnR5cGU/ZS50KCJlbC5kYXRlcGlja2VyLnRvZGF5Iik6dC50ZXh0KX19KX0pKX0pXSwyKV0pfSxzdGF0aWNSZW5kZXJGbnM6W119fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuJGNyZWF0ZUVsZW1lbnQsaT1lLl9zZWxmLl9jfHx0O3JldHVybiBpKCJ0cmFuc2l0aW9uIix7YXR0cnM6e25hbWU6ImVsLXpvb20taW4tdG9wIn0sb246eyJhZnRlci1sZWF2ZSI6ZnVuY3Rpb24odCl7ZS4kZW1pdCgiZG9kZXN0cm95Iil9fX0sW2koImRpdiIse2RpcmVjdGl2ZXM6W3tuYW1lOiJzaG93IixyYXdOYW1lOiJ2LXNob3ciLHZhbHVlOmUudmlzaWJsZSxleHByZXNzaW9uOiJ2aXNpYmxlIn1dLHN0YXRpY0NsYXNzOiJlbC1waWNrZXItcGFuZWwgZWwtZGF0ZS1waWNrZXIiLGNsYXNzOlt7Imhhcy1zaWRlYmFyIjplLiRzbG90cy5zaWRlYmFyfHxlLnNob3J0Y3V0cywiaGFzLXRpbWUiOmUuc2hvd1RpbWV9LGUucG9wcGVyQ2xhc3NdLHN0eWxlOnt3aWR0aDplLndpZHRoKyJweCJ9fSxbaSgiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXBpY2tlci1wYW5lbF9fYm9keS13cmFwcGVyIn0sW2UuX3QoInNpZGViYXIiKSxlLnNob3J0Y3V0cz9pKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtcGlja2VyLXBhbmVsX19zaWRlYmFyIn0sZS5fbChlLnNob3J0Y3V0cyxmdW5jdGlvbih0KXtyZXR1cm4gaSgiYnV0dG9uIix7c3RhdGljQ2xhc3M6ImVsLXBpY2tlci1wYW5lbF9fc2hvcnRjdXQiLGF0dHJzOnt0eXBlOiJidXR0b24ifSxvbjp7Y2xpY2s6ZnVuY3Rpb24oaSl7ZS5oYW5kbGVTaG9ydGN1dENsaWNrKHQpfX19LFtlLl92KGUuX3ModC50ZXh0KSldKX0pKTplLl9lKCksaSgiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXBpY2tlci1wYW5lbF9fYm9keSJ9LFtlLnNob3dUaW1lP2koImRpdiIse3N0YXRpY0NsYXNzOiJlbC1kYXRlLXBpY2tlcl9fdGltZS1oZWFkZXIifSxbaSgic3BhbiIse3N0YXRpY0NsYXNzOiJlbC1kYXRlLXBpY2tlcl9fZWRpdG9yLXdyYXAifSxbaSgiZWwtaW5wdXQiLHthdHRyczp7cGxhY2Vob2xkZXI6ZS50KCJlbC5kYXRlcGlja2VyLnNlbGVjdERhdGUiKSx2YWx1ZTplLnZpc2libGVEYXRlLHNpemU6InNtYWxsIn0sbmF0aXZlT246e2NoYW5nZTpmdW5jdGlvbih0KXtlLnZpc2libGVEYXRlPXQudGFyZ2V0LnZhbHVlfX19KV0sMSksaSgic3BhbiIse3N0YXRpY0NsYXNzOiJlbC1kYXRlLXBpY2tlcl9fZWRpdG9yLXdyYXAifSxbaSgiZWwtaW5wdXQiLHtyZWY6ImlucHV0IixhdHRyczp7cGxhY2Vob2xkZXI6ZS50KCJlbC5kYXRlcGlja2VyLnNlbGVjdFRpbWUiKSx2YWx1ZTplLnZpc2libGVUaW1lLHNpemU6InNtYWxsIn0sb246e2ZvY3VzOmZ1bmN0aW9uKHQpe2UudGltZVBpY2tlclZpc2libGU9IWUudGltZVBpY2tlclZpc2libGV9fSxuYXRpdmVPbjp7Y2hhbmdlOmZ1bmN0aW9uKHQpe2UudmlzaWJsZVRpbWU9dC50YXJnZXQudmFsdWV9fX0pLGkoInRpbWUtcGlja2VyIix7cmVmOiJ0aW1lcGlja2VyIixhdHRyczp7ZGF0ZTplLmRhdGUsInBpY2tlci13aWR0aCI6ZS5waWNrZXJXaWR0aCx2aXNpYmxlOmUudGltZVBpY2tlclZpc2libGV9LG9uOntwaWNrOmUuaGFuZGxlVGltZVBpY2t9fSldLDEpXSk6ZS5fZSgpLGkoImRpdiIse2RpcmVjdGl2ZXM6W3tuYW1lOiJzaG93IixyYXdOYW1lOiJ2LXNob3ciLHZhbHVlOiJ0aW1lIiE9PWUuY3VycmVudFZpZXcsZXhwcmVzc2lvbjoiY3VycmVudFZpZXcgIT09ICd0aW1lJyJ9XSxzdGF0aWNDbGFzczoiZWwtZGF0ZS1waWNrZXJfX2hlYWRlciJ9LFtpKCJidXR0b24iLHtzdGF0aWNDbGFzczoiZWwtcGlja2VyLXBhbmVsX19pY29uLWJ0biBlbC1kYXRlLXBpY2tlcl9fcHJldi1idG4gZWwtaWNvbi1kLWFycm93LWxlZnQiLGF0dHJzOnt0eXBlOiJidXR0b24ifSxvbjp7Y2xpY2s6ZS5wcmV2WWVhcn19KSxpKCJidXR0b24iLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZToiZGF0ZSI9PT1lLmN1cnJlbnRWaWV3LGV4cHJlc3Npb246ImN1cnJlbnRWaWV3ID09PSAnZGF0ZScifV0sc3RhdGljQ2xhc3M6ImVsLXBpY2tlci1wYW5lbF9faWNvbi1idG4gZWwtZGF0ZS1waWNrZXJfX3ByZXYtYnRuIGVsLWljb24tYXJyb3ctbGVmdCIsYXR0cnM6e3R5cGU6ImJ1dHRvbiJ9LG9uOntjbGljazplLnByZXZNb250aH19KSxpKCJzcGFuIix7c3RhdGljQ2xhc3M6ImVsLWRhdGUtcGlja2VyX19oZWFkZXItbGFiZWwiLG9uOntjbGljazplLnNob3dZZWFyUGlja2VyfX0sW2UuX3YoZS5fcyhlLnllYXJMYWJlbCkpXSksaSgic3BhbiIse2RpcmVjdGl2ZXM6W3tuYW1lOiJzaG93IixyYXdOYW1lOiJ2LXNob3ciLHZhbHVlOiJkYXRlIj09PWUuY3VycmVudFZpZXcsZXhwcmVzc2lvbjoiY3VycmVudFZpZXcgPT09ICdkYXRlJyJ9XSxzdGF0aWNDbGFzczoiZWwtZGF0ZS1waWNrZXJfX2hlYWRlci1sYWJlbCIsY2xhc3M6e2FjdGl2ZToibW9udGgiPT09ZS5jdXJyZW50Vmlld30sb246e2NsaWNrOmUuc2hvd01vbnRoUGlja2VyfX0sW2UuX3YoZS5fcyhlLnQoImVsLmRhdGVwaWNrZXIubW9udGgiKyhlLm1vbnRoKzEpKSkpXSksaSgiYnV0dG9uIix7c3RhdGljQ2xhc3M6ImVsLXBpY2tlci1wYW5lbF9faWNvbi1idG4gZWwtZGF0ZS1waWNrZXJfX25leHQtYnRuIGVsLWljb24tZC1hcnJvdy1yaWdodCIsYXR0cnM6e3R5cGU6ImJ1dHRvbiJ9LG9uOntjbGljazplLm5leHRZZWFyfX0pLGkoImJ1dHRvbiIse2RpcmVjdGl2ZXM6W3tuYW1lOiJzaG93IixyYXdOYW1lOiJ2LXNob3ciLHZhbHVlOiJkYXRlIj09PWUuY3VycmVudFZpZXcsZXhwcmVzc2lvbjoiY3VycmVudFZpZXcgPT09ICdkYXRlJyJ9XSxzdGF0aWNDbGFzczoiZWwtcGlja2VyLXBhbmVsX19pY29uLWJ0biBlbC1kYXRlLXBpY2tlcl9fbmV4dC1idG4gZWwtaWNvbi1hcnJvdy1yaWdodCIsYXR0cnM6e3R5cGU6ImJ1dHRvbiJ9LG9uOntjbGljazplLm5leHRNb250aH19KV0pLGkoImRpdiIse3N0YXRpY0NsYXNzOiJlbC1waWNrZXItcGFuZWxfX2NvbnRlbnQifSxbaSgiZGF0ZS10YWJsZSIse2RpcmVjdGl2ZXM6W3tuYW1lOiJzaG93IixyYXdOYW1lOiJ2LXNob3ciLHZhbHVlOiJkYXRlIj09PWUuY3VycmVudFZpZXcsZXhwcmVzc2lvbjoiY3VycmVudFZpZXcgPT09ICdkYXRlJyJ9XSxhdHRyczp7eWVhcjplLnllYXIsbW9udGg6ZS5tb250aCxkYXRlOmUuZGF0ZSx3ZWVrOmUud2Vlaywic2VsZWN0aW9uLW1vZGUiOmUuc2VsZWN0aW9uTW9kZSwiZmlyc3QtZGF5LW9mLXdlZWsiOmUuZmlyc3REYXlPZldlZWssImRpc2FibGVkLWRhdGUiOmUuZGlzYWJsZWREYXRlfSxvbjp7cGljazplLmhhbmRsZURhdGVQaWNrfX0pLGkoInllYXItdGFibGUiLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZToieWVhciI9PT1lLmN1cnJlbnRWaWV3LGV4cHJlc3Npb246ImN1cnJlbnRWaWV3ID09PSAneWVhcicifV0scmVmOiJ5ZWFyVGFibGUiLGF0dHJzOnt5ZWFyOmUueWVhcixkYXRlOmUuZGF0ZSwiZGlzYWJsZWQtZGF0ZSI6ZS5kaXNhYmxlZERhdGV9LG9uOntwaWNrOmUuaGFuZGxlWWVhclBpY2t9fSksaSgibW9udGgtdGFibGUiLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZToibW9udGgiPT09ZS5jdXJyZW50VmlldyxleHByZXNzaW9uOiJjdXJyZW50VmlldyA9PT0gJ21vbnRoJyJ9XSxhdHRyczp7bW9udGg6ZS5tb250aCxkYXRlOmUuZGF0ZSwiZGlzYWJsZWQtZGF0ZSI6ZS5kaXNhYmxlZERhdGV9LG9uOntwaWNrOmUuaGFuZGxlTW9udGhQaWNrfX0pXSwxKV0pXSwyKSxpKCJkaXYiLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZTplLmZvb3RlclZpc2libGUmJiJkYXRlIj09PWUuY3VycmVudFZpZXcsZXhwcmVzc2lvbjoiZm9vdGVyVmlzaWJsZSAmJiBjdXJyZW50VmlldyA9PT0gJ2RhdGUnIn1dLHN0YXRpY0NsYXNzOiJlbC1waWNrZXItcGFuZWxfX2Zvb3RlciJ9LFtpKCJhIix7c3RhdGljQ2xhc3M6ImVsLXBpY2tlci1wYW5lbF9fbGluay1idG4iLGF0dHJzOntocmVmOiJKYXZhU2NyaXB0OiJ9LG9uOntjbGljazplLmNoYW5nZVRvTm93fX0sW2UuX3YoZS5fcyhlLnQoImVsLmRhdGVwaWNrZXIubm93IikpKV0pLGkoImJ1dHRvbiIse3N0YXRpY0NsYXNzOiJlbC1waWNrZXItcGFuZWxfX2J0biIsYXR0cnM6e3R5cGU6ImJ1dHRvbiJ9LG9uOntjbGljazplLmNvbmZpcm19fSxbZS5fdihlLl9zKGUudCgiZWwuZGF0ZXBpY2tlci5jb25maXJtIikpKV0pXSldKV0pfSxzdGF0aWNSZW5kZXJGbnM6W119fSxmdW5jdGlvbihlLHQsaSl7dmFyIG49aSg1KShpKDE3NSksaSgxNzYpLG51bGwsbnVsbCk7ZS5leHBvcnRzPW4uZXhwb3J0c30sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX10Ll9fZXNNb2R1bGU9ITA7dmFyIHM9aSgxNTMpLG89aSgxMiksYT1uKG8pLHI9aSgxNTgpLGw9bihyKSx1PWkoMTcwKSxjPW4odSksZD1pKDE5KSxoPW4oZCk7dC5kZWZhdWx0PXttaXhpbnM6W2EuZGVmYXVsdF0sY29tcHV0ZWQ6e2J0bkRpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuISh0aGlzLm1pbkRhdGUmJnRoaXMubWF4RGF0ZSYmIXRoaXMuc2VsZWN0aW5nKX0sbGVmdExhYmVsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0ZS5nZXRGdWxsWWVhcigpKyIgIit0aGlzLnQoImVsLmRhdGVwaWNrZXIueWVhciIpKyIgIit0aGlzLnQoImVsLmRhdGVwaWNrZXIubW9udGgiKyh0aGlzLmRhdGUuZ2V0TW9udGgoKSsxKSl9LHJpZ2h0TGFiZWw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yaWdodERhdGUuZ2V0RnVsbFllYXIoKSsiICIrdGhpcy50KCJlbC5kYXRlcGlja2VyLnllYXIiKSsiICIrdGhpcy50KCJlbC5kYXRlcGlja2VyLm1vbnRoIisodGhpcy5yaWdodERhdGUuZ2V0TW9udGgoKSsxKSl9LGxlZnRZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0ZS5nZXRGdWxsWWVhcigpfSxsZWZ0TW9udGg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRlLmdldE1vbnRoKCl9LHJpZ2h0WWVhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJpZ2h0RGF0ZS5nZXRGdWxsWWVhcigpfSxyaWdodE1vbnRoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmlnaHREYXRlLmdldE1vbnRoKCl9LG1pblZpc2libGVEYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWluRGF0ZT8oMCxzLmZvcm1hdERhdGUpKHRoaXMubWluRGF0ZSk6IiJ9LG1heFZpc2libGVEYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF4RGF0ZXx8dGhpcy5taW5EYXRlPygwLHMuZm9ybWF0RGF0ZSkodGhpcy5tYXhEYXRlfHx0aGlzLm1pbkRhdGUpOiIifSxtaW5WaXNpYmxlVGltZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1pbkRhdGU/KDAscy5mb3JtYXREYXRlKSh0aGlzLm1pbkRhdGUsIkhIOm1tOnNzIik6IiJ9LG1heFZpc2libGVUaW1lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF4RGF0ZXx8dGhpcy5taW5EYXRlPygwLHMuZm9ybWF0RGF0ZSkodGhpcy5tYXhEYXRlfHx0aGlzLm1pbkRhdGUsIkhIOm1tOnNzIik6IiJ9LHJpZ2h0RGF0ZTpmdW5jdGlvbigpe3ZhciBlPW5ldyBEYXRlKHRoaXMuZGF0ZSksdD1lLmdldE1vbnRoKCk7cmV0dXJuIGUuc2V0RGF0ZSgxKSwxMT09PXQ/KGUuc2V0RnVsbFllYXIoZS5nZXRGdWxsWWVhcigpKzEpLGUuc2V0TW9udGgoMCkpOmUuc2V0TW9udGgodCsxKSxlfX0sZGF0YTpmdW5jdGlvbigpe3JldHVybntwb3BwZXJDbGFzczoiIixtaW5QaWNrZXJXaWR0aDowLG1heFBpY2tlcldpZHRoOjAsZGF0ZTpuZXcgRGF0ZSxtaW5EYXRlOiIiLG1heERhdGU6IiIscmFuZ2VTdGF0ZTp7ZW5kRGF0ZTpudWxsLHNlbGVjdGluZzohMSxyb3c6bnVsbCxjb2x1bW46bnVsbH0sc2hvd1RpbWU6ITEsc2hvcnRjdXRzOiIiLHZhbHVlOiIiLHZpc2libGU6IiIsZGlzYWJsZWREYXRlOiIiLGZpcnN0RGF5T2ZXZWVrOjcsbWluVGltZVBpY2tlclZpc2libGU6ITEsbWF4VGltZVBpY2tlclZpc2libGU6ITEsd2lkdGg6MH19LHdhdGNoOntzaG93VGltZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzO2UmJnRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKGUpe3ZhciBpPXQuJHJlZnMubWluSW5wdXQuJGVsLG49dC4kcmVmcy5tYXhJbnB1dC4kZWw7aSYmKHQubWluUGlja2VyV2lkdGg9aS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCsxMCksbiYmKHQubWF4UGlja2VyV2lkdGg9bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCsxMCl9KX0sbWluRGF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtpZihlLm1heERhdGUmJmUubWF4RGF0ZTxlLm1pbkRhdGUpe3ZhciB0PSJISDptbTpzcyI7ZS4kcmVmcy5tYXhUaW1lUGlja2VyLnNlbGVjdGFibGVSYW5nZT1bWygwLHMucGFyc2VEYXRlKSgoMCxzLmZvcm1hdERhdGUpKGUubWluRGF0ZSx0KSx0KSwoMCxzLnBhcnNlRGF0ZSkoIjIzOjU5OjU5Iix0KV1dfX0pfSxtaW5UaW1lUGlja2VyVmlzaWJsZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzO2UmJnRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7cmV0dXJuIHQuJHJlZnMubWluVGltZVBpY2tlci5hanVzdFNjcm9sbFRvcCgpfSl9LG1heFRpbWVQaWNrZXJWaXNpYmxlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7ZSYmdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtyZXR1cm4gdC4kcmVmcy5tYXhUaW1lUGlja2VyLmFqdXN0U2Nyb2xsVG9wKCl9KX0sdmFsdWU6ZnVuY3Rpb24oZSl7ZT9BcnJheS5pc0FycmF5KGUpJiYodGhpcy5taW5EYXRlPWVbMF0/KDAscy50b0RhdGUpKGVbMF0pOm51bGwsdGhpcy5tYXhEYXRlPWVbMV0/KDAscy50b0RhdGUpKGVbMV0pOm51bGwsdGhpcy5taW5EYXRlJiYodGhpcy5kYXRlPW5ldyBEYXRlKHRoaXMubWluRGF0ZSkpLHRoaXMuaGFuZGxlQ29uZmlybSghMCkpOih0aGlzLm1pbkRhdGU9bnVsbCx0aGlzLm1heERhdGU9bnVsbCl9fSxtZXRob2RzOntoYW5kbGVDbGVhcjpmdW5jdGlvbigpe3RoaXMubWluRGF0ZT1udWxsLHRoaXMubWF4RGF0ZT1udWxsLHRoaXMuaGFuZGxlQ29uZmlybSghMSl9LGhhbmRsZURhdGVJbnB1dDpmdW5jdGlvbihlLHQpe3ZhciBpPWUudGFyZ2V0LnZhbHVlLG49KDAscy5wYXJzZURhdGUpKGksInl5eXktTU0tZGQiKTtpZihuKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5kaXNhYmxlZERhdGUmJnRoaXMuZGlzYWJsZWREYXRlKG5ldyBEYXRlKG4pKSlyZXR1cm47dmFyIG89bmV3IERhdGUoIm1pbiI9PT10P3RoaXMubWluRGF0ZTp0aGlzLm1heERhdGUpO28mJihvLnNldEZ1bGxZZWFyKG4uZ2V0RnVsbFllYXIoKSksby5zZXRNb250aChuLmdldE1vbnRoKCksbi5nZXREYXRlKCkpKX19LGhhbmRsZUNoYW5nZVJhbmdlOmZ1bmN0aW9uKGUpe3RoaXMubWluRGF0ZT1lLm1pbkRhdGUsdGhpcy5tYXhEYXRlPWUubWF4RGF0ZSx0aGlzLnJhbmdlU3RhdGU9ZS5yYW5nZVN0YXRlfSxoYW5kbGVEYXRlQ2hhbmdlOmZ1bmN0aW9uKGUsdCl7dmFyIGk9ZS50YXJnZXQudmFsdWUsbj0oMCxzLnBhcnNlRGF0ZSkoaSwieXl5eS1NTS1kZCIpO2lmKG4pe3ZhciBvPW5ldyBEYXRlKCJtaW4iPT09dD90aGlzLm1pbkRhdGU6dGhpcy5tYXhEYXRlKTtvJiYoby5zZXRGdWxsWWVhcihuLmdldEZ1bGxZZWFyKCkpLG8uc2V0TW9udGgobi5nZXRNb250aCgpLG4uZ2V0RGF0ZSgpKSksIm1pbiI9PT10P288dGhpcy5tYXhEYXRlJiYodGhpcy5taW5EYXRlPW5ldyBEYXRlKG8uZ2V0VGltZSgpKSk6bz50aGlzLm1pbkRhdGUmJih0aGlzLm1heERhdGU9bmV3IERhdGUoby5nZXRUaW1lKCkpLHRoaXMubWluRGF0ZSYmdGhpcy5taW5EYXRlPnRoaXMubWF4RGF0ZSYmKHRoaXMubWluRGF0ZT1udWxsKSl9fSxoYW5kbGVUaW1lQ2hhbmdlOmZ1bmN0aW9uKGUsdCl7dmFyIGk9ZS50YXJnZXQudmFsdWUsbj0oMCxzLnBhcnNlRGF0ZSkoaSwiSEg6bW06c3MiKTtpZihuKXt2YXIgbz1uZXcgRGF0ZSgibWluIj09PXQ/dGhpcy5taW5EYXRlOnRoaXMubWF4RGF0ZSk7byYmKG8uc2V0SG91cnMobi5nZXRIb3VycygpKSxvLnNldE1pbnV0ZXMobi5nZXRNaW51dGVzKCkpLG8uc2V0U2Vjb25kcyhuLmdldFNlY29uZHMoKSkpLCJtaW4iPT09dD9vPHRoaXMubWF4RGF0ZSYmKHRoaXMubWluRGF0ZT1uZXcgRGF0ZShvLmdldFRpbWUoKSkpOm8+dGhpcy5taW5EYXRlJiYodGhpcy5tYXhEYXRlPW5ldyBEYXRlKG8uZ2V0VGltZSgpKSksdGhpcy4kcmVmc1t0KyJUaW1lUGlja2VyIl0udmFsdWU9byx0aGlzW3QrIlRpbWVQaWNrZXJWaXNpYmxlIl09ITF9fSxoYW5kbGVSYW5nZVBpY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXTt0aGlzLm1heERhdGU9PT1lLm1heERhdGUmJnRoaXMubWluRGF0ZT09PWUubWluRGF0ZXx8KHRoaXMub25QaWNrJiZ0aGlzLm9uUGljayhlKSx0aGlzLm1heERhdGU9ZS5tYXhEYXRlLHRoaXMubWluRGF0ZT1lLm1pbkRhdGUsdCYmIXRoaXMuc2hvd1RpbWUmJnRoaXMuaGFuZGxlQ29uZmlybSgpKX0sY2hhbmdlVG9Ub2RheTpmdW5jdGlvbigpe3RoaXMuZGF0ZT1uZXcgRGF0ZX0saGFuZGxlU2hvcnRjdXRDbGljazpmdW5jdGlvbihlKXtlLm9uQ2xpY2smJmUub25DbGljayh0aGlzKX0scmVzZXRWaWV3OmZ1bmN0aW9uKCl7dGhpcy5taW5UaW1lUGlja2VyVmlzaWJsZT0hMSx0aGlzLm1heFRpbWVQaWNrZXJWaXNpYmxlPSExfSxzZXRUaW1lOmZ1bmN0aW9uKGUsdCl7dmFyIGk9bmV3IERhdGUoZS5nZXRUaW1lKCkpLG49dC5nZXRIb3VycygpLHM9dC5nZXRNaW51dGVzKCksbz10LmdldFNlY29uZHMoKTtyZXR1cm4gaS5zZXRIb3VycyhuKSxpLnNldE1pbnV0ZXMocyksaS5zZXRTZWNvbmRzKG8pLG5ldyBEYXRlKGkuZ2V0VGltZSgpKX0saGFuZGxlTWluVGltZVBpY2s6ZnVuY3Rpb24oZSx0LGkpe3RoaXMubWluRGF0ZT10aGlzLm1pbkRhdGV8fG5ldyBEYXRlLGUmJih0aGlzLm1pbkRhdGU9dGhpcy5zZXRUaW1lKHRoaXMubWluRGF0ZSxlKSksaXx8KHRoaXMubWluVGltZVBpY2tlclZpc2libGU9dCl9LGhhbmRsZU1heFRpbWVQaWNrOmZ1bmN0aW9uKGUsdCxpKXtpZighdGhpcy5tYXhEYXRlKXt2YXIgbj1uZXcgRGF0ZTtuPj10aGlzLm1pbkRhdGUmJih0aGlzLm1heERhdGU9bmV3IERhdGUpfXRoaXMubWF4RGF0ZSYmZSYmKHRoaXMubWF4RGF0ZT10aGlzLnNldFRpbWUodGhpcy5tYXhEYXRlLGUpKSxpfHwodGhpcy5tYXhUaW1lUGlja2VyVmlzaWJsZT10KX0scHJldk1vbnRoOmZ1bmN0aW9uKCl7dGhpcy5kYXRlPSgwLHMucHJldk1vbnRoKSh0aGlzLmRhdGUpfSxuZXh0TW9udGg6ZnVuY3Rpb24oKXt0aGlzLmRhdGU9KDAscy5uZXh0TW9udGgpKHRoaXMuZGF0ZSl9LG5leHRZZWFyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5kYXRlO2Uuc2V0RnVsbFllYXIoZS5nZXRGdWxsWWVhcigpKzEpLHRoaXMucmVzZXREYXRlKCl9LHByZXZZZWFyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5kYXRlO2Uuc2V0RnVsbFllYXIoZS5nZXRGdWxsWWVhcigpLTEpLHRoaXMucmVzZXREYXRlKCl9LGhhbmRsZUNvbmZpcm06ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO3RoaXMuJGVtaXQoInBpY2siLFt0aGlzLm1pbkRhdGUsdGhpcy5tYXhEYXRlXSxlKX0scmVzZXREYXRlOmZ1bmN0aW9uKCl7dGhpcy5kYXRlPW5ldyBEYXRlKHRoaXMuZGF0ZSl9fSxjb21wb25lbnRzOntUaW1lUGlja2VyOmwuZGVmYXVsdCxEYXRlVGFibGU6Yy5kZWZhdWx0LEVsSW5wdXQ6aC5kZWZhdWx0fX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxpPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIGkoInRyYW5zaXRpb24iLHthdHRyczp7bmFtZToiZWwtem9vbS1pbi10b3AifSxvbjp7ImFmdGVyLWxlYXZlIjpmdW5jdGlvbih0KXtlLiRlbWl0KCJkb2Rlc3Ryb3kiKX19fSxbaSgiZGl2Iix7ZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6ZS52aXNpYmxlLGV4cHJlc3Npb246InZpc2libGUifV0sc3RhdGljQ2xhc3M6ImVsLXBpY2tlci1wYW5lbCBlbC1kYXRlLXJhbmdlLXBpY2tlciIsY2xhc3M6W3siaGFzLXNpZGViYXIiOmUuJHNsb3RzLnNpZGViYXJ8fGUuc2hvcnRjdXRzLCJoYXMtdGltZSI6ZS5zaG93VGltZX0sZS5wb3BwZXJDbGFzc10sc3R5bGU6e3dpZHRoOmUud2lkdGgrInB4In19LFtpKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtcGlja2VyLXBhbmVsX19ib2R5LXdyYXBwZXIifSxbZS5fdCgic2lkZWJhciIpLGUuc2hvcnRjdXRzP2koImRpdiIse3N0YXRpY0NsYXNzOiJlbC1waWNrZXItcGFuZWxfX3NpZGViYXIifSxlLl9sKGUuc2hvcnRjdXRzLGZ1bmN0aW9uKHQpe3JldHVybiBpKCJidXR0b24iLHtzdGF0aWNDbGFzczoiZWwtcGlja2VyLXBhbmVsX19zaG9ydGN1dCIsYXR0cnM6e3R5cGU6ImJ1dHRvbiJ9LG9uOntjbGljazpmdW5jdGlvbihpKXtlLmhhbmRsZVNob3J0Y3V0Q2xpY2sodCl9fX0sW2UuX3YoZS5fcyh0LnRleHQpKV0pfSkpOmUuX2UoKSxpKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtcGlja2VyLXBhbmVsX19ib2R5In0sW2Uuc2hvd1RpbWU/aSgiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLWRhdGUtcmFuZ2UtcGlja2VyX190aW1lLWhlYWRlciJ9LFtpKCJzcGFuIix7c3RhdGljQ2xhc3M6ImVsLWRhdGUtcmFuZ2UtcGlja2VyX19lZGl0b3JzLXdyYXAifSxbaSgic3BhbiIse3N0YXRpY0NsYXNzOiJlbC1kYXRlLXJhbmdlLXBpY2tlcl9fdGltZS1waWNrZXItd3JhcCJ9LFtpKCJlbC1pbnB1dCIse3JlZjoibWluSW5wdXQiLHN0YXRpY0NsYXNzOiJlbC1kYXRlLXJhbmdlLXBpY2tlcl9fZWRpdG9yIixhdHRyczp7c2l6ZToic21hbGwiLHBsYWNlaG9sZGVyOmUudCgiZWwuZGF0ZXBpY2tlci5zdGFydERhdGUiKSx2YWx1ZTplLm1pblZpc2libGVEYXRlfSxuYXRpdmVPbjp7aW5wdXQ6ZnVuY3Rpb24odCl7ZS5oYW5kbGVEYXRlSW5wdXQodCwibWluIil9LGNoYW5nZTpmdW5jdGlvbih0KXtlLmhhbmRsZURhdGVDaGFuZ2UodCwibWluIil9fX0pXSwxKSxpKCJzcGFuIix7c3RhdGljQ2xhc3M6ImVsLWRhdGUtcmFuZ2UtcGlja2VyX190aW1lLXBpY2tlci13cmFwIn0sW2koImVsLWlucHV0Iix7c3RhdGljQ2xhc3M6ImVsLWRhdGUtcmFuZ2UtcGlja2VyX19lZGl0b3IiLGF0dHJzOntzaXplOiJzbWFsbCIscGxhY2Vob2xkZXI6ZS50KCJlbC5kYXRlcGlja2VyLnN0YXJ0VGltZSIpLHZhbHVlOmUubWluVmlzaWJsZVRpbWV9LG9uOntmb2N1czpmdW5jdGlvbih0KXtlLm1pblRpbWVQaWNrZXJWaXNpYmxlPSFlLm1pblRpbWVQaWNrZXJWaXNpYmxlfX0sbmF0aXZlT246e2NoYW5nZTpmdW5jdGlvbih0KXtlLmhhbmRsZVRpbWVDaGFuZ2UodCwibWluIil9fX0pLGkoInRpbWUtcGlja2VyIix7cmVmOiJtaW5UaW1lUGlja2VyIixhdHRyczp7InBpY2tlci13aWR0aCI6ZS5taW5QaWNrZXJXaWR0aCxkYXRlOmUubWluRGF0ZSx2aXNpYmxlOmUubWluVGltZVBpY2tlclZpc2libGV9LG9uOntwaWNrOmUuaGFuZGxlTWluVGltZVBpY2t9fSldLDEpXSksaSgic3BhbiIse3N0YXRpY0NsYXNzOiJlbC1pY29uLWFycm93LXJpZ2h0In0pLGkoInNwYW4iLHtzdGF0aWNDbGFzczoiZWwtZGF0ZS1yYW5nZS1waWNrZXJfX2VkaXRvcnMtd3JhcCBpcy1yaWdodCJ9LFtpKCJzcGFuIix7c3RhdGljQ2xhc3M6ImVsLWRhdGUtcmFuZ2UtcGlja2VyX190aW1lLXBpY2tlci13cmFwIn0sW2koImVsLWlucHV0Iix7c3RhdGljQ2xhc3M6ImVsLWRhdGUtcmFuZ2UtcGlja2VyX19lZGl0b3IiLGF0dHJzOntzaXplOiJzbWFsbCIscGxhY2Vob2xkZXI6ZS50KCJlbC5kYXRlcGlja2VyLmVuZERhdGUiKSx2YWx1ZTplLm1heFZpc2libGVEYXRlLHJlYWRvbmx5OiFlLm1pbkRhdGV9LG5hdGl2ZU9uOntpbnB1dDpmdW5jdGlvbih0KXtlLmhhbmRsZURhdGVJbnB1dCh0LCJtYXgiKX0sY2hhbmdlOmZ1bmN0aW9uKHQpe2UuaGFuZGxlRGF0ZUNoYW5nZSh0LCJtYXgiKX19fSldLDEpLGkoInNwYW4iLHtzdGF0aWNDbGFzczoiZWwtZGF0ZS1yYW5nZS1waWNrZXJfX3RpbWUtcGlja2VyLXdyYXAifSxbaSgiZWwtaW5wdXQiLHtyZWY6Im1heElucHV0IixzdGF0aWNDbGFzczoiZWwtZGF0ZS1yYW5nZS1waWNrZXJfX2VkaXRvciIsYXR0cnM6e3NpemU6InNtYWxsIixwbGFjZWhvbGRlcjplLnQoImVsLmRhdGVwaWNrZXIuZW5kVGltZSIpLHZhbHVlOmUubWF4VmlzaWJsZVRpbWUscmVhZG9ubHk6IWUubWluRGF0ZX0sb246e2ZvY3VzOmZ1bmN0aW9uKHQpe2UubWluRGF0ZSYmKGUubWF4VGltZVBpY2tlclZpc2libGU9IWUubWF4VGltZVBpY2tlclZpc2libGUpfX0sbmF0aXZlT246e2NoYW5nZTpmdW5jdGlvbih0KXtlLmhhbmRsZVRpbWVDaGFuZ2UodCwibWF4Iil9fX0pLGkoInRpbWUtcGlja2VyIix7cmVmOiJtYXhUaW1lUGlja2VyIixhdHRyczp7InBpY2tlci13aWR0aCI6ZS5tYXhQaWNrZXJXaWR0aCxkYXRlOmUubWF4RGF0ZSx2aXNpYmxlOmUubWF4VGltZVBpY2tlclZpc2libGV9LG9uOntwaWNrOmUuaGFuZGxlTWF4VGltZVBpY2t9fSldLDEpXSldKTplLl9lKCksaSgiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXBpY2tlci1wYW5lbF9fY29udGVudCBlbC1kYXRlLXJhbmdlLXBpY2tlcl9fY29udGVudCBpcy1sZWZ0In0sW2koImRpdiIse3N0YXRpY0NsYXNzOiJlbC1kYXRlLXJhbmdlLXBpY2tlcl9faGVhZGVyIn0sW2koImJ1dHRvbiIse3N0YXRpY0NsYXNzOiJlbC1waWNrZXItcGFuZWxfX2ljb24tYnRuIGVsLWljb24tZC1hcnJvdy1sZWZ0IixhdHRyczp7dHlwZToiYnV0dG9uIn0sb246e2NsaWNrOmUucHJldlllYXJ9fSksaSgiYnV0dG9uIix7c3RhdGljQ2xhc3M6ImVsLXBpY2tlci1wYW5lbF9faWNvbi1idG4gZWwtaWNvbi1hcnJvdy1sZWZ0IixhdHRyczp7dHlwZToiYnV0dG9uIn0sb246e2NsaWNrOmUucHJldk1vbnRofX0pLGkoImRpdiIsW2UuX3YoZS5fcyhlLmxlZnRMYWJlbCkpXSldKSxpKCJkYXRlLXRhYmxlIix7YXR0cnM6eyJzZWxlY3Rpb24tbW9kZSI6InJhbmdlIixkYXRlOmUuZGF0ZSx5ZWFyOmUubGVmdFllYXIsbW9udGg6ZS5sZWZ0TW9udGgsIm1pbi1kYXRlIjplLm1pbkRhdGUsIm1heC1kYXRlIjplLm1heERhdGUsInJhbmdlLXN0YXRlIjplLnJhbmdlU3RhdGUsImRpc2FibGVkLWRhdGUiOmUuZGlzYWJsZWREYXRlLCJmaXJzdC1kYXktb2Ytd2VlayI6ZS5maXJzdERheU9mV2Vla30sb246e2NoYW5nZXJhbmdlOmUuaGFuZGxlQ2hhbmdlUmFuZ2UscGljazplLmhhbmRsZVJhbmdlUGlja319KV0sMSksaSgiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXBpY2tlci1wYW5lbF9fY29udGVudCBlbC1kYXRlLXJhbmdlLXBpY2tlcl9fY29udGVudCBpcy1yaWdodCJ9LFtpKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtZGF0ZS1yYW5nZS1waWNrZXJfX2hlYWRlciJ9LFtpKCJidXR0b24iLHtzdGF0aWNDbGFzczoiZWwtcGlja2VyLXBhbmVsX19pY29uLWJ0biBlbC1pY29uLWQtYXJyb3ctcmlnaHQiLGF0dHJzOnt0eXBlOiJidXR0b24ifSxvbjp7Y2xpY2s6ZS5uZXh0WWVhcn19KSxpKCJidXR0b24iLHtzdGF0aWNDbGFzczoiZWwtcGlja2VyLXBhbmVsX19pY29uLWJ0biBlbC1pY29uLWFycm93LXJpZ2h0IixhdHRyczp7dHlwZToiYnV0dG9uIn0sb246e2NsaWNrOmUubmV4dE1vbnRofX0pLGkoImRpdiIsW2UuX3YoZS5fcyhlLnJpZ2h0TGFiZWwpKV0pXSksaSgiZGF0ZS10YWJsZSIse2F0dHJzOnsic2VsZWN0aW9uLW1vZGUiOiJyYW5nZSIsZGF0ZTplLnJpZ2h0RGF0ZSx5ZWFyOmUucmlnaHRZZWFyLG1vbnRoOmUucmlnaHRNb250aCwibWluLWRhdGUiOmUubWluRGF0ZSwibWF4LWRhdGUiOmUubWF4RGF0ZSwicmFuZ2Utc3RhdGUiOmUucmFuZ2VTdGF0ZSwiZGlzYWJsZWQtZGF0ZSI6ZS5kaXNhYmxlZERhdGUsImZpcnN0LWRheS1vZi13ZWVrIjplLmZpcnN0RGF5T2ZXZWVrfSxvbjp7Y2hhbmdlcmFuZ2U6ZS5oYW5kbGVDaGFuZ2VSYW5nZSxwaWNrOmUuaGFuZGxlUmFuZ2VQaWNrfX0pXSwxKV0pXSwyKSxlLnNob3dUaW1lP2koImRpdiIse3N0YXRpY0NsYXNzOiJlbC1waWNrZXItcGFuZWxfX2Zvb3RlciJ9LFtpKCJhIix7c3RhdGljQ2xhc3M6ImVsLXBpY2tlci1wYW5lbF9fbGluay1idG4iLG9uOntjbGljazplLmhhbmRsZUNsZWFyfX0sW2UuX3YoZS5fcyhlLnQoImVsLmRhdGVwaWNrZXIuY2xlYXIiKSkpXSksaSgiYnV0dG9uIix7c3RhdGljQ2xhc3M6ImVsLXBpY2tlci1wYW5lbF9fYnRuIixhdHRyczp7dHlwZToiYnV0dG9uIixkaXNhYmxlZDplLmJ0bkRpc2FibGVkfSxvbjp7Y2xpY2s6ZnVuY3Rpb24odCl7ZS5oYW5kbGVDb25maXJtKCl9fX0sW2UuX3YoZS5fcyhlLnQoImVsLmRhdGVwaWNrZXIuY29uZmlybSIpKSldKV0pOmUuX2UoKV0pXSl9LHN0YXRpY1JlbmRlckZuczpbXX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5fX2VzTW9kdWxlPSEwO3ZhciBzPWkoMTc4KSxvPW4ocyk7by5kZWZhdWx0Lmluc3RhbGw9ZnVuY3Rpb24oZSl7ZS5jb21wb25lbnQoby5kZWZhdWx0Lm5hbWUsby5kZWZhdWx0KX0sdC5kZWZhdWx0PW8uZGVmYXVsdH0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX10Ll9fZXNNb2R1bGU9ITA7dmFyIHM9aSgxNTEpLG89bihzKSxhPWkoMTc5KSxyPW4oYSk7dC5kZWZhdWx0PXttaXhpbnM6W28uZGVmYXVsdF0sbmFtZToiRWxUaW1lU2VsZWN0IixiZWZvcmVDcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLnR5cGU9InRpbWUtc2VsZWN0Iix0aGlzLnBhbmVsPXIuZGVmYXVsdH19fSxmdW5jdGlvbihlLHQsaSl7dmFyIG49aSg1KShpKDE4MCksaSgxODEpLG51bGwsbnVsbCk7ZS5leHBvcnRzPW4uZXhwb3J0c30sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX10Ll9fZXNNb2R1bGU9ITA7dmFyIHM9aSg0MSksbz1uKHMpLGE9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zcGxpdCgiOiIpO2lmKHQubGVuZ3RoPj0yKXt2YXIgaT1wYXJzZUludCh0WzBdLDEwKSxuPXBhcnNlSW50KHRbMV0sMTApO3JldHVybntob3VyczppLG1pbnV0ZXM6bn19cmV0dXJuIG51bGx9LHI9ZnVuY3Rpb24oZSx0KXt2YXIgaT1hKGUpLG49YSh0KSxzPWkubWludXRlcys2MCppLmhvdXJzLG89bi5taW51dGVzKzYwKm4uaG91cnM7cmV0dXJuIHM9PT1vPzA6cz5vPzE6LTF9LGw9ZnVuY3Rpb24oZSl7cmV0dXJuKGUuaG91cnM8MTA/IjAiK2UuaG91cnM6ZS5ob3VycykrIjoiKyhlLm1pbnV0ZXM8MTA/IjAiK2UubWludXRlczplLm1pbnV0ZXMpfSx1PWZ1bmN0aW9uKGUsdCl7dmFyIGk9YShlKSxuPWEodCkscz17aG91cnM6aS5ob3VycyxtaW51dGVzOmkubWludXRlc307cmV0dXJuIHMubWludXRlcys9bi5taW51dGVzLHMuaG91cnMrPW4uaG91cnMscy5ob3Vycys9TWF0aC5mbG9vcihzLm1pbnV0ZXMvNjApLHMubWludXRlcz1zLm1pbnV0ZXMlNjAsbChzKX07dC5kZWZhdWx0PXtjb21wb25lbnRzOntFbFNjcm9sbGJhcjpvLmRlZmF1bHR9LHdhdGNoOnt2YWx1ZTpmdW5jdGlvbihlKXtlJiYodGhpcy5taW5UaW1lJiZyKGUsdGhpcy5taW5UaW1lKTwwP3RoaXMuJGVtaXQoInBpY2siKTp0aGlzLm1heFRpbWUmJnIoZSx0aGlzLm1heFRpbWUpPjAmJnRoaXMuJGVtaXQoInBpY2siKSl9fSxtZXRob2RzOntoYW5kbGVDbGljazpmdW5jdGlvbihlKXtlLmRpc2FibGVkfHx0aGlzLiRlbWl0KCJwaWNrIixlLnZhbHVlKX0saGFuZGxlQ2xlYXI6ZnVuY3Rpb24oKXt0aGlzLiRlbWl0KCJwaWNrIil9fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3BvcHBlckNsYXNzOiIiLHN0YXJ0OiIwOTowMCIsZW5kOiIxODowMCIsc3RlcDoiMDA6MzAiLHZhbHVlOiIiLHZpc2libGU6ITEsbWluVGltZToiIixtYXhUaW1lOiIiLHdpZHRoOjB9fSxjb21wdXRlZDp7aXRlbXM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0YXJ0LHQ9dGhpcy5lbmQsaT10aGlzLnN0ZXAsbj1bXTtpZihlJiZ0JiZpKWZvcih2YXIgcz1lO3Iocyx0KTw9MDspbi5wdXNoKHt2YWx1ZTpzLGRpc2FibGVkOnIocyx0aGlzLm1pblRpbWV8fCItMTotMSIpPD0wfHxyKHMsdGhpcy5tYXhUaW1lfHwiMTAwOjEwMCIpPj0wfSkscz11KHMsaSk7cmV0dXJuIG59fX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxpPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIGkoInRyYW5zaXRpb24iLHthdHRyczp7bmFtZToiZWwtem9vbS1pbi10b3AifSxvbjp7ImFmdGVyLWxlYXZlIjpmdW5jdGlvbih0KXtlLiRlbWl0KCJkb2Rlc3Ryb3kiKX19fSxbaSgiZGl2Iix7ZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6ZS52aXNpYmxlLGV4cHJlc3Npb246InZpc2libGUifV0sc3RhdGljQ2xhc3M6ImVsLXBpY2tlci1wYW5lbCB0aW1lLXNlbGVjdCIsY2xhc3M6ZS5wb3BwZXJDbGFzcyxzdHlsZTp7d2lkdGg6ZS53aWR0aCsicHgifX0sW2koImVsLXNjcm9sbGJhciIse2F0dHJzOntub3Jlc2l6ZToiIiwid3JhcC1jbGFzcyI6ImVsLXBpY2tlci1wYW5lbF9fY29udGVudCJ9fSxlLl9sKGUuaXRlbXMsZnVuY3Rpb24odCl7cmV0dXJuIGkoImRpdiIse3N0YXRpY0NsYXNzOiJ0aW1lLXNlbGVjdC1pdGVtIixjbGFzczp7c2VsZWN0ZWQ6ZS52YWx1ZT09PXQudmFsdWUsZGlzYWJsZWQ6dC5kaXNhYmxlZH0sYXR0cnM6e2Rpc2FibGVkOnQuZGlzYWJsZWR9LG9uOntjbGljazpmdW5jdGlvbihpKXtlLmhhbmRsZUNsaWNrKHQpfX19LFtlLl92KGUuX3ModC52YWx1ZSkpXSl9KSldLDEpXSl9LHN0YXRpY1JlbmRlckZuczpbXX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5fX2VzTW9kdWxlPSEwO3ZhciBzPWkoMTgzKSxvPW4ocyk7by5kZWZhdWx0Lmluc3RhbGw9ZnVuY3Rpb24oZSl7ZS5jb21wb25lbnQoby5kZWZhdWx0Lm5hbWUsby5kZWZhdWx0KX0sdC5kZWZhdWx0PW8uZGVmYXVsdH0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX10Ll9fZXNNb2R1bGU9ITA7dmFyIHM9aSgxNTEpLG89bihzKSxhPWkoMTU4KSxyPW4oYSksbD1pKDE4NCksdT1uKGwpO3QuZGVmYXVsdD17bWl4aW5zOltvLmRlZmF1bHRdLG5hbWU6IkVsVGltZVBpY2tlciIscHJvcHM6e2lzUmFuZ2U6Qm9vbGVhbn0sZGF0YTpmdW5jdGlvbigpe3JldHVybnt0eXBlOiIifX0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMudHlwZT10aGlzLmlzUmFuZ2U/InRpbWVyYW5nZSI6InRpbWUiLHRoaXMucGFuZWw9dGhpcy5pc1JhbmdlP3UuZGVmYXVsdDpyLmRlZmF1bHR9fX0sZnVuY3Rpb24oZSx0LGkpe3ZhciBuPWkoNSkoaSgxODUpLGkoMTg2KSxudWxsLG51bGwpO2UuZXhwb3J0cz1uLmV4cG9ydHN9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5fX2VzTW9kdWxlPSEwO3ZhciBzPWkoMTUzKSxvPWkoMTIpLGE9bihvKSxyPWkoMTYwKSxsPW4ociksdT0oMCxzLnBhcnNlRGF0ZSkoIjAwOjAwOjAwIiwiSEg6bW06c3MiKSxjPSgwLHMucGFyc2VEYXRlKSgiMjM6NTk6NTkiLCJISDptbTpzcyIpLGQ9ZnVuY3Rpb24oZSx0KXt2YXIgaT0zNjAwKmUuZ2V0SG91cnMoKSs2MCplLmdldE1pbnV0ZXMoKStlLmdldFNlY29uZHMoKSxuPTM2MDAqdC5nZXRIb3VycygpKzYwKnQuZ2V0TWludXRlcygpK3QuZ2V0U2Vjb25kcygpO3JldHVybiBpPm59LGg9ZnVuY3Rpb24gZSh0KXt0PUFycmF5LmlzQXJyYXkodCk/dDpbdF07dmFyIGk9dFswXXx8bmV3IERhdGUsbj1uZXcgRGF0ZTtuLnNldEhvdXJzKG4uZ2V0SG91cnMoKSsxKTt2YXIgcz10WzFdfHxuO3JldHVybiBpPnM/ZSgpOnttaW5UaW1lOmksbWF4VGltZTpzfX07dC5kZWZhdWx0PXttaXhpbnM6W2EuZGVmYXVsdF0sY29tcG9uZW50czp7VGltZVNwaW5uZXI6bC5kZWZhdWx0fSxjb21wdXRlZDp7c2hvd1NlY29uZHM6ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5mb3JtYXR8fCIiKS5pbmRleE9mKCJzcyIpIT09LTF9fSxwcm9wczpbInZhbHVlIl0sZGF0YTpmdW5jdGlvbigpe3ZhciBlPWgodGhpcy4kb3B0aW9ucy5kZWZhdWx0VmFsdWUpO3JldHVybntwb3BwZXJDbGFzczoiIixtaW5UaW1lOmUubWluVGltZSxtYXhUaW1lOmUubWF4VGltZSxidG5EaXNhYmxlZDpkKGUubWluVGltZSxlLm1heFRpbWUpLG1heEhvdXJzOmUubWF4VGltZS5nZXRIb3VycygpLG1heE1pbnV0ZXM6ZS5tYXhUaW1lLmdldE1pbnV0ZXMoKSxtYXhTZWNvbmRzOmUubWF4VGltZS5nZXRTZWNvbmRzKCksbWluSG91cnM6ZS5taW5UaW1lLmdldEhvdXJzKCksbWluTWludXRlczplLm1pblRpbWUuZ2V0TWludXRlcygpLG1pblNlY29uZHM6ZS5taW5UaW1lLmdldFNlY29uZHMoKSxmb3JtYXQ6IkhIOm1tOnNzIix2aXNpYmxlOiExLHdpZHRoOjB9fSx3YXRjaDp7dmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpczt0aGlzLnBhbmVsQ3JlYXRlZCgpLHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKGUpe3JldHVybiB0LmFqdXN0U2Nyb2xsVG9wKCl9KX19LG1ldGhvZHM6e3BhbmVsQ3JlYXRlZDpmdW5jdGlvbigpe3ZhciBlPWgodGhpcy52YWx1ZSk7ZS5taW5UaW1lPT09dGhpcy5taW5UaW1lJiZlLm1heFRpbWU9PT10aGlzLm1heFRpbWV8fCh0aGlzLmhhbmRsZU1pbkNoYW5nZSh7aG91cnM6ZS5taW5UaW1lLmdldEhvdXJzKCksbWludXRlczplLm1pblRpbWUuZ2V0TWludXRlcygpLHNlY29uZHM6ZS5taW5UaW1lLmdldFNlY29uZHMoKX0pLHRoaXMuaGFuZGxlTWF4Q2hhbmdlKHtob3VyczplLm1heFRpbWUuZ2V0SG91cnMoKSxtaW51dGVzOmUubWF4VGltZS5nZXRNaW51dGVzKCksc2Vjb25kczplLm1heFRpbWUuZ2V0U2Vjb25kcygpfSkpfSxoYW5kbGVDbGVhcjpmdW5jdGlvbigpe3RoaXMuaGFuZGxlQ2FuY2VsKCl9LGhhbmRsZUNhbmNlbDpmdW5jdGlvbigpe3RoaXMuJGVtaXQoInBpY2siKX0saGFuZGxlQ2hhbmdlOmZ1bmN0aW9uKCl7dGhpcy5taW5UaW1lPnRoaXMubWF4VGltZXx8KHUuc2V0RnVsbFllYXIodGhpcy5taW5UaW1lLmdldEZ1bGxZZWFyKCkpLHUuc2V0TW9udGgodGhpcy5taW5UaW1lLmdldE1vbnRoKCksdGhpcy5taW5UaW1lLmdldERhdGUoKSksYy5zZXRGdWxsWWVhcih0aGlzLm1heFRpbWUuZ2V0RnVsbFllYXIoKSksYy5zZXRNb250aCh0aGlzLm1heFRpbWUuZ2V0TW9udGgoKSx0aGlzLm1heFRpbWUuZ2V0RGF0ZSgpKSx0aGlzLiRyZWZzLm1pblNwaW5uZXIuc2VsZWN0YWJsZVJhbmdlPVtbdSx0aGlzLm1heFRpbWVdXSx0aGlzLiRyZWZzLm1heFNwaW5uZXIuc2VsZWN0YWJsZVJhbmdlPVtbdGhpcy5taW5UaW1lLGNdXSx0aGlzLmhhbmRsZUNvbmZpcm0oITApKX0saGFuZGxlTWF4Q2hhbmdlOmZ1bmN0aW9uKGUpe3ZvaWQgMCE9PWUuaG91cnMmJih0aGlzLm1heFRpbWUuc2V0SG91cnMoZS5ob3VycyksdGhpcy5tYXhIb3Vycz10aGlzLm1heFRpbWUuZ2V0SG91cnMoKSksdm9pZCAwIT09ZS5taW51dGVzJiYodGhpcy5tYXhUaW1lLnNldE1pbnV0ZXMoZS5taW51dGVzKSx0aGlzLm1heE1pbnV0ZXM9dGhpcy5tYXhUaW1lLmdldE1pbnV0ZXMoKSksdm9pZCAwIT09ZS5zZWNvbmRzJiYodGhpcy5tYXhUaW1lLnNldFNlY29uZHMoZS5zZWNvbmRzKSx0aGlzLm1heFNlY29uZHM9dGhpcy5tYXhUaW1lLmdldFNlY29uZHMoKSksdGhpcy5oYW5kbGVDaGFuZ2UoKX0saGFuZGxlTWluQ2hhbmdlOmZ1bmN0aW9uKGUpe3ZvaWQgMCE9PWUuaG91cnMmJih0aGlzLm1pblRpbWUuc2V0SG91cnMoZS5ob3VycyksdGhpcy5taW5Ib3Vycz10aGlzLm1pblRpbWUuZ2V0SG91cnMoKSksdm9pZCAwIT09ZS5taW51dGVzJiYodGhpcy5taW5UaW1lLnNldE1pbnV0ZXMoZS5taW51dGVzKSx0aGlzLm1pbk1pbnV0ZXM9dGhpcy5taW5UaW1lLmdldE1pbnV0ZXMoKSksdm9pZCAwIT09ZS5zZWNvbmRzJiYodGhpcy5taW5UaW1lLnNldFNlY29uZHMoZS5zZWNvbmRzKSx0aGlzLm1pblNlY29uZHM9dGhpcy5taW5UaW1lLmdldFNlY29uZHMoKSksdGhpcy5oYW5kbGVDaGFuZ2UoKX0sc2V0TWluU2VsZWN0aW9uUmFuZ2U6ZnVuY3Rpb24oZSx0KXt0aGlzLiRlbWl0KCJzZWxlY3QtcmFuZ2UiLGUsdCl9LHNldE1heFNlbGVjdGlvblJhbmdlOmZ1bmN0aW9uKGUsdCl7dGhpcy4kZW1pdCgic2VsZWN0LXJhbmdlIixlKzExLHQrMTEpfSxoYW5kbGVDb25maXJtOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSx0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0saT10aGlzLiRyZWZzLm1pblNwaW5uZXIuc2VsZWN0YWJsZVJhbmdlLG49dGhpcy4kcmVmcy5tYXhTcGlubmVyLnNlbGVjdGFibGVSYW5nZTt0aGlzLm1pblRpbWU9KDAscy5saW1pdFJhbmdlKSh0aGlzLm1pblRpbWUsaSksdGhpcy5tYXhUaW1lPSgwLHMubGltaXRSYW5nZSkodGhpcy5tYXhUaW1lLG4pLHR8fHRoaXMuJGVtaXQoInBpY2siLFt0aGlzLm1pblRpbWUsdGhpcy5tYXhUaW1lXSxlLHQpfSxhanVzdFNjcm9sbFRvcDpmdW5jdGlvbigpe3RoaXMuJHJlZnMubWluU3Bpbm5lci5hanVzdFNjcm9sbFRvcCgpLHRoaXMuJHJlZnMubWF4U3Bpbm5lci5hanVzdFNjcm9sbFRvcCgpfX0sbW91bnRlZDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtyZXR1cm4gZS5oYW5kbGVDb25maXJtKCEwLCEwKX0pfX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxpPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIGkoInRyYW5zaXRpb24iLHthdHRyczp7bmFtZToiZWwtem9vbS1pbi10b3AifSxvbjp7ImJlZm9yZS1lbnRlciI6ZS5wYW5lbENyZWF0ZWQsImFmdGVyLWxlYXZlIjpmdW5jdGlvbih0KXtlLiRlbWl0KCJkb2Rlc3Ryb3kiKX19fSxbaSgiZGl2Iix7ZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6ZS52aXNpYmxlLGV4cHJlc3Npb246InZpc2libGUifV0sc3RhdGljQ2xhc3M6ImVsLXRpbWUtcmFuZ2UtcGlja2VyIGVsLXBpY2tlci1wYW5lbCIsY2xhc3M6ZS5wb3BwZXJDbGFzcyxzdHlsZTp7d2lkdGg6ZS53aWR0aCsicHgifX0sW2koImRpdiIse3N0YXRpY0NsYXNzOiJlbC10aW1lLXJhbmdlLXBpY2tlcl9fY29udGVudCJ9LFtpKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtdGltZS1yYW5nZS1waWNrZXJfX2NlbGwifSxbaSgiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXRpbWUtcmFuZ2UtcGlja2VyX19oZWFkZXIifSxbZS5fdihlLl9zKGUudCgiZWwuZGF0ZXBpY2tlci5zdGFydFRpbWUiKSkpXSksaSgiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXRpbWUtcmFuZ2UtcGlja2VyX19ib2R5IGVsLXRpbWUtcGFuZWxfX2NvbnRlbnQiLGNsYXNzOnsiaGFzLXNlY29uZHMiOmUuc2hvd1NlY29uZHN9fSxbaSgidGltZS1zcGlubmVyIix7cmVmOiJtaW5TcGlubmVyIixhdHRyczp7InNob3ctc2Vjb25kcyI6ZS5zaG93U2Vjb25kcyxob3VyczplLm1pbkhvdXJzLG1pbnV0ZXM6ZS5taW5NaW51dGVzLHNlY29uZHM6ZS5taW5TZWNvbmRzfSxvbjp7Y2hhbmdlOmUuaGFuZGxlTWluQ2hhbmdlLCJzZWxlY3QtcmFuZ2UiOmUuc2V0TWluU2VsZWN0aW9uUmFuZ2V9fSldLDEpXSksaSgiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXRpbWUtcmFuZ2UtcGlja2VyX19jZWxsIn0sW2koImRpdiIse3N0YXRpY0NsYXNzOiJlbC10aW1lLXJhbmdlLXBpY2tlcl9faGVhZGVyIn0sW2UuX3YoZS5fcyhlLnQoImVsLmRhdGVwaWNrZXIuZW5kVGltZSIpKSldKSxpKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtdGltZS1yYW5nZS1waWNrZXJfX2JvZHkgZWwtdGltZS1wYW5lbF9fY29udGVudCIsY2xhc3M6eyJoYXMtc2Vjb25kcyI6ZS5zaG93U2Vjb25kc319LFtpKCJ0aW1lLXNwaW5uZXIiLHtyZWY6Im1heFNwaW5uZXIiLGF0dHJzOnsic2hvdy1zZWNvbmRzIjplLnNob3dTZWNvbmRzLGhvdXJzOmUubWF4SG91cnMsbWludXRlczplLm1heE1pbnV0ZXMsc2Vjb25kczplLm1heFNlY29uZHN9LG9uOntjaGFuZ2U6ZS5oYW5kbGVNYXhDaGFuZ2UsInNlbGVjdC1yYW5nZSI6ZS5zZXRNYXhTZWxlY3Rpb25SYW5nZX19KV0sMSldKV0pLGkoImRpdiIse3N0YXRpY0NsYXNzOiJlbC10aW1lLXBhbmVsX19mb290ZXIifSxbaSgiYnV0dG9uIix7c3RhdGljQ2xhc3M6ImVsLXRpbWUtcGFuZWxfX2J0biBjYW5jZWwiLGF0dHJzOnt0eXBlOiJidXR0b24ifSxvbjp7Y2xpY2s6ZnVuY3Rpb24odCl7ZS5oYW5kbGVDYW5jZWwoKX19fSxbZS5fdihlLl9zKGUudCgiZWwuZGF0ZXBpY2tlci5jYW5jZWwiKSkpXSksaSgiYnV0dG9uIix7c3RhdGljQ2xhc3M6ImVsLXRpbWUtcGFuZWxfX2J0biBjb25maXJtIixhdHRyczp7dHlwZToiYnV0dG9uIixkaXNhYmxlZDplLmJ0bkRpc2FibGVkfSxvbjp7Y2xpY2s6ZnVuY3Rpb24odCl7ZS5oYW5kbGVDb25maXJtKCl9fX0sW2UuX3YoZS5fcyhlLnQoImVsLmRhdGVwaWNrZXIuY29uZmlybSIpKSldKV0pXSldKX0sc3RhdGljUmVuZGVyRm5zOltdfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX10Ll9fZXNNb2R1bGU9ITA7dmFyIHM9aSgxODgpLG89bihzKSxhPWkoMTkxKSxyPW4oYSksbD1pKDE1KSx1PW4obCk7dS5kZWZhdWx0LmRpcmVjdGl2ZSgicG9wb3ZlciIsci5kZWZhdWx0KSxvLmRlZmF1bHQuaW5zdGFsbD1mdW5jdGlvbihlKXtlLmRpcmVjdGl2ZSgicG9wb3ZlciIsci5kZWZhdWx0KSxlLmNvbXBvbmVudChvLmRlZmF1bHQubmFtZSxvLmRlZmF1bHQpfSxvLmRlZmF1bHQuZGlyZWN0aXZlPXIuZGVmYXVsdCx0LmRlZmF1bHQ9by5kZWZhdWx0fSxmdW5jdGlvbihlLHQsaSl7dmFyIG49aSg1KShpKDE4OSksaSgxOTApLG51bGwsbnVsbCk7ZS5leHBvcnRzPW4uZXhwb3J0c30sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX10Ll9fZXNNb2R1bGU9ITA7dmFyIHM9aSgyNyksbz1uKHMpLGE9aSgzMCk7dC5kZWZhdWx0PXtuYW1lOiJFbFBvcG92ZXIiLG1peGluczpbby5kZWZhdWx0XSxwcm9wczp7dHJpZ2dlcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiY2xpY2siLHZhbGlkYXRvcjpmdW5jdGlvbihlKXtyZXR1cm5bImNsaWNrIiwiZm9jdXMiLCJob3ZlciIsIm1hbnVhbCJdLmluZGV4T2YoZSk+LTF9fSx0aXRsZTpTdHJpbmcsZGlzYWJsZWQ6Qm9vbGVhbixjb250ZW50OlN0cmluZyxyZWZlcmVuY2U6e30scG9wcGVyQ2xhc3M6U3RyaW5nLHdpZHRoOnt9LHZpc2libGVBcnJvdzp7ZGVmYXVsdDohMH0sdHJhbnNpdGlvbjp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiZmFkZS1pbi1saW5lYXIifX0sd2F0Y2g6e3Nob3dQb3BwZXI6ZnVuY3Rpb24oZSx0KXtlP3RoaXMuJGVtaXQoInNob3ciKTp0aGlzLiRlbWl0KCJoaWRlIil9fSxtb3VudGVkOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yZWZlcmVuY2V8fHRoaXMuJHJlZnMucmVmZXJlbmNlLHQ9dGhpcy5wb3BwZXJ8fHRoaXMuJHJlZnMucG9wcGVyO2lmKCFlJiZ0aGlzLiRzbG90cy5yZWZlcmVuY2UmJnRoaXMuJHNsb3RzLnJlZmVyZW5jZVswXSYmKGU9dGhpcy5yZWZlcmVuY2VFbG09dGhpcy4kc2xvdHMucmVmZXJlbmNlWzBdLmVsbSksImNsaWNrIj09PXRoaXMudHJpZ2dlcikoMCxhLm9uKShlLCJjbGljayIsdGhpcy5kb1RvZ2dsZSksKDAsYS5vbikoZG9jdW1lbnQsImNsaWNrIix0aGlzLmhhbmRsZURvY3VtZW50Q2xpY2spO2Vsc2UgaWYoImhvdmVyIj09PXRoaXMudHJpZ2dlcikoMCxhLm9uKShlLCJtb3VzZWVudGVyIix0aGlzLmhhbmRsZU1vdXNlRW50ZXIpLCgwLGEub24pKHQsIm1vdXNlZW50ZXIiLHRoaXMuaGFuZGxlTW91c2VFbnRlciksKDAsYS5vbikoZSwibW91c2VsZWF2ZSIsdGhpcy5oYW5kbGVNb3VzZUxlYXZlKSwoMCxhLm9uKSh0LCJtb3VzZWxlYXZlIix0aGlzLmhhbmRsZU1vdXNlTGVhdmUpO2Vsc2UgaWYoImZvY3VzIj09PXRoaXMudHJpZ2dlcil7dmFyIGk9ITE7aWYoW10uc2xpY2UuY2FsbChlLmNoaWxkcmVuKS5sZW5ndGgpZm9yKHZhciBuPWUuY2hpbGROb2RlcyxzPW4ubGVuZ3RoLG89MDtvPHM7bysrKWlmKCJJTlBVVCI9PT1uW29dLm5vZGVOYW1lfHwiVEVYVEFSRUEiPT09bltvXS5ub2RlTmFtZSl7KDAsYS5vbikobltvXSwiZm9jdXMiLHRoaXMuZG9TaG93KSwoMCxhLm9uKShuW29dLCJibHVyIix0aGlzLmRvQ2xvc2UpLGk9ITA7YnJlYWt9aWYoaSlyZXR1cm47IklOUFVUIj09PWUubm9kZU5hbWV8fCJURVhUQVJFQSI9PT1lLm5vZGVOYW1lPygoMCxhLm9uKShlLCJmb2N1cyIsdGhpcy5kb1Nob3cpLCgwLGEub24pKGUsImJsdXIiLHRoaXMuZG9DbG9zZSkpOigoMCxhLm9uKShlLCJtb3VzZWRvd24iLHRoaXMuZG9TaG93KSwoMCxhLm9uKShlLCJtb3VzZXVwIix0aGlzLmRvQ2xvc2UpKX19LG1ldGhvZHM6e2RvVG9nZ2xlOmZ1bmN0aW9uKCl7dGhpcy5zaG93UG9wcGVyPSF0aGlzLnNob3dQb3BwZXJ9LGRvU2hvdzpmdW5jdGlvbigpe3RoaXMuc2hvd1BvcHBlcj0hMH0sZG9DbG9zZTpmdW5jdGlvbigpe3RoaXMuc2hvd1BvcHBlcj0hMX0saGFuZGxlTW91c2VFbnRlcjpmdW5jdGlvbigpe3RoaXMuc2hvd1BvcHBlcj0hMCxjbGVhclRpbWVvdXQodGhpcy5fdGltZXIpfSxoYW5kbGVNb3VzZUxlYXZlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLl90aW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5zaG93UG9wcGVyPSExfSwyMDApfSxoYW5kbGVEb2N1bWVudENsaWNrOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucmVmZXJlbmNlfHx0aGlzLiRyZWZzLnJlZmVyZW5jZSxpPXRoaXMucG9wcGVyfHx0aGlzLiRyZWZzLnBvcHBlcjshdCYmdGhpcy4kc2xvdHMucmVmZXJlbmNlJiZ0aGlzLiRzbG90cy5yZWZlcmVuY2VbMF0mJih0PXRoaXMucmVmZXJlbmNlRWxtPXRoaXMuJHNsb3RzLnJlZmVyZW5jZVswXS5lbG0pLHRoaXMuJGVsJiZ0JiYhdGhpcy4kZWwuY29udGFpbnMoZS50YXJnZXQpJiYhdC5jb250YWlucyhlLnRhcmdldCkmJmkmJiFpLmNvbnRhaW5zKGUudGFyZ2V0KSYmKHRoaXMuc2hvd1BvcHBlcj0hMSl9fSxkZXN0cm95ZWQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnJlZmVyZW5jZTsoMCxhLm9mZikoZSwiY2xpY2siLHRoaXMuZG9Ub2dnbGUpLCgwLGEub2ZmKShlLCJtb3VzZXVwIix0aGlzLmRvQ2xvc2UpLCgwLGEub2ZmKShlLCJtb3VzZWRvd24iLHRoaXMuZG9TaG93KSwoMCxhLm9mZikoZSwiZm9jdXMiLHRoaXMuZG9TaG93KSwoMCxhLm9mZikoZSwiYmx1ciIsdGhpcy5kb0Nsb3NlKSwoMCxhLm9mZikoZSwibW91c2VsZWF2ZSIsdGhpcy5oYW5kbGVNb3VzZUxlYXZlKSwoMCxhLm9mZikoZSwibW91c2VlbnRlciIsdGhpcy5oYW5kbGVNb3VzZUVudGVyKSwoMCxhLm9mZikoZG9jdW1lbnQsImNsaWNrIix0aGlzLmhhbmRsZURvY3VtZW50Q2xpY2spfX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxpPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIGkoInNwYW4iLFtpKCJ0cmFuc2l0aW9uIix7YXR0cnM6e25hbWU6ZS50cmFuc2l0aW9ufSxvbjp7ImFmdGVyLWxlYXZlIjplLmRvRGVzdHJveX19LFtpKCJkaXYiLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZTohZS5kaXNhYmxlZCYmZS5zaG93UG9wcGVyLGV4cHJlc3Npb246IiFkaXNhYmxlZCAmJiBzaG93UG9wcGVyIn1dLHJlZjoicG9wcGVyIixzdGF0aWNDbGFzczoiZWwtcG9wb3ZlciIsY2xhc3M6W2UucG9wcGVyQ2xhc3NdLHN0eWxlOnt3aWR0aDplLndpZHRoKyJweCJ9fSxbZS50aXRsZT9pKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtcG9wb3Zlcl9fdGl0bGUiLGRvbVByb3BzOnt0ZXh0Q29udGVudDplLl9zKGUudGl0bGUpfX0pOmUuX2UoKSxlLl90KCJkZWZhdWx0IixbZS5fdihlLl9zKGUuY29udGVudCkpXSldLDIpXSksZS5fdCgicmVmZXJlbmNlIildLDIpfSxzdGF0aWNSZW5kZXJGbnM6W119fSxmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0Ijt0Ll9fZXNNb2R1bGU9ITAsdC5kZWZhdWx0PXtiaW5kOmZ1bmN0aW9uKGUsdCxpKXtpLmNvbnRleHQuJHJlZnNbdC5hcmddLiRyZWZzLnJlZmVyZW5jZT1lfX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5fX2VzTW9kdWxlPSEwO3ZhciBzPWkoMTkzKSxvPW4ocyk7dC5kZWZhdWx0PW8uZGVmYXVsdH0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX10Ll9fZXNNb2R1bGU9ITAsdC5NZXNzYWdlQm94PXZvaWQgMDt2YXIgcz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZTsKfSxvPWkoMTUpLGE9bihvKSxyPWkoMTk0KSxsPW4ociksdT1pKDIzKSxjPW4odSksZD17dGl0bGU6dm9pZCAwLG1lc3NhZ2U6IiIsdHlwZToiIixzaG93SW5wdXQ6ITEsc2hvd0Nsb3NlOiEwLG1vZGFsRmFkZTohMCxsb2NrU2Nyb2xsOiEwLGNsb3NlT25DbGlja01vZGFsOiEwLGNsb3NlT25QcmVzc0VzY2FwZTohMCxpbnB1dFZhbHVlOm51bGwsaW5wdXRQbGFjZWhvbGRlcjoiIixpbnB1dFBhdHRlcm46bnVsbCxpbnB1dFZhbGlkYXRvcjpudWxsLGlucHV0RXJyb3JNZXNzYWdlOiIiLHNob3dDb25maXJtQnV0dG9uOiEwLHNob3dDYW5jZWxCdXR0b246ITEsY29uZmlybUJ1dHRvblBvc2l0aW9uOiJyaWdodCIsY29uZmlybUJ1dHRvbkhpZ2hsaWdodDohMSxjYW5jZWxCdXR0b25IaWdobGlnaHQ6ITEsY29uZmlybUJ1dHRvblRleHQ6IiIsY2FuY2VsQnV0dG9uVGV4dDoiIixjb25maXJtQnV0dG9uQ2xhc3M6IiIsY2FuY2VsQnV0dG9uQ2xhc3M6IiIsY3VzdG9tQ2xhc3M6IiIsYmVmb3JlQ2xvc2U6bnVsbH0saD1hLmRlZmF1bHQuZXh0ZW5kKGwuZGVmYXVsdCksZj12b2lkIDAscD12b2lkIDAsbT1bXSx2PWZ1bmN0aW9uKGUpe2lmKGYpe3ZhciB0PWYuY2FsbGJhY2s7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQmJihwLnNob3dJbnB1dD90KHAuaW5wdXRWYWx1ZSxlKTp0KGUpKSxmLnJlc29sdmUpe3ZhciBpPWYub3B0aW9ucy4kdHlwZTsiY29uZmlybSI9PT1pfHwicHJvbXB0Ij09PWk/ImNvbmZpcm0iPT09ZT9wLnNob3dJbnB1dD9mLnJlc29sdmUoe3ZhbHVlOnAuaW5wdXRWYWx1ZSxhY3Rpb246ZX0pOmYucmVzb2x2ZShlKToiY2FuY2VsIj09PWUmJmYucmVqZWN0JiZmLnJlamVjdChlKTpmLnJlc29sdmUoZSl9fX0sZz1mdW5jdGlvbigpe3A9bmV3IGgoe2VsOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpfSkscC5jYWxsYmFjaz12fSx5PWZ1bmN0aW9uIGUoKXtwfHxnKCkscC5hY3Rpb249IiIscC52YWx1ZSYmIXAuY2xvc2VUaW1lcnx8bS5sZW5ndGg+MCYmIWZ1bmN0aW9uKCl7Zj1tLnNoaWZ0KCk7dmFyIHQ9Zi5vcHRpb25zO2Zvcih2YXIgaSBpbiB0KXQuaGFzT3duUHJvcGVydHkoaSkmJihwW2ldPXRbaV0pO3ZvaWQgMD09PXQuY2FsbGJhY2smJihwLmNhbGxiYWNrPXYpO3ZhciBuPXAuY2FsbGJhY2s7cC5jYWxsYmFjaz1mdW5jdGlvbih0LGkpe24odCxpKSxlKCl9LFsibW9kYWwiLCJzaG93Q2xvc2UiLCJjbG9zZU9uQ2xpY2tNb2RhbCIsImNsb3NlT25QcmVzc0VzY2FwZSJdLmZvckVhY2goZnVuY3Rpb24oZSl7dm9pZCAwPT09cFtlXSYmKHBbZV09ITApfSksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChwLiRlbCksYS5kZWZhdWx0Lm5leHRUaWNrKGZ1bmN0aW9uKCl7cC52YWx1ZT0hMH0pfSgpfSxiPWZ1bmN0aW9uIGUodCxpKXtpZighYS5kZWZhdWx0LnByb3RvdHlwZS4kaXNTZXJ2ZXIpcmV0dXJuInN0cmluZyI9PXR5cGVvZiB0Pyh0PXttZXNzYWdlOnR9LGFyZ3VtZW50c1sxXSYmKHQudGl0bGU9YXJndW1lbnRzWzFdKSxhcmd1bWVudHNbMl0mJih0LnR5cGU9YXJndW1lbnRzWzJdKSk6dC5jYWxsYmFjayYmIWkmJihpPXQuY2FsbGJhY2spLCJ1bmRlZmluZWQiIT10eXBlb2YgUHJvbWlzZT9uZXcgUHJvbWlzZShmdW5jdGlvbihuLHMpe20ucHVzaCh7b3B0aW9uczooMCxjLmRlZmF1bHQpKHt9LGQsZS5kZWZhdWx0cyx0KSxjYWxsYmFjazppLHJlc29sdmU6bixyZWplY3Q6c30pLHkoKX0pOihtLnB1c2goe29wdGlvbnM6KDAsYy5kZWZhdWx0KSh7fSxkLGUuZGVmYXVsdHMsdCksY2FsbGJhY2s6aX0pLHZvaWQgeSgpKX07Yi5zZXREZWZhdWx0cz1mdW5jdGlvbihlKXtiLmRlZmF1bHRzPWV9LGIuYWxlcnQ9ZnVuY3Rpb24oZSx0LGkpe3JldHVybiJvYmplY3QiPT09KCJ1bmRlZmluZWQiPT10eXBlb2YgdD8idW5kZWZpbmVkIjpzKHQpKSYmKGk9dCx0PSIiKSxiKCgwLGMuZGVmYXVsdCkoe3RpdGxlOnQsbWVzc2FnZTplLCR0eXBlOiJhbGVydCIsY2xvc2VPblByZXNzRXNjYXBlOiExLGNsb3NlT25DbGlja01vZGFsOiExfSxpKSl9LGIuY29uZmlybT1mdW5jdGlvbihlLHQsaSl7cmV0dXJuIm9iamVjdCI9PT0oInVuZGVmaW5lZCI9PXR5cGVvZiB0PyJ1bmRlZmluZWQiOnModCkpJiYoaT10LHQ9IiIpLGIoKDAsYy5kZWZhdWx0KSh7dGl0bGU6dCxtZXNzYWdlOmUsJHR5cGU6ImNvbmZpcm0iLHNob3dDYW5jZWxCdXR0b246ITB9LGkpKX0sYi5wcm9tcHQ9ZnVuY3Rpb24oZSx0LGkpe3JldHVybiJvYmplY3QiPT09KCJ1bmRlZmluZWQiPT10eXBlb2YgdD8idW5kZWZpbmVkIjpzKHQpKSYmKGk9dCx0PSIiKSxiKCgwLGMuZGVmYXVsdCkoe3RpdGxlOnQsbWVzc2FnZTplLHNob3dDYW5jZWxCdXR0b246ITAsc2hvd0lucHV0OiEwLCR0eXBlOiJwcm9tcHQifSxpKSl9LGIuY2xvc2U9ZnVuY3Rpb24oKXtwLnZhbHVlPSExLG09W10sZj1udWxsfSx0LmRlZmF1bHQ9Yix0Lk1lc3NhZ2VCb3g9Yn0sZnVuY3Rpb24oZSx0LGkpe3ZhciBuPWkoNSkoaSgxOTUpLGkoMTk2KSxudWxsLG51bGwpO2UuZXhwb3J0cz1uLmV4cG9ydHN9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5fX2VzTW9kdWxlPSEwO3ZhciBzPWkoMjgpLG89bihzKSxhPWkoMTIpLHI9bihhKSxsPWkoMTkpLHU9bihsKSxjPWkoNjUpLGQ9bihjKSxoPWkoMzApLGY9aSgxMykscD17c3VjY2VzczoiY2lyY2xlLWNoZWNrIixpbmZvOiJpbmZvcm1hdGlvbiIsd2FybmluZzoid2FybmluZyIsZXJyb3I6ImNpcmNsZS1jcm9zcyJ9O3QuZGVmYXVsdD17bWl4aW5zOltvLmRlZmF1bHQsci5kZWZhdWx0XSxwcm9wczp7bW9kYWw6e2RlZmF1bHQ6ITB9LGxvY2tTY3JvbGw6e2RlZmF1bHQ6ITB9LHNob3dDbG9zZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITB9LGNsb3NlT25DbGlja01vZGFsOntkZWZhdWx0OiEwfSxjbG9zZU9uUHJlc3NFc2NhcGU6e2RlZmF1bHQ6ITB9fSxjb21wb25lbnRzOntFbElucHV0OnUuZGVmYXVsdCxFbEJ1dHRvbjpkLmRlZmF1bHR9LGNvbXB1dGVkOnt0eXBlQ2xhc3M6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50eXBlJiZwW3RoaXMudHlwZV0/ImVsLWljb24tIitwW3RoaXMudHlwZV06IiJ9LGNvbmZpcm1CdXR0b25DbGFzc2VzOmZ1bmN0aW9uKCl7cmV0dXJuImVsLWJ1dHRvbi0tcHJpbWFyeSAiK3RoaXMuY29uZmlybUJ1dHRvbkNsYXNzfSxjYW5jZWxCdXR0b25DbGFzc2VzOmZ1bmN0aW9uKCl7cmV0dXJuIiIrdGhpcy5jYW5jZWxCdXR0b25DbGFzc319LG1ldGhvZHM6e2dldFNhZmVDbG9zZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLnVpZDtyZXR1cm4gZnVuY3Rpb24oKXtlLiRuZXh0VGljayhmdW5jdGlvbigpe3Q9PT1lLnVpZCYmZS5kb0Nsb3NlKCl9KX19LGRvQ2xvc2U6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMudmFsdWUmJih0aGlzLnZhbHVlPSExLHRoaXMuX2Nsb3Npbmc9ITAsdGhpcy5vbkNsb3NlJiZ0aGlzLm9uQ2xvc2UoKSx0aGlzLmxvY2tTY3JvbGwmJnNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLm1vZGFsJiYiaGlkZGVuIiE9PWUuYm9keU92ZXJmbG93JiYoZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdz1lLmJvZHlPdmVyZmxvdyxkb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmdSaWdodD1lLmJvZHlQYWRkaW5nUmlnaHQpLGUuYm9keU92ZXJmbG93PW51bGwsZS5ib2R5UGFkZGluZ1JpZ2h0PW51bGx9LDIwMCksdGhpcy5vcGVuZWQ9ITEsdGhpcy50cmFuc2l0aW9ufHx0aGlzLmRvQWZ0ZXJDbG9zZSgpLHRoaXMuYWN0aW9uJiZ0aGlzLmNhbGxiYWNrKHRoaXMuYWN0aW9uLHRoaXMpKX0saGFuZGxlV3JhcHBlckNsaWNrOmZ1bmN0aW9uKCl7dGhpcy5jbG9zZU9uQ2xpY2tNb2RhbCYmKHRoaXMuYWN0aW9uPSIiLHRoaXMuZG9DbG9zZSgpKX0saGFuZGxlQWN0aW9uOmZ1bmN0aW9uKGUpeygicHJvbXB0IiE9PXRoaXMuJHR5cGV8fCJjb25maXJtIiE9PWV8fHRoaXMudmFsaWRhdGUoKSkmJih0aGlzLmFjdGlvbj1lLCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLmJlZm9yZUNsb3NlPyh0aGlzLmNsb3NlPXRoaXMuZ2V0U2FmZUNsb3NlKCksdGhpcy5iZWZvcmVDbG9zZShlLHRoaXMsdGhpcy5jbG9zZSkpOnRoaXMuZG9DbG9zZSgpKX0sdmFsaWRhdGU6ZnVuY3Rpb24oKXtpZigicHJvbXB0Ij09PXRoaXMuJHR5cGUpe3ZhciBlPXRoaXMuaW5wdXRQYXR0ZXJuO2lmKGUmJiFlLnRlc3QodGhpcy5pbnB1dFZhbHVlfHwiIikpcmV0dXJuIHRoaXMuZWRpdG9yRXJyb3JNZXNzYWdlPXRoaXMuaW5wdXRFcnJvck1lc3NhZ2V8fCgwLGYudCkoImVsLm1lc3NhZ2Vib3guZXJyb3IiKSwoMCxoLmFkZENsYXNzKSh0aGlzLiRyZWZzLmlucHV0LiRlbC5xdWVyeVNlbGVjdG9yKCJpbnB1dCIpLCJpbnZhbGlkIiksITE7dmFyIHQ9dGhpcy5pbnB1dFZhbGlkYXRvcjtpZigiZnVuY3Rpb24iPT10eXBlb2YgdCl7dmFyIGk9dCh0aGlzLmlucHV0VmFsdWUpO2lmKGk9PT0hMSlyZXR1cm4gdGhpcy5lZGl0b3JFcnJvck1lc3NhZ2U9dGhpcy5pbnB1dEVycm9yTWVzc2FnZXx8KDAsZi50KSgiZWwubWVzc2FnZWJveC5lcnJvciIpLCgwLGguYWRkQ2xhc3MpKHRoaXMuJHJlZnMuaW5wdXQuJGVsLnF1ZXJ5U2VsZWN0b3IoImlucHV0IiksImludmFsaWQiKSwhMTtpZigic3RyaW5nIj09dHlwZW9mIGkpcmV0dXJuIHRoaXMuZWRpdG9yRXJyb3JNZXNzYWdlPWksITF9fXJldHVybiB0aGlzLmVkaXRvckVycm9yTWVzc2FnZT0iIiwoMCxoLnJlbW92ZUNsYXNzKSh0aGlzLiRyZWZzLmlucHV0LiRlbC5xdWVyeVNlbGVjdG9yKCJpbnB1dCIpLCJpbnZhbGlkIiksITB9fSx3YXRjaDp7aW5wdXRWYWx1ZTp7aW1tZWRpYXRlOiEwLGhhbmRsZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpczt0aGlzLiRuZXh0VGljayhmdW5jdGlvbihpKXsicHJvbXB0Ij09PXQuJHR5cGUmJm51bGwhPT1lJiZ0LnZhbGlkYXRlKCl9KX19LHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7ZSYmdGhpcy51aWQrKywiYWxlcnQiIT09dGhpcy4kdHlwZSYmImNvbmZpcm0iIT09dGhpcy4kdHlwZXx8dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXt0LiRyZWZzLmNvbmZpcm0uJGVsLmZvY3VzKCl9KSwicHJvbXB0Ij09PXRoaXMuJHR5cGUmJihlP3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0LiRyZWZzLmlucHV0JiZ0LiRyZWZzLmlucHV0LiRlbCYmdC4kcmVmcy5pbnB1dC4kZWwucXVlcnlTZWxlY3RvcigiaW5wdXQiKS5mb2N1cygpfSw1MDApOih0aGlzLmVkaXRvckVycm9yTWVzc2FnZT0iIiwoMCxoLnJlbW92ZUNsYXNzKSh0aGlzLiRyZWZzLmlucHV0LiRlbC5xdWVyeVNlbGVjdG9yKCJpbnB1dCIpLCJpbnZhbGlkIikpKX19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57dWlkOjEsdGl0bGU6dm9pZCAwLG1lc3NhZ2U6IiIsdHlwZToiIixjdXN0b21DbGFzczoiIixzaG93SW5wdXQ6ITEsaW5wdXRWYWx1ZTpudWxsLGlucHV0UGxhY2Vob2xkZXI6IiIsaW5wdXRQYXR0ZXJuOm51bGwsaW5wdXRWYWxpZGF0b3I6bnVsbCxpbnB1dEVycm9yTWVzc2FnZToiIixzaG93Q29uZmlybUJ1dHRvbjohMCxzaG93Q2FuY2VsQnV0dG9uOiExLGFjdGlvbjoiIixjb25maXJtQnV0dG9uVGV4dDoiIixjYW5jZWxCdXR0b25UZXh0OiIiLGNvbmZpcm1CdXR0b25Mb2FkaW5nOiExLGNhbmNlbEJ1dHRvbkxvYWRpbmc6ITEsY29uZmlybUJ1dHRvbkNsYXNzOiIiLGNvbmZpcm1CdXR0b25EaXNhYmxlZDohMSxjYW5jZWxCdXR0b25DbGFzczoiIixlZGl0b3JFcnJvck1lc3NhZ2U6bnVsbCxjYWxsYmFjazpudWxsfX19fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuJGNyZWF0ZUVsZW1lbnQsaT1lLl9zZWxmLl9jfHx0O3JldHVybiBpKCJ0cmFuc2l0aW9uIix7YXR0cnM6e25hbWU6Im1zZ2JveC1mYWRlIn19LFtpKCJkaXYiLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZTplLnZhbHVlLGV4cHJlc3Npb246InZhbHVlIn1dLHN0YXRpY0NsYXNzOiJlbC1tZXNzYWdlLWJveF9fd3JhcHBlciIsb246e2NsaWNrOmZ1bmN0aW9uKHQpe3QudGFyZ2V0PT09dC5jdXJyZW50VGFyZ2V0JiZlLmhhbmRsZVdyYXBwZXJDbGljayh0KX19fSxbaSgiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLW1lc3NhZ2UtYm94IixjbGFzczplLmN1c3RvbUNsYXNzfSxbdm9pZCAwIT09ZS50aXRsZT9pKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtbWVzc2FnZS1ib3hfX2hlYWRlciJ9LFtpKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtbWVzc2FnZS1ib3hfX3RpdGxlIn0sW2UuX3YoZS5fcyhlLnRpdGxlfHxlLnQoImVsLm1lc3NhZ2Vib3gudGl0bGUiKSkpXSksZS5zaG93Q2xvc2U/aSgiaSIse3N0YXRpY0NsYXNzOiJlbC1tZXNzYWdlLWJveF9fY2xvc2UgZWwtaWNvbi1jbG9zZSIsb246e2NsaWNrOmZ1bmN0aW9uKHQpe2UuaGFuZGxlQWN0aW9uKCJjYW5jZWwiKX19fSk6ZS5fZSgpXSk6ZS5fZSgpLCIiIT09ZS5tZXNzYWdlP2koImRpdiIse3N0YXRpY0NsYXNzOiJlbC1tZXNzYWdlLWJveF9fY29udGVudCJ9LFtpKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtbWVzc2FnZS1ib3hfX3N0YXR1cyIsY2xhc3M6W2UudHlwZUNsYXNzXX0pLGkoImRpdiIse3N0YXRpY0NsYXNzOiJlbC1tZXNzYWdlLWJveF9fbWVzc2FnZSIsc3R5bGU6eyJtYXJnaW4tbGVmdCI6ZS50eXBlQ2xhc3M/IjUwcHgiOiIwIn19LFtpKCJwIixbZS5fdihlLl9zKGUubWVzc2FnZSkpXSldKSxpKCJkaXYiLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZTplLnNob3dJbnB1dCxleHByZXNzaW9uOiJzaG93SW5wdXQifV0sc3RhdGljQ2xhc3M6ImVsLW1lc3NhZ2UtYm94X19pbnB1dCJ9LFtpKCJlbC1pbnB1dCIse2RpcmVjdGl2ZXM6W3tuYW1lOiJtb2RlbCIscmF3TmFtZToidi1tb2RlbCIsdmFsdWU6ZS5pbnB1dFZhbHVlLGV4cHJlc3Npb246ImlucHV0VmFsdWUifV0scmVmOiJpbnB1dCIsYXR0cnM6e3BsYWNlaG9sZGVyOmUuaW5wdXRQbGFjZWhvbGRlcn0sZG9tUHJvcHM6e3ZhbHVlOmUuaW5wdXRWYWx1ZX0sb246e2lucHV0OmZ1bmN0aW9uKHQpe2UuaW5wdXRWYWx1ZT10fX0sbmF0aXZlT246e2tleXVwOmZ1bmN0aW9uKHQpe2UuX2sodC5rZXlDb2RlLCJlbnRlciIsMTMpfHxlLmhhbmRsZUFjdGlvbigiY29uZmlybSIpfX19KSxpKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtbWVzc2FnZS1ib3hfX2Vycm9ybXNnIixzdHlsZTp7dmlzaWJpbGl0eTplLmVkaXRvckVycm9yTWVzc2FnZT8idmlzaWJsZSI6ImhpZGRlbiJ9fSxbZS5fdihlLl9zKGUuZWRpdG9yRXJyb3JNZXNzYWdlKSldKV0sMSldKTplLl9lKCksaSgiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLW1lc3NhZ2UtYm94X19idG5zIn0sW2koImVsLWJ1dHRvbiIse2RpcmVjdGl2ZXM6W3tuYW1lOiJzaG93IixyYXdOYW1lOiJ2LXNob3ciLHZhbHVlOmUuc2hvd0NhbmNlbEJ1dHRvbixleHByZXNzaW9uOiJzaG93Q2FuY2VsQnV0dG9uIn1dLGNsYXNzOltlLmNhbmNlbEJ1dHRvbkNsYXNzZXNdLGF0dHJzOntsb2FkaW5nOmUuY2FuY2VsQnV0dG9uTG9hZGluZ30sbmF0aXZlT246e2NsaWNrOmZ1bmN0aW9uKHQpe2UuaGFuZGxlQWN0aW9uKCJjYW5jZWwiKX19fSxbZS5fdigiXG4gICAgICAgICAgIitlLl9zKGUuY2FuY2VsQnV0dG9uVGV4dHx8ZS50KCJlbC5tZXNzYWdlYm94LmNhbmNlbCIpKSsiXG4gICAgICAgICIpXSksaSgiZWwtYnV0dG9uIix7ZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6ZS5zaG93Q29uZmlybUJ1dHRvbixleHByZXNzaW9uOiJzaG93Q29uZmlybUJ1dHRvbiJ9XSxyZWY6ImNvbmZpcm0iLGNsYXNzOltlLmNvbmZpcm1CdXR0b25DbGFzc2VzXSxhdHRyczp7bG9hZGluZzplLmNvbmZpcm1CdXR0b25Mb2FkaW5nfSxuYXRpdmVPbjp7Y2xpY2s6ZnVuY3Rpb24odCl7ZS5oYW5kbGVBY3Rpb24oImNvbmZpcm0iKX19fSxbZS5fdigiXG4gICAgICAgICAgIitlLl9zKGUuY29uZmlybUJ1dHRvblRleHR8fGUudCgiZWwubWVzc2FnZWJveC5jb25maXJtIikpKyJcbiAgICAgICAgIildKV0sMSldKV0pXSl9LHN0YXRpY1JlbmRlckZuczpbXX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5fX2VzTW9kdWxlPSEwO3ZhciBzPWkoMTk4KSxvPW4ocyk7by5kZWZhdWx0Lmluc3RhbGw9ZnVuY3Rpb24oZSl7ZS5jb21wb25lbnQoby5kZWZhdWx0Lm5hbWUsby5kZWZhdWx0KX0sdC5kZWZhdWx0PW8uZGVmYXVsdH0sZnVuY3Rpb24oZSx0LGkpe3ZhciBuPWkoNSkoaSgxOTkpLGkoMjAwKSxudWxsLG51bGwpO2UuZXhwb3J0cz1uLmV4cG9ydHN9LGZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO3QuX19lc01vZHVsZT0hMCx0LmRlZmF1bHQ9e25hbWU6IkVsQnJlYWRjcnVtYiIscHJvcHM6e3NlcGFyYXRvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiLyJ9fX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxpPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIGkoImRpdiIse3N0YXRpY0NsYXNzOiJlbC1icmVhZGNydW1iIn0sW2UuX3QoImRlZmF1bHQiKV0sMil9LHN0YXRpY1JlbmRlckZuczpbXX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5fX2VzTW9kdWxlPSEwO3ZhciBzPWkoMjAyKSxvPW4ocyk7by5kZWZhdWx0Lmluc3RhbGw9ZnVuY3Rpb24oZSl7ZS5jb21wb25lbnQoby5kZWZhdWx0Lm5hbWUsby5kZWZhdWx0KX0sdC5kZWZhdWx0PW8uZGVmYXVsdH0sZnVuY3Rpb24oZSx0LGkpe3ZhciBuPWkoNSkoaSgyMDMpLGkoMjA0KSxudWxsLG51bGwpO2UuZXhwb3J0cz1uLmV4cG9ydHN9LGZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO3QuX19lc01vZHVsZT0hMCx0LmRlZmF1bHQ9e25hbWU6IkVsQnJlYWRjcnVtYkl0ZW0iLHByb3BzOnt0bzp7fSxyZXBsYWNlOkJvb2xlYW59LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57c2VwYXJhdG9yOiIifX0sbW91bnRlZDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5zZXBhcmF0b3I9dGhpcy4kcGFyZW50LnNlcGFyYXRvcjt2YXIgdD10aGlzO2lmKHRoaXMudG8pe3ZhciBpPXRoaXMuJHJlZnMubGluaztpLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbihpKXt2YXIgbj1lLnRvO3QucmVwbGFjZT90LiRyb3V0ZXIucmVwbGFjZShuKTp0LiRyb3V0ZXIucHVzaChuKX0pfX19fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuJGNyZWF0ZUVsZW1lbnQsaT1lLl9zZWxmLl9jfHx0O3JldHVybiBpKCJzcGFuIix7c3RhdGljQ2xhc3M6ImVsLWJyZWFkY3J1bWJfX2l0ZW0ifSxbaSgic3BhbiIse3JlZjoibGluayIsc3RhdGljQ2xhc3M6ImVsLWJyZWFkY3J1bWJfX2l0ZW1fX2lubmVyIn0sW2UuX3QoImRlZmF1bHQiKV0sMiksaSgic3BhbiIse3N0YXRpY0NsYXNzOiJlbC1icmVhZGNydW1iX19zZXBhcmF0b3IifSxbZS5fdihlLl9zKGUuc2VwYXJhdG9yKSldKV0pfSxzdGF0aWNSZW5kZXJGbnM6W119fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXQuX19lc01vZHVsZT0hMDt2YXIgcz1pKDIwNiksbz1uKHMpO28uZGVmYXVsdC5pbnN0YWxsPWZ1bmN0aW9uKGUpe2UuY29tcG9uZW50KG8uZGVmYXVsdC5uYW1lLG8uZGVmYXVsdCl9LHQuZGVmYXVsdD1vLmRlZmF1bHR9LGZ1bmN0aW9uKGUsdCxpKXt2YXIgbj1pKDUpKGkoMjA3KSxpKDIwOCksbnVsbCxudWxsKTtlLmV4cG9ydHM9bi5leHBvcnRzfSxmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0Ijt0Ll9fZXNNb2R1bGU9ITAsdC5kZWZhdWx0PXtuYW1lOiJFbEZvcm0iLGNvbXBvbmVudE5hbWU6IkVsRm9ybSIscHJvcHM6e21vZGVsOk9iamVjdCxydWxlczpPYmplY3QsbGFiZWxQb3NpdGlvbjpTdHJpbmcsbGFiZWxXaWR0aDpTdHJpbmcsbGFiZWxTdWZmaXg6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9LGlubGluZTpCb29sZWFuLHNob3dNZXNzYWdlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMH19LHdhdGNoOntydWxlczpmdW5jdGlvbigpe3RoaXMudmFsaWRhdGUoKX19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57ZmllbGRzOltdfX0sY3JlYXRlZDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy4kb24oImVsLmZvcm0uYWRkRmllbGQiLGZ1bmN0aW9uKHQpe3QmJmUuZmllbGRzLnB1c2godCl9KSx0aGlzLiRvbigiZWwuZm9ybS5yZW1vdmVGaWVsZCIsZnVuY3Rpb24odCl7dC5wcm9wJiZlLmZpZWxkcy5zcGxpY2UoZS5maWVsZHMuaW5kZXhPZih0KSwxKX0pfSxtZXRob2RzOntyZXNldEZpZWxkczpmdW5jdGlvbigpe3RoaXMuZmllbGRzLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5yZXNldEZpZWxkKCl9KX0sdmFsaWRhdGU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxpPSEwLG49MDswPT09dGhpcy5maWVsZHMubGVuZ3RoJiZlJiZlKCEwKSx0aGlzLmZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uKHMsbyl7cy52YWxpZGF0ZSgiIixmdW5jdGlvbihzKXtzJiYoaT0hMSksImZ1bmN0aW9uIj09dHlwZW9mIGUmJisrbj09PXQuZmllbGRzLmxlbmd0aCYmZShpKX0pfSl9LHZhbGlkYXRlRmllbGQ6ZnVuY3Rpb24oZSx0KXt2YXIgaT10aGlzLmZpZWxkcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQucHJvcD09PWV9KVswXTtpZighaSl0aHJvdyBuZXcgRXJyb3IoIm11c3QgY2FsbCB2YWxpZGF0ZUZpZWxkIHdpdGggdmFsaWQgcHJvcCBzdHJpbmchIik7aS52YWxpZGF0ZSgiIix0KX19fX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLiRjcmVhdGVFbGVtZW50LGk9ZS5fc2VsZi5fY3x8dDtyZXR1cm4gaSgiZm9ybSIse3N0YXRpY0NsYXNzOiJlbC1mb3JtIixjbGFzczpbZS5sYWJlbFBvc2l0aW9uPyJlbC1mb3JtLS1sYWJlbC0iK2UubGFiZWxQb3NpdGlvbjoiIix7ImVsLWZvcm0tLWlubGluZSI6ZS5pbmxpbmV9XX0sW2UuX3QoImRlZmF1bHQiKV0sMil9LHN0YXRpY1JlbmRlckZuczpbXX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5fX2VzTW9kdWxlPSEwO3ZhciBzPWkoMjEwKSxvPW4ocyk7by5kZWZhdWx0Lmluc3RhbGw9ZnVuY3Rpb24oZSl7ZS5jb21wb25lbnQoby5kZWZhdWx0Lm5hbWUsby5kZWZhdWx0KX0sdC5kZWZhdWx0PW8uZGVmYXVsdH0sZnVuY3Rpb24oZSx0LGkpe3ZhciBuPWkoNSkoaSgyMTEpLGkoMjM3KSxudWxsLG51bGwpO2UuZXhwb3J0cz1uLmV4cG9ydHN9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gcygpe31mdW5jdGlvbiBvKGUsdCl7dmFyIGk9ZTt0PXQucmVwbGFjZSgvXFsoXHcrKVxdL2csIi4kMSIpLHQ9dC5yZXBsYWNlKC9eXC4vLCIiKTtmb3IodmFyIG49dC5zcGxpdCgiLiIpLHM9MCxvPW4ubGVuZ3RoO3M8by0xOysrcyl7dmFyIGE9bltzXTtpZighKGEgaW4gaSkpdGhyb3cgbmV3IEVycm9yKCJwbGVhc2UgdHJhbnNmZXIgYSB2YWxpZCBwcm9wIHBhdGggdG8gZm9ybSBpdGVtISIpO2k9aVthXX1yZXR1cm57bzppLGs6bltzXSx2OmlbbltzXV19fXQuX19lc01vZHVsZT0hMDt2YXIgYT1pKDIxMikscj1uKGEpLGw9aSgxMSksdT1uKGwpO3QuZGVmYXVsdD17bmFtZToiRWxGb3JtSXRlbSIsY29tcG9uZW50TmFtZToiRWxGb3JtSXRlbSIsbWl4aW5zOlt1LmRlZmF1bHRdLHByb3BzOntsYWJlbDpTdHJpbmcsbGFiZWxXaWR0aDpTdHJpbmcscHJvcDpTdHJpbmcscmVxdWlyZWQ6Qm9vbGVhbixydWxlczpbT2JqZWN0LEFycmF5XSxlcnJvcjpTdHJpbmcsdmFsaWRhdGVTdGF0dXM6U3RyaW5nLHNob3dNZXNzYWdlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMH19LHdhdGNoOntlcnJvcjpmdW5jdGlvbihlKXt0aGlzLnZhbGlkYXRlTWVzc2FnZT1lLHRoaXMudmFsaWRhdGVTdGF0ZT1lPyJlcnJvciI6IiJ9LHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKGUpe3RoaXMudmFsaWRhdGVTdGF0ZT1lfX0sY29tcHV0ZWQ6e2xhYmVsU3R5bGU6ZnVuY3Rpb24oKXt2YXIgZT17fTtpZigidG9wIj09PXRoaXMuZm9ybS5sYWJlbFBvc2l0aW9uKXJldHVybiBlO3ZhciB0PXRoaXMubGFiZWxXaWR0aHx8dGhpcy5mb3JtLmxhYmVsV2lkdGg7cmV0dXJuIHQmJihlLndpZHRoPXQpLGV9LGNvbnRlbnRTdHlsZTpmdW5jdGlvbigpe3ZhciBlPXt9O2lmKCJ0b3AiPT09dGhpcy5mb3JtLmxhYmVsUG9zaXRpb258fHRoaXMuZm9ybS5pbmxpbmUpcmV0dXJuIGU7dmFyIHQ9dGhpcy5sYWJlbFdpZHRofHx0aGlzLmZvcm0ubGFiZWxXaWR0aDtyZXR1cm4gdCYmKGUubWFyZ2luTGVmdD10KSxlfSxmb3JtOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuJHBhcmVudDsiRWxGb3JtIiE9PWUuJG9wdGlvbnMuY29tcG9uZW50TmFtZTspZT1lLiRwYXJlbnQ7cmV0dXJuIGV9LGZpZWxkVmFsdWU6e2NhY2hlOiExLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZm9ybS5tb2RlbDtpZihlJiZ0aGlzLnByb3Ape3ZhciB0PXRoaXMucHJvcDtyZXR1cm4gdC5pbmRleE9mKCI6IikhPT0tMSYmKHQ9dC5yZXBsYWNlKC86LywiLiIpKSxvKGUsdCkudn19fX0sZGF0YTpmdW5jdGlvbigpe3JldHVybnt2YWxpZGF0ZVN0YXRlOiIiLHZhbGlkYXRlTWVzc2FnZToiIix2YWxpZGF0ZURpc2FibGVkOiExLHZhbGlkYXRvcjp7fSxpc1JlcXVpcmVkOiExfX0sbWV0aG9kczp7dmFsaWRhdGU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxpPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpzLG49dGhpcy5nZXRGaWx0ZXJlZFJ1bGUoZSk7aWYoIW58fDA9PT1uLmxlbmd0aClyZXR1cm4gaSgpLCEwO3RoaXMudmFsaWRhdGVTdGF0ZT0idmFsaWRhdGluZyI7dmFyIG89e307b1t0aGlzLnByb3BdPW47dmFyIGE9bmV3IHIuZGVmYXVsdChvKSxsPXt9O2xbdGhpcy5wcm9wXT10aGlzLmZpZWxkVmFsdWUsYS52YWxpZGF0ZShsLHtmaXJzdEZpZWxkczohMH0sZnVuY3Rpb24oZSxuKXt0LnZhbGlkYXRlU3RhdGU9ZT8iZXJyb3IiOiJzdWNjZXNzIix0LnZhbGlkYXRlTWVzc2FnZT1lP2VbMF0ubWVzc2FnZToiIixpKHQudmFsaWRhdGVNZXNzYWdlKX0pfSxyZXNldEZpZWxkOmZ1bmN0aW9uKCl7dGhpcy52YWxpZGF0ZVN0YXRlPSIiLHRoaXMudmFsaWRhdGVNZXNzYWdlPSIiO3ZhciBlPXRoaXMuZm9ybS5tb2RlbCx0PXRoaXMuZmllbGRWYWx1ZSxpPXRoaXMucHJvcDtpLmluZGV4T2YoIjoiKSE9PS0xJiYoaT1pLnJlcGxhY2UoLzovLCIuIikpO3ZhciBuPW8oZSxpKTtBcnJheS5pc0FycmF5KHQpPyh0aGlzLnZhbGlkYXRlRGlzYWJsZWQ9ITAsbi5vW24ua109W10uY29uY2F0KHRoaXMuaW5pdGlhbFZhbHVlKSk6KHRoaXMudmFsaWRhdGVEaXNhYmxlZD0hMCxuLm9bbi5rXT10aGlzLmluaXRpYWxWYWx1ZSl9LGdldFJ1bGVzOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5mb3JtLnJ1bGVzLHQ9dGhpcy5ydWxlcztyZXR1cm4gZT1lP2VbdGhpcy5wcm9wXTpbXSxbXS5jb25jYXQodHx8ZXx8W10pfSxnZXRGaWx0ZXJlZFJ1bGU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRSdWxlcygpO3JldHVybiB0LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hdC50cmlnZ2VyfHx0LnRyaWdnZXIuaW5kZXhPZihlKSE9PS0xfSl9LG9uRmllbGRCbHVyOmZ1bmN0aW9uKCl7dGhpcy52YWxpZGF0ZSgiYmx1ciIpfSxvbkZpZWxkQ2hhbmdlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsaWRhdGVEaXNhYmxlZD92b2lkKHRoaXMudmFsaWRhdGVEaXNhYmxlZD0hMSk6dm9pZCB0aGlzLnZhbGlkYXRlKCJjaGFuZ2UiKX19LG1vdW50ZWQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKHRoaXMucHJvcCl7dGhpcy5kaXNwYXRjaCgiRWxGb3JtIiwiZWwuZm9ybS5hZGRGaWVsZCIsW3RoaXNdKTt2YXIgdD10aGlzLmZpZWxkVmFsdWU7QXJyYXkuaXNBcnJheSh0KSYmKHQ9W10uY29uY2F0KHQpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaW5pdGlhbFZhbHVlIix7dmFsdWU6dH0pO3ZhciBpPXRoaXMuZ2V0UnVsZXMoKTtpLmxlbmd0aCYmKGkuZXZlcnkoZnVuY3Rpb24odCl7aWYodC5yZXF1aXJlZClyZXR1cm4gZS5pc1JlcXVpcmVkPSEwLCExfSksdGhpcy4kb24oImVsLmZvcm0uYmx1ciIsdGhpcy5vbkZpZWxkQmx1ciksdGhpcy4kb24oImVsLmZvcm0uY2hhbmdlIix0aGlzLm9uRmllbGRDaGFuZ2UpKX19LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmRpc3BhdGNoKCJFbEZvcm0iLCJlbC5mb3JtLnJlbW92ZUZpZWxkIixbdGhpc10pfX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gcyhlKXt0aGlzLnJ1bGVzPW51bGwsdGhpcy5fbWVzc2FnZXM9Yy5tZXNzYWdlcyx0aGlzLmRlZmluZShlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIGk9YXJndW1lbnRzW3RdO2Zvcih2YXIgbiBpbiBpKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLG4pJiYoZVtuXT1pW25dKX1yZXR1cm4gZX0sYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0scj1pKDIxMyksbD1pKDIxNCksdT1uKGwpLGM9aSgyMzYpLGQ9aSgyMTYpO3MucHJvdG90eXBlPXttZXNzYWdlczpmdW5jdGlvbihlKXtyZXR1cm4gZSYmKHRoaXMuX21lc3NhZ2VzPSgwLHIuZGVlcE1lcmdlKSgoMCxjLm5ld01lc3NhZ2VzKSgpLGUpKSx0aGlzLl9tZXNzYWdlc30sZGVmaW5lOmZ1bmN0aW9uKGUpe2lmKCFlKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGNvbmZpZ3VyZSBhIHNjaGVtYSB3aXRoIG5vIHJ1bGVzIik7aWYoIm9iamVjdCIhPT0oInVuZGVmaW5lZCI9PXR5cGVvZiBlPyJ1bmRlZmluZWQiOmEoZSkpfHxBcnJheS5pc0FycmF5KGUpKXRocm93IG5ldyBFcnJvcigiUnVsZXMgbXVzdCBiZSBhbiBvYmplY3QiKTt0aGlzLnJ1bGVzPXt9O3ZhciB0PXZvaWQgMCxpPXZvaWQgMDtmb3IodCBpbiBlKWUuaGFzT3duUHJvcGVydHkodCkmJihpPWVbdF0sdGhpcy5ydWxlc1t0XT1BcnJheS5pc0FycmF5KGkpP2k6W2ldKX0sdmFsaWRhdGU6ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiB0KGUpe0FycmF5LmlzQXJyYXkoZSk/cz1zLmNvbmNhdC5hcHBseShzLGUpOnMucHVzaChlKX12YXIgaT12b2lkIDAsbj12b2lkIDAscz1bXSxvPXt9O2ZvcihpPTA7aTxlLmxlbmd0aDtpKyspdChlW2ldKTtpZihzLmxlbmd0aClmb3IoaT0wO2k8cy5sZW5ndGg7aSsrKW49c1tpXS5maWVsZCxvW25dPW9bbl18fFtdLG9bbl0ucHVzaChzW2ldKTtlbHNlIHM9bnVsbCxvPW51bGw7ZihzLG8pfXZhciBpPXRoaXMsbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30sbD1hcmd1bWVudHNbMl0sdT1lLGg9bixmPWw7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGgmJihmPWgsaD17fSksIXRoaXMucnVsZXN8fDA9PT1PYmplY3Qua2V5cyh0aGlzLnJ1bGVzKS5sZW5ndGgpcmV0dXJuIHZvaWQoZiYmZigpKTtpZihoLm1lc3NhZ2VzKXt2YXIgcD10aGlzLm1lc3NhZ2VzKCk7cD09PWMubWVzc2FnZXMmJihwPSgwLGMubmV3TWVzc2FnZXMpKCkpLCgwLHIuZGVlcE1lcmdlKShwLGgubWVzc2FnZXMpLGgubWVzc2FnZXM9cH1lbHNlIGgubWVzc2FnZXM9dGhpcy5tZXNzYWdlcygpO2guZXJyb3I9ZC5lcnJvcjt2YXIgbT12b2lkIDAsdj12b2lkIDAsZz17fSx5PWgua2V5c3x8T2JqZWN0LmtleXModGhpcy5ydWxlcyk7eS5mb3JFYWNoKGZ1bmN0aW9uKHQpe209aS5ydWxlc1t0XSx2PXVbdF0sbS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciBzPW47ImZ1bmN0aW9uIj09dHlwZW9mIHMudHJhbnNmb3JtJiYodT09PWUmJih1PW8oe30sdSkpLHY9dVt0XT1zLnRyYW5zZm9ybSh2KSkscz0iZnVuY3Rpb24iPT10eXBlb2Ygcz97dmFsaWRhdG9yOnN9Om8oe30scykscy52YWxpZGF0b3I9aS5nZXRWYWxpZGF0aW9uTWV0aG9kKHMpLHMuZmllbGQ9dCxzLmZ1bGxGaWVsZD1zLmZ1bGxGaWVsZHx8dCxzLnR5cGU9aS5nZXRUeXBlKHMpLHMudmFsaWRhdG9yJiYoZ1t0XT1nW3RdfHxbXSxnW3RdLnB1c2goe3J1bGU6cyx2YWx1ZTp2LHNvdXJjZTp1LGZpZWxkOnR9KSl9KX0pO3ZhciBiPXt9OygwLHIuYXN5bmNNYXApKGcsaCxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIGkoZSx0KXtyZXR1cm4gbyh7fSx0LHtmdWxsRmllbGQ6bC5mdWxsRmllbGQrIi4iK2V9KX1mdW5jdGlvbiBuKCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOltdLGE9bjtpZihBcnJheS5pc0FycmF5KGEpfHwoYT1bYV0pLGEubGVuZ3RoJiYoMCxyLndhcm5pbmcpKCJhc3luYy12YWxpZGF0b3I6IixhKSxhLmxlbmd0aCYmbC5tZXNzYWdlJiYoYT1bXS5jb25jYXQobC5tZXNzYWdlKSksYT1hLm1hcCgoMCxyLmNvbXBsZW1lbnRFcnJvcikobCkpLChoLmZpcnN0fHxoLmZpZWxkRmlyc3QpJiZhLmxlbmd0aClyZXR1cm4gYltsLmZpZWxkXT0xLHQoYSk7aWYodSl7aWYobC5yZXF1aXJlZCYmIWUudmFsdWUpcmV0dXJuIGE9bC5tZXNzYWdlP1tdLmNvbmNhdChsLm1lc3NhZ2UpLm1hcCgoMCxyLmNvbXBsZW1lbnRFcnJvcikobCkpOltoLmVycm9yKGwsKDAsci5mb3JtYXQpKGgubWVzc2FnZXMucmVxdWlyZWQsbC5maWVsZCkpXSx0KGEpO3ZhciBjPXt9O2lmKGwuZGVmYXVsdEZpZWxkKWZvcih2YXIgZCBpbiBlLnZhbHVlKWUudmFsdWUuaGFzT3duUHJvcGVydHkoZCkmJihjW2RdPWwuZGVmYXVsdEZpZWxkKTtjPW8oe30sYyxlLnJ1bGUuZmllbGRzKTtmb3IodmFyIGYgaW4gYylpZihjLmhhc093blByb3BlcnR5KGYpKXt2YXIgcD1BcnJheS5pc0FycmF5KGNbZl0pP2NbZl06W2NbZl1dO2NbZl09cC5tYXAoaS5iaW5kKG51bGwsZikpfXZhciBtPW5ldyBzKGMpO20ubWVzc2FnZXMoaC5tZXNzYWdlcyksZS5ydWxlLm9wdGlvbnMmJihlLnJ1bGUub3B0aW9ucy5tZXNzYWdlcz1oLm1lc3NhZ2VzLGUucnVsZS5vcHRpb25zLmVycm9yPWguZXJyb3IpLG0udmFsaWRhdGUoZS52YWx1ZSxlLnJ1bGUub3B0aW9uc3x8aCxmdW5jdGlvbihlKXt0KGUmJmUubGVuZ3RoP2EuY29uY2F0KGUpOmUpfSl9ZWxzZSB0KGEpfXZhciBsPWUucnVsZSx1PSEoIm9iamVjdCIhPT1sLnR5cGUmJiJhcnJheSIhPT1sLnR5cGV8fCJvYmplY3QiIT09YShsLmZpZWxkcykmJiJvYmplY3QiIT09YShsLmRlZmF1bHRGaWVsZCkpO3U9dSYmKGwucmVxdWlyZWR8fCFsLnJlcXVpcmVkJiZlLnZhbHVlKSxsLmZpZWxkPWUuZmllbGQsbC52YWxpZGF0b3IobCxlLnZhbHVlLG4sZS5zb3VyY2UsaCl9LGZ1bmN0aW9uKGUpe3QoZSl9KX0sZ2V0VHlwZTpmdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lLnR5cGUmJmUucGF0dGVybiBpbnN0YW5jZW9mIFJlZ0V4cCYmKGUudHlwZT0icGF0dGVybiIpLCJmdW5jdGlvbiIhPXR5cGVvZiBlLnZhbGlkYXRvciYmZS50eXBlJiYhdS5kZWZhdWx0Lmhhc093blByb3BlcnR5KGUudHlwZSkpdGhyb3cgbmV3IEVycm9yKCgwLHIuZm9ybWF0KSgiVW5rbm93biBydWxlIHR5cGUgJXMiLGUudHlwZSkpO3JldHVybiBlLnR5cGV8fCJzdHJpbmcifSxnZXRWYWxpZGF0aW9uTWV0aG9kOmZ1bmN0aW9uKGUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlLnZhbGlkYXRvcilyZXR1cm4gZS52YWxpZGF0b3I7dmFyIHQ9T2JqZWN0LmtleXMoZSksaT10LmluZGV4T2YoIm1lc3NhZ2UiKTtyZXR1cm4gaSE9PS0xJiZ0LnNwbGljZShpLDEpLDE9PT10Lmxlbmd0aCYmInJlcXVpcmVkIj09PXRbMF0/dS5kZWZhdWx0LnJlcXVpcmVkOnUuZGVmYXVsdFt0aGlzLmdldFR5cGUoZSldfHwhMX19LHMucmVnaXN0ZXI9ZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCByZWdpc3RlciBhIHZhbGlkYXRvciBieSB0eXBlLCB2YWxpZGF0b3IgaXMgbm90IGEgZnVuY3Rpb24iKTt1LmRlZmF1bHRbZV09dH0scy5tZXNzYWdlcz1jLm1lc3NhZ2VzLHQuZGVmYXVsdD1zLGUuZXhwb3J0cz10LmRlZmF1bHR9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlLHQpe3QuZXZlcnkoZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlfSkmJmcoZSx0KX1mdW5jdGlvbiBzKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1BcnJheShlKSxpPTA7aTxlO2krKyl0W2ldPWFyZ3VtZW50c1tpXTt2YXIgbj0xLHM9dFswXSxvPXQubGVuZ3RoO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBzKXJldHVybiBzLmFwcGx5KG51bGwsdC5zbGljZSgxKSk7aWYoInN0cmluZyI9PXR5cGVvZiBzKXtmb3IodmFyIGE9U3RyaW5nKHMpLnJlcGxhY2UodixmdW5jdGlvbihlKXtpZigiJSUiPT09ZSlyZXR1cm4iJSI7aWYobj49bylyZXR1cm4gZTtzd2l0Y2goZSl7Y2FzZSIlcyI6cmV0dXJuIFN0cmluZyh0W24rK10pO2Nhc2UiJWQiOnJldHVybiBOdW1iZXIodFtuKytdKTtjYXNlIiVqIjp0cnl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHRbbisrXSl9Y2F0Y2goZSl7cmV0dXJuIltDaXJjdWxhcl0ifWJyZWFrO2RlZmF1bHQ6cmV0dXJuIGV9fSkscj10W25dO248bztyPXRbKytuXSlhKz0iICIrcjtyZXR1cm4gYX1yZXR1cm4gc31mdW5jdGlvbiBvKGUpe3JldHVybiJzdHJpbmciPT09ZXx8InVybCI9PT1lfHwiaGV4Ij09PWV8fCJlbWFpbCI9PT1lfWZ1bmN0aW9uIGEoZSx0KXtyZXR1cm4gdm9pZCAwPT09ZXx8bnVsbD09PWV8fCghKCJhcnJheSIhPT10fHwhQXJyYXkuaXNBcnJheShlKXx8ZS5sZW5ndGgpfHwhKCFvKHQpfHwic3RyaW5nIiE9dHlwZW9mIGV8fGUpKX1mdW5jdGlvbiByKGUpe3JldHVybiAwPT09T2JqZWN0LmtleXMoZSkubGVuZ3RofWZ1bmN0aW9uIGwoZSx0LGkpe2Z1bmN0aW9uIG4oZSl7cy5wdXNoLmFwcGx5KHMsZSksbysrLG89PT1hJiZpKHMpfXZhciBzPVtdLG89MCxhPWUubGVuZ3RoO2UuZm9yRWFjaChmdW5jdGlvbihlKXt0KGUsbil9KX1mdW5jdGlvbiB1KGUsdCxpKXtmdW5jdGlvbiBuKGEpe2lmKGEmJmEubGVuZ3RoKXJldHVybiB2b2lkIGkoYSk7dmFyIHI9cztzKz0xLHI8bz90KGVbcl0sbik6aShbXSl9dmFyIHM9MCxvPWUubGVuZ3RoO24oW10pfWZ1bmN0aW9uIGMoZSl7dmFyIHQ9W107cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24oaSl7dC5wdXNoLmFwcGx5KHQsZVtpXSl9KSx0fWZ1bmN0aW9uIGQoZSx0LGksbil7aWYodC5maXJzdCl7dmFyIHM9YyhlKTtyZXR1cm4gdShzLGksbil9dmFyIG89dC5maXJzdEZpZWxkc3x8W107bz09PSEwJiYobz1PYmplY3Qua2V5cyhlKSk7dmFyIGE9T2JqZWN0LmtleXMoZSkscj1hLmxlbmd0aCxkPTAsaD1bXSxmPWZ1bmN0aW9uKGUpe2gucHVzaC5hcHBseShoLGUpLGQrKyxkPT09ciYmbihoKX07YS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBuPWVbdF07by5pbmRleE9mKHQpIT09LTE/dShuLGksZik6bChuLGksZil9KX1mdW5jdGlvbiBoKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5tZXNzYWdlPyh0LmZpZWxkPXQuZmllbGR8fGUuZnVsbEZpZWxkLHQpOnttZXNzYWdlOnQsZmllbGQ6dC5maWVsZHx8ZS5mdWxsRmllbGR9fX1mdW5jdGlvbiBmKGUsdCl7aWYodClmb3IodmFyIGkgaW4gdClpZih0Lmhhc093blByb3BlcnR5KGkpKXt2YXIgbj10W2ldOyJvYmplY3QiPT09KCJ1bmRlZmluZWQiPT10eXBlb2Ygbj8idW5kZWZpbmVkIjptKG4pKSYmIm9iamVjdCI9PT1tKGVbaV0pP2VbaV09cCh7fSxlW2ldLG4pOmVbaV09bn1yZXR1cm4gZX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHA9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIGk9YXJndW1lbnRzW3RdO2Zvcih2YXIgbiBpbiBpKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLG4pJiYoZVtuXT1pW25dKX1yZXR1cm4gZX0sbT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX07dC53YXJuaW5nPW4sdC5mb3JtYXQ9cyx0LmlzRW1wdHlWYWx1ZT1hLHQuaXNFbXB0eU9iamVjdD1yLHQuYXN5bmNNYXA9ZCx0LmNvbXBsZW1lbnRFcnJvcj1oLHQuZGVlcE1lcmdlPWY7dmFyIHY9LyVbc2RqJV0vZyxnPWZ1bmN0aW9uKCl7fX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3N0cmluZzppKDIxNSksbWV0aG9kOmkoMjIzKSxudW1iZXI6aSgyMjQpLGJvb2xlYW46aSgyMjUpLHJlZ2V4cDppKDIyNiksaW50ZWdlcjppKDIyNyksZmxvYXQ6aSgyMjgpLGFycmF5OmkoMjI5KSxvYmplY3Q6aSgyMzApLGVudW06aSgyMzEpLHBhdHRlcm46aSgyMzIpLGVtYWlsOmkoMjMzKSx1cmw6aSgyMzMpLGRhdGU6aSgyMzQpLGhleDppKDIzMykscmVxdWlyZWQ6aSgyMzUpfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBzKGUsdCxpLG4scyl7dmFyIG89W10sbD1lLnJlcXVpcmVkfHwhZS5yZXF1aXJlZCYmbi5oYXNPd25Qcm9wZXJ0eShlLmZpZWxkKTtpZihsKXtpZigoMCxyLmlzRW1wdHlWYWx1ZSkodCwic3RyaW5nIikmJiFlLnJlcXVpcmVkKXJldHVybiBpKCk7YS5kZWZhdWx0LnJlcXVpcmVkKGUsdCxuLG8scywic3RyaW5nIiksKDAsci5pc0VtcHR5VmFsdWUpKHQsInN0cmluZyIpfHwoYS5kZWZhdWx0LnR5cGUoZSx0LG4sbyxzKSxhLmRlZmF1bHQucmFuZ2UoZSx0LG4sbyxzKSxhLmRlZmF1bHQucGF0dGVybihlLHQsbixvLHMpLGUud2hpdGVzcGFjZT09PSEwJiZhLmRlZmF1bHQud2hpdGVzcGFjZShlLHQsbixvLHMpKX1pKG8pfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1pKDIxNiksYT1uKG8pLHI9aSgyMTMpO3QuZGVmYXVsdD1zLGUuZXhwb3J0cz10LmRlZmF1bHR9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD17cmVxdWlyZWQ6aSgyMTcpLHdoaXRlc3BhY2U6aSgyMTgpLHR5cGU6aSgyMTkpLHJhbmdlOmkoMjIwKSxlbnVtOmkoMjIxKSxwYXR0ZXJuOmkoMjIyKX0sZS5leHBvcnRzPXQuZGVmYXVsdH0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgaSBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLGkpJiYodFtpXT1lW2ldKTtyZXR1cm4gdC5kZWZhdWx0PWUsdH1mdW5jdGlvbiBzKGUsdCxpLG4scyxvKXshZS5yZXF1aXJlZHx8aS5oYXNPd25Qcm9wZXJ0eShlLmZpZWxkKSYmIWEuaXNFbXB0eVZhbHVlKHQsbyl8fG4ucHVzaChhLmZvcm1hdChzLm1lc3NhZ2VzLnJlcXVpcmVkLGUuZnVsbEZpZWxkKSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBvPWkoMjEzKSxhPW4obyk7dC5kZWZhdWx0PXMsZS5leHBvcnRzPXQuZGVmYXVsdH0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgaSBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLGkpJiYodFtpXT1lW2ldKTtyZXR1cm4gdC5kZWZhdWx0PWUsdH1mdW5jdGlvbiBzKGUsdCxpLG4scyl7KC9eXHMrJC8udGVzdCh0KXx8IiI9PT10KSYmbi5wdXNoKGEuZm9ybWF0KHMubWVzc2FnZXMud2hpdGVzcGFjZSxlLmZ1bGxGaWVsZCkpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1pKDIxMyksYT1uKG8pO3QuZGVmYXVsdD1zLGUuZXhwb3J0cz10LmRlZmF1bHR9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gcyhlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIGkgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxpKSYmKHRbaV09ZVtpXSk7cmV0dXJuIHQuZGVmYXVsdD1lLHR9ZnVuY3Rpb24gbyhlLHQsaSxuLHMpe2lmKGUucmVxdWlyZWQmJnZvaWQgMD09PXQpcmV0dXJuIHZvaWQoMCxjLmRlZmF1bHQpKGUsdCxpLG4scyk7dmFyIG89WyJpbnRlZ2VyIiwiZmxvYXQiLCJhcnJheSIsInJlZ2V4cCIsIm9iamVjdCIsIm1ldGhvZCIsImVtYWlsIiwibnVtYmVyIiwiZGF0ZSIsInVybCIsImhleCJdLHI9ZS50eXBlO28uaW5kZXhPZihyKT4tMT9oW3JdKHQpfHxuLnB1c2gobC5mb3JtYXQocy5tZXNzYWdlcy50eXBlc1tyXSxlLmZ1bGxGaWVsZCxlLnR5cGUpKTpyJiYoInVuZGVmaW5lZCI9PXR5cGVvZiB0PyJ1bmRlZmluZWQiOmEodCkpIT09ZS50eXBlJiZuLnB1c2gobC5mb3JtYXQocy5tZXNzYWdlcy50eXBlc1tyXSxlLmZ1bGxGaWVsZCxlLnR5cGUpKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGE9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LHI9aSgyMTMpLGw9cyhyKSx1PWkoMjE3KSxjPW4odSksZD17ZW1haWw6L14oW2EtejAtOV9cLi1dKylAKFtcZGEtelwuLV0rKVwuKFthLXpcLl17Miw2fSkkLyx1cmw6bmV3IFJlZ0V4cCgiXig/IW1haWx0bzopKD86KD86aHR0cHxodHRwc3xmdHApOi8vfC8vKSg/OlxcUysoPzo6XFxTKik/QCk/KD86KD86KD86WzEtOV1cXGQ/fDFcXGRcXGR8MlswMV1cXGR8MjJbMC0zXSkoPzpcXC4oPzoxP1xcZHsxLDJ9fDJbMC00XVxcZHwyNVswLTVdKSl7Mn0oPzpcXC4oPzpbMC05XVxcZD98MVxcZFxcZHwyWzAtNF1cXGR8MjVbMC00XSkpfCg/Oig/OlthLXpcXHUwMGExLVxcdWZmZmYwLTldKy0/KSpbYS16XFx1MDBhMS1cXHVmZmZmMC05XSspKD86XFwuKD86W2EtelxcdTAwYTEtXFx1ZmZmZjAtOV0rLT8pKlthLXpcXHUwMGExLVxcdWZmZmYwLTldKykqKD86XFwuKD86W2EtelxcdTAwYTEtXFx1ZmZmZl17Mix9KSkpfGxvY2FsaG9zdCkoPzo6XFxkezIsNX0pPyg/OigvfFxcP3wjKVteXFxzXSopPyQiLCJpIiksaGV4Oi9eIz8oW2EtZjAtOV17Nn18W2EtZjAtOV17M30pJC9pfSxoPXtpbnRlZ2VyOmZ1bmN0aW9uKGUpe3JldHVybiBoLm51bWJlcihlKSYmcGFyc2VJbnQoZSwxMCk9PT1lfSxmbG9hdDpmdW5jdGlvbihlKXtyZXR1cm4gaC5udW1iZXIoZSkmJiFoLmludGVnZXIoZSl9LGFycmF5OmZ1bmN0aW9uKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpfSxyZWdleHA6ZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIFJlZ0V4cClyZXR1cm4hMDt0cnl7cmV0dXJuISFuZXcgUmVnRXhwKGUpfWNhdGNoKGUpe3JldHVybiExfX0sZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZS5nZXRUaW1lJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5nZXRNb250aCYmImZ1bmN0aW9uIj09dHlwZW9mIGUuZ2V0WWVhcn0sbnVtYmVyOmZ1bmN0aW9uKGUpe3JldHVybiFpc05hTihlKSYmIm51bWJlciI9PXR5cGVvZiBlfSxvYmplY3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIm9iamVjdCI9PT0oInVuZGVmaW5lZCI9PXR5cGVvZiBlPyJ1bmRlZmluZWQiOmEoZSkpJiYhaC5hcnJheShlKX0sbWV0aG9kOmZ1bmN0aW9uKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlfSxlbWFpbDpmdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGUmJiEhZS5tYXRjaChkLmVtYWlsKX0sdXJsOmZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZSYmISFlLm1hdGNoKGQudXJsKX0saGV4OmZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZSYmISFlLm1hdGNoKGQuaGV4KX19O3QuZGVmYXVsdD1vLGUuZXhwb3J0cz10LmRlZmF1bHR9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIGkgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxpKSYmKHRbaV09ZVtpXSk7cmV0dXJuIHQuZGVmYXVsdD1lLHR9ZnVuY3Rpb24gcyhlLHQsaSxuLHMpe3ZhciBvPSJudW1iZXIiPT10eXBlb2YgZS5sZW4scj0ibnVtYmVyIj09dHlwZW9mIGUubWluLGw9Im51bWJlciI9PXR5cGVvZiBlLm1heCx1PXQsYz1udWxsLGQ9Im51bWJlciI9PXR5cGVvZiB0LGg9InN0cmluZyI9PXR5cGVvZiB0LGY9QXJyYXkuaXNBcnJheSh0KTtyZXR1cm4gZD9jPSJudW1iZXIiOmg/Yz0ic3RyaW5nIjpmJiYoYz0iYXJyYXkiKSwhIWMmJigoaHx8ZikmJih1PXQubGVuZ3RoKSx2b2lkKG8/dSE9PWUubGVuJiZuLnB1c2goYS5mb3JtYXQocy5tZXNzYWdlc1tjXS5sZW4sZS5mdWxsRmllbGQsZS5sZW4pKTpyJiYhbCYmdTxlLm1pbj9uLnB1c2goYS5mb3JtYXQocy5tZXNzYWdlc1tjXS5taW4sZS5mdWxsRmllbGQsZS5taW4pKTpsJiYhciYmdT5lLm1heD9uLnB1c2goYS5mb3JtYXQocy5tZXNzYWdlc1tjXS5tYXgsZS5mdWxsRmllbGQsZS5tYXgpKTpyJiZsJiYodTxlLm1pbnx8dT5lLm1heCkmJm4ucHVzaChhLmZvcm1hdChzLm1lc3NhZ2VzW2NdLnJhbmdlLGUuZnVsbEZpZWxkLGUubWluLGUubWF4KSkpKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89aSgyMTMpLGE9bihvKTt0LmRlZmF1bHQ9cyxlLmV4cG9ydHM9dC5kZWZhdWx0fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBpIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsaSkmJih0W2ldPWVbaV0pO3JldHVybiB0LmRlZmF1bHQ9ZSx0fWZ1bmN0aW9uIHMoZSx0LGksbixzKXtlW3JdPUFycmF5LmlzQXJyYXkoZVtyXSk/ZVtyXTpbXSxlW3JdLmluZGV4T2YodCk9PT0tMSYmbi5wdXNoKGEuZm9ybWF0KHMubWVzc2FnZXNbcl0sZS5mdWxsRmllbGQsZVtyXS5qb2luKCIsICIpKSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBvPWkoMjEzKSxhPW4obykscj0iZW51bSI7dC5kZWZhdWx0PXMsZS5leHBvcnRzPXQuZGVmYXVsdH0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgaSBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLGkpJiYodFtpXT1lW2ldKTtyZXR1cm4gdC5kZWZhdWx0PWUsdH1mdW5jdGlvbiBzKGUsdCxpLG4scyl7ZS5wYXR0ZXJuIGluc3RhbmNlb2YgUmVnRXhwJiYoZS5wYXR0ZXJuLnRlc3QodCl8fG4ucHVzaChhLmZvcm1hdChzLm1lc3NhZ2VzLnBhdHRlcm4ubWlzbWF0Y2gsZS5mdWxsRmllbGQsdCxlLnBhdHRlcm4pKSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBvPWkoMjEzKSxhPW4obyk7dC5kZWZhdWx0PXMsZS5leHBvcnRzPXQuZGVmYXVsdH0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBzKGUsdCxpLG4scyl7dmFyIG89W10sbD1lLnJlcXVpcmVkfHwhZS5yZXF1aXJlZCYmbi5oYXNPd25Qcm9wZXJ0eShlLmZpZWxkKTtpZihsKXtpZigoMCxyLmlzRW1wdHlWYWx1ZSkodCkmJiFlLnJlcXVpcmVkKXJldHVybiBpKCk7YS5kZWZhdWx0LnJlcXVpcmVkKGUsdCxuLG8scyksdm9pZCAwIT09dCYmYS5kZWZhdWx0LnR5cGUoZSx0LG4sbyxzKX1pKG8pfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1pKDIxNiksYT1uKG8pLHI9aSgyMTMpO3QuZGVmYXVsdD1zLGUuZXhwb3J0cz10LmRlZmF1bHR9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gcyhlLHQsaSxuLHMpe3ZhciBvPVtdLGw9ZS5yZXF1aXJlZHx8IWUucmVxdWlyZWQmJm4uaGFzT3duUHJvcGVydHkoZS5maWVsZCk7aWYobCl7aWYoKDAsci5pc0VtcHR5VmFsdWUpKHQpJiYhZS5yZXF1aXJlZClyZXR1cm4gaSgpO2EuZGVmYXVsdC5yZXF1aXJlZChlLHQsbixvLHMpLHZvaWQgMCE9PXQmJihhLmRlZmF1bHQudHlwZShlLHQsbixvLHMpLGEuZGVmYXVsdC5yYW5nZShlLHQsbixvLHMpKX1pKG8pfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1pKDIxNiksYT1uKG8pLHI9aSgyMTMpO3QuZGVmYXVsdD1zLGUuZXhwb3J0cz10LmRlZmF1bHR9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gcyhlLHQsaSxuLHMpe3ZhciBhPVtdLGw9ZS5yZXF1aXJlZHx8IWUucmVxdWlyZWQmJm4uaGFzT3duUHJvcGVydHkoZS5maWVsZCk7aWYobCl7aWYoKDAsby5pc0VtcHR5VmFsdWUpKHQpJiYhZS5yZXF1aXJlZClyZXR1cm4gaSgpO3IuZGVmYXVsdC5yZXF1aXJlZChlLHQsbixhLHMpLHZvaWQgMCE9PXQmJnIuZGVmYXVsdC50eXBlKGUsdCxuLGEscyl9aShhKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89aSgyMTMpLGE9aSgyMTYpLHI9bihhKTt0LmRlZmF1bHQ9cyxlLmV4cG9ydHM9dC5kZWZhdWx0fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIHMoZSx0LGksbixzKXt2YXIgbz1bXSxsPWUucmVxdWlyZWR8fCFlLnJlcXVpcmVkJiZuLmhhc093blByb3BlcnR5KGUuZmllbGQpO2lmKGwpe2lmKCgwLHIuaXNFbXB0eVZhbHVlKSh0KSYmIWUucmVxdWlyZWQpcmV0dXJuIGkoKTthLmRlZmF1bHQucmVxdWlyZWQoZSx0LG4sbyxzKSwoMCxyLmlzRW1wdHlWYWx1ZSkodCl8fGEuZGVmYXVsdC50eXBlKGUsdCxuLG8scyl9aShvKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89aSgyMTYpLGE9bihvKSxyPWkoMjEzKTt0LmRlZmF1bHQ9cyxlLmV4cG9ydHM9dC5kZWZhdWx0fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIHMoZSx0LGksbixzKXt2YXIgbz1bXSxsPWUucmVxdWlyZWR8fCFlLnJlcXVpcmVkJiZuLmhhc093blByb3BlcnR5KGUuZmllbGQpO2lmKGwpe2lmKCgwLHIuaXNFbXB0eVZhbHVlKSh0KSYmIWUucmVxdWlyZWQpcmV0dXJuIGkoKTthLmRlZmF1bHQucmVxdWlyZWQoZSx0LG4sbyxzKSx2b2lkIDAhPT10JiYoYS5kZWZhdWx0LnR5cGUoZSx0LG4sbyxzKSxhLmRlZmF1bHQucmFuZ2UoZSx0LG4sbyxzKSl9aShvKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89aSgyMTYpLGE9bihvKSxyPWkoMjEzKTt0LmRlZmF1bHQ9cyxlLmV4cG9ydHM9dC5kZWZhdWx0fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIHMoZSx0LGksbixzKXt2YXIgbz1bXSxsPWUucmVxdWlyZWR8fCFlLnJlcXVpcmVkJiZuLmhhc093blByb3BlcnR5KGUuZmllbGQpO2lmKGwpe2lmKCgwLHIuaXNFbXB0eVZhbHVlKSh0KSYmIWUucmVxdWlyZWQpcmV0dXJuIGkoKTthLmRlZmF1bHQucmVxdWlyZWQoZSx0LG4sbyxzKSx2b2lkIDAhPT10JiYoYS5kZWZhdWx0LnR5cGUoZSx0LG4sbyxzKSxhLmRlZmF1bHQucmFuZ2UoZSx0LG4sbyxzKSl9aShvKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89aSgyMTYpLGE9bihvKSxyPWkoMjEzKTt0LmRlZmF1bHQ9cyxlLmV4cG9ydHM9dC5kZWZhdWx0fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIHMoZSx0LGksbixzKXt2YXIgbz1bXSxsPWUucmVxdWlyZWR8fCFlLnJlcXVpcmVkJiZuLmhhc093blByb3BlcnR5KGUuZmllbGQpO2lmKGwpe2lmKCgwLHIuaXNFbXB0eVZhbHVlKSh0LCJhcnJheSIpJiYhZS5yZXF1aXJlZClyZXR1cm4gaSgpO2EuZGVmYXVsdC5yZXF1aXJlZChlLHQsbixvLHMsImFycmF5IiksKDAsci5pc0VtcHR5VmFsdWUpKHQsImFycmF5Iil8fChhLmRlZmF1bHQudHlwZShlLHQsbixvLHMpLGEuZGVmYXVsdC5yYW5nZShlLHQsbixvLHMpKX1pKG8pfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1pKDIxNiksYT1uKG8pLHI9aSgyMTMpO3QuZGVmYXVsdD1zLGUuZXhwb3J0cz10LmRlZmF1bHR9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gcyhlLHQsaSxuLHMpe3ZhciBvPVtdLGw9ZS5yZXF1aXJlZHx8IWUucmVxdWlyZWQmJm4uaGFzT3duUHJvcGVydHkoZS5maWVsZCk7aWYobCl7aWYoKDAsci5pc0VtcHR5VmFsdWUpKHQpJiYhZS5yZXF1aXJlZClyZXR1cm4gaSgpO2EuZGVmYXVsdC5yZXF1aXJlZChlLHQsbixvLHMpLHZvaWQgMCE9PXQmJmEuZGVmYXVsdC50eXBlKGUsdCxuLG8scyl9aShvKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89aSgyMTYpLGE9bihvKSxyPWkoMjEzKTt0LmRlZmF1bHQ9cyxlLmV4cG9ydHM9dC5kZWZhdWx0fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIHMoZSx0LGksbixzKXt2YXIgbz1bXSx1PWUucmVxdWlyZWR8fCFlLnJlcXVpcmVkJiZuLmhhc093blByb3BlcnR5KGUuZmllbGQpO2lmKHUpe2lmKCgwLHIuaXNFbXB0eVZhbHVlKSh0KSYmIWUucmVxdWlyZWQpcmV0dXJuIGkoKTthLmRlZmF1bHQucmVxdWlyZWQoZSx0LG4sbyxzKSx0JiZhLmRlZmF1bHRbbF0oZSx0LG4sbyxzKX1pKG8pfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1pKDIxNiksYT1uKG8pLHI9aSgyMTMpLGw9ImVudW0iO3QuZGVmYXVsdD1zLGUuZXhwb3J0cz10LmRlZmF1bHR9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gcyhlLHQsaSxuLHMpe3ZhciBvPVtdLGw9ZS5yZXF1aXJlZHx8IWUucmVxdWlyZWQmJm4uaGFzT3duUHJvcGVydHkoZS5maWVsZCk7aWYobCl7aWYoKDAsci5pc0VtcHR5VmFsdWUpKHQsInN0cmluZyIpJiYhZS5yZXF1aXJlZClyZXR1cm4gaSgpO2EuZGVmYXVsdC5yZXF1aXJlZChlLHQsbixvLHMpLCgwLHIuaXNFbXB0eVZhbHVlKSh0LCJzdHJpbmciKXx8YS5kZWZhdWx0LnBhdHRlcm4oZSx0LG4sbyxzKX1pKG8pfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1pKDIxNiksYT1uKG8pLHI9aSgyMTMpO3QuZGVmYXVsdD1zLGUuZXhwb3J0cz10LmRlZmF1bHR9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gcyhlLHQsaSxuLHMpe3ZhciBvPWUudHlwZSxsPVtdLHU9ZS5yZXF1aXJlZHx8IWUucmVxdWlyZWQmJm4uaGFzT3duUHJvcGVydHkoZS5maWVsZCk7aWYodSl7aWYoKDAsci5pc0VtcHR5VmFsdWUpKHQsbykmJiFlLnJlcXVpcmVkKXJldHVybiBpKCk7YS5kZWZhdWx0LnJlcXVpcmVkKGUsdCxuLGwscyxvKSwoMCxyLmlzRW1wdHlWYWx1ZSkodCxvKXx8YS5kZWZhdWx0LnR5cGUoZSx0LG4sbCxzKX1pKGwpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1pKDIxNiksYT1uKG8pLHI9aSgyMTMpO3QuZGVmYXVsdD1zLGUuZXhwb3J0cz10LmRlZmF1bHR9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gcyhlLHQsaSxuLHMpe3ZhciBvPVtdLGw9ZS5yZXF1aXJlZHx8IWUucmVxdWlyZWQmJm4uaGFzT3duUHJvcGVydHkoZS5maWVsZCk7aWYobCl7aWYoKDAsci5pc0VtcHR5VmFsdWUpKHQpJiYhZS5yZXF1aXJlZClyZXR1cm4gaSgpO2EuZGVmYXVsdC5yZXF1aXJlZChlLHQsbixvLHMpLCgwLHIuaXNFbXB0eVZhbHVlKSh0KXx8KGEuZGVmYXVsdC50eXBlKGUsdCxuLG8scyksdCYmYS5kZWZhdWx0LnJhbmdlKGUsdC5nZXRUaW1lKCksbixvLHMpKX1pKG8pfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1pKDIxNiksYT1uKG8pLHI9aSgyMTMpO3QuZGVmYXVsdD1zLGUuZXhwb3J0cz10LmRlZmF1bHR9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gcyhlLHQsaSxuLHMpe3ZhciBhPVtdLGw9QXJyYXkuaXNBcnJheSh0KT8iYXJyYXkiOiJ1bmRlZmluZWQiPT10eXBlb2YgdD8idW5kZWZpbmVkIjpvKHQpO3IuZGVmYXVsdC5yZXF1aXJlZChlLHQsbixhLHMsbCksaShhKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGU7Cn0sYT1pKDIxNikscj1uKGEpO3QuZGVmYXVsdD1zLGUuZXhwb3J0cz10LmRlZmF1bHR9LGZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGkoKXtyZXR1cm57ZGVmYXVsdDoiVmFsaWRhdGlvbiBlcnJvciBvbiBmaWVsZCAlcyIscmVxdWlyZWQ6IiVzIGlzIHJlcXVpcmVkIixlbnVtOiIlcyBtdXN0IGJlIG9uZSBvZiAlcyIsd2hpdGVzcGFjZToiJXMgY2Fubm90IGJlIGVtcHR5IixkYXRlOntmb3JtYXQ6IiVzIGRhdGUgJXMgaXMgaW52YWxpZCBmb3IgZm9ybWF0ICVzIixwYXJzZToiJXMgZGF0ZSBjb3VsZCBub3QgYmUgcGFyc2VkLCAlcyBpcyBpbnZhbGlkICIsaW52YWxpZDoiJXMgZGF0ZSAlcyBpcyBpbnZhbGlkIn0sdHlwZXM6e3N0cmluZzoiJXMgaXMgbm90IGEgJXMiLG1ldGhvZDoiJXMgaXMgbm90IGEgJXMgKGZ1bmN0aW9uKSIsYXJyYXk6IiVzIGlzIG5vdCBhbiAlcyIsb2JqZWN0OiIlcyBpcyBub3QgYW4gJXMiLG51bWJlcjoiJXMgaXMgbm90IGEgJXMiLGRhdGU6IiVzIGlzIG5vdCBhICVzIixib29sZWFuOiIlcyBpcyBub3QgYSAlcyIsaW50ZWdlcjoiJXMgaXMgbm90IGFuICVzIixmbG9hdDoiJXMgaXMgbm90IGEgJXMiLHJlZ2V4cDoiJXMgaXMgbm90IGEgdmFsaWQgJXMiLGVtYWlsOiIlcyBpcyBub3QgYSB2YWxpZCAlcyIsdXJsOiIlcyBpcyBub3QgYSB2YWxpZCAlcyIsaGV4OiIlcyBpcyBub3QgYSB2YWxpZCAlcyJ9LHN0cmluZzp7bGVuOiIlcyBtdXN0IGJlIGV4YWN0bHkgJXMgY2hhcmFjdGVycyIsbWluOiIlcyBtdXN0IGJlIGF0IGxlYXN0ICVzIGNoYXJhY3RlcnMiLG1heDoiJXMgY2Fubm90IGJlIGxvbmdlciB0aGFuICVzIGNoYXJhY3RlcnMiLHJhbmdlOiIlcyBtdXN0IGJlIGJldHdlZW4gJXMgYW5kICVzIGNoYXJhY3RlcnMifSxudW1iZXI6e2xlbjoiJXMgbXVzdCBlcXVhbCAlcyIsbWluOiIlcyBjYW5ub3QgYmUgbGVzcyB0aGFuICVzIixtYXg6IiVzIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gJXMiLHJhbmdlOiIlcyBtdXN0IGJlIGJldHdlZW4gJXMgYW5kICVzIn0sYXJyYXk6e2xlbjoiJXMgbXVzdCBiZSBleGFjdGx5ICVzIGluIGxlbmd0aCIsbWluOiIlcyBjYW5ub3QgYmUgbGVzcyB0aGFuICVzIGluIGxlbmd0aCIsbWF4OiIlcyBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuICVzIGluIGxlbmd0aCIscmFuZ2U6IiVzIG11c3QgYmUgYmV0d2VlbiAlcyBhbmQgJXMgaW4gbGVuZ3RoIn0scGF0dGVybjp7bWlzbWF0Y2g6IiVzIHZhbHVlICVzIGRvZXMgbm90IG1hdGNoIHBhdHRlcm4gJXMifSxjbG9uZTpmdW5jdGlvbigpe3ZhciBlPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcykpO3JldHVybiBlLmNsb25lPXRoaXMuY2xvbmUsZX19fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lm5ld01lc3NhZ2VzPWk7dC5tZXNzYWdlcz1pKCl9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxpPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIGkoImRpdiIse3N0YXRpY0NsYXNzOiJlbC1mb3JtLWl0ZW0iLGNsYXNzOnsiaXMtZXJyb3IiOiJlcnJvciI9PT1lLnZhbGlkYXRlU3RhdGUsImlzLXZhbGlkYXRpbmciOiJ2YWxpZGF0aW5nIj09PWUudmFsaWRhdGVTdGF0ZSwiaXMtcmVxdWlyZWQiOmUuaXNSZXF1aXJlZHx8ZS5yZXF1aXJlZH19LFtlLmxhYmVsP2koImxhYmVsIix7c3RhdGljQ2xhc3M6ImVsLWZvcm0taXRlbV9fbGFiZWwiLHN0eWxlOmUubGFiZWxTdHlsZSxhdHRyczp7Zm9yOmUucHJvcH19LFtlLl92KCJcbiAgICAiK2UuX3MoZS5sYWJlbCtlLmZvcm0ubGFiZWxTdWZmaXgpKyJcbiAgIildKTplLl9lKCksaSgiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLWZvcm0taXRlbV9fY29udGVudCIsc3R5bGU6ZS5jb250ZW50U3R5bGV9LFtlLl90KCJkZWZhdWx0IiksaSgidHJhbnNpdGlvbiIse2F0dHJzOntuYW1lOiJlbC16b29tLWluLXRvcCJ9fSxbImVycm9yIj09PWUudmFsaWRhdGVTdGF0ZSYmZS5zaG93TWVzc2FnZSYmZS5mb3JtLnNob3dNZXNzYWdlP2koImRpdiIse3N0YXRpY0NsYXNzOiJlbC1mb3JtLWl0ZW1fX2Vycm9yIn0sW2UuX3YoZS5fcyhlLnZhbGlkYXRlTWVzc2FnZSkpXSk6ZS5fZSgpXSldLDIpXSl9LHN0YXRpY1JlbmRlckZuczpbXX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5fX2VzTW9kdWxlPSEwO3ZhciBzPWkoMjM5KSxvPW4ocyk7by5kZWZhdWx0Lmluc3RhbGw9ZnVuY3Rpb24oZSl7ZS5jb21wb25lbnQoby5kZWZhdWx0Lm5hbWUsby5kZWZhdWx0KX0sdC5kZWZhdWx0PW8uZGVmYXVsdH0sZnVuY3Rpb24oZSx0LGkpe3ZhciBuPWkoNSkoaSgyNDApLG51bGwsbnVsbCxudWxsKTtlLmV4cG9ydHM9bi5leHBvcnRzfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXQuX19lc01vZHVsZT0hMDt2YXIgcz1pKDI0MSksbz1uKHMpO3QuZGVmYXVsdD17bmFtZToiRWxUYWJzIixjb21wb25lbnRzOntUYWJOYXY6by5kZWZhdWx0fSxwcm9wczp7dHlwZTpTdHJpbmcsYWN0aXZlTmFtZTpTdHJpbmcsY2xvc2FibGU6Qm9vbGVhbixhZGRhYmxlOkJvb2xlYW4sdmFsdWU6e30sZWRpdGFibGU6Qm9vbGVhbn0sZGF0YTpmdW5jdGlvbigpe3JldHVybntjdXJyZW50TmFtZTp0aGlzLnZhbHVlfHx0aGlzLmFjdGl2ZU5hbWUscGFuZXM6W119fSx3YXRjaDp7YWN0aXZlTmFtZTpmdW5jdGlvbihlKXt0aGlzLnNldEN1cnJlbnROYW1lKGUpfSx2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnNldEN1cnJlbnROYW1lKGUpfSxjdXJyZW50TmFtZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzO3RoaXMuJHJlZnMubmF2JiZ0aGlzLiRuZXh0VGljayhmdW5jdGlvbihlKXt0LiRyZWZzLm5hdi5zY3JvbGxUb0FjdGl2ZVRhYigpfSl9fSxtZXRob2RzOntoYW5kbGVUYWJDbGljazpmdW5jdGlvbihlLHQsaSl7ZS5kaXNhYmxlZHx8KHRoaXMuc2V0Q3VycmVudE5hbWUodCksdGhpcy4kZW1pdCgidGFiLWNsaWNrIixlLGkpKX0saGFuZGxlVGFiUmVtb3ZlOmZ1bmN0aW9uKGUsdCl7ZS5kaXNhYmxlZHx8KHQuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy4kZW1pdCgiZWRpdCIsZS5uYW1lLCJyZW1vdmUiKSx0aGlzLiRlbWl0KCJ0YWItcmVtb3ZlIixlLm5hbWUpKX0saGFuZGxlVGFiQWRkOmZ1bmN0aW9uKCl7dGhpcy4kZW1pdCgiZWRpdCIsbnVsbCwiYWRkIiksdGhpcy4kZW1pdCgidGFiLWFkZCIpfSxzZXRDdXJyZW50TmFtZTpmdW5jdGlvbihlKXt0aGlzLmN1cnJlbnROYW1lPWUsdGhpcy4kZW1pdCgiaW5wdXQiLGUpfSxhZGRQYW5lczpmdW5jdGlvbihlKXt2YXIgdD10aGlzLiRzbG90cy5kZWZhdWx0LmluZGV4T2YoZS4kdm5vZGUpO3RoaXMucGFuZXMuc3BsaWNlKHQsMCxlKX0scmVtb3ZlUGFuZXM6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wYW5lcyxpPXQuaW5kZXhPZihlKTtpPi0xJiZ0LnNwbGljZShpLDEpfX0scmVuZGVyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMudHlwZSxpPXRoaXMuaGFuZGxlVGFiQ2xpY2ssbj10aGlzLmhhbmRsZVRhYlJlbW92ZSxzPXRoaXMuaGFuZGxlVGFiQWRkLG89dGhpcy5jdXJyZW50TmFtZSxhPXRoaXMucGFuZXMscj10aGlzLmVkaXRhYmxlLGw9dGhpcy5hZGRhYmxlLHU9cnx8bD9lKCJzcGFuIix7Y2xhc3M6ImVsLXRhYnNfX25ldy10YWIiLG9uOntjbGljazpzfX0sW2UoImkiLHtjbGFzczoiZWwtaWNvbi1wbHVzIn0sW10pXSk6bnVsbCxjPXtwcm9wczp7Y3VycmVudE5hbWU6byxvblRhYkNsaWNrOmksb25UYWJSZW1vdmU6bixlZGl0YWJsZTpyLHR5cGU6dCxwYW5lczphfSxyZWY6Im5hdiJ9O3JldHVybiBlKCJkaXYiLHtjbGFzczp7ImVsLXRhYnMiOiEwLCJlbC10YWJzLS1jYXJkIjoiY2FyZCI9PT10LCJlbC10YWJzLS1ib3JkZXItY2FyZCI6ImJvcmRlci1jYXJkIj09PXR9fSxbZSgiZGl2Iix7Y2xhc3M6ImVsLXRhYnNfX2hlYWRlciJ9LFt1LGUoInRhYi1uYXYiLGMsW10pXSksZSgiZGl2Iix7Y2xhc3M6ImVsLXRhYnNfX2NvbnRlbnQifSxbdGhpcy4kc2xvdHMuZGVmYXVsdF0pXSl9LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLmN1cnJlbnROYW1lfHx0aGlzLnNldEN1cnJlbnROYW1lKCIwIil9fX0sZnVuY3Rpb24oZSx0LGkpe3ZhciBuPWkoNSkoaSgyNDIpLG51bGwsbnVsbCxudWxsKTtlLmV4cG9ydHM9bi5leHBvcnRzfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIHMoKXt9dC5fX2VzTW9kdWxlPSEwO3ZhciBvPWkoMjQzKSxhPW4obykscj1pKDQzKTt0LmRlZmF1bHQ9e25hbWU6IlRhYk5hdiIsY29tcG9uZW50czp7VGFiQmFyOmEuZGVmYXVsdH0scHJvcHM6e3BhbmVzOkFycmF5LGN1cnJlbnROYW1lOlN0cmluZyxlZGl0YWJsZTpCb29sZWFuLG9uVGFiQ2xpY2s6e3R5cGU6RnVuY3Rpb24sZGVmYXVsdDpzfSxvblRhYlJlbW92ZTp7dHlwZTpGdW5jdGlvbixkZWZhdWx0OnN9LHR5cGU6U3RyaW5nfSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3Njcm9sbGFibGU6ITEsbmF2U3R5bGU6e3RyYW5zZm9ybToiIn19fSxtZXRob2RzOntzY3JvbGxQcmV2OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy4kcmVmcy5uYXZTY3JvbGwub2Zmc2V0V2lkdGgsdD10aGlzLmdldEN1cnJlbnRTY3JvbGxPZmZzZXQoKTtpZih0KXt2YXIgaT10PmU/dC1lOjA7dGhpcy5zZXRPZmZzZXQoaSl9fSxzY3JvbGxOZXh0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy4kcmVmcy5uYXYub2Zmc2V0V2lkdGgsdD10aGlzLiRyZWZzLm5hdlNjcm9sbC5vZmZzZXRXaWR0aCxpPXRoaXMuZ2V0Q3VycmVudFNjcm9sbE9mZnNldCgpO2lmKCEoZS1pPD10KSl7dmFyIG49ZS1pPjIqdD9pK3Q6ZS10O3RoaXMuc2V0T2Zmc2V0KG4pfX0sc2Nyb2xsVG9BY3RpdmVUYWI6ZnVuY3Rpb24oKXtpZih0aGlzLnNjcm9sbGFibGUpe3ZhciBlPXRoaXMuJHJlZnMubmF2LHQ9dGhpcy4kZWwucXVlcnlTZWxlY3RvcigiLmlzLWFjdGl2ZSIpLGk9dGhpcy4kcmVmcy5uYXZTY3JvbGwsbj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHM9aS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYT10aGlzLmdldEN1cnJlbnRTY3JvbGxPZmZzZXQoKSxyPWE7bi5sZWZ0PHMubGVmdCYmKHI9YS0ocy5sZWZ0LW4ubGVmdCkpLG4ucmlnaHQ+cy5yaWdodCYmKHI9YStuLnJpZ2h0LXMucmlnaHQpLG8ucmlnaHQ8cy5yaWdodCYmKHI9ZS5vZmZzZXRXaWR0aC1zLndpZHRoKSx0aGlzLnNldE9mZnNldChNYXRoLm1heChyLDApKX19LGdldEN1cnJlbnRTY3JvbGxPZmZzZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm5hdlN0eWxlO3JldHVybiBlLnRyYW5zZm9ybT9OdW1iZXIoZS50cmFuc2Zvcm0ubWF0Y2goL3RyYW5zbGF0ZVhcKC0oXGQrKFwuXGQrKSopcHhcKS8pWzFdKTowfSxzZXRPZmZzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5uYXZTdHlsZS50cmFuc2Zvcm09InRyYW5zbGF0ZVgoLSIrZSsicHgpIn0sdXBkYXRlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy4kcmVmcy5uYXYub2Zmc2V0V2lkdGgsdD10aGlzLiRyZWZzLm5hdlNjcm9sbC5vZmZzZXRXaWR0aCxpPXRoaXMuZ2V0Q3VycmVudFNjcm9sbE9mZnNldCgpO2lmKHQ8ZSl7dmFyIG49dGhpcy5nZXRDdXJyZW50U2Nyb2xsT2Zmc2V0KCk7dGhpcy5zY3JvbGxhYmxlPXRoaXMuc2Nyb2xsYWJsZXx8e30sdGhpcy5zY3JvbGxhYmxlLnByZXY9bix0aGlzLnNjcm9sbGFibGUubmV4dD1uK3Q8ZSxlLW48dCYmdGhpcy5zZXRPZmZzZXQoZS10KX1lbHNlIHRoaXMuc2Nyb2xsYWJsZT0hMSxpPjAmJnRoaXMuc2V0T2Zmc2V0KDApfX0sdXBkYXRlZDpmdW5jdGlvbigpe3RoaXMudXBkYXRlKCl9LHJlbmRlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnR5cGUsaT10aGlzLnBhbmVzLG49dGhpcy5lZGl0YWJsZSxzPXRoaXMub25UYWJDbGljayxvPXRoaXMub25UYWJSZW1vdmUsYT10aGlzLm5hdlN0eWxlLHI9dGhpcy5zY3JvbGxhYmxlLGw9dGhpcy5zY3JvbGxOZXh0LHU9dGhpcy5zY3JvbGxQcmV2LGM9cj9bZSgic3BhbiIse2NsYXNzOlsiZWwtdGFic19fbmF2LXByZXYiLHIucHJldj8iIjoiaXMtZGlzYWJsZWQiXSxvbjp7Y2xpY2s6dX19LFtlKCJpIix7Y2xhc3M6ImVsLWljb24tYXJyb3ctbGVmdCJ9LFtdKV0pLGUoInNwYW4iLHtjbGFzczpbImVsLXRhYnNfX25hdi1uZXh0IixyLm5leHQ/IiI6ImlzLWRpc2FibGVkIl0sb246e2NsaWNrOmx9fSxbZSgiaSIse2NsYXNzOiJlbC1pY29uLWFycm93LXJpZ2h0In0sW10pXSldOm51bGwsZD10aGlzLl9sKGksZnVuY3Rpb24odCxpKXt2YXIgYT10Lm5hbWV8fHQuaW5kZXh8fGkscj10LmlzQ2xvc2FibGV8fG47dC5pbmRleD0iIitpO3ZhciBsPXI/ZSgic3BhbiIse2NsYXNzOiJlbC1pY29uLWNsb3NlIixvbjp7Y2xpY2s6ZnVuY3Rpb24oZSl7byh0LGUpfX19LFtdKTpudWxsLHU9dC4kc2xvdHMubGFiZWx8fHQubGFiZWw7cmV0dXJuIGUoImRpdiIse2NsYXNzOnsiZWwtdGFic19faXRlbSI6ITAsImlzLWFjdGl2ZSI6dC5hY3RpdmUsImlzLWRpc2FibGVkIjp0LmRpc2FibGVkLCJpcy1jbG9zYWJsZSI6cn0scmVmOiJ0YWJzIixyZWZJbkZvcjohMCxvbjp7Y2xpY2s6ZnVuY3Rpb24oZSl7cyh0LGEsZSl9fX0sW3UsbF0pfSk7cmV0dXJuIGUoImRpdiIse2NsYXNzOlsiZWwtdGFic19fbmF2LXdyYXAiLHI/ImlzLXNjcm9sbGFibGUiOiIiXX0sW2MsZSgiZGl2Iix7Y2xhc3M6WyJlbC10YWJzX19uYXYtc2Nyb2xsIl0scmVmOiJuYXZTY3JvbGwifSxbZSgiZGl2Iix7Y2xhc3M6ImVsLXRhYnNfX25hdiIscmVmOiJuYXYiLHN0eWxlOmF9LFt0P251bGw6ZSgidGFiLWJhciIse2F0dHJzOnt0YWJzOml9fSxbXSksZF0pXSldKX0sbW91bnRlZDpmdW5jdGlvbigpeygwLHIuYWRkUmVzaXplTGlzdGVuZXIpKHRoaXMuJGVsLHRoaXMudXBkYXRlKX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe3RoaXMuJGVsJiZ0aGlzLnVwZGF0ZSYmKDAsci5yZW1vdmVSZXNpemVMaXN0ZW5lcikodGhpcy4kZWwsdGhpcy51cGRhdGUpfX19LGZ1bmN0aW9uKGUsdCxpKXt2YXIgbj1pKDUpKGkoMjQ0KSxpKDI0NSksbnVsbCxudWxsKTtlLmV4cG9ydHM9bi5leHBvcnRzfSxmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0Ijt0Ll9fZXNNb2R1bGU9ITAsdC5kZWZhdWx0PXtuYW1lOiJUYWJCYXIiLHByb3BzOnt0YWJzOkFycmF5fSxjb21wdXRlZDp7YmFyU3R5bGU6e2NhY2hlOiExLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7aWYoIXRoaXMuJHBhcmVudC4kcmVmcy50YWJzKXJldHVybnt9O3ZhciB0PXt9LGk9MCxuPTA7dGhpcy50YWJzLmV2ZXJ5KGZ1bmN0aW9uKHQscyl7dmFyIG89ZS4kcGFyZW50LiRyZWZzLnRhYnNbc107cmV0dXJuISFvJiYodC5hY3RpdmU/KG49by5jbGllbnRXaWR0aCwhMSk6KGkrPW8uY2xpZW50V2lkdGgsITApKX0pO3ZhciBzPSJ0cmFuc2xhdGVYKCIraSsicHgpIjtyZXR1cm4gdC53aWR0aD1uKyJweCIsdC50cmFuc2Zvcm09cyx0Lm1zVHJhbnNmb3JtPXMsdC53ZWJraXRUcmFuc2Zvcm09cyx0fX19fX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLiRjcmVhdGVFbGVtZW50LGk9ZS5fc2VsZi5fY3x8dDtyZXR1cm4gaSgiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXRhYnNfX2FjdGl2ZS1iYXIiLHN0eWxlOmUuYmFyU3R5bGV9KX0sc3RhdGljUmVuZGVyRm5zOltdfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX10Ll9fZXNNb2R1bGU9ITA7dmFyIHM9aSgyNDcpLG89bihzKTtvLmRlZmF1bHQuaW5zdGFsbD1mdW5jdGlvbihlKXtlLmNvbXBvbmVudChvLmRlZmF1bHQubmFtZSxvLmRlZmF1bHQpfSx0LmRlZmF1bHQ9by5kZWZhdWx0fSxmdW5jdGlvbihlLHQsaSl7dmFyIG49aSg1KShpKDI0OCksaSgyNDkpLG51bGwsbnVsbCk7ZS5leHBvcnRzPW4uZXhwb3J0c30sZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7dC5fX2VzTW9kdWxlPSEwLHQuZGVmYXVsdD17bmFtZToiRWxUYWJQYW5lIixjb21wb25lbnROYW1lOiJFbFRhYlBhbmUiLHByb3BzOntsYWJlbDpTdHJpbmcsbGFiZWxDb250ZW50OkZ1bmN0aW9uLG5hbWU6U3RyaW5nLGNsb3NhYmxlOkJvb2xlYW4sZGlzYWJsZWQ6Qm9vbGVhbn0sZGF0YTpmdW5jdGlvbigpe3JldHVybntpbmRleDpudWxsfX0sY29tcHV0ZWQ6e2lzQ2xvc2FibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9zYWJsZXx8dGhpcy4kcGFyZW50LmNsb3NhYmxlfSxhY3RpdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kcGFyZW50LmN1cnJlbnROYW1lPT09KHRoaXMubmFtZXx8dGhpcy5pbmRleCl9fSxtb3VudGVkOmZ1bmN0aW9uKCl7dGhpcy4kcGFyZW50LmFkZFBhbmVzKHRoaXMpfSxkZXN0cm95ZWQ6ZnVuY3Rpb24oKXt0aGlzLiRlbCYmdGhpcy4kZWwucGFyZW50Tm9kZSYmdGhpcy4kZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLiRlbCksdGhpcy4kcGFyZW50LnJlbW92ZVBhbmVzKHRoaXMpfSx3YXRjaDp7bGFiZWw6ZnVuY3Rpb24oKXt0aGlzLiRwYXJlbnQuJGZvcmNlVXBkYXRlKCl9fX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxpPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIGkoImRpdiIse2RpcmVjdGl2ZXM6W3tuYW1lOiJzaG93IixyYXdOYW1lOiJ2LXNob3ciLHZhbHVlOmUuYWN0aXZlLGV4cHJlc3Npb246ImFjdGl2ZSJ9XSxzdGF0aWNDbGFzczoiZWwtdGFiLXBhbmUifSxbZS5fdCgiZGVmYXVsdCIpXSwyKX0sc3RhdGljUmVuZGVyRm5zOltdfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX10Ll9fZXNNb2R1bGU9ITA7dmFyIHM9aSgyNTEpLG89bihzKTtvLmRlZmF1bHQuaW5zdGFsbD1mdW5jdGlvbihlKXtlLmNvbXBvbmVudChvLmRlZmF1bHQubmFtZSxvLmRlZmF1bHQpfSx0LmRlZmF1bHQ9by5kZWZhdWx0fSxmdW5jdGlvbihlLHQsaSl7dmFyIG49aSg1KShpKDI1MiksaSgyNTkpLG51bGwsbnVsbCk7ZS5leHBvcnRzPW4uZXhwb3J0c30sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX10Ll9fZXNNb2R1bGU9ITA7dmFyIHM9aSgyNTMpLG89bihzKSxhPWkoMTMpLHI9aSgxMSksbD1uKHIpO3QuZGVmYXVsdD17bmFtZToiRWxUcmVlIixtaXhpbnM6W2wuZGVmYXVsdF0sY29tcG9uZW50czp7RWxUcmVlTm9kZTppKDI1Nil9LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57c3RvcmU6bnVsbCxyb290Om51bGwsY3VycmVudE5vZGU6bnVsbH19LHByb3BzOntkYXRhOnt0eXBlOkFycmF5fSxlbXB0eVRleHQ6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxhLnQpKCJlbC50cmVlLmVtcHR5VGV4dCIpfX0sbm9kZUtleTpTdHJpbmcsY2hlY2tTdHJpY3RseTpCb29sZWFuLGRlZmF1bHRFeHBhbmRBbGw6Qm9vbGVhbixleHBhbmRPbkNsaWNrTm9kZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITB9LGF1dG9FeHBhbmRQYXJlbnQ6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiEwfSxkZWZhdWx0Q2hlY2tlZEtleXM6QXJyYXksZGVmYXVsdEV4cGFuZGVkS2V5czpBcnJheSxyZW5kZXJDb250ZW50OkZ1bmN0aW9uLHNob3dDaGVja2JveDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LHByb3BzOntkZWZhdWx0OmZ1bmN0aW9uKCl7cmV0dXJue2NoaWxkcmVuOiJjaGlsZHJlbiIsbGFiZWw6ImxhYmVsIixpY29uOiJpY29uIn19fSxsYXp5Ont0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0saGlnaGxpZ2h0Q3VycmVudDpCb29sZWFuLGN1cnJlbnROb2RlS2V5OltTdHJpbmcsTnVtYmVyXSxsb2FkOkZ1bmN0aW9uLGZpbHRlck5vZGVNZXRob2Q6RnVuY3Rpb24sYWNjb3JkaW9uOkJvb2xlYW4saW5kZW50Ont0eXBlOk51bWJlcixkZWZhdWx0OjE2fX0sY29tcHV0ZWQ6e2NoaWxkcmVuOntzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5kYXRhPWV9LGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGF9fX0sd2F0Y2g6e2RlZmF1bHRDaGVja2VkS2V5czpmdW5jdGlvbihlKXt0aGlzLnN0b3JlLmRlZmF1bHRDaGVja2VkS2V5cz1lLHRoaXMuc3RvcmUuc2V0RGVmYXVsdENoZWNrZWRLZXkoZSl9LGRlZmF1bHRFeHBhbmRlZEtleXM6ZnVuY3Rpb24oZSl7dGhpcy5zdG9yZS5kZWZhdWx0RXhwYW5kZWRLZXlzPWUsdGhpcy5zdG9yZS5zZXREZWZhdWx0RXhwYW5kZWRLZXlzKGUpfSxjdXJyZW50Tm9kZUtleTpmdW5jdGlvbihlKXt0aGlzLnN0b3JlLnNldEN1cnJlbnROb2RlS2V5KGUpLHRoaXMuc3RvcmUuY3VycmVudE5vZGVLZXk9ZX0sZGF0YTpmdW5jdGlvbihlKXt0aGlzLnN0b3JlLnNldERhdGEoZSl9fSxtZXRob2RzOntmaWx0ZXI6ZnVuY3Rpb24oZSl7aWYoIXRoaXMuZmlsdGVyTm9kZU1ldGhvZCl0aHJvdyBuZXcgRXJyb3IoIltUcmVlXSBmaWx0ZXJOb2RlTWV0aG9kIGlzIHJlcXVpcmVkIHdoZW4gZmlsdGVyIik7dGhpcy5zdG9yZS5maWx0ZXIoZSl9LGdldE5vZGVLZXk6ZnVuY3Rpb24oZSx0KXt2YXIgaT10aGlzLm5vZGVLZXk7cmV0dXJuIGkmJmU/ZS5kYXRhW2ldOnR9LGdldENoZWNrZWROb2RlczpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zdG9yZS5nZXRDaGVja2VkTm9kZXMoZSl9LGdldENoZWNrZWRLZXlzOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnN0b3JlLmdldENoZWNrZWRLZXlzKGUpfSxzZXRDaGVja2VkTm9kZXM6ZnVuY3Rpb24oZSx0KXtpZighdGhpcy5ub2RlS2V5KXRocm93IG5ldyBFcnJvcigiW1RyZWVdIG5vZGVLZXkgaXMgcmVxdWlyZWQgaW4gc2V0Q2hlY2tlZE5vZGVzIik7dGhpcy5zdG9yZS5zZXRDaGVja2VkTm9kZXMoZSx0KX0sc2V0Q2hlY2tlZEtleXM6ZnVuY3Rpb24oZSx0KXtpZighdGhpcy5ub2RlS2V5KXRocm93IG5ldyBFcnJvcigiW1RyZWVdIG5vZGVLZXkgaXMgcmVxdWlyZWQgaW4gc2V0Q2hlY2tlZE5vZGVzIik7dGhpcy5zdG9yZS5zZXRDaGVja2VkS2V5cyhlLHQpfSxzZXRDaGVja2VkOmZ1bmN0aW9uKGUsdCxpKXt0aGlzLnN0b3JlLnNldENoZWNrZWQoZSx0LGkpfSxoYW5kbGVOb2RlRXhwYW5kOmZ1bmN0aW9uKGUsdCxpKXt0aGlzLmJyb2FkY2FzdCgiRWxUcmVlTm9kZSIsInRyZWUtbm9kZS1leHBhbmQiLHQpLHRoaXMuJGVtaXQoIm5vZGUtZXhwYW5kIixlLHQsaSl9fSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5pc1RyZWU9ITAsdGhpcy5zdG9yZT1uZXcgby5kZWZhdWx0KHtrZXk6dGhpcy5ub2RlS2V5LGRhdGE6dGhpcy5kYXRhLGxhenk6dGhpcy5sYXp5LHByb3BzOnRoaXMucHJvcHMsbG9hZDp0aGlzLmxvYWQsY3VycmVudE5vZGVLZXk6dGhpcy5jdXJyZW50Tm9kZUtleSxjaGVja1N0cmljdGx5OnRoaXMuY2hlY2tTdHJpY3RseSxkZWZhdWx0Q2hlY2tlZEtleXM6dGhpcy5kZWZhdWx0Q2hlY2tlZEtleXMsZGVmYXVsdEV4cGFuZGVkS2V5czp0aGlzLmRlZmF1bHRFeHBhbmRlZEtleXMsYXV0b0V4cGFuZFBhcmVudDp0aGlzLmF1dG9FeHBhbmRQYXJlbnQsZGVmYXVsdEV4cGFuZEFsbDp0aGlzLmRlZmF1bHRFeHBhbmRBbGwsZmlsdGVyTm9kZU1ldGhvZDp0aGlzLmZpbHRlck5vZGVNZXRob2R9KSx0aGlzLnJvb3Q9dGhpcy5zdG9yZS5yb290fX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gcyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfXQuX19lc01vZHVsZT0hMDt2YXIgbz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sYT1pKDI1NCkscj1uKGEpLGw9aSgyNTUpLHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3ZhciBpPXRoaXM7cyh0aGlzLGUpLHRoaXMuY3VycmVudE5vZGU9bnVsbCx0aGlzLmN1cnJlbnROb2RlS2V5PW51bGw7Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmKHRoaXNbbl09dFtuXSk7aWYodGhpcy5ub2Rlc01hcD17fSx0aGlzLnJvb3Q9bmV3IHIuZGVmYXVsdCh7ZGF0YTp0aGlzLmRhdGEsc3RvcmU6dGhpc30pLHRoaXMubGF6eSYmdGhpcy5sb2FkKXt2YXIgbz10aGlzLmxvYWQ7byh0aGlzLnJvb3QsZnVuY3Rpb24oZSl7aS5yb290LmRvQ3JlYXRlQ2hpbGRyZW4oZSksaS5faW5pdERlZmF1bHRDaGVja2VkTm9kZXMoKX0pfWVsc2UgdGhpcy5faW5pdERlZmF1bHRDaGVja2VkTm9kZXMoKX1yZXR1cm4gZS5wcm90b3R5cGUuZmlsdGVyPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZmlsdGVyTm9kZU1ldGhvZCxpPWZ1bmN0aW9uIGkobil7dmFyIHM9bi5yb290P24ucm9vdC5jaGlsZE5vZGVzOm4uY2hpbGROb2RlcztpZihzLmZvckVhY2goZnVuY3Rpb24obil7bi52aXNpYmxlPXQuY2FsbChuLGUsbi5kYXRhLG4pLGkobil9KSwhbi52aXNpYmxlJiZzLmxlbmd0aCl7dmFyIG89ITA7cy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UudmlzaWJsZSYmKG89ITEpfSksbi5yb290P24ucm9vdC52aXNpYmxlPW89PT0hMTpuLnZpc2libGU9bz09PSExfW4udmlzaWJsZSYmIW4uaXNMZWFmJiZuLmV4cGFuZCgpfTtpKHRoaXMpfSxlLnByb3RvdHlwZS5zZXREYXRhPWZ1bmN0aW9uKGUpe3ZhciB0PWUhPT10aGlzLnJvb3QuZGF0YTt0aGlzLnJvb3Quc2V0RGF0YShlKSx0JiZ0aGlzLl9pbml0RGVmYXVsdENoZWNrZWROb2RlcygpfSxlLnByb3RvdHlwZS5nZXROb2RlPWZ1bmN0aW9uKGUpe3ZhciB0PSJvYmplY3QiIT09KCJ1bmRlZmluZWQiPT10eXBlb2YgZT8idW5kZWZpbmVkIjpvKGUpKT9lOigwLGwuZ2V0Tm9kZUtleSkodGhpcy5rZXksZSk7cmV0dXJuIHRoaXMubm9kZXNNYXBbdF19LGUucHJvdG90eXBlLmluc2VydEJlZm9yZT1mdW5jdGlvbihlLHQpe3ZhciBpPXRoaXMuZ2V0Tm9kZSh0KTtpLnBhcmVudC5pbnNlcnRCZWZvcmUoe2RhdGE6ZX0saSl9LGUucHJvdG90eXBlLmluc2VydEFmdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpcy5nZXROb2RlKHQpO2kucGFyZW50Lmluc2VydEFmdGVyKHtkYXRhOmV9LGkpfSxlLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXROb2RlKGUpO3QmJnQucGFyZW50LnJlbW92ZUNoaWxkKHQpfSxlLnByb3RvdHlwZS5hcHBlbmQ9ZnVuY3Rpb24oZSx0KXt2YXIgaT10P3RoaXMuZ2V0Tm9kZSh0KTp0aGlzLnJvb3Q7aSYmaS5pbnNlcnRDaGlsZCh7ZGF0YTplfSl9LGUucHJvdG90eXBlLl9pbml0RGVmYXVsdENoZWNrZWROb2Rlcz1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLmRlZmF1bHRDaGVja2VkS2V5c3x8W10saT10aGlzLm5vZGVzTWFwO3QuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbj1pW3RdO24mJm4uc2V0Q2hlY2tlZCghMCwhZS5jaGVja1N0cmljdGx5KX0pfSxlLnByb3RvdHlwZS5faW5pdERlZmF1bHRDaGVja2VkTm9kZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmRlZmF1bHRDaGVja2VkS2V5c3x8W107dC5pbmRleE9mKGUua2V5KSE9PS0xJiZlLnNldENoZWNrZWQoITAsIXRoaXMuY2hlY2tTdHJpY3RseSl9LGUucHJvdG90eXBlLnNldERlZmF1bHRDaGVja2VkS2V5PWZ1bmN0aW9uKGUpe2UhPT10aGlzLmRlZmF1bHRDaGVja2VkS2V5cyYmKHRoaXMuZGVmYXVsdENoZWNrZWRLZXlzPWUsdGhpcy5faW5pdERlZmF1bHRDaGVja2VkTm9kZXMoKSl9LGUucHJvdG90eXBlLnJlZ2lzdGVyTm9kZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmtleTtpZih0JiZlJiZlLmRhdGEpe3ZhciBpPWUua2V5O2kmJih0aGlzLm5vZGVzTWFwW2Uua2V5XT1lKX19LGUucHJvdG90eXBlLmRlcmVnaXN0ZXJOb2RlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMua2V5O3QmJmUmJmUuZGF0YSYmZGVsZXRlIHRoaXMubm9kZXNNYXBbZS5rZXldfSxlLnByb3RvdHlwZS5nZXRDaGVja2VkTm9kZXM9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdLHQ9W10saT1mdW5jdGlvbiBpKG4pe3ZhciBzPW4ucm9vdD9uLnJvb3QuY2hpbGROb2RlczpuLmNoaWxkTm9kZXM7cy5mb3JFYWNoKGZ1bmN0aW9uKG4peyghZSYmbi5jaGVja2VkfHxlJiZuLmlzTGVhZiYmbi5jaGVja2VkKSYmdC5wdXNoKG4uZGF0YSksaShuKX0pfTtyZXR1cm4gaSh0aGlzKSx0fSxlLnByb3RvdHlwZS5nZXRDaGVja2VkS2V5cz1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0sdD10aGlzLmtleSxpPXRoaXMuX2dldEFsbE5vZGVzKCksbj1bXTtyZXR1cm4gaS5mb3JFYWNoKGZ1bmN0aW9uKGkpeyghZXx8ZSYmaS5pc0xlYWYpJiZpLmNoZWNrZWQmJm4ucHVzaCgoaS5kYXRhfHx7fSlbdF0pfSksbn0sZS5wcm90b3R5cGUuX2dldEFsbE5vZGVzPWZ1bmN0aW9uKCl7dmFyIGU9W10sdD10aGlzLm5vZGVzTWFwO2Zvcih2YXIgaSBpbiB0KXQuaGFzT3duUHJvcGVydHkoaSkmJmUucHVzaCh0W2ldKTtyZXR1cm4gZX0sZS5wcm90b3R5cGUuX3NldENoZWNrZWRLZXlzPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsaT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLG49YXJndW1lbnRzWzJdLHM9dGhpcy5fZ2V0QWxsTm9kZXMoKTtzLnNvcnQoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5sZXZlbC1lLmxldmVsfSk7dmFyIG89T2JqZWN0LmtleXMobik7cy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciBzPW8uaW5kZXhPZihuLmRhdGFbZV0rIiIpPi0xO2lmKG4uaXNMZWFmKW4uc2V0Q2hlY2tlZChzLCExKTtlbHNle2lmKHQuY2hlY2tTdHJpY3RseSluLnNldENoZWNrZWQocywhMSk7ZWxzZXtmb3IodmFyIGE9bi5jaGlsZE5vZGVzLHI9ITAsbD0hMCx1PTAsYz1hLmxlbmd0aDt1PGM7dSsrKXt2YXIgZD1hW3VdOyhkLmNoZWNrZWQhPT0hMHx8ZC5pbmRldGVybWluYXRlKSYmKHI9ITEpLChkLmNoZWNrZWQhPT0hMXx8ZC5pbmRldGVybWluYXRlKSYmKGw9ITEpfXI/bi5zZXRDaGVja2VkKCEwLCF0LmNoZWNrU3RyaWN0bHkpOnJ8fGw/bCYmbi5zZXRDaGVja2VkKHMsIXQuY2hlY2tTdHJpY3RseSk6KHM9ISFzfHwiaGFsZiIsbi5zZXRDaGVja2VkKHMsIXQuY2hlY2tTdHJpY3RseSYmcz09PSEwKSl9aSYmIWZ1bmN0aW9uKCl7bi5zZXRDaGVja2VkKCExLCExKTt2YXIgZT1mdW5jdGlvbiBlKHQpe3ZhciBpPXQuY2hpbGROb2RlcztpLmZvckVhY2goZnVuY3Rpb24odCl7dC5pc0xlYWZ8fHQuc2V0Q2hlY2tlZCghMSwhMSksZSh0KX0pfTtlKG4pfSgpfX0pfSxlLnByb3RvdHlwZS5zZXRDaGVja2VkTm9kZXM9ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSxpPXRoaXMua2V5LG49e307ZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe25bKGV8fHt9KVtpXV09ITB9KSx0aGlzLl9zZXRDaGVja2VkS2V5cyhpLHQsbil9LGUucHJvdG90eXBlLnNldENoZWNrZWRLZXlzPWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07dGhpcy5kZWZhdWx0Q2hlY2tlZEtleXM9ZTt2YXIgaT10aGlzLmtleSxuPXt9O2UuZm9yRWFjaChmdW5jdGlvbihlKXtuW2VdPSEwfSksdGhpcy5fc2V0Q2hlY2tlZEtleXMoaSx0LG4pfSxlLnByb3RvdHlwZS5zZXREZWZhdWx0RXhwYW5kZWRLZXlzPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7ZT1lfHxbXSx0aGlzLmRlZmF1bHRFeHBhbmRlZEtleXM9ZSxlLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIGk9dC5nZXROb2RlKGUpO2kmJmkuZXhwYW5kKG51bGwsdC5hdXRvRXhwYW5kUGFyZW50KX0pfSxlLnByb3RvdHlwZS5zZXRDaGVja2VkPWZ1bmN0aW9uKGUsdCxpKXt2YXIgbj10aGlzLmdldE5vZGUoZSk7biYmbi5zZXRDaGVja2VkKCEhdCxpKX0sZS5wcm90b3R5cGUuZ2V0Q3VycmVudE5vZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50Tm9kZX0sZS5wcm90b3R5cGUuc2V0Q3VycmVudE5vZGU9ZnVuY3Rpb24oZSl7dGhpcy5jdXJyZW50Tm9kZT1lfSxlLnByb3RvdHlwZS5zZXRDdXJyZW50Tm9kZUtleT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldE5vZGUoZSk7dCYmKHRoaXMuY3VycmVudE5vZGU9dCl9LGV9KCk7dC5kZWZhdWx0PXV9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gcyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfXQuX19lc01vZHVsZT0hMDt2YXIgbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXtmb3IodmFyIGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIG49dFtpXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1yZXR1cm4gZnVuY3Rpb24odCxpLG4pe3JldHVybiBpJiZlKHQucHJvdG90eXBlLGkpLG4mJmUodCxuKSx0fX0oKSxhPWkoMjMpLHI9bihhKSxsPWkoMjU1KSx1PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmNoaWxkTm9kZXMsaT0hMCxuPSEwLHM9MCxvPXQubGVuZ3RoO3M8bztzKyspe3ZhciBhPXRbc107KGEuY2hlY2tlZCE9PSEwfHxhLmluZGV0ZXJtaW5hdGUpJiYoaT0hMSksKGEuY2hlY2tlZCE9PSExfHxhLmluZGV0ZXJtaW5hdGUpJiYobj0hMSl9aT9lLnNldENoZWNrZWQoITApOml8fG4/biYmZS5zZXRDaGVja2VkKCExKTplLnNldENoZWNrZWQoImhhbGYiKX0sYz1mdW5jdGlvbihlLHQpe3ZhciBpPWUuc3RvcmUucHJvcHMsbj1lLmRhdGF8fHt9LHM9aVt0XTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygcz9zKG4sZSk6InN0cmluZyI9PXR5cGVvZiBzP25bc106InVuZGVmaW5lZCI9PXR5cGVvZiBzPyIiOnZvaWQgMH0sZD0wLGg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3ModGhpcyxlKSx0aGlzLmlkPWQrKyx0aGlzLnRleHQ9bnVsbCx0aGlzLmNoZWNrZWQ9ITEsdGhpcy5pbmRldGVybWluYXRlPSExLHRoaXMuZGF0YT1udWxsLHRoaXMuZXhwYW5kZWQ9ITEsdGhpcy5wYXJlbnQ9bnVsbCx0aGlzLnZpc2libGU9ITA7Zm9yKHZhciBpIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShpKSYmKHRoaXNbaV09dFtpXSk7dGhpcy5sZXZlbD0wLHRoaXMubG9hZGVkPSExLHRoaXMuY2hpbGROb2Rlcz1bXSx0aGlzLmxvYWRpbmc9ITEsdGhpcy5wYXJlbnQmJih0aGlzLmxldmVsPXRoaXMucGFyZW50LmxldmVsKzEpO3ZhciBuPXRoaXMuc3RvcmU7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJbTm9kZV1zdG9yZSBpcyByZXF1aXJlZCEiKTtuLnJlZ2lzdGVyTm9kZSh0aGlzKTt2YXIgbz1uLnByb3BzO2lmKG8mJiJ1bmRlZmluZWQiIT10eXBlb2Ygby5pc0xlYWYpe3ZhciBhPWModGhpcywiaXNMZWFmIik7ImJvb2xlYW4iPT10eXBlb2YgYSYmKHRoaXMuaXNMZWFmQnlVc2VyPWEpfWlmKG4ubGF6eSE9PSEwJiZ0aGlzLmRhdGE/KHRoaXMuc2V0RGF0YSh0aGlzLmRhdGEpLG4uZGVmYXVsdEV4cGFuZEFsbCYmKHRoaXMuZXhwYW5kZWQ9ITApKTp0aGlzLmxldmVsPjAmJm4ubGF6eSYmbi5kZWZhdWx0RXhwYW5kQWxsJiZ0aGlzLmV4cGFuZCgpLHRoaXMuZGF0YSl7dmFyIHI9bi5kZWZhdWx0RXhwYW5kZWRLZXlzLGw9bi5rZXk7bCYmciYmci5pbmRleE9mKHRoaXMua2V5KSE9PS0xJiZ0aGlzLmV4cGFuZChudWxsLG4uYXV0b0V4cGFuZFBhcmVudCksbCYmbi5jdXJyZW50Tm9kZUtleSYmdGhpcy5rZXk9PT1uLmN1cnJlbnROb2RlS2V5JiYobi5jdXJyZW50Tm9kZT10aGlzKSxuLmxhenkmJm4uX2luaXREZWZhdWx0Q2hlY2tlZE5vZGUodGhpcyksdGhpcy51cGRhdGVMZWFmU3RhdGUoKX19cmV0dXJuIGUucHJvdG90eXBlLnNldERhdGE9ZnVuY3Rpb24oZSl7QXJyYXkuaXNBcnJheShlKXx8KDAsbC5tYXJrTm9kZURhdGEpKHRoaXMsZSksdGhpcy5kYXRhPWUsdGhpcy5jaGlsZE5vZGVzPVtdO3ZhciB0PXZvaWQgMDt0PTA9PT10aGlzLmxldmVsJiZ0aGlzLmRhdGEgaW5zdGFuY2VvZiBBcnJheT90aGlzLmRhdGE6Yyh0aGlzLCJjaGlsZHJlbiIpfHxbXTtmb3IodmFyIGk9MCxuPXQubGVuZ3RoO2k8bjtpKyspdGhpcy5pbnNlcnRDaGlsZCh7ZGF0YTp0W2ldfSl9LGUucHJvdG90eXBlLmluc2VydENoaWxkPWZ1bmN0aW9uKHQsaSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJpbnNlcnRDaGlsZCBlcnJvcjogY2hpbGQgaXMgcmVxdWlyZWQuIik7dCBpbnN0YW5jZW9mIGV8fCgoMCxyLmRlZmF1bHQpKHQse3BhcmVudDp0aGlzLHN0b3JlOnRoaXMuc3RvcmV9KSx0PW5ldyBlKHQpKSx0LmxldmVsPXRoaXMubGV2ZWwrMSwidW5kZWZpbmVkIj09dHlwZW9mIGl8fGk8MD90aGlzLmNoaWxkTm9kZXMucHVzaCh0KTp0aGlzLmNoaWxkTm9kZXMuc3BsaWNlKGksMCx0KSx0aGlzLnVwZGF0ZUxlYWZTdGF0ZSgpfSxlLnByb3RvdHlwZS5pbnNlcnRCZWZvcmU9ZnVuY3Rpb24oZSx0KXt2YXIgaT12b2lkIDA7dCYmKGk9dGhpcy5jaGlsZE5vZGVzLmluZGV4T2YodCkpLHRoaXMuaW5zZXJ0Q2hpbGQoZSxpKX0sZS5wcm90b3R5cGUuaW5zZXJ0QWZ0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgaT12b2lkIDA7dCYmKGk9dGhpcy5jaGlsZE5vZGVzLmluZGV4T2YodCksaSE9PS0xJiYoaSs9MSkpLHRoaXMuaW5zZXJ0Q2hpbGQoZSxpKX0sZS5wcm90b3R5cGUucmVtb3ZlQ2hpbGQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jaGlsZE5vZGVzLmluZGV4T2YoZSk7dD4tMSYmKHRoaXMuc3RvcmUmJnRoaXMuc3RvcmUuZGVyZWdpc3Rlck5vZGUoZSksZS5wYXJlbnQ9bnVsbCx0aGlzLmNoaWxkTm9kZXMuc3BsaWNlKHQsMSkpLHRoaXMudXBkYXRlTGVhZlN0YXRlKCl9LGUucHJvdG90eXBlLnJlbW92ZUNoaWxkQnlEYXRhPWZ1bmN0aW9uKGUpe3ZhciB0PW51bGw7dGhpcy5jaGlsZE5vZGVzLmZvckVhY2goZnVuY3Rpb24oaSl7aS5kYXRhPT09ZSYmKHQ9aSl9KSx0JiZ0aGlzLnJlbW92ZUNoaWxkKHQpfSxlLnByb3RvdHlwZS5leHBhbmQ9ZnVuY3Rpb24oZSx0KXt2YXIgaT10aGlzLG49ZnVuY3Rpb24oKXtpZih0KWZvcih2YXIgbj1pLnBhcmVudDtuLmxldmVsPjA7KW4uZXhwYW5kZWQ9ITAsbj1uLnBhcmVudDtpLmV4cGFuZGVkPSEwLGUmJmUoKX07dGhpcy5zaG91bGRMb2FkRGF0YSgpP3RoaXMubG9hZERhdGEoZnVuY3Rpb24oZSl7ZSBpbnN0YW5jZW9mIEFycmF5JiZuKCl9KTpuKCl9LGUucHJvdG90eXBlLmRvQ3JlYXRlQ2hpbGRyZW49ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxpPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtlLmZvckVhY2goZnVuY3Rpb24oZSl7dC5pbnNlcnRDaGlsZCgoMCxyLmRlZmF1bHQpKHtkYXRhOmV9LGkpKX0pfSxlLnByb3RvdHlwZS5jb2xsYXBzZT1mdW5jdGlvbigpe3RoaXMuZXhwYW5kZWQ9ITF9LGUucHJvdG90eXBlLnNob3VsZExvYWREYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RvcmUubGF6eT09PSEwJiZ0aGlzLnN0b3JlLmxvYWQmJiF0aGlzLmxvYWRlZH0sZS5wcm90b3R5cGUudXBkYXRlTGVhZlN0YXRlPWZ1bmN0aW9uKCl7aWYodGhpcy5zdG9yZS5sYXp5PT09ITAmJnRoaXMubG9hZGVkIT09ITAmJiJ1bmRlZmluZWQiIT10eXBlb2YgdGhpcy5pc0xlYWZCeVVzZXIpcmV0dXJuIHZvaWQodGhpcy5pc0xlYWY9dGhpcy5pc0xlYWZCeVVzZXIpO3ZhciBlPXRoaXMuY2hpbGROb2RlcztyZXR1cm4hdGhpcy5zdG9yZS5sYXp5fHx0aGlzLnN0b3JlLmxhenk9PT0hMCYmdGhpcy5sb2FkZWQ9PT0hMD92b2lkKHRoaXMuaXNMZWFmPSFlfHwwPT09ZS5sZW5ndGgpOnZvaWQodGhpcy5pc0xlYWY9ITEpfSxlLnByb3RvdHlwZS5zZXRDaGVja2VkPWZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpczt0aGlzLmluZGV0ZXJtaW5hdGU9ImhhbGYiPT09ZSx0aGlzLmNoZWNrZWQ9ZT09PSEwO3ZhciBuPWZ1bmN0aW9uKCl7aWYodClmb3IodmFyIG49aS5jaGlsZE5vZGVzLHM9MCxvPW4ubGVuZ3RoO3M8bztzKyspe3ZhciBhPW5bc107YS5zZXRDaGVja2VkKGUhPT0hMSx0KX19OyF0aGlzLnN0b3JlLmNoZWNrU3RyaWN0bHkmJnRoaXMuc2hvdWxkTG9hZERhdGEoKT90aGlzLmxvYWREYXRhKGZ1bmN0aW9uKCl7bigpfSx7Y2hlY2tlZDplIT09ITF9KTpuKCk7dmFyIHM9dGhpcy5wYXJlbnQ7cyYmMCE9PXMubGV2ZWwmJih0aGlzLnN0b3JlLmNoZWNrU3RyaWN0bHl8fHUocykpfSxlLnByb3RvdHlwZS5nZXRDaGlsZHJlbj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuZGF0YTtpZighZSlyZXR1cm4gbnVsbDt2YXIgdD10aGlzLnN0b3JlLnByb3BzLGk9ImNoaWxkcmVuIjtyZXR1cm4gdCYmKGk9dC5jaGlsZHJlbnx8ImNoaWxkcmVuIiksdm9pZCAwPT09ZVtpXSYmKGVbaV09bnVsbCksZVtpXX0sZS5wcm90b3R5cGUudXBkYXRlQ2hpbGRyZW49ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5nZXRDaGlsZHJlbigpfHxbXSxpPXRoaXMuY2hpbGROb2Rlcy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGF0YX0pLG49e30scz1bXTt0LmZvckVhY2goZnVuY3Rpb24oZSx0KXtlW2wuTk9ERV9LRVldP25bZVtsLk5PREVfS0VZXV09e2luZGV4OnQsZGF0YTplfTpzLnB1c2goe2luZGV4OnQsZGF0YTplfSl9KSxpLmZvckVhY2goZnVuY3Rpb24odCl7blt0W2wuTk9ERV9LRVldXXx8ZS5yZW1vdmVDaGlsZEJ5RGF0YSh0KX0pLHMuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgaT10LmluZGV4LG49dC5kYXRhO2UuaW5zZXJ0Q2hpbGQoe2RhdGE6bn0saSl9KSx0aGlzLnVwZGF0ZUxlYWZTdGF0ZSgpfSxlLnByb3RvdHlwZS5sb2FkRGF0YT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLGk9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O2lmKHRoaXMuc3RvcmUubGF6eSE9PSEwfHwhdGhpcy5zdG9yZS5sb2FkfHx0aGlzLmxvYWRlZHx8dGhpcy5sb2FkaW5nKWUmJmUuY2FsbCh0aGlzKTtlbHNle3RoaXMubG9hZGluZz0hMDt2YXIgbj1mdW5jdGlvbihuKXt0LmxvYWRlZD0hMCx0LmxvYWRpbmc9ITEsdC5jaGlsZE5vZGVzPVtdLHQuZG9DcmVhdGVDaGlsZHJlbihuLGkpLHQudXBkYXRlTGVhZlN0YXRlKCksZSYmZS5jYWxsKHQsbil9O3RoaXMuc3RvcmUubG9hZCh0aGlzLG4pfX0sbyhlLFt7a2V5OiJsYWJlbCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGModGhpcywibGFiZWwiKX19LHtrZXk6Imljb24iLGdldDpmdW5jdGlvbigpe3JldHVybiBjKHRoaXMsImljb24iKX19LHtrZXk6ImtleSIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdG9yZS5rZXk7cmV0dXJuIHRoaXMuZGF0YT90aGlzLmRhdGFbZV06bnVsbH19XSksZX0oKTt0LmRlZmF1bHQ9aH0sZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7dC5fX2VzTW9kdWxlPSEwO3ZhciBpPXQuTk9ERV9LRVk9IiR0cmVlTm9kZUlkIjt0Lm1hcmtOb2RlRGF0YT1mdW5jdGlvbihlLHQpe3RbaV18fE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGkse3ZhbHVlOmUuaWQsZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITEsd3JpdGFibGU6ITF9KX0sdC5nZXROb2RlS2V5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU/dFtlXTp0W2ldfX0sZnVuY3Rpb24oZSx0LGkpe3ZhciBuPWkoNSkoaSgyNTcpLGkoMjU4KSxudWxsLG51bGwpO2UuZXhwb3J0cz1uLmV4cG9ydHN9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5fX2VzTW9kdWxlPSEwO3ZhciBzPWkoODkpLG89bihzKSxhPWkoMTE1KSxyPW4oYSksbD1pKDExKSx1PW4obCk7dC5kZWZhdWx0PXtuYW1lOiJFbFRyZWVOb2RlIixjb21wb25lbnROYW1lOiJFbFRyZWVOb2RlIixtaXhpbnM6W3UuZGVmYXVsdF0scHJvcHM6e25vZGU6e2RlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm57fX19LHByb3BzOnt9LHJlbmRlckNvbnRlbnQ6RnVuY3Rpb259LGNvbXBvbmVudHM6e0VsQ2hlY2tib3g6ci5kZWZhdWx0LENvbGxhcHNlVHJhbnNpdGlvbjpvLmRlZmF1bHQsTm9kZUNvbnRlbnQ6e3Byb3BzOntub2RlOntyZXF1aXJlZDohMH19LHJlbmRlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLiRwYXJlbnQsaT10aGlzLm5vZGUsbj1pLmRhdGEscz1pLnN0b3JlO3JldHVybiB0LnJlbmRlckNvbnRlbnQ/dC5yZW5kZXJDb250ZW50LmNhbGwodC5fcmVuZGVyUHJveHksZSx7X3NlbGY6dC50cmVlLiR2bm9kZS5jb250ZXh0LG5vZGU6aSxkYXRhOm4sc3RvcmU6c30pOmUoInNwYW4iLHtjbGFzczoiZWwtdHJlZS1ub2RlX19sYWJlbCJ9LFt0aGlzLm5vZGUubGFiZWxdKX19fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3RyZWU6bnVsbCxleHBhbmRlZDohMSxjaGlsZE5vZGVSZW5kZXJlZDohMSxzaG93Q2hlY2tib3g6ITEsb2xkQ2hlY2tlZDpudWxsLG9sZEluZGV0ZXJtaW5hdGU6bnVsbH19LHdhdGNoOnsibm9kZS5pbmRldGVybWluYXRlIjpmdW5jdGlvbihlKXt0aGlzLmhhbmRsZVNlbGVjdENoYW5nZSh0aGlzLm5vZGUuY2hlY2tlZCxlKX0sIm5vZGUuY2hlY2tlZCI6ZnVuY3Rpb24oZSl7dGhpcy5oYW5kbGVTZWxlY3RDaGFuZ2UoZSx0aGlzLm5vZGUuaW5kZXRlcm1pbmF0ZSl9LCJub2RlLmV4cGFuZGVkIjpmdW5jdGlvbihlKXt0aGlzLmV4cGFuZGVkPWUsZSYmKHRoaXMuY2hpbGROb2RlUmVuZGVyZWQ9ITApfX0sbWV0aG9kczp7Z2V0Tm9kZUtleTpmdW5jdGlvbihlLHQpe3ZhciBpPXRoaXMudHJlZS5ub2RlS2V5O3JldHVybiBpJiZlP2UuZGF0YVtpXTp0fSxoYW5kbGVTZWxlY3RDaGFuZ2U6ZnVuY3Rpb24oZSx0KXt0aGlzLm9sZENoZWNrZWQhPT1lJiZ0aGlzLm9sZEluZGV0ZXJtaW5hdGUhPT10JiZ0aGlzLnRyZWUuJGVtaXQoImNoZWNrLWNoYW5nZSIsdGhpcy5ub2RlLmRhdGEsZSx0KSx0aGlzLm9sZENoZWNrZWQ9ZSx0aGlzLmluZGV0ZXJtaW5hdGU9dH0saGFuZGxlQ2xpY2s6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnRyZWUuc3RvcmU7ZS5zZXRDdXJyZW50Tm9kZSh0aGlzLm5vZGUpLHRoaXMudHJlZS4kZW1pdCgiY3VycmVudC1jaGFuZ2UiLGUuY3VycmVudE5vZGU/ZS5jdXJyZW50Tm9kZS5kYXRhOm51bGwsZS5jdXJyZW50Tm9kZSksdGhpcy50cmVlLmN1cnJlbnROb2RlPXRoaXMsdGhpcy50cmVlLmV4cGFuZE9uQ2xpY2tOb2RlJiZ0aGlzLmhhbmRsZUV4cGFuZEljb25DbGljaygpLHRoaXMudHJlZS4kZW1pdCgibm9kZS1jbGljayIsdGhpcy5ub2RlLmRhdGEsdGhpcy5ub2RlLHRoaXMpfSxoYW5kbGVFeHBhbmRJY29uQ2xpY2s6ZnVuY3Rpb24oKXt0aGlzLm5vZGUuaXNMZWFmfHwodGhpcy5leHBhbmRlZD8odGhpcy50cmVlLiRlbWl0KCJub2RlLWNvbGxhcHNlIix0aGlzLm5vZGUuZGF0YSx0aGlzLm5vZGUsdGhpcyksdGhpcy5ub2RlLmNvbGxhcHNlKCkpOih0aGlzLm5vZGUuZXhwYW5kKCksdGhpcy4kZW1pdCgibm9kZS1leHBhbmQiLHRoaXMubm9kZS5kYXRhLHRoaXMubm9kZSx0aGlzKSkpfSxoYW5kbGVVc2VyQ2xpY2s6ZnVuY3Rpb24oKXt0aGlzLm5vZGUuaW5kZXRlcm1pbmF0ZSYmdGhpcy5ub2RlLnNldENoZWNrZWQodGhpcy5ub2RlLmNoZWNrZWQsIXRoaXMudHJlZS5jaGVja1N0cmljdGx5KX0saGFuZGxlQ2hlY2tDaGFuZ2U6ZnVuY3Rpb24oZSl7dGhpcy5ub2RlLmluZGV0ZXJtaW5hdGV8fHRoaXMubm9kZS5zZXRDaGVja2VkKGUudGFyZ2V0LmNoZWNrZWQsIXRoaXMudHJlZS5jaGVja1N0cmljdGx5KX0saGFuZGxlQ2hpbGROb2RlRXhwYW5kOmZ1bmN0aW9uKGUsdCxpKXt0aGlzLmJyb2FkY2FzdCgiRWxUcmVlTm9kZSIsInRyZWUtbm9kZS1leHBhbmQiLHQpLHRoaXMudHJlZS4kZW1pdCgibm9kZS1leHBhbmQiLGUsdCxpKX19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy4kcGFyZW50O3QuaXNUcmVlP3RoaXMudHJlZT10OnRoaXMudHJlZT10LnRyZWU7dmFyIGk9dGhpcy50cmVlO2l8fGNvbnNvbGUud2FybigiQ2FuIG5vdCBmaW5kIG5vZGUncyB0cmVlLiIpO3ZhciBuPWkucHJvcHN8fHt9LHM9bi5jaGlsZHJlbnx8ImNoaWxkcmVuIjt0aGlzLiR3YXRjaCgibm9kZS5kYXRhLiIrcyxmdW5jdGlvbigpe2Uubm9kZS51cGRhdGVDaGlsZHJlbigpfSksdGhpcy5zaG93Q2hlY2tib3g9aS5zaG93Q2hlY2tib3gsdGhpcy5ub2RlLmV4cGFuZGVkJiYodGhpcy5leHBhbmRlZD0hMCx0aGlzLmNoaWxkTm9kZVJlbmRlcmVkPSEwKSx0aGlzLnRyZWUuYWNjb3JkaW9uJiZ0aGlzLiRvbigidHJlZS1ub2RlLWV4cGFuZCIsZnVuY3Rpb24odCl7ZS5ub2RlIT09dCYmZS5ub2RlLmNvbGxhcHNlKCl9KX19fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuJGNyZWF0ZUVsZW1lbnQsaT1lLl9zZWxmLl9jfHx0O3JldHVybiBpKCJkaXYiLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZTplLm5vZGUudmlzaWJsZSxleHByZXNzaW9uOiJub2RlLnZpc2libGUifV0sc3RhdGljQ2xhc3M6ImVsLXRyZWUtbm9kZSIsY2xhc3M6eyJpcy1leHBhbmRlZCI6ZS5jaGlsZE5vZGVSZW5kZXJlZCYmZS5leHBhbmRlZCwiaXMtY3VycmVudCI6ZS50cmVlLnN0b3JlLmN1cnJlbnROb2RlPT09ZS5ub2RlLCJpcy1oaWRkZW4iOiFlLm5vZGUudmlzaWJsZX0sb246e2NsaWNrOmZ1bmN0aW9uKHQpe3Quc3RvcFByb3BhZ2F0aW9uKCksZS5oYW5kbGVDbGljayh0KX19fSxbaSgiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXRyZWUtbm9kZV9fY29udGVudCIsc3R5bGU6eyJwYWRkaW5nLWxlZnQiOihlLm5vZGUubGV2ZWwtMSkqZS50cmVlLmluZGVudCsicHgifX0sW2koInNwYW4iLHtzdGF0aWNDbGFzczoiZWwtdHJlZS1ub2RlX19leHBhbmQtaWNvbiIsY2xhc3M6eyJpcy1sZWFmIjplLm5vZGUuaXNMZWFmLGV4cGFuZGVkOiFlLm5vZGUuaXNMZWFmJiZlLmV4cGFuZGVkfSxvbjp7Y2xpY2s6ZnVuY3Rpb24odCl7dC5zdG9wUHJvcGFnYXRpb24oKSxlLmhhbmRsZUV4cGFuZEljb25DbGljayh0KX19fSksZS5zaG93Q2hlY2tib3g/aSgiZWwtY2hlY2tib3giLHtkaXJlY3RpdmVzOlt7bmFtZToibW9kZWwiLHJhd05hbWU6InYtbW9kZWwiLHZhbHVlOmUubm9kZS5jaGVja2VkLGV4cHJlc3Npb246Im5vZGUuY2hlY2tlZCJ9XSxhdHRyczp7aW5kZXRlcm1pbmF0ZTplLm5vZGUuaW5kZXRlcm1pbmF0ZX0sZG9tUHJvcHM6e3ZhbHVlOmUubm9kZS5jaGVja2VkfSxvbjp7Y2hhbmdlOmUuaGFuZGxlQ2hlY2tDaGFuZ2UsaW5wdXQ6ZnVuY3Rpb24odCl7ZS5ub2RlLmNoZWNrZWQ9dH19LG5hdGl2ZU9uOntjbGljazpmdW5jdGlvbih0KXt0LnN0b3BQcm9wYWdhdGlvbigpLGUuaGFuZGxlVXNlckNsaWNrKHQpfX19KTplLl9lKCksZS5ub2RlLmxvYWRpbmc/aSgic3BhbiIse3N0YXRpY0NsYXNzOiJlbC10cmVlLW5vZGVfX2xvYWRpbmctaWNvbiBlbC1pY29uLWxvYWRpbmcifSk6ZS5fZSgpLGkoIm5vZGUtY29udGVudCIse2F0dHJzOntub2RlOmUubm9kZX19KV0sMSksaSgiY29sbGFwc2UtdHJhbnNpdGlvbiIsW2koImRpdiIse2RpcmVjdGl2ZXM6W3tuYW1lOiJzaG93IixyYXdOYW1lOiJ2LXNob3ciLHZhbHVlOmUuZXhwYW5kZWQsZXhwcmVzc2lvbjoiZXhwYW5kZWQifV0sc3RhdGljQ2xhc3M6ImVsLXRyZWUtbm9kZV9fY2hpbGRyZW4ifSxlLl9sKGUubm9kZS5jaGlsZE5vZGVzLGZ1bmN0aW9uKHQpe3JldHVybiBpKCJlbC10cmVlLW5vZGUiLHtrZXk6ZS5nZXROb2RlS2V5KHQpLGF0dHJzOnsicmVuZGVyLWNvbnRlbnQiOmUucmVuZGVyQ29udGVudCxub2RlOnR9LG9uOnsibm9kZS1leHBhbmQiOmUuaGFuZGxlQ2hpbGROb2RlRXhwYW5kfX0pfSkpXSldLDEpfSxzdGF0aWNSZW5kZXJGbnM6W119fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuJGNyZWF0ZUVsZW1lbnQsaT1lLl9zZWxmLl9jfHx0O3JldHVybiBpKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtdHJlZSIsY2xhc3M6eyJlbC10cmVlLS1oaWdobGlnaHQtY3VycmVudCI6ZS5oaWdobGlnaHRDdXJyZW50fX0sW2UuX2woZS5yb290LmNoaWxkTm9kZXMsZnVuY3Rpb24odCl7cmV0dXJuIGkoImVsLXRyZWUtbm9kZSIse2tleTplLmdldE5vZGVLZXkodCksYXR0cnM6e25vZGU6dCxwcm9wczplLnByb3BzLCJyZW5kZXItY29udGVudCI6ZS5yZW5kZXJDb250ZW50fSxvbjp7Im5vZGUtZXhwYW5kIjplLmhhbmRsZU5vZGVFeHBhbmR9fSl9KSxlLnJvb3QuY2hpbGROb2RlcyYmMCE9PWUucm9vdC5jaGlsZE5vZGVzLmxlbmd0aD9lLl9lKCk6aSgiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXRyZWVfX2VtcHR5LWJsb2NrIn0sW2koInNwYW4iLHtzdGF0aWNDbGFzczoiZWwtdHJlZV9fZW1wdHktdGV4dCJ9LFtlLl92KGUuX3MoZS5lbXB0eVRleHQpKV0pXSldLDIpfSxzdGF0aWNSZW5kZXJGbnM6W119fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXQuX19lc01vZHVsZT0hMDt2YXIgcz1pKDI2MSksbz1uKHMpO28uZGVmYXVsdC5pbnN0YWxsPWZ1bmN0aW9uKGUpe2UuY29tcG9uZW50KG8uZGVmYXVsdC5uYW1lLG8uZGVmYXVsdCl9LHQuZGVmYXVsdD1vLmRlZmF1bHR9LGZ1bmN0aW9uKGUsdCxpKXt2YXIgbj1pKDUpKGkoMjYyKSxpKDI2MyksbnVsbCxudWxsKTtlLmV4cG9ydHM9bi5leHBvcnRzfSxmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0Ijt0Ll9fZXNNb2R1bGU9ITA7dmFyIGk9e3N1Y2Nlc3M6ImVsLWljb24tY2lyY2xlLWNoZWNrIix3YXJuaW5nOiJlbC1pY29uLXdhcm5pbmciLGVycm9yOiJlbC1pY29uLWNpcmNsZS1jcm9zcyJ9O3QuZGVmYXVsdD17bmFtZToiRWxBbGVydCIscHJvcHM6e3RpdGxlOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIiLHJlcXVpcmVkOiEwfSxkZXNjcmlwdGlvbjp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn0sdHlwZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiaW5mbyJ9LGNsb3NhYmxlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMH0sY2xvc2VUZXh0Ont0eXBlOlN0cmluZyxkZWZhdWx0OiIifSxzaG93SWNvbjp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3Zpc2libGU6ITB9fSxtZXRob2RzOntjbG9zZTpmdW5jdGlvbigpe3RoaXMudmlzaWJsZT0hMSx0aGlzLiRlbWl0KCJjbG9zZSIpfX0sY29tcHV0ZWQ6e3R5cGVDbGFzczpmdW5jdGlvbigpe3JldHVybiJlbC1hbGVydC0tIit0aGlzLnR5cGV9LGljb25DbGFzczpmdW5jdGlvbigpe3JldHVybiBpW3RoaXMudHlwZV18fCJlbC1pY29uLWluZm9ybWF0aW9uIn0saXNCaWdJY29uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVzY3JpcHRpb24/ImlzLWJpZyI6IiJ9LGlzQm9sZFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVzY3JpcHRpb24/ImlzLWJvbGQiOiIifX19fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuJGNyZWF0ZUVsZW1lbnQsaT1lLl9zZWxmLl9jfHx0O3JldHVybiBpKCJ0cmFuc2l0aW9uIix7YXR0cnM6e25hbWU6ImVsLWFsZXJ0LWZhZGUifX0sW2koImRpdiIse2RpcmVjdGl2ZXM6W3tuYW1lOiJzaG93IixyYXdOYW1lOiJ2LXNob3ciLHZhbHVlOmUudmlzaWJsZSxleHByZXNzaW9uOiJ2aXNpYmxlIn1dLHN0YXRpY0NsYXNzOiJlbC1hbGVydCIsY2xhc3M6W2UudHlwZUNsYXNzXX0sW2Uuc2hvd0ljb24/aSgiaSIse3N0YXRpY0NsYXNzOiJlbC1hbGVydF9faWNvbiIsY2xhc3M6W2UuaWNvbkNsYXNzLGUuaXNCaWdJY29uXX0pOmUuX2UoKSxpKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtYWxlcnRfX2NvbnRlbnQifSxbZS50aXRsZT9pKCJzcGFuIix7c3RhdGljQ2xhc3M6ImVsLWFsZXJ0X190aXRsZSIsY2xhc3M6W2UuaXNCb2xkVGl0bGVdfSxbZS5fdihlLl9zKGUudGl0bGUpKV0pOmUuX2UoKSxlLl90KCJkZWZhdWx0IixbZS5kZXNjcmlwdGlvbj9pKCJwIix7c3RhdGljQ2xhc3M6ImVsLWFsZXJ0X19kZXNjcmlwdGlvbiJ9LFtlLl92KGUuX3MoZS5kZXNjcmlwdGlvbikpXSk6ZS5fZSgpXSksaSgiaSIse2RpcmVjdGl2ZXM6W3tuYW1lOiJzaG93IixyYXdOYW1lOiJ2LXNob3ciLHZhbHVlOmUuY2xvc2FibGUsZXhwcmVzc2lvbjoiY2xvc2FibGUifV0sc3RhdGljQ2xhc3M6ImVsLWFsZXJ0X19jbG9zZWJ0biIsY2xhc3M6eyJpcy1jdXN0b21lZCI6IiIhPT1lLmNsb3NlVGV4dCwiZWwtaWNvbi1jbG9zZSI6IiI9PT1lLmNsb3NlVGV4dH0sb246e2NsaWNrOmZ1bmN0aW9uKHQpe2UuY2xvc2UoKX19fSxbZS5fdihlLl9zKGUuY2xvc2VUZXh0KSldKV0sMildKV0pfSxzdGF0aWNSZW5kZXJGbnM6W119fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXQuX19lc01vZHVsZT0hMDt2YXIgcz1pKDI2NSksbz1uKHMpO3QuZGVmYXVsdD1vLmRlZmF1bHR9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5fX2VzTW9kdWxlPSEwO3ZhciBzPWkoMTUpLG89bihzKSxhPWkoMjgpLHI9aSgxNDApLGw9by5kZWZhdWx0LmV4dGVuZChpKDI2NikpLHU9dm9pZCAwLGM9W10sZD0xLGg9ZnVuY3Rpb24gZSh0KXtpZighby5kZWZhdWx0LnByb3RvdHlwZS4kaXNTZXJ2ZXIpe3Q9dHx8e307dmFyIGk9dC5vbkNsb3NlLG49Im5vdGlmaWNhdGlvbl8iK2QrKzt0Lm9uQ2xvc2U9ZnVuY3Rpb24oKXtlLmNsb3NlKG4saSl9LHU9bmV3IGwoe2RhdGE6dH0pLCgwLHIuaXNWTm9kZSkodC5tZXNzYWdlKSYmKHUuJHNsb3RzLmRlZmF1bHQ9W3QubWVzc2FnZV0sdC5tZXNzYWdlPSIiKSx1LmlkPW4sdS52bT11LiRtb3VudCgpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodS52bS4kZWwpLHUudm0udmlzaWJsZT0hMCx1LmRvbT11LnZtLiRlbCx1LmRvbS5zdHlsZS56SW5kZXg9YS5Qb3B1cE1hbmFnZXIubmV4dFpJbmRleCgpO2Zvcih2YXIgcz10Lm9mZnNldHx8MCxoPXMsZj0wLHA9Yy5sZW5ndGg7ZjxwO2YrKyloKz1jW2ZdLiRlbC5vZmZzZXRIZWlnaHQrMTY7cmV0dXJuIGgrPTE2LHUudG9wPWgsYy5wdXNoKHUpLHUudm19fTtbInN1Y2Nlc3MiLCJ3YXJuaW5nIiwiaW5mbyIsImVycm9yIl0uZm9yRWFjaChmdW5jdGlvbihlKXtoW2VdPWZ1bmN0aW9uKHQpe3JldHVybigic3RyaW5nIj09dHlwZW9mIHR8fCgwLHIuaXNWTm9kZSkodCkpJiYodD17bWVzc2FnZTp0fSksdC50eXBlPWUsaCh0KX19KSxoLmNsb3NlPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBpPXZvaWQgMCxuPXZvaWQgMCxzPTAsbz1jLmxlbmd0aDtzPG87cysrKWlmKGU9PT1jW3NdLmlkKXsiZnVuY3Rpb24iPT10eXBlb2YgdCYmdChjW3NdKSxpPXMsbj1jW3NdLmRvbS5vZmZzZXRIZWlnaHQsYy5zcGxpY2UocywxKTticmVha31pZihvPjEpZm9yKHM9aTtzPG8tMTtzKyspY1tzXS5kb20uc3R5bGUudG9wPXBhcnNlSW50KGNbc10uZG9tLnN0eWxlLnRvcCwxMCktbi0xNisicHgifSx0LmRlZmF1bHQ9aH0sZnVuY3Rpb24oZSx0LGkpe3ZhciBuPWkoNSkoaSgyNjcpLGkoMjY4KSxudWxsLG51bGwpO2UuZXhwb3J0cz1uLmV4cG9ydHN9LGZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO3QuX19lc01vZHVsZT0hMDt2YXIgaT17c3VjY2VzczoiY2lyY2xlLWNoZWNrIixpbmZvOiJpbmZvcm1hdGlvbiIsd2FybmluZzoid2FybmluZyIsZXJyb3I6ImNpcmNsZS1jcm9zcyJ9O3QuZGVmYXVsdD17ZGF0YTpmdW5jdGlvbigpe3JldHVybnt2aXNpYmxlOiExLHRpdGxlOiIiLG1lc3NhZ2U6IiIsZHVyYXRpb246NDUwMCx0eXBlOiIiLGN1c3RvbUNsYXNzOiIiLGljb25DbGFzczoiIixvbkNsb3NlOm51bGwsb25DbGljazpudWxsLGNsb3NlZDohMSx0b3A6bnVsbCx0aW1lcjpudWxsfX0sY29tcHV0ZWQ6e3R5cGVDbGFzczpmdW5jdGlvbigpe3JldHVybiB0aGlzLnR5cGUmJmlbdGhpcy50eXBlXT8iZWwtaWNvbi0iK2lbdGhpcy50eXBlXToiIn19LHdhdGNoOntjbG9zZWQ6ZnVuY3Rpb24oZSl7ZSYmKHRoaXMudmlzaWJsZT0hMSx0aGlzLiRlbC5hZGRFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIix0aGlzLmRlc3Ryb3lFbGVtZW50KSl9fSxtZXRob2RzOntkZXN0cm95RWxlbWVudDpmdW5jdGlvbigpe3RoaXMuJGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLHRoaXMuZGVzdHJveUVsZW1lbnQpLHRoaXMuJGRlc3Ryb3koITApLHRoaXMuJGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy4kZWwpfSxjbGljazpmdW5jdGlvbigpeyJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLm9uQ2xpY2smJnRoaXMub25DbGljaygpfSxjbG9zZTpmdW5jdGlvbigpe3RoaXMuY2xvc2VkPSEwLCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLm9uQ2xvc2UmJnRoaXMub25DbG9zZSgpfSxjbGVhclRpbWVyOmZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpfSxzdGFydFRpbWVyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLmR1cmF0aW9uPjAmJih0aGlzLnRpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLmNsb3NlZHx8ZS5jbG9zZSgpfSx0aGlzLmR1cmF0aW9uKSl9fSxtb3VudGVkOmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLmR1cmF0aW9uPjAmJih0aGlzLnRpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLmNsb3NlZHx8ZS5jbG9zZSgpfSx0aGlzLmR1cmF0aW9uKSl9fX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLiRjcmVhdGVFbGVtZW50LGk9ZS5fc2VsZi5fY3x8dDtyZXR1cm4gaSgidHJhbnNpdGlvbiIse2F0dHJzOntuYW1lOiJlbC1ub3RpZmljYXRpb24tZmFkZSJ9fSxbaSgiZGl2Iix7ZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6ZS52aXNpYmxlLGV4cHJlc3Npb246InZpc2libGUifV0sc3RhdGljQ2xhc3M6ImVsLW5vdGlmaWNhdGlvbiIsY2xhc3M6ZS5jdXN0b21DbGFzcyxzdHlsZTp7dG9wOmUudG9wP2UudG9wKyJweCI6ImF1dG8ifSxvbjp7bW91c2VlbnRlcjpmdW5jdGlvbih0KXtlLmNsZWFyVGltZXIoKX0sbW91c2VsZWF2ZTpmdW5jdGlvbih0KXtlLnN0YXJ0VGltZXIoKX0sY2xpY2s6ZS5jbGlja319LFtlLnR5cGV8fGUuaWNvbkNsYXNzP2koImkiLHtzdGF0aWNDbGFzczoiZWwtbm90aWZpY2F0aW9uX19pY29uIixjbGFzczpbZS50eXBlQ2xhc3MsZS5pY29uQ2xhc3NdfSk6ZS5fZSgpLGkoImRpdiIse3N0YXRpY0NsYXNzOiJlbC1ub3RpZmljYXRpb25fX2dyb3VwIixjbGFzczp7ImlzLXdpdGgtaWNvbiI6ZS50eXBlQ2xhc3N8fGUuaWNvbkNsYXNzfX0sW2koImgyIix7c3RhdGljQ2xhc3M6ImVsLW5vdGlmaWNhdGlvbl9fdGl0bGUiLGRvbVByb3BzOnt0ZXh0Q29udGVudDplLl9zKGUudGl0bGUpfX0pLGkoImRpdiIse3N0YXRpY0NsYXNzOiJlbC1ub3RpZmljYXRpb25fX2NvbnRlbnQifSxbZS5fdCgiZGVmYXVsdCIsW2UuX3YoZS5fcyhlLm1lc3NhZ2UpKV0pXSwyKSxpKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtbm90aWZpY2F0aW9uX19jbG9zZUJ0biBlbC1pY29uLWNsb3NlIixvbjp7Y2xpY2s6ZnVuY3Rpb24odCl7CnQuc3RvcFByb3BhZ2F0aW9uKCksZS5jbG9zZSh0KX19fSldKV0pXSl9LHN0YXRpY1JlbmRlckZuczpbXX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5fX2VzTW9kdWxlPSEwO3ZhciBzPWkoMjcwKSxvPW4ocyk7by5kZWZhdWx0Lmluc3RhbGw9ZnVuY3Rpb24oZSl7ZS5jb21wb25lbnQoby5kZWZhdWx0Lm5hbWUsby5kZWZhdWx0KX0sdC5kZWZhdWx0PW8uZGVmYXVsdH0sZnVuY3Rpb24oZSx0LGkpe3ZhciBuPWkoNSkoaSgyNzEpLGkoMjc1KSxudWxsLG51bGwpO2UuZXhwb3J0cz1uLmV4cG9ydHN9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5fX2VzTW9kdWxlPSEwO3ZhciBzPWkoOTkpLG89bihzKSxhPWkoMjcyKSxyPW4oYSksbD1pKDMwKSx1PWkoMTEpLGM9bih1KTt0LmRlZmF1bHQ9e25hbWU6IkVsU2xpZGVyIixtaXhpbnM6W2MuZGVmYXVsdF0scHJvcHM6e21pbjp7dHlwZTpOdW1iZXIsZGVmYXVsdDowfSxtYXg6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MTAwfSxzdGVwOnt0eXBlOk51bWJlcixkZWZhdWx0OjF9LHZhbHVlOnt0eXBlOltOdW1iZXIsQXJyYXldLGRlZmF1bHQ6MH0sc2hvd0lucHV0Ont0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sc2hvd0lucHV0Q29udHJvbHM6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiEwfSxzaG93U3RvcHM6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxzaG93VG9vbHRpcDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITB9LGZvcm1hdFRvb2x0aXA6RnVuY3Rpb24sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxyYW5nZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9fSxjb21wb25lbnRzOntFbElucHV0TnVtYmVyOm8uZGVmYXVsdCxTbGlkZXJCdXR0b246ci5kZWZhdWx0fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2ZpcnN0VmFsdWU6bnVsbCxzZWNvbmRWYWx1ZTpudWxsLG9sZFZhbHVlOm51bGwsZHJhZ2dpbmc6ITF9fSx3YXRjaDp7dmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzLmRyYWdnaW5nfHxBcnJheS5pc0FycmF5KGUpJiZBcnJheS5pc0FycmF5KHQpJiZlLmV2ZXJ5KGZ1bmN0aW9uKGUsaSl7cmV0dXJuIGU9PT10W2ldfSl8fHRoaXMuc2V0VmFsdWVzKCl9LGRyYWdnaW5nOmZ1bmN0aW9uKGUpe2V8fHRoaXMuc2V0VmFsdWVzKCl9LGZpcnN0VmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5yYW5nZT90aGlzLiRlbWl0KCJpbnB1dCIsW3RoaXMubWluVmFsdWUsdGhpcy5tYXhWYWx1ZV0pOnRoaXMuJGVtaXQoImlucHV0IixlKX0sc2Vjb25kVmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnJhbmdlJiZ0aGlzLiRlbWl0KCJpbnB1dCIsW3RoaXMubWluVmFsdWUsdGhpcy5tYXhWYWx1ZV0pfSxtaW46ZnVuY3Rpb24oKXt0aGlzLnNldFZhbHVlcygpfSxtYXg6ZnVuY3Rpb24oKXt0aGlzLnNldFZhbHVlcygpfX0sbWV0aG9kczp7dmFsdWVDaGFuZ2VkOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyZXR1cm4gdGhpcy5yYW5nZT8hW3RoaXMubWluVmFsdWUsdGhpcy5tYXhWYWx1ZV0uZXZlcnkoZnVuY3Rpb24odCxpKXtyZXR1cm4gdD09PWUub2xkVmFsdWVbaV19KTp0aGlzLnZhbHVlIT09dGhpcy5vbGRWYWx1ZX0sc2V0VmFsdWVzOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy52YWx1ZTt0aGlzLnJhbmdlJiZBcnJheS5pc0FycmF5KGUpP2VbMV08dGhpcy5taW4/dGhpcy4kZW1pdCgiaW5wdXQiLFt0aGlzLm1pbix0aGlzLm1pbl0pOmVbMF0+dGhpcy5tYXg/dGhpcy4kZW1pdCgiaW5wdXQiLFt0aGlzLm1heCx0aGlzLm1heF0pOmVbMF08dGhpcy5taW4/dGhpcy4kZW1pdCgiaW5wdXQiLFt0aGlzLm1pbixlWzFdXSk6ZVsxXT50aGlzLm1heD90aGlzLiRlbWl0KCJpbnB1dCIsW2VbMF0sdGhpcy5tYXhdKToodGhpcy5maXJzdFZhbHVlPWVbMF0sdGhpcy5zZWNvbmRWYWx1ZT1lWzFdLHRoaXMudmFsdWVDaGFuZ2VkKCkmJih0aGlzLiRlbWl0KCJjaGFuZ2UiLFt0aGlzLm1pblZhbHVlLHRoaXMubWF4VmFsdWVdKSx0aGlzLmRpc3BhdGNoKCJFbEZvcm1JdGVtIiwiZWwuZm9ybS5jaGFuZ2UiLFt0aGlzLm1pblZhbHVlLHRoaXMubWF4VmFsdWVdKSx0aGlzLm9sZFZhbHVlPWUuc2xpY2UoKSkpOnRoaXMucmFuZ2V8fCJudW1iZXIiIT10eXBlb2YgZXx8aXNOYU4oZSl8fChlPHRoaXMubWluP3RoaXMuJGVtaXQoImlucHV0Iix0aGlzLm1pbik6ZT50aGlzLm1heD90aGlzLiRlbWl0KCJpbnB1dCIsdGhpcy5tYXgpOih0aGlzLmZpcnN0VmFsdWU9ZSx0aGlzLnZhbHVlQ2hhbmdlZCgpJiYodGhpcy4kZW1pdCgiY2hhbmdlIixlKSx0aGlzLmRpc3BhdGNoKCJFbEZvcm1JdGVtIiwiZWwuZm9ybS5jaGFuZ2UiLGUpLHRoaXMub2xkVmFsdWU9ZSkpKX0sc2V0UG9zaXRpb246ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5taW4rZSoodGhpcy5tYXgtdGhpcy5taW4pLzEwMDtpZighdGhpcy5yYW5nZSlyZXR1cm4gdm9pZCB0aGlzLiRyZWZzLmJ1dHRvbjEuc2V0UG9zaXRpb24oZSk7dmFyIGk9dm9pZCAwO2k9TWF0aC5hYnModGhpcy5taW5WYWx1ZS10KTxNYXRoLmFicyh0aGlzLm1heFZhbHVlLXQpP3RoaXMuZmlyc3RWYWx1ZTx0aGlzLnNlY29uZFZhbHVlPyJidXR0b24xIjoiYnV0dG9uMiI6dGhpcy5maXJzdFZhbHVlPnRoaXMuc2Vjb25kVmFsdWU/ImJ1dHRvbjEiOiJidXR0b24yIix0aGlzLiRyZWZzW2ldLnNldFBvc2l0aW9uKGUpfSxvblNsaWRlckNsaWNrOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLmRpc2FibGVkJiYhdGhpcy5kcmFnZ2luZyl7dmFyIHQ9dGhpcy4kcmVmcy5zbGlkZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDt0aGlzLnNldFBvc2l0aW9uKChlLmNsaWVudFgtdCkvdGhpcy4kc2xpZGVyV2lkdGgqMTAwKX19fSxjb21wdXRlZDp7JHNsaWRlcldpZHRoOmZ1bmN0aW9uKCl7cmV0dXJuIHBhcnNlSW50KCgwLGwuZ2V0U3R5bGUpKHRoaXMuJHJlZnMuc2xpZGVyLCJ3aWR0aCIpLDEwKX0sc3RvcHM6ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcyx0PSh0aGlzLm1heC10aGlzLm1pbikvdGhpcy5zdGVwLGk9MTAwKnRoaXMuc3RlcC8odGhpcy5tYXgtdGhpcy5taW4pLG49W10scz0xO3M8dDtzKyspbi5wdXNoKHMqaSk7cmV0dXJuIHRoaXMucmFuZ2U/bi5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQ8MTAwKihlLm1pblZhbHVlLWUubWluKS8oZS5tYXgtZS5taW4pfHx0PjEwMCooZS5tYXhWYWx1ZS1lLm1pbikvKGUubWF4LWUubWluKX0pOm4uZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0PjEwMCooZS5maXJzdFZhbHVlLWUubWluKS8oZS5tYXgtZS5taW4pfSl9LG1pblZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgubWluKHRoaXMuZmlyc3RWYWx1ZSx0aGlzLnNlY29uZFZhbHVlKX0sbWF4VmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5tYXgodGhpcy5maXJzdFZhbHVlLHRoaXMuc2Vjb25kVmFsdWUpfSxiYXJXaWR0aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJhbmdlPzEwMCoodGhpcy5tYXhWYWx1ZS10aGlzLm1pblZhbHVlKS8odGhpcy5tYXgtdGhpcy5taW4pKyIlIjoxMDAqKHRoaXMuZmlyc3RWYWx1ZS10aGlzLm1pbikvKHRoaXMubWF4LXRoaXMubWluKSsiJSJ9LGJhckxlZnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yYW5nZT8xMDAqKHRoaXMubWluVmFsdWUtdGhpcy5taW4pLyh0aGlzLm1heC10aGlzLm1pbikrIiUiOiIwJSJ9LHByZWNpc2lvbjpmdW5jdGlvbigpe3ZhciBlPVt0aGlzLm1pbix0aGlzLm1heCx0aGlzLnN0ZXBdLm1hcChmdW5jdGlvbihlKXt2YXIgdD0oIiIrZSkuc3BsaXQoIi4iKVsxXTtyZXR1cm4gdD90Lmxlbmd0aDowfSk7cmV0dXJuIE1hdGgubWF4LmFwcGx5KG51bGwsZSl9fSxtb3VudGVkOmZ1bmN0aW9uKCl7dGhpcy5yYW5nZT8oQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKT8odGhpcy5maXJzdFZhbHVlPU1hdGgubWF4KHRoaXMubWluLHRoaXMudmFsdWVbMF0pLHRoaXMuc2Vjb25kVmFsdWU9TWF0aC5taW4odGhpcy5tYXgsdGhpcy52YWx1ZVsxXSkpOih0aGlzLmZpcnN0VmFsdWU9dGhpcy5taW4sdGhpcy5zZWNvbmRWYWx1ZT10aGlzLm1heCksdGhpcy5vbGRWYWx1ZT1bdGhpcy5maXJzdFZhbHVlLHRoaXMuc2Vjb25kVmFsdWVdKTooIm51bWJlciIhPXR5cGVvZiB0aGlzLnZhbHVlfHxpc05hTih0aGlzLnZhbHVlKT90aGlzLmZpcnN0VmFsdWU9dGhpcy5taW46dGhpcy5maXJzdFZhbHVlPU1hdGgubWluKHRoaXMubWF4LE1hdGgubWF4KHRoaXMubWluLHRoaXMudmFsdWUpKSx0aGlzLm9sZFZhbHVlPXRoaXMuZmlyc3RWYWx1ZSl9fX0sZnVuY3Rpb24oZSx0LGkpe3ZhciBuPWkoNSkoaSgyNzMpLGkoMjc0KSxudWxsLG51bGwpO2UuZXhwb3J0cz1uLmV4cG9ydHN9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5fX2VzTW9kdWxlPSEwO3ZhciBzPWkoMTM4KSxvPW4ocyk7dC5kZWZhdWx0PXtuYW1lOiJFbFNsaWRlckJ1dHRvbiIsY29tcG9uZW50czp7RWxUb29sdGlwOm8uZGVmYXVsdH0scHJvcHM6e3ZhbHVlOnt0eXBlOk51bWJlcixkZWZhdWx0OjB9fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2hvdmVyaW5nOiExLGRyYWdnaW5nOiExLHN0YXJ0WDowLGN1cnJlbnRYOjAsc3RhcnRQb3NpdGlvbjowLG5ld1Bvc2l0aW9uOm51bGwsb2xkVmFsdWU6dGhpcy52YWx1ZX19LGNvbXB1dGVkOntkaXNhYmxlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRwYXJlbnQuZGlzYWJsZWR9LG1heDpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRwYXJlbnQubWF4fSxtaW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kcGFyZW50Lm1pbn0sc3RlcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRwYXJlbnQuc3RlcH0sc2hvd1Rvb2x0aXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kcGFyZW50LnNob3dUb29sdGlwfSxwcmVjaXNpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kcGFyZW50LnByZWNpc2lvbn0sY3VycmVudFBvc2l0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMudmFsdWUtdGhpcy5taW4pLyh0aGlzLm1heC10aGlzLm1pbikqMTAwKyIlIn0sZW5hYmxlRm9ybWF0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHBhcmVudC5mb3JtYXRUb29sdGlwIGluc3RhbmNlb2YgRnVuY3Rpb259LGZvcm1hdFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW5hYmxlRm9ybWF0JiZ0aGlzLiRwYXJlbnQuZm9ybWF0VG9vbHRpcCh0aGlzLnZhbHVlKXx8dGhpcy52YWx1ZX19LHdhdGNoOntkcmFnZ2luZzpmdW5jdGlvbihlKXt0aGlzLiRwYXJlbnQuZHJhZ2dpbmc9ZX19LG1ldGhvZHM6e2Rpc3BsYXlUb29sdGlwOmZ1bmN0aW9uKCl7dGhpcy4kcmVmcy50b29sdGlwJiYodGhpcy4kcmVmcy50b29sdGlwLnNob3dQb3BwZXI9ITApfSxoaWRlVG9vbHRpcDpmdW5jdGlvbigpe3RoaXMuJHJlZnMudG9vbHRpcCYmKHRoaXMuJHJlZnMudG9vbHRpcC5zaG93UG9wcGVyPSExKX0saGFuZGxlTW91c2VFbnRlcjpmdW5jdGlvbigpe3RoaXMuaG92ZXJpbmc9ITAsdGhpcy5kaXNwbGF5VG9vbHRpcCgpfSxoYW5kbGVNb3VzZUxlYXZlOmZ1bmN0aW9uKCl7dGhpcy5ob3ZlcmluZz0hMSx0aGlzLmhpZGVUb29sdGlwKCl9LG9uQnV0dG9uRG93bjpmdW5jdGlvbihlKXt0aGlzLmRpc2FibGVkfHwoZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMub25EcmFnU3RhcnQoZSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5vbkRyYWdnaW5nKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsdGhpcy5vbkRyYWdFbmQpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsdGhpcy5vbkRyYWdFbmQpKX0sb25EcmFnU3RhcnQ6ZnVuY3Rpb24oZSl7dGhpcy5kcmFnZ2luZz0hMCx0aGlzLnN0YXJ0WD1lLmNsaWVudFgsdGhpcy5zdGFydFBvc2l0aW9uPXBhcnNlRmxvYXQodGhpcy5jdXJyZW50UG9zaXRpb24pfSxvbkRyYWdnaW5nOmZ1bmN0aW9uKGUpe2lmKHRoaXMuZHJhZ2dpbmcpe3RoaXMuZGlzcGxheVRvb2x0aXAoKSx0aGlzLmN1cnJlbnRYPWUuY2xpZW50WDt2YXIgdD0odGhpcy5jdXJyZW50WC10aGlzLnN0YXJ0WCkvdGhpcy4kcGFyZW50LiRzbGlkZXJXaWR0aCoxMDA7dGhpcy5uZXdQb3NpdGlvbj10aGlzLnN0YXJ0UG9zaXRpb24rdCx0aGlzLnNldFBvc2l0aW9uKHRoaXMubmV3UG9zaXRpb24pfX0sb25EcmFnRW5kOmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLmRyYWdnaW5nJiYoc2V0VGltZW91dChmdW5jdGlvbigpe2UuZHJhZ2dpbmc9ITEsZS5oaWRlVG9vbHRpcCgpLGUuc2V0UG9zaXRpb24oZS5uZXdQb3NpdGlvbil9LDApLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHRoaXMub25EcmFnZ2luZyksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHRoaXMub25EcmFnRW5kKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLHRoaXMub25EcmFnRW5kKSl9LHNldFBvc2l0aW9uOmZ1bmN0aW9uKGUpe2U8MD9lPTA6ZT4xMDAmJihlPTEwMCk7dmFyIHQ9MTAwLygodGhpcy5tYXgtdGhpcy5taW4pL3RoaXMuc3RlcCksaT1NYXRoLnJvdW5kKGUvdCksbj1pKnQqKHRoaXMubWF4LXRoaXMubWluKSouMDErdGhpcy5taW47bj1wYXJzZUZsb2F0KG4udG9GaXhlZCh0aGlzLnByZWNpc2lvbikpLHRoaXMuJGVtaXQoImlucHV0IixuKSx0aGlzLiRyZWZzLnRvb2x0aXAmJnRoaXMuJHJlZnMudG9vbHRpcC51cGRhdGVQb3BwZXIoKSx0aGlzLmRyYWdnaW5nfHx0aGlzLnZhbHVlPT09dGhpcy5vbGRWYWx1ZXx8KHRoaXMub2xkVmFsdWU9dGhpcy52YWx1ZSl9fX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxpPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIGkoImRpdiIse3JlZjoiYnV0dG9uIixzdGF0aWNDbGFzczoiZWwtc2xpZGVyX19idXR0b24td3JhcHBlciIsY2xhc3M6e2hvdmVyOmUuaG92ZXJpbmcsZHJhZ2dpbmc6ZS5kcmFnZ2luZ30sc3R5bGU6e2xlZnQ6ZS5jdXJyZW50UG9zaXRpb259LG9uOnttb3VzZWVudGVyOmUuaGFuZGxlTW91c2VFbnRlcixtb3VzZWxlYXZlOmUuaGFuZGxlTW91c2VMZWF2ZSxtb3VzZWRvd246ZS5vbkJ1dHRvbkRvd259fSxbaSgiZWwtdG9vbHRpcCIse3JlZjoidG9vbHRpcCIsYXR0cnM6e3BsYWNlbWVudDoidG9wIixkaXNhYmxlZDohZS5zaG93VG9vbHRpcH19LFtpKCJzcGFuIix7c2xvdDoiY29udGVudCJ9LFtlLl92KGUuX3MoZS5mb3JtYXRWYWx1ZSkpXSksaSgiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXNsaWRlcl9fYnV0dG9uIixjbGFzczp7aG92ZXI6ZS5ob3ZlcmluZyxkcmFnZ2luZzplLmRyYWdnaW5nfX0pXSldLDEpfSxzdGF0aWNSZW5kZXJGbnM6W119fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuJGNyZWF0ZUVsZW1lbnQsaT1lLl9zZWxmLl9jfHx0O3JldHVybiBpKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtc2xpZGVyIn0sW2Uuc2hvd0lucHV0JiYhZS5yYW5nZT9pKCJlbC1pbnB1dC1udW1iZXIiLHtkaXJlY3RpdmVzOlt7bmFtZToibW9kZWwiLHJhd05hbWU6InYtbW9kZWwiLHZhbHVlOmUuZmlyc3RWYWx1ZSxleHByZXNzaW9uOiJmaXJzdFZhbHVlIn1dLHJlZjoiaW5wdXQiLHN0YXRpY0NsYXNzOiJlbC1zbGlkZXJfX2lucHV0IixhdHRyczp7c3RlcDplLnN0ZXAsZGlzYWJsZWQ6ZS5kaXNhYmxlZCxjb250cm9sczplLnNob3dJbnB1dENvbnRyb2xzLG1pbjplLm1pbixtYXg6ZS5tYXgsc2l6ZToic21hbGwifSxkb21Qcm9wczp7dmFsdWU6ZS5maXJzdFZhbHVlfSxvbjp7aW5wdXQ6ZnVuY3Rpb24odCl7ZS5maXJzdFZhbHVlPXR9fX0pOmUuX2UoKSxpKCJkaXYiLHtyZWY6InNsaWRlciIsc3RhdGljQ2xhc3M6ImVsLXNsaWRlcl9fcnVud2F5IixjbGFzczp7InNob3ctaW5wdXQiOmUuc2hvd0lucHV0LGRpc2FibGVkOmUuZGlzYWJsZWR9LG9uOntjbGljazplLm9uU2xpZGVyQ2xpY2t9fSxbaSgiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXNsaWRlcl9fYmFyIixzdHlsZTp7d2lkdGg6ZS5iYXJXaWR0aCxsZWZ0OmUuYmFyTGVmdH19KSxpKCJzbGlkZXItYnV0dG9uIix7ZGlyZWN0aXZlczpbe25hbWU6Im1vZGVsIixyYXdOYW1lOiJ2LW1vZGVsIix2YWx1ZTplLmZpcnN0VmFsdWUsZXhwcmVzc2lvbjoiZmlyc3RWYWx1ZSJ9XSxyZWY6ImJ1dHRvbjEiLGRvbVByb3BzOnt2YWx1ZTplLmZpcnN0VmFsdWV9LG9uOntpbnB1dDpmdW5jdGlvbih0KXtlLmZpcnN0VmFsdWU9dH19fSksZS5yYW5nZT9pKCJzbGlkZXItYnV0dG9uIix7ZGlyZWN0aXZlczpbe25hbWU6Im1vZGVsIixyYXdOYW1lOiJ2LW1vZGVsIix2YWx1ZTplLnNlY29uZFZhbHVlLGV4cHJlc3Npb246InNlY29uZFZhbHVlIn1dLHJlZjoiYnV0dG9uMiIsZG9tUHJvcHM6e3ZhbHVlOmUuc2Vjb25kVmFsdWV9LG9uOntpbnB1dDpmdW5jdGlvbih0KXtlLnNlY29uZFZhbHVlPXR9fX0pOmUuX2UoKSxlLl9sKGUuc3RvcHMsZnVuY3Rpb24odCl7cmV0dXJuIGUuc2hvd1N0b3BzP2koImRpdiIse3N0YXRpY0NsYXNzOiJlbC1zbGlkZXJfX3N0b3AiLHN0eWxlOntsZWZ0OnQrIiUifX0pOmUuX2UoKX0pXSwyKV0sMSl9LHN0YXRpY1JlbmRlckZuczpbXX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5fX2VzTW9kdWxlPSEwO3ZhciBzPWkoMjc3KSxvPW4ocyksYT1pKDI4MSkscj1uKGEpO3QuZGVmYXVsdD17aW5zdGFsbDpmdW5jdGlvbihlKXtlLnVzZShvLmRlZmF1bHQpLGUucHJvdG90eXBlLiRsb2FkaW5nPXIuZGVmYXVsdH0sZGlyZWN0aXZlOm8uZGVmYXVsdCxzZXJ2aWNlOnIuZGVmYXVsdH19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dmFyIHM9aSgxNSksbz1uKHMpLGE9aSgzMCkscj1vLmRlZmF1bHQuZXh0ZW5kKGkoMjc4KSk7dC5pbnN0YWxsPWZ1bmN0aW9uKGUpe2lmKCFlLnByb3RvdHlwZS4kaXNTZXJ2ZXIpe3ZhciB0PWZ1bmN0aW9uKHQsbil7bi52YWx1ZT9lLm5leHRUaWNrKGZ1bmN0aW9uKCl7bi5tb2RpZmllcnMuZnVsbHNjcmVlbj8odC5vcmlnaW5hbFBvc2l0aW9uPWRvY3VtZW50LmJvZHkuc3R5bGUucG9zaXRpb24sdC5vcmlnaW5hbE92ZXJmbG93PWRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3csKDAsYS5hZGRDbGFzcykodC5tYXNrLCJpcy1mdWxsc2NyZWVuIiksaShkb2N1bWVudC5ib2R5LHQsbikpOigoMCxhLnJlbW92ZUNsYXNzKSh0Lm1hc2ssImlzLWZ1bGxzY3JlZW4iKSxuLm1vZGlmaWVycy5ib2R5Pyh0Lm9yaWdpbmFsUG9zaXRpb249ZG9jdW1lbnQuYm9keS5zdHlsZS5wb3NpdGlvbixbInRvcCIsImxlZnQiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBpPSJ0b3AiPT09ZT8ic2Nyb2xsVG9wIjoic2Nyb2xsTGVmdCI7dC5tYXNrU3R5bGVbZV09dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtlXStkb2N1bWVudC5ib2R5W2ldK2RvY3VtZW50LmRvY3VtZW50RWxlbWVudFtpXSsicHgifSksWyJoZWlnaHQiLCJ3aWR0aCJdLmZvckVhY2goZnVuY3Rpb24oZSl7dC5tYXNrU3R5bGVbZV09dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtlXSsicHgifSksaShkb2N1bWVudC5ib2R5LHQsbikpOih0Lm9yaWdpbmFsUG9zaXRpb249dC5zdHlsZS5wb3NpdGlvbixpKHQsdCxuKSkpfSk6dC5kb21WaXNpYmxlJiYodC5pbnN0YW5jZS4kb24oImFmdGVyLWxlYXZlIixmdW5jdGlvbihlKXt0LmRvbVZpc2libGU9ITEsbi5tb2RpZmllcnMuZnVsbHNjcmVlbiYmImhpZGRlbiIhPT10Lm9yaWdpbmFsT3ZlcmZsb3cmJihkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93PXQub3JpZ2luYWxPdmVyZmxvdyksbi5tb2RpZmllcnMuZnVsbHNjcmVlbnx8bi5tb2RpZmllcnMuYm9keT9kb2N1bWVudC5ib2R5LnN0eWxlLnBvc2l0aW9uPXQub3JpZ2luYWxQb3NpdGlvbjp0LnN0eWxlLnBvc2l0aW9uPXQub3JpZ2luYWxQb3NpdGlvbn0pLHQuaW5zdGFuY2UudmlzaWJsZT0hMSl9LGk9ZnVuY3Rpb24odCxpLG4pe2kuZG9tVmlzaWJsZXx8KE9iamVjdC5rZXlzKGkubWFza1N0eWxlKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2kubWFzay5zdHlsZVtlXT1pLm1hc2tTdHlsZVtlXX0pLCJhYnNvbHV0ZSIhPT1pLm9yaWdpbmFsUG9zaXRpb24mJih0LnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIpLG4ubW9kaWZpZXJzLmZ1bGxzY3JlZW4mJm4ubW9kaWZpZXJzLmxvY2smJih0LnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iKSxpLmRvbVZpc2libGU9ITAsdC5hcHBlbmRDaGlsZChpLm1hc2spLGUubmV4dFRpY2soZnVuY3Rpb24oKXtpLmluc3RhbmNlLnZpc2libGU9ITB9KSxpLmRvbUluc2VydGVkPSEwKX07ZS5kaXJlY3RpdmUoImxvYWRpbmciLHtiaW5kOmZ1bmN0aW9uKGUsaSl7dmFyIG49bmV3IHIoe2VsOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGRhdGE6e3RleHQ6ZS5nZXRBdHRyaWJ1dGUoImVsZW1lbnQtbG9hZGluZy10ZXh0IiksZnVsbHNjcmVlbjohIWkubW9kaWZpZXJzLmZ1bGxzY3JlZW59fSk7ZS5pbnN0YW5jZT1uLGUubWFzaz1uLiRlbCxlLm1hc2tTdHlsZT17fSx0KGUsaSl9LHVwZGF0ZTpmdW5jdGlvbihlLGkpe2UuaW5zdGFuY2Uuc2V0VGV4dChlLmdldEF0dHJpYnV0ZSgiZWxlbWVudC1sb2FkaW5nLXRleHQiKSksaS5vbGRWYWx1ZSE9PWkudmFsdWUmJnQoZSxpKX0sdW5iaW5kOmZ1bmN0aW9uKGUsdCl7ZS5kb21JbnNlcnRlZCYmKHQubW9kaWZpZXJzLmZ1bGxzY3JlZW58fHQubW9kaWZpZXJzLmJvZHk/ZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChlLm1hc2spOmUubWFzayYmZS5tYXNrLnBhcmVudE5vZGUmJmUubWFzay5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGUubWFzaykpfX0pfX19LGZ1bmN0aW9uKGUsdCxpKXt2YXIgbj1pKDUpKGkoMjc5KSxpKDI4MCksbnVsbCxudWxsKTtlLmV4cG9ydHM9bi5leHBvcnRzfSxmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0Ijt0Ll9fZXNNb2R1bGU9ITAsdC5kZWZhdWx0PXtkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3RleHQ6bnVsbCxmdWxsc2NyZWVuOiEwLHZpc2libGU6ITEsY3VzdG9tQ2xhc3M6IiJ9fSxtZXRob2RzOntoYW5kbGVBZnRlckxlYXZlOmZ1bmN0aW9uKCl7dGhpcy4kZW1pdCgiYWZ0ZXItbGVhdmUiKX0sc2V0VGV4dDpmdW5jdGlvbihlKXt0aGlzLnRleHQ9ZX19fX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLiRjcmVhdGVFbGVtZW50LGk9ZS5fc2VsZi5fY3x8dDtyZXR1cm4gaSgidHJhbnNpdGlvbiIse2F0dHJzOntuYW1lOiJlbC1sb2FkaW5nLWZhZGUifSxvbjp7ImFmdGVyLWxlYXZlIjplLmhhbmRsZUFmdGVyTGVhdmV9fSxbaSgiZGl2Iix7ZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6ZS52aXNpYmxlLGV4cHJlc3Npb246InZpc2libGUifV0sc3RhdGljQ2xhc3M6ImVsLWxvYWRpbmctbWFzayIsY2xhc3M6W2UuY3VzdG9tQ2xhc3MseyJpcy1mdWxsc2NyZWVuIjplLmZ1bGxzY3JlZW59XX0sW2koImRpdiIse3N0YXRpY0NsYXNzOiJlbC1sb2FkaW5nLXNwaW5uZXIifSxbaSgic3ZnIix7c3RhdGljQ2xhc3M6ImNpcmN1bGFyIixhdHRyczp7dmlld0JveDoiMjUgMjUgNTAgNTAifX0sW2koImNpcmNsZSIse3N0YXRpY0NsYXNzOiJwYXRoIixhdHRyczp7Y3g6IjUwIixjeToiNTAiLHI6IjIwIixmaWxsOiJub25lIn19KV0pLGUudGV4dD9pKCJwIix7c3RhdGljQ2xhc3M6ImVsLWxvYWRpbmctdGV4dCJ9LFtlLl92KGUuX3MoZS50ZXh0KSldKTplLl9lKCldKV0pXSl9LHN0YXRpY1JlbmRlckZuczpbXX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5fX2VzTW9kdWxlPSEwO3ZhciBzPWkoMTUpLG89bihzKSxhPWkoMjc4KSxyPW4oYSksbD1pKDIzKSx1PW4obCksYz1vLmRlZmF1bHQuZXh0ZW5kKHIuZGVmYXVsdCksZD17dGV4dDpudWxsLGZ1bGxzY3JlZW46ITAsYm9keTohMSxsb2NrOiExLGN1c3RvbUNsYXNzOiIifSxoPXZvaWQgMDtjLnByb3RvdHlwZS5vcmlnaW5hbFBvc2l0aW9uPSIiLGMucHJvdG90eXBlLm9yaWdpbmFsT3ZlcmZsb3c9IiIsYy5wcm90b3R5cGUuY2xvc2U9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuZnVsbHNjcmVlbiYmImhpZGRlbiIhPT10aGlzLm9yaWdpbmFsT3ZlcmZsb3cmJihkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93PXRoaXMub3JpZ2luYWxPdmVyZmxvdyksdGhpcy5mdWxsc2NyZWVufHx0aGlzLmJvZHk/ZG9jdW1lbnQuYm9keS5zdHlsZS5wb3NpdGlvbj10aGlzLm9yaWdpbmFsUG9zaXRpb246dGhpcy50YXJnZXQuc3R5bGUucG9zaXRpb249dGhpcy5vcmlnaW5hbFBvc2l0aW9uLHRoaXMuZnVsbHNjcmVlbiYmKGg9dm9pZCAwKSx0aGlzLiRvbigiYWZ0ZXItbGVhdmUiLGZ1bmN0aW9uKHQpe2UuJGVsJiZlLiRlbC5wYXJlbnROb2RlJiZlLiRlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGUuJGVsKSxlLiRkZXN0cm95KCl9KSx0aGlzLnZpc2libGU9ITF9O3ZhciBmPWZ1bmN0aW9uKGUsdCxpKXt2YXIgbj17fTtlLmZ1bGxzY3JlZW4/KGkub3JpZ2luYWxQb3NpdGlvbj1kb2N1bWVudC5ib2R5LnN0eWxlLnBvc2l0aW9uLGkub3JpZ2luYWxPdmVyZmxvdz1kb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93KTplLmJvZHk/KGkub3JpZ2luYWxQb3NpdGlvbj1kb2N1bWVudC5ib2R5LnN0eWxlLnBvc2l0aW9uLFsidG9wIiwibGVmdCJdLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGk9InRvcCI9PT10PyJzY3JvbGxUb3AiOiJzY3JvbGxMZWZ0IjtuW3RdPWUudGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW3RdK2RvY3VtZW50LmJvZHlbaV0rZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50W2ldKyJweCJ9KSxbImhlaWdodCIsIndpZHRoIl0uZm9yRWFjaChmdW5jdGlvbih0KXtuW3RdPWUudGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW3RdKyJweCJ9KSk6aS5vcmlnaW5hbFBvc2l0aW9uPXQuc3R5bGUucG9zaXRpb24sT2JqZWN0LmtleXMobikuZm9yRWFjaChmdW5jdGlvbihlKXtpLiRlbC5zdHlsZVtlXT1uW2VdfSl9LHA9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307aWYoIW8uZGVmYXVsdC5wcm90b3R5cGUuJGlzU2VydmVyKXtpZihlPSgwLHUuZGVmYXVsdCkoe30sZCxlKSwic3RyaW5nIj09dHlwZW9mIGUudGFyZ2V0JiYoZS50YXJnZXQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlLnRhcmdldCkpLGUudGFyZ2V0PWUudGFyZ2V0fHxkb2N1bWVudC5ib2R5LGUudGFyZ2V0IT09ZG9jdW1lbnQuYm9keT9lLmZ1bGxzY3JlZW49ITE6ZS5ib2R5PSEwLGUuZnVsbHNjcmVlbiYmaClyZXR1cm4gaDt2YXIgdD1lLmJvZHk/ZG9jdW1lbnQuYm9keTplLnRhcmdldCxpPW5ldyBjKHtlbDpkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxkYXRhOmV9KTtyZXR1cm4gZihlLHQsaSksImFic29sdXRlIiE9PWkub3JpZ2luYWxQb3NpdGlvbiYmKHQuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIiksZS5mdWxsc2NyZWVuJiZlLmxvY2smJih0LnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iKSx0LmFwcGVuZENoaWxkKGkuJGVsKSxvLmRlZmF1bHQubmV4dFRpY2soZnVuY3Rpb24oKXtpLnZpc2libGU9ITB9KSxlLmZ1bGxzY3JlZW4mJihoPWkpLGl9fTt0LmRlZmF1bHQ9cH0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX10Ll9fZXNNb2R1bGU9ITA7dmFyIHM9aSgyODMpLG89bihzKTtvLmRlZmF1bHQuaW5zdGFsbD1mdW5jdGlvbihlKXtlLmNvbXBvbmVudChvLmRlZmF1bHQubmFtZSxvLmRlZmF1bHQpfSx0LmRlZmF1bHQ9by5kZWZhdWx0fSxmdW5jdGlvbihlLHQsaSl7dmFyIG49aSg1KShpKDI4NCksaSgyODUpLG51bGwsbnVsbCk7ZS5leHBvcnRzPW4uZXhwb3J0c30sZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7dC5fX2VzTW9kdWxlPSEwLHQuZGVmYXVsdD17bmFtZToiRWxJY29uIixwcm9wczp7bmFtZTpTdHJpbmd9fX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLiRjcmVhdGVFbGVtZW50LGk9ZS5fc2VsZi5fY3x8dDtyZXR1cm4gaSgiaSIse2NsYXNzOiJlbC1pY29uLSIrZS5uYW1lfSl9LHN0YXRpY1JlbmRlckZuczpbXX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5fX2VzTW9kdWxlPSEwO3ZhciBzPWkoMjg3KSxvPW4ocyk7by5kZWZhdWx0Lmluc3RhbGw9ZnVuY3Rpb24oZSl7ZS5jb21wb25lbnQoby5kZWZhdWx0Lm5hbWUsby5kZWZhdWx0KX0sdC5kZWZhdWx0PW8uZGVmYXVsdH0sZnVuY3Rpb24oZSx0LGkpe3ZhciBuPWkoNSkoaSgyODgpLGkoMjg5KSxudWxsLG51bGwpO2UuZXhwb3J0cz1uLmV4cG9ydHN9LGZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO3QuX19lc01vZHVsZT0hMCx0LmRlZmF1bHQ9e25hbWU6IkVsUm93Iixwcm9wczp7Z3V0dGVyOk51bWJlcix0eXBlOlN0cmluZyxqdXN0aWZ5Ont0eXBlOlN0cmluZyxkZWZhdWx0OiJzdGFydCJ9LGFsaWduOnt0eXBlOlN0cmluZyxkZWZhdWx0OiJ0b3AifX0sY29tcHV0ZWQ6e3N0eWxlOmZ1bmN0aW9uKCl7dmFyIGU9e307cmV0dXJuIHRoaXMuZ3V0dGVyJiYoZS5tYXJnaW5MZWZ0PSItIit0aGlzLmd1dHRlci8yKyJweCIsZS5tYXJnaW5SaWdodD1lLm1hcmdpbkxlZnQpLGV9fX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxpPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIGkoImRpdiIse3N0YXRpY0NsYXNzOiJlbC1yb3ciLGNsYXNzOlsic3RhcnQiIT09ZS5qdXN0aWZ5PyJpcy1qdXN0aWZ5LSIrZS5qdXN0aWZ5OiIiLCJ0b3AiIT09ZS5hbGlnbj8iaXMtYWxpZ24tIitlLmFsaWduOiIiLHsiZWwtcm93LS1mbGV4IjoiZmxleCI9PT1lLnR5cGV9XSxzdHlsZTplLnN0eWxlfSxbZS5fdCgiZGVmYXVsdCIpXSwyKX0sc3RhdGljUmVuZGVyRm5zOltdfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX10Ll9fZXNNb2R1bGU9ITA7dmFyIHM9aSgyOTEpLG89bihzKTtvLmRlZmF1bHQuaW5zdGFsbD1mdW5jdGlvbihlKXtlLmNvbXBvbmVudChvLmRlZmF1bHQubmFtZSxvLmRlZmF1bHQpfSx0LmRlZmF1bHQ9by5kZWZhdWx0fSxmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0Ijt0Ll9fZXNNb2R1bGU9ITA7dmFyIGk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9O3QuZGVmYXVsdD17bmFtZToiRWxDb2wiLHByb3BzOntzcGFuOnt0eXBlOk51bWJlcixkZWZhdWx0OjI0fSxvZmZzZXQ6TnVtYmVyLHB1bGw6TnVtYmVyLHB1c2g6TnVtYmVyLHhzOltOdW1iZXIsT2JqZWN0XSxzbTpbTnVtYmVyLE9iamVjdF0sbWQ6W051bWJlcixPYmplY3RdLGxnOltOdW1iZXIsT2JqZWN0XX0sY29tcHV0ZWQ6e2d1dHRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRwYXJlbnQuZ3V0dGVyfSxzdHlsZTpmdW5jdGlvbigpe3ZhciBlPXt9O3JldHVybiB0aGlzLmd1dHRlciYmKGUucGFkZGluZ0xlZnQ9dGhpcy5ndXR0ZXIvMisicHgiLGUucGFkZGluZ1JpZ2h0PWUucGFkZGluZ0xlZnQpLGV9fSxyZW5kZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXRoaXMuc3R5bGUscz1bXTtyZXR1cm5bInNwYW4iLCJvZmZzZXQiLCJwdWxsIiwicHVzaCJdLmZvckVhY2goZnVuY3Rpb24oZSl7dFtlXSYmcy5wdXNoKCJzcGFuIiE9PWU/ImVsLWNvbC0iK2UrIi0iK3RbZV06ImVsLWNvbC0iK3RbZV0pfSksWyJ4cyIsInNtIiwibWQiLCJsZyJdLmZvckVhY2goZnVuY3Rpb24oZSl7Im51bWJlciI9PXR5cGVvZiB0W2VdP3MucHVzaCgiZWwtY29sLSIrZSsiLSIrdFtlXSk6Im9iamVjdCI9PT1pKHRbZV0pJiYhZnVuY3Rpb24oKXt2YXIgaT10W2VdO09iamVjdC5rZXlzKGkpLmZvckVhY2goZnVuY3Rpb24odCl7cy5wdXNoKCJzcGFuIiE9PXQ/ImVsLWNvbC0iK2UrIi0iK3QrIi0iK2lbdF06ImVsLWNvbC0iK2UrIi0iK2lbdF0pfSl9KCl9KSxlKCJkaXYiLHtjbGFzczpbImVsLWNvbCIsc10sc3R5bGU6bn0sW3RoaXMuJHNsb3RzLmRlZmF1bHRdKX19fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXQuX19lc01vZHVsZT0hMDt2YXIgcz1pKDI5Myksbz1uKHMpO28uZGVmYXVsdC5pbnN0YWxsPWZ1bmN0aW9uKGUpe2UuY29tcG9uZW50KG8uZGVmYXVsdC5uYW1lLG8uZGVmYXVsdCl9LHQuZGVmYXVsdD1vLmRlZmF1bHR9LGZ1bmN0aW9uKGUsdCxpKXt2YXIgbj1pKDUpKGkoMjk0KSxudWxsLG51bGwsbnVsbCk7ZS5leHBvcnRzPW4uZXhwb3J0c30sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBzKCl7fXQuX19lc01vZHVsZT0hMDt2YXIgbz1pKDI5NSksYT1uKG8pLHI9aSgzMDIpLGw9bihyKSx1PWkoMzA4KSxjPW4odSksZD1pKDI5NyksaD1uKGQpLGY9aSgzMTApLHA9bihmKTt0LmRlZmF1bHQ9e25hbWU6IkVsVXBsb2FkIixtaXhpbnM6W3AuZGVmYXVsdF0sY29tcG9uZW50czp7RWxQcm9ncmVzczpoLmRlZmF1bHQsVXBsb2FkTGlzdDphLmRlZmF1bHQsVXBsb2FkOmwuZGVmYXVsdCxJZnJhbWVVcGxvYWQ6Yy5kZWZhdWx0fSxwcm9wczp7YWN0aW9uOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0saGVhZGVyczp7dHlwZTpPYmplY3QsZGVmYXVsdDpmdW5jdGlvbigpe3JldHVybnt9fX0sZGF0YTpPYmplY3QsbXVsdGlwbGU6Qm9vbGVhbixuYW1lOnt0eXBlOlN0cmluZyxkZWZhdWx0OiJmaWxlIn0sZHJhZzpCb29sZWFuLGRyYWdnZXI6Qm9vbGVhbix3aXRoQ3JlZGVudGlhbHM6Qm9vbGVhbixzaG93RmlsZUxpc3Q6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiEwfSxhY2NlcHQ6U3RyaW5nLHR5cGU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6InNlbGVjdCJ9LGJlZm9yZVVwbG9hZDpGdW5jdGlvbixvblJlbW92ZTp7dHlwZTpGdW5jdGlvbixkZWZhdWx0OnN9LG9uQ2hhbmdlOnt0eXBlOkZ1bmN0aW9uLGRlZmF1bHQ6c30sb25QcmV2aWV3Ont0eXBlOkZ1bmN0aW9ufSxvblN1Y2Nlc3M6e3R5cGU6RnVuY3Rpb24sZGVmYXVsdDpzfSxvblByb2dyZXNzOnt0eXBlOkZ1bmN0aW9uLGRlZmF1bHQ6c30sb25FcnJvcjp7dHlwZTpGdW5jdGlvbixkZWZhdWx0OnN9LGZpbGVMaXN0Ont0eXBlOkFycmF5LGRlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm5bXX19LGF1dG9VcGxvYWQ6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiEwfSxsaXN0VHlwZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDoidGV4dCJ9LGh0dHBSZXF1ZXN0OkZ1bmN0aW9ufSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3VwbG9hZEZpbGVzOltdLGRyYWdPdmVyOiExLGRyYWdpbmc6ITEsdGVtcEluZGV4OjF9fSx3YXRjaDp7ZmlsZUxpc3Q6e2ltbWVkaWF0ZTohMCxoYW5kbGVyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dGhpcy51cGxvYWRGaWxlcz1lLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS51aWQ9ZS51aWR8fERhdGUubm93KCkrdC50ZW1wSW5kZXgrKyxlLnN0YXR1cz0ic3VjY2VzcyIsZX0pfX19LG1ldGhvZHM6e2hhbmRsZVN0YXJ0OmZ1bmN0aW9uKGUpe2UudWlkPURhdGUubm93KCkrdGhpcy50ZW1wSW5kZXgrKzt2YXIgdD17c3RhdHVzOiJyZWFkeSIsbmFtZTplLm5hbWUsc2l6ZTplLnNpemUscGVyY2VudGFnZTowLHVpZDplLnVpZCxyYXc6ZX07dHJ5e3QudXJsPVVSTC5jcmVhdGVPYmplY3RVUkwoZSl9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcihlKX10aGlzLnVwbG9hZEZpbGVzLnB1c2godCl9LGhhbmRsZVByb2dyZXNzOmZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpcy5nZXRGaWxlKHQpO3RoaXMub25Qcm9ncmVzcyhlLGksdGhpcy51cGxvYWRGaWxlcyksaS5zdGF0dXM9InVwbG9hZGluZyIsaS5wZXJjZW50YWdlPWUucGVyY2VudHx8MH0saGFuZGxlU3VjY2VzczpmdW5jdGlvbihlLHQpe3ZhciBpPXRoaXMuZ2V0RmlsZSh0KTtpJiYoaS5zdGF0dXM9InN1Y2Nlc3MiLGkucmVzcG9uc2U9ZSx0aGlzLm9uU3VjY2VzcyhlLGksdGhpcy51cGxvYWRGaWxlcyksdGhpcy5vbkNoYW5nZShpLHRoaXMudXBsb2FkRmlsZXMpKX0saGFuZGxlRXJyb3I6ZnVuY3Rpb24oZSx0KXt2YXIgaT10aGlzLmdldEZpbGUodCksbj10aGlzLnVwbG9hZEZpbGVzO2kuc3RhdHVzPSJmYWlsIixuLnNwbGljZShuLmluZGV4T2YoaSksMSksdGhpcy5vbkVycm9yKGUsaSx0aGlzLnVwbG9hZEZpbGVzKSx0aGlzLm9uQ2hhbmdlKGksdGhpcy51cGxvYWRGaWxlcyl9LGhhbmRsZVJlbW92ZTpmdW5jdGlvbihlLHQpe3QmJihlPXRoaXMuZ2V0RmlsZSh0KSk7dmFyIGk9dGhpcy51cGxvYWRGaWxlcztpLnNwbGljZShpLmluZGV4T2YoZSksMSksdGhpcy5vblJlbW92ZShlLGkpfSxnZXRGaWxlOmZ1bmN0aW9uKGUpe3ZhciB0LGk9dGhpcy51cGxvYWRGaWxlcztyZXR1cm4gaS5ldmVyeShmdW5jdGlvbihpKXtyZXR1cm4gdD1lLnVpZD09PWkudWlkP2k6bnVsbCwhdH0pLHR9LGNsZWFyRmlsZXM6ZnVuY3Rpb24oKXt0aGlzLnVwbG9hZEZpbGVzPVtdfSxzdWJtaXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMudXBsb2FkRmlsZXMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiJyZWFkeSI9PT1lLnN0YXR1c30pLmZvckVhY2goZnVuY3Rpb24odCl7ZS4kcmVmc1sidXBsb2FkLWlubmVyIl0udXBsb2FkKHQucmF3KX0pfSxnZXRNaWdyYXRpbmdDb25maWc6ZnVuY3Rpb24oKXtyZXR1cm57cHJvcHM6eyJkZWZhdWx0LWZpbGUtbGlzdCI6ImRlZmF1bHQtZmlsZS1saXN0IGlzIHJlbmFtZWQgdG8gZmlsZS1saXN0LiIsInNob3ctdXBsb2FkLWxpc3QiOiJzaG93LXVwbG9hZC1saXN0IGlzIHJlbmFtZWQgdG8gc2hvdy1maWxlLWxpc3QuIiwidGh1bWJuYWlsLW1vZGUiOiJ0aHVtYm5haWwtbW9kZSBoYXMgYmVlbiBkZXByZWNhdGVkLCB5b3UgY2FuIGltcGxlbWVudCB0aGUgc2FtZSBlZmZlY3QgYWNjb3JkaW5nIHRvIHRoaXMgY2FzZTogaHR0cDovL2VsZW1lbnQuZWxlbWUuaW8vIy96aC1DTi9jb21wb25lbnQvdXBsb2FkI3lvbmctaHUtdG91LXhpYW5nLXNoYW5nLWNodWFuIn19fX0scmVuZGVyOmZ1bmN0aW9uKGUpe3ZhciB0O3RoaXMuc2hvd0ZpbGVMaXN0JiYodD1lKGEuZGVmYXVsdCx7YXR0cnM6e2xpc3RUeXBlOnRoaXMubGlzdFR5cGUsZmlsZXM6dGhpcy51cGxvYWRGaWxlcyxoYW5kbGVQcmV2aWV3OnRoaXMub25QcmV2aWV3fSxvbjp7cmVtb3ZlOnRoaXMuaGFuZGxlUmVtb3ZlfX0sW10pKTt2YXIgaT17cHJvcHM6e3R5cGU6dGhpcy50eXBlLGRyYWc6dGhpcy5kcmFnLGFjdGlvbjp0aGlzLmFjdGlvbixtdWx0aXBsZTp0aGlzLm11bHRpcGxlLCJiZWZvcmUtdXBsb2FkIjp0aGlzLmJlZm9yZVVwbG9hZCwid2l0aC1jcmVkZW50aWFscyI6dGhpcy53aXRoQ3JlZGVudGlhbHMsaGVhZGVyczp0aGlzLmhlYWRlcnMsbmFtZTp0aGlzLm5hbWUsZGF0YTp0aGlzLmRhdGEsYWNjZXB0OnRoaXMuYWNjZXB0LGZpbGVMaXN0OnRoaXMudXBsb2FkRmlsZXMsYXV0b1VwbG9hZDp0aGlzLmF1dG9VcGxvYWQsbGlzdFR5cGU6dGhpcy5saXN0VHlwZSwib24tc3RhcnQiOnRoaXMuaGFuZGxlU3RhcnQsIm9uLXByb2dyZXNzIjp0aGlzLmhhbmRsZVByb2dyZXNzLCJvbi1zdWNjZXNzIjp0aGlzLmhhbmRsZVN1Y2Nlc3MsIm9uLWVycm9yIjp0aGlzLmhhbmRsZUVycm9yLCJvbi1wcmV2aWV3Ijp0aGlzLm9uUHJldmlldywib24tcmVtb3ZlIjp0aGlzLmhhbmRsZVJlbW92ZSwiaHR0cC1yZXF1ZXN0Ijp0aGlzLmh0dHBSZXF1ZXN0fSxyZWY6InVwbG9hZC1pbm5lciJ9LG49dGhpcy4kc2xvdHMudHJpZ2dlcnx8dGhpcy4kc2xvdHMuZGVmYXVsdCxzPSJ1bmRlZmluZWQiIT10eXBlb2YgRm9ybURhdGF8fHRoaXMuJGlzU2VydmVyP2UoInVwbG9hZCIsaSxbbl0pOmUoImlmcmFtZVVwbG9hZCIsaSxbbl0pO3JldHVybiBlKCJkaXYiLG51bGwsWyJwaWN0dXJlLWNhcmQiPT09dGhpcy5saXN0VHlwZT90OiIiLHRoaXMuJHNsb3RzLnRyaWdnZXI/W3MsdGhpcy4kc2xvdHMuZGVmYXVsdF06cyx0aGlzLiRzbG90cy50aXAsInBpY3R1cmUtY2FyZCIhPT10aGlzLmxpc3RUeXBlP3Q6IiJdKX19fSxmdW5jdGlvbihlLHQsaSl7dmFyIG49aSg1KShpKDI5NiksaSgzMDEpLG51bGwsbnVsbCk7ZS5leHBvcnRzPW4uZXhwb3J0c30sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX10Ll9fZXNNb2R1bGU9ITA7dmFyIHM9aSgxMiksbz1uKHMpLGE9aSgyOTcpLHI9bihhKTt0LmRlZmF1bHQ9e21peGluczpbby5kZWZhdWx0XSxjb21wb25lbnRzOntFbFByb2dyZXNzOnIuZGVmYXVsdH0scHJvcHM6e2ZpbGVzOnt0eXBlOkFycmF5LGRlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm5bXX19LGhhbmRsZVByZXZpZXc6RnVuY3Rpb24sbGlzdFR5cGU6U3RyaW5nfSxtZXRob2RzOntwYXJzZVBlcmNlbnRhZ2U6ZnVuY3Rpb24oZSl7cmV0dXJuIHBhcnNlSW50KGUsMTApfSxoYW5kbGVDbGljazpmdW5jdGlvbihlKXt0aGlzLmhhbmRsZVByZXZpZXcmJnRoaXMuaGFuZGxlUHJldmlldyhlKX19fX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX10Ll9fZXNNb2R1bGU9ITA7dmFyIHM9aSgyOTgpLG89bihzKTtvLmRlZmF1bHQuaW5zdGFsbD1mdW5jdGlvbihlKXtlLmNvbXBvbmVudChvLmRlZmF1bHQubmFtZSxvLmRlZmF1bHQpfSx0LmRlZmF1bHQ9by5kZWZhdWx0fSxmdW5jdGlvbihlLHQsaSl7dmFyIG49aSg1KShpKDI5OSksaSgzMDApLG51bGwsbnVsbCk7ZS5leHBvcnRzPW4uZXhwb3J0c30sZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7dC5fX2VzTW9kdWxlPSEwLHQuZGVmYXVsdD17bmFtZToiRWxQcm9ncmVzcyIscHJvcHM6e3R5cGU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6ImxpbmUiLHZhbGlkYXRvcjpmdW5jdGlvbihlKXtyZXR1cm5bImxpbmUiLCJjaXJjbGUiXS5pbmRleE9mKGUpPi0xfX0scGVyY2VudGFnZTp7dHlwZTpOdW1iZXIsZGVmYXVsdDowLHJlcXVpcmVkOiEwLHZhbGlkYXRvcjpmdW5jdGlvbihlKXtyZXR1cm4gZT49MCYmZTw9MTAwfX0sc3RhdHVzOnt0eXBlOlN0cmluZ30sc3Ryb2tlV2lkdGg6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6Nn0sdGV4dEluc2lkZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LHdpZHRoOnt0eXBlOk51bWJlcixkZWZhdWx0OjEyNn0sc2hvd1RleHQ6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiEwfX0sY29tcHV0ZWQ6e2JhclN0eWxlOmZ1bmN0aW9uKCl7dmFyIGU9e307cmV0dXJuIGUud2lkdGg9dGhpcy5wZXJjZW50YWdlKyIlIixlfSxyZWxhdGl2ZVN0cm9rZVdpZHRoOmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuc3Ryb2tlV2lkdGgvdGhpcy53aWR0aCoxMDApLnRvRml4ZWQoMSl9LHRyYWNrUGF0aDpmdW5jdGlvbigpe3ZhciBlPXBhcnNlSW50KDUwLXBhcnNlRmxvYXQodGhpcy5yZWxhdGl2ZVN0cm9rZVdpZHRoKS8yLDEwKTtyZXR1cm4iTSA1MCA1MCBtIDAgLSIrZSsiIGEgIitlKyIgIitlKyIgMCAxIDEgMCAiKzIqZSsiIGEgIitlKyIgIitlKyIgMCAxIDEgMCAtIisyKmV9LHBlcmltZXRlcjpmdW5jdGlvbigpe3ZhciBlPTUwLXBhcnNlRmxvYXQodGhpcy5yZWxhdGl2ZVN0cm9rZVdpZHRoKS8yO3JldHVybiAyKk1hdGguUEkqZX0sY2lyY2xlUGF0aFN0eWxlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wZXJpbWV0ZXI7cmV0dXJue3N0cm9rZURhc2hhcnJheTplKyJweCwiK2UrInB4IixzdHJva2VEYXNob2Zmc2V0OigxLXRoaXMucGVyY2VudGFnZS8xMDApKmUrInB4Iix0cmFuc2l0aW9uOiJzdHJva2UtZGFzaG9mZnNldCAwLjZzIGVhc2UgMHMsIHN0cm9rZSAwLjZzIGVhc2UifX0sc3Ryb2tlOmZ1bmN0aW9uKCl7dmFyIGU7c3dpdGNoKHRoaXMuc3RhdHVzKXtjYXNlInN1Y2Nlc3MiOmU9IiMxM2NlNjYiO2JyZWFrO2Nhc2UiZXhjZXB0aW9uIjplPSIjZmY0OTQ5IjticmVhaztkZWZhdWx0OmU9IiMyMGEwZmYifXJldHVybiBlfSxpY29uQ2xhc3M6ZnVuY3Rpb24oKXtyZXR1cm4ibGluZSI9PT10aGlzLnR5cGU/InN1Y2Nlc3MiPT09dGhpcy5zdGF0dXM/ImVsLWljb24tY2lyY2xlLWNoZWNrIjoiZWwtaWNvbi1jaXJjbGUtY3Jvc3MiOiJzdWNjZXNzIj09PXRoaXMuc3RhdHVzPyJlbC1pY29uLWNoZWNrIjoiZWwtaWNvbi1jbG9zZSJ9LHByb2dyZXNzVGV4dFNpemU6ZnVuY3Rpb24oKXtyZXR1cm4ibGluZSI9PT10aGlzLnR5cGU/MTIrLjQqdGhpcy5zdHJva2VXaWR0aDouMTExMTExKnRoaXMud2lkdGgrMn19fX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLiRjcmVhdGVFbGVtZW50LGk9ZS5fc2VsZi5fY3x8dDtyZXR1cm4gaSgiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXByb2dyZXNzIixjbGFzczpbImVsLXByb2dyZXNzLS0iK2UudHlwZSxlLnN0YXR1cz8iaXMtIitlLnN0YXR1czoiIix7ImVsLXByb2dyZXNzLS13aXRob3V0LXRleHQiOiFlLnNob3dUZXh0LCJlbC1wcm9ncmVzcy0tdGV4dC1pbnNpZGUiOmUudGV4dEluc2lkZX1dfSxbImxpbmUiPT09ZS50eXBlP2koImRpdiIse3N0YXRpY0NsYXNzOiJlbC1wcm9ncmVzcy1iYXIifSxbaSgiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXByb2dyZXNzLWJhcl9fb3V0ZXIiLHN0eWxlOntoZWlnaHQ6ZS5zdHJva2VXaWR0aCsicHgifX0sW2koImRpdiIse3N0YXRpY0NsYXNzOiJlbC1wcm9ncmVzcy1iYXJfX2lubmVyIixzdHlsZTplLmJhclN0eWxlfSxbZS5zaG93VGV4dCYmZS50ZXh0SW5zaWRlP2koImRpdiIse3N0YXRpY0NsYXNzOiJlbC1wcm9ncmVzcy1iYXJfX2lubmVyVGV4dCJ9LFtlLl92KGUuX3MoZS5wZXJjZW50YWdlKSsiJSIpXSk6ZS5fZSgpXSldKV0pOmkoImRpdiIse3N0YXRpY0NsYXNzOiJlbC1wcm9ncmVzcy1jaXJjbGUiLHN0eWxlOntoZWlnaHQ6ZS53aWR0aCsicHgiLHdpZHRoOmUud2lkdGgrInB4In19LFtpKCJzdmciLHthdHRyczp7dmlld0JveDoiMCAwIDEwMCAxMDAifX0sW2koInBhdGgiLHtzdGF0aWNDbGFzczoiZWwtcHJvZ3Jlc3MtY2lyY2xlX190cmFjayIsYXR0cnM6e2Q6ZS50cmFja1BhdGgsc3Ryb2tlOiIjZTVlOWYyIiwic3Ryb2tlLXdpZHRoIjplLnJlbGF0aXZlU3Ryb2tlV2lkdGgsZmlsbDoibm9uZSJ9fSksaSgicGF0aCIse3N0YXRpY0NsYXNzOiJlbC1wcm9ncmVzcy1jaXJjbGVfX3BhdGgiLHN0eWxlOmUuY2lyY2xlUGF0aFN0eWxlLGF0dHJzOntkOmUudHJhY2tQYXRoLCJzdHJva2UtbGluZWNhcCI6InJvdW5kIixzdHJva2U6ZS5zdHJva2UsInN0cm9rZS13aWR0aCI6ZS5yZWxhdGl2ZVN0cm9rZVdpZHRoLGZpbGw6Im5vbmUifX0pXSldKSxlLnNob3dUZXh0JiYhZS50ZXh0SW5zaWRlP2koImRpdiIse3N0YXRpY0NsYXNzOiJlbC1wcm9ncmVzc19fdGV4dCIsc3R5bGU6e2ZvbnRTaXplOmUucHJvZ3Jlc3NUZXh0U2l6ZSsicHgifX0sW2Uuc3RhdHVzP2koImkiLHtjbGFzczplLmljb25DbGFzc30pOltlLl92KGUuX3MoZS5wZXJjZW50YWdlKSsiJSIpXV0sMik6ZS5fZSgpXSl9LHN0YXRpY1JlbmRlckZuczpbXX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxpPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIGkoInRyYW5zaXRpb24tZ3JvdXAiLHtjbGFzczpbImVsLXVwbG9hZC1saXN0IiwiZWwtdXBsb2FkLWxpc3QtLSIrZS5saXN0VHlwZV0sYXR0cnM6e3RhZzoidWwiLG5hbWU6Imxpc3QifX0sZS5fbChlLmZpbGVzLGZ1bmN0aW9uKHQpe3JldHVybiBpKCJsaSIse2tleTp0LGNsYXNzOlsiZWwtdXBsb2FkLWxpc3RfX2l0ZW0iLCJpcy0iK3Quc3RhdHVzXX0sW1sicGljdHVyZS1jYXJkIiwicGljdHVyZSJdLmluZGV4T2YoZS5saXN0VHlwZSk+LTEmJiJzdWNjZXNzIj09PXQuc3RhdHVzP2koImltZyIse3N0YXRpY0NsYXNzOiJlbC11cGxvYWQtbGlzdF9faXRlbS10aHVtYm5haWwiLGF0dHJzOntzcmM6dC51cmwsYWx0OiIifX0pOmUuX2UoKSxpKCJhIix7c3RhdGljQ2xhc3M6ImVsLXVwbG9hZC1saXN0X19pdGVtLW5hbWUiLG9uOntjbGljazpmdW5jdGlvbihpKXtlLmhhbmRsZUNsaWNrKHQpfX19LFtpKCJpIix7c3RhdGljQ2xhc3M6ImVsLWljb24tZG9jdW1lbnQifSksZS5fdihlLl9zKHQubmFtZSkrIlxuICAgICIpXSksaSgibGFiZWwiLHtzdGF0aWNDbGFzczoiZWwtdXBsb2FkLWxpc3RfX2l0ZW0tc3RhdHVzLWxhYmVsIn0sWyJzdWNjZXNzIj09PXQuc3RhdHVzP2koImkiLHtjbGFzczp7ImVsLWljb24tY2lyY2xlLWNoZWNrIjoidGV4dCI9PT1lLmxpc3RUeXBlLCJlbC1pY29uLWNoZWNrIjpbInBpY3R1cmUtY2FyZCIsInBpY3R1cmUiXS5pbmRleE9mKGUubGlzdFR5cGUpPi0xfX0pOmUuX2UoKSxpKCJpIix7c3RhdGljQ2xhc3M6ImVsLWljb24tY2xvc2UiLG9uOntjbGljazpmdW5jdGlvbihpKXtlLiRlbWl0KCJyZW1vdmUiLHQpfX19KV0pLCJwaWN0dXJlLWNhcmQiPT09ZS5saXN0VHlwZSYmInN1Y2Nlc3MiPT09dC5zdGF0dXM/aSgic3BhbiIse3N0YXRpY0NsYXNzOiJlbC11cGxvYWQtbGlzdF9faXRlbS1hY3Rpb25zIn0sW2UuaGFuZGxlUHJldmlldyYmInBpY3R1cmUtY2FyZCI9PT1lLmxpc3RUeXBlP2koInNwYW4iLHtzdGF0aWNDbGFzczoiZWwtdXBsb2FkLWxpc3RfX2l0ZW0tcHJldmlldyIsb246e2NsaWNrOmZ1bmN0aW9uKGkpe2UuaGFuZGxlUHJldmlldyh0KX19fSxbaSgiaSIse3N0YXRpY0NsYXNzOiJlbC1pY29uLXZpZXcifSldKTplLl9lKCksaSgic3BhbiIse3N0YXRpY0NsYXNzOiJlbC11cGxvYWQtbGlzdF9faXRlbS1kZWxldGUiLG9uOntjbGljazpmdW5jdGlvbihpKXtlLiRlbWl0KCJyZW1vdmUiLHQpfX19LFtpKCJpIix7c3RhdGljQ2xhc3M6ImVsLWljb24tZGVsZXRlMiJ9KV0pXSk6ZS5fZSgpLCJ1cGxvYWRpbmciPT09dC5zdGF0dXM/aSgiZWwtcHJvZ3Jlc3MiLHthdHRyczp7dHlwZToicGljdHVyZS1jYXJkIj09PWUubGlzdFR5cGU/ImNpcmNsZSI6ImxpbmUiLCJzdHJva2Utd2lkdGgiOiJwaWN0dXJlLWNhcmQiPT09ZS5saXN0VHlwZT82OjIscGVyY2VudGFnZTplLnBhcnNlUGVyY2VudGFnZSh0LnBlcmNlbnRhZ2UpfX0pOmUuX2UoKV0sMSl9KSl9LHN0YXRpY1JlbmRlckZuczpbXX19LGZ1bmN0aW9uKGUsdCxpKXt2YXIgbj1pKDUpKGkoMzAzKSxudWxsLG51bGwsbnVsbCk7ZS5leHBvcnRzPW4uZXhwb3J0c30sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX10Ll9fZXNNb2R1bGU9ITA7dmFyIHM9aSgzMDQpLG89bihzKSxhPWkoMzA1KSxyPW4oYSk7dC5kZWZhdWx0PXtjb21wb25lbnRzOntVcGxvYWREcmFnZ2VyOnIuZGVmYXVsdH0scHJvcHM6e3R5cGU6U3RyaW5nLGFjdGlvbjp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LG5hbWU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6ImZpbGUifSxkYXRhOk9iamVjdCxoZWFkZXJzOk9iamVjdCx3aXRoQ3JlZGVudGlhbHM6Qm9vbGVhbixtdWx0aXBsZTpCb29sZWFuLGFjY2VwdDpTdHJpbmcsb25TdGFydDpGdW5jdGlvbixvblByb2dyZXNzOkZ1bmN0aW9uLG9uU3VjY2VzczpGdW5jdGlvbixvbkVycm9yOkZ1bmN0aW9uLGJlZm9yZVVwbG9hZDpGdW5jdGlvbixkcmFnOkJvb2xlYW4sb25QcmV2aWV3Ont0eXBlOkZ1bmN0aW9uLGRlZmF1bHQ6ZnVuY3Rpb24oKXt9fSxvblJlbW92ZTp7dHlwZTpGdW5jdGlvbixkZWZhdWx0OmZ1bmN0aW9uKCl7fX0sZmlsZUxpc3Q6QXJyYXksYXV0b1VwbG9hZDpCb29sZWFuLGxpc3RUeXBlOlN0cmluZyxodHRwUmVxdWVzdDp7dHlwZTpGdW5jdGlvbixkZWZhdWx0Om8uZGVmYXVsdH19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57bW91c2VvdmVyOiExfX0sbWV0aG9kczp7aXNJbWFnZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5pbmRleE9mKCJpbWFnZSIpIT09LTF9LGhhbmRsZUNoYW5nZTpmdW5jdGlvbihlKXt2YXIgdD1lLnRhcmdldC5maWxlczt0JiZ0aGlzLnVwbG9hZEZpbGVzKHQpfSx1cGxvYWRGaWxlczpmdW5jdGlvbihlKXt2YXIgdD10aGlzLGk9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZSk7dGhpcy5tdWx0aXBsZXx8KGk9aS5zbGljZSgwLDEpKSwwIT09aS5sZW5ndGgmJmkuZm9yRWFjaChmdW5jdGlvbihlKXt0Lm9uU3RhcnQoZSksdC5hdXRvVXBsb2FkJiZ0LnVwbG9hZChlKX0pfSx1cGxvYWQ6ZnVuY3Rpb24oZSx0KXt2YXIgaT10aGlzO2lmKCF0aGlzLmJlZm9yZVVwbG9hZClyZXR1cm4gdGhpcy5wb3N0KGUpO3ZhciBuPXRoaXMuYmVmb3JlVXBsb2FkKGUpO24mJm4udGhlbj9uLnRoZW4oZnVuY3Rpb24odCl7IltvYmplY3QgRmlsZV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpP2kucG9zdCh0KTppLnBvc3QoZSl9LGZ1bmN0aW9uKCl7aS5vblJlbW92ZShlLCEwKX0pOm4hPT0hMT90aGlzLnBvc3QoZSk6dGhpcy5vblJlbW92ZShlLCEwKX0scG9zdDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLGk9e2hlYWRlcnM6dGhpcy5oZWFkZXJzLHdpdGhDcmVkZW50aWFsczp0aGlzLndpdGhDcmVkZW50aWFscyxmaWxlOmUsZGF0YTp0aGlzLmRhdGEsZmlsZW5hbWU6dGhpcy5uYW1lLGFjdGlvbjp0aGlzLmFjdGlvbixvblByb2dyZXNzOmZ1bmN0aW9uKGkpe3Qub25Qcm9ncmVzcyhpLGUpfSxvblN1Y2Nlc3M6ZnVuY3Rpb24oaSl7dC5vblN1Y2Nlc3MoaSxlKX0sb25FcnJvcjpmdW5jdGlvbihpKXt0Lm9uRXJyb3IoaSxlKX19LG49dGhpcy5odHRwUmVxdWVzdChpKTtuJiZuLnRoZW4mJm4udGhlbihpLm9uU3VjY2VzcyxpLm9uRXJyb3IpfSxoYW5kbGVDbGljazpmdW5jdGlvbigpe3RoaXMuJHJlZnMuaW5wdXQuY2xpY2soKX19LHJlbmRlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmhhbmRsZUNsaWNrLGk9dGhpcy5kcmFnLG49dGhpcy5uYW1lLHM9dGhpcy5oYW5kbGVDaGFuZ2Usbz10aGlzLm11bHRpcGxlLGE9dGhpcy5hY2NlcHQscj10aGlzLmxpc3RUeXBlLGw9dGhpcy51cGxvYWRGaWxlcyx1PXtjbGFzczp7ImVsLXVwbG9hZCI6ITB9LG9uOntjbGljazp0fX07cmV0dXJuIHUuY2xhc3NbImVsLXVwbG9hZC0tIityXT0hMCxlKCJkaXYiLHUsW2k/ZSgidXBsb2FkLWRyYWdnZXIiLHtvbjp7ZmlsZTpsfX0sW3RoaXMuJHNsb3RzLmRlZmF1bHRdKTp0aGlzLiRzbG90cy5kZWZhdWx0LGUoImlucHV0Iix7Y2xhc3M6ImVsLXVwbG9hZF9faW5wdXQiLGF0dHJzOnt0eXBlOiJmaWxlIixuYW1lOm4sbXVsdGlwbGU6byxhY2NlcHQ6YX0scmVmOiJpbnB1dCIsb246e2NoYW5nZTpzfX0sW10pXSl9fX0sZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gaShlLHQsaSl7dmFyIG49dm9pZCAwO249aS5yZXNwb25zZT9pLnN0YXR1cysiICIrKGkucmVzcG9uc2UuZXJyb3J8fGkucmVzcG9uc2UpOmkucmVzcG9uc2VUZXh0P2kuc3RhdHVzKyIgIitpLnJlc3BvbnNlVGV4dDoiZmFpbCB0byBwb3N0ICIrZSsiICIraS5zdGF0dXMrIiciO3ZhciBzPW5ldyBFcnJvcihuKTtyZXR1cm4gcy5zdGF0dXM9aS5zdGF0dXMscy5tZXRob2Q9InBvc3QiLHMudXJsPWUsc31mdW5jdGlvbiBuKGUpe3ZhciB0PWUucmVzcG9uc2VUZXh0fHxlLnJlc3BvbnNlO2lmKCF0KXJldHVybiB0O3RyeXtyZXR1cm4gSlNPTi5wYXJzZSh0KX1jYXRjaChlKXtyZXR1cm4gdH19ZnVuY3Rpb24gcyhlKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFhNTEh0dHBSZXF1ZXN0KXt2YXIgdD1uZXcgWE1MSHR0cFJlcXVlc3Qscz1lLmFjdGlvbjt0LnVwbG9hZCYmKHQudXBsb2FkLm9ucHJvZ3Jlc3M9ZnVuY3Rpb24odCl7dC50b3RhbD4wJiYodC5wZXJjZW50PXQubG9hZGVkL3QudG90YWwqMTAwKSxlLm9uUHJvZ3Jlc3ModCl9KTt2YXIgbz1uZXcgRm9ybURhdGE7ZS5kYXRhJiZPYmplY3Qua2V5cyhlLmRhdGEpLm1hcChmdW5jdGlvbih0KXtvLmFwcGVuZCh0LGUuZGF0YVt0XSl9KSxvLmFwcGVuZChlLmZpbGVuYW1lLGUuZmlsZSksdC5vbmVycm9yPWZ1bmN0aW9uKHQpe2Uub25FcnJvcih0KX0sdC5vbmxvYWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdC5zdGF0dXM8MjAwfHx0LnN0YXR1cz49MzAwP2Uub25FcnJvcihpKHMsZSx0KSk6dm9pZCBlLm9uU3VjY2VzcyhuKHQpKX0sdC5vcGVuKCJwb3N0IixzLCEwKSxlLndpdGhDcmVkZW50aWFscyYmIndpdGhDcmVkZW50aWFscyJpbiB0JiYodC53aXRoQ3JlZGVudGlhbHM9ITApO3ZhciBhPWUuaGVhZGVyc3x8e307Zm9yKHZhciByIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShyKSYmbnVsbCE9PWFbcl0mJnQuc2V0UmVxdWVzdEhlYWRlcihyLGFbcl0pO3JldHVybiB0LnNlbmQobyksdH19dC5fX2VzTW9kdWxlPSEwLHQuZGVmYXVsdD1zfSxmdW5jdGlvbihlLHQsaSl7dmFyIG49aSg1KShpKDMwNiksaSgzMDcpLG51bGwsbnVsbCk7ZS5leHBvcnRzPW4uZXhwb3J0c30sZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7dC5fX2VzTW9kdWxlPSEwLHQuZGVmYXVsdD17bmFtZToiRWxVcGxvYWREcmFnIixkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2RyYWdvdmVyOiExfX0sbWV0aG9kczp7b25Ecm9wOmZ1bmN0aW9uKGUpe3RoaXMuZHJhZ292ZXI9ITEsdGhpcy4kZW1pdCgiZmlsZSIsZS5kYXRhVHJhbnNmZXIuZmlsZXMpfX19fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuJGNyZWF0ZUVsZW1lbnQsaT1lLl9zZWxmLl9jfHx0O3JldHVybiBpKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtdXBsb2FkLWRyYWdnZXIiLGNsYXNzOnsiaXMtZHJhZ292ZXIiOmUuZHJhZ292ZXJ9LG9uOntkcm9wOmZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKSxlLm9uRHJvcCh0KX0sZHJhZ292ZXI6ZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpLGUuZHJhZ292ZXI9ITB9LGRyYWdsZWF2ZTpmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCksZS5kcmFnb3Zlcj0hMX19fSxbZS5fdCgiZGVmYXVsdCIpXSwyKX0sc3RhdGljUmVuZGVyRm5zOltdfX0sZnVuY3Rpb24oZSx0LGkpe3ZhciBuPWkoNSkoaSgzMDkpLG51bGwsbnVsbCxudWxsKTtlLmV4cG9ydHM9bi5leHBvcnRzfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXQuX19lc01vZHVsZT0hMDt2YXIgcz1pKDMwNSksbz1uKHMpO3QuZGVmYXVsdD17Y29tcG9uZW50czp7VXBsb2FkRHJhZ2dlcjpvLmRlZmF1bHR9LHByb3BzOnt0eXBlOlN0cmluZyxkYXRhOnt9LGFjdGlvbjp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LG5hbWU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6ImZpbGUifSx3aXRoQ3JlZGVudGlhbHM6Qm9vbGVhbixhY2NlcHQ6U3RyaW5nLG9uU3RhcnQ6RnVuY3Rpb24sb25Qcm9ncmVzczpGdW5jdGlvbixvblN1Y2Nlc3M6RnVuY3Rpb24sb25FcnJvcjpGdW5jdGlvbixiZWZvcmVVcGxvYWQ6RnVuY3Rpb24sb25QcmV2aWV3Ont0eXBlOkZ1bmN0aW9uLGRlZmF1bHQ6ZnVuY3Rpb24oKXt9fSxvblJlbW92ZTp7dHlwZTpGdW5jdGlvbixkZWZhdWx0OmZ1bmN0aW9uKCl7fX0sZHJhZzpCb29sZWFuLGxpc3RUeXBlOlN0cmluZ30sZGF0YTpmdW5jdGlvbigpe3JldHVybnttb3VzZW92ZXI6ITEsZG9tYWluOiIiLGZpbGU6bnVsbCxkaXNhYmxlZDohMX19LG1ldGhvZHM6e2lzSW1hZ2U6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaW5kZXhPZigiaW1hZ2UiKSE9PS0xfSxoYW5kbGVDbGljazpmdW5jdGlvbigpe3RoaXMuJHJlZnMuaW5wdXQuY2xpY2soKX0saGFuZGxlQ2hhbmdlOmZ1bmN0aW9uKGUpe3ZhciB0PWUudGFyZ2V0LnZhbHVlO3QmJnRoaXMudXBsb2FkRmlsZXModCl9LHVwbG9hZEZpbGVzOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLmRpc2FibGVkKXt0aGlzLmRpc2FibGVkPSEwLHRoaXMuZmlsZT1lLHRoaXMub25TdGFydChlKTt2YXIgdD10aGlzLmdldEZvcm1Ob2RlKCksaT10aGlzLmdldEZvcm1EYXRhTm9kZSgpLG49dGhpcy5kYXRhOyJmdW5jdGlvbiI9PXR5cGVvZiBuJiYobj1uKGUpKTt2YXIgcz1bXTtmb3IodmFyIG8gaW4gbiluLmhhc093blByb3BlcnR5KG8pJiZzLnB1c2goJzxpbnB1dCBuYW1lPSInK28rJyIgdmFsdWU9IicrbltvXSsnIi8+Jyk7aS5pbm5lckhUTUw9cy5qb2luKCIiKSx0LnN1Ym1pdCgpLGkuaW5uZXJIVE1MPSIifX0sZ2V0Rm9ybU5vZGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kcmVmcy5mb3JtfSxnZXRGb3JtRGF0YU5vZGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kcmVmcy5kYXRhfX0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuZnJhbWVOYW1lPSJmcmFtZS0iK0RhdGUubm93KCl9LG1vdW50ZWQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzOyF0aGlzLiRpc1NlcnZlciYmd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uKHQpe2lmKGUuZmlsZSl7dmFyIGk9bmV3IFVSTChlLmFjdGlvbikub3JpZ2luO2lmKHQub3JpZ2luPT09aSl7dmFyIG49dC5kYXRhOyJzdWNjZXNzIj09PW4ucmVzdWx0P2Uub25TdWNjZXNzKG4sZS5maWxlKToiZmFpbGVkIj09PW4ucmVzdWx0JiZlLm9uRXJyb3IobixlLmZpbGUpLGUuZGlzYWJsZWQ9ITEsZS5maWxlPW51bGx9fX0sITEpfSxyZW5kZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5kcmFnLGk9dGhpcy51cGxvYWRGaWxlcyxuPXRoaXMubGlzdFR5cGUscz10aGlzLmZyYW1lTmFtZSxvPXsiZWwtdXBsb2FkIjohMH07cmV0dXJuIG9bImVsLXVwbG9hZC0tIituXT0hMCxlKCJkaXYiLHtjbGFzczpvLG9uOntjbGljazp0aGlzLmhhbmRsZUNsaWNrfSxuYXRpdmVPbjp7ZHJvcDp0aGlzLm9uRHJvcCxkcmFnb3Zlcjp0aGlzLmhhbmRsZURyYWdvdmVyLGRyYWdsZWF2ZTp0aGlzLmhhbmRsZURyYWdsZWF2ZX19LFtlKCJpZnJhbWUiLHtvbjp7bG9hZDp0aGlzLm9ubG9hZH0scmVmOiJpZnJhbWUiLGF0dHJzOntuYW1lOnN9fSxbXSksZSgiZm9ybSIse3JlZjoiZm9ybSIsYXR0cnM6e2FjdGlvbjp0aGlzLmFjdGlvbix0YXJnZXQ6cyxlbmN0eXBlOiJtdWx0aXBhcnQvZm9ybS1kYXRhIixtZXRob2Q6IlBPU1QifX0sW2UoImlucHV0Iix7Y2xhc3M6ImVsLXVwbG9hZF9faW5wdXQiLGF0dHJzOnt0eXBlOiJmaWxlIixuYW1lOiJmaWxlIixhY2NlcHQ6dGhpcy5hY2NlcHR9LHJlZjoiaW5wdXQiLG9uOntjaGFuZ2U6dGhpcy5oYW5kbGVDaGFuZ2V9fSxbXSksZSgiaW5wdXQiLHthdHRyczp7dHlwZToiaGlkZGVuIixuYW1lOiJkb2N1bWVudERvbWFpbiIsdmFsdWU6dGhpcy4kaXNTZXJ2ZXI/IiI6ZG9jdW1lbnQuZG9tYWlufX0sW10pLGUoInNwYW4iLHtyZWY6ImRhdGEifSxbXSldKSx0P2UoInVwbG9hZC1kcmFnZ2VyIix7b246e2ZpbGU6aX19LFt0aGlzLiRzbG90cy5kZWZhdWx0XSk6dGhpcy4kc2xvdHMuZGVmYXVsdF0pfX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dC5fX2VzTW9kdWxlPSEwLHQuZGVmYXVsdD17bW91bnRlZDpmdW5jdGlvbigpe3JldHVybn0sbWV0aG9kczp7CmdldE1pZ3JhdGluZ0NvbmZpZzpmdW5jdGlvbigpe3JldHVybntwcm9wczp7fSxldmVudHM6e319fX19fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXQuX19lc01vZHVsZT0hMDt2YXIgcz1pKDMxMiksbz1uKHMpO28uZGVmYXVsdC5pbnN0YWxsPWZ1bmN0aW9uKGUpe2UuY29tcG9uZW50KG8uZGVmYXVsdC5uYW1lLG8uZGVmYXVsdCl9LHQuZGVmYXVsdD1vLmRlZmF1bHR9LGZ1bmN0aW9uKGUsdCxpKXt2YXIgbj1pKDUpKGkoMzEzKSxpKDMxNCksbnVsbCxudWxsKTtlLmV4cG9ydHM9bi5leHBvcnRzfSxmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0Ijt0Ll9fZXNNb2R1bGU9ITAsdC5kZWZhdWx0PXtuYW1lOiJFbFNwaW5uZXIiLHByb3BzOnt0eXBlOlN0cmluZyxyYWRpdXM6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MTAwfSxzdHJva2VXaWR0aDp7dHlwZTpOdW1iZXIsZGVmYXVsdDo1fSxzdHJva2VDb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiI2VmZWZlZiJ9fX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxpPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIGkoInNwYW4iLHtzdGF0aWNDbGFzczoiZWwtc3Bpbm5lciJ9LFtpKCJzdmciLHtzdGF0aWNDbGFzczoiZWwtc3Bpbm5lci1pbm5lciIsc3R5bGU6e3dpZHRoOmUucmFkaXVzLzIrInB4IixoZWlnaHQ6ZS5yYWRpdXMvMisicHgifSxhdHRyczp7dmlld0JveDoiMCAwIDUwIDUwIn19LFtpKCJjaXJjbGUiLHtzdGF0aWNDbGFzczoicGF0aCIsYXR0cnM6e2N4OiIyNSIsY3k6IjI1IixyOiIyMCIsZmlsbDoibm9uZSIsc3Ryb2tlOmUuc3Ryb2tlQ29sb3IsInN0cm9rZS13aWR0aCI6ZS5zdHJva2VXaWR0aH19KV0pXSl9LHN0YXRpY1JlbmRlckZuczpbXX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5fX2VzTW9kdWxlPSEwO3ZhciBzPWkoMzE2KSxvPW4ocyk7dC5kZWZhdWx0PW8uZGVmYXVsdH0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX10Ll9fZXNNb2R1bGU9ITA7dmFyIHM9aSgxNSksbz1uKHMpLGE9aSgyOCkscj1vLmRlZmF1bHQuZXh0ZW5kKGkoMzE3KSksbD12b2lkIDAsdT1bXSxjPTEsZD1mdW5jdGlvbiBlKHQpe2lmKCFvLmRlZmF1bHQucHJvdG90eXBlLiRpc1NlcnZlcil7dD10fHx7fSwic3RyaW5nIj09dHlwZW9mIHQmJih0PXttZXNzYWdlOnR9KTt2YXIgaT10Lm9uQ2xvc2Usbj0ibWVzc2FnZV8iK2MrKztyZXR1cm4gdC5vbkNsb3NlPWZ1bmN0aW9uKCl7ZS5jbG9zZShuLGkpfSxsPW5ldyByKHtkYXRhOnR9KSxsLmlkPW4sbC52bT1sLiRtb3VudCgpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobC52bS4kZWwpLGwudm0udmlzaWJsZT0hMCxsLmRvbT1sLnZtLiRlbCxsLmRvbS5zdHlsZS56SW5kZXg9YS5Qb3B1cE1hbmFnZXIubmV4dFpJbmRleCgpLHUucHVzaChsKSxsLnZtfX07WyJzdWNjZXNzIiwid2FybmluZyIsImluZm8iLCJlcnJvciJdLmZvckVhY2goZnVuY3Rpb24oZSl7ZFtlXT1mdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJih0PXttZXNzYWdlOnR9KSx0LnR5cGU9ZSxkKHQpfX0pLGQuY2xvc2U9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIGk9MCxuPXUubGVuZ3RoO2k8bjtpKyspaWYoZT09PXVbaV0uaWQpeyJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0KHVbaV0pLHUuc3BsaWNlKGksMSk7YnJlYWt9fSxkLmNsb3NlQWxsPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXUubGVuZ3RoLTE7ZT49MDtlLS0pdVtlXS5jbG9zZSgpfSx0LmRlZmF1bHQ9ZH0sZnVuY3Rpb24oZSx0LGkpe3ZhciBuPWkoNSkoaSgzMTgpLGkoMzI0KSxudWxsLG51bGwpO2UuZXhwb3J0cz1uLmV4cG9ydHN9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dC5fX2VzTW9kdWxlPSEwLHQuZGVmYXVsdD17ZGF0YTpmdW5jdGlvbigpe3JldHVybnt2aXNpYmxlOiExLG1lc3NhZ2U6IiIsZHVyYXRpb246M2UzLHR5cGU6ImluZm8iLGljb25DbGFzczoiIixjdXN0b21DbGFzczoiIixvbkNsb3NlOm51bGwsc2hvd0Nsb3NlOiExLGNsb3NlZDohMSx0aW1lcjpudWxsfX0sY29tcHV0ZWQ6e3R5cGVJbWc6ZnVuY3Rpb24oKXtyZXR1cm4gaSgzMTkpKCIuLyIrdGhpcy50eXBlKyIuc3ZnIil9fSx3YXRjaDp7Y2xvc2VkOmZ1bmN0aW9uKGUpe2UmJih0aGlzLnZpc2libGU9ITEsdGhpcy4kZWwuYWRkRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVuZCIsdGhpcy5kZXN0cm95RWxlbWVudCkpfX0sbWV0aG9kczp7ZGVzdHJveUVsZW1lbnQ6ZnVuY3Rpb24oKXt0aGlzLiRlbC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIix0aGlzLmRlc3Ryb3lFbGVtZW50KSx0aGlzLiRkZXN0cm95KCEwKSx0aGlzLiRlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuJGVsKX0sY2xvc2U6ZnVuY3Rpb24oKXt0aGlzLmNsb3NlZD0hMCwiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5vbkNsb3NlJiZ0aGlzLm9uQ2xvc2UodGhpcyl9LGNsZWFyVGltZXI6ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodGhpcy50aW1lcil9LHN0YXJ0VGltZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuZHVyYXRpb24+MCYmKHRoaXMudGltZXI9c2V0VGltZW91dChmdW5jdGlvbigpe2UuY2xvc2VkfHxlLmNsb3NlKCl9LHRoaXMuZHVyYXRpb24pKX19LG1vdW50ZWQ6ZnVuY3Rpb24oKXt0aGlzLnN0YXJ0VGltZXIoKX19fSxmdW5jdGlvbihlLHQsaSl7ZnVuY3Rpb24gbihlKXtyZXR1cm4gaShzKGUpKX1mdW5jdGlvbiBzKGUpe3JldHVybiBvW2VdfHxmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK2UrIicuIil9KCl9dmFyIG89eyIuL2Vycm9yLnN2ZyI6MzIwLCIuL2luZm8uc3ZnIjozMjEsIi4vc3VjY2Vzcy5zdmciOjMyMiwiLi93YXJuaW5nLnN2ZyI6MzIzfTtuLmtleXM9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXMobyl9LG4ucmVzb2x2ZT1zLGUuZXhwb3J0cz1uLG4uaWQ9MzE5fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0iZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQRDk0Yld3Z2RtVnljMmx2YmowaU1TNHdJaUJsYm1OdlpHbHVaejBpVlZSR0xUZ2lJSE4wWVc1a1lXeHZibVU5SW01dklqOCtDanh6ZG1jZ2QybGtkR2c5SWpRd2NIZ2lJR2hsYVdkb2REMGlOREJ3ZUNJZ2RtbGxkMEp2ZUQwaU1DQXdJRFF3SURRd0lpQjJaWEp6YVc5dVBTSXhMakVpSUhodGJHNXpQU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh5TURBd0wzTjJaeUlnZUcxc2JuTTZlR3hwYm1zOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6RTVPVGt2ZUd4cGJtc2lQZ29nSUNBZ1BDRXRMU0JIWlc1bGNtRjBiM0k2SUZOclpYUmphQ0F6T1M0eElDZ3pNVGN5TUNrZ0xTQm9kSFJ3T2k4dmQzZDNMbUp2YUdWdGFXRnVZMjlrYVc1bkxtTnZiUzl6YTJWMFkyZ2dMUzArQ2lBZ0lDQThkR2wwYkdVK2FXTnZibDlrWVc1blpYSThMM1JwZEd4bFBnb2dJQ0FnUEdSbGMyTStRM0psWVhSbFpDQjNhWFJvSUZOclpYUmphQzQ4TDJSbGMyTStDaUFnSUNBOFpHVm1jejQ4TDJSbFpuTStDaUFnSUNBOFp5QnBaRDBpUld4bGJXVnVkQzFuZFdsa1pXeHBibVV0ZGpBdU1pNDBJaUJ6ZEhKdmEyVTlJbTV2Ym1VaUlITjBjbTlyWlMxM2FXUjBhRDBpTVNJZ1ptbHNiRDBpYm05dVpTSWdabWxzYkMxeWRXeGxQU0psZG1WdWIyUmtJajRLSUNBZ0lDQWdJQ0E4WnlCcFpEMGlUV1Z6YzJGblpTSWdkSEpoYm5ObWIzSnRQU0owY21GdWMyeGhkR1VvTFRZd0xqQXdNREF3TUN3Z0xUTXpNaTR3TURBd01EQXBJajRLSUNBZ0lDQWdJQ0FnSUNBZ1BHY2dhV1E5SXVXNHB1V0F2dVdRa1Yva3Y2SG1nYThpSUhSeVlXNXpabTl5YlQwaWRISmhibk5zWVhSbEtEWXdMakF3TURBd01Dd2dNek15TGpBd01EQXdNQ2tpUGdvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnUEdjZ2FXUTlJbEpsWTNSaGJtZHNaUzB5SWo0S0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQThaeUJwWkQwaWFXTnZibDlrWVc1blpYSWlQZ29nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQThjbVZqZENCcFpEMGlVbVZqZEdGdVoyeGxMVElpSUdacGJHdzlJaU5HUmpRNU5Ea2lJSGc5SWpBaUlIazlJakFpSUhkcFpIUm9QU0kwTUNJZ2FHVnBaMmgwUFNJME1DSStQQzl5WldOMFBnb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBOGNHRjBhQ0JrUFNKTk1qVXVPREUzTWpZeU55d3hOaTR6TkRVeE56azJJRU15TlM0NU16a3dPVEF5TERFMkxqSXlNek0wT0RNZ01qWXNNVFl1TURjMk1UUXhPQ0F5Tml3eE5TNDVNRE0xTlRJeklFTXlOaXd4TlM0M016QTVOakk0SURJMUxqa3pPVEE1TURJc01UVXVOVGd6TnpVMk15QXlOUzQ0TVRjeU5qSTNMREUxTGpRMk1Ua3lPRGtnVERJMExqVXdOell4TlRjc01UUXVNVGd5TnpReE1TQkRNalF1TXpnMU56ZzRNaXd4TkM0d05qQTVNVE0zSURJMExqSTBNelkxTnpVc01UUWdNalF1TURneE1qRTVOaXd4TkNCRE1qTXVPVEU0TnpneE55d3hOQ0F5TXk0M056WTJOVEVzTVRRdU1EWXdPVEV6TnlBeU15NDJOVFE0TWpNMUxERTBMakU0TWpjME1URWdUREl3TERFM0xqZ3pOelUyTXpVZ1RERTJMak14TkRjeU1UWXNNVFF1TVRneU56UXhNU0JETVRZdU1Ua3lPRGt3TWl3eE5DNHdOakE1TVRNM0lERTJMakExTURjMU9UVXNNVFFnTVRVdU9EZzRNekl4Tml3eE5DQkRNVFV1TnpJMU9EZzNOaXd4TkNBeE5TNDFPRE0zTlRZNUxERTBMakEyTURreE16Y2dNVFV1TkRZeE9USTVOQ3d4TkM0eE9ESTNOREV4SUV3eE5DNHhOVEl5T0RJMExERTFMalEyTVRreU9Ea2dRekUwTGpBMU1EYzFPRElzTVRVdU5UZ3pOelUyTXlBeE5Dd3hOUzQzTXpBNU5qSTRJREUwTERFMUxqa3dNelUxTWpNZ1F6RTBMREUyTGpBM05qRTBNVGdnTVRRdU1EVXdOelU0TWl3eE5pNHlNak16TkRneklERTBMakUxTWpJNE1qUXNNVFl1TXpRMU1UYzVOaUJNTVRjdU9ETTNOVFl3T0N3eU1DNHdNREF3TURFNUlFd3hOQzR4TlRJeU9ESTBMREl6TGpZMU5EZ3lORE1nUXpFMExqQTFNRGMxT0RJc01qTXVOemMyTmpVeE55QXhOQ3d5TXk0NU1qTTROVGd5SURFMExESTBMakE1TmpRME56Y2dRekUwTERJMExqSTJPVEF6TnpJZ01UUXVNRFV3TnpVNE1pd3lOQzQwTVRZeU5ETTNJREUwTGpFMU1qSTRNalFzTWpRdU5UTTRNRGN4TVNCTU1UVXVORFl4T1RJNU5Dd3lOUzQ0TVRjeU5UZzVJRU14TlM0MU9ETTNOVFk1TERJMUxqa3pPVEE0TmpNZ01UVXVOekkxT0RnM05pd3lOaUF4TlM0NE9EZ3pNakUyTERJMklFTXhOaTR3TlRBM05UazFMREkySURFMkxqRTVNamc1TURJc01qVXVPVE01TURnMk15QXhOaTR6TVRRM01qRTJMREkxTGpneE56STFPRGtnVERJd0xESXlMakUyTWpRek5qVWdUREl6TGpZMU5EZ3lNelVzTWpVdU9ERTNNalU0T1NCRE1qTXVOemMyTmpVeExESTFMamt6T1RBNE5qTWdNak11T1RFNE56Z3hOeXd5TmlBeU5DNHdPREV5TVRrMkxESTJJRU15TkM0eU5ETTJOVGMxTERJMklESTBMak00TlRjNE9ESXNNalV1T1RNNU1EZzJNeUF5TkM0MU1EYzJNVFUzTERJMUxqZ3hOekkxT0RrZ1RESTFMamd4TnpJMk1qY3NNalF1TlRNNE1EY3hNU0JETWpVdU9UTTVNRGt3TWl3eU5DNDBNVFl5TkRNM0lESTJMREkwTGpJMk9UQXpOeklnTWpZc01qUXVNRGsyTkRRM055QkRNallzTWpNdU9USXpPRFU0TWlBeU5TNDVNemt3T1RBeUxESXpMamMzTmpZMU1UY2dNalV1T0RFM01qWXlOeXd5TXk0Mk5UUTRNalF6SUV3eU1pNHhNekU1T0RBMExESXdMakF3TURBd01Ua2dUREkxTGpneE56STJNamNzTVRZdU16UTFNVGM1TmlCYUlpQnBaRDBpVUdGMGFDSWdabWxzYkQwaUkwWkdSa1pHUmlJK1BDOXdZWFJvUGdvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lEd3ZaejRLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRHd2Wno0S0lDQWdJQ0FnSUNBZ0lDQWdQQzluUGdvZ0lDQWdJQ0FnSUR3dlp6NEtJQ0FnSUR3dlp6NEtQQzl6ZG1jKyJ9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPSJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBEOTRiV3dnZG1WeWMybHZiajBpTVM0d0lpQmxibU52WkdsdVp6MGlWVlJHTFRnaUlITjBZVzVrWVd4dmJtVTlJbTV2SWo4K0NqeHpkbWNnZDJsa2RHZzlJalF3Y0hnaUlHaGxhV2RvZEQwaU5EQndlQ0lnZG1sbGQwSnZlRDBpTUNBd0lEUXdJRFF3SWlCMlpYSnphVzl1UFNJeExqRWlJSGh0Ykc1elBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHlNREF3TDNOMlp5SWdlRzFzYm5NNmVHeHBibXM5SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpFNU9Ua3ZlR3hwYm1zaVBnb2dJQ0FnUENFdExTQkhaVzVsY21GMGIzSTZJRk5yWlhSamFDQXpPUzR4SUNnek1UY3lNQ2tnTFNCb2RIUndPaTh2ZDNkM0xtSnZhR1Z0YVdGdVkyOWthVzVuTG1OdmJTOXphMlYwWTJnZ0xTMCtDaUFnSUNBOGRHbDBiR1UrYVdOdmJsOXBibVp2UEM5MGFYUnNaVDRLSUNBZ0lEeGtaWE5qUGtOeVpXRjBaV1FnZDJsMGFDQlRhMlYwWTJndVBDOWtaWE5qUGdvZ0lDQWdQR1JsWm5NK1BDOWtaV1p6UGdvZ0lDQWdQR2NnYVdROUlrVnNaVzFsYm5RdFozVnBaR1ZzYVc1bExYWXdMakl1TkNJZ2MzUnliMnRsUFNKdWIyNWxJaUJ6ZEhKdmEyVXRkMmxrZEdnOUlqRWlJR1pwYkd3OUltNXZibVVpSUdacGJHd3RjblZzWlQwaVpYWmxibTlrWkNJK0NpQWdJQ0FnSUNBZ1BHY2dhV1E5SWsxbGMzTmhaMlVpSUhSeVlXNXpabTl5YlQwaWRISmhibk5zWVhSbEtDMDJNQzR3TURBd01EQXNJQzB4TlRJdU1EQXdNREF3S1NJK0NpQWdJQ0FnSUNBZ0lDQWdJRHhuSUdsa1BTTGx1S2JsZ0w3bGtKRmY1TCtoNW9HdklpQjBjbUZ1YzJadmNtMDlJblJ5WVc1emJHRjBaU2cyTUM0d01EQXdNREFzSURFMU1pNHdNREF3TURBcElqNEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lEeG5JR2xrUFNKU1pXTjBZVzVuYkdVdE1pSStDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnUEdjZ2FXUTlJbWxqYjI1ZmFXNW1ieUkrQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRHh5WldOMElHbGtQU0pTWldOMFlXNW5iR1V0TWlJZ1ptbHNiRDBpSXpVd1FrWkdSaUlnZUQwaU1DSWdlVDBpTUNJZ2QybGtkR2c5SWpRd0lpQm9aV2xuYUhROUlqUXdJajQ4TDNKbFkzUStDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lEeHdZWFJvSUdROUlrMHlNUzQyTVRVek9EUTJMREkyTGpVME16SXdPVGtnUXpJeExqWXhOVE00TkRZc01qWXVPVFEzT0RjMU1TQXlNUzQwTlRnek16UTRMREkzTGpJNU1UZ3pOamdnTWpFdU1UUTBNak13T0N3eU55NDFOelV4TURJNUlFTXlNQzQ0TXpBeE1qWTRMREkzTGpnMU9ETTJPRGtnTWpBdU5EUTROekU1TkN3eU9DQXlNQ3d5T0NCRE1Ua3VOVFV4TWpnd05pd3lPQ0F4T1M0eE5qazROek15TERJM0xqZzFPRE0yT0RrZ01UZ3VPRFUxTnpZNU1pd3lOeTQxTnpVeE1ESTVJRU14T0M0MU5ERTJOalV5TERJM0xqSTVNVGd6TmpnZ01UZ3VNemcwTmpFMU5Dd3lOaTQ1TkRjNE56VXhJREU0TGpNNE5EWXhOVFFzTWpZdU5UUXpNakE1T1NCTU1UZ3VNemcwTmpFMU5Dd3hPUzQzTkRRNE5UWWdRekU0TGpNNE5EWXhOVFFzTVRrdU16UXdNVGt3TnlBeE9DNDFOREUyTmpVeUxERTRMams1TmpJeU9TQXhPQzQ0TlRVM05qa3lMREU0TGpjeE1qazJNeUJETVRrdU1UWTVPRGN6TWl3eE9DNDBNamsyT1RZNUlERTVMalUxTVRJNE1EWXNNVGd1TWpnNE1EWTFPQ0F5TUN3eE9DNHlPRGd3TmpVNElFTXlNQzQwTkRnM01UazBMREU0TGpJNE9EQTJOVGdnTWpBdU9ETXdNVEkyT0N3eE9DNDBNamsyT1RZNUlESXhMakUwTkRJek1EZ3NNVGd1TnpFeU9UWXpJRU15TVM0ME5UZ3pNelE0TERFNExqazVOakl5T1NBeU1TNDJNVFV6T0RRMkxERTVMak0wTURFNU1EY2dNakV1TmpFMU16ZzBOaXd4T1M0M05EUTROVFlnVERJeExqWXhOVE00TkRZc01qWXVOVFF6TWpBNU9TQmFJRTB5TUN3eE5TNDRNRFF5T1RneElFTXhPUzQwTkRRME5ESTNMREUxTGpnd05ESTVPREVnTVRndU9UY3lNakkwTERFMUxqWXhPVE0yT0RjZ01UZ3VOVGd6TXpNek15d3hOUzR5TkRrMU1EUTJJRU14T0M0eE9UUTBOREkzTERFMExqZzNPVFkwTURZZ01UZ3NNVFF1TkRNd05USTFOU0F4T0N3eE15NDVNREl4TkRreElFTXhPQ3d4TXk0ek56TTNOekkySURFNExqRTVORFEwTWpjc01USXVPVEkwTmpVM05TQXhPQzQxT0RNek16TXpMREV5TGpVMU5EYzVNelVnUXpFNExqazNNakl5TkN3eE1pNHhPRFE1TWprMUlERTVMalEwTkRRME1qY3NNVElnTWpBc01USWdRekl3TGpVMU5UVTFOek1zTVRJZ01qRXVNREkzTnpjMkxERXlMakU0TkRreU9UVWdNakV1TkRFMk5qWTJOeXd4TWk0MU5UUTNPVE0xSUVNeU1TNDRNRFUxTlRjekxERXlMamt5TkRZMU56VWdNaklzTVRNdU16Y3pOemN5TmlBeU1pd3hNeTQ1TURJeE5Ea3hJRU15TWl3eE5DNDBNekExTWpVMUlESXhMamd3TlRVMU56TXNNVFF1T0RjNU5qUXdOaUF5TVM0ME1UWTJOalkzTERFMUxqSTBPVFV3TkRZZ1F6SXhMakF5TnpjM05pd3hOUzQyTVRrek5qZzNJREl3TGpVMU5UVTFOek1zTVRVdU9EQTBNams0TVNBeU1Dd3hOUzQ0TURReU9UZ3hJRm9pSUdsa1BTSkRiMjFpYVc1bFpDMVRhR0Z3WlNJZ1ptbHNiRDBpSTBaR1JrWkdSaUkrUEM5d1lYUm9QZ29nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUR3dlp6NEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lEd3ZaejRLSUNBZ0lDQWdJQ0FnSUNBZ1BDOW5QZ29nSUNBZ0lDQWdJRHd2Wno0S0lDQWdJRHd2Wno0S1BDOXpkbWMrIn0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEQ5NGJXd2dkbVZ5YzJsdmJqMGlNUzR3SWlCbGJtTnZaR2x1WnowaVZWUkdMVGdpSUhOMFlXNWtZV3h2Ym1VOUltNXZJajgrQ2p4emRtY2dkMmxrZEdnOUlqUXdjSGdpSUdobGFXZG9kRDBpTkRCd2VDSWdkbWxsZDBKdmVEMGlNQ0F3SURRd0lEUXdJaUIyWlhKemFXOXVQU0l4TGpFaUlIaHRiRzV6UFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eU1EQXdMM04yWnlJZ2VHMXNibk02ZUd4cGJtczlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5MekU1T1RrdmVHeHBibXNpUGdvZ0lDQWdQQ0V0TFNCSFpXNWxjbUYwYjNJNklGTnJaWFJqYUNBek9TNHhJQ2d6TVRjeU1Da2dMU0JvZEhSd09pOHZkM2QzTG1KdmFHVnRhV0Z1WTI5a2FXNW5MbU52YlM5emEyVjBZMmdnTFMwK0NpQWdJQ0E4ZEdsMGJHVSthV052Ymw5emRXTmpaWE56UEM5MGFYUnNaVDRLSUNBZ0lEeGtaWE5qUGtOeVpXRjBaV1FnZDJsMGFDQlRhMlYwWTJndVBDOWtaWE5qUGdvZ0lDQWdQR1JsWm5NK1BDOWtaV1p6UGdvZ0lDQWdQR2NnYVdROUlrVnNaVzFsYm5RdFozVnBaR1ZzYVc1bExYWXdMakl1TkNJZ2MzUnliMnRsUFNKdWIyNWxJaUJ6ZEhKdmEyVXRkMmxrZEdnOUlqRWlJR1pwYkd3OUltNXZibVVpSUdacGJHd3RjblZzWlQwaVpYWmxibTlrWkNJK0NpQWdJQ0FnSUNBZ1BHY2dhV1E5SWsxbGMzTmhaMlVpSUhSeVlXNXpabTl5YlQwaWRISmhibk5zWVhSbEtDMDJNQzR3TURBd01EQXNJQzB5TVRJdU1EQXdNREF3S1NJK0NpQWdJQ0FnSUNBZ0lDQWdJRHhuSUdsa1BTTGx1S2JsZ0w3bGtKRmY1TCtoNW9HdklpQjBjbUZ1YzJadmNtMDlJblJ5WVc1emJHRjBaU2cyTUM0d01EQXdNREFzSURJeE1pNHdNREF3TURBcElqNEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lEeG5JR2xrUFNKU1pXTjBZVzVuYkdVdE1pSStDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnUEdjZ2FXUTlJbWxqYjI1ZmMzVmpZMlZ6Y3lJK0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUR4eVpXTjBJR2xrUFNKU1pXTjBZVzVuYkdVdE1pSWdabWxzYkQwaUl6RXpRMFUyTmlJZ2VEMGlNQ0lnZVQwaU1DSWdkMmxrZEdnOUlqUXdJaUJvWldsbmFIUTlJalF3SWo0OEwzSmxZM1ErQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRHh3WVhSb0lHUTlJazB5Tnk0NE1qVTFPREUwTERFM0xqRTBPRFF6TlRjZ1RERTVMakF4TnpRMExESTFMamd5T0RFeU1UTWdRekU0TGprd01URTJNRGtzTWpVdU9UUXlOekE0TXlBeE9DNDNOalUxTURNekxESTJJREU0TGpZeE1EUTJOeXd5TmlCRE1UZ3VORFUxTkRJM0xESTJJREU0TGpNeE9UYzJPVE1zTWpVdU9UUXlOekE0TXlBeE9DNHlNRE0wT0RZMUxESTFMamd5T0RFeU1UTWdUREU0TGpBeU9UQTNNVFlzTWpVdU5qVTJNalVnVERFekxqRTNORFF4T0RZc01qQXVPRFF6TnpVZ1F6RXpMakExT0RFek9UVXNNakF1TnpJNU1UWXpJREV6TERJd0xqVTVOVFE0TXpjZ01UTXNNakF1TkRReU56QTBOeUJETVRNc01qQXVNamc1T1RJNU15QXhNeTR3TlRneE16azFMREl3TGpFMU5qSTFJREV6TGpFM05EUXhPRFlzTWpBdU1EUXhOalkyTnlCTU1UUXVNelkyTWpjM01pd3hPQzQ0TmpjeE9EVTNJRU14TkM0ME9ESTFOaXd4T0M0M05USTJNREl6SURFMExqWXhPREl4Tnpjc01UZ3VOamsxTXpFd055QXhOQzQzTnpNeU5UYzNMREU0TGpZNU5UTXhNRGNnUXpFMExqa3lPREk1TkN3eE9DNDJPVFV6TVRBM0lERTFMakEyTXprMU1UWXNNVGd1TnpVeU5qQXlNeUF4TlM0eE9EQXlNekEzTERFNExqZzJOekU0TlRjZ1RERTRMall4TURRMk55d3lNaTR5TnpZd016Z2dUREkxTGpneE9UYzJPVE1zTVRVdU1UY3hPRGN4TXlCRE1qVXVPVE0yTURRNE5Dd3hOUzR3TlRjeU9EZ2dNall1TURjeE56QTJMREUxSURJMkxqSXlOamMwTWpNc01UVWdRekkyTGpNNE1UYzRNak1zTVRVZ01qWXVOVEUzTkRRc01UVXVNRFUzTWpnNElESTJMall6TXpjeU1qZ3NNVFV1TVRjeE9EY3hNeUJNTWpjdU9ESTFOVGd4TkN3eE5pNHpORFl6TlRJeklFTXlOeTQ1TkRFNE5qQTFMREUyTGpRMk1Ea3pOVGNnTWpnc01UWXVOVGswTmpFMUlESTRMREUyTGpjME56TTVOQ0JETWpnc01UWXVPVEF3TVRjeklESTNMamswTVRnMk1EVXNNVGN1TURNek9EVXlNeUF5Tnk0NE1qVTFPREUwTERFM0xqRTBPRFF6TlRjZ1RESTNMamd5TlRVNE1UUXNNVGN1TVRRNE5ETTFOeUJhSWlCcFpEMGlVR0YwYUNJZ1ptbHNiRDBpSTBaR1JrWkdSaUkrUEM5d1lYUm9QZ29nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUR3dlp6NEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lEd3ZaejRLSUNBZ0lDQWdJQ0FnSUNBZ1BDOW5QZ29nSUNBZ0lDQWdJRHd2Wno0S0lDQWdJRHd2Wno0S1BDOXpkbWMrIn0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEQ5NGJXd2dkbVZ5YzJsdmJqMGlNUzR3SWlCbGJtTnZaR2x1WnowaVZWUkdMVGdpSUhOMFlXNWtZV3h2Ym1VOUltNXZJajgrQ2p4emRtY2dkMmxrZEdnOUlqUXdjSGdpSUdobGFXZG9kRDBpTkRCd2VDSWdkbWxsZDBKdmVEMGlNQ0F3SURRd0lEUXdJaUIyWlhKemFXOXVQU0l4TGpFaUlIaHRiRzV6UFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eU1EQXdMM04yWnlJZ2VHMXNibk02ZUd4cGJtczlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5MekU1T1RrdmVHeHBibXNpUGdvZ0lDQWdQQ0V0TFNCSFpXNWxjbUYwYjNJNklGTnJaWFJqYUNBek9TNHhJQ2d6TVRjeU1Da2dMU0JvZEhSd09pOHZkM2QzTG1KdmFHVnRhV0Z1WTI5a2FXNW5MbU52YlM5emEyVjBZMmdnTFMwK0NpQWdJQ0E4ZEdsMGJHVSthV052Ymw5M1lYSnVhVzVuUEM5MGFYUnNaVDRLSUNBZ0lEeGtaWE5qUGtOeVpXRjBaV1FnZDJsMGFDQlRhMlYwWTJndVBDOWtaWE5qUGdvZ0lDQWdQR1JsWm5NK1BDOWtaV1p6UGdvZ0lDQWdQR2NnYVdROUlsQmhaMlV0TVNJZ2MzUnliMnRsUFNKdWIyNWxJaUJ6ZEhKdmEyVXRkMmxrZEdnOUlqRWlJR1pwYkd3OUltNXZibVVpSUdacGJHd3RjblZzWlQwaVpYWmxibTlrWkNJK0NpQWdJQ0FnSUNBZ1BHY2dhV1E5SWsxbGMzTmhaMlVpSUhSeVlXNXpabTl5YlQwaWRISmhibk5zWVhSbEtDMDJNQzR3TURBd01EQXNJQzB5TnpJdU1EQXdNREF3S1NJK0NpQWdJQ0FnSUNBZ0lDQWdJRHhuSUdsa1BTTGx1S2JsZ0w3bGtKRmY1TCtoNW9HdkxXTnZjSGtpSUhSeVlXNXpabTl5YlQwaWRISmhibk5zWVhSbEtEWXdMakF3TURBd01Dd2dNamN5TGpBd01EQXdNQ2tpUGdvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnUEdjZ2FXUTlJbEpsWTNSaGJtZHNaUzB5SWo0S0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQThaeUJwWkQwaWFXTnZibDkzWVhKdWFXNW5JajRLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdQSEpsWTNRZ2FXUTlJbEpsWTNSaGJtZHNaUzB5SWlCbWFXeHNQU0lqUmpkQ1FUSkJJaUI0UFNJd0lpQjVQU0l3SWlCM2FXUjBhRDBpTkRBaUlHaGxhV2RvZEQwaU5EQWlQand2Y21WamRENEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1BIQmhkR2dnWkQwaVRUSXhMall4TlRNNE5EWXNNall1TlRRek1qQTVPU0JETWpFdU5qRTFNemcwTml3eU5pNDVORGM0TnpVeElESXhMalExT0RNek5EZ3NNamN1TWpreE9ETTJPQ0F5TVM0eE5EUXlNekE0TERJM0xqVTNOVEV3TWprZ1F6SXdMamd6TURFeU5qZ3NNamN1T0RVNE16WTRPU0F5TUM0ME5EZzNNVGswTERJNElESXdMREk0SUVNeE9TNDFOVEV5T0RBMkxESTRJREU1TGpFMk9UZzNNeklzTWpjdU9EVTRNelk0T1NBeE9DNDROVFUzTmpreUxESTNMalUzTlRFd01qa2dRekU0TGpVME1UWTJOVElzTWpjdU1qa3hPRE0yT0NBeE9DNHpPRFEyTVRVMExESTJMamswTnpnM05URWdNVGd1TXpnME5qRTFOQ3d5Tmk0MU5ETXlNRGs1SUV3eE9DNHpPRFEyTVRVMExERTVMamMwTkRnMU5pQkRNVGd1TXpnME5qRTFOQ3d4T1M0ek5EQXhPVEEzSURFNExqVTBNVFkyTlRJc01UZ3VPVGsyTWpJNUlERTRMamcxTlRjMk9USXNNVGd1TnpFeU9UWXpJRU14T1M0eE5qazROek15TERFNExqUXlPVFk1TmprZ01Ua3VOVFV4TWpnd05pd3hPQzR5T0Rnd05qVTRJREl3TERFNExqSTRPREEyTlRnZ1F6SXdMalEwT0RjeE9UUXNNVGd1TWpnNE1EWTFPQ0F5TUM0NE16QXhNalk0TERFNExqUXlPVFk1TmprZ01qRXVNVFEwTWpNd09Dd3hPQzQzTVRJNU5qTWdRekl4TGpRMU9ETXpORGdzTVRndU9UazJNakk1SURJeExqWXhOVE00TkRZc01Ua3VNelF3TVRrd055QXlNUzQyTVRVek9EUTJMREU1TGpjME5EZzFOaUJNTWpFdU5qRTFNemcwTml3eU5pNDFORE15TURrNUlGb2dUVEl3TERFMUxqZ3dOREk1T0RFZ1F6RTVMalEwTkRRME1qY3NNVFV1T0RBME1qazRNU0F4T0M0NU56SXlNalFzTVRVdU5qRTVNelk0TnlBeE9DNDFPRE16TXpNekxERTFMakkwT1RVd05EWWdRekU0TGpFNU5EUTBNamNzTVRRdU9EYzVOalF3TmlBeE9Dd3hOQzQwTXpBMU1qVTFJREU0TERFekxqa3dNakUwT1RFZ1F6RTRMREV6TGpNM016YzNNallnTVRndU1UazBORFF5Tnl3eE1pNDVNalEyTlRjMUlERTRMalU0TXpNek16TXNNVEl1TlRVME56a3pOU0JETVRndU9UY3lNakkwTERFeUxqRTRORGt5T1RVZ01Ua3VORFEwTkRReU55d3hNaUF5TUN3eE1pQkRNakF1TlRVMU5UVTNNeXd4TWlBeU1TNHdNamMzTnpZc01USXVNVGcwT1RJNU5TQXlNUzQwTVRZMk5qWTNMREV5TGpVMU5EYzVNelVnUXpJeExqZ3dOVFUxTnpNc01USXVPVEkwTmpVM05TQXlNaXd4TXk0ek56TTNOekkySURJeUxERXpMamt3TWpFME9URWdRekl5TERFMExqUXpNRFV5TlRVZ01qRXVPREExTlRVM015d3hOQzQ0TnprMk5EQTJJREl4TGpReE5qWTJOamNzTVRVdU1qUTVOVEEwTmlCRE1qRXVNREkzTnpjMkxERTFMall4T1RNMk9EY2dNakF1TlRVMU5UVTNNeXd4TlM0NE1EUXlPVGd4SURJd0xERTFMamd3TkRJNU9ERWdXaUlnYVdROUlrTnZiV0pwYm1Wa0xWTm9ZWEJsSWlCbWFXeHNQU0lqUmtaR1JrWkdJaUIwY21GdWMyWnZjbTA5SW5SeVlXNXpiR0YwWlNneU1DNHdNREF3TURBc0lESXdMakF3TURBd01Da2djMk5oYkdVb01Td2dMVEVwSUhSeVlXNXpiR0YwWlNndE1qQXVNREF3TURBd0xDQXRNakF1TURBd01EQXdLU0FpUGp3dmNHRjBhRDRLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBOEwyYytDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQThMMmMrQ2lBZ0lDQWdJQ0FnSUNBZ0lEd3ZaejRLSUNBZ0lDQWdJQ0E4TDJjK0NpQWdJQ0E4TDJjK0Nqd3ZjM1puUGc9PSJ9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxpPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIGkoInRyYW5zaXRpb24iLHthdHRyczp7bmFtZToiZWwtbWVzc2FnZS1mYWRlIn19LFtpKCJkaXYiLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZTplLnZpc2libGUsZXhwcmVzc2lvbjoidmlzaWJsZSJ9XSxzdGF0aWNDbGFzczoiZWwtbWVzc2FnZSIsY2xhc3M6ZS5jdXN0b21DbGFzcyxvbjp7bW91c2VlbnRlcjplLmNsZWFyVGltZXIsbW91c2VsZWF2ZTplLnN0YXJ0VGltZXJ9fSxbZS5pY29uQ2xhc3M/ZS5fZSgpOmkoImltZyIse3N0YXRpY0NsYXNzOiJlbC1tZXNzYWdlX19pbWciLGF0dHJzOntzcmM6ZS50eXBlSW1nLGFsdDoiIn19KSxpKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtbWVzc2FnZV9fZ3JvdXAiLGNsYXNzOnsiaXMtd2l0aC1pY29uIjplLmljb25DbGFzc319LFtpKCJwIixbZS5pY29uQ2xhc3M/aSgiaSIse3N0YXRpY0NsYXNzOiJlbC1tZXNzYWdlX19pY29uIixjbGFzczplLmljb25DbGFzc30pOmUuX2UoKSxlLl92KGUuX3MoZS5tZXNzYWdlKSldKSxlLnNob3dDbG9zZT9pKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtbWVzc2FnZV9fY2xvc2VCdG4gZWwtaWNvbi1jbG9zZSIsb246e2NsaWNrOmUuY2xvc2V9fSk6ZS5fZSgpXSldKV0pfSxzdGF0aWNSZW5kZXJGbnM6W119fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXQuX19lc01vZHVsZT0hMDt2YXIgcz1pKDMyNiksbz1uKHMpO28uZGVmYXVsdC5pbnN0YWxsPWZ1bmN0aW9uKGUpe2UuY29tcG9uZW50KG8uZGVmYXVsdC5uYW1lLG8uZGVmYXVsdCl9LHQuZGVmYXVsdD1vLmRlZmF1bHR9LGZ1bmN0aW9uKGUsdCxpKXt2YXIgbj1pKDUpKGkoMzI3KSxpKDMyOCksbnVsbCxudWxsKTtlLmV4cG9ydHM9bi5leHBvcnRzfSxmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0Ijt0Ll9fZXNNb2R1bGU9ITAsdC5kZWZhdWx0PXtuYW1lOiJFbEJhZGdlIixwcm9wczp7dmFsdWU6e30sbWF4Ok51bWJlcixpc0RvdDpCb29sZWFuLGhpZGRlbjpCb29sZWFufSxjb21wdXRlZDp7Y29udGVudDpmdW5jdGlvbigpe2lmKCF0aGlzLmlzRG90KXt2YXIgZT10aGlzLnZhbHVlLHQ9dGhpcy5tYXg7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlJiYibnVtYmVyIj09dHlwZW9mIHQmJnQ8ZT90KyIrIjplfX19fX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLiRjcmVhdGVFbGVtZW50LGk9ZS5fc2VsZi5fY3x8dDtyZXR1cm4gaSgiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLWJhZGdlIn0sW2UuX3QoImRlZmF1bHQiKSxpKCJ0cmFuc2l0aW9uIix7YXR0cnM6e25hbWU6ImVsLXpvb20taW4tY2VudGVyIn19LFtpKCJzdXAiLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZTohZS5oaWRkZW4mJihlLmNvbnRlbnR8fGUuaXNEb3QpLGV4cHJlc3Npb246IiFoaWRkZW4gJiYgKCBjb250ZW50IHx8IGlzRG90ICkifV0sc3RhdGljQ2xhc3M6ImVsLWJhZGdlX19jb250ZW50IixjbGFzczp7ImlzLWZpeGVkIjplLiRzbG90cy5kZWZhdWx0LCJpcy1kb3QiOmUuaXNEb3R9LGRvbVByb3BzOnt0ZXh0Q29udGVudDplLl9zKGUuY29udGVudCl9fSldKV0sMil9LHN0YXRpY1JlbmRlckZuczpbXX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5fX2VzTW9kdWxlPSEwO3ZhciBzPWkoMzMwKSxvPW4ocyk7by5kZWZhdWx0Lmluc3RhbGw9ZnVuY3Rpb24oZSl7ZS5jb21wb25lbnQoby5kZWZhdWx0Lm5hbWUsby5kZWZhdWx0KX0sdC5kZWZhdWx0PW8uZGVmYXVsdH0sZnVuY3Rpb24oZSx0LGkpe3ZhciBuPWkoNSkoaSgzMzEpLGkoMzMyKSxudWxsLG51bGwpO2UuZXhwb3J0cz1uLmV4cG9ydHN9LGZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO3QuX19lc01vZHVsZT0hMCx0LmRlZmF1bHQ9e25hbWU6IkVsQ2FyZCIscHJvcHM6WyJoZWFkZXIiLCJib2R5U3R5bGUiXX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxpPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIGkoImRpdiIse3N0YXRpY0NsYXNzOiJlbC1jYXJkIn0sW2UuJHNsb3RzLmhlYWRlcnx8ZS5oZWFkZXI/aSgiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLWNhcmRfX2hlYWRlciJ9LFtlLl90KCJoZWFkZXIiLFtlLl92KGUuX3MoZS5oZWFkZXIpKV0pXSwyKTplLl9lKCksaSgiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLWNhcmRfX2JvZHkiLHN0eWxlOmUuYm9keVN0eWxlfSxbZS5fdCgiZGVmYXVsdCIpXSwyKV0pfSxzdGF0aWNSZW5kZXJGbnM6W119fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXQuX19lc01vZHVsZT0hMDt2YXIgcz1pKDMzNCksbz1uKHMpO28uZGVmYXVsdC5pbnN0YWxsPWZ1bmN0aW9uKGUpe2UuY29tcG9uZW50KG8uZGVmYXVsdC5uYW1lLG8uZGVmYXVsdCl9LHQuZGVmYXVsdD1vLmRlZmF1bHR9LGZ1bmN0aW9uKGUsdCxpKXt2YXIgbj1pKDUpKGkoMzM1KSxpKDMzNiksbnVsbCxudWxsKTtlLmV4cG9ydHM9bi5leHBvcnRzfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3QuX19lc01vZHVsZT0hMDt2YXIgbj1pKDMwKTt0LmRlZmF1bHQ9e25hbWU6IkVsUmF0ZSIsZGF0YTpmdW5jdGlvbigpe3JldHVybntjbGFzc01hcDp7fSxjb2xvck1hcDp7fSxwb2ludGVyQXRMZWZ0SGFsZjohMSxjdXJyZW50VmFsdWU6dGhpcy52YWx1ZSxob3ZlckluZGV4Oi0xfX0scHJvcHM6e3ZhbHVlOnt0eXBlOk51bWJlcixkZWZhdWx0OjB9LGxvd1RocmVzaG9sZDp7dHlwZTpOdW1iZXIsZGVmYXVsdDoyfSxoaWdoVGhyZXNob2xkOnt0eXBlOk51bWJlcixkZWZhdWx0OjR9LG1heDp7dHlwZTpOdW1iZXIsZGVmYXVsdDo1fSxjb2xvcnM6e3R5cGU6QXJyYXksZGVmYXVsdDpmdW5jdGlvbigpe3JldHVyblsiI0Y3QkEyQSIsIiNGN0JBMkEiLCIjRjdCQTJBIl19fSx2b2lkQ29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiNDNkQxREUifSxkaXNhYmxlZFZvaWRDb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiI0VGRjJGNyJ9LGljb25DbGFzc2VzOnt0eXBlOkFycmF5LGRlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm5bImVsLWljb24tc3Rhci1vbiIsImVsLWljb24tc3Rhci1vbiIsImVsLWljb24tc3Rhci1vbiJdfX0sdm9pZEljb25DbGFzczp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiZWwtaWNvbi1zdGFyLW9mZiJ9LGRpc2FibGVkVm9pZEljb25DbGFzczp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiZWwtaWNvbi1zdGFyLW9uIn0sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxhbGxvd0hhbGY6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxzaG93VGV4dDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LHRleHRDb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIzFmMmQzZCJ9LHRleHRzOnt0eXBlOkFycmF5LGRlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm5bIuaegeW3riIsIuWkseacmyIsIuS4gOiIrCIsIua7oeaEjyIsIuaDiuWWnCJdfX0sdGV4dFRlbXBsYXRlOnt0eXBlOlN0cmluZyxkZWZhdWx0OiJ7dmFsdWV9In19LGNvbXB1dGVkOnt0ZXh0OmZ1bmN0aW9uKCl7dmFyIGU9IiI7cmV0dXJuIGU9dGhpcy5kaXNhYmxlZD90aGlzLnRleHRUZW1wbGF0ZS5yZXBsYWNlKC9ce1xzKnZhbHVlXHMqXH0vLHRoaXMudmFsdWUpOnRoaXMudGV4dHNbTWF0aC5jZWlsKHRoaXMuY3VycmVudFZhbHVlKS0xXX0sZGVjaW1hbFN0eWxlOmZ1bmN0aW9uKCl7dmFyIGU9IiI7cmV0dXJuIHRoaXMuZGlzYWJsZWQmJihlPSh0aGlzLnZhbHVlRGVjaW1hbDw1MD8wOjUwKSsiJSIpLHRoaXMuYWxsb3dIYWxmJiYoZT0iNTAlIikse2NvbG9yOnRoaXMuYWN0aXZlQ29sb3Isd2lkdGg6ZX19LHZhbHVlRGVjaW1hbDpmdW5jdGlvbigpe3JldHVybiAxMDAqdGhpcy52YWx1ZS0xMDAqTWF0aC5mbG9vcih0aGlzLnZhbHVlKX0sZGVjaW1hbEljb25DbGFzczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFZhbHVlRnJvbU1hcCh0aGlzLnZhbHVlLHRoaXMuY2xhc3NNYXApfSx2b2lkQ2xhc3M6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNhYmxlZD90aGlzLmNsYXNzTWFwLmRpc2FibGVkVm9pZENsYXNzOnRoaXMuY2xhc3NNYXAudm9pZENsYXNzfSxhY3RpdmVDbGFzczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFZhbHVlRnJvbU1hcCh0aGlzLmN1cnJlbnRWYWx1ZSx0aGlzLmNsYXNzTWFwKX0sYWN0aXZlQ29sb3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRWYWx1ZUZyb21NYXAodGhpcy5jdXJyZW50VmFsdWUsdGhpcy5jb2xvck1hcCl9LGNsYXNzZXM6ZnVuY3Rpb24oKXt2YXIgZT1bXSx0PTAsaT10aGlzLmN1cnJlbnRWYWx1ZTtmb3IodGhpcy5hbGxvd0hhbGYmJnRoaXMuY3VycmVudFZhbHVlIT09TWF0aC5mbG9vcih0aGlzLmN1cnJlbnRWYWx1ZSkmJmktLTt0PGk7dCsrKWUucHVzaCh0aGlzLmFjdGl2ZUNsYXNzKTtmb3IoO3Q8dGhpcy5tYXg7dCsrKWUucHVzaCh0aGlzLnZvaWRDbGFzcyk7cmV0dXJuIGV9fSx3YXRjaDp7dmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy4kZW1pdCgiY2hhbmdlIixlKSx0aGlzLmN1cnJlbnRWYWx1ZT1lfX0sbWV0aG9kczp7Z2V0VmFsdWVGcm9tTWFwOmZ1bmN0aW9uKGUsdCl7dmFyIGk9IiI7cmV0dXJuIGk9ZTw9dGhpcy5sb3dUaHJlc2hvbGQ/dC5sb3dDb2xvcnx8dC5sb3dDbGFzczplPj10aGlzLmhpZ2hUaHJlc2hvbGQ/dC5oaWdoQ29sb3J8fHQuaGlnaENsYXNzOnQubWVkaXVtQ29sb3J8fHQubWVkaXVtQ2xhc3N9LHNob3dEZWNpbWFsSWNvbjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmRpc2FibGVkJiZ0aGlzLnZhbHVlRGVjaW1hbD4wJiZlLTE8dGhpcy52YWx1ZSYmZT50aGlzLnZhbHVlLGk9dGhpcy5hbGxvd0hhbGYmJnRoaXMucG9pbnRlckF0TGVmdEhhbGYmJihlLS41KS50b0ZpeGVkKDEpPT09dGhpcy5jdXJyZW50VmFsdWUudG9GaXhlZCgxKTtyZXR1cm4gdHx8aX0sZ2V0SWNvblN0eWxlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZGlzYWJsZWQ/dGhpcy5jb2xvck1hcC5kaXNhYmxlZFZvaWRDb2xvcjp0aGlzLmNvbG9yTWFwLnZvaWRDb2xvcjtyZXR1cm57Y29sb3I6ZTw9dGhpcy5jdXJyZW50VmFsdWU/dGhpcy5hY3RpdmVDb2xvcjp0fX0sc2VsZWN0VmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5kaXNhYmxlZHx8KHRoaXMuYWxsb3dIYWxmJiZ0aGlzLnBvaW50ZXJBdExlZnRIYWxmP3RoaXMuJGVtaXQoImlucHV0Iix0aGlzLmN1cnJlbnRWYWx1ZSk6dGhpcy4kZW1pdCgiaW5wdXQiLGUpKX0sc2V0Q3VycmVudFZhbHVlOmZ1bmN0aW9uKGUsdCl7aWYoIXRoaXMuZGlzYWJsZWQpe2lmKHRoaXMuYWxsb3dIYWxmKXt2YXIgaT10LnRhcmdldDsoMCxuLmhhc0NsYXNzKShpLCJlbC1yYXRlX19pdGVtIikmJihpPWkucXVlcnlTZWxlY3RvcigiLmVsLXJhdGVfX2ljb24iKSksKDAsbi5oYXNDbGFzcykoaSwiZWwtcmF0ZV9fZGVjaW1hbCIpJiYoaT1pLnBhcmVudE5vZGUpLHRoaXMucG9pbnRlckF0TGVmdEhhbGY9Mip0Lm9mZnNldFg8PWkuY2xpZW50V2lkdGgsdGhpcy5jdXJyZW50VmFsdWU9dGhpcy5wb2ludGVyQXRMZWZ0SGFsZj9lLS41OmV9ZWxzZSB0aGlzLmN1cnJlbnRWYWx1ZT1lO3RoaXMuaG92ZXJJbmRleD1lfX0scmVzZXRDdXJyZW50VmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmRpc2FibGVkfHwodGhpcy5hbGxvd0hhbGYmJih0aGlzLnBvaW50ZXJBdExlZnRIYWxmPXRoaXMudmFsdWUhPT1NYXRoLmZsb29yKHRoaXMudmFsdWUpKSx0aGlzLmN1cnJlbnRWYWx1ZT10aGlzLnZhbHVlLHRoaXMuaG92ZXJJbmRleD0tMSl9fSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy52YWx1ZXx8dGhpcy4kZW1pdCgiaW5wdXQiLDApLHRoaXMuY2xhc3NNYXA9e2xvd0NsYXNzOnRoaXMuaWNvbkNsYXNzZXNbMF0sbWVkaXVtQ2xhc3M6dGhpcy5pY29uQ2xhc3Nlc1sxXSxoaWdoQ2xhc3M6dGhpcy5pY29uQ2xhc3Nlc1syXSx2b2lkQ2xhc3M6dGhpcy52b2lkSWNvbkNsYXNzLGRpc2FibGVkVm9pZENsYXNzOnRoaXMuZGlzYWJsZWRWb2lkSWNvbkNsYXNzfSx0aGlzLmNvbG9yTWFwPXtsb3dDb2xvcjp0aGlzLmNvbG9yc1swXSxtZWRpdW1Db2xvcjp0aGlzLmNvbG9yc1sxXSxoaWdoQ29sb3I6dGhpcy5jb2xvcnNbMl0sdm9pZENvbG9yOnRoaXMudm9pZENvbG9yLGRpc2FibGVkVm9pZENvbG9yOnRoaXMuZGlzYWJsZWRWb2lkQ29sb3J9fX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxpPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIGkoImRpdiIse3N0YXRpY0NsYXNzOiJlbC1yYXRlIn0sW2UuX2woZS5tYXgsZnVuY3Rpb24odCl7cmV0dXJuIGkoInNwYW4iLHtzdGF0aWNDbGFzczoiZWwtcmF0ZV9faXRlbSIsc3R5bGU6e2N1cnNvcjplLmRpc2FibGVkPyJhdXRvIjoicG9pbnRlciJ9LG9uOnttb3VzZW1vdmU6ZnVuY3Rpb24oaSl7ZS5zZXRDdXJyZW50VmFsdWUodCxpKX0sbW91c2VsZWF2ZTplLnJlc2V0Q3VycmVudFZhbHVlLGNsaWNrOmZ1bmN0aW9uKGkpe2Uuc2VsZWN0VmFsdWUodCl9fX0sW2koImkiLHtzdGF0aWNDbGFzczoiZWwtcmF0ZV9faWNvbiIsY2xhc3M6W2UuY2xhc3Nlc1t0LTFdLHtob3ZlcjplLmhvdmVySW5kZXg9PT10fV0sc3R5bGU6ZS5nZXRJY29uU3R5bGUodCl9LFtlLnNob3dEZWNpbWFsSWNvbih0KT9pKCJpIix7c3RhdGljQ2xhc3M6ImVsLXJhdGVfX2RlY2ltYWwiLGNsYXNzOmUuZGVjaW1hbEljb25DbGFzcyxzdHlsZTplLmRlY2ltYWxTdHlsZX0pOmUuX2UoKV0pXSl9KSxlLnNob3dUZXh0P2koInNwYW4iLHtzdGF0aWNDbGFzczoiZWwtcmF0ZV9fdGV4dCIsc3R5bGU6e2NvbG9yOmUudGV4dENvbG9yfX0sW2UuX3YoZS5fcyhlLnRleHQpKV0pOmUuX2UoKV0sMil9LHN0YXRpY1JlbmRlckZuczpbXX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5fX2VzTW9kdWxlPSEwO3ZhciBzPWkoMzM4KSxvPW4ocyk7by5kZWZhdWx0Lmluc3RhbGw9ZnVuY3Rpb24oZSl7ZS5jb21wb25lbnQoby5kZWZhdWx0Lm5hbWUsby5kZWZhdWx0KX0sdC5kZWZhdWx0PW8uZGVmYXVsdH0sZnVuY3Rpb24oZSx0LGkpe3ZhciBuPWkoNSkoaSgzMzkpLGkoMzQwKSxudWxsLG51bGwpO2UuZXhwb3J0cz1uLmV4cG9ydHN9LGZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO3QuX19lc01vZHVsZT0hMCx0LmRlZmF1bHQ9e25hbWU6IkVsU3RlcHMiLHByb3BzOntzcGFjZTpbTnVtYmVyLFN0cmluZ10sYWN0aXZlOk51bWJlcixkaXJlY3Rpb246e3R5cGU6U3RyaW5nLGRlZmF1bHQ6Imhvcml6b250YWwifSxhbGlnbkNlbnRlcjpCb29sZWFuLGNlbnRlcjpCb29sZWFuLGZpbmlzaFN0YXR1czp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiZmluaXNoIn0scHJvY2Vzc1N0YXR1czp7dHlwZTpTdHJpbmcsZGVmYXVsdDoicHJvY2VzcyJ9fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3N0ZXBzOltdLHN0ZXBPZmZzZXQ6MH19LHdhdGNoOnthY3RpdmU6ZnVuY3Rpb24oZSx0KXt0aGlzLiRlbWl0KCJjaGFuZ2UiLGUsdCl9LHN0ZXBzOmZ1bmN0aW9uKGUpe2UuZm9yRWFjaChmdW5jdGlvbihlLHQpe2UuaW5kZXg9dH0pfX19fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuJGNyZWF0ZUVsZW1lbnQsaT1lLl9zZWxmLl9jfHx0O3JldHVybiBpKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtc3RlcHMiLGNsYXNzOlsiaXMtIitlLmRpcmVjdGlvbixlLmNlbnRlcj8iaXMtY2VudGVyIjoiIl19LFtlLl90KCJkZWZhdWx0IildLDIpfSxzdGF0aWNSZW5kZXJGbnM6W119fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXQuX19lc01vZHVsZT0hMDt2YXIgcz1pKDM0Miksbz1uKHMpO28uZGVmYXVsdC5pbnN0YWxsPWZ1bmN0aW9uKGUpe2UuY29tcG9uZW50KG8uZGVmYXVsdC5uYW1lLG8uZGVmYXVsdCl9LHQuZGVmYXVsdD1vLmRlZmF1bHR9LGZ1bmN0aW9uKGUsdCxpKXt2YXIgbj1pKDUpKGkoMzQzKSxpKDM0NCksbnVsbCxudWxsKTtlLmV4cG9ydHM9bi5leHBvcnRzfSxmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0Ijt0Ll9fZXNNb2R1bGU9ITAsdC5kZWZhdWx0PXtuYW1lOiJFbFN0ZXAiLHByb3BzOnt0aXRsZTpTdHJpbmcsaWNvbjpTdHJpbmcsZGVzY3JpcHRpb246U3RyaW5nLHN0YXR1czpTdHJpbmd9LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57aW5kZXg6LTEsc3R5bGU6e30sbGluZVN0eWxlOnt9LG1haW5PZmZzZXQ6MCxpc0xhc3Q6ITEsaW50ZXJuYWxTdGF0dXM6IiJ9fSxiZWZvcmVDcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLiRwYXJlbnQuc3RlcHMucHVzaCh0aGlzKX0sY29tcHV0ZWQ6e2N1cnJlbnRTdGF0dXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGF0dXN8fHRoaXMuaW50ZXJuYWxTdGF0dXN9fSxtZXRob2RzOnt1cGRhdGVTdGF0dXM6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy4kcGFyZW50LiRjaGlsZHJlblt0aGlzLmluZGV4LTFdO2U+dGhpcy5pbmRleD90aGlzLmludGVybmFsU3RhdHVzPXRoaXMuJHBhcmVudC5maW5pc2hTdGF0dXM6ZT09PXRoaXMuaW5kZXg/dGhpcy5pbnRlcm5hbFN0YXR1cz10aGlzLiRwYXJlbnQucHJvY2Vzc1N0YXR1czp0aGlzLmludGVybmFsU3RhdHVzPSJ3YWl0Iix0JiZ0LmNhbGNQcm9ncmVzcyh0aGlzLmludGVybmFsU3RhdHVzKX0sY2FsY1Byb2dyZXNzOmZ1bmN0aW9uKGUpe3ZhciB0PTEwMCxpPXt9O2kudHJhbnNpdGlvbkRlbGF5PTE1MCp0aGlzLmluZGV4KyJtcyIsZT09PXRoaXMuJHBhcmVudC5wcm9jZXNzU3RhdHVzP3Q9NTA6IndhaXQiPT09ZSYmKHQ9MCxpLnRyYW5zaXRpb25EZWxheT0tMTUwKnRoaXMuaW5kZXgrIm1zIiksaS5ib3JkZXJXaWR0aD10PyIxcHgiOjAsInZlcnRpY2FsIj09PXRoaXMuJHBhcmVudC5kaXJlY3Rpb24/aS5oZWlnaHQ9dCsiJSI6aS53aWR0aD10KyIlIix0aGlzLmxpbmVTdHlsZT1pfSxhZGp1c3RQb3NpdGlvbjpmdW5jdGlvbigpe3RoaXMuc3R5bGU9e30sdGhpcy4kcGFyZW50LnN0ZXBPZmZzZXQ9dGhpcy4kZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgvKHRoaXMuJHBhcmVudC5zdGVwcy5sZW5ndGgtMSl9fSxtb3VudGVkOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMuJHBhcmVudCxpPXQuY2VudGVyLG49dC5zdGVwcy5sZW5ndGgscz10aGlzLmlzTGFzdD10LnN0ZXBzW3Quc3RlcHMubGVuZ3RoLTFdPT09dGhpcyxvPSJudW1iZXIiPT10eXBlb2YgdC5zcGFjZT90LnNwYWNlKyJweCI6dC5zcGFjZT90LnNwYWNlOjEwMC8oaT9uLTE6bikrIiUiOyJob3Jpem9udGFsIj09PXQuZGlyZWN0aW9uPyh0aGlzLnN0eWxlPXt3aWR0aDpvfSx0LmFsaWduQ2VudGVyJiYodGhpcy5tYWluT2Zmc2V0PS10aGlzLiRyZWZzLnRpdGxlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoLzIrMTYrInB4IiksaSYmcyYmdGhpcy5hZGp1c3RQb3NpdGlvbigpKTpzfHwodGhpcy5zdHlsZT17aGVpZ2h0Om99KTt2YXIgYT10aGlzLiR3YXRjaCgiaW5kZXgiLGZ1bmN0aW9uKHQpe2UuJHdhdGNoKCIkcGFyZW50LmFjdGl2ZSIsZS51cGRhdGVTdGF0dXMse2ltbWVkaWF0ZTohMH0pLGEoKX0pfX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxpPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIGkoImRpdiIse3N0YXRpY0NsYXNzOiJlbC1zdGVwIixjbGFzczpbImlzLSIrZS4kcGFyZW50LmRpcmVjdGlvbl0sc3R5bGU6W2Uuc3R5bGUsZS5pc0xhc3Q/IiI6e21hcmdpblJpZ2h0Oi1lLiRwYXJlbnQuc3RlcE9mZnNldCsicHgifV19LFtpKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtc3RlcF9faGVhZCIsY2xhc3M6WyJpcy0iK2UuY3VycmVudFN0YXR1cyx7ImlzLXRleHQiOiFlLmljb259XX0sW2koImRpdiIse3N0YXRpY0NsYXNzOiJlbC1zdGVwX19saW5lIixjbGFzczpbImlzLSIrZS4kcGFyZW50LmRpcmVjdGlvbix7ImlzLWljb24iOmUuaWNvbn1dLHN0eWxlOmUuaXNMYXN0PyIiOnttYXJnaW5SaWdodDplLiRwYXJlbnQuc3RlcE9mZnNldCsicHgifX0sW2koImkiLHtzdGF0aWNDbGFzczoiZWwtc3RlcF9fbGluZS1pbm5lciIsc3R5bGU6ZS5saW5lU3R5bGV9KV0pLGkoInNwYW4iLHtzdGF0aWNDbGFzczoiZWwtc3RlcF9faWNvbiJ9LFsic3VjY2VzcyIhPT1lLmN1cnJlbnRTdGF0dXMmJiJlcnJvciIhPT1lLmN1cnJlbnRTdGF0dXM/ZS5fdCgiaWNvbiIsW2UuaWNvbj9pKCJpIix7Y2xhc3M6WyJlbC1pY29uLSIrZS5pY29uXX0pOmkoImRpdiIsW2UuX3YoZS5fcyhlLmluZGV4KzEpKV0pXSk6aSgiaSIse2NsYXNzOlsiZWwtaWNvbi0iKygic3VjY2VzcyI9PT1lLmN1cnJlbnRTdGF0dXM/ImNoZWNrIjoiY2xvc2UiKV19KV0sMildKSxpKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtc3RlcF9fbWFpbiIsc3R5bGU6e21hcmdpbkxlZnQ6ZS5tYWluT2Zmc2V0fX0sW2koImRpdiIse3JlZjoidGl0bGUiLHN0YXRpY0NsYXNzOiJlbC1zdGVwX190aXRsZSIsY2xhc3M6WyJpcy0iK2UuY3VycmVudFN0YXR1c119LFtlLl90KCJ0aXRsZSIsW2UuX3YoZS5fcyhlLnRpdGxlKSldKV0sMiksaSgiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXN0ZXBfX2Rlc2NyaXB0aW9uIixjbGFzczpbImlzLSIrZS5jdXJyZW50U3RhdHVzXX0sW2UuX3QoImRlc2NyaXB0aW9uIixbZS5fdihlLl9zKGUuZGVzY3JpcHRpb24pKV0pXSwyKV0pXSl9LHN0YXRpY1JlbmRlckZuczpbXX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5fX2VzTW9kdWxlPSEwO3ZhciBzPWkoMzQ2KSxvPW4ocyk7by5kZWZhdWx0Lmluc3RhbGw9ZnVuY3Rpb24oZSl7ZS5jb21wb25lbnQoby5kZWZhdWx0Lm5hbWUsby5kZWZhdWx0KX0sdC5kZWZhdWx0PW8uZGVmYXVsdH0sZnVuY3Rpb24oZSx0LGkpe3ZhciBuPWkoNSkoaSgzNDcpLGkoMzQ4KSxudWxsLG51bGwpO2UuZXhwb3J0cz1uLmV4cG9ydHN9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5fX2VzTW9kdWxlPSEwO3ZhciBzPWkoNDcpLG89bihzKSxhPWkoNDYpLHI9bihhKSxsPWkoNDMpO3QuZGVmYXVsdD17bmFtZToiRWxDYXJvdXNlbCIscHJvcHM6e2luaXRpYWxJbmRleDp7dHlwZTpOdW1iZXIsZGVmYXVsdDowfSxoZWlnaHQ6U3RyaW5nLHRyaWdnZXI6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6ImhvdmVyIn0sYXV0b3BsYXk6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiEwfSxpbnRlcnZhbDp7dHlwZTpOdW1iZXIsZGVmYXVsdDozZTN9LGluZGljYXRvclBvc2l0aW9uOlN0cmluZyxpbmRpY2F0b3I6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiEwfSxhcnJvdzp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiaG92ZXIifSx0eXBlOlN0cmluZ30sZGF0YTpmdW5jdGlvbigpe3JldHVybntpdGVtczpbXSxhY3RpdmVJbmRleDotMSxjb250YWluZXJXaWR0aDowLHRpbWVyOm51bGwsaG92ZXI6ITF9fSx3YXRjaDp7aXRlbXM6ZnVuY3Rpb24oZSl7ZS5sZW5ndGg+MCYmdGhpcy5zZXRBY3RpdmVJdGVtKDApfSxhY3RpdmVJbmRleDpmdW5jdGlvbihlLHQpe3RoaXMucmVzZXRJdGVtUG9zaXRpb24oKSx0aGlzLiRlbWl0KCJjaGFuZ2UiLGUsdCl9fSxtZXRob2RzOntoYW5kbGVNb3VzZUVudGVyOmZ1bmN0aW9uKCl7dGhpcy5ob3Zlcj0hMCx0aGlzLnBhdXNlVGltZXIoKX0saGFuZGxlTW91c2VMZWF2ZTpmdW5jdGlvbigpe3RoaXMuaG92ZXI9ITEsdGhpcy5zdGFydFRpbWVyKCl9LGl0ZW1JblN0YWdlOmZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpcy5pdGVtcy5sZW5ndGg7cmV0dXJuIHQ9PT1pLTEmJmUuaW5TdGFnZSYmdGhpcy5pdGVtc1swXS5hY3RpdmV8fGUuaW5TdGFnZSYmdGhpcy5pdGVtc1t0KzFdJiZ0aGlzLml0ZW1zW3QrMV0uYWN0aXZlPyJsZWZ0IjohISgwPT09dCYmZS5pblN0YWdlJiZ0aGlzLml0ZW1zW2ktMV0uYWN0aXZlfHxlLmluU3RhZ2UmJnRoaXMuaXRlbXNbdC0xXSYmdGhpcy5pdGVtc1t0LTFdLmFjdGl2ZSkmJiJyaWdodCJ9LGhhbmRsZUJ1dHRvbkVudGVyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dGhpcy5pdGVtcy5mb3JFYWNoKGZ1bmN0aW9uKGksbil7ZT09PXQuaXRlbUluU3RhZ2UoaSxuKSYmKGkuaG92ZXI9ITApfSl9LGhhbmRsZUJ1dHRvbkxlYXZlOmZ1bmN0aW9uKCl7dGhpcy5pdGVtcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuaG92ZXI9ITF9KX0sdXBkYXRlSXRlbXM6ZnVuY3Rpb24oKXt0aGlzLml0ZW1zPXRoaXMuJGNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4iRWxDYXJvdXNlbEl0ZW0iPT09ZS4kb3B0aW9ucy5uYW1lfSl9LHJlc2V0SXRlbVBvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLml0ZW1zLmZvckVhY2goZnVuY3Rpb24odCxpKXt0LnRyYW5zbGF0ZUl0ZW0oaSxlLmFjdGl2ZUluZGV4KX0pfSxwbGF5U2xpZGVzOmZ1bmN0aW9uKCl7dGhpcy5hY3RpdmVJbmRleDx0aGlzLml0ZW1zLmxlbmd0aC0xP3RoaXMuYWN0aXZlSW5kZXgrKzp0aGlzLmFjdGl2ZUluZGV4PTB9LHBhdXNlVGltZXI6ZnVuY3Rpb24oKXtjbGVhckludGVydmFsKHRoaXMudGltZXIpfSxzdGFydFRpbWVyOmZ1bmN0aW9uKCl7dGhpcy5pbnRlcnZhbDw9MHx8IXRoaXMuYXV0b3BsYXl8fCh0aGlzLnRpbWVyPXNldEludGVydmFsKHRoaXMucGxheVNsaWRlcyx0aGlzLmludGVydmFsKSl9LHNldEFjdGl2ZUl0ZW06ZnVuY3Rpb24oZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXt2YXIgdD10aGlzLml0ZW1zLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5uYW1lPT09ZX0pO3QubGVuZ3RoPjAmJihlPXRoaXMuaXRlbXMuaW5kZXhPZih0WzBdKSl9aWYoZT1OdW1iZXIoZSksIWlzTmFOKGUpJiZlPT09TWF0aC5mbG9vcihlKSl7dmFyIGk9dGhpcy5pdGVtcy5sZW5ndGg7ZTwwP3RoaXMuYWN0aXZlSW5kZXg9aS0xOmU+PWk/dGhpcy5hY3RpdmVJbmRleD0wOnRoaXMuYWN0aXZlSW5kZXg9ZX19LHByZXY6ZnVuY3Rpb24oKXt0aGlzLnNldEFjdGl2ZUl0ZW0odGhpcy5hY3RpdmVJbmRleC0xKX0sbmV4dDpmdW5jdGlvbigpe3RoaXMuc2V0QWN0aXZlSXRlbSh0aGlzLmFjdGl2ZUluZGV4KzEpfSxoYW5kbGVJbmRpY2F0b3JDbGljazpmdW5jdGlvbihlKXt0aGlzLmFjdGl2ZUluZGV4PWV9LGhhbmRsZUluZGljYXRvckhvdmVyOmZ1bmN0aW9uKGUpeyJob3ZlciI9PT10aGlzLnRyaWdnZXImJmUhPT10aGlzLmFjdGl2ZUluZGV4JiYodGhpcy5hY3RpdmVJbmRleD1lKX19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuaGFuZGxlSXRlbUNoYW5nZT0oMCxyLmRlZmF1bHQpKDEwMCx0aGlzLnVwZGF0ZUl0ZW1zKSx0aGlzLnRocm90dGxlZEFycm93Q2xpY2s9KDAsby5kZWZhdWx0KSgzMDAsITAsZnVuY3Rpb24odCl7ZS5zZXRBY3RpdmVJdGVtKHQpfSksdGhpcy50aHJvdHRsZWRJbmRpY2F0b3JIb3Zlcj0oMCxvLmRlZmF1bHQpKDMwMCxmdW5jdGlvbih0KXtlLmhhbmRsZUluZGljYXRvckhvdmVyKHQpfSl9LG1vdW50ZWQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMudXBkYXRlSXRlbXMoKSx0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpeygwLGwuYWRkUmVzaXplTGlzdGVuZXIpKGUuJGVsLGUucmVzZXRJdGVtUG9zaXRpb24pLGUuaW5pdGlhbEluZGV4PGUuaXRlbXMubGVuZ3RoJiZlLmluaXRpYWxJbmRleD49MCYmKGUuYWN0aXZlSW5kZXg9ZS5pbml0aWFsSW5kZXgpLGUuc3RhcnRUaW1lcigpfSl9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLiRlbCYmKDAsbC5yZW1vdmVSZXNpemVMaXN0ZW5lcikodGhpcy4kZWwsdGhpcy5yZXNldEl0ZW1Qb3NpdGlvbil9fX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLiRjcmVhdGVFbGVtZW50LGk9ZS5fc2VsZi5fY3x8dDtyZXR1cm4gaSgiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLWNhcm91c2VsIixjbGFzczp7ImVsLWNhcm91c2VsLS1jYXJkIjoiY2FyZCI9PT1lLnR5cGV9LG9uOnttb3VzZWVudGVyOmZ1bmN0aW9uKHQpe3Quc3RvcFByb3BhZ2F0aW9uKCksZS5oYW5kbGVNb3VzZUVudGVyKHQpfSxtb3VzZWxlYXZlOmZ1bmN0aW9uKHQpe3Quc3RvcFByb3BhZ2F0aW9uKCksZS5oYW5kbGVNb3VzZUxlYXZlKHQpfX19LFtpKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtY2Fyb3VzZWxfX2NvbnRhaW5lciIsc3R5bGU6e2hlaWdodDplLmhlaWdodH19LFtpKCJ0cmFuc2l0aW9uIix7YXR0cnM6e25hbWU6ImNhcm91c2VsLWFycm93LWxlZnQifX0sWyJuZXZlciIhPT1lLmFycm93P2koImJ1dHRvbiIse2RpcmVjdGl2ZXM6W3tuYW1lOiJzaG93IixyYXdOYW1lOiJ2LXNob3ciLHZhbHVlOiJhbHdheXMiPT09ZS5hcnJvd3x8ZS5ob3ZlcixleHByZXNzaW9uOiJhcnJvdyA9PT0gJ2Fsd2F5cycgfHwgaG92ZXIifV0sc3RhdGljQ2xhc3M6ImVsLWNhcm91c2VsX19hcnJvdyBlbC1jYXJvdXNlbF9fYXJyb3ctLWxlZnQiLG9uOnttb3VzZWVudGVyOmZ1bmN0aW9uKHQpe2UuaGFuZGxlQnV0dG9uRW50ZXIoImxlZnQiKX0sbW91c2VsZWF2ZTplLmhhbmRsZUJ1dHRvbkxlYXZlLGNsaWNrOmZ1bmN0aW9uKHQpe3Quc3RvcFByb3BhZ2F0aW9uKCksZS50aHJvdHRsZWRBcnJvd0NsaWNrKGUuYWN0aXZlSW5kZXgtMSl9fX0sW2koImkiLHtzdGF0aWNDbGFzczoiZWwtaWNvbi1hcnJvdy1sZWZ0In0pXSk6ZS5fZSgpXSksaSgidHJhbnNpdGlvbiIse2F0dHJzOntuYW1lOiJjYXJvdXNlbC1hcnJvdy1yaWdodCJ9fSxbIm5ldmVyIiE9PWUuYXJyb3c/aSgiYnV0dG9uIix7ZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6ImFsd2F5cyI9PT1lLmFycm93fHxlLmhvdmVyLGV4cHJlc3Npb246ImFycm93ID09PSAnYWx3YXlzJyB8fCBob3ZlciJ9XSxzdGF0aWNDbGFzczoiZWwtY2Fyb3VzZWxfX2Fycm93IGVsLWNhcm91c2VsX19hcnJvdy0tcmlnaHQiLG9uOnttb3VzZWVudGVyOmZ1bmN0aW9uKHQpe2UuaGFuZGxlQnV0dG9uRW50ZXIoInJpZ2h0Iil9LG1vdXNlbGVhdmU6ZS5oYW5kbGVCdXR0b25MZWF2ZSxjbGljazpmdW5jdGlvbih0KXt0LnN0b3BQcm9wYWdhdGlvbigpLGUudGhyb3R0bGVkQXJyb3dDbGljayhlLmFjdGl2ZUluZGV4KzEpfX19LFtpKCJpIix7c3RhdGljQ2xhc3M6ImVsLWljb24tYXJyb3ctcmlnaHQifSldKTplLl9lKCldKSxlLl90KCJkZWZhdWx0IildLDIpLCJub25lIiE9PWUuaW5kaWNhdG9yUG9zaXRpb24/aSgidWwiLHtzdGF0aWNDbGFzczoiZWwtY2Fyb3VzZWxfX2luZGljYXRvcnMiLGNsYXNzOnsiZWwtY2Fyb3VzZWxfX2luZGljYXRvcnMtLW91dHNpZGUiOiJvdXRzaWRlIj09PWUuaW5kaWNhdG9yUG9zaXRpb258fCJjYXJkIj09PWUudHlwZX19LGUuX2woZS5pdGVtcyxmdW5jdGlvbih0LG4pe3JldHVybiBpKCJsaSIse3N0YXRpY0NsYXNzOiJlbC1jYXJvdXNlbF9faW5kaWNhdG9yIixjbGFzczp7ImlzLWFjdGl2ZSI6bj09PWUuYWN0aXZlSW5kZXh9LG9uOnttb3VzZWVudGVyOmZ1bmN0aW9uKHQpe2UudGhyb3R0bGVkSW5kaWNhdG9ySG92ZXIobil9LGNsaWNrOmZ1bmN0aW9uKHQpe3Quc3RvcFByb3BhZ2F0aW9uKCksZS5oYW5kbGVJbmRpY2F0b3JDbGljayhuKX19fSxbaSgiYnV0dG9uIix7c3RhdGljQ2xhc3M6ImVsLWNhcm91c2VsX19idXR0b24ifSldKX0pKTplLl9lKCldKX0sc3RhdGljUmVuZGVyRm5zOltdfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX10Ll9fZXNNb2R1bGU9ITA7dmFyIHM9aSgzNTApLG89bihzKTtvLmRlZmF1bHQuaW5zdGFsbD1mdW5jdGlvbihlKXtlLmNvbXBvbmVudChvLmRlZmF1bHQubmFtZSxvLmRlZmF1bHQpfSx0LmRlZmF1bHQ9by5kZWZhdWx0fSxmdW5jdGlvbihlLHQsaSl7dmFyIG49aSg1KShpKDM1MSksaSgzNTIpLG51bGwsbnVsbCk7ZS5leHBvcnRzPW4uZXhwb3J0c30sZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7dC5fX2VzTW9kdWxlPSEwO3ZhciBpPS44Mzt0LmRlZmF1bHQ9e25hbWU6IkVsQ2Fyb3VzZWxJdGVtIixwcm9wczp7bmFtZTpTdHJpbmd9LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57aG92ZXI6ITEsdHJhbnNsYXRlOjAsc2NhbGU6MSxhY3RpdmU6ITEscmVhZHk6ITEsaW5TdGFnZTohMX19LG1ldGhvZHM6e3Byb2Nlc3NJbmRleDpmdW5jdGlvbihlLHQsaSl7cmV0dXJuIDA9PT10JiZlPT09aS0xPy0xOnQ9PT1pLTEmJjA9PT1lP2k6ZTx0LTEmJnQtZT49aS8yP2krMTplPnQrMSYmZS10Pj1pLzI/LTI6ZX0sY2FsY3VsYXRlVHJhbnNsYXRlOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy5pblN0YWdlP24qKCgyLWkpKihlLXQpKzEpLzQ6ZTx0Py0oMStpKSpuLzQ6KDMraSkqbi80fSx0cmFuc2xhdGVJdGVtOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy4kcGFyZW50LiRlbC5vZmZzZXRXaWR0aCxzPXRoaXMuJHBhcmVudC5pdGVtcy5sZW5ndGg7ZSE9PXQmJnM+MiYmKGU9dGhpcy5wcm9jZXNzSW5kZXgoZSx0LHMpKSwiY2FyZCI9PT10aGlzLiRwYXJlbnQudHlwZT8odGhpcy5pblN0YWdlPU1hdGgucm91bmQoTWF0aC5hYnMoZS10KSk8PTEsdGhpcy5hY3RpdmU9ZT09PXQsdGhpcy50cmFuc2xhdGU9dGhpcy5jYWxjdWxhdGVUcmFuc2xhdGUoZSx0LG4pLHRoaXMuc2NhbGU9dGhpcy5hY3RpdmU/MTppKToodGhpcy5hY3RpdmU9ZT09PXQsdGhpcy50cmFuc2xhdGU9biooZS10KSksdGhpcy5yZWFkeT0hMH0saGFuZGxlSXRlbUNsaWNrOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy4kcGFyZW50O2lmKGUmJiJjYXJkIj09PWUudHlwZSl7dmFyIHQ9ZS5pdGVtcy5pbmRleE9mKHRoaXMpO2Uuc2V0QWN0aXZlSXRlbSh0KX19fSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy4kcGFyZW50JiZ0aGlzLiRwYXJlbnQuaGFuZGxlSXRlbUNoYW5nZSgpfSxkZXN0cm95ZWQ6ZnVuY3Rpb24oKXt0aGlzLiRwYXJlbnQmJnRoaXMuJHBhcmVudC5oYW5kbGVJdGVtQ2hhbmdlKCl9fX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLiRjcmVhdGVFbGVtZW50LGk9ZS5fc2VsZi5fY3x8dDtyZXR1cm4gaSgiZGl2Iix7ZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6ZS5yZWFkeSxleHByZXNzaW9uOiJyZWFkeSJ9XSxzdGF0aWNDbGFzczoiZWwtY2Fyb3VzZWxfX2l0ZW0iLGNsYXNzOnsiaXMtYWN0aXZlIjplLmFjdGl2ZSwiZWwtY2Fyb3VzZWxfX2l0ZW0tLWNhcmQiOiJjYXJkIj09PWUuJHBhcmVudC50eXBlLCJpcy1pbi1zdGFnZSI6ZS5pblN0YWdlLCJpcy1ob3ZlciI6ZS5ob3Zlcn0sc3R5bGU6e21zVHJhbnNmb3JtOiJ0cmFuc2xhdGVYKCIrZS50cmFuc2xhdGUrInB4KSBzY2FsZSgiK2Uuc2NhbGUrIikiLHdlYmtpdFRyYW5zZm9ybToidHJhbnNsYXRlWCgiK2UudHJhbnNsYXRlKyJweCkgc2NhbGUoIitlLnNjYWxlKyIpIix0cmFuc2Zvcm06InRyYW5zbGF0ZVgoIitlLnRyYW5zbGF0ZSsicHgpIHNjYWxlKCIrZS5zY2FsZSsiKSJ9LG9uOntjbGljazplLmhhbmRsZUl0ZW1DbGlja319LFsiY2FyZCI9PT1lLiRwYXJlbnQudHlwZT9pKCJkaXYiLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZTohZS5hY3RpdmUsZXhwcmVzc2lvbjoiIWFjdGl2ZSJ9XSxzdGF0aWNDbGFzczoiZWwtY2Fyb3VzZWxfX21hc2sifSk6ZS5fZSgpLGUuX3QoImRlZmF1bHQiKV0sMil9LHN0YXRpY1JlbmRlckZuczpbXX19LGZ1bmN0aW9uKGUsdCxpKXsKInVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXQuX19lc01vZHVsZT0hMDt2YXIgcz1pKDM1NCksbz1uKHMpO28uZGVmYXVsdC5pbnN0YWxsPWZ1bmN0aW9uKGUpe2UuY29tcG9uZW50KG8uZGVmYXVsdC5uYW1lLG8uZGVmYXVsdCl9LHQuZGVmYXVsdD1vLmRlZmF1bHR9LGZ1bmN0aW9uKGUsdCxpKXt2YXIgbj1pKDUpKGkoMzU1KSxpKDM1NiksbnVsbCxudWxsKTtlLmV4cG9ydHM9bi5leHBvcnRzfSxmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0Ijt0Ll9fZXNNb2R1bGU9ITAsdC5kZWZhdWx0PXtuYW1lOiJFbENvbGxhcHNlIixjb21wb25lbnROYW1lOiJFbENvbGxhcHNlIixwcm9wczp7YWNjb3JkaW9uOkJvb2xlYW4sdmFsdWU6e3R5cGU6W0FycmF5LFN0cmluZyxOdW1iZXJdLGRlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm5bXX19fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2FjdGl2ZU5hbWVzOltdLmNvbmNhdCh0aGlzLnZhbHVlKX19LHdhdGNoOnt2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmFjdGl2ZU5hbWVzPVtdLmNvbmNhdChlKX19LG1ldGhvZHM6e3NldEFjdGl2ZU5hbWVzOmZ1bmN0aW9uKGUpe2U9W10uY29uY2F0KGUpO3ZhciB0PXRoaXMuYWNjb3JkaW9uP2VbMF06ZTt0aGlzLmFjdGl2ZU5hbWVzPWUsdGhpcy4kZW1pdCgiaW5wdXQiLHQpLHRoaXMuJGVtaXQoImNoYW5nZSIsdCl9LGhhbmRsZUl0ZW1DbGljazpmdW5jdGlvbihlKXtpZih0aGlzLmFjY29yZGlvbil0aGlzLnNldEFjdGl2ZU5hbWVzKCF0aGlzLmFjdGl2ZU5hbWVzWzBdJiYwIT09dGhpcy5hY3RpdmVOYW1lc1swXXx8dGhpcy5hY3RpdmVOYW1lc1swXSE9PWUubmFtZT9lLm5hbWU6IiIpO2Vsc2V7dmFyIHQ9dGhpcy5hY3RpdmVOYW1lcy5zbGljZSgwKSxpPXQuaW5kZXhPZihlLm5hbWUpO2k+LTE/dC5zcGxpY2UoaSwxKTp0LnB1c2goZS5uYW1lKSx0aGlzLnNldEFjdGl2ZU5hbWVzKHQpfX19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLiRvbigiaXRlbS1jbGljayIsdGhpcy5oYW5kbGVJdGVtQ2xpY2spfX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxpPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIGkoImRpdiIse3N0YXRpY0NsYXNzOiJlbC1jb2xsYXBzZSJ9LFtlLl90KCJkZWZhdWx0IildLDIpfSxzdGF0aWNSZW5kZXJGbnM6W119fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXQuX19lc01vZHVsZT0hMDt2YXIgcz1pKDM1OCksbz1uKHMpO28uZGVmYXVsdC5pbnN0YWxsPWZ1bmN0aW9uKGUpe2UuY29tcG9uZW50KG8uZGVmYXVsdC5uYW1lLG8uZGVmYXVsdCl9LHQuZGVmYXVsdD1vLmRlZmF1bHR9LGZ1bmN0aW9uKGUsdCxpKXt2YXIgbj1pKDUpKGkoMzU5KSxpKDM2MCksbnVsbCxudWxsKTtlLmV4cG9ydHM9bi5leHBvcnRzfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXQuX19lc01vZHVsZT0hMDt2YXIgcz1pKDExKSxvPW4ocyksYT1pKDg5KSxyPW4oYSk7dC5kZWZhdWx0PXtuYW1lOiJFbENvbGxhcHNlSXRlbSIsY29tcG9uZW50TmFtZToiRWxDb2xsYXBzZUl0ZW0iLG1peGluczpbby5kZWZhdWx0XSxjb21wb25lbnRzOntDb2xsYXBzZVRyYW5zaXRpb246ci5kZWZhdWx0fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2NvbnRlbnRXcmFwU3R5bGU6e2hlaWdodDoiYXV0byIsZGlzcGxheToiYmxvY2sifSxjb250ZW50SGVpZ2h0OjB9fSxwcm9wczp7dGl0bGU6U3RyaW5nLG5hbWU6e3R5cGU6W1N0cmluZyxOdW1iZXJdLGRlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdWlkfX19LGNvbXB1dGVkOntpc0FjdGl2ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRwYXJlbnQuYWN0aXZlTmFtZXMuaW5kZXhPZih0aGlzLm5hbWUpPi0xfX0sd2F0Y2g6e2lzQWN0aXZlOmZ1bmN0aW9uKGUpe319LG1ldGhvZHM6e2hhbmRsZUhlYWRlckNsaWNrOmZ1bmN0aW9uKCl7dGhpcy5kaXNwYXRjaCgiRWxDb2xsYXBzZSIsIml0ZW0tY2xpY2siLHRoaXMpfX0sbW91bnRlZDpmdW5jdGlvbigpe319fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuJGNyZWF0ZUVsZW1lbnQsaT1lLl9zZWxmLl9jfHx0O3JldHVybiBpKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtY29sbGFwc2UtaXRlbSIsY2xhc3M6eyJpcy1hY3RpdmUiOmUuaXNBY3RpdmV9fSxbaSgiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLWNvbGxhcHNlLWl0ZW1fX2hlYWRlciIsb246e2NsaWNrOmUuaGFuZGxlSGVhZGVyQ2xpY2t9fSxbaSgiaSIse3N0YXRpY0NsYXNzOiJlbC1jb2xsYXBzZS1pdGVtX19oZWFkZXJfX2Fycm93IGVsLWljb24tYXJyb3ctcmlnaHQifSksZS5fdCgidGl0bGUiLFtlLl92KGUuX3MoZS50aXRsZSkpXSldLDIpLGkoImNvbGxhcHNlLXRyYW5zaXRpb24iLFtpKCJkaXYiLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZTplLmlzQWN0aXZlLGV4cHJlc3Npb246ImlzQWN0aXZlIn1dLHN0YXRpY0NsYXNzOiJlbC1jb2xsYXBzZS1pdGVtX193cmFwIn0sW2koImRpdiIse3N0YXRpY0NsYXNzOiJlbC1jb2xsYXBzZS1pdGVtX19jb250ZW50In0sW2UuX3QoImRlZmF1bHQiKV0sMildKV0pXSwxKX0sc3RhdGljUmVuZGVyRm5zOltdfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX10Ll9fZXNNb2R1bGU9ITA7dmFyIHM9aSgzNjIpLG89bihzKTtvLmRlZmF1bHQuaW5zdGFsbD1mdW5jdGlvbihlKXtlLmNvbXBvbmVudChvLmRlZmF1bHQubmFtZSxvLmRlZmF1bHQpfSx0LmRlZmF1bHQ9by5kZWZhdWx0fSxmdW5jdGlvbihlLHQsaSl7dmFyIG49aSg1KShpKDM2MyksaSgzNjcpLG51bGwsbnVsbCk7ZS5leHBvcnRzPW4uZXhwb3J0c30sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX10Ll9fZXNNb2R1bGU9ITA7dmFyIHM9aSgxNSksbz1uKHMpLGE9aSgzNjQpLHI9bihhKSxsPWkoMTkpLHU9bihsKSxjPWkoMjcpLGQ9bihjKSxoPWkoNDgpLGY9bihoKSxwPWkoMTEpLG09bihwKSx2PWkoMTIpLGc9bih2KSx5PWkoMTMpLGI9aSg0NiksXz1uKGIpLEM9e3Byb3BzOntwbGFjZW1lbnQ6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6ImJvdHRvbS1zdGFydCJ9LGFwcGVuZFRvQm9keTpkLmRlZmF1bHQucHJvcHMuYXBwZW5kVG9Cb2R5LG9mZnNldDpkLmRlZmF1bHQucHJvcHMub2Zmc2V0LGJvdW5kYXJpZXNQYWRkaW5nOmQuZGVmYXVsdC5wcm9wcy5ib3VuZGFyaWVzUGFkZGluZyxwb3BwZXJPcHRpb25zOmQuZGVmYXVsdC5wcm9wcy5wb3BwZXJPcHRpb25zfSxtZXRob2RzOmQuZGVmYXVsdC5tZXRob2RzLGRhdGE6ZC5kZWZhdWx0LmRhdGEsYmVmb3JlRGVzdHJveTpkLmRlZmF1bHQuYmVmb3JlRGVzdHJveX07dC5kZWZhdWx0PXtuYW1lOiJFbENhc2NhZGVyIixkaXJlY3RpdmVzOntDbGlja291dHNpZGU6Zi5kZWZhdWx0fSxtaXhpbnM6W0MsbS5kZWZhdWx0LGcuZGVmYXVsdF0sY29tcG9uZW50czp7RWxJbnB1dDp1LmRlZmF1bHR9LHByb3BzOntvcHRpb25zOnt0eXBlOkFycmF5LHJlcXVpcmVkOiEwfSxwcm9wczp7dHlwZTpPYmplY3QsZGVmYXVsdDpmdW5jdGlvbigpe3JldHVybntjaGlsZHJlbjoiY2hpbGRyZW4iLGxhYmVsOiJsYWJlbCIsdmFsdWU6InZhbHVlIixkaXNhYmxlZDoiZGlzYWJsZWQifX19LHZhbHVlOnt0eXBlOkFycmF5LGRlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm5bXX19LHBsYWNlaG9sZGVyOnt0eXBlOlN0cmluZyxkZWZhdWx0OmZ1bmN0aW9uKCl7cmV0dXJuKDAseS50KSgiZWwuY2FzY2FkZXIucGxhY2Vob2xkZXIiKX19LGRpc2FibGVkOkJvb2xlYW4sY2xlYXJhYmxlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sY2hhbmdlT25TZWxlY3Q6Qm9vbGVhbixwb3BwZXJDbGFzczpTdHJpbmcsZXhwYW5kVHJpZ2dlcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiY2xpY2sifSxmaWx0ZXJhYmxlOkJvb2xlYW4sc2l6ZTpTdHJpbmcsc2hvd0FsbExldmVsczp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITB9LGRlYm91bmNlOnt0eXBlOk51bWJlcixkZWZhdWx0OjMwMH19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57Y3VycmVudFZhbHVlOnRoaXMudmFsdWUsbWVudTpudWxsLGRlYm91bmNlZElucHV0Q2hhbmdlOmZ1bmN0aW9uKCl7fSxtZW51VmlzaWJsZTohMSxpbnB1dEhvdmVyOiExLGlucHV0VmFsdWU6IiIsZmxhdE9wdGlvbnM6bnVsbH19LGNvbXB1dGVkOntsYWJlbEtleTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByb3BzLmxhYmVsfHwibGFiZWwifSx2YWx1ZUtleTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByb3BzLnZhbHVlfHwidmFsdWUifSxjaGlsZHJlbktleTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByb3BzLmNoaWxkcmVufHwiY2hpbGRyZW4ifSxjdXJyZW50TGFiZWxzOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMub3B0aW9ucyxpPVtdO3JldHVybiB0aGlzLmN1cnJlbnRWYWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciBzPXQmJnQuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0W2UudmFsdWVLZXldPT09bn0pWzBdO3MmJihpLnB1c2goc1tlLmxhYmVsS2V5XSksdD1zW2UuY2hpbGRyZW5LZXldKX0pLGl9fSx3YXRjaDp7bWVudVZpc2libGU6ZnVuY3Rpb24oZSl7ZT90aGlzLnNob3dNZW51KCk6dGhpcy5oaWRlTWVudSgpfSx2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmN1cnJlbnRWYWx1ZT1lfSxjdXJyZW50VmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5kaXNwYXRjaCgiRWxGb3JtSXRlbSIsImVsLmZvcm0uY2hhbmdlIixbZV0pfSxvcHRpb25zOntkZWVwOiEwLGhhbmRsZXI6ZnVuY3Rpb24oZSl7dGhpcy5tZW51fHx0aGlzLmluaXRNZW51KCksdGhpcy5mbGF0T3B0aW9ucz10aGlzLmZsYXR0ZW5PcHRpb25zKHRoaXMub3B0aW9ucyksdGhpcy5tZW51Lm9wdGlvbnM9ZX19fSxtZXRob2RzOntpbml0TWVudTpmdW5jdGlvbigpe3RoaXMubWVudT1uZXcgby5kZWZhdWx0KHIuZGVmYXVsdCkuJG1vdW50KCksdGhpcy5tZW51Lm9wdGlvbnM9dGhpcy5vcHRpb25zLHRoaXMubWVudS5wcm9wcz10aGlzLnByb3BzLHRoaXMubWVudS5leHBhbmRUcmlnZ2VyPXRoaXMuZXhwYW5kVHJpZ2dlcix0aGlzLm1lbnUuY2hhbmdlT25TZWxlY3Q9dGhpcy5jaGFuZ2VPblNlbGVjdCx0aGlzLm1lbnUucG9wcGVyQ2xhc3M9dGhpcy5wb3BwZXJDbGFzcyx0aGlzLnBvcHBlckVsbT10aGlzLm1lbnUuJGVsLHRoaXMubWVudS4kb24oInBpY2siLHRoaXMuaGFuZGxlUGljayksdGhpcy5tZW51LiRvbigiYWN0aXZlSXRlbUNoYW5nZSIsdGhpcy5oYW5kbGVBY3RpdmVJdGVtQ2hhbmdlKSx0aGlzLm1lbnUuJG9uKCJtZW51TGVhdmUiLHRoaXMuZG9EZXN0cm95KX0sc2hvd01lbnU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMubWVudXx8dGhpcy5pbml0TWVudSgpLHRoaXMubWVudS52YWx1ZT10aGlzLmN1cnJlbnRWYWx1ZS5zbGljZSgwKSx0aGlzLm1lbnUudmlzaWJsZT0hMCx0aGlzLm1lbnUub3B0aW9ucz10aGlzLm9wdGlvbnMsdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24odCl7ZS51cGRhdGVQb3BwZXIoKSxlLm1lbnUuaW5wdXRXaWR0aD1lLiRyZWZzLmlucHV0LiRlbC5vZmZzZXRXaWR0aC0yfSl9LGhpZGVNZW51OmZ1bmN0aW9uKCl7dGhpcy5pbnB1dFZhbHVlPSIiLHRoaXMubWVudS52aXNpYmxlPSExfSxoYW5kbGVBY3RpdmVJdGVtQ2hhbmdlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oZSl7dC51cGRhdGVQb3BwZXIoKX0pLHRoaXMuJGVtaXQoImFjdGl2ZS1pdGVtLWNoYW5nZSIsZSl9LGhhbmRsZVBpY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXTt0aGlzLmN1cnJlbnRWYWx1ZT1lLHRoaXMuJGVtaXQoImlucHV0IixlKSx0aGlzLiRlbWl0KCJjaGFuZ2UiLGUpLHQmJih0aGlzLm1lbnVWaXNpYmxlPSExKX0saGFuZGxlSW5wdXRDaGFuZ2U6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztpZih0aGlzLm1lbnVWaXNpYmxlKXt2YXIgaT10aGlzLmZsYXRPcHRpb25zO2lmKCFlKXJldHVybiB2b2lkKHRoaXMubWVudS5vcHRpb25zPXRoaXMub3B0aW9ucyk7dmFyIG49aS5maWx0ZXIoZnVuY3Rpb24oaSl7cmV0dXJuIGkuc29tZShmdW5jdGlvbihpKXtyZXR1cm4gbmV3IFJlZ0V4cChlLCJpIikudGVzdChpW3QubGFiZWxLZXldKX0pfSk7bj1uLmxlbmd0aD4wP24ubWFwKGZ1bmN0aW9uKGkpe3JldHVybntfX0lTX19GTEFUX19PUFRJT05TOiEwLHZhbHVlOmkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlW3QudmFsdWVLZXldfSksbGFiZWw6dC5yZW5kZXJGaWx0ZXJlZE9wdGlvbkxhYmVsKGUsaSl9fSk6W3tfX0lTX19GTEFUX19PUFRJT05TOiEwLGxhYmVsOnRoaXMudCgiZWwuY2FzY2FkZXIubm9NYXRjaCIpLHZhbHVlOiIiLGRpc2FibGVkOiEwfV0sdGhpcy5tZW51Lm9wdGlvbnM9bn19LHJlbmRlckZpbHRlcmVkT3B0aW9uTGFiZWw6ZnVuY3Rpb24oZSx0KXt2YXIgaT10aGlzO3JldHVybiB0Lm1hcChmdW5jdGlvbih0LG4pe3ZhciBzPXRbaS5sYWJlbEtleV0sbz1zLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihlLnRvTG93ZXJDYXNlKCkpLGE9cy5zbGljZShvLGUubGVuZ3RoK28pLHI9bz4tMT9pLmhpZ2hsaWdodEtleXdvcmQocyxhKTpzO3JldHVybiAwPT09bj9yOlsiIC8gIixyXX0pfSxoaWdobGlnaHRLZXl3b3JkOmZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpcyxuPXRoaXMuX2M7cmV0dXJuIGUuc3BsaXQodCkubWFwKGZ1bmN0aW9uKGUscyl7cmV0dXJuIDA9PT1zP2U6W24oInNwYW4iLHtjbGFzczp7ImVsLWNhc2NhZGVyLW1lbnVfX2l0ZW1fX2tleXdvcmQiOiEwfX0sW2kuX3YodCldKSxlXX0pfSxmbGF0dGVuT3B0aW9uczpmdW5jdGlvbihlKXt2YXIgdD10aGlzLGk9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdLG49W107cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgcz1pLmNvbmNhdChlKTtlW3QuY2hpbGRyZW5LZXldPyh0LmNoYW5nZU9uU2VsZWN0JiZuLnB1c2gocyksbj1uLmNvbmNhdCh0LmZsYXR0ZW5PcHRpb25zKGVbdC5jaGlsZHJlbktleV0scykpKTpuLnB1c2gocyl9KSxufSxjbGVhclZhbHVlOmZ1bmN0aW9uKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5oYW5kbGVQaWNrKFtdLCEwKX0saGFuZGxlQ2xpY2tvdXRzaWRlOmZ1bmN0aW9uKCl7dGhpcy5tZW51VmlzaWJsZT0hMX0saGFuZGxlQ2xpY2s6ZnVuY3Rpb24oKXtpZighdGhpcy5kaXNhYmxlZClyZXR1cm4gdGhpcy5maWx0ZXJhYmxlPyh0aGlzLm1lbnVWaXNpYmxlPSEwLHZvaWQgdGhpcy4kcmVmcy5pbnB1dC4kcmVmcy5pbnB1dC5mb2N1cygpKTp2b2lkKHRoaXMubWVudVZpc2libGU9IXRoaXMubWVudVZpc2libGUpfX0sY3JlYXRlZDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5kZWJvdW5jZWRJbnB1dENoYW5nZT0oMCxfLmRlZmF1bHQpKHRoaXMuZGVib3VuY2UsZnVuY3Rpb24odCl7ZS5oYW5kbGVJbnB1dENoYW5nZSh0KX0pfSxtb3VudGVkOmZ1bmN0aW9uKCl7dGhpcy5mbGF0T3B0aW9ucz10aGlzLmZsYXR0ZW5PcHRpb25zKHRoaXMub3B0aW9ucyl9fX0sZnVuY3Rpb24oZSx0LGkpe3ZhciBuPWkoNSkoaSgzNjUpLG51bGwsbnVsbCxudWxsKTtlLmV4cG9ydHM9bi5leHBvcnRzfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXQuX19lc01vZHVsZT0hMDt2YXIgcz1pKDM2Niksbz1uKHMpO3QuZGVmYXVsdD17bmFtZToiRWxDYXNjYWRlck1lbnUiLGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57aW5wdXRXaWR0aDowLG9wdGlvbnM6W10scHJvcHM6e30sdmlzaWJsZTohMSxhY3RpdmVWYWx1ZTpbXSx2YWx1ZTpbXSxleHBhbmRUcmlnZ2VyOiJjbGljayIsY2hhbmdlT25TZWxlY3Q6ITEscG9wcGVyQ2xhc3M6IiJ9fSx3YXRjaDp7dmlzaWJsZTpmdW5jdGlvbihlKXtlJiYodGhpcy5hY3RpdmVWYWx1ZT10aGlzLnZhbHVlKX0sdmFsdWU6e2ltbWVkaWF0ZTohMCxoYW5kbGVyOmZ1bmN0aW9uKGUpe3RoaXMuYWN0aXZlVmFsdWU9ZX19fSxjb21wdXRlZDp7YWN0aXZlT3B0aW9uczp7Y2FjaGU6ITEsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMuYWN0aXZlVmFsdWUsaT1bImxhYmVsIiwidmFsdWUiLCJjaGlsZHJlbiIsImRpc2FibGVkIl0sbj1mdW5jdGlvbiB0KG4pe24uZm9yRWFjaChmdW5jdGlvbihuKXtuLl9fSVNfX0ZMQVRfX09QVElPTlN8fChpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGk9bltlLnByb3BzW3RdfHx0XTtpJiYoblt0XT1pKX0pLEFycmF5LmlzQXJyYXkobi5jaGlsZHJlbikmJnQobi5jaGlsZHJlbikpfSl9LHM9ZnVuY3Rpb24gZShpKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W10scz1uLmxlbmd0aDtuW3NdPWk7dmFyIG89dFtzXTtyZXR1cm4gbyYmKGk9aS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWU9PT1vfSlbMF0saSYmaS5jaGlsZHJlbiYmZShpLmNoaWxkcmVuLG4pKSxufTtyZXR1cm4gbih0aGlzLm9wdGlvbnMpLHModGhpcy5vcHRpb25zKX19fSxtZXRob2RzOntzZWxlY3Q6ZnVuY3Rpb24oZSx0KXtlLl9fSVNfX0ZMQVRfX09QVElPTlM/dGhpcy5hY3RpdmVWYWx1ZT1lLnZhbHVlOnQ/dGhpcy5hY3RpdmVWYWx1ZS5zcGxpY2UodCx0aGlzLmFjdGl2ZVZhbHVlLmxlbmd0aC0xLGUudmFsdWUpOnRoaXMuYWN0aXZlVmFsdWU9W2UudmFsdWVdLHRoaXMuJGVtaXQoInBpY2siLHRoaXMuYWN0aXZlVmFsdWUpfSxoYW5kbGVNZW51TGVhdmU6ZnVuY3Rpb24oKXt0aGlzLiRlbWl0KCJtZW51TGVhdmUiKX0sYWN0aXZlSXRlbTpmdW5jdGlvbihlLHQpe3ZhciBpPXRoaXMuYWN0aXZlT3B0aW9ucy5sZW5ndGg7dGhpcy5hY3RpdmVWYWx1ZS5zcGxpY2UodCxpLGUudmFsdWUpLHRoaXMuYWN0aXZlT3B0aW9ucy5zcGxpY2UodCsxLGksZS5jaGlsZHJlbiksdGhpcy5jaGFuZ2VPblNlbGVjdD90aGlzLiRlbWl0KCJwaWNrIix0aGlzLmFjdGl2ZVZhbHVlLCExKTp0aGlzLiRlbWl0KCJhY3RpdmVJdGVtQ2hhbmdlIix0aGlzLmFjdGl2ZVZhbHVlKX19LHJlbmRlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLGk9dGhpcy5hY3RpdmVWYWx1ZSxuPXRoaXMuYWN0aXZlT3B0aW9ucyxzPXRoaXMudmlzaWJsZSxhPXRoaXMuZXhwYW5kVHJpZ2dlcixyPXRoaXMucG9wcGVyQ2xhc3MsbD10aGlzLl9sKG4sZnVuY3Rpb24obixzKXt2YXIgcj0hMSxsPXQuX2wobixmdW5jdGlvbihuKXt2YXIgbD17b246e319O2lmKG4uX19JU19fRkxBVF9fT1BUSU9OUyYmKHI9ITApLCFuLmRpc2FibGVkKWlmKG4uY2hpbGRyZW4pe3ZhciB1PXtjbGljazoiY2xpY2siLGhvdmVyOiJtb3VzZWVudGVyIn1bYV07bC5vblt1XT1mdW5jdGlvbigpe3QuYWN0aXZlSXRlbShuLHMpfX1lbHNlIGwub24uY2xpY2s9ZnVuY3Rpb24oKXt0LnNlbGVjdChuLHMpfTtyZXR1cm4gZSgibGkiLCgwLG8uZGVmYXVsdCkoW3tjbGFzczp7ImVsLWNhc2NhZGVyLW1lbnVfX2l0ZW0iOiEwLCJlbC1jYXNjYWRlci1tZW51X19pdGVtLS1leHRlbnNpYmxlIjpuLmNoaWxkcmVuLCJpcy1hY3RpdmUiOm4udmFsdWU9PT1pW3NdLCJpcy1kaXNhYmxlZCI6bi5kaXNhYmxlZH19LGxdKSxbbi5sYWJlbF0pfSksdT17fTtyZXR1cm4gciYmKHUubWluV2lkdGg9dC5pbnB1dFdpZHRoKyJweCIpLGUoInVsIix7Y2xhc3M6eyJlbC1jYXNjYWRlci1tZW51IjohMCwiZWwtY2FzY2FkZXItbWVudS0tZmxleGlibGUiOnJ9LHN0eWxlOnV9LFtsXSl9KTtyZXR1cm4gZSgidHJhbnNpdGlvbiIse2F0dHJzOntuYW1lOiJlbC16b29tLWluLXRvcCJ9LG9uOnsiYWZ0ZXItbGVhdmUiOnRoaXMuaGFuZGxlTWVudUxlYXZlfX0sW2UoImRpdiIse2RpcmVjdGl2ZXM6W3tuYW1lOiJzaG93Iix2YWx1ZTpzfV0sY2xhc3M6WyJlbC1jYXNjYWRlci1tZW51cyIscl19LFtsXSldKX19fSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIGkoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19dmFyIG49L14oYXR0cnN8cHJvcHN8b258bmF0aXZlT258Y2xhc3N8c3R5bGV8aG9vaykkLztlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVkdWNlKGZ1bmN0aW9uKGUsdCl7dmFyIHMsbyxhLHIsbDtmb3IoYSBpbiB0KWlmKHM9ZVthXSxvPXRbYV0scyYmbi50ZXN0KGEpKWlmKCJjbGFzcyI9PT1hJiYoInN0cmluZyI9PXR5cGVvZiBzJiYobD1zLGVbYV09cz17fSxzW2xdPSEwKSwic3RyaW5nIj09dHlwZW9mIG8mJihsPW8sdFthXT1vPXt9LG9bbF09ITApKSwib24iPT09YXx8Im5hdGl2ZU9uIj09PWF8fCJob29rIj09PWEpZm9yKHIgaW4gbylzW3JdPWkoc1tyXSxvW3JdKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkocykpZVthXT1zLmNvbmNhdChvKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkobykpZVthXT1bc10uY29uY2F0KG8pO2Vsc2UgZm9yKHIgaW4gbylzW3JdPW9bcl07ZWxzZSBlW2FdPXRbYV07cmV0dXJuIGV9LHt9KX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxpPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIGkoInNwYW4iLHtkaXJlY3RpdmVzOlt7bmFtZToiY2xpY2tvdXRzaWRlIixyYXdOYW1lOiJ2LWNsaWNrb3V0c2lkZSIsdmFsdWU6ZS5oYW5kbGVDbGlja291dHNpZGUsZXhwcmVzc2lvbjoiaGFuZGxlQ2xpY2tvdXRzaWRlIn1dLHJlZjoicmVmZXJlbmNlIixzdGF0aWNDbGFzczoiZWwtY2FzY2FkZXIiLGNsYXNzOlt7ImlzLW9wZW5lZCI6ZS5tZW51VmlzaWJsZSwiaXMtZGlzYWJsZWQiOmUuZGlzYWJsZWR9LGUuc2l6ZT8iZWwtY2FzY2FkZXItLSIrZS5zaXplOiIiXSxvbjp7Y2xpY2s6ZS5oYW5kbGVDbGljayxtb3VzZWVudGVyOmZ1bmN0aW9uKHQpe2UuaW5wdXRIb3Zlcj0hMH0sbW91c2VsZWF2ZTpmdW5jdGlvbih0KXtlLmlucHV0SG92ZXI9ITF9fX0sW2koImVsLWlucHV0Iix7ZGlyZWN0aXZlczpbe25hbWU6Im1vZGVsIixyYXdOYW1lOiJ2LW1vZGVsIix2YWx1ZTplLmlucHV0VmFsdWUsZXhwcmVzc2lvbjoiaW5wdXRWYWx1ZSJ9XSxyZWY6ImlucHV0IixhdHRyczp7cmVhZG9ubHk6IWUuZmlsdGVyYWJsZSxwbGFjZWhvbGRlcjplLmN1cnJlbnRMYWJlbHMubGVuZ3RoP3ZvaWQgMDplLnBsYWNlaG9sZGVyLCJ2YWxpZGF0ZS1ldmVudCI6ITEsc2l6ZTplLnNpemUsZGlzYWJsZWQ6ZS5kaXNhYmxlZH0sZG9tUHJvcHM6e3ZhbHVlOmUuaW5wdXRWYWx1ZX0sb246e2NoYW5nZTplLmRlYm91bmNlZElucHV0Q2hhbmdlLGlucHV0OmZ1bmN0aW9uKHQpe2UuaW5wdXRWYWx1ZT10fX19LFtpKCJ0ZW1wbGF0ZSIse3Nsb3Q6Imljb24ifSxbZS5jbGVhcmFibGUmJmUuaW5wdXRIb3ZlciYmZS5jdXJyZW50TGFiZWxzLmxlbmd0aD9pKCJpIix7a2V5OiIxIixzdGF0aWNDbGFzczoiZWwtaW5wdXRfX2ljb24gZWwtaWNvbi1jaXJjbGUtY2xvc2UgZWwtY2FzY2FkZXJfX2NsZWFySWNvbiIsb246e2NsaWNrOmUuY2xlYXJWYWx1ZX19KTppKCJpIix7a2V5OiIyIixzdGF0aWNDbGFzczoiZWwtaW5wdXRfX2ljb24gZWwtaWNvbi1jYXJldC1ib3R0b20iLGNsYXNzOnsiaXMtcmV2ZXJzZSI6ZS5tZW51VmlzaWJsZX19KV0pXSwyKSxpKCJzcGFuIix7ZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6IiI9PT1lLmlucHV0VmFsdWUsZXhwcmVzc2lvbjoiaW5wdXRWYWx1ZSA9PT0gJycifV0sc3RhdGljQ2xhc3M6ImVsLWNhc2NhZGVyX19sYWJlbCJ9LFtlLnNob3dBbGxMZXZlbHM/W2UuX2woZS5jdXJyZW50TGFiZWxzLGZ1bmN0aW9uKHQsbil7cmV0dXJuW2UuX3YoIlxuICAgICAgICAiK2UuX3ModCkrIlxuICAgICAgICAiKSxuPGUuY3VycmVudExhYmVscy5sZW5ndGgtMT9pKCJzcGFuIixbZS5fdigiIC8gIildKTplLl9lKCldfSldOltlLl92KCJcbiAgICAgICIrZS5fcyhlLmN1cnJlbnRMYWJlbHNbZS5jdXJyZW50TGFiZWxzLmxlbmd0aC0xXSkrIlxuICAgICIpXV0sMildLDEpfSxzdGF0aWNSZW5kZXJGbnM6W119fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXQuX19lc01vZHVsZT0hMDt2YXIgcz1pKDM2OSksbz1uKHMpO28uZGVmYXVsdC5pbnN0YWxsPWZ1bmN0aW9uKGUpe2UuY29tcG9uZW50KG8uZGVmYXVsdC5uYW1lLG8uZGVmYXVsdCl9LHQuZGVmYXVsdD1vLmRlZmF1bHR9LGZ1bmN0aW9uKGUsdCxpKXt2YXIgbj1pKDUpKGkoMzcwKSxpKDM4NSksbnVsbCxudWxsKTtlLmV4cG9ydHM9bi5leHBvcnRzfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXQuX19lc01vZHVsZT0hMDt2YXIgcz1pKDM3MSksbz1uKHMpLGE9aSgzNzIpLHI9bihhKSxsPWkoNDgpLHU9bihsKTt0LmRlZmF1bHQ9e25hbWU6IkVsQ29sb3JQaWNrZXIiLHByb3BzOnt2YWx1ZTp7dHlwZTpTdHJpbmd9LHNob3dBbHBoYTp7dHlwZTpCb29sZWFufSxjb2xvckZvcm1hdDp7dHlwZTpTdHJpbmd9fSxkaXJlY3RpdmVzOntDbGlja291dHNpZGU6dS5kZWZhdWx0fSxjb21wdXRlZDp7ZGlzcGxheWVkQ29sb3I6ZnVuY3Rpb24oKXtpZih0aGlzLnZhbHVlfHx0aGlzLnNob3dQYW5lbENvbG9yKXt2YXIgZT10aGlzLmNvbG9yLnRvUmdiKCksdD1lLnIsaT1lLmcsbj1lLmI7cmV0dXJuIHRoaXMuc2hvd0FscGhhPyJyZ2JhKCIrdCsiLCAiK2krIiwgIituKyIsICIrdGhpcy5jb2xvci5nZXQoImFscGhhIikvMTAwKyIpIjoicmdiKCIrdCsiLCAiK2krIiwgIituKyIpIn1yZXR1cm4idHJhbnNwYXJlbnQifX0sd2F0Y2g6e3ZhbHVlOmZ1bmN0aW9uKGUpe2UmJmUhPT10aGlzLmNvbG9yLnZhbHVlJiZ0aGlzLmNvbG9yLmZyb21TdHJpbmcoZSl9LGNvbG9yOntkZWVwOiEwLGhhbmRsZXI6ZnVuY3Rpb24oKXt0aGlzLnNob3dQYW5lbENvbG9yPSEwfX19LG1ldGhvZHM6e2NvbmZpcm1WYWx1ZTpmdW5jdGlvbihlKXt0aGlzLiRlbWl0KCJpbnB1dCIsdGhpcy5jb2xvci52YWx1ZSksdGhpcy4kZW1pdCgiY2hhbmdlIix0aGlzLmNvbG9yLnZhbHVlKSx0aGlzLnNob3dQaWNrZXI9ITF9LGNsZWFyVmFsdWU6ZnVuY3Rpb24oKXt0aGlzLiRlbWl0KCJpbnB1dCIsbnVsbCksdGhpcy4kZW1pdCgiY2hhbmdlIixudWxsKSx0aGlzLnNob3dQYW5lbENvbG9yPSExLHRoaXMuc2hvd1BpY2tlcj0hMSx0aGlzLnJlc2V0Q29sb3IoKX0saGlkZTpmdW5jdGlvbigpe3RoaXMuc2hvd1BpY2tlcj0hMSx0aGlzLnJlc2V0Q29sb3IoKX0scmVzZXRDb2xvcjpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24odCl7ZS52YWx1ZT9lLmNvbG9yLmZyb21TdHJpbmcoZS52YWx1ZSk6ZS5zaG93UGFuZWxDb2xvcj0hMX0pfX0sbW91bnRlZDpmdW5jdGlvbigpe3ZhciBlPXRoaXMudmFsdWU7ZSYmdGhpcy5jb2xvci5mcm9tU3RyaW5nKGUpLHRoaXMucG9wcGVyRWxtPXRoaXMuJHJlZnMuZHJvcGRvd24uJGVsfSxkYXRhOmZ1bmN0aW9uKCl7dmFyIGU9bmV3IG8uZGVmYXVsdCh7ZW5hYmxlQWxwaGE6dGhpcy5zaG93QWxwaGEsZm9ybWF0OnRoaXMuY29sb3JGb3JtYXR9KTtyZXR1cm57Y29sb3I6ZSxzaG93UGlja2VyOiExLHNob3dQYW5lbENvbG9yOiExfX0sY29tcG9uZW50czp7UGlja2VyRHJvcGRvd246ci5kZWZhdWx0fX19LGZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGkoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX10Ll9fZXNNb2R1bGU9ITA7dmFyIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LHM9ZnVuY3Rpb24oZSx0LGkpe3JldHVybltlLHQqaS8oKGU9KDItdCkqaSk8MT9lOjItZSl8fDAsZS8yXX0sbz1mdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGUmJmUuaW5kZXhPZigiLiIpIT09LTEmJjE9PT1wYXJzZUZsb2F0KGUpfSxhPWZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZSYmZS5pbmRleE9mKCIlIikhPT0tMX0scj1mdW5jdGlvbihlLHQpe28oZSkmJihlPSIxMDAlIik7dmFyIGk9YShlKTtyZXR1cm4gZT1NYXRoLm1pbih0LE1hdGgubWF4KDAscGFyc2VGbG9hdChlKSkpLGkmJihlPXBhcnNlSW50KGUqdCwxMCkvMTAwKSxNYXRoLmFicyhlLXQpPDFlLTY/MTplJXQvcGFyc2VGbG9hdCh0KX0sbD17MTA6IkEiLDExOiJCIiwxMjoiQyIsMTM6IkQiLDE0OiJFIiwxNToiRiJ9LHU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yLGk9ZS5nLG49ZS5iLHM9ZnVuY3Rpb24oZSl7ZT1NYXRoLm1pbihNYXRoLnJvdW5kKGUpLDI1NSk7dmFyIHQ9TWF0aC5mbG9vcihlLzE2KSxpPWUlMTY7cmV0dXJuIiIrKGxbdF18fHQpKyhsW2ldfHxpKX07cmV0dXJuIGlzTmFOKHQpfHxpc05hTihpKXx8aXNOYU4obik/IiI6IiMiK3ModCkrcyhpKStzKG4pfSxjPXtBOjEwLEI6MTEsQzoxMixEOjEzLEU6MTQsRjoxNX0sZD1mdW5jdGlvbihlKXtyZXR1cm4gMj09PWUubGVuZ3RoPzE2KihjW2VbMF0udG9VcHBlckNhc2UoKV18fCtlWzBdKSsoY1tlWzFdLnRvVXBwZXJDYXNlKCldfHwrZVsxXSk6Y1tlWzFdLnRvVXBwZXJDYXNlKCldfHwrZVsxXX0saD1mdW5jdGlvbihlLHQsaSl7dC89MTAwLGkvPTEwMDt2YXIgbj10LHM9TWF0aC5tYXgoaSwuMDEpLG89dm9pZCAwLGE9dm9pZCAwO3JldHVybiBpKj0yLHQqPWk8PTE/aToyLWksbio9czw9MT9zOjItcyxhPShpK3QpLzIsbz0wPT09aT8yKm4vKHMrbik6Mip0LyhpK3QpLHtoOmUsczoxMDAqbyx2OjEwMCphfX0sZj1mdW5jdGlvbihlLHQsaSl7ZT1yKGUsMjU1KSx0PXIodCwyNTUpLGk9cihpLDI1NSk7dmFyIG49TWF0aC5tYXgoZSx0LGkpLHM9TWF0aC5taW4oZSx0LGkpLG89dm9pZCAwLGE9dm9pZCAwLGw9bix1PW4tcztpZihhPTA9PT1uPzA6dS9uLG49PT1zKW89MDtlbHNle3N3aXRjaChuKXtjYXNlIGU6bz0odC1pKS91Kyh0PGk/NjowKTticmVhaztjYXNlIHQ6bz0oaS1lKS91KzI7YnJlYWs7Y2FzZSBpOm89KGUtdCkvdSs0fW8vPTZ9cmV0dXJue2g6TWF0aC5yb3VuZCgzNjAqbyksczpNYXRoLnJvdW5kKDEwMCphKSx2Ok1hdGgucm91bmQoMTAwKmwpfX0scD1mdW5jdGlvbihlLHQsaSl7ZT02KnIoZSwzNjApLHQ9cih0LDEwMCksaT1yKGksMTAwKTt2YXIgbj1NYXRoLmZsb29yKGUpLHM9ZS1uLG89aSooMS10KSxhPWkqKDEtcyp0KSxsPWkqKDEtKDEtcykqdCksdT1uJTYsYz1baSxhLG8sbyxsLGldW3VdLGQ9W2wsaSxpLGEsbyxvXVt1XSxoPVtvLG8sbCxpLGksYV1bdV07cmV0dXJue3I6TWF0aC5yb3VuZCgyNTUqYyksZzpNYXRoLnJvdW5kKDI1NSpkKSxiOk1hdGgucm91bmQoMjU1KmgpfX0sbT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7aSh0aGlzLGUpLHRoaXMuX2h1ZT0wLHRoaXMuX3NhdHVyYXRpb249MTAwLHRoaXMuX3ZhbHVlPTEwMCx0aGlzLl9hbHBoYT0xMDAsdGhpcy5lbmFibGVBbHBoYT0hMSx0aGlzLmZvcm1hdD0iaGV4Iix0aGlzLnZhbHVlPSIiLHQ9dHx8e307Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmKHRoaXNbbl09dFtuXSk7dGhpcy5kb09uQ2hhbmdlKCl9cmV0dXJuIGUucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLHQpe2lmKDEhPT1hcmd1bWVudHMubGVuZ3RofHwib2JqZWN0IiE9PSgidW5kZWZpbmVkIj09dHlwZW9mIGU/InVuZGVmaW5lZCI6bihlKSkpdGhpc1siXyIrZV09dCx0aGlzLmRvT25DaGFuZ2UoKTtlbHNlIGZvcih2YXIgaSBpbiBlKWUuaGFzT3duUHJvcGVydHkoaSkmJnRoaXMuc2V0KGksZVtpXSl9LGUucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpc1siXyIrZV19LGUucHJvdG90eXBlLnRvUmdiPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5faHVlLHRoaXMuX3NhdHVyYXRpb24sdGhpcy5fdmFsdWUpfSxlLnByb3RvdHlwZS5mcm9tU3RyaW5nPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7aWYoIWUpcmV0dXJuIHRoaXMuX2h1ZT0wLHRoaXMuX3NhdHVyYXRpb249MTAwLHRoaXMuX3ZhbHVlPTEwMCx2b2lkIHRoaXMuZG9PbkNoYW5nZSgpO3ZhciBpPWZ1bmN0aW9uKGUsaSxuKXt0Ll9odWU9ZSx0Ll9zYXR1cmF0aW9uPWksdC5fdmFsdWU9bix0LmRvT25DaGFuZ2UoKX07aWYoZS5pbmRleE9mKCJoc2wiKSE9PS0xKXt2YXIgbj1lLnJlcGxhY2UoL2hzbGF8aHNsfFwofFwpL2dtLCIiKS5zcGxpdCgvXHN8LC9nKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIiIhPT1lfSkubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ+Mj9wYXJzZUZsb2F0KGUpOnBhcnNlSW50KGUsMTApfSk7aWYoND09PW4ubGVuZ3RoJiYodGhpcy5fYWxwaGE9TWF0aC5mbG9vcigxMDAqcGFyc2VGbG9hdChuWzNdKSkpLG4ubGVuZ3RoPj0zKXt2YXIgcz1oKG5bMF0sblsxXSxuWzJdKSxvPXMuaCxhPXMucyxyPXMudjtpKG8sYSxyKX19ZWxzZSBpZihlLmluZGV4T2YoImhzdiIpIT09LTEpe3ZhciBsPWUucmVwbGFjZSgvaHN2YXxoc3Z8XCh8XCkvZ20sIiIpLnNwbGl0KC9cc3wsL2cpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4iIiE9PWV9KS5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD4yP3BhcnNlRmxvYXQoZSk6cGFyc2VJbnQoZSwxMCl9KTs0PT09bC5sZW5ndGgmJih0aGlzLl9hbHBoYT1NYXRoLmZsb29yKDEwMCpwYXJzZUZsb2F0KGxbM10pKSksbC5sZW5ndGg+PTMmJmkobFswXSxsWzFdLGxbMl0pfWVsc2UgaWYoZS5pbmRleE9mKCJyZ2IiKSE9PS0xKXt2YXIgdT1lLnJlcGxhY2UoL3JnYmF8cmdifFwofFwpL2dtLCIiKS5zcGxpdCgvXHN8LC9nKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIiIhPT1lfSkubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ+Mj9wYXJzZUZsb2F0KGUpOnBhcnNlSW50KGUsMTApfSk7aWYoND09PXUubGVuZ3RoJiYodGhpcy5fYWxwaGE9TWF0aC5mbG9vcigxMDAqcGFyc2VGbG9hdCh1WzNdKSkpLHUubGVuZ3RoPj0zKXt2YXIgYz1mKHVbMF0sdVsxXSx1WzJdKSxwPWMuaCxtPWMucyx2PWMudjtpKHAsbSx2KX19ZWxzZSBpZihlLmluZGV4T2YoIiMiKSE9PS0xKXt2YXIgZz1lLnJlcGxhY2UoIiMiLCIiKS50cmltKCkseT12b2lkIDAsYj12b2lkIDAsXz12b2lkIDA7Mz09PWcubGVuZ3RoPyh5PWQoZ1swXStnWzBdKSxiPWQoZ1sxXStnWzFdKSxfPWQoZ1syXStnWzJdKSk6Nj09PWcubGVuZ3RoJiYoeT1kKGcuc3Vic3RyaW5nKDAsMikpLGI9ZChnLnN1YnN0cmluZygyLDQpKSxfPWQoZy5zdWJzdHJpbmcoNCkpKTt2YXIgQz1mKHksYixfKSx4PUMuaCx3PUMucyxNPUMudjtpKHgsdyxNKX19LGUucHJvdG90eXBlLmRvT25DaGFuZ2U9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9odWUsdD10aGlzLl9zYXR1cmF0aW9uLGk9dGhpcy5fdmFsdWUsbj10aGlzLl9hbHBoYSxvPXRoaXMuZm9ybWF0O2lmKHRoaXMuZW5hYmxlQWxwaGEpc3dpdGNoKG8pe2Nhc2UiaHNsIjp2YXIgYT1zKGUsdC8xMDAsaS8xMDApO3RoaXMudmFsdWU9ImhzbGEoIitlKyIsICIrTWF0aC5yb3VuZCgxMDAqYVsxXSkrIiUsICIrTWF0aC5yb3VuZCgxMDAqYVsyXSkrIiUsICIrbi8xMDArIikiO2JyZWFrO2Nhc2UiaHN2Ijp0aGlzLnZhbHVlPSJoc3ZhKCIrZSsiLCAiK01hdGgucm91bmQodCkrIiUsICIrTWF0aC5yb3VuZChpKSsiJSwgIituLzEwMCsiKSI7YnJlYWs7ZGVmYXVsdDp2YXIgcj1wKGUsdCxpKSxsPXIucixjPXIuZyxkPXIuYjt0aGlzLnZhbHVlPSJyZ2JhKCIrbCsiLCAiK2MrIiwgIitkKyIsICIrbi8xMDArIikifWVsc2Ugc3dpdGNoKG8pe2Nhc2UiaHNsIjp2YXIgaD1zKGUsdC8xMDAsaS8xMDApO3RoaXMudmFsdWU9ImhzbCgiK2UrIiwgIitNYXRoLnJvdW5kKDEwMCpoWzFdKSsiJSwgIitNYXRoLnJvdW5kKDEwMCpoWzJdKSsiJSkiO2JyZWFrO2Nhc2UiaHN2Ijp0aGlzLnZhbHVlPSJoc3YoIitlKyIsICIrTWF0aC5yb3VuZCh0KSsiJSwgIitNYXRoLnJvdW5kKGkpKyIlKSI7YnJlYWs7Y2FzZSJyZ2IiOnZhciBmPXAoZSx0LGkpLG09Zi5yLHY9Zi5nLGc9Zi5iO3RoaXMudmFsdWU9InJnYigiK20rIiwgIit2KyIsICIrZysiKSI7YnJlYWs7ZGVmYXVsdDp0aGlzLnZhbHVlPXUocChlLHQsaSkpfX0sZX0oKTt0LmRlZmF1bHQ9bX0sZnVuY3Rpb24oZSx0LGkpe3ZhciBuPWkoNSkoaSgzNzMpLGkoMzg0KSxudWxsLG51bGwpO2UuZXhwb3J0cz1uLmV4cG9ydHN9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5fX2VzTW9kdWxlPSEwO3ZhciBzPWkoMzc0KSxvPW4ocyksYT1pKDM3OCkscj1uKGEpLGw9aSgzODEpLHU9bihsKSxjPWkoMjcpLGQ9bihjKSxoPWkoMTIpLGY9bihoKTt0LmRlZmF1bHQ9e25hbWU6ImVsLWNvbG9yLXBpY2tlci1kcm9wZG93biIsbWl4aW5zOltkLmRlZmF1bHQsZi5kZWZhdWx0XSxjb21wb25lbnRzOntTdlBhbmVsOm8uZGVmYXVsdCxIdWVTbGlkZXI6ci5kZWZhdWx0LEFscGhhU2xpZGVyOnUuZGVmYXVsdH0scHJvcHM6e2NvbG9yOntyZXF1aXJlZDohMH0sc2hvd0FscGhhOkJvb2xlYW59LGNvbXB1dGVkOntjdXJyZW50Q29sb3I6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLiRwYXJlbnQ7cmV0dXJuIGUudmFsdWV8fGUuc2hvd1BhbmVsQ29sb3I/ZS5jb2xvci52YWx1ZToiIn19LG1ldGhvZHM6e2NvbmZpcm1WYWx1ZTpmdW5jdGlvbigpe3RoaXMuJGVtaXQoInBpY2siKX19LG1vdW50ZWQ6ZnVuY3Rpb24oKXt0aGlzLiRwYXJlbnQucG9wcGVyRWxtPXRoaXMucG9wcGVyRWxtPXRoaXMuJGVsLHRoaXMucmVmZXJlbmNlRWxtPXRoaXMuJHBhcmVudC4kZWx9LHdhdGNoOntzaG93UG9wcGVyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7ZT09PSEwJiZ0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe3ZhciBlPXQuJHJlZnMsaT1lLnNsLG49ZS5odWUscz1lLmFscGhhO2kmJmkudXBkYXRlKCksbiYmbi51cGRhdGUoKSxzJiZzLnVwZGF0ZSgpfSl9fX19LGZ1bmN0aW9uKGUsdCxpKXt2YXIgbj1pKDUpKGkoMzc1KSxpKDM3NyksbnVsbCxudWxsKTtlLmV4cG9ydHM9bi5leHBvcnRzfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXQuX19lc01vZHVsZT0hMDt2YXIgcz1pKDM3Niksbz1uKHMpO3QuZGVmYXVsdD17bmFtZToiZWwtc2wtcGFuZWwiLHByb3BzOntjb2xvcjp7cmVxdWlyZWQ6ITB9fSx3YXRjaDp7ImNvbG9yLnZhbHVlIjpmdW5jdGlvbigpe3RoaXMudXBkYXRlKCl9fSxtZXRob2RzOnt1cGRhdGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNvbG9yLmdldCgic2F0dXJhdGlvbiIpLHQ9dGhpcy5jb2xvci5nZXQoInZhbHVlIiksaT10aGlzLiRlbCxuPWkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscz1uLndpZHRoLG89bi5oZWlnaHQ7b3x8KG89MypzLzQpLHRoaXMuY3Vyc29yTGVmdD1lKnMvMTAwLHRoaXMuY3Vyc29yVG9wPSgxMDAtdCkqby8xMDAsdGhpcy5iYWNrZ3JvdW5kPSJoc2woIit0aGlzLmNvbG9yLmdldCgiaHVlIikrIiwgMTAwJSwgNTAlKSJ9LGhhbmRsZURyYWc6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy4kZWwsaT10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49ZS5jbGllbnRYLWkubGVmdCxzPWUuY2xpZW50WS1pLnRvcDtuPU1hdGgubWF4KDAsbiksbj1NYXRoLm1pbihuLGkud2lkdGgpLHM9TWF0aC5tYXgoMCxzKSxzPU1hdGgubWluKHMsaS5oZWlnaHQpLHRoaXMuY3Vyc29yTGVmdD1uLHRoaXMuY3Vyc29yVG9wPXMsdGhpcy5jb2xvci5zZXQoe3NhdHVyYXRpb246bi9pLndpZHRoKjEwMCx2YWx1ZToxMDAtcy9pLmhlaWdodCoxMDB9KX19LG1vdW50ZWQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzOygwLG8uZGVmYXVsdCkodGhpcy4kZWwse2RyYWc6ZnVuY3Rpb24odCl7ZS5oYW5kbGVEcmFnKHQpfSxlbmQ6ZnVuY3Rpb24odCl7ZS5oYW5kbGVEcmFnKHQpfX0pLHRoaXMudXBkYXRlKCl9LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57Y3Vyc29yVG9wOjAsY3Vyc29yTGVmdDowLGJhY2tncm91bmQ6ImhzbCgwLCAxMDAlLCA1MCUpIn19fX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX10Ll9fZXNNb2R1bGU9ITAsdC5kZWZhdWx0PWZ1bmN0aW9uKGUsdCl7aWYoIW8uZGVmYXVsdC5wcm90b3R5cGUuJGlzU2VydmVyKXt2YXIgaT1mdW5jdGlvbihlKXt0LmRyYWcmJnQuZHJhZyhlKX0sbj1mdW5jdGlvbiBlKG4pe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsaSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsZSksZG9jdW1lbnQub25zZWxlY3RzdGFydD1udWxsLGRvY3VtZW50Lm9uZHJhZ3N0YXJ0PW51bGwsYT0hMSx0LmVuZCYmdC5lbmQobil9O2UuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixmdW5jdGlvbihlKXthfHwoZG9jdW1lbnQub25zZWxlY3RzdGFydD1mdW5jdGlvbigpe3JldHVybiExfSxkb2N1bWVudC5vbmRyYWdzdGFydD1mdW5jdGlvbigpe3JldHVybiExfSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLGkpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLG4pLGE9ITAsdC5zdGFydCYmdC5zdGFydChlKSl9KX19O3ZhciBzPWkoMTUpLG89bihzKSxhPSExfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuJGNyZWF0ZUVsZW1lbnQsaT1lLl9zZWxmLl9jfHx0O3JldHVybiBpKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtY29sb3Itc3ZwYW5lbCIsc3R5bGU6e2JhY2tncm91bmRDb2xvcjplLmJhY2tncm91bmR9fSxbaSgiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLWNvbG9yLXN2cGFuZWxfX3doaXRlIn0pLGkoImRpdiIse3N0YXRpY0NsYXNzOiJlbC1jb2xvci1zdnBhbmVsX19ibGFjayJ9KSxpKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtY29sb3Itc3ZwYW5lbF9fY3Vyc29yIixzdHlsZTp7dG9wOmUuY3Vyc29yVG9wKyJweCIsbGVmdDplLmN1cnNvckxlZnQrInB4In19LFtpKCJkaXYiKV0pXSl9LHN0YXRpY1JlbmRlckZuczpbXX19LGZ1bmN0aW9uKGUsdCxpKXt2YXIgbj1pKDUpKGkoMzc5KSxpKDM4MCksbnVsbCxudWxsKTtlLmV4cG9ydHM9bi5leHBvcnRzfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXQuX19lc01vZHVsZT0hMDt2YXIgcz1pKDM3Niksbz1uKHMpO3QuZGVmYXVsdD17bmFtZToiZWwtY29sb3ItaHVlLXNsaWRlciIscHJvcHM6e2NvbG9yOntyZXF1aXJlZDohMH0sdmVydGljYWw6Qm9vbGVhbn0sZGF0YTpmdW5jdGlvbigpe3JldHVybnt0aHVtYkxlZnQ6MCx0aHVtYlRvcDowfX0sd2F0Y2g6eyJjb2xvci52YWx1ZSI6ZnVuY3Rpb24oKXt0aGlzLnVwZGF0ZSgpfX0sbWV0aG9kczp7aGFuZGxlQ2xpY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy4kcmVmcy50aHVtYixpPWUudGFyZ2V0O2khPT10JiZ0aGlzLmhhbmRsZURyYWcoZSl9LGhhbmRsZURyYWc6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy4kZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaT10aGlzLiRyZWZzLnRodW1iLG49dm9pZCAwO2lmKHRoaXMudmVydGljYWwpe3ZhciBzPWUuY2xpZW50WS10LnRvcDtzPU1hdGgubWluKHMsdC5oZWlnaHQtaS5vZmZzZXRIZWlnaHQvMikscz1NYXRoLm1heChpLm9mZnNldEhlaWdodC8yLHMpLG49TWF0aC5yb3VuZCgocy1pLm9mZnNldEhlaWdodC8yKS8odC5oZWlnaHQtaS5vZmZzZXRIZWlnaHQpKjM2MCl9ZWxzZXt2YXIgbz1lLmNsaWVudFgtdC5sZWZ0O289TWF0aC5taW4obyx0LndpZHRoLWkub2Zmc2V0V2lkdGgvMiksbz1NYXRoLm1heChpLm9mZnNldFdpZHRoLzIsbyksbj1NYXRoLnJvdW5kKChvLWkub2Zmc2V0V2lkdGgvMikvKHQud2lkdGgtaS5vZmZzZXRXaWR0aCkqMzYwKX10aGlzLmNvbG9yLnNldCgiaHVlIixuKX0sZ2V0VGh1bWJMZWZ0OmZ1bmN0aW9uKCl7aWYodGhpcy52ZXJ0aWNhbClyZXR1cm4gMDt2YXIgZT10aGlzLiRlbCx0PXRoaXMuY29sb3IuZ2V0KCJodWUiKTtpZighZSlyZXR1cm4gMDt2YXIgaT10aGlzLiRyZWZzLnRodW1iO3JldHVybiBNYXRoLnJvdW5kKHQqKGUub2Zmc2V0V2lkdGgtaS5vZmZzZXRXaWR0aC8yKS8zNjApfSxnZXRUaHVtYlRvcDpmdW5jdGlvbigpe2lmKCF0aGlzLnZlcnRpY2FsKXJldHVybiAwO3ZhciBlPXRoaXMuJGVsLHQ9dGhpcy5jb2xvci5nZXQoImh1ZSIpO2lmKCFlKXJldHVybiAwO3ZhciBpPXRoaXMuJHJlZnMudGh1bWI7cmV0dXJuIE1hdGgucm91bmQodCooZS5vZmZzZXRIZWlnaHQtaS5vZmZzZXRIZWlnaHQvMikvMzYwKX0sdXBkYXRlOmZ1bmN0aW9uKCl7dGhpcy50aHVtYkxlZnQ9dGhpcy5nZXRUaHVtYkxlZnQoKSx0aGlzLnRodW1iVG9wPXRoaXMuZ2V0VGh1bWJUb3AoKX19LG1vdW50ZWQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy4kcmVmcyxpPXQuYmFyLG49dC50aHVtYixzPXtkcmFnOmZ1bmN0aW9uKHQpe2UuaGFuZGxlRHJhZyh0KX0sZW5kOmZ1bmN0aW9uKHQpe2UuaGFuZGxlRHJhZyh0KX19OygwLG8uZGVmYXVsdCkoaSxzKSwoMCxvLmRlZmF1bHQpKG4scyksdGhpcy51cGRhdGUoKX19fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuJGNyZWF0ZUVsZW1lbnQsaT1lLl9zZWxmLl9jfHx0O3JldHVybiBpKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtY29sb3ItaHVlLXNsaWRlciIsY2xhc3M6eyJpcy12ZXJ0aWNhbCI6ZS52ZXJ0aWNhbH19LFtpKCJkaXYiLHtyZWY6ImJhciIsc3RhdGljQ2xhc3M6ImVsLWNvbG9yLWh1ZS1zbGlkZXJfX2JhciIsb246e2NsaWNrOmUuaGFuZGxlQ2xpY2t9fSksaSgiZGl2Iix7cmVmOiJ0aHVtYiIsc3RhdGljQ2xhc3M6ImVsLWNvbG9yLWh1ZS1zbGlkZXJfX3RodW1iIixzdHlsZTp7bGVmdDplLnRodW1iTGVmdCsicHgiLHRvcDplLnRodW1iVG9wKyJweCJ9fSldKX0sc3RhdGljUmVuZGVyRm5zOltdfX0sZnVuY3Rpb24oZSx0LGkpe3ZhciBuPWkoNSkoaSgzODIpLGkoMzgzKSxudWxsLG51bGwpO2UuZXhwb3J0cz1uLmV4cG9ydHN9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5fX2VzTW9kdWxlPSEwO3ZhciBzPWkoMzc2KSxvPW4ocyk7dC5kZWZhdWx0PXtuYW1lOiJlbC1jb2xvci1hbHBoYS1zbGlkZXIiLHByb3BzOntjb2xvcjp7cmVxdWlyZWQ6ITB9LHZlcnRpY2FsOkJvb2xlYW59LHdhdGNoOnsiY29sb3IuX2FscGhhIjpmdW5jdGlvbigpe3RoaXMudXBkYXRlKCl9LCJjb2xvci52YWx1ZSI6ZnVuY3Rpb24oKXt0aGlzLnVwZGF0ZSgpfX0sbWV0aG9kczp7aGFuZGxlQ2xpY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy4kcmVmcy50aHVtYixpPWUudGFyZ2V0O2khPT10JiZ0aGlzLmhhbmRsZURyYWcoZSl9LGhhbmRsZURyYWc6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy4kZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaT10aGlzLiRyZWZzLnRodW1iO2lmKHRoaXMudmVydGljYWwpe3ZhciBuPWUuY2xpZW50WS10LnRvcDtuPU1hdGgubWF4KGkub2Zmc2V0SGVpZ2h0LzIsbiksbj1NYXRoLm1pbihuLHQuaGVpZ2h0LWkub2Zmc2V0SGVpZ2h0LzIpLHRoaXMuY29sb3Iuc2V0KCJhbHBoYSIsTWF0aC5yb3VuZCgobi1pLm9mZnNldEhlaWdodC8yKS8odC5oZWlnaHQtaS5vZmZzZXRIZWlnaHQpKjEwMCkpfWVsc2V7dmFyIHM9ZS5jbGllbnRYLXQubGVmdDtzPU1hdGgubWF4KGkub2Zmc2V0V2lkdGgvMixzKSxzPU1hdGgubWluKHMsdC53aWR0aC1pLm9mZnNldFdpZHRoLzIpLHRoaXMuY29sb3Iuc2V0KCJhbHBoYSIsTWF0aC5yb3VuZCgocy1pLm9mZnNldFdpZHRoLzIpLyh0LndpZHRoLWkub2Zmc2V0V2lkdGgpKjEwMCkpfX0sZ2V0VGh1bWJMZWZ0OmZ1bmN0aW9uKCl7aWYodGhpcy52ZXJ0aWNhbClyZXR1cm4gMDt2YXIgZT10aGlzLiRlbCx0PXRoaXMuY29sb3IuX2FscGhhO2lmKCFlKXJldHVybiAwO3ZhciBpPXRoaXMuJHJlZnMudGh1bWI7cmV0dXJuIE1hdGgucm91bmQodCooZS5vZmZzZXRXaWR0aC1pLm9mZnNldFdpZHRoLzIpLzEwMCl9LGdldFRodW1iVG9wOmZ1bmN0aW9uKCl7aWYoIXRoaXMudmVydGljYWwpcmV0dXJuIDA7dmFyIGU9dGhpcy4kZWwsdD10aGlzLmNvbG9yLl9hbHBoYTtpZighZSlyZXR1cm4gMDt2YXIgaT10aGlzLiRyZWZzLnRodW1iO3JldHVybiBNYXRoLnJvdW5kKHQqKGUub2Zmc2V0SGVpZ2h0LWkub2Zmc2V0SGVpZ2h0LzIpLzEwMCl9LGdldEJhY2tncm91bmQ6ZnVuY3Rpb24oKXtpZih0aGlzLmNvbG9yJiZ0aGlzLmNvbG9yLnZhbHVlKXt2YXIgZT10aGlzLmNvbG9yLnRvUmdiKCksdD1lLnIsaT1lLmcsbj1lLmI7cmV0dXJuImxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgiK3QrIiwgIitpKyIsICIrbisiLCAwKSAwJSwgcmdiYSgiK3QrIiwgIitpKyIsICIrbisiLCAxKSAxMDAlKSJ9cmV0dXJuIG51bGx9LHVwZGF0ZTpmdW5jdGlvbigpe3RoaXMudGh1bWJMZWZ0PXRoaXMuZ2V0VGh1bWJMZWZ0KCksdGhpcy50aHVtYlRvcD10aGlzLmdldFRodW1iVG9wKCksdGhpcy5iYWNrZ3JvdW5kPXRoaXMuZ2V0QmFja2dyb3VuZCgpfX0sZGF0YTpmdW5jdGlvbigpe3JldHVybnt0aHVtYkxlZnQ6MCx0aHVtYlRvcDowLGJhY2tncm91bmQ6bnVsbH19LG1vdW50ZWQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy4kcmVmcyxpPXQuYmFyLG49dC50aHVtYixzPXtkcmFnOmZ1bmN0aW9uKHQpe2UuaGFuZGxlRHJhZyh0KX0sZW5kOmZ1bmN0aW9uKHQpe2UuaGFuZGxlRHJhZyh0KX19OygwLG8uZGVmYXVsdCkoaSxzKSwoMCxvLmRlZmF1bHQpKG4scyksdGhpcy51cGRhdGUoKX19fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuJGNyZWF0ZUVsZW1lbnQsaT1lLl9zZWxmLl9jfHx0O3JldHVybiBpKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtY29sb3ItYWxwaGEtc2xpZGVyIixjbGFzczp7ImlzLXZlcnRpY2FsIjplLnZlcnRpY2FsfX0sW2koImRpdiIse3JlZjoiYmFyIixzdGF0aWNDbGFzczoiZWwtY29sb3ItYWxwaGEtc2xpZGVyX19iYXIiLHN0eWxlOntiYWNrZ3JvdW5kOmUuYmFja2dyb3VuZH0sb246e2NsaWNrOmUuaGFuZGxlQ2xpY2t9fSksaSgiZGl2Iix7cmVmOiJ0aHVtYiIsc3RhdGljQ2xhc3M6ImVsLWNvbG9yLWFscGhhLXNsaWRlcl9fdGh1bWIiLHN0eWxlOntsZWZ0OmUudGh1bWJMZWZ0KyJweCIsdG9wOmUudGh1bWJUb3ArInB4In19KV0pfSxzdGF0aWNSZW5kZXJGbnM6W119fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuJGNyZWF0ZUVsZW1lbnQsaT1lLl9zZWxmLl9jfHx0O3JldHVybiBpKCJ0cmFuc2l0aW9uIix7YXR0cnM6e25hbWU6ImVsLXpvb20taW4tdG9wIn0sb246eyJhZnRlci1sZWF2ZSI6ZS5kb0Rlc3Ryb3l9fSxbaSgiZGl2Iix7ZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6ZS5zaG93UG9wcGVyLGV4cHJlc3Npb246InNob3dQb3BwZXIifV0sc3RhdGljQ2xhc3M6ImVsLWNvbG9yLWRyb3Bkb3duIn0sW2koImRpdiIse3N0YXRpY0NsYXNzOiJlbC1jb2xvci1kcm9wZG93bl9fbWFpbi13cmFwcGVyIn0sW2koImh1ZS1zbGlkZXIiLHtyZWY6Imh1ZSIsc3RhdGljU3R5bGU6e2Zsb2F0OiJyaWdodCJ9LGF0dHJzOntjb2xvcjplLmNvbG9yLHZlcnRpY2FsOiIifX0pLGkoInN2LXBhbmVsIix7cmVmOiJzbCIsYXR0cnM6e2NvbG9yOmUuY29sb3J9fSldLDEpLGUuc2hvd0FscGhhP2koImFscGhhLXNsaWRlciIse3JlZjoiYWxwaGEiLGF0dHJzOntjb2xvcjplLmNvbG9yfX0pOmUuX2UoKSxpKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtY29sb3ItZHJvcGRvd25fX2J0bnMifSxbaSgic3BhbiIse3N0YXRpY0NsYXNzOiJlbC1jb2xvci1kcm9wZG93bl9fdmFsdWUifSxbZS5fdihlLl9zKGUuY3VycmVudENvbG9yKSldKSxpKCJhIix7c3RhdGljQ2xhc3M6ImVsLWNvbG9yLWRyb3Bkb3duX19saW5rLWJ0biIsYXR0cnM6e2hyZWY6IkphdmFTY3JpcHQ6In0sb246e2NsaWNrOmZ1bmN0aW9uKHQpe2UuJGVtaXQoImNsZWFyIil9fX0sW2UuX3YoZS5fcyhlLnQoImVsLmNvbG9ycGlja2VyLmNsZWFyIikpKV0pLGkoImJ1dHRvbiIse3N0YXRpY0NsYXNzOiJlbC1jb2xvci1kcm9wZG93bl9fYnRuIixvbjp7Y2xpY2s6ZS5jb25maXJtVmFsdWV9fSxbZS5fdihlLl9zKGUudCgiZWwuY29sb3JwaWNrZXIuY29uZmlybSIpKSldKV0pXSwxKV0pfSxzdGF0aWNSZW5kZXJGbnM6W119fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuJGNyZWF0ZUVsZW1lbnQsaT1lLl9zZWxmLl9jfHx0O3JldHVybiBpKCJkaXYiLHtkaXJlY3RpdmVzOlt7bmFtZToiY2xpY2tvdXRzaWRlIixyYXdOYW1lOiJ2LWNsaWNrb3V0c2lkZSIsdmFsdWU6ZS5oaWRlLGV4cHJlc3Npb246ImhpZGUifV0sc3RhdGljQ2xhc3M6ImVsLWNvbG9yLXBpY2tlciJ9LFtpKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtY29sb3ItcGlja2VyX190cmlnZ2VyIixvbjp7Y2xpY2s6ZnVuY3Rpb24odCl7ZS5zaG93UGlja2VyPSFlLnNob3dQaWNrZXJ9fX0sW2koInNwYW4iLHtzdGF0aWNDbGFzczoiZWwtY29sb3ItcGlja2VyX19jb2xvciIsY2xhc3M6eyJpcy1hbHBoYSI6ZS5zaG93QWxwaGF9fSxbaSgic3BhbiIse3N0YXRpY0NsYXNzOiJlbC1jb2xvci1waWNrZXJfX2NvbG9yLWlubmVyIixzdHlsZTp7YmFja2dyb3VuZENvbG9yOmUuZGlzcGxheWVkQ29sb3J9fSksZS52YWx1ZXx8ZS5zaG93UGFuZWxDb2xvcj9lLl9lKCk6aSgic3BhbiIse3N0YXRpY0NsYXNzOiJlbC1jb2xvci1waWNrZXJfX2VtcHR5IGVsLWljb24tY2xvc2UifSldKSxpKCJzcGFuIix7c3RhdGljQ2xhc3M6ImVsLWNvbG9yLXBpY2tlcl9faWNvbiBlbC1pY29uLWNhcmV0LWJvdHRvbSJ9KV0pLGkoInBpY2tlci1kcm9wZG93biIse2RpcmVjdGl2ZXM6W3tuYW1lOiJtb2RlbCIscmF3TmFtZToidi1tb2RlbCIsdmFsdWU6ZS5zaG93UGlja2VyLGV4cHJlc3Npb246InNob3dQaWNrZXIifV0scmVmOiJkcm9wZG93biIsc3RhdGljQ2xhc3M6ImVsLWNvbG9yLXBpY2tlcl9fcGFuZWwiLGF0dHJzOntjb2xvcjplLmNvbG9yLCJzaG93LWFscGhhIjplLnNob3dBbHBoYX0sZG9tUHJvcHM6e3ZhbHVlOmUuc2hvd1BpY2tlcn0sb246e3BpY2s6ZS5jb25maXJtVmFsdWUsY2xlYXI6ZS5jbGVhclZhbHVlLGlucHV0OmZ1bmN0aW9uKHQpe2Uuc2hvd1BpY2tlcj10fX19KV0sMSl9LHN0YXRpY1JlbmRlckZuczpbXX19XSl9KTs="></script>
<script src="data:application/x-javascript;base64,KGZ1bmN0aW9uKCkgew0KICAvLyBJZiB3aW5kb3cuSFRNTFdpZGdldHMgaXMgYWxyZWFkeSBkZWZpbmVkLCB0aGVuIHVzZSBpdDsgb3RoZXJ3aXNlIGNyZWF0ZSBhDQogIC8vIG5ldyBvYmplY3QuIFRoaXMgYWxsb3dzIHByZWNlZGluZyBjb2RlIHRvIHNldCBvcHRpb25zIHRoYXQgYWZmZWN0IHRoZQ0KICAvLyBpbml0aWFsaXphdGlvbiBwcm9jZXNzICh0aG91Z2ggbm9uZSBjdXJyZW50bHkgZXhpc3QpLg0KICB3aW5kb3cuSFRNTFdpZGdldHMgPSB3aW5kb3cuSFRNTFdpZGdldHMgfHwge307DQoNCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSB2aWV3ZXIgcGFuZS4gSWYgbm90LCB3ZSdyZSBpbiBhIHdlYiBicm93c2VyLg0KICB2YXIgdmlld2VyTW9kZSA9IHdpbmRvdy5IVE1MV2lkZ2V0cy52aWV3ZXJNb2RlID0NCiAgICAgIC9cYnZpZXdlcl9wYW5lPTFcYi8udGVzdCh3aW5kb3cubG9jYXRpb24pOw0KDQogIC8vIFNlZSBpZiB3ZSdyZSBydW5uaW5nIGluIFNoaW55IG1vZGUuIElmIG5vdCwgaXQncyBhIHN0YXRpYyBkb2N1bWVudC4NCiAgLy8gTm90ZSB0aGF0IHN0YXRpYyB3aWRnZXRzIGNhbiBhcHBlYXIgaW4gYm90aCBTaGlueSBhbmQgc3RhdGljIG1vZGVzLCBidXQNCiAgLy8gb2J2aW91c2x5LCBTaGlueSB3aWRnZXRzIGNhbiBvbmx5IGFwcGVhciBpbiBTaGlueSBhcHBzL2RvY3VtZW50cy4NCiAgdmFyIHNoaW55TW9kZSA9IHdpbmRvdy5IVE1MV2lkZ2V0cy5zaGlueU1vZGUgPQ0KICAgICAgdHlwZW9mKHdpbmRvdy5TaGlueSkgIT09ICJ1bmRlZmluZWQiICYmICEhd2luZG93LlNoaW55Lm91dHB1dEJpbmRpbmdzOw0KDQogIC8vIFdlIGNhbid0IGNvdW50IG9uIGpRdWVyeSBiZWluZyBhdmFpbGFibGUsIHNvIHdlIGltcGxlbWVudCBvdXIgb3duDQogIC8vIHZlcnNpb24gaWYgbmVjZXNzYXJ5Lg0KICBmdW5jdGlvbiBxdWVyeVNlbGVjdG9yQWxsKHNjb3BlLCBzZWxlY3Rvcikgew0KICAgIGlmICh0eXBlb2YoalF1ZXJ5KSAhPT0gInVuZGVmaW5lZCIgJiYgc2NvcGUgaW5zdGFuY2VvZiBqUXVlcnkpIHsNCiAgICAgIHJldHVybiBzY29wZS5maW5kKHNlbGVjdG9yKTsNCiAgICB9DQogICAgaWYgKHNjb3BlLnF1ZXJ5U2VsZWN0b3JBbGwpIHsNCiAgICAgIHJldHVybiBzY29wZS5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTsNCiAgICB9DQogIH0NCg0KICBmdW5jdGlvbiBhc0FycmF5KHZhbHVlKSB7DQogICAgaWYgKHZhbHVlID09PSBudWxsKQ0KICAgICAgcmV0dXJuIFtdOw0KICAgIGlmICgkLmlzQXJyYXkodmFsdWUpKQ0KICAgICAgcmV0dXJuIHZhbHVlOw0KICAgIHJldHVybiBbdmFsdWVdOw0KICB9DQoNCiAgLy8gSW1wbGVtZW50IGpRdWVyeSdzIGV4dGVuZA0KICBmdW5jdGlvbiBleHRlbmQodGFyZ2V0IC8qLCAuLi4gKi8pIHsNCiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7DQogICAgICByZXR1cm4gdGFyZ2V0Ow0KICAgIH0NCiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgew0KICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsNCiAgICAgIGZvciAodmFyIHByb3AgaW4gc291cmNlKSB7DQogICAgICAgIGlmIChzb3VyY2UuaGFzT3duUHJvcGVydHkocHJvcCkpIHsNCiAgICAgICAgICB0YXJnZXRbcHJvcF0gPSBzb3VyY2VbcHJvcF07DQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9DQogICAgcmV0dXJuIHRhcmdldDsNCiAgfQ0KDQogIC8vIElFOCBkb2Vzbid0IHN1cHBvcnQgQXJyYXkuZm9yRWFjaC4NCiAgZnVuY3Rpb24gZm9yRWFjaCh2YWx1ZXMsIGNhbGxiYWNrLCB0aGlzQXJnKSB7DQogICAgaWYgKHZhbHVlcy5mb3JFYWNoKSB7DQogICAgICB2YWx1ZXMuZm9yRWFjaChjYWxsYmFjaywgdGhpc0FyZyk7DQogICAgfSBlbHNlIHsNCiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdmFsdWVzW2ldLCBpLCB2YWx1ZXMpOw0KICAgICAgfQ0KICAgIH0NCiAgfQ0KDQogIC8vIFJlcGxhY2VzIHRoZSBzcGVjaWZpZWQgbWV0aG9kIHdpdGggdGhlIHJldHVybiB2YWx1ZSBvZiBmdW5jU291cmNlLg0KICAvLw0KICAvLyBOb3RlIHRoYXQgZnVuY1NvdXJjZSBzaG91bGQgbm90IEJFIHRoZSBuZXcgbWV0aG9kLCBpdCBzaG91bGQgYmUgYSBmdW5jdGlvbg0KICAvLyB0aGF0IFJFVFVSTlMgdGhlIG5ldyBtZXRob2QuIGZ1bmNTb3VyY2UgcmVjZWl2ZXMgYSBzaW5nbGUgYXJndW1lbnQgdGhhdCBpcw0KICAvLyB0aGUgb3ZlcnJpZGRlbiBtZXRob2QsIGl0IGNhbiBiZSBjYWxsZWQgZnJvbSB0aGUgbmV3IG1ldGhvZC4gVGhlIG92ZXJyaWRkZW4NCiAgLy8gbWV0aG9kIGNhbiBiZSBjYWxsZWQgbGlrZSBhIHJlZ3VsYXIgZnVuY3Rpb24sIGl0IGhhcyB0aGUgdGFyZ2V0IHBlcm1hbmVudGx5DQogIC8vIGJvdW5kIHRvIGl0IHNvICJ0aGlzIiB3aWxsIHdvcmsgY29ycmVjdGx5Lg0KICBmdW5jdGlvbiBvdmVycmlkZU1ldGhvZCh0YXJnZXQsIG1ldGhvZE5hbWUsIGZ1bmNTb3VyY2UpIHsNCiAgICB2YXIgc3VwZXJGdW5jID0gdGFyZ2V0W21ldGhvZE5hbWVdIHx8IGZ1bmN0aW9uKCkge307DQogICAgdmFyIHN1cGVyRnVuY0JvdW5kID0gZnVuY3Rpb24oKSB7DQogICAgICByZXR1cm4gc3VwZXJGdW5jLmFwcGx5KHRhcmdldCwgYXJndW1lbnRzKTsNCiAgICB9Ow0KICAgIHRhcmdldFttZXRob2ROYW1lXSA9IGZ1bmNTb3VyY2Uoc3VwZXJGdW5jQm91bmQpOw0KICB9DQoNCiAgLy8gQWRkIGEgbWV0aG9kIHRvIGRlbGVnYXRvciB0aGF0LCB3aGVuIGludm9rZWQsIGNhbGxzDQogIC8vIGRlbGVnYXRlZS5tZXRob2ROYW1lLiBJZiB0aGVyZSBpcyBubyBzdWNoIG1ldGhvZCBvbg0KICAvLyB0aGUgZGVsZWdhdGVlLCBidXQgdGhlcmUgd2FzIG9uZSBvbiBkZWxlZ2F0b3IgYmVmb3JlDQogIC8vIGRlbGVnYXRlTWV0aG9kIHdhcyBjYWxsZWQsIHRoZW4gdGhlIG9yaWdpbmFsIHZlcnNpb24NCiAgLy8gaXMgaW52b2tlZCBpbnN0ZWFkLg0KICAvLyBGb3IgZXhhbXBsZToNCiAgLy8NCiAgLy8gdmFyIGEgPSB7DQogIC8vICAgbWV0aG9kMTogZnVuY3Rpb24oKSB7IGNvbnNvbGUubG9nKCdhMScpOyB9DQogIC8vICAgbWV0aG9kMjogZnVuY3Rpb24oKSB7IGNvbnNvbGUubG9nKCdhMicpOyB9DQogIC8vIH07DQogIC8vIHZhciBiID0gew0KICAvLyAgIG1ldGhvZDE6IGZ1bmN0aW9uKCkgeyBjb25zb2xlLmxvZygnYjEnKTsgfQ0KICAvLyB9Ow0KICAvLyBkZWxlZ2F0ZU1ldGhvZChhLCBiLCAibWV0aG9kMSIpOw0KICAvLyBkZWxlZ2F0ZU1ldGhvZChhLCBiLCAibWV0aG9kMiIpOw0KICAvLyBhLm1ldGhvZDEoKTsNCiAgLy8gYS5tZXRob2QyKCk7DQogIC8vDQogIC8vIFRoZSBvdXRwdXQgd291bGQgYmUgImIxIiwgImEyIi4NCiAgZnVuY3Rpb24gZGVsZWdhdGVNZXRob2QoZGVsZWdhdG9yLCBkZWxlZ2F0ZWUsIG1ldGhvZE5hbWUpIHsNCiAgICB2YXIgaW5oZXJpdGVkID0gZGVsZWdhdG9yW21ldGhvZE5hbWVdOw0KICAgIGRlbGVnYXRvclttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkgew0KICAgICAgdmFyIHRhcmdldCA9IGRlbGVnYXRlZTsNCiAgICAgIHZhciBtZXRob2QgPSBkZWxlZ2F0ZWVbbWV0aG9kTmFtZV07DQoNCiAgICAgIC8vIFRoZSBtZXRob2QgZG9lc24ndCBleGlzdCBvbiB0aGUgZGVsZWdhdGVlLiBJbnN0ZWFkLA0KICAgICAgLy8gY2FsbCB0aGUgbWV0aG9kIG9uIHRoZSBkZWxlZ2F0b3IsIGlmIGl0IGV4aXN0cy4NCiAgICAgIGlmICghbWV0aG9kKSB7DQogICAgICAgIHRhcmdldCA9IGRlbGVnYXRvcjsNCiAgICAgICAgbWV0aG9kID0gaW5oZXJpdGVkOw0KICAgICAgfQ0KDQogICAgICBpZiAobWV0aG9kKSB7DQogICAgICAgIHJldHVybiBtZXRob2QuYXBwbHkodGFyZ2V0LCBhcmd1bWVudHMpOw0KICAgICAgfQ0KICAgIH07DQogIH0NCg0KICAvLyBJbXBsZW1lbnQgYSB2YWd1ZSBmYWNzaW1pbGllIG9mIGpRdWVyeSdzIGRhdGEgbWV0aG9kDQogIGZ1bmN0aW9uIGVsZW1lbnREYXRhKGVsLCBuYW1lLCB2YWx1ZSkgew0KICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDIpIHsNCiAgICAgIHJldHVybiBlbFsiaHRtbHdpZGdldF9kYXRhXyIgKyBuYW1lXTsNCiAgICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMykgew0KICAgICAgZWxbImh0bWx3aWRnZXRfZGF0YV8iICsgbmFtZV0gPSB2YWx1ZTsNCiAgICAgIHJldHVybiBlbDsNCiAgICB9IGVsc2Ugew0KICAgICAgdGhyb3cgbmV3IEVycm9yKCJXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzIGZvciBlbGVtZW50RGF0YTogIiArDQogICAgICAgIGFyZ3VtZW50cy5sZW5ndGgpOw0KICAgIH0NCiAgfQ0KDQogIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzQ0NjE3MC9lc2NhcGUtc3RyaW5nLWZvci11c2UtaW4tamF2YXNjcmlwdC1yZWdleA0KICBmdW5jdGlvbiBlc2NhcGVSZWdFeHAoc3RyKSB7DQogICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9bXC1cW1xdXC9ce1x9XChcKVwqXCtcP1wuXFxcXlwkXHxdL2csICJcXCQmIik7DQogIH0NCg0KICBmdW5jdGlvbiBoYXNDbGFzcyhlbCwgY2xhc3NOYW1lKSB7DQogICAgdmFyIHJlID0gbmV3IFJlZ0V4cCgiXFxiIiArIGVzY2FwZVJlZ0V4cChjbGFzc05hbWUpICsgIlxcYiIpOw0KICAgIHJldHVybiByZS50ZXN0KGVsLmNsYXNzTmFtZSk7DQogIH0NCg0KICAvLyBlbGVtZW50cyAtIGFycmF5IChvciBhcnJheS1saWtlIG9iamVjdCkgb2YgSFRNTCBlbGVtZW50cw0KICAvLyBjbGFzc05hbWUgLSBjbGFzcyBuYW1lIHRvIHRlc3QgZm9yDQogIC8vIGluY2x1ZGUgLSBpZiB0cnVlLCBvbmx5IHJldHVybiBlbGVtZW50cyB3aXRoIGdpdmVuIGNsYXNzTmFtZTsNCiAgLy8gICBpZiBmYWxzZSwgb25seSByZXR1cm4gZWxlbWVudHMgKndpdGhvdXQqIGdpdmVuIGNsYXNzTmFtZQ0KICBmdW5jdGlvbiBmaWx0ZXJCeUNsYXNzKGVsZW1lbnRzLCBjbGFzc05hbWUsIGluY2x1ZGUpIHsNCiAgICB2YXIgcmVzdWx0cyA9IFtdOw0KICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHsNCiAgICAgIGlmIChoYXNDbGFzcyhlbGVtZW50c1tpXSwgY2xhc3NOYW1lKSA9PSBpbmNsdWRlKQ0KICAgICAgICByZXN1bHRzLnB1c2goZWxlbWVudHNbaV0pOw0KICAgIH0NCiAgICByZXR1cm4gcmVzdWx0czsNCiAgfQ0KDQogIGZ1bmN0aW9uIG9uKG9iaiwgZXZlbnROYW1lLCBmdW5jKSB7DQogICAgaWYgKG9iai5hZGRFdmVudExpc3RlbmVyKSB7DQogICAgICBvYmouYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGZ1bmMsIGZhbHNlKTsNCiAgICB9IGVsc2UgaWYgKG9iai5hdHRhY2hFdmVudCkgew0KICAgICAgb2JqLmF0dGFjaEV2ZW50KGV2ZW50TmFtZSwgZnVuYyk7DQogICAgfQ0KICB9DQoNCiAgZnVuY3Rpb24gb2ZmKG9iaiwgZXZlbnROYW1lLCBmdW5jKSB7DQogICAgaWYgKG9iai5yZW1vdmVFdmVudExpc3RlbmVyKQ0KICAgICAgb2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBmdW5jLCBmYWxzZSk7DQogICAgZWxzZSBpZiAob2JqLmRldGFjaEV2ZW50KSB7DQogICAgICBvYmouZGV0YWNoRXZlbnQoZXZlbnROYW1lLCBmdW5jKTsNCiAgICB9DQogIH0NCg0KICAvLyBUcmFuc2xhdGUgYXJyYXkgb2YgdmFsdWVzIHRvIHRvcC9yaWdodC9ib3R0b20vbGVmdCwgYXMgdXN1YWwgd2l0aA0KICAvLyB0aGUgInBhZGRpbmciIENTUyBwcm9wZXJ0eQ0KICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvcGFkZGluZw0KICBmdW5jdGlvbiB1bnBhY2tQYWRkaW5nKHZhbHVlKSB7DQogICAgaWYgKHR5cGVvZih2YWx1ZSkgPT09ICJudW1iZXIiKQ0KICAgICAgdmFsdWUgPSBbdmFsdWVdOw0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDEpIHsNCiAgICAgIHJldHVybiB7dG9wOiB2YWx1ZVswXSwgcmlnaHQ6IHZhbHVlWzBdLCBib3R0b206IHZhbHVlWzBdLCBsZWZ0OiB2YWx1ZVswXX07DQogICAgfQ0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDIpIHsNCiAgICAgIHJldHVybiB7dG9wOiB2YWx1ZVswXSwgcmlnaHQ6IHZhbHVlWzFdLCBib3R0b206IHZhbHVlWzBdLCBsZWZ0OiB2YWx1ZVsxXX07DQogICAgfQ0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDMpIHsNCiAgICAgIHJldHVybiB7dG9wOiB2YWx1ZVswXSwgcmlnaHQ6IHZhbHVlWzFdLCBib3R0b206IHZhbHVlWzJdLCBsZWZ0OiB2YWx1ZVsxXX07DQogICAgfQ0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDQpIHsNCiAgICAgIHJldHVybiB7dG9wOiB2YWx1ZVswXSwgcmlnaHQ6IHZhbHVlWzFdLCBib3R0b206IHZhbHVlWzJdLCBsZWZ0OiB2YWx1ZVszXX07DQogICAgfQ0KICB9DQoNCiAgLy8gQ29udmVydCBhbiB1bnBhY2tlZCBwYWRkaW5nIG9iamVjdCB0byBhIENTUyB2YWx1ZQ0KICBmdW5jdGlvbiBwYWRkaW5nVG9Dc3MocGFkZGluZ09iaikgew0KICAgIHJldHVybiBwYWRkaW5nT2JqLnRvcCArICJweCAiICsgcGFkZGluZ09iai5yaWdodCArICJweCAiICsgcGFkZGluZ09iai5ib3R0b20gKyAicHggIiArIHBhZGRpbmdPYmoubGVmdCArICJweCI7DQogIH0NCg0KICAvLyBNYWtlcyBhIG51bWJlciBzdWl0YWJsZSBmb3IgQ1NTDQogIGZ1bmN0aW9uIHB4KHgpIHsNCiAgICBpZiAodHlwZW9mKHgpID09PSAibnVtYmVyIikNCiAgICAgIHJldHVybiB4ICsgInB4IjsNCiAgICBlbHNlDQogICAgICByZXR1cm4geDsNCiAgfQ0KDQogIC8vIFJldHJpZXZlcyBydW50aW1lIHdpZGdldCBzaXppbmcgaW5mb3JtYXRpb24gZm9yIGFuIGVsZW1lbnQuDQogIC8vIFRoZSByZXR1cm4gdmFsdWUgaXMgZWl0aGVyIG51bGwsIG9yIGFuIG9iamVjdCB3aXRoIGZpbGwsIHBhZGRpbmcsDQogIC8vIGRlZmF1bHRXaWR0aCwgZGVmYXVsdEhlaWdodCBmaWVsZHMuDQogIGZ1bmN0aW9uIHNpemluZ1BvbGljeShlbCkgew0KICAgIHZhciBzaXppbmdFbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInNjcmlwdFtkYXRhLWZvcj0nIiArIGVsLmlkICsgIiddW3R5cGU9J2FwcGxpY2F0aW9uL2h0bWx3aWRnZXQtc2l6aW5nJ10iKTsNCiAgICBpZiAoIXNpemluZ0VsKQ0KICAgICAgcmV0dXJuIG51bGw7DQogICAgdmFyIHNwID0gSlNPTi5wYXJzZShzaXppbmdFbC50ZXh0Q29udGVudCB8fCBzaXppbmdFbC50ZXh0IHx8ICJ7fSIpOw0KICAgIGlmICh2aWV3ZXJNb2RlKSB7DQogICAgICByZXR1cm4gc3Audmlld2VyOw0KICAgIH0gZWxzZSB7DQogICAgICByZXR1cm4gc3AuYnJvd3NlcjsNCiAgICB9DQogIH0NCg0KICAvLyBAcGFyYW0gdGFza3MgQXJyYXkgb2Ygc3RyaW5ncyAob3IgZmFsc3kgdmFsdWUsIGluIHdoaWNoIGNhc2Ugbm8tb3ApLg0KICAvLyAgIEVhY2ggZWxlbWVudCBtdXN0IGJlIGEgdmFsaWQgSmF2YVNjcmlwdCBleHByZXNzaW9uIHRoYXQgeWllbGRzIGENCiAgLy8gICBmdW5jdGlvbi4gT3IsIGNhbiBiZSBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGggImNvZGUiIGFuZCAiZGF0YSINCiAgLy8gICBwcm9wZXJ0aWVzOyBpbiB0aGlzIGNhc2UsIHRoZSAiY29kZSIgcHJvcGVydHkgc2hvdWxkIGJlIGEgc3RyaW5nDQogIC8vICAgb2YgSlMgdGhhdCdzIGFuIGV4cHIgdGhhdCB5aWVsZHMgYSBmdW5jdGlvbiwgYW5kICJkYXRhIiBzaG91bGQgYmUNCiAgLy8gICBhbiBvYmplY3QgdGhhdCB3aWxsIGJlIGFkZGVkIGFzIGFuIGFkZGl0aW9uYWwgYXJndW1lbnQgd2hlbiB0aGF0DQogIC8vICAgZnVuY3Rpb24gaXMgY2FsbGVkLg0KICAvLyBAcGFyYW0gdGFyZ2V0IFRoZSBvYmplY3QgdGhhdCB3aWxsIGJlICJ0aGlzIiBmb3IgZWFjaCBmdW5jdGlvbg0KICAvLyAgIGV4ZWN1dGlvbi4NCiAgLy8gQHBhcmFtIGFyZ3MgQXJyYXkgb2YgYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb25zLiAoVGhlDQogIC8vICAgc2FtZSBhcmd1bWVudHMgd2lsbCBiZSBwYXNzZWQgdG8gYWxsIGZ1bmN0aW9ucy4pDQogIGZ1bmN0aW9uIGV2YWxBbmRSdW4odGFza3MsIHRhcmdldCwgYXJncykgew0KICAgIGlmICh0YXNrcykgew0KICAgICAgZm9yRWFjaCh0YXNrcywgZnVuY3Rpb24odGFzaykgew0KICAgICAgICB2YXIgdGhlc2VBcmdzID0gYXJnczsNCiAgICAgICAgaWYgKHR5cGVvZih0YXNrKSA9PT0gIm9iamVjdCIpIHsNCiAgICAgICAgICB0aGVzZUFyZ3MgPSB0aGVzZUFyZ3MuY29uY2F0KFt0YXNrLmRhdGFdKTsNCiAgICAgICAgICB0YXNrID0gdGFzay5jb2RlOw0KICAgICAgICB9DQogICAgICAgIHZhciB0YXNrRnVuYyA9IGV2YWwoIigiICsgdGFzayArICIpIik7DQogICAgICAgIGlmICh0eXBlb2YodGFza0Z1bmMpICE9PSAiZnVuY3Rpb24iKSB7DQogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUYXNrIG11c3QgYmUgYSBmdW5jdGlvbiEgU291cmNlOlxuIiArIHRhc2spOw0KICAgICAgICB9DQogICAgICAgIHRhc2tGdW5jLmFwcGx5KHRhcmdldCwgdGhlc2VBcmdzKTsNCiAgICAgIH0pOw0KICAgIH0NCiAgfQ0KDQogIGZ1bmN0aW9uIGluaXRTaXppbmcoZWwpIHsNCiAgICB2YXIgc2l6aW5nID0gc2l6aW5nUG9saWN5KGVsKTsNCiAgICBpZiAoIXNpemluZykNCiAgICAgIHJldHVybjsNCg0KICAgIHZhciBjZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaHRtbHdpZGdldF9jb250YWluZXIiKTsNCiAgICBpZiAoIWNlbCkNCiAgICAgIHJldHVybjsNCg0KICAgIGlmICh0eXBlb2Yoc2l6aW5nLnBhZGRpbmcpICE9PSAidW5kZWZpbmVkIikgew0KICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5tYXJnaW4gPSAiMCI7DQogICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmcgPSBwYWRkaW5nVG9Dc3ModW5wYWNrUGFkZGluZyhzaXppbmcucGFkZGluZykpOw0KICAgIH0NCg0KICAgIGlmIChzaXppbmcuZmlsbCkgew0KICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9ICJoaWRkZW4iOw0KICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS53aWR0aCA9ICIxMDAlIjsNCiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuaGVpZ2h0ID0gIjEwMCUiOw0KICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLndpZHRoID0gIjEwMCUiOw0KICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLmhlaWdodCA9ICIxMDAlIjsNCiAgICAgIGlmIChjZWwpIHsNCiAgICAgICAgY2VsLnN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsNCiAgICAgICAgdmFyIHBhZCA9IHVucGFja1BhZGRpbmcoc2l6aW5nLnBhZGRpbmcpOw0KICAgICAgICBjZWwuc3R5bGUudG9wID0gcGFkLnRvcCArICJweCI7DQogICAgICAgIGNlbC5zdHlsZS5yaWdodCA9IHBhZC5yaWdodCArICJweCI7DQogICAgICAgIGNlbC5zdHlsZS5ib3R0b20gPSBwYWQuYm90dG9tICsgInB4IjsNCiAgICAgICAgY2VsLnN0eWxlLmxlZnQgPSBwYWQubGVmdCArICJweCI7DQogICAgICAgIGVsLnN0eWxlLndpZHRoID0gIjEwMCUiOw0KICAgICAgICBlbC5zdHlsZS5oZWlnaHQgPSAiMTAwJSI7DQogICAgICB9DQoNCiAgICAgIHJldHVybiB7DQogICAgICAgIGdldFdpZHRoOiBmdW5jdGlvbigpIHsgcmV0dXJuIGNlbC5vZmZzZXRXaWR0aDsgfSwNCiAgICAgICAgZ2V0SGVpZ2h0OiBmdW5jdGlvbigpIHsgcmV0dXJuIGNlbC5vZmZzZXRIZWlnaHQ7IH0NCiAgICAgIH07DQoNCiAgICB9IGVsc2Ugew0KICAgICAgZWwuc3R5bGUud2lkdGggPSBweChzaXppbmcud2lkdGgpOw0KICAgICAgZWwuc3R5bGUuaGVpZ2h0ID0gcHgoc2l6aW5nLmhlaWdodCk7DQoNCiAgICAgIHJldHVybiB7DQogICAgICAgIGdldFdpZHRoOiBmdW5jdGlvbigpIHsgcmV0dXJuIGVsLm9mZnNldFdpZHRoOyB9LA0KICAgICAgICBnZXRIZWlnaHQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gZWwub2Zmc2V0SGVpZ2h0OyB9DQogICAgICB9Ow0KICAgIH0NCiAgfQ0KDQogIC8vIERlZmF1bHQgaW1wbGVtZW50YXRpb25zIGZvciBtZXRob2RzDQogIHZhciBkZWZhdWx0cyA9IHsNCiAgICBmaW5kOiBmdW5jdGlvbihzY29wZSkgew0KICAgICAgcmV0dXJuIHF1ZXJ5U2VsZWN0b3JBbGwoc2NvcGUsICIuIiArIHRoaXMubmFtZSk7DQogICAgfSwNCiAgICByZW5kZXJFcnJvcjogZnVuY3Rpb24oZWwsIGVycikgew0KICAgICAgdmFyICRlbCA9ICQoZWwpOw0KDQogICAgICB0aGlzLmNsZWFyRXJyb3IoZWwpOw0KDQogICAgICAvLyBBZGQgYWxsIHRoZXNlIGVycm9yIGNsYXNzZXMsIGFzIFNoaW55IGRvZXMNCiAgICAgIHZhciBlcnJDbGFzcyA9ICJzaGlueS1vdXRwdXQtZXJyb3IiOw0KICAgICAgaWYgKGVyci50eXBlICE9PSBudWxsKSB7DQogICAgICAgIC8vIHVzZSB0aGUgY2xhc3NlcyBvZiB0aGUgZXJyb3IgY29uZGl0aW9uIGFzIENTUyBjbGFzcyBuYW1lcw0KICAgICAgICBlcnJDbGFzcyA9IGVyckNsYXNzICsgIiAiICsgJC5tYXAoYXNBcnJheShlcnIudHlwZSksIGZ1bmN0aW9uKHR5cGUpIHsNCiAgICAgICAgICByZXR1cm4gZXJyQ2xhc3MgKyAiLSIgKyB0eXBlOw0KICAgICAgICB9KS5qb2luKCIgIik7DQogICAgICB9DQogICAgICBlcnJDbGFzcyA9IGVyckNsYXNzICsgIiBodG1sd2lkZ2V0cy1lcnJvciI7DQoNCiAgICAgIC8vIElzIGVsIGlubGluZSBvciBibG9jaz8gSWYgaW5saW5lIG9yIGlubGluZS1ibG9jaywganVzdCBkaXNwbGF5Om5vbmUgaXQNCiAgICAgIC8vIGFuZCBhZGQgYW4gaW5saW5lIGVycm9yLg0KICAgICAgdmFyIGRpc3BsYXkgPSAkZWwuY3NzKCJkaXNwbGF5Iik7DQogICAgICAkZWwuZGF0YSgicmVzdG9yZS1kaXNwbGF5LW1vZGUiLCBkaXNwbGF5KTsNCg0KICAgICAgaWYgKGRpc3BsYXkgPT09ICJpbmxpbmUiIHx8IGRpc3BsYXkgPT09ICJpbmxpbmUtYmxvY2siKSB7DQogICAgICAgICRlbC5oaWRlKCk7DQogICAgICAgIGlmIChlcnIubWVzc2FnZSAhPT0gIiIpIHsNCiAgICAgICAgICB2YXIgZXJyb3JTcGFuID0gJCgiPHNwYW4+IikuYWRkQ2xhc3MoZXJyQ2xhc3MpOw0KICAgICAgICAgIGVycm9yU3Bhbi50ZXh0KGVyci5tZXNzYWdlKTsNCiAgICAgICAgICAkZWwuYWZ0ZXIoZXJyb3JTcGFuKTsNCiAgICAgICAgfQ0KICAgICAgfSBlbHNlIGlmIChkaXNwbGF5ID09PSAiYmxvY2siKSB7DQogICAgICAgIC8vIElmIGJsb2NrLCBhZGQgYW4gZXJyb3IganVzdCBhZnRlciB0aGUgZWwsIHNldCB2aXNpYmlsaXR5Om5vbmUgb24gdGhlDQogICAgICAgIC8vIGVsLCBhbmQgcG9zaXRpb24gdGhlIGVycm9yIHRvIGJlIG9uIHRvcCBvZiB0aGUgZWwuDQogICAgICAgIC8vIE1hcmsgaXQgd2l0aCBhIHVuaXF1ZSBJRCBhbmQgQ1NTIGNsYXNzIHNvIHdlIGNhbiByZW1vdmUgaXQgbGF0ZXIuDQogICAgICAgICRlbC5jc3MoInZpc2liaWxpdHkiLCAiaGlkZGVuIik7DQogICAgICAgIGlmIChlcnIubWVzc2FnZSAhPT0gIiIpIHsNCiAgICAgICAgICB2YXIgZXJyb3JEaXYgPSAkKCI8ZGl2PiIpLmFkZENsYXNzKGVyckNsYXNzKS5jc3MoInBvc2l0aW9uIiwgImFic29sdXRlIikNCiAgICAgICAgICAgIC5jc3MoInRvcCIsIGVsLm9mZnNldFRvcCkNCiAgICAgICAgICAgIC5jc3MoImxlZnQiLCBlbC5vZmZzZXRMZWZ0KQ0KICAgICAgICAgICAgLy8gc2V0dGluZyB3aWR0aCBjYW4gcHVzaCBvdXQgdGhlIHBhZ2Ugc2l6ZSwgZm9yY2luZyBvdGhlcndpc2UNCiAgICAgICAgICAgIC8vIHVubmVjZXNzYXJ5IHNjcm9sbGJhcnMgdG8gYXBwZWFyIGFuZCBtYWtpbmcgaXQgaW1wb3NzaWJsZSBmb3INCiAgICAgICAgICAgIC8vIHRoZSBlbGVtZW50IHRvIHNocmluazsgc28gdXNlIG1heC13aWR0aCBpbnN0ZWFkDQogICAgICAgICAgICAuY3NzKCJtYXhXaWR0aCIsIGVsLm9mZnNldFdpZHRoKQ0KICAgICAgICAgICAgLmNzcygiaGVpZ2h0IiwgZWwub2Zmc2V0SGVpZ2h0KTsNCiAgICAgICAgICBlcnJvckRpdi50ZXh0KGVyci5tZXNzYWdlKTsNCiAgICAgICAgICAkZWwuYWZ0ZXIoZXJyb3JEaXYpOw0KDQogICAgICAgICAgLy8gUmVhbGx5IGR1bWIgd2F5IHRvIGtlZXAgdGhlIHNpemUvcG9zaXRpb24gb2YgdGhlIGVycm9yIGluIHN5bmMgd2l0aA0KICAgICAgICAgIC8vIHRoZSBwYXJlbnQgZWxlbWVudCBhcyB0aGUgd2luZG93IGlzIHJlc2l6ZWQgb3Igd2hhdGV2ZXIuDQogICAgICAgICAgdmFyIGludElkID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7DQogICAgICAgICAgICBpZiAoIWVycm9yRGl2WzBdLnBhcmVudEVsZW1lbnQpIHsNCiAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRJZCk7DQogICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVycm9yRGl2DQogICAgICAgICAgICAgIC5jc3MoInRvcCIsIGVsLm9mZnNldFRvcCkNCiAgICAgICAgICAgICAgLmNzcygibGVmdCIsIGVsLm9mZnNldExlZnQpDQogICAgICAgICAgICAgIC5jc3MoIm1heFdpZHRoIiwgZWwub2Zmc2V0V2lkdGgpDQogICAgICAgICAgICAgIC5jc3MoImhlaWdodCIsIGVsLm9mZnNldEhlaWdodCk7DQogICAgICAgICAgfSwgNTAwKTsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgIH0sDQogICAgY2xlYXJFcnJvcjogZnVuY3Rpb24oZWwpIHsNCiAgICAgIHZhciAkZWwgPSAkKGVsKTsNCiAgICAgIHZhciBkaXNwbGF5ID0gJGVsLmRhdGEoInJlc3RvcmUtZGlzcGxheS1tb2RlIik7DQogICAgICAkZWwuZGF0YSgicmVzdG9yZS1kaXNwbGF5LW1vZGUiLCBudWxsKTsNCg0KICAgICAgaWYgKGRpc3BsYXkgPT09ICJpbmxpbmUiIHx8IGRpc3BsYXkgPT09ICJpbmxpbmUtYmxvY2siKSB7DQogICAgICAgIGlmIChkaXNwbGF5KQ0KICAgICAgICAgICRlbC5jc3MoImRpc3BsYXkiLCBkaXNwbGF5KTsNCiAgICAgICAgJChlbC5uZXh0U2libGluZykuZmlsdGVyKCIuaHRtbHdpZGdldHMtZXJyb3IiKS5yZW1vdmUoKTsNCiAgICAgIH0gZWxzZSBpZiAoZGlzcGxheSA9PT0gImJsb2NrIil7DQogICAgICAgICRlbC5jc3MoInZpc2liaWxpdHkiLCAiaW5oZXJpdCIpOw0KICAgICAgICAkKGVsLm5leHRTaWJsaW5nKS5maWx0ZXIoIi5odG1sd2lkZ2V0cy1lcnJvciIpLnJlbW92ZSgpOw0KICAgICAgfQ0KICAgIH0sDQogICAgc2l6aW5nOiB7fQ0KICB9Ow0KDQogIC8vIENhbGxlZCBieSB3aWRnZXQgYmluZGluZ3MgdG8gcmVnaXN0ZXIgYSBuZXcgdHlwZSBvZiB3aWRnZXQuIFRoZSBkZWZpbml0aW9uDQogIC8vIG9iamVjdCBjYW4gY29udGFpbiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6DQogIC8vIC0gbmFtZSAocmVxdWlyZWQpIC0gQSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgYmluZGluZyBuYW1lLCB3aGljaCB3aWxsIGJlDQogIC8vICAgdXNlZCBieSBkZWZhdWx0IGFzIHRoZSBDU1MgY2xhc3NuYW1lIHRvIGxvb2sgZm9yLg0KICAvLyAtIGluaXRpYWxpemUgKG9wdGlvbmFsKSAtIEEgZnVuY3Rpb24oZWwpIHRoYXQgd2lsbCBiZSBjYWxsZWQgb25jZSBwZXINCiAgLy8gICB3aWRnZXQgZWxlbWVudDsgaWYgYSB2YWx1ZSBpcyByZXR1cm5lZCwgaXQgd2lsbCBiZSBwYXNzZWQgYXMgdGhlIHRoaXJkDQogIC8vICAgdmFsdWUgdG8gcmVuZGVyVmFsdWUuDQogIC8vIC0gcmVuZGVyVmFsdWUgKHJlcXVpcmVkKSAtIEEgZnVuY3Rpb24oZWwsIGRhdGEsIGluaXRWYWx1ZSkgdGhhdCB3aWxsIGJlDQogIC8vICAgY2FsbGVkIHdpdGggZGF0YS4gU3RhdGljIGNvbnRleHRzIHdpbGwgY2F1c2UgdGhpcyB0byBiZSBjYWxsZWQgb25jZSBwZXINCiAgLy8gICBlbGVtZW50OyBTaGlueSBhcHBzIHdpbGwgY2F1c2UgdGhpcyB0byBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgcGVyDQogIC8vICAgZWxlbWVudCwgYXMgdGhlIGRhdGEgY2hhbmdlcy4NCiAgd2luZG93LkhUTUxXaWRnZXRzLndpZGdldCA9IGZ1bmN0aW9uKGRlZmluaXRpb24pIHsNCiAgICBpZiAoIWRlZmluaXRpb24ubmFtZSkgew0KICAgICAgdGhyb3cgbmV3IEVycm9yKCJXaWRnZXQgbXVzdCBoYXZlIGEgbmFtZSIpOw0KICAgIH0NCiAgICBpZiAoIWRlZmluaXRpb24udHlwZSkgew0KICAgICAgdGhyb3cgbmV3IEVycm9yKCJXaWRnZXQgbXVzdCBoYXZlIGEgdHlwZSIpOw0KICAgIH0NCiAgICAvLyBDdXJyZW50bHkgd2Ugb25seSBzdXBwb3J0IG91dHB1dCB3aWRnZXRzDQogICAgaWYgKGRlZmluaXRpb24udHlwZSAhPT0gIm91dHB1dCIpIHsNCiAgICAgIHRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHdpZGdldCB0eXBlICciICsgZGVmaW5pdGlvbi50eXBlICsgIiciKTsNCiAgICB9DQogICAgLy8gVE9ETzogVmVyaWZ5IHRoYXQgLm5hbWUgaXMgYSB2YWxpZCBDU1MgY2xhc3NuYW1lDQoNCiAgICAvLyBTdXBwb3J0IG5ldy1zdHlsZSBpbnN0YW5jZS1ib3VuZCBkZWZpbml0aW9ucy4gT2xkLXN0eWxlIGNsYXNzLWJvdW5kDQogICAgLy8gZGVmaW5pdGlvbnMgaGF2ZSBvbmUgd2lkZ2V0ICJvYmplY3QiIHBlciB3aWRnZXQgcGVyIHR5cGUvY2xhc3Mgb2YNCiAgICAvLyB3aWRnZXQ7IHRoZSByZW5kZXJWYWx1ZSBhbmQgcmVzaXplIG1ldGhvZHMgb24gc3VjaCB3aWRnZXQgb2JqZWN0cw0KICAgIC8vIHRha2UgZWwgYW5kIGluc3RhbmNlIGFyZ3VtZW50cywgYmVjYXVzZSB0aGUgd2lkZ2V0IG9iamVjdCBjYW4ndA0KICAgIC8vIHN0b3JlIHRoZW0uIE5ldy1zdHlsZSBpbnN0YW5jZS1ib3VuZCBkZWZpbml0aW9ucyBoYXZlIG9uZSB3aWRnZXQNCiAgICAvLyBvYmplY3QgcGVyIHdpZGdldCBpbnN0YW5jZTsgdGhlIGRlZmluaXRpb24gdGhhdCdzIHBhc3NlZCBpbiBkb2Vzbid0DQogICAgLy8gcHJvdmlkZSByZW5kZXJWYWx1ZSBvciByZXNpemUgbWV0aG9kcyBhdCBhbGwsIGp1c3QgdGhlIHNpbmdsZSBtZXRob2QNCiAgICAvLyAgIGZhY3RvcnkoZWwsIHdpZHRoLCBoZWlnaHQpDQogICAgLy8gd2hpY2ggcmV0dXJucyBhbiBvYmplY3QgdGhhdCBoYXMgcmVuZGVyVmFsdWUoeCkgYW5kIHJlc2l6ZSh3LCBoKS4NCiAgICAvLyBUaGlzIGVuYWJsZXMgYSBmYXIgbW9yZSBuYXR1cmFsIHByb2dyYW1taW5nIHN0eWxlIGZvciB0aGUgd2lkZ2V0DQogICAgLy8gYXV0aG9yLCB3aG8gY2FuIHN0b3JlIHBlci1pbnN0YW5jZSBzdGF0ZSB1c2luZyBlaXRoZXIgT08tc3R5bGUNCiAgICAvLyBpbnN0YW5jZSBmaWVsZHMgb3IgZnVuY3Rpb25hbC1zdHlsZSBjbG9zdXJlIHZhcmlhYmxlcyAoSSBndWVzcyB0aGlzDQogICAgLy8gaXMgaW4gY29udHJhc3QgdG8gd2hhdCBjYW4gb25seSBiZSBjYWxsZWQgQy1zdHlsZSBwc2V1ZG8tT08gd2hpY2ggaXMNCiAgICAvLyB3aGF0IHdlIHJlcXVpcmVkIGJlZm9yZSkuDQogICAgaWYgKGRlZmluaXRpb24uZmFjdG9yeSkgew0KICAgICAgZGVmaW5pdGlvbiA9IGNyZWF0ZUxlZ2FjeURlZmluaXRpb25BZGFwdGVyKGRlZmluaXRpb24pOw0KICAgIH0NCg0KICAgIGlmICghZGVmaW5pdGlvbi5yZW5kZXJWYWx1ZSkgew0KICAgICAgdGhyb3cgbmV3IEVycm9yKCJXaWRnZXQgbXVzdCBoYXZlIGEgcmVuZGVyVmFsdWUgZnVuY3Rpb24iKTsNCiAgICB9DQoNCiAgICAvLyBGb3Igc3RhdGljIHJlbmRlcmluZyAobm9uLVNoaW55KSwgdXNlIGEgc2ltcGxlIHdpZGdldCByZWdpc3RyYXRpb24NCiAgICAvLyBzY2hlbWUuIFdlIGFsc28gdXNlIHRoaXMgc2NoZW1lIGZvciBTaGlueSBhcHBzL2RvY3VtZW50cyB0aGF0IGFsc28NCiAgICAvLyBjb250YWluIHN0YXRpYyB3aWRnZXRzLg0KICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy53aWRnZXRzID0gd2luZG93LkhUTUxXaWRnZXRzLndpZGdldHMgfHwgW107DQogICAgLy8gTWVyZ2UgZGVmYXVsdHMgaW50byB0aGUgZGVmaW5pdGlvbjsgZG9uJ3QgbXV0YXRlIHRoZSBvcmlnaW5hbCBkZWZpbml0aW9uLg0KICAgIHZhciBzdGF0aWNCaW5kaW5nID0gZXh0ZW5kKHt9LCBkZWZhdWx0cywgZGVmaW5pdGlvbik7DQogICAgb3ZlcnJpZGVNZXRob2Qoc3RhdGljQmluZGluZywgImZpbmQiLCBmdW5jdGlvbihzdXBlcmZ1bmMpIHsNCiAgICAgIHJldHVybiBmdW5jdGlvbihzY29wZSkgew0KICAgICAgICB2YXIgcmVzdWx0cyA9IHN1cGVyZnVuYyhzY29wZSk7DQogICAgICAgIC8vIEZpbHRlciBvdXQgU2hpbnkgb3V0cHV0cywgd2Ugb25seSB3YW50IHRoZSBzdGF0aWMga2luZA0KICAgICAgICByZXR1cm4gZmlsdGVyQnlDbGFzcyhyZXN1bHRzLCAiaHRtbC13aWRnZXQtb3V0cHV0IiwgZmFsc2UpOw0KICAgICAgfTsNCiAgICB9KTsNCiAgICB3aW5kb3cuSFRNTFdpZGdldHMud2lkZ2V0cy5wdXNoKHN0YXRpY0JpbmRpbmcpOw0KDQogICAgaWYgKHNoaW55TW9kZSkgew0KICAgICAgLy8gU2hpbnkgaXMgcnVubmluZy4gUmVnaXN0ZXIgdGhlIGRlZmluaXRpb24gd2l0aCBhbiBvdXRwdXQgYmluZGluZy4NCiAgICAgIC8vIFRoZSBkZWZpbml0aW9uIGl0c2VsZiB3aWxsIG5vdCBiZSB0aGUgb3V0cHV0IGJpbmRpbmcsIGluc3RlYWQNCiAgICAgIC8vIHdlIHdpbGwgbWFrZSBhbiBvdXRwdXQgYmluZGluZyBvYmplY3QgdGhhdCBkZWxlZ2F0ZXMgdG8gdGhlDQogICAgICAvLyBkZWZpbml0aW9uLiBUaGlzIGlzIGJlY2F1c2Ugd2UgZm9vbGlzaGx5IHVzZWQgdGhlIHNhbWUgbWV0aG9kDQogICAgICAvLyBuYW1lIChyZW5kZXJWYWx1ZSkgZm9yIGh0bWx3aWRnZXRzIGRlZmluaXRpb24gYW5kIFNoaW55IGJpbmRpbmdzDQogICAgICAvLyBidXQgdGhleSBhY3R1YWxseSBoYXZlIHF1aXRlIGRpZmZlcmVudCBzZW1hbnRpY3MgKHRoZSBTaGlueQ0KICAgICAgLy8gYmluZGluZ3MgcmVjZWl2ZSBkYXRhIHRoYXQgaW5jbHVkZXMgbG90cyBvZiBtZXRhZGF0YSB0aGF0IGl0DQogICAgICAvLyBzdHJpcHMgb2ZmIGJlZm9yZSBjYWxsaW5nIGh0bWx3aWRnZXRzIHJlbmRlclZhbHVlKS4gV2UgY2FuJ3QNCiAgICAgIC8vIGp1c3QgaWdub3JlIHRoZSBkaWZmZXJlbmNlIGJlY2F1c2UgaW4gc29tZSB3aWRnZXRzIGl0J3MgaGVscGZ1bA0KICAgICAgLy8gdG8gY2FsbCB0aGlzLnJlbmRlclZhbHVlKCkgZnJvbSBpbnNpZGUgb2YgcmVzaXplKCksIGFuZCBpZg0KICAgICAgLy8gd2UncmUgbm90IGRlbGVnYXRpbmcsIHRoZW4gdGhhdCBjYWxsIHdpbGwgZ28gdG8gdGhlIFNoaW55DQogICAgICAvLyB2ZXJzaW9uIGluc3RlYWQgb2YgdGhlIGh0bWx3aWRnZXRzIHZlcnNpb24uDQoNCiAgICAgIC8vIE1lcmdlIGRlZmF1bHRzIHdpdGggZGVmaW5pdGlvbiwgd2l0aG91dCBtdXRhdGluZyBlaXRoZXIuDQogICAgICB2YXIgYmluZGluZ0RlZiA9IGV4dGVuZCh7fSwgZGVmYXVsdHMsIGRlZmluaXRpb24pOw0KDQogICAgICAvLyBUaGlzIG9iamVjdCB3aWxsIGJlIG91ciBhY3R1YWwgU2hpbnkgYmluZGluZy4NCiAgICAgIHZhciBzaGlueUJpbmRpbmcgPSBuZXcgU2hpbnkuT3V0cHV0QmluZGluZygpOw0KDQogICAgICAvLyBXaXRoIGEgZmV3IGV4Y2VwdGlvbnMsIHdlJ2xsIHdhbnQgdG8gc2ltcGx5IHVzZSB0aGUgYmluZGluZ0RlZidzDQogICAgICAvLyB2ZXJzaW9uIG9mIG1ldGhvZHMgaWYgdGhleSBhcmUgYXZhaWxhYmxlLCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvDQogICAgICAvLyBTaGlueSdzIGRlZmF1bHRzLiBOT1RFOiBJZiBTaGlueSdzIG91dHB1dCBiaW5kaW5ncyBnYWluIGFkZGl0aW9uYWwNCiAgICAgIC8vIG1ldGhvZHMgaW4gdGhlIGZ1dHVyZSwgYW5kIHdlIHdhbnQgdGhlbSB0byBiZSBvdmVycmlkZWFibGUgYnkNCiAgICAgIC8vIEhUTUxXaWRnZXQgYmluZGluZyBkZWZpbml0aW9ucywgdGhlbiB3ZSdsbCBuZWVkIHRvIGFkZCB0aGVtIHRvIHRoaXMNCiAgICAgIC8vIGxpc3QuDQogICAgICBkZWxlZ2F0ZU1ldGhvZChzaGlueUJpbmRpbmcsIGJpbmRpbmdEZWYsICJnZXRJZCIpOw0KICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAib25WYWx1ZUNoYW5nZSIpOw0KICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAib25WYWx1ZUVycm9yIik7DQogICAgICBkZWxlZ2F0ZU1ldGhvZChzaGlueUJpbmRpbmcsIGJpbmRpbmdEZWYsICJyZW5kZXJFcnJvciIpOw0KICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAiY2xlYXJFcnJvciIpOw0KICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAic2hvd1Byb2dyZXNzIik7DQoNCiAgICAgIC8vIFRoZSBmaW5kLCByZW5kZXJWYWx1ZSwgYW5kIHJlc2l6ZSBhcmUgaGFuZGxlZCBkaWZmZXJlbnRseSwgYmVjYXVzZSB3ZQ0KICAgICAgLy8gd2FudCB0byBhY3R1YWxseSBkZWNvcmF0ZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGJpbmRpbmdEZWYgbWV0aG9kcy4NCg0KICAgICAgc2hpbnlCaW5kaW5nLmZpbmQgPSBmdW5jdGlvbihzY29wZSkgew0KICAgICAgICB2YXIgcmVzdWx0cyA9IGJpbmRpbmdEZWYuZmluZChzY29wZSk7DQoNCiAgICAgICAgLy8gT25seSByZXR1cm4gZWxlbWVudHMgdGhhdCBhcmUgU2hpbnkgb3V0cHV0cywgbm90IHN0YXRpYyBvbmVzDQogICAgICAgIHZhciBkeW5hbWljUmVzdWx0cyA9IHJlc3VsdHMuZmlsdGVyKCIuaHRtbC13aWRnZXQtb3V0cHV0Iik7DQoNCiAgICAgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHdoYXRldmVyIGNhdXNlZCBTaGlueSB0byB0aGluayB0aGVyZSBtaWdodCBiZQ0KICAgICAgICAvLyBuZXcgZHluYW1pYyBvdXRwdXRzLCBhbHNvIGNhdXNlZCB0aGVyZSB0byBiZSBuZXcgc3RhdGljIG91dHB1dHMuDQogICAgICAgIC8vIFNpbmNlIHRoZXJlIG1pZ2h0IGJlIGxvdHMgb2YgZGlmZmVyZW50IGh0bWx3aWRnZXRzIGJpbmRpbmdzLCB3ZQ0KICAgICAgICAvLyBzY2hlZHVsZSBleGVjdXRpb24gZm9yIGxhdGVyLS1ubyBuZWVkIHRvIHN0YXRpY1JlbmRlciBtdWx0aXBsZQ0KICAgICAgICAvLyB0aW1lcy4NCiAgICAgICAgaWYgKHJlc3VsdHMubGVuZ3RoICE9PSBkeW5hbWljUmVzdWx0cy5sZW5ndGgpDQogICAgICAgICAgc2NoZWR1bGVTdGF0aWNSZW5kZXIoKTsNCg0KICAgICAgICByZXR1cm4gZHluYW1pY1Jlc3VsdHM7DQogICAgICB9Ow0KDQogICAgICAvLyBXcmFwIHJlbmRlclZhbHVlIHRvIGhhbmRsZSBpbml0aWFsaXphdGlvbiwgd2hpY2ggdW5mb3J0dW5hdGVseSBpc24ndA0KICAgICAgLy8gc3VwcG9ydGVkIG5hdGl2ZWx5IGJ5IFNoaW55IGF0IHRoZSB0aW1lIG9mIHRoaXMgd3JpdGluZy4NCg0KICAgICAgc2hpbnlCaW5kaW5nLnJlbmRlclZhbHVlID0gZnVuY3Rpb24oZWwsIGRhdGEpIHsNCiAgICAgICAgLy8gUmVzb2x2ZSBzdHJpbmdzIG1hcmtlZCBhcyBqYXZhc2NyaXB0IGxpdGVyYWxzIHRvIG9iamVjdHMNCiAgICAgICAgaWYgKCEoZGF0YS5ldmFscyBpbnN0YW5jZW9mIEFycmF5KSkgZGF0YS5ldmFscyA9IFtkYXRhLmV2YWxzXTsNCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGRhdGEuZXZhbHMgJiYgaSA8IGRhdGEuZXZhbHMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICB3aW5kb3cuSFRNTFdpZGdldHMuZXZhbHVhdGVTdHJpbmdNZW1iZXIoZGF0YS54LCBkYXRhLmV2YWxzW2ldKTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoIWJpbmRpbmdEZWYucmVuZGVyT25OdWxsVmFsdWUpIHsNCiAgICAgICAgICBpZiAoZGF0YS54ID09PSBudWxsKSB7DQogICAgICAgICAgICBlbC5zdHlsZS52aXNpYmlsaXR5ID0gImhpZGRlbiI7DQogICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIGVsLnN0eWxlLnZpc2liaWxpdHkgPSAiaW5oZXJpdCI7DQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGlmICghZWxlbWVudERhdGEoZWwsICJpbml0aWFsaXplZCIpKSB7DQogICAgICAgICAgaW5pdFNpemluZyhlbCk7DQoNCiAgICAgICAgICBlbGVtZW50RGF0YShlbCwgImluaXRpYWxpemVkIiwgdHJ1ZSk7DQogICAgICAgICAgaWYgKGJpbmRpbmdEZWYuaW5pdGlhbGl6ZSkgew0KICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGJpbmRpbmdEZWYuaW5pdGlhbGl6ZShlbCwgZWwub2Zmc2V0V2lkdGgsDQogICAgICAgICAgICAgIGVsLm9mZnNldEhlaWdodCk7DQogICAgICAgICAgICBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0IiwgcmVzdWx0KTsNCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgU2hpbnkucmVuZGVyRGVwZW5kZW5jaWVzKGRhdGEuZGVwcyk7DQogICAgICAgIGJpbmRpbmdEZWYucmVuZGVyVmFsdWUoZWwsIGRhdGEueCwgZWxlbWVudERhdGEoZWwsICJpbml0X3Jlc3VsdCIpKTsNCiAgICAgICAgZXZhbEFuZFJ1bihkYXRhLmpzSG9va3MucmVuZGVyLCBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0IiksIFtlbCwgZGF0YS54XSk7DQogICAgICB9Ow0KDQogICAgICAvLyBPbmx5IG92ZXJyaWRlIHJlc2l6ZSBpZiBiaW5kaW5nRGVmIGltcGxlbWVudHMgaXQNCiAgICAgIGlmIChiaW5kaW5nRGVmLnJlc2l6ZSkgew0KICAgICAgICBzaGlueUJpbmRpbmcucmVzaXplID0gZnVuY3Rpb24oZWwsIHdpZHRoLCBoZWlnaHQpIHsNCiAgICAgICAgICAvLyBTaGlueSBjYW4gY2FsbCByZXNpemUgYmVmb3JlIGluaXRpYWxpemUvcmVuZGVyVmFsdWUgaGF2ZSBiZWVuDQogICAgICAgICAgLy8gY2FsbGVkLCB3aGljaCBkb2Vzbid0IG1ha2Ugc2Vuc2UgZm9yIHdpZGdldHMuDQogICAgICAgICAgaWYgKGVsZW1lbnREYXRhKGVsLCAiaW5pdGlhbGl6ZWQiKSkgew0KICAgICAgICAgICAgYmluZGluZ0RlZi5yZXNpemUoZWwsIHdpZHRoLCBoZWlnaHQsIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiKSk7DQogICAgICAgICAgfQ0KICAgICAgICB9Ow0KICAgICAgfQ0KDQogICAgICBTaGlueS5vdXRwdXRCaW5kaW5ncy5yZWdpc3RlcihzaGlueUJpbmRpbmcsIGJpbmRpbmdEZWYubmFtZSk7DQogICAgfQ0KICB9Ow0KDQogIHZhciBzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQgPSBudWxsOw0KICBmdW5jdGlvbiBzY2hlZHVsZVN0YXRpY1JlbmRlcigpIHsNCiAgICBpZiAoIXNjaGVkdWxlU3RhdGljUmVuZGVyVGltZXJJZCkgew0KICAgICAgc2NoZWR1bGVTdGF0aWNSZW5kZXJUaW1lcklkID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsNCiAgICAgICAgc2NoZWR1bGVTdGF0aWNSZW5kZXJUaW1lcklkID0gbnVsbDsNCiAgICAgICAgd2luZG93LkhUTUxXaWRnZXRzLnN0YXRpY1JlbmRlcigpOw0KICAgICAgfSwgMSk7DQogICAgfQ0KICB9DQoNCiAgLy8gUmVuZGVyIHN0YXRpYyB3aWRnZXRzIGFmdGVyIHRoZSBkb2N1bWVudCBmaW5pc2hlcyBsb2FkaW5nDQogIC8vIFN0YXRpY2FsbHkgcmVuZGVyIGFsbCBlbGVtZW50cyB0aGF0IGFyZSBvZiB0aGlzIHdpZGdldCdzIGNsYXNzDQogIHdpbmRvdy5IVE1MV2lkZ2V0cy5zdGF0aWNSZW5kZXIgPSBmdW5jdGlvbigpIHsNCiAgICB2YXIgYmluZGluZ3MgPSB3aW5kb3cuSFRNTFdpZGdldHMud2lkZ2V0cyB8fCBbXTsNCiAgICBmb3JFYWNoKGJpbmRpbmdzLCBmdW5jdGlvbihiaW5kaW5nKSB7DQogICAgICB2YXIgbWF0Y2hlcyA9IGJpbmRpbmcuZmluZChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpOw0KICAgICAgZm9yRWFjaChtYXRjaGVzLCBmdW5jdGlvbihlbCkgew0KICAgICAgICB2YXIgc2l6ZU9iaiA9IGluaXRTaXppbmcoZWwsIGJpbmRpbmcpOw0KDQogICAgICAgIGlmIChoYXNDbGFzcyhlbCwgImh0bWwtd2lkZ2V0LXN0YXRpYy1ib3VuZCIpKQ0KICAgICAgICAgIHJldHVybjsNCiAgICAgICAgZWwuY2xhc3NOYW1lID0gZWwuY2xhc3NOYW1lICsgIiBodG1sLXdpZGdldC1zdGF0aWMtYm91bmQiOw0KDQogICAgICAgIHZhciBpbml0UmVzdWx0Ow0KICAgICAgICBpZiAoYmluZGluZy5pbml0aWFsaXplKSB7DQogICAgICAgICAgaW5pdFJlc3VsdCA9IGJpbmRpbmcuaW5pdGlhbGl6ZShlbCwNCiAgICAgICAgICAgIHNpemVPYmogPyBzaXplT2JqLmdldFdpZHRoKCkgOiBlbC5vZmZzZXRXaWR0aCwNCiAgICAgICAgICAgIHNpemVPYmogPyBzaXplT2JqLmdldEhlaWdodCgpIDogZWwub2Zmc2V0SGVpZ2h0DQogICAgICAgICAgKTsNCiAgICAgICAgICBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0IiwgaW5pdFJlc3VsdCk7DQogICAgICAgIH0NCg0KICAgICAgICBpZiAoYmluZGluZy5yZXNpemUpIHsNCiAgICAgICAgICB2YXIgbGFzdFNpemUgPSB7fTsNCiAgICAgICAgICB2YXIgcmVzaXplSGFuZGxlciA9IGZ1bmN0aW9uKGUpIHsNCiAgICAgICAgICAgIHZhciBzaXplID0gew0KICAgICAgICAgICAgICB3OiBzaXplT2JqID8gc2l6ZU9iai5nZXRXaWR0aCgpIDogZWwub2Zmc2V0V2lkdGgsDQogICAgICAgICAgICAgIGg6IHNpemVPYmogPyBzaXplT2JqLmdldEhlaWdodCgpIDogZWwub2Zmc2V0SGVpZ2h0DQogICAgICAgICAgICB9Ow0KICAgICAgICAgICAgaWYgKHNpemUudyA9PT0gMCAmJiBzaXplLmggPT09IDApDQogICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgIGlmIChzaXplLncgPT09IGxhc3RTaXplLncgJiYgc2l6ZS5oID09PSBsYXN0U2l6ZS5oKQ0KICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICBsYXN0U2l6ZSA9IHNpemU7DQogICAgICAgICAgICBiaW5kaW5nLnJlc2l6ZShlbCwgc2l6ZS53LCBzaXplLmgsIGluaXRSZXN1bHQpOw0KICAgICAgICAgIH07DQoNCiAgICAgICAgICBvbih3aW5kb3csICJyZXNpemUiLCByZXNpemVIYW5kbGVyKTsNCg0KICAgICAgICAgIC8vIFRoaXMgaXMgbmVlZGVkIGZvciBjYXNlcyB3aGVyZSB3ZSdyZSBydW5uaW5nIGluIGEgU2hpbnkNCiAgICAgICAgICAvLyBhcHAsIGJ1dCB0aGUgd2lkZ2V0IGl0c2VsZiBpcyBub3QgYSBTaGlueSBvdXRwdXQsIGJ1dA0KICAgICAgICAgIC8vIHJhdGhlciBhIHNpbXBsZSBzdGF0aWMgd2lkZ2V0LiBPbmUgZXhhbXBsZSBvZiB0aGlzIGlzDQogICAgICAgICAgLy8gYW4gcm1hcmtkb3duIGRvY3VtZW50IHRoYXQgaGFzIHJ1bnRpbWU6c2hpbnkgYW5kIHdpZGdldA0KICAgICAgICAgIC8vIHRoYXQgaXNuJ3QgaW4gYSByZW5kZXIgZnVuY3Rpb24uIFNoaW55IG9ubHkga25vd3MgdG8NCiAgICAgICAgICAvLyBjYWxsIHJlc2l6ZSBoYW5kbGVycyBmb3IgU2hpbnkgb3V0cHV0cywgbm90IGZvciBzdGF0aWMNCiAgICAgICAgICAvLyB3aWRnZXRzLCBzbyB3ZSBkbyBpdCBvdXJzZWx2ZXMuDQogICAgICAgICAgaWYgKHdpbmRvdy5qUXVlcnkpIHsNCiAgICAgICAgICAgIHdpbmRvdy5qUXVlcnkoZG9jdW1lbnQpLm9uKA0KICAgICAgICAgICAgICAic2hvd24uaHRtbHdpZGdldHMgc2hvd24uYnMudGFiLmh0bWx3aWRnZXRzIHNob3duLmJzLmNvbGxhcHNlLmh0bWx3aWRnZXRzIiwNCiAgICAgICAgICAgICAgcmVzaXplSGFuZGxlcg0KICAgICAgICAgICAgKTsNCiAgICAgICAgICAgIHdpbmRvdy5qUXVlcnkoZG9jdW1lbnQpLm9uKA0KICAgICAgICAgICAgICAiaGlkZGVuLmh0bWx3aWRnZXRzIGhpZGRlbi5icy50YWIuaHRtbHdpZGdldHMgaGlkZGVuLmJzLmNvbGxhcHNlLmh0bWx3aWRnZXRzIiwNCiAgICAgICAgICAgICAgcmVzaXplSGFuZGxlcg0KICAgICAgICAgICAgKTsNCiAgICAgICAgICB9DQoNCiAgICAgICAgICAvLyBUaGlzIGlzIG5lZWRlZCBmb3IgdGhlIHNwZWNpZmljIGNhc2Ugb2YgaW9zbGlkZXMsIHdoaWNoDQogICAgICAgICAgLy8gZmxpcHMgc2xpZGVzIGJldHdlZW4gZGlzcGxheTpub25lIGFuZCBkaXNwbGF5OmJsb2NrLg0KICAgICAgICAgIC8vIElkZWFsbHkgd2Ugd291bGQgbm90IGhhdmUgdG8gaGF2ZSBpb3NsaWRlLXNwZWNpZmljIGNvZGUNCiAgICAgICAgICAvLyBoZXJlLCBidXQgcmF0aGVyIGhhdmUgaW9zbGlkZXMgcmFpc2UgYSBnZW5lcmljIGV2ZW50LA0KICAgICAgICAgIC8vIGJ1dCB0aGUgcm1hcmtkb3duIHBhY2thZ2UganVzdCB3ZW50IHRvIENSQU4gc28gdGhlDQogICAgICAgICAgLy8gd2luZG93IHRvIGdldHRpbmcgdGhhdCBmaXhlZCBtYXkgYmUgbG9uZy4NCiAgICAgICAgICBpZiAod2luZG93LmFkZEV2ZW50TGlzdGVuZXIpIHsNCiAgICAgICAgICAgIC8vIEl0J3MgT0sgdG8gbGltaXQgdGhpcyB0byB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcg0KICAgICAgICAgICAgLy8gYnJvd3NlcnMgYmVjYXVzZSBpb3NsaWRlcyBpdHNlbGYgb25seSBzdXBwb3J0cw0KICAgICAgICAgICAgLy8gc3VjaCBicm93c2Vycy4NCiAgICAgICAgICAgIG9uKGRvY3VtZW50LCAic2xpZGVlbnRlciIsIHJlc2l6ZUhhbmRsZXIpOw0KICAgICAgICAgICAgb24oZG9jdW1lbnQsICJzbGlkZWxlYXZlIiwgcmVzaXplSGFuZGxlcik7DQogICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgdmFyIHNjcmlwdERhdGEgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJzY3JpcHRbZGF0YS1mb3I9JyIgKyBlbC5pZCArICInXVt0eXBlPSdhcHBsaWNhdGlvbi9qc29uJ10iKTsNCiAgICAgICAgaWYgKHNjcmlwdERhdGEpIHsNCiAgICAgICAgICB2YXIgZGF0YSA9IEpTT04ucGFyc2Uoc2NyaXB0RGF0YS50ZXh0Q29udGVudCB8fCBzY3JpcHREYXRhLnRleHQpOw0KICAgICAgICAgIC8vIFJlc29sdmUgc3RyaW5ncyBtYXJrZWQgYXMgamF2YXNjcmlwdCBsaXRlcmFscyB0byBvYmplY3RzDQogICAgICAgICAgaWYgKCEoZGF0YS5ldmFscyBpbnN0YW5jZW9mIEFycmF5KSkgZGF0YS5ldmFscyA9IFtkYXRhLmV2YWxzXTsNCiAgICAgICAgICBmb3IgKHZhciBrID0gMDsgZGF0YS5ldmFscyAmJiBrIDwgZGF0YS5ldmFscy5sZW5ndGg7IGsrKykgew0KICAgICAgICAgICAgd2luZG93LkhUTUxXaWRnZXRzLmV2YWx1YXRlU3RyaW5nTWVtYmVyKGRhdGEueCwgZGF0YS5ldmFsc1trXSk7DQogICAgICAgICAgfQ0KICAgICAgICAgIGJpbmRpbmcucmVuZGVyVmFsdWUoZWwsIGRhdGEueCwgaW5pdFJlc3VsdCk7DQogICAgICAgICAgZXZhbEFuZFJ1bihkYXRhLmpzSG9va3MucmVuZGVyLCBpbml0UmVzdWx0LCBbZWwsIGRhdGEueF0pOw0KICAgICAgICB9DQogICAgICB9KTsNCiAgICB9KTsNCg0KICAgIGludm9rZVBvc3RSZW5kZXJIYW5kbGVycygpOw0KICB9DQoNCiAgLy8gV2FpdCB1bnRpbCBhZnRlciB0aGUgZG9jdW1lbnQgaGFzIGxvYWRlZCB0byByZW5kZXIgdGhlIHdpZGdldHMuDQogIGlmIChkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKSB7DQogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsIGZ1bmN0aW9uKCkgew0KICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsIGFyZ3VtZW50cy5jYWxsZWUsIGZhbHNlKTsNCiAgICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy5zdGF0aWNSZW5kZXIoKTsNCiAgICB9LCBmYWxzZSk7DQogIH0gZWxzZSBpZiAoZG9jdW1lbnQuYXR0YWNoRXZlbnQpIHsNCiAgICBkb2N1bWVudC5hdHRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIiwgZnVuY3Rpb24oKSB7DQogICAgICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gImNvbXBsZXRlIikgew0KICAgICAgICBkb2N1bWVudC5kZXRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIiwgYXJndW1lbnRzLmNhbGxlZSk7DQogICAgICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy5zdGF0aWNSZW5kZXIoKTsNCiAgICAgIH0NCiAgICB9KTsNCiAgfQ0KDQoNCiAgd2luZG93LkhUTUxXaWRnZXRzLmdldEF0dGFjaG1lbnRVcmwgPSBmdW5jdGlvbihkZXBuYW1lLCBrZXkpIHsNCiAgICAvLyBJZiBubyBrZXksIGRlZmF1bHQgdG8gdGhlIGZpcnN0IGl0ZW0NCiAgICBpZiAodHlwZW9mKGtleSkgPT09ICJ1bmRlZmluZWQiKQ0KICAgICAga2V5ID0gMTsNCg0KICAgIHZhciBsaW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZGVwbmFtZSArICItIiArIGtleSArICItYXR0YWNobWVudCIpOw0KICAgIGlmICghbGluaykgew0KICAgICAgdGhyb3cgbmV3IEVycm9yKCJBdHRhY2htZW50ICIgKyBkZXBuYW1lICsgIi8iICsga2V5ICsgIiBub3QgZm91bmQgaW4gZG9jdW1lbnQiKTsNCiAgICB9DQogICAgcmV0dXJuIGxpbmsuZ2V0QXR0cmlidXRlKCJocmVmIik7DQogIH07DQoNCiAgd2luZG93LkhUTUxXaWRnZXRzLmRhdGFmcmFtZVRvRDMgPSBmdW5jdGlvbihkZikgew0KICAgIHZhciBuYW1lcyA9IFtdOw0KICAgIHZhciBsZW5ndGg7DQogICAgZm9yICh2YXIgbmFtZSBpbiBkZikgew0KICAgICAgICBpZiAoZGYuaGFzT3duUHJvcGVydHkobmFtZSkpDQogICAgICAgICAgICBuYW1lcy5wdXNoKG5hbWUpOw0KICAgICAgICBpZiAodHlwZW9mKGRmW25hbWVdKSAhPT0gIm9iamVjdCIgfHwgdHlwZW9mKGRmW25hbWVdLmxlbmd0aCkgPT09ICJ1bmRlZmluZWQiKSB7DQogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkFsbCBmaWVsZHMgbXVzdCBiZSBhcnJheXMiKTsNCiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YobGVuZ3RoKSAhPT0gInVuZGVmaW5lZCIgJiYgbGVuZ3RoICE9PSBkZltuYW1lXS5sZW5ndGgpIHsNCiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQWxsIGZpZWxkcyBtdXN0IGJlIGFycmF5cyBvZiB0aGUgc2FtZSBsZW5ndGgiKTsNCiAgICAgICAgfQ0KICAgICAgICBsZW5ndGggPSBkZltuYW1lXS5sZW5ndGg7DQogICAgfQ0KICAgIHZhciByZXN1bHRzID0gW107DQogICAgdmFyIGl0ZW07DQogICAgZm9yICh2YXIgcm93ID0gMDsgcm93IDwgbGVuZ3RoOyByb3crKykgew0KICAgICAgICBpdGVtID0ge307DQogICAgICAgIGZvciAodmFyIGNvbCA9IDA7IGNvbCA8IG5hbWVzLmxlbmd0aDsgY29sKyspIHsNCiAgICAgICAgICAgIGl0ZW1bbmFtZXNbY29sXV0gPSBkZltuYW1lc1tjb2xdXVtyb3ddOw0KICAgICAgICB9DQogICAgICAgIHJlc3VsdHMucHVzaChpdGVtKTsNCiAgICB9DQogICAgcmV0dXJuIHJlc3VsdHM7DQogIH07DQoNCiAgd2luZG93LkhUTUxXaWRnZXRzLnRyYW5zcG9zZUFycmF5MkQgPSBmdW5jdGlvbihhcnJheSkgew0KICAgICAgaWYgKGFycmF5Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIGFycmF5Ow0KICAgICAgdmFyIG5ld0FycmF5ID0gYXJyYXlbMF0ubWFwKGZ1bmN0aW9uKGNvbCwgaSkgew0KICAgICAgICAgIHJldHVybiBhcnJheS5tYXAoZnVuY3Rpb24ocm93KSB7DQogICAgICAgICAgICAgIHJldHVybiByb3dbaV0NCiAgICAgICAgICB9KQ0KICAgICAgfSk7DQogICAgICByZXR1cm4gbmV3QXJyYXk7DQogIH07DQogIC8vIFNwbGl0IHZhbHVlIGF0IHNwbGl0Q2hhciwgYnV0IGFsbG93IHNwbGl0Q2hhciB0byBiZSBlc2NhcGVkDQogIC8vIHVzaW5nIGVzY2FwZUNoYXIuIEFueSBvdGhlciBjaGFyYWN0ZXJzIGVzY2FwZWQgYnkgZXNjYXBlQ2hhcg0KICAvLyB3aWxsIGJlIGluY2x1ZGVkIGFzIHVzdWFsIChpbmNsdWRpbmcgZXNjYXBlQ2hhciBpdHNlbGYpLg0KICBmdW5jdGlvbiBzcGxpdFdpdGhFc2NhcGUodmFsdWUsIHNwbGl0Q2hhciwgZXNjYXBlQ2hhcikgew0KICAgIHZhciByZXN1bHRzID0gW107DQogICAgdmFyIGVzY2FwZU1vZGUgPSBmYWxzZTsNCiAgICB2YXIgY3VycmVudFJlc3VsdCA9ICIiOw0KICAgIGZvciAodmFyIHBvcyA9IDA7IHBvcyA8IHZhbHVlLmxlbmd0aDsgcG9zKyspIHsNCiAgICAgIGlmICghZXNjYXBlTW9kZSkgew0KICAgICAgICBpZiAodmFsdWVbcG9zXSA9PT0gc3BsaXRDaGFyKSB7DQogICAgICAgICAgcmVzdWx0cy5wdXNoKGN1cnJlbnRSZXN1bHQpOw0KICAgICAgICAgIGN1cnJlbnRSZXN1bHQgPSAiIjsNCiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVtwb3NdID09PSBlc2NhcGVDaGFyKSB7DQogICAgICAgICAgZXNjYXBlTW9kZSA9IHRydWU7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgY3VycmVudFJlc3VsdCArPSB2YWx1ZVtwb3NdOw0KICAgICAgICB9DQogICAgICB9IGVsc2Ugew0KICAgICAgICBjdXJyZW50UmVzdWx0ICs9IHZhbHVlW3Bvc107DQogICAgICAgIGVzY2FwZU1vZGUgPSBmYWxzZTsNCiAgICAgIH0NCiAgICB9DQogICAgaWYgKGN1cnJlbnRSZXN1bHQgIT09ICIiKSB7DQogICAgICByZXN1bHRzLnB1c2goY3VycmVudFJlc3VsdCk7DQogICAgfQ0KICAgIHJldHVybiByZXN1bHRzOw0KICB9DQogIC8vIEZ1bmN0aW9uIGF1dGhvcmVkIGJ5IFlpaHVpL0pKIEFsbGFpcmUNCiAgd2luZG93LkhUTUxXaWRnZXRzLmV2YWx1YXRlU3RyaW5nTWVtYmVyID0gZnVuY3Rpb24obywgbWVtYmVyKSB7DQogICAgdmFyIHBhcnRzID0gc3BsaXRXaXRoRXNjYXBlKG1lbWJlciwgJy4nLCAnXFwnKTsNCiAgICBmb3IgKHZhciBpID0gMCwgbCA9IHBhcnRzLmxlbmd0aDsgaSA8IGw7IGkrKykgew0KICAgICAgdmFyIHBhcnQgPSBwYXJ0c1tpXTsNCiAgICAgIC8vIHBhcnQgbWF5IGJlIGEgY2hhcmFjdGVyIG9yICdudW1lcmljJyBtZW1iZXIgbmFtZQ0KICAgICAgaWYgKG8gIT09IG51bGwgJiYgdHlwZW9mIG8gPT09ICJvYmplY3QiICYmIHBhcnQgaW4gbykgew0KICAgICAgICBpZiAoaSA9PSAobCAtIDEpKSB7IC8vIGlmIHdlIGFyZSBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lIHRoZW4gZXZhbHVsYXRlDQogICAgICAgICAgaWYgKHR5cGVvZiBvW3BhcnRdID09PSAic3RyaW5nIikNCiAgICAgICAgICAgIG9bcGFydF0gPSBldmFsKCIoIiArIG9bcGFydF0gKyAiKSIpOw0KICAgICAgICB9IGVsc2UgeyAvLyBvdGhlcndpc2UgY29udGludWUgdG8gbmV4dCBlbWJlZGRlZCBvYmplY3QNCiAgICAgICAgICBvID0gb1twYXJ0XTsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgIH0NCiAgfTsNCg0KICAvLyBSZXRyaWV2ZSB0aGUgSFRNTFdpZGdldCBpbnN0YW5jZSAoaS5lLiB0aGUgcmV0dXJuIHZhbHVlIG9mIGFuDQogIC8vIEhUTUxXaWRnZXQgYmluZGluZydzIGluaXRpYWxpemUoKSBvciBmYWN0b3J5KCkgZnVuY3Rpb24pDQogIC8vIGFzc29jaWF0ZWQgd2l0aCBhbiBlbGVtZW50LCBvciBudWxsIGlmIG5vbmUuDQogIHdpbmRvdy5IVE1MV2lkZ2V0cy5nZXRJbnN0YW5jZSA9IGZ1bmN0aW9uKGVsKSB7DQogICAgcmV0dXJuIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiKTsNCiAgfTsNCg0KICAvLyBGaW5kcyB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgc2NvcGUgdGhhdCBtYXRjaGVzIHRoZSBzZWxlY3RvciwNCiAgLy8gYW5kIHJldHVybnMgdGhlIEhUTUxXaWRnZXQgaW5zdGFuY2UgKGkuZS4gdGhlIHJldHVybiB2YWx1ZSBvZg0KICAvLyBhbiBIVE1MV2lkZ2V0IGJpbmRpbmcncyBpbml0aWFsaXplKCkgb3IgZmFjdG9yeSgpIGZ1bmN0aW9uKQ0KICAvLyBhc3NvY2lhdGVkIHdpdGggdGhhdCBlbGVtZW50LCBpZiBhbnkuIElmIG5vIGVsZW1lbnQgbWF0Y2hlcyB0aGUNCiAgLy8gc2VsZWN0b3IsIG9yIHRoZSBmaXJzdCBtYXRjaGluZyBlbGVtZW50IGhhcyBubyBIVE1MV2lkZ2V0DQogIC8vIGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCBpdCwgdGhlbiBudWxsIGlzIHJldHVybmVkLg0KICAvLw0KICAvLyBUaGUgc2NvcGUgYXJndW1lbnQgaXMgb3B0aW9uYWwsIGFuZCBkZWZhdWx0cyB0byB3aW5kb3cuZG9jdW1lbnQuDQogIHdpbmRvdy5IVE1MV2lkZ2V0cy5maW5kID0gZnVuY3Rpb24oc2NvcGUsIHNlbGVjdG9yKSB7DQogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSkgew0KICAgICAgc2VsZWN0b3IgPSBzY29wZTsNCiAgICAgIHNjb3BlID0gZG9jdW1lbnQ7DQogICAgfQ0KDQogICAgdmFyIGVsID0gc2NvcGUucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7DQogICAgaWYgKGVsID09PSBudWxsKSB7DQogICAgICByZXR1cm4gbnVsbDsNCiAgICB9IGVsc2Ugew0KICAgICAgcmV0dXJuIHdpbmRvdy5IVE1MV2lkZ2V0cy5nZXRJbnN0YW5jZShlbCk7DQogICAgfQ0KICB9Ow0KDQogIC8vIEZpbmRzIGFsbCBlbGVtZW50cyBpbiB0aGUgc2NvcGUgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3IsIGFuZA0KICAvLyByZXR1cm5zIHRoZSBIVE1MV2lkZ2V0IGluc3RhbmNlcyAoaS5lLiB0aGUgcmV0dXJuIHZhbHVlcyBvZg0KICAvLyBhbiBIVE1MV2lkZ2V0IGJpbmRpbmcncyBpbml0aWFsaXplKCkgb3IgZmFjdG9yeSgpIGZ1bmN0aW9uKQ0KICAvLyBhc3NvY2lhdGVkIHdpdGggdGhlIGVsZW1lbnRzLCBpbiBhbiBhcnJheS4gSWYgZWxlbWVudHMgdGhhdA0KICAvLyBtYXRjaCB0aGUgc2VsZWN0b3IgZG9uJ3QgaGF2ZSBhbiBhc3NvY2lhdGVkIEhUTUxXaWRnZXQNCiAgLy8gaW5zdGFuY2UsIHRoZSByZXR1cm5lZCBhcnJheSB3aWxsIGNvbnRhaW4gbnVsbHMuDQogIC8vDQogIC8vIFRoZSBzY29wZSBhcmd1bWVudCBpcyBvcHRpb25hbCwgYW5kIGRlZmF1bHRzIHRvIHdpbmRvdy5kb2N1bWVudC4NCiAgd2luZG93LkhUTUxXaWRnZXRzLmZpbmRBbGwgPSBmdW5jdGlvbihzY29wZSwgc2VsZWN0b3IpIHsNCiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7DQogICAgICBzZWxlY3RvciA9IHNjb3BlOw0KICAgICAgc2NvcGUgPSBkb2N1bWVudDsNCiAgICB9DQoNCiAgICB2YXIgbm9kZXMgPSBzY29wZS5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTsNCiAgICB2YXIgcmVzdWx0cyA9IFtdOw0KICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHsNCiAgICAgIHJlc3VsdHMucHVzaCh3aW5kb3cuSFRNTFdpZGdldHMuZ2V0SW5zdGFuY2Uobm9kZXNbaV0pKTsNCiAgICB9DQogICAgcmV0dXJuIHJlc3VsdHM7DQogIH07DQoNCiAgdmFyIHBvc3RSZW5kZXJIYW5kbGVycyA9IFtdOw0KICBmdW5jdGlvbiBpbnZva2VQb3N0UmVuZGVySGFuZGxlcnMoKSB7DQogICAgd2hpbGUgKHBvc3RSZW5kZXJIYW5kbGVycy5sZW5ndGgpIHsNCiAgICAgIHZhciBoYW5kbGVyID0gcG9zdFJlbmRlckhhbmRsZXJzLnNoaWZ0KCk7DQogICAgICBpZiAoaGFuZGxlcikgew0KICAgICAgICBoYW5kbGVyKCk7DQogICAgICB9DQogICAgfQ0KICB9DQoNCiAgLy8gUmVnaXN0ZXIgdGhlIGdpdmVuIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGludm9rZWQgYWZ0ZXIgdGhlDQogIC8vIG5leHQgdGltZSBzdGF0aWMgd2lkZ2V0cyBhcmUgcmVuZGVyZWQuDQogIHdpbmRvdy5IVE1MV2lkZ2V0cy5hZGRQb3N0UmVuZGVySGFuZGxlciA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7DQogICAgcG9zdFJlbmRlckhhbmRsZXJzLnB1c2goY2FsbGJhY2spOw0KICB9Ow0KDQogIC8vIFRha2VzIGEgbmV3LXN0eWxlIGluc3RhbmNlLWJvdW5kIGRlZmluaXRpb24sIGFuZCByZXR1cm5zIGFuDQogIC8vIG9sZC1zdHlsZSBjbGFzcy1ib3VuZCBkZWZpbml0aW9uLiBUaGlzIHNhdmVzIHVzIGZyb20gaGF2aW5nDQogIC8vIHRvIHJld3JpdGUgYWxsIHRoZSBsb2dpYyBpbiB0aGlzIGZpbGUgdG8gYWNjb21vZGF0ZSBib3RoDQogIC8vIHR5cGVzIG9mIGRlZmluaXRpb25zLg0KICBmdW5jdGlvbiBjcmVhdGVMZWdhY3lEZWZpbml0aW9uQWRhcHRlcihkZWZuKSB7DQogICAgdmFyIHJlc3VsdCA9IHsNCiAgICAgIG5hbWU6IGRlZm4ubmFtZSwNCiAgICAgIHR5cGU6IGRlZm4udHlwZSwNCiAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKGVsLCB3aWR0aCwgaGVpZ2h0KSB7DQogICAgICAgIHJldHVybiBkZWZuLmZhY3RvcnkoZWwsIHdpZHRoLCBoZWlnaHQpOw0KICAgICAgfSwNCiAgICAgIHJlbmRlclZhbHVlOiBmdW5jdGlvbihlbCwgeCwgaW5zdGFuY2UpIHsNCiAgICAgICAgcmV0dXJuIGluc3RhbmNlLnJlbmRlclZhbHVlKHgpOw0KICAgICAgfSwNCiAgICAgIHJlc2l6ZTogZnVuY3Rpb24oZWwsIHdpZHRoLCBoZWlnaHQsIGluc3RhbmNlKSB7DQogICAgICAgIHJldHVybiBpbnN0YW5jZS5yZXNpemUod2lkdGgsIGhlaWdodCk7DQogICAgICB9DQogICAgfTsNCg0KICAgIGlmIChkZWZuLmZpbmQpDQogICAgICByZXN1bHQuZmluZCA9IGRlZm4uZmluZDsNCiAgICBpZiAoZGVmbi5yZW5kZXJFcnJvcikNCiAgICAgIHJlc3VsdC5yZW5kZXJFcnJvciA9IGRlZm4ucmVuZGVyRXJyb3I7DQogICAgaWYgKGRlZm4uY2xlYXJFcnJvcikNCiAgICAgIHJlc3VsdC5jbGVhckVycm9yID0gZGVmbi5jbGVhckVycm9yOw0KDQogICAgcmV0dXJuIHJlc3VsdDsNCiAgfQ0KfSkoKTsNCg0K"></script>
<link href="data:text/css;charset=utf-8,%2Ed3horizon%20%2Ehorizon%20%7B%0Aborder%2Dtop%3A%20solid%201px%20%23000%3B%0Aborder%2Dbottom%3A%20solid%201px%20%23000%3B%0Aoverflow%3A%20hidden%3B%0Aposition%3A%20relative%3B%0A%7D%0A%2Ed3horizon%20%2Ehorizon%20%2B%20%2Ehorizon%20%7B%0Aborder%2Dtop%3A%20none%3B%0A%7D%0A%2Ed3horizon%20%2Ehorizon%20canvas%20%7B%0Adisplay%3A%20block%3B%0Aimage%2Drendering%3A%20pixelated%3B%0A%7D%0A%2Ed3horizon%20%2Ehorizon%20%2Etitle%2C%0A%2Ed3horizon%20%2Ehorizon%20%2Evalue%20%7B%0Abottom%3A%200%3B%0Aline%2Dheight%3A%2030px%3B%0Amargin%3A%200%206px%3B%0Aposition%3A%20absolute%3B%0Afont%2Dfamily%3A%20sans%2Dserif%3B%0Atext%2Dshadow%3A%200%201px%200%20rgba%28255%2C255%2C255%2C%2E5%29%3B%0Awhite%2Dspace%3A%20nowrap%3B%0A%7D%0A%2Ed3horizon%20%2Ehorizon%20%2Etitle%20%7B%0Aleft%3A%200%3B%0A%7D%0A%2Ed3horizon%20%2Ehorizon%20%2Evalue%20%7B%0Aright%3A%200%3B%0A%7D%0A" rel="stylesheet" />
<script src="data:application/x-javascript;base64,KGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT0iZnVuY3Rpb24iJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGY9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIrbysiJyIpO3Rocm93IGYuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsZn12YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT0iZnVuY3Rpb24iJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSh7MTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci8vIGh0dHBzOi8vZ2l0aHViLmNvbS9rbWFuZG92L2QzLWhvcml6b24tY2hhcnQgVmVyc2lvbiAwLjAuNi4gQ29weXJpZ2h0IDIwMTYgS2lyaWwgTWFuZG92LgooZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkgewogICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gZmFjdG9yeShyZXF1aXJlKCdkMy1zZWxlY3Rpb24nKSwgcmVxdWlyZSgnZDMtc2NhbGUnKSwgcmVxdWlyZSgnZDMtYXhpcycpLCByZXF1aXJlKCdkMy1hcnJheScpKSA6CiAgICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWydkMy1zZWxlY3Rpb24nLCAnZDMtc2NhbGUnLCAnZDMtYXhpcycsICdkMy1hcnJheSddLCBmYWN0b3J5KSA6CiAgICAoZmFjdG9yeShnbG9iYWwuZDMsZ2xvYmFsLmQzLGdsb2JhbC5kMyxnbG9iYWwuZDMpKTsKfSh0aGlzLCAoZnVuY3Rpb24gKGQzU2VsZWN0aW9uLGQzU2NhbGUsZDNBeGlzLGQzQXJyYXkpIHsgJ3VzZSBzdHJpY3QnOwoKZnVuY3Rpb24gaG9yaXpvbiAoKSB7DQoNCiAgICAvLyBkZWZhdWx0IHNldHRpbmdzOg0KICAgIC8vdmFyIGNvbG9ycyA9IFsnIzA4NTE5YycsJyMzMTgyYmQnLCcjNmJhZWQ2JywnI2JkZDdlNycsJyNiYWU0YjMnLCcjNzRjNDc2JywnIzMxYTM1NCcsJyMwMDZkMmMnXSwNCiAgICAvL3ZhciBjb2xvcnMgPSBbJyM0NTc1YjQnLCAnIzc0YWRkMScsICcjYWJkOWU5JywgJyNlMGYzZjgnLCAnI2ZlZTA5MCcsICcjZmRhZTYxJywgJyNmNDZkNDMnLCAnI2Q3MzAyNyddLA0KICAgIC8vdmFyIGNvbG9ycyA9IFsiIzVlNGZhMiIsICIjMzI4OGJkIiwgIiM2NmMyYTUiLCAiI2FiZGRhNCIsICIjZTZmNTk4IiwgIiNmZWUwOGIiLCAiI2ZkYWU2MSIsICIjZjQ2ZDQzIiwgIiNkNTNlNGYiLCAiIzllMDE0MiJdLA0KICAgIHZhciBjb2xvcnMgPSBbIiMzMTM2OTUiLCAiIzQ1NzViNCIsICIjNzRhZGQxIiwgIiNhYmQ5ZTkiLCAiI2ZlZTA5MCIsICIjZmRhZTYxIiwgIiNmNDZkNDMiLCAiI2Q3MzAyNyJdLA0KICAgICAgICBiYW5kcyA9IGNvbG9ycy5sZW5ndGggPj4gMSwgLy8gbnVtYmVyIG9mIGJhbmRzIGluIGVhY2ggZGlyZWN0aW9uIChwb3NpdGl2ZSAvIG5lZ2F0aXZlKQ0KICAgICAgICB3aWR0aCA9IDEwMDAsIC8vIHdpZHRoIGluIHBpeGVscw0KICAgICAgICBoZWlnaHQgPSAzMCwNCiAgICAgICAgb2Zmc2V0WCA9IDAsDQogICAgICAgIHN0ZXAgPSAxLA0KICAgICAgICBzcGFjaW5nID0gMCwNCiAgICAgICAgbW9kZSA9ICdvZmZzZXQnLA0KICAgICAgICBheGlzID0gbnVsbCwNCiAgICAgICAgdGl0bGUgPSBudWxsLA0KICAgICAgICBleHRlbnQgPSBudWxsLCAvLyB0aGUgZXh0ZW50IGlzIGRlcml2ZWQgZnJvbSB0aGUgZGF0YSwgdW5sZXNzIGV4cGxpY2l0bHkgc2V0IHZpYSAuZXh0ZW50KFttaW4sIG1heF0pDQogICAgICAgIC8veCA9IGQzLnNjYWxlTGluZWFyKCksIC8vIFRPRE86IHVzZSBvcmRpbmFsIHNjYWxlIGluc3RlYWQ/DQogICAgICAgIHggPSBudWxsLA0KICAgICAgICB5ID0gZDNTY2FsZS5zY2FsZUxpbmVhcigpLnJhbmdlKFswLCBoZWlnaHRdKSwNCiAgICAgICAgY2FudmFzID0gbnVsbDsNCg0KICAgIC8vIEFwcGVuZHMgYSBjYW52YXMgZWxlbWVudCB0byB0aGUgY3VycmVudCBlbGVtZW50DQogICAgLy8gYW5kIGRyYXdzIGEgaG9yaXpvbiBncmFwaCBiYXNlZCBvbiBkYXRhICYgc2V0dGluZ3MNCiAgICBmdW5jdGlvbiBob3Jpem9uQ2hhcnQoZGF0YSkgew0KDQogICAgICAgIHZhciBzZWxlY3Rpb24gPSBkM1NlbGVjdGlvbi5zZWxlY3QodGhpcyk7DQogICAgICAgIHZhciBkSW5jcmVtZW50ID0gc3RlcCArIHNwYWNpbmc7DQoNCiAgICAgICAgLy8gdXBkYXRlIHRoZSB3aWR0aA0KICAgICAgICAvL3dpZHRoID0gaG9yaXpvbi5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7DQogICAgICAgIHdpZHRoID0gZEluY3JlbWVudCAqIGRhdGEubGVuZ3RoOw0KICAgICAgICBjYW52YXMgPSBzZWxlY3Rpb24uYXBwZW5kKCdjYW52YXMnKTsNCg0KICAgICAgICBjYW52YXMNCiAgICAgICAgICAgIC5hdHRyKCd3aWR0aCcsIHdpZHRoKQ0KICAgICAgICAgICAgLmF0dHIoJ2hlaWdodCcsIGhlaWdodCk7DQoNCiAgICAgICAgc2VsZWN0aW9uLmFwcGVuZCgnc3BhbicpDQogICAgICAgICAgICAuYXR0cignY2xhc3MnLCAndGl0bGUnKQ0KICAgICAgICAgICAgLnRleHQodGl0bGUpOw0KDQogICAgICAgIHNlbGVjdGlvbi5hcHBlbmQoJ3NwYW4nKQ0KICAgICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ3ZhbHVlJyk7DQoNCiAgICAgICAgdmFyIGNvbnRleHQgPSBjYW52YXMubm9kZSgpLmdldENvbnRleHQoJzJkJyk7DQogICAgICAgIC8vY29udGV4dC5pbWFnZVNtb290aGluZ0VuYWJsZWQgPSBmYWxzZTsNCiAgICAgICAgLy9jb250ZXh0LnRyYW5zbGF0ZShtYXJnaW4ubGVmdCwgbWFyZ2luLnRvcCk7DQoNCiAgICAgICAgLy8gdXBkYXRlIHRoZSB5IHNjYWxlLCBiYXNlZCBvbiB0aGUgZGF0YSBleHRlbnRzDQogICAgICAgIHZhciBfZXh0ZW50ID0gZXh0ZW50IHx8IGQzQXJyYXkuZXh0ZW50KGRhdGEpOw0KDQogICAgICAgIHZhciBtYXggPSBNYXRoLm1heCgtX2V4dGVudFswXSwgX2V4dGVudFsxXSk7DQogICAgICAgIHkuZG9tYWluKFswLCBtYXhdKTsNCiAgICAgICAgLy94ID0gZDMuc2NhbGVUaW1lKCkuZG9tYWluW107DQogICAgICAgIGF4aXMgPSBkM0F4aXMuYXhpc1RvcCh4KS50aWNrcyg1KTsNCg0KICAgICAgICAvLyBEcmF3IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KICAgICAgICBjb250ZXh0LmNsZWFyUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTsNCiAgICAgICAgLy9jb250ZXh0LnRyYW5zbGF0ZSgwLjUsIDAuNSk7DQoNCiAgICAgICAgLy8gdGhlIGRhdGEgZnJhbWUgY3VycmVudGx5IGJlaW5nIHNob3duOg0KICAgICAgICB2YXIgaW5jcmVtZW50ID0gc3RlcCArIHNwYWNpbmcsDQogICAgICAgICAgICBzdGFydEluZGV4ID0gfn5NYXRoLm1heCgwLCAtKG9mZnNldFggLyBpbmNyZW1lbnQpKSwNCiAgICAgICAgICAgIGVuZEluZGV4ID0gfn5NYXRoLm1pbihkYXRhLmxlbmd0aCwgc3RhcnRJbmRleCArIHdpZHRoIC8gaW5jcmVtZW50KTsNCg0KICAgICAgICAvLyBza2lwIGRyYXdpbmcgaWYgdGhlcmUncyBubyBkYXRhIHRvIGJlIGRyYXduDQogICAgICAgIGlmIChzdGFydEluZGV4ID4gZGF0YS5sZW5ndGgpIHJldHVybjsNCg0KDQogICAgICAgIC8vIHdlIGFyZSBkcmF3aW5nIHBvc2l0aXZlICYgbmVnYXRpdmUgYmFuZHMgc2VwYXJhdGVseSB0byBhdm9pZCBtdXRhdGluZyBjYW52YXMgc3RhdGUNCiAgICAgICAgLy8gaHR0cDovL3d3dy5odG1sNXJvY2tzLmNvbS9lbi90dXRvcmlhbHMvY2FudmFzL3BlcmZvcm1hbmNlLw0KDQogICAgICAgIHZhciBuZWdhdGl2ZSA9IGZhbHNlOw0KICAgICAgICAvLyBkcmF3IHBvc2l0aXZlIGJhbmRzDQogICAgICAgIGZvciAodmFyIGIgPSAwOyBiIDwgYmFuZHM7IGIrKykgew0KICAgICAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSBjb2xvcnNbYmFuZHMgKyBiXTsNCg0KICAgICAgICAgICAgLy8gQWRqdXN0IHRoZSByYW5nZSBiYXNlZCBvbiB0aGUgY3VycmVudCBiYW5kIGluZGV4Lg0KICAgICAgICAgICAgdmFyIGJFeHRlbnRzID0gKGIgKyAxIC0gYmFuZHMpICogaGVpZ2h0Ow0KICAgICAgICAgICAgeS5yYW5nZShbYmFuZHMgKiBoZWlnaHQgKyBiRXh0ZW50cywgYkV4dGVudHNdKTsNCg0KICAgICAgICAgICAgLy8gb25seSB0aGUgY3VycmVudCBkYXRhIGZyYW1lIGlzIGJlaW5nIGRyYXduIGkuZS4gd2hhdCdzIHZpc2libGU6DQogICAgICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRJbmRleCwgdmFsdWU7IGkgPCBlbmRJbmRleDsgaSsrKSB7DQogICAgICAgICAgICAgICAgdmFsdWUgPSBkYXRhW2ldOw0KICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA8PSAwKSB7IG5lZ2F0aXZlID0gdHJ1ZTsgY29udGludWU7IH0NCiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgY29udGludWU7DQogICAgICAgICAgICAgICAgY29udGV4dC5maWxsUmVjdChvZmZzZXRYICsgaSAqIGluY3JlbWVudCwgeSh2YWx1ZSksIHN0ZXAsIHkoMCkgLSB5KHZhbHVlKSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICAvLyBkcmF3IG5lZ2F0aXZlIGJhbmRzDQogICAgICAgIGlmIChuZWdhdGl2ZSkgew0KDQogICAgICAgICAgICAvLyBtaXJyb3IgdGhlIG5lZ2F0aXZlIGJhbmRzLCBieSBmbGlwcGluZyB0aGUgY2FudmFzDQogICAgICAgICAgICBpZiAobW9kZSA9PT0gJ29mZnNldCcpIHsNCiAgICAgICAgICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZSgwLCBoZWlnaHQpOw0KICAgICAgICAgICAgICAgIGNvbnRleHQuc2NhbGUoMSwgLTEpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBmb3IgKGIgPSAwOyBiIDwgYmFuZHM7IGIrKykgew0KICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gY29sb3JzW2JhbmRzIC0gYiAtIDFdOw0KDQogICAgICAgICAgICAgICAgLy8gQWRqdXN0IHRoZSByYW5nZSBiYXNlZCBvbiB0aGUgY3VycmVudCBiYW5kIGluZGV4Lg0KICAgICAgICAgICAgICAgIGJFeHRlbnRzID0gKGIgKyAxIC0gYmFuZHMpICogaGVpZ2h0Ow0KICAgICAgICAgICAgICAgIHkucmFuZ2UoW2JhbmRzICogaGVpZ2h0ICsgYkV4dGVudHMsIGJFeHRlbnRzXSk7DQoNCiAgICAgICAgICAgICAgICAvLyBvbmx5IHRoZSBjdXJyZW50IGRhdGEgZnJhbWUgaXMgYmVpbmcgZHJhd24gaS5lLiB3aGF0J3MgdmlzaWJsZToNCiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gc3RhcnRJbmRleCwgbnZhbHVlOyBqIDwgZW5kSW5kZXg7IGorKykgew0KICAgICAgICAgICAgICAgICAgICBudmFsdWUgPSBkYXRhW2pdOw0KICAgICAgICAgICAgICAgICAgICBpZiAobnZhbHVlID49IDApIGNvbnRpbnVlOw0KICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxSZWN0KG9mZnNldFggKyBqICogaW5jcmVtZW50LCB5KC1udmFsdWUpLCBzdGVwLCB5KDApIC0geSgtbnZhbHVlKSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgLyoNCiAgICAgICAgLy8gT2Zmc2NyZWVuIERyYXcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KICAgICAgICBmdW5jdGlvbiBjcmVhdGVPZmZzY3JlZW5DYW52YXMod2lkdGgsaGVpZ2h0KXsNCiAgICAgICAgICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTsNCiAgICAgICAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoOw0KICAgICAgICAgICAgY2FudmFzLmhlaWdodCA9IGhlaWdodDsNCiAgICAgICAgICAgIHJldHVybiBjYW52YXM7DQogICAgICAgIH0NCg0KICAgICAgICB2YXIgb2Zmc2NyZWVuQ2FudmFzID0gY3JlYXRlT2Zmc2NyZWVuQ2FudmFzKGluY3JlbWVudCAqIGRhdGEubGVuZ3RoLCBoZWlnaHQpOw0KICAgICAgICB2YXIgb2Zmc2NyZWVuQ29udGV4dCA9IG9mZnNjcmVlbkNhbnZhcy5nZXRDb250ZXh0KCcyZCcpOw0KICAgICAgICAvLyBkcmF3IGVhY2ggYmFuZDoNCiAgICAgICAgZm9yICh2YXIgYiA9IDA7IGIgPCBiYW5kczsgYisrKSB7DQogICAgICAgICAgICBvZmZzY3JlZW5Db250ZXh0LmZpbGxTdHlsZSA9IGNvbG9yc1tiXTsNCg0KICAgICAgICAgICAgLy8gQWRqdXN0IHRoZSByYW5nZSBiYXNlZCBvbiB0aGUgY3VycmVudCBiYW5kIGluZGV4Lg0KICAgICAgICAgICAgdmFyIHkwID0gKGIgKyAxIC0gYmFuZHMpICogaGVpZ2h0Ow0KICAgICAgICAgICAgeS5yYW5nZShbYmFuZHMgKiBoZWlnaHQgKyB5MCwgeTBdKTsNCg0KICAgICAgICAgICAgLy8gZHJhdyB0aGUgd2hvbGUgcGVyaW9kIG9uIGFuIG9mZnNjcmVlbiBjYW52YXMNCiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgb2Zmc2NyZWVuQ29udGV4dC5maWxsUmVjdChpICogaW5jcmVtZW50LCB5KGRhdGFbaV0pLCBzdGVwLCB5KDApIC0geShkYXRhW2ldKSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICB2YXIgb25zY3JlZW5JbWFnZTsNCiAgICAgICAgX2RyYXcgPSBmdW5jdGlvbigpIHsNCiAgICAgICAgICAgIG9uc2NyZWVuSW1hZ2UgPSBvZmZzY3JlZW5Db250ZXh0LmdldEltYWdlRGF0YSgtb2Zmc2V0WCwgMCwgd2lkdGgsIGhlaWdodCk7DQogICAgICAgICAgICBjb250ZXh0LnB1dEltYWdlRGF0YShvbnNjcmVlbkltYWdlLCAwLCAwKTsNCg0KICAgICAgICAgICAgLy9jb250ZXh0LmNsZWFyUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTsNCiAgICAgICAgICAgIC8vY29udGV4dC50cmFuc2xhdGUob2Zmc2V0WCwgMCk7DQogICAgICAgICAgICAvL2NvbnRleHQuZHJhd0ltYWdlKG9mZnNjcmVlbkNhbnZhcywgb2Zmc2V0WCwgMCk7DQogICAgICAgIH07DQogICAgICAgICovDQogICAgfQ0KDQogICAgaG9yaXpvbkNoYXJ0LmF4aXMgPSBmdW5jdGlvbiAoXykgew0KICAgICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChheGlzID0gXywgaG9yaXpvbkNoYXJ0KSA6IGF4aXM7DQogICAgfTsNCg0KICAgIGhvcml6b25DaGFydC5jYW52YXMgPSBmdW5jdGlvbiAoXykgew0KICAgICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChjYW52YXMgPSBfLCBob3Jpem9uQ2hhcnQpIDogY2FudmFzOw0KICAgIH07DQoNCiAgICAvLyBBcnJheSBvZiBjb2xvcnMgcmVwcmVzZW50aW5nIHRoZSBudW1iZXIgb2YgYmFuZHMNCiAgICBob3Jpem9uQ2hhcnQuY29sb3JzID0gZnVuY3Rpb24gKF8pIHsNCiAgICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gY29sb3JzOw0KICAgICAgICBjb2xvcnMgPSBfOw0KDQogICAgICAgIC8vIHVwZGF0ZSB0aGUgbnVtYmVyIG9mIGJhbmRzDQogICAgICAgIGJhbmRzID0gY29sb3JzLmxlbmd0aCA+PiAxOw0KDQogICAgICAgIHJldHVybiBob3Jpem9uQ2hhcnQ7DQogICAgfTsNCg0KICAgIC8vIGdldC9zZXQgdGhlIGhlaWdodCBvZiB0aGUgZ3JhcGgNCiAgICBob3Jpem9uQ2hhcnQuaGVpZ2h0ID0gZnVuY3Rpb24gKF8pIHsNCiAgICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoaGVpZ2h0ID0gXywgaG9yaXpvbkNoYXJ0KSA6IGhlaWdodDsNCiAgICB9Ow0KDQogICAgLy8gZ2V0L3NldCB0aGUgc3RlcCBvZiB0aGUgZ3JhcGgsIGkuZS4gdGhlIHdpZHRoIG9mIGVhY2ggYmFyDQogICAgaG9yaXpvbkNoYXJ0LnN0ZXAgPSBmdW5jdGlvbiAoXykgew0KICAgICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzdGVwID0gXywgaG9yaXpvbkNoYXJ0KSA6IHN0ZXA7DQogICAgfTsNCg0KICAgIC8vIGdldC9zZXQgdGhlIHNwYWNpbmcgYmV0d2VlbiB0aGUgYmFycyBvZiB0aGUgZ3JhcGgNCiAgICBob3Jpem9uQ2hhcnQuc3BhY2luZyA9IGZ1bmN0aW9uIChfKSB7DQogICAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHNwYWNpbmcgPSBfLCBob3Jpem9uQ2hhcnQpIDogc3BhY2luZzsNCiAgICB9Ow0KDQogICAgLy8gZ2V0L3NldCB0aGUgdGl0bGUgb2YgdGhlIGhvcml6b24NCiAgICBob3Jpem9uQ2hhcnQudGl0bGUgPSBmdW5jdGlvbiAoXykgew0KICAgICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aXRsZSA9IF8sIGhvcml6b25DaGFydCkgOiB0aXRsZTsNCiAgICB9Ow0KDQogICAgLy8gbWlycm9yIG9yIG9mZnNldA0KICAgIGhvcml6b25DaGFydC5tb2RlID0gZnVuY3Rpb24gKF8pIHsNCiAgICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAobW9kZSA9IF8sIGhvcml6b25DaGFydCkgOiBtb2RlOw0KICAgIH07DQoNCiAgICAvLyBnZXQvc2V0IHRoZSBleHRlbnRzIG9mIHRoZSBZIGF4aXMuIElmIG5vdCBzZXQgdGhlIGV4dGVudHMgYXJlIGRlcml2ZWQgZnJvbSB0aGUgZGF0YQ0KICAgIGhvcml6b25DaGFydC5leHRlbnQgPSBmdW5jdGlvbiAoXykgew0KICAgICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChleHRlbnQgPSBfLCBob3Jpem9uQ2hhcnQpIDogZXh0ZW50Ow0KICAgIH07DQoNCiAgICBob3Jpem9uQ2hhcnQub2Zmc2V0WCA9IGZ1bmN0aW9uIChfKSB7DQogICAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKG9mZnNldFggPSBfLCBob3Jpem9uQ2hhcnQpIDogb2Zmc2V0WDsNCiAgICB9Ow0KDQogICAgLy8gdGhlIGRhdGEgZnJhbWUgY3VycmVudGx5IGJlaW5nIHNob3duOg0KICAgIGhvcml6b25DaGFydC5pbmRleEV4dGVudCA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgdmFyIGluY3JlbWVudCA9IHN0ZXAgKyBzcGFjaW5nLA0KICAgICAgICAgICAgc3RhcnRJbmRleCA9IC1vZmZzZXRYIC8gaW5jcmVtZW50LA0KICAgICAgICAgICAgZW5kSW5kZXggPSBzdGFydEluZGV4ICsgd2lkdGggLyBpbmNyZW1lbnQ7DQoNCiAgICAgICAgcmV0dXJuIFtzdGFydEluZGV4LCBlbmRJbmRleF07DQogICAgfTsNCg0KICAgIHJldHVybiBob3Jpem9uQ2hhcnQ7DQoNCn0KCnZhciBIVE1MV2lkZ2V0cyA9IHdpbmRvdy5IVE1MV2lkZ2V0czsKCkhUTUxXaWRnZXRzLndpZGdldCh7DQoNCiAgbmFtZTogJ2QzaG9yaXpvbicsDQoNCiAgdHlwZTogJ291dHB1dCcsDQoNCiAgZmFjdG9yeTogZnVuY3Rpb24oZWwsIHdpZHRoLCBoZWlnaHQpIHsNCg0KICAgIHJldHVybiB7DQoNCiAgICAgIGNoYXJ0OiBudWxsLA0KDQogICAgICByZW5kZXJWYWx1ZTogZnVuY3Rpb24oeCkgew0KICAgICAgICB2YXIgaG9yaXpvbkNoYXJ0Ow0KDQogICAgICAgIGlmKHRoaXMuY2hhcnQpIHsNCiAgICAgICAgICBob3Jpem9uQ2hhcnQgPSB0aGlzLmNoYXJ0Ow0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgIHRoaXMuY2hhcnQgPSBob3Jpem9uQ2hhcnQgPSBob3Jpem9uKCk7DQogICAgICAgIH0NCg0KDQogICAgICAgIE9iamVjdC5rZXlzKHgub3B0aW9ucykubWFwKGZ1bmN0aW9uKGt5KSB7DQogICAgICAgICAgaWYoaG9yaXpvbkNoYXJ0W2t5XSkgew0KICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgaG9yaXpvbkNoYXJ0W2t5XSh4Lm9wdGlvbnNba3ldKTsNCiAgICAgICAgICAgIH0gY2F0Y2goZSkgew0KICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdvcHRpb24gJyArIGt5ICsgImRvZXMgbm90IHNlZW0gc3VwcG9ydGVkLiIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgfSk7DQoNCiAgICAgICAgLy8gYmFkIGhhY2sgdG8gZml0IGNoYXJ0IGJ5IGZvcmNpbmcgc3RlcA0KICAgICAgICAvLyAgbmVlZCB0byBmaXggdGhpcw0KICAgICAgICB2YXIgd2lkdGggPSB4Lm9wdGlvbnMud2lkdGggfHwgZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7DQogICAgICAgIGhvcml6b25DaGFydC5zdGVwKHdpZHRoL3guZGF0YVswXS5sZW5ndGgpOw0KDQogICAgICAgIC8vIGJydXRlIGZvcmNlIHJlbW92ZSBhbnkgcHJldmlvdXMgaG9yaXpvbnMNCiAgICAgICAgLy8gIHdpbGwgbmVlZCB0byBpbXByb3ZlIHRoaXMgaW4gZnV0dXJlDQogICAgICAgIGQzU2VsZWN0aW9uLnNlbGVjdChlbCkuc2VsZWN0QWxsKCcuaG9yaXpvbicpLnJlbW92ZSgpOw0KDQogICAgICAgIHZhciBob3Jpem9ucyA9IGQzU2VsZWN0aW9uLnNlbGVjdChlbCkuc2VsZWN0QWxsKCcuaG9yaXpvbicpDQogICAgICAgICAgLmRhdGEoeC5kYXRhKQ0KICAgICAgICAgIC5lbnRlcigpDQogICAgICAgICAgLmFwcGVuZCgnZGl2Jyk7DQoNCiAgICAgICAgaG9yaXpvbnMNCiAgICAgICAgICAuYXR0cignY2xhc3MnLCAnaG9yaXpvbicpDQogICAgICAgICAgLmVhY2goaG9yaXpvbkNoYXJ0KTsNCg0KICAgICAgfSwNCg0KICAgICAgcmVzaXplOiBmdW5jdGlvbih3aWR0aCwgaGVpZ2h0KSB7DQoNCiAgICAgICAgLy8gVE9ETzogY29kZSB0byByZS1yZW5kZXIgdGhlIHdpZGdldCB3aXRoIGEgbmV3IHNpemUNCg0KICAgICAgfQ0KDQogICAgfTsNCiAgfQ0KfSk7Cgp9KSkpOwp9LHsiZDMtYXJyYXkiOjIsImQzLWF4aXMiOjMsImQzLXNjYWxlIjo4LCJkMy1zZWxlY3Rpb24iOjl9XSwyOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLy8gaHR0cHM6Ly9kM2pzLm9yZy9kMy1hcnJheS8gVmVyc2lvbiAxLjEuMS4gQ29weXJpZ2h0IDIwMTcgTWlrZSBCb3N0b2NrLgooZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkgewoJdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gZmFjdG9yeShleHBvcnRzKSA6Cgl0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWydleHBvcnRzJ10sIGZhY3RvcnkpIDoKCShmYWN0b3J5KChnbG9iYWwuZDMgPSBnbG9iYWwuZDMgfHwge30pKSk7Cn0odGhpcywgKGZ1bmN0aW9uIChleHBvcnRzKSB7ICd1c2Ugc3RyaWN0JzsKCnZhciBhc2NlbmRpbmcgPSBmdW5jdGlvbihhLCBiKSB7CiAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiBhID49IGIgPyAwIDogTmFOOwp9OwoKdmFyIGJpc2VjdG9yID0gZnVuY3Rpb24oY29tcGFyZSkgewogIGlmIChjb21wYXJlLmxlbmd0aCA9PT0gMSkgY29tcGFyZSA9IGFzY2VuZGluZ0NvbXBhcmF0b3IoY29tcGFyZSk7CiAgcmV0dXJuIHsKICAgIGxlZnQ6IGZ1bmN0aW9uKGEsIHgsIGxvLCBoaSkgewogICAgICBpZiAobG8gPT0gbnVsbCkgbG8gPSAwOwogICAgICBpZiAoaGkgPT0gbnVsbCkgaGkgPSBhLmxlbmd0aDsKICAgICAgd2hpbGUgKGxvIDwgaGkpIHsKICAgICAgICB2YXIgbWlkID0gbG8gKyBoaSA+Pj4gMTsKICAgICAgICBpZiAoY29tcGFyZShhW21pZF0sIHgpIDwgMCkgbG8gPSBtaWQgKyAxOwogICAgICAgIGVsc2UgaGkgPSBtaWQ7CiAgICAgIH0KICAgICAgcmV0dXJuIGxvOwogICAgfSwKICAgIHJpZ2h0OiBmdW5jdGlvbihhLCB4LCBsbywgaGkpIHsKICAgICAgaWYgKGxvID09IG51bGwpIGxvID0gMDsKICAgICAgaWYgKGhpID09IG51bGwpIGhpID0gYS5sZW5ndGg7CiAgICAgIHdoaWxlIChsbyA8IGhpKSB7CiAgICAgICAgdmFyIG1pZCA9IGxvICsgaGkgPj4+IDE7CiAgICAgICAgaWYgKGNvbXBhcmUoYVttaWRdLCB4KSA+IDApIGhpID0gbWlkOwogICAgICAgIGVsc2UgbG8gPSBtaWQgKyAxOwogICAgICB9CiAgICAgIHJldHVybiBsbzsKICAgIH0KICB9Owp9OwoKZnVuY3Rpb24gYXNjZW5kaW5nQ29tcGFyYXRvcihmKSB7CiAgcmV0dXJuIGZ1bmN0aW9uKGQsIHgpIHsKICAgIHJldHVybiBhc2NlbmRpbmcoZihkKSwgeCk7CiAgfTsKfQoKdmFyIGFzY2VuZGluZ0Jpc2VjdCA9IGJpc2VjdG9yKGFzY2VuZGluZyk7CnZhciBiaXNlY3RSaWdodCA9IGFzY2VuZGluZ0Jpc2VjdC5yaWdodDsKdmFyIGJpc2VjdExlZnQgPSBhc2NlbmRpbmdCaXNlY3QubGVmdDsKCnZhciBwYWlycyA9IGZ1bmN0aW9uKGFycmF5LCBmKSB7CiAgaWYgKGYgPT0gbnVsbCkgZiA9IHBhaXI7CiAgdmFyIGkgPSAwLCBuID0gYXJyYXkubGVuZ3RoIC0gMSwgcCA9IGFycmF5WzBdLCBwYWlycyA9IG5ldyBBcnJheShuIDwgMCA/IDAgOiBuKTsKICB3aGlsZSAoaSA8IG4pIHBhaXJzW2ldID0gZihwLCBwID0gYXJyYXlbKytpXSk7CiAgcmV0dXJuIHBhaXJzOwp9OwoKZnVuY3Rpb24gcGFpcihhLCBiKSB7CiAgcmV0dXJuIFthLCBiXTsKfQoKdmFyIGNyb3NzID0gZnVuY3Rpb24oYSwgYiwgZikgewogIHZhciBuYSA9IGEubGVuZ3RoLCBuYiA9IGIubGVuZ3RoLCBjID0gbmV3IEFycmF5KG5hICogbmIpLCBpYSwgaWIsIGljLCB2YTsKICBpZiAoZiA9PSBudWxsKSBmID0gcGFpcjsKICBmb3IgKGlhID0gaWMgPSAwOyBpYSA8IG5hOyArK2lhKSBmb3IgKHZhID0gYVtpYV0sIGliID0gMDsgaWIgPCBuYjsgKytpYiwgKytpYykgY1tpY10gPSBmKHZhLCBiW2liXSk7CiAgcmV0dXJuIGM7Cn07Cgp2YXIgZGVzY2VuZGluZyA9IGZ1bmN0aW9uKGEsIGIpIHsKICByZXR1cm4gYiA8IGEgPyAtMSA6IGIgPiBhID8gMSA6IGIgPj0gYSA/IDAgOiBOYU47Cn07Cgp2YXIgbnVtYmVyID0gZnVuY3Rpb24oeCkgewogIHJldHVybiB4ID09PSBudWxsID8gTmFOIDogK3g7Cn07Cgp2YXIgdmFyaWFuY2UgPSBmdW5jdGlvbihhcnJheSwgZikgewogIHZhciBuID0gYXJyYXkubGVuZ3RoLAogICAgICBtID0gMCwKICAgICAgYSwKICAgICAgZCwKICAgICAgcyA9IDAsCiAgICAgIGkgPSAtMSwKICAgICAgaiA9IDA7CgogIGlmIChmID09IG51bGwpIHsKICAgIHdoaWxlICgrK2kgPCBuKSB7CiAgICAgIGlmICghaXNOYU4oYSA9IG51bWJlcihhcnJheVtpXSkpKSB7CiAgICAgICAgZCA9IGEgLSBtOwogICAgICAgIG0gKz0gZCAvICsrajsKICAgICAgICBzICs9IGQgKiAoYSAtIG0pOwogICAgICB9CiAgICB9CiAgfQoKICBlbHNlIHsKICAgIHdoaWxlICgrK2kgPCBuKSB7CiAgICAgIGlmICghaXNOYU4oYSA9IG51bWJlcihmKGFycmF5W2ldLCBpLCBhcnJheSkpKSkgewogICAgICAgIGQgPSBhIC0gbTsKICAgICAgICBtICs9IGQgLyArK2o7CiAgICAgICAgcyArPSBkICogKGEgLSBtKTsKICAgICAgfQogICAgfQogIH0KCiAgaWYgKGogPiAxKSByZXR1cm4gcyAvIChqIC0gMSk7Cn07Cgp2YXIgZGV2aWF0aW9uID0gZnVuY3Rpb24oYXJyYXksIGYpIHsKICB2YXIgdiA9IHZhcmlhbmNlKGFycmF5LCBmKTsKICByZXR1cm4gdiA/IE1hdGguc3FydCh2KSA6IHY7Cn07Cgp2YXIgZXh0ZW50ID0gZnVuY3Rpb24oYXJyYXksIGYpIHsKICB2YXIgaSA9IC0xLAogICAgICBuID0gYXJyYXkubGVuZ3RoLAogICAgICBhLAogICAgICBiLAogICAgICBjOwoKICBpZiAoZiA9PSBudWxsKSB7CiAgICB3aGlsZSAoKytpIDwgbikgaWYgKChiID0gYXJyYXlbaV0pICE9IG51bGwgJiYgYiA+PSBiKSB7IGEgPSBjID0gYjsgYnJlYWs7IH0KICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoKGIgPSBhcnJheVtpXSkgIT0gbnVsbCkgewogICAgICBpZiAoYSA+IGIpIGEgPSBiOwogICAgICBpZiAoYyA8IGIpIGMgPSBiOwogICAgfQogIH0KCiAgZWxzZSB7CiAgICB3aGlsZSAoKytpIDwgbikgaWYgKChiID0gZihhcnJheVtpXSwgaSwgYXJyYXkpKSAhPSBudWxsICYmIGIgPj0gYikgeyBhID0gYyA9IGI7IGJyZWFrOyB9CiAgICB3aGlsZSAoKytpIDwgbikgaWYgKChiID0gZihhcnJheVtpXSwgaSwgYXJyYXkpKSAhPSBudWxsKSB7CiAgICAgIGlmIChhID4gYikgYSA9IGI7CiAgICAgIGlmIChjIDwgYikgYyA9IGI7CiAgICB9CiAgfQoKICByZXR1cm4gW2EsIGNdOwp9OwoKdmFyIGFycmF5ID0gQXJyYXkucHJvdG90eXBlOwoKdmFyIHNsaWNlID0gYXJyYXkuc2xpY2U7CnZhciBtYXAgPSBhcnJheS5tYXA7Cgp2YXIgY29uc3RhbnQgPSBmdW5jdGlvbih4KSB7CiAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHg7CiAgfTsKfTsKCnZhciBpZGVudGl0eSA9IGZ1bmN0aW9uKHgpIHsKICByZXR1cm4geDsKfTsKCnZhciByYW5nZSA9IGZ1bmN0aW9uKHN0YXJ0LCBzdG9wLCBzdGVwKSB7CiAgc3RhcnQgPSArc3RhcnQsIHN0b3AgPSArc3RvcCwgc3RlcCA9IChuID0gYXJndW1lbnRzLmxlbmd0aCkgPCAyID8gKHN0b3AgPSBzdGFydCwgc3RhcnQgPSAwLCAxKSA6IG4gPCAzID8gMSA6ICtzdGVwOwoKICB2YXIgaSA9IC0xLAogICAgICBuID0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKChzdG9wIC0gc3RhcnQpIC8gc3RlcCkpIHwgMCwKICAgICAgcmFuZ2UgPSBuZXcgQXJyYXkobik7CgogIHdoaWxlICgrK2kgPCBuKSB7CiAgICByYW5nZVtpXSA9IHN0YXJ0ICsgaSAqIHN0ZXA7CiAgfQoKICByZXR1cm4gcmFuZ2U7Cn07Cgp2YXIgZTEwID0gTWF0aC5zcXJ0KDUwKTsKdmFyIGU1ID0gTWF0aC5zcXJ0KDEwKTsKdmFyIGUyID0gTWF0aC5zcXJ0KDIpOwoKdmFyIHRpY2tzID0gZnVuY3Rpb24oc3RhcnQsIHN0b3AsIGNvdW50KSB7CiAgdmFyIHN0ZXAgPSB0aWNrU3RlcChzdGFydCwgc3RvcCwgY291bnQpOwogIHJldHVybiByYW5nZSgKICAgIE1hdGguY2VpbChzdGFydCAvIHN0ZXApICogc3RlcCwKICAgIE1hdGguZmxvb3Ioc3RvcCAvIHN0ZXApICogc3RlcCArIHN0ZXAgLyAyLCAvLyBpbmNsdXNpdmUKICAgIHN0ZXAKICApOwp9OwoKZnVuY3Rpb24gdGlja1N0ZXAoc3RhcnQsIHN0b3AsIGNvdW50KSB7CiAgdmFyIHN0ZXAwID0gTWF0aC5hYnMoc3RvcCAtIHN0YXJ0KSAvIE1hdGgubWF4KDAsIGNvdW50KSwKICAgICAgc3RlcDEgPSBNYXRoLnBvdygxMCwgTWF0aC5mbG9vcihNYXRoLmxvZyhzdGVwMCkgLyBNYXRoLkxOMTApKSwKICAgICAgZXJyb3IgPSBzdGVwMCAvIHN0ZXAxOwogIGlmIChlcnJvciA+PSBlMTApIHN0ZXAxICo9IDEwOwogIGVsc2UgaWYgKGVycm9yID49IGU1KSBzdGVwMSAqPSA1OwogIGVsc2UgaWYgKGVycm9yID49IGUyKSBzdGVwMSAqPSAyOwogIHJldHVybiBzdG9wIDwgc3RhcnQgPyAtc3RlcDEgOiBzdGVwMTsKfQoKdmFyIHN0dXJnZXMgPSBmdW5jdGlvbih2YWx1ZXMpIHsKICByZXR1cm4gTWF0aC5jZWlsKE1hdGgubG9nKHZhbHVlcy5sZW5ndGgpIC8gTWF0aC5MTjIpICsgMTsKfTsKCnZhciBoaXN0b2dyYW0gPSBmdW5jdGlvbigpIHsKICB2YXIgdmFsdWUgPSBpZGVudGl0eSwKICAgICAgZG9tYWluID0gZXh0ZW50LAogICAgICB0aHJlc2hvbGQgPSBzdHVyZ2VzOwoKICBmdW5jdGlvbiBoaXN0b2dyYW0oZGF0YSkgewogICAgdmFyIGksCiAgICAgICAgbiA9IGRhdGEubGVuZ3RoLAogICAgICAgIHgsCiAgICAgICAgdmFsdWVzID0gbmV3IEFycmF5KG4pOwoKICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHsKICAgICAgdmFsdWVzW2ldID0gdmFsdWUoZGF0YVtpXSwgaSwgZGF0YSk7CiAgICB9CgogICAgdmFyIHh6ID0gZG9tYWluKHZhbHVlcyksCiAgICAgICAgeDAgPSB4elswXSwKICAgICAgICB4MSA9IHh6WzFdLAogICAgICAgIHR6ID0gdGhyZXNob2xkKHZhbHVlcywgeDAsIHgxKTsKCiAgICAvLyBDb252ZXJ0IG51bWJlciBvZiB0aHJlc2hvbGRzIGludG8gdW5pZm9ybSB0aHJlc2hvbGRzLgogICAgaWYgKCFBcnJheS5pc0FycmF5KHR6KSkgdHogPSB0aWNrcyh4MCwgeDEsIHR6KTsKCiAgICAvLyBSZW1vdmUgYW55IHRocmVzaG9sZHMgb3V0c2lkZSB0aGUgZG9tYWluLgogICAgdmFyIG0gPSB0ei5sZW5ndGg7CiAgICB3aGlsZSAodHpbMF0gPD0geDApIHR6LnNoaWZ0KCksIC0tbTsKICAgIHdoaWxlICh0elttIC0gMV0gPj0geDEpIHR6LnBvcCgpLCAtLW07CgogICAgdmFyIGJpbnMgPSBuZXcgQXJyYXkobSArIDEpLAogICAgICAgIGJpbjsKCiAgICAvLyBJbml0aWFsaXplIGJpbnMuCiAgICBmb3IgKGkgPSAwOyBpIDw9IG07ICsraSkgewogICAgICBiaW4gPSBiaW5zW2ldID0gW107CiAgICAgIGJpbi54MCA9IGkgPiAwID8gdHpbaSAtIDFdIDogeDA7CiAgICAgIGJpbi54MSA9IGkgPCBtID8gdHpbaV0gOiB4MTsKICAgIH0KCiAgICAvLyBBc3NpZ24gZGF0YSB0byBiaW5zIGJ5IHZhbHVlLCBpZ25vcmluZyBhbnkgb3V0c2lkZSB0aGUgZG9tYWluLgogICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkgewogICAgICB4ID0gdmFsdWVzW2ldOwogICAgICBpZiAoeDAgPD0geCAmJiB4IDw9IHgxKSB7CiAgICAgICAgYmluc1tiaXNlY3RSaWdodCh0eiwgeCwgMCwgbSldLnB1c2goZGF0YVtpXSk7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gYmluczsKICB9CgogIGhpc3RvZ3JhbS52YWx1ZSA9IGZ1bmN0aW9uKF8pIHsKICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHZhbHVlID0gdHlwZW9mIF8gPT09ICJmdW5jdGlvbiIgPyBfIDogY29uc3RhbnQoXyksIGhpc3RvZ3JhbSkgOiB2YWx1ZTsKICB9OwoKICBoaXN0b2dyYW0uZG9tYWluID0gZnVuY3Rpb24oXykgewogICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZG9tYWluID0gdHlwZW9mIF8gPT09ICJmdW5jdGlvbiIgPyBfIDogY29uc3RhbnQoW19bMF0sIF9bMV1dKSwgaGlzdG9ncmFtKSA6IGRvbWFpbjsKICB9OwoKICBoaXN0b2dyYW0udGhyZXNob2xkcyA9IGZ1bmN0aW9uKF8pIHsKICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRocmVzaG9sZCA9IHR5cGVvZiBfID09PSAiZnVuY3Rpb24iID8gXyA6IEFycmF5LmlzQXJyYXkoXykgPyBjb25zdGFudChzbGljZS5jYWxsKF8pKSA6IGNvbnN0YW50KF8pLCBoaXN0b2dyYW0pIDogdGhyZXNob2xkOwogIH07CgogIHJldHVybiBoaXN0b2dyYW07Cn07Cgp2YXIgcXVhbnRpbGUgPSBmdW5jdGlvbihhcnJheSwgcCwgZikgewogIGlmIChmID09IG51bGwpIGYgPSBudW1iZXI7CiAgaWYgKCEobiA9IGFycmF5Lmxlbmd0aCkpIHJldHVybjsKICBpZiAoKHAgPSArcCkgPD0gMCB8fCBuIDwgMikgcmV0dXJuICtmKGFycmF5WzBdLCAwLCBhcnJheSk7CiAgaWYgKHAgPj0gMSkgcmV0dXJuICtmKGFycmF5W24gLSAxXSwgbiAtIDEsIGFycmF5KTsKICB2YXIgbiwKICAgICAgaCA9IChuIC0gMSkgKiBwLAogICAgICBpID0gTWF0aC5mbG9vcihoKSwKICAgICAgYSA9ICtmKGFycmF5W2ldLCBpLCBhcnJheSksCiAgICAgIGIgPSArZihhcnJheVtpICsgMV0sIGkgKyAxLCBhcnJheSk7CiAgcmV0dXJuIGEgKyAoYiAtIGEpICogKGggLSBpKTsKfTsKCnZhciBmcmVlZG1hbkRpYWNvbmlzID0gZnVuY3Rpb24odmFsdWVzLCBtaW4sIG1heCkgewogIHZhbHVlcyA9IG1hcC5jYWxsKHZhbHVlcywgbnVtYmVyKS5zb3J0KGFzY2VuZGluZyk7CiAgcmV0dXJuIE1hdGguY2VpbCgobWF4IC0gbWluKSAvICgyICogKHF1YW50aWxlKHZhbHVlcywgMC43NSkgLSBxdWFudGlsZSh2YWx1ZXMsIDAuMjUpKSAqIE1hdGgucG93KHZhbHVlcy5sZW5ndGgsIC0xIC8gMykpKTsKfTsKCnZhciBzY290dCA9IGZ1bmN0aW9uKHZhbHVlcywgbWluLCBtYXgpIHsKICByZXR1cm4gTWF0aC5jZWlsKChtYXggLSBtaW4pIC8gKDMuNSAqIGRldmlhdGlvbih2YWx1ZXMpICogTWF0aC5wb3codmFsdWVzLmxlbmd0aCwgLTEgLyAzKSkpOwp9OwoKdmFyIG1heCA9IGZ1bmN0aW9uKGFycmF5LCBmKSB7CiAgdmFyIGkgPSAtMSwKICAgICAgbiA9IGFycmF5Lmxlbmd0aCwKICAgICAgYSwKICAgICAgYjsKCiAgaWYgKGYgPT0gbnVsbCkgewogICAgd2hpbGUgKCsraSA8IG4pIGlmICgoYiA9IGFycmF5W2ldKSAhPSBudWxsICYmIGIgPj0gYikgeyBhID0gYjsgYnJlYWs7IH0KICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoKGIgPSBhcnJheVtpXSkgIT0gbnVsbCAmJiBiID4gYSkgYSA9IGI7CiAgfQoKICBlbHNlIHsKICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoKGIgPSBmKGFycmF5W2ldLCBpLCBhcnJheSkpICE9IG51bGwgJiYgYiA+PSBiKSB7IGEgPSBiOyBicmVhazsgfQogICAgd2hpbGUgKCsraSA8IG4pIGlmICgoYiA9IGYoYXJyYXlbaV0sIGksIGFycmF5KSkgIT0gbnVsbCAmJiBiID4gYSkgYSA9IGI7CiAgfQoKICByZXR1cm4gYTsKfTsKCnZhciBtZWFuID0gZnVuY3Rpb24oYXJyYXksIGYpIHsKICB2YXIgcyA9IDAsCiAgICAgIG4gPSBhcnJheS5sZW5ndGgsCiAgICAgIGEsCiAgICAgIGkgPSAtMSwKICAgICAgaiA9IG47CgogIGlmIChmID09IG51bGwpIHsKICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoIWlzTmFOKGEgPSBudW1iZXIoYXJyYXlbaV0pKSkgcyArPSBhOyBlbHNlIC0tajsKICB9CgogIGVsc2UgewogICAgd2hpbGUgKCsraSA8IG4pIGlmICghaXNOYU4oYSA9IG51bWJlcihmKGFycmF5W2ldLCBpLCBhcnJheSkpKSkgcyArPSBhOyBlbHNlIC0tajsKICB9CgogIGlmIChqKSByZXR1cm4gcyAvIGo7Cn07Cgp2YXIgbWVkaWFuID0gZnVuY3Rpb24oYXJyYXksIGYpIHsKICB2YXIgbnVtYmVycyA9IFtdLAogICAgICBuID0gYXJyYXkubGVuZ3RoLAogICAgICBhLAogICAgICBpID0gLTE7CgogIGlmIChmID09IG51bGwpIHsKICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoIWlzTmFOKGEgPSBudW1iZXIoYXJyYXlbaV0pKSkgbnVtYmVycy5wdXNoKGEpOwogIH0KCiAgZWxzZSB7CiAgICB3aGlsZSAoKytpIDwgbikgaWYgKCFpc05hTihhID0gbnVtYmVyKGYoYXJyYXlbaV0sIGksIGFycmF5KSkpKSBudW1iZXJzLnB1c2goYSk7CiAgfQoKICByZXR1cm4gcXVhbnRpbGUobnVtYmVycy5zb3J0KGFzY2VuZGluZyksIDAuNSk7Cn07Cgp2YXIgbWVyZ2UgPSBmdW5jdGlvbihhcnJheXMpIHsKICB2YXIgbiA9IGFycmF5cy5sZW5ndGgsCiAgICAgIG0sCiAgICAgIGkgPSAtMSwKICAgICAgaiA9IDAsCiAgICAgIG1lcmdlZCwKICAgICAgYXJyYXk7CgogIHdoaWxlICgrK2kgPCBuKSBqICs9IGFycmF5c1tpXS5sZW5ndGg7CiAgbWVyZ2VkID0gbmV3IEFycmF5KGopOwoKICB3aGlsZSAoLS1uID49IDApIHsKICAgIGFycmF5ID0gYXJyYXlzW25dOwogICAgbSA9IGFycmF5Lmxlbmd0aDsKICAgIHdoaWxlICgtLW0gPj0gMCkgewogICAgICBtZXJnZWRbLS1qXSA9IGFycmF5W21dOwogICAgfQogIH0KCiAgcmV0dXJuIG1lcmdlZDsKfTsKCnZhciBtaW4gPSBmdW5jdGlvbihhcnJheSwgZikgewogIHZhciBpID0gLTEsCiAgICAgIG4gPSBhcnJheS5sZW5ndGgsCiAgICAgIGEsCiAgICAgIGI7CgogIGlmIChmID09IG51bGwpIHsKICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoKGIgPSBhcnJheVtpXSkgIT0gbnVsbCAmJiBiID49IGIpIHsgYSA9IGI7IGJyZWFrOyB9CiAgICB3aGlsZSAoKytpIDwgbikgaWYgKChiID0gYXJyYXlbaV0pICE9IG51bGwgJiYgYSA+IGIpIGEgPSBiOwogIH0KCiAgZWxzZSB7CiAgICB3aGlsZSAoKytpIDwgbikgaWYgKChiID0gZihhcnJheVtpXSwgaSwgYXJyYXkpKSAhPSBudWxsICYmIGIgPj0gYikgeyBhID0gYjsgYnJlYWs7IH0KICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoKGIgPSBmKGFycmF5W2ldLCBpLCBhcnJheSkpICE9IG51bGwgJiYgYSA+IGIpIGEgPSBiOwogIH0KCiAgcmV0dXJuIGE7Cn07Cgp2YXIgcGVybXV0ZSA9IGZ1bmN0aW9uKGFycmF5LCBpbmRleGVzKSB7CiAgdmFyIGkgPSBpbmRleGVzLmxlbmd0aCwgcGVybXV0ZXMgPSBuZXcgQXJyYXkoaSk7CiAgd2hpbGUgKGktLSkgcGVybXV0ZXNbaV0gPSBhcnJheVtpbmRleGVzW2ldXTsKICByZXR1cm4gcGVybXV0ZXM7Cn07Cgp2YXIgc2NhbiA9IGZ1bmN0aW9uKGFycmF5LCBjb21wYXJlKSB7CiAgaWYgKCEobiA9IGFycmF5Lmxlbmd0aCkpIHJldHVybjsKICB2YXIgaSA9IDAsCiAgICAgIG4sCiAgICAgIGogPSAwLAogICAgICB4aSwKICAgICAgeGogPSBhcnJheVtqXTsKCiAgaWYgKCFjb21wYXJlKSBjb21wYXJlID0gYXNjZW5kaW5nOwoKICB3aGlsZSAoKytpIDwgbikgaWYgKGNvbXBhcmUoeGkgPSBhcnJheVtpXSwgeGopIDwgMCB8fCBjb21wYXJlKHhqLCB4aikgIT09IDApIHhqID0geGksIGogPSBpOwoKICBpZiAoY29tcGFyZSh4aiwgeGopID09PSAwKSByZXR1cm4gajsKfTsKCnZhciBzaHVmZmxlID0gZnVuY3Rpb24oYXJyYXksIGkwLCBpMSkgewogIHZhciBtID0gKGkxID09IG51bGwgPyBhcnJheS5sZW5ndGggOiBpMSkgLSAoaTAgPSBpMCA9PSBudWxsID8gMCA6ICtpMCksCiAgICAgIHQsCiAgICAgIGk7CgogIHdoaWxlIChtKSB7CiAgICBpID0gTWF0aC5yYW5kb20oKSAqIG0tLSB8IDA7CiAgICB0ID0gYXJyYXlbbSArIGkwXTsKICAgIGFycmF5W20gKyBpMF0gPSBhcnJheVtpICsgaTBdOwogICAgYXJyYXlbaSArIGkwXSA9IHQ7CiAgfQoKICByZXR1cm4gYXJyYXk7Cn07Cgp2YXIgc3VtID0gZnVuY3Rpb24oYXJyYXksIGYpIHsKICB2YXIgcyA9IDAsCiAgICAgIG4gPSBhcnJheS5sZW5ndGgsCiAgICAgIGEsCiAgICAgIGkgPSAtMTsKCiAgaWYgKGYgPT0gbnVsbCkgewogICAgd2hpbGUgKCsraSA8IG4pIGlmIChhID0gK2FycmF5W2ldKSBzICs9IGE7IC8vIE5vdGU6IHplcm8gYW5kIG51bGwgYXJlIGVxdWl2YWxlbnQuCiAgfQoKICBlbHNlIHsKICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoYSA9ICtmKGFycmF5W2ldLCBpLCBhcnJheSkpIHMgKz0gYTsKICB9CgogIHJldHVybiBzOwp9OwoKdmFyIHRyYW5zcG9zZSA9IGZ1bmN0aW9uKG1hdHJpeCkgewogIGlmICghKG4gPSBtYXRyaXgubGVuZ3RoKSkgcmV0dXJuIFtdOwogIGZvciAodmFyIGkgPSAtMSwgbSA9IG1pbihtYXRyaXgsIGxlbmd0aCksIHRyYW5zcG9zZSA9IG5ldyBBcnJheShtKTsgKytpIDwgbTspIHsKICAgIGZvciAodmFyIGogPSAtMSwgbiwgcm93ID0gdHJhbnNwb3NlW2ldID0gbmV3IEFycmF5KG4pOyArK2ogPCBuOykgewogICAgICByb3dbal0gPSBtYXRyaXhbal1baV07CiAgICB9CiAgfQogIHJldHVybiB0cmFuc3Bvc2U7Cn07CgpmdW5jdGlvbiBsZW5ndGgoZCkgewogIHJldHVybiBkLmxlbmd0aDsKfQoKdmFyIHppcCA9IGZ1bmN0aW9uKCkgewogIHJldHVybiB0cmFuc3Bvc2UoYXJndW1lbnRzKTsKfTsKCmV4cG9ydHMuYmlzZWN0ID0gYmlzZWN0UmlnaHQ7CmV4cG9ydHMuYmlzZWN0UmlnaHQgPSBiaXNlY3RSaWdodDsKZXhwb3J0cy5iaXNlY3RMZWZ0ID0gYmlzZWN0TGVmdDsKZXhwb3J0cy5hc2NlbmRpbmcgPSBhc2NlbmRpbmc7CmV4cG9ydHMuYmlzZWN0b3IgPSBiaXNlY3RvcjsKZXhwb3J0cy5jcm9zcyA9IGNyb3NzOwpleHBvcnRzLmRlc2NlbmRpbmcgPSBkZXNjZW5kaW5nOwpleHBvcnRzLmRldmlhdGlvbiA9IGRldmlhdGlvbjsKZXhwb3J0cy5leHRlbnQgPSBleHRlbnQ7CmV4cG9ydHMuaGlzdG9ncmFtID0gaGlzdG9ncmFtOwpleHBvcnRzLnRocmVzaG9sZEZyZWVkbWFuRGlhY29uaXMgPSBmcmVlZG1hbkRpYWNvbmlzOwpleHBvcnRzLnRocmVzaG9sZFNjb3R0ID0gc2NvdHQ7CmV4cG9ydHMudGhyZXNob2xkU3R1cmdlcyA9IHN0dXJnZXM7CmV4cG9ydHMubWF4ID0gbWF4OwpleHBvcnRzLm1lYW4gPSBtZWFuOwpleHBvcnRzLm1lZGlhbiA9IG1lZGlhbjsKZXhwb3J0cy5tZXJnZSA9IG1lcmdlOwpleHBvcnRzLm1pbiA9IG1pbjsKZXhwb3J0cy5wYWlycyA9IHBhaXJzOwpleHBvcnRzLnBlcm11dGUgPSBwZXJtdXRlOwpleHBvcnRzLnF1YW50aWxlID0gcXVhbnRpbGU7CmV4cG9ydHMucmFuZ2UgPSByYW5nZTsKZXhwb3J0cy5zY2FuID0gc2NhbjsKZXhwb3J0cy5zaHVmZmxlID0gc2h1ZmZsZTsKZXhwb3J0cy5zdW0gPSBzdW07CmV4cG9ydHMudGlja3MgPSB0aWNrczsKZXhwb3J0cy50aWNrU3RlcCA9IHRpY2tTdGVwOwpleHBvcnRzLnRyYW5zcG9zZSA9IHRyYW5zcG9zZTsKZXhwb3J0cy52YXJpYW5jZSA9IHZhcmlhbmNlOwpleHBvcnRzLnppcCA9IHppcDsKCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7Cgp9KSkpOwoKfSx7fV0sMzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci8vIGh0dHBzOi8vZDNqcy5vcmcvZDMtYXhpcy8gVmVyc2lvbiAxLjAuNi4gQ29weXJpZ2h0IDIwMTcgTWlrZSBCb3N0b2NrLgooZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkgewoJdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gZmFjdG9yeShleHBvcnRzKSA6Cgl0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWydleHBvcnRzJ10sIGZhY3RvcnkpIDoKCShmYWN0b3J5KChnbG9iYWwuZDMgPSBnbG9iYWwuZDMgfHwge30pKSk7Cn0odGhpcywgKGZ1bmN0aW9uIChleHBvcnRzKSB7ICd1c2Ugc3RyaWN0JzsKCnZhciBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTsKCnZhciBpZGVudGl0eSA9IGZ1bmN0aW9uKHgpIHsKICByZXR1cm4geDsKfTsKCnZhciB0b3AgPSAxOwp2YXIgcmlnaHQgPSAyOwp2YXIgYm90dG9tID0gMzsKdmFyIGxlZnQgPSA0Owp2YXIgZXBzaWxvbiA9IDFlLTY7CgpmdW5jdGlvbiB0cmFuc2xhdGVYKHgpIHsKICByZXR1cm4gInRyYW5zbGF0ZSgiICsgeCArICIsMCkiOwp9CgpmdW5jdGlvbiB0cmFuc2xhdGVZKHkpIHsKICByZXR1cm4gInRyYW5zbGF0ZSgwLCIgKyB5ICsgIikiOwp9CgpmdW5jdGlvbiBjZW50ZXIoc2NhbGUpIHsKICB2YXIgb2Zmc2V0ID0gc2NhbGUuYmFuZHdpZHRoKCkgLyAyOwogIGlmIChzY2FsZS5yb3VuZCgpKSBvZmZzZXQgPSBNYXRoLnJvdW5kKG9mZnNldCk7CiAgcmV0dXJuIGZ1bmN0aW9uKGQpIHsKICAgIHJldHVybiBzY2FsZShkKSArIG9mZnNldDsKICB9Owp9CgpmdW5jdGlvbiBlbnRlcmluZygpIHsKICByZXR1cm4gIXRoaXMuX19heGlzOwp9CgpmdW5jdGlvbiBheGlzKG9yaWVudCwgc2NhbGUpIHsKICB2YXIgdGlja0FyZ3VtZW50cyA9IFtdLAogICAgICB0aWNrVmFsdWVzID0gbnVsbCwKICAgICAgdGlja0Zvcm1hdCA9IG51bGwsCiAgICAgIHRpY2tTaXplSW5uZXIgPSA2LAogICAgICB0aWNrU2l6ZU91dGVyID0gNiwKICAgICAgdGlja1BhZGRpbmcgPSAzLAogICAgICBrID0gb3JpZW50ID09PSB0b3AgfHwgb3JpZW50ID09PSBsZWZ0ID8gLTEgOiAxLAogICAgICB4LCB5ID0gb3JpZW50ID09PSBsZWZ0IHx8IG9yaWVudCA9PT0gcmlnaHQgPyAoeCA9ICJ4IiwgInkiKSA6ICh4ID0gInkiLCAieCIpLAogICAgICB0cmFuc2Zvcm0gPSBvcmllbnQgPT09IHRvcCB8fCBvcmllbnQgPT09IGJvdHRvbSA/IHRyYW5zbGF0ZVggOiB0cmFuc2xhdGVZOwoKICBmdW5jdGlvbiBheGlzKGNvbnRleHQpIHsKICAgIHZhciB2YWx1ZXMgPSB0aWNrVmFsdWVzID09IG51bGwgPyAoc2NhbGUudGlja3MgPyBzY2FsZS50aWNrcy5hcHBseShzY2FsZSwgdGlja0FyZ3VtZW50cykgOiBzY2FsZS5kb21haW4oKSkgOiB0aWNrVmFsdWVzLAogICAgICAgIGZvcm1hdCA9IHRpY2tGb3JtYXQgPT0gbnVsbCA/IChzY2FsZS50aWNrRm9ybWF0ID8gc2NhbGUudGlja0Zvcm1hdC5hcHBseShzY2FsZSwgdGlja0FyZ3VtZW50cykgOiBpZGVudGl0eSkgOiB0aWNrRm9ybWF0LAogICAgICAgIHNwYWNpbmcgPSBNYXRoLm1heCh0aWNrU2l6ZUlubmVyLCAwKSArIHRpY2tQYWRkaW5nLAogICAgICAgIHJhbmdlID0gc2NhbGUucmFuZ2UoKSwKICAgICAgICByYW5nZTAgPSByYW5nZVswXSArIDAuNSwKICAgICAgICByYW5nZTEgPSByYW5nZVtyYW5nZS5sZW5ndGggLSAxXSArIDAuNSwKICAgICAgICBwb3NpdGlvbiA9IChzY2FsZS5iYW5kd2lkdGggPyBjZW50ZXIgOiBpZGVudGl0eSkoc2NhbGUuY29weSgpKSwKICAgICAgICBzZWxlY3Rpb24gPSBjb250ZXh0LnNlbGVjdGlvbiA/IGNvbnRleHQuc2VsZWN0aW9uKCkgOiBjb250ZXh0LAogICAgICAgIHBhdGggPSBzZWxlY3Rpb24uc2VsZWN0QWxsKCIuZG9tYWluIikuZGF0YShbbnVsbF0pLAogICAgICAgIHRpY2sgPSBzZWxlY3Rpb24uc2VsZWN0QWxsKCIudGljayIpLmRhdGEodmFsdWVzLCBzY2FsZSkub3JkZXIoKSwKICAgICAgICB0aWNrRXhpdCA9IHRpY2suZXhpdCgpLAogICAgICAgIHRpY2tFbnRlciA9IHRpY2suZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsICJ0aWNrIiksCiAgICAgICAgbGluZSA9IHRpY2suc2VsZWN0KCJsaW5lIiksCiAgICAgICAgdGV4dCA9IHRpY2suc2VsZWN0KCJ0ZXh0Iik7CgogICAgcGF0aCA9IHBhdGgubWVyZ2UocGF0aC5lbnRlcigpLmluc2VydCgicGF0aCIsICIudGljayIpCiAgICAgICAgLmF0dHIoImNsYXNzIiwgImRvbWFpbiIpCiAgICAgICAgLmF0dHIoInN0cm9rZSIsICIjMDAwIikpOwoKICAgIHRpY2sgPSB0aWNrLm1lcmdlKHRpY2tFbnRlcik7CgogICAgbGluZSA9IGxpbmUubWVyZ2UodGlja0VudGVyLmFwcGVuZCgibGluZSIpCiAgICAgICAgLmF0dHIoInN0cm9rZSIsICIjMDAwIikKICAgICAgICAuYXR0cih4ICsgIjIiLCBrICogdGlja1NpemVJbm5lcikKICAgICAgICAuYXR0cih5ICsgIjEiLCAwLjUpCiAgICAgICAgLmF0dHIoeSArICIyIiwgMC41KSk7CgogICAgdGV4dCA9IHRleHQubWVyZ2UodGlja0VudGVyLmFwcGVuZCgidGV4dCIpCiAgICAgICAgLmF0dHIoImZpbGwiLCAiIzAwMCIpCiAgICAgICAgLmF0dHIoeCwgayAqIHNwYWNpbmcpCiAgICAgICAgLmF0dHIoeSwgMC41KQogICAgICAgIC5hdHRyKCJkeSIsIG9yaWVudCA9PT0gdG9wID8gIjBlbSIgOiBvcmllbnQgPT09IGJvdHRvbSA/ICIwLjcxZW0iIDogIjAuMzJlbSIpKTsKCiAgICBpZiAoY29udGV4dCAhPT0gc2VsZWN0aW9uKSB7CiAgICAgIHBhdGggPSBwYXRoLnRyYW5zaXRpb24oY29udGV4dCk7CiAgICAgIHRpY2sgPSB0aWNrLnRyYW5zaXRpb24oY29udGV4dCk7CiAgICAgIGxpbmUgPSBsaW5lLnRyYW5zaXRpb24oY29udGV4dCk7CiAgICAgIHRleHQgPSB0ZXh0LnRyYW5zaXRpb24oY29udGV4dCk7CgogICAgICB0aWNrRXhpdCA9IHRpY2tFeGl0LnRyYW5zaXRpb24oY29udGV4dCkKICAgICAgICAgIC5hdHRyKCJvcGFjaXR5IiwgZXBzaWxvbikKICAgICAgICAgIC5hdHRyKCJ0cmFuc2Zvcm0iLCBmdW5jdGlvbihkKSB7IHJldHVybiBpc0Zpbml0ZShkID0gcG9zaXRpb24oZCkpID8gdHJhbnNmb3JtKGQpIDogdGhpcy5nZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIpOyB9KTsKCiAgICAgIHRpY2tFbnRlcgogICAgICAgICAgLmF0dHIoIm9wYWNpdHkiLCBlcHNpbG9uKQogICAgICAgICAgLmF0dHIoInRyYW5zZm9ybSIsIGZ1bmN0aW9uKGQpIHsgdmFyIHAgPSB0aGlzLnBhcmVudE5vZGUuX19heGlzOyByZXR1cm4gdHJhbnNmb3JtKHAgJiYgaXNGaW5pdGUocCA9IHAoZCkpID8gcCA6IHBvc2l0aW9uKGQpKTsgfSk7CiAgICB9CgogICAgdGlja0V4aXQucmVtb3ZlKCk7CgogICAgcGF0aAogICAgICAgIC5hdHRyKCJkIiwgb3JpZW50ID09PSBsZWZ0IHx8IG9yaWVudCA9PSByaWdodAogICAgICAgICAgICA/ICJNIiArIGsgKiB0aWNrU2l6ZU91dGVyICsgIiwiICsgcmFuZ2UwICsgIkgwLjVWIiArIHJhbmdlMSArICJIIiArIGsgKiB0aWNrU2l6ZU91dGVyCiAgICAgICAgICAgIDogIk0iICsgcmFuZ2UwICsgIiwiICsgayAqIHRpY2tTaXplT3V0ZXIgKyAiVjAuNUgiICsgcmFuZ2UxICsgIlYiICsgayAqIHRpY2tTaXplT3V0ZXIpOwoKICAgIHRpY2sKICAgICAgICAuYXR0cigib3BhY2l0eSIsIDEpCiAgICAgICAgLmF0dHIoInRyYW5zZm9ybSIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIHRyYW5zZm9ybShwb3NpdGlvbihkKSk7IH0pOwoKICAgIGxpbmUKICAgICAgICAuYXR0cih4ICsgIjIiLCBrICogdGlja1NpemVJbm5lcik7CgogICAgdGV4dAogICAgICAgIC5hdHRyKHgsIGsgKiBzcGFjaW5nKQogICAgICAgIC50ZXh0KGZvcm1hdCk7CgogICAgc2VsZWN0aW9uLmZpbHRlcihlbnRlcmluZykKICAgICAgICAuYXR0cigiZmlsbCIsICJub25lIikKICAgICAgICAuYXR0cigiZm9udC1zaXplIiwgMTApCiAgICAgICAgLmF0dHIoImZvbnQtZmFtaWx5IiwgInNhbnMtc2VyaWYiKQogICAgICAgIC5hdHRyKCJ0ZXh0LWFuY2hvciIsIG9yaWVudCA9PT0gcmlnaHQgPyAic3RhcnQiIDogb3JpZW50ID09PSBsZWZ0ID8gImVuZCIgOiAibWlkZGxlIik7CgogICAgc2VsZWN0aW9uCiAgICAgICAgLmVhY2goZnVuY3Rpb24oKSB7IHRoaXMuX19heGlzID0gcG9zaXRpb247IH0pOwogIH0KCiAgYXhpcy5zY2FsZSA9IGZ1bmN0aW9uKF8pIHsKICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHNjYWxlID0gXywgYXhpcykgOiBzY2FsZTsKICB9OwoKICBheGlzLnRpY2tzID0gZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gdGlja0FyZ3VtZW50cyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzKSwgYXhpczsKICB9OwoKICBheGlzLnRpY2tBcmd1bWVudHMgPSBmdW5jdGlvbihfKSB7CiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aWNrQXJndW1lbnRzID0gXyA9PSBudWxsID8gW10gOiBzbGljZS5jYWxsKF8pLCBheGlzKSA6IHRpY2tBcmd1bWVudHMuc2xpY2UoKTsKICB9OwoKICBheGlzLnRpY2tWYWx1ZXMgPSBmdW5jdGlvbihfKSB7CiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aWNrVmFsdWVzID0gXyA9PSBudWxsID8gbnVsbCA6IHNsaWNlLmNhbGwoXyksIGF4aXMpIDogdGlja1ZhbHVlcyAmJiB0aWNrVmFsdWVzLnNsaWNlKCk7CiAgfTsKCiAgYXhpcy50aWNrRm9ybWF0ID0gZnVuY3Rpb24oXykgewogICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGlja0Zvcm1hdCA9IF8sIGF4aXMpIDogdGlja0Zvcm1hdDsKICB9OwoKICBheGlzLnRpY2tTaXplID0gZnVuY3Rpb24oXykgewogICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGlja1NpemVJbm5lciA9IHRpY2tTaXplT3V0ZXIgPSArXywgYXhpcykgOiB0aWNrU2l6ZUlubmVyOwogIH07CgogIGF4aXMudGlja1NpemVJbm5lciA9IGZ1bmN0aW9uKF8pIHsKICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpY2tTaXplSW5uZXIgPSArXywgYXhpcykgOiB0aWNrU2l6ZUlubmVyOwogIH07CgogIGF4aXMudGlja1NpemVPdXRlciA9IGZ1bmN0aW9uKF8pIHsKICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpY2tTaXplT3V0ZXIgPSArXywgYXhpcykgOiB0aWNrU2l6ZU91dGVyOwogIH07CgogIGF4aXMudGlja1BhZGRpbmcgPSBmdW5jdGlvbihfKSB7CiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aWNrUGFkZGluZyA9ICtfLCBheGlzKSA6IHRpY2tQYWRkaW5nOwogIH07CgogIHJldHVybiBheGlzOwp9CgpmdW5jdGlvbiBheGlzVG9wKHNjYWxlKSB7CiAgcmV0dXJuIGF4aXModG9wLCBzY2FsZSk7Cn0KCmZ1bmN0aW9uIGF4aXNSaWdodChzY2FsZSkgewogIHJldHVybiBheGlzKHJpZ2h0LCBzY2FsZSk7Cn0KCmZ1bmN0aW9uIGF4aXNCb3R0b20oc2NhbGUpIHsKICByZXR1cm4gYXhpcyhib3R0b20sIHNjYWxlKTsKfQoKZnVuY3Rpb24gYXhpc0xlZnQoc2NhbGUpIHsKICByZXR1cm4gYXhpcyhsZWZ0LCBzY2FsZSk7Cn0KCmV4cG9ydHMuYXhpc1RvcCA9IGF4aXNUb3A7CmV4cG9ydHMuYXhpc1JpZ2h0ID0gYXhpc1JpZ2h0OwpleHBvcnRzLmF4aXNCb3R0b20gPSBheGlzQm90dG9tOwpleHBvcnRzLmF4aXNMZWZ0ID0gYXhpc0xlZnQ7CgpPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pOwoKfSkpKTsKCn0se31dLDQ6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewovLyBodHRwczovL2QzanMub3JnL2QzLWNvbGxlY3Rpb24vIFZlcnNpb24gMS4wLjMuIENvcHlyaWdodCAyMDE3IE1pa2UgQm9zdG9jay4KKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHsKCXR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IGZhY3RvcnkoZXhwb3J0cykgOgoJdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnZXhwb3J0cyddLCBmYWN0b3J5KSA6CgkoZmFjdG9yeSgoZ2xvYmFsLmQzID0gZ2xvYmFsLmQzIHx8IHt9KSkpOwp9KHRoaXMsIChmdW5jdGlvbiAoZXhwb3J0cykgeyAndXNlIHN0cmljdCc7Cgp2YXIgcHJlZml4ID0gIiQiOwoKZnVuY3Rpb24gTWFwKCkge30KCk1hcC5wcm90b3R5cGUgPSBtYXAucHJvdG90eXBlID0gewogIGNvbnN0cnVjdG9yOiBNYXAsCiAgaGFzOiBmdW5jdGlvbihrZXkpIHsKICAgIHJldHVybiAocHJlZml4ICsga2V5KSBpbiB0aGlzOwogIH0sCiAgZ2V0OiBmdW5jdGlvbihrZXkpIHsKICAgIHJldHVybiB0aGlzW3ByZWZpeCArIGtleV07CiAgfSwKICBzZXQ6IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsKICAgIHRoaXNbcHJlZml4ICsga2V5XSA9IHZhbHVlOwogICAgcmV0dXJuIHRoaXM7CiAgfSwKICByZW1vdmU6IGZ1bmN0aW9uKGtleSkgewogICAgdmFyIHByb3BlcnR5ID0gcHJlZml4ICsga2V5OwogICAgcmV0dXJuIHByb3BlcnR5IGluIHRoaXMgJiYgZGVsZXRlIHRoaXNbcHJvcGVydHldOwogIH0sCiAgY2xlYXI6IGZ1bmN0aW9uKCkgewogICAgZm9yICh2YXIgcHJvcGVydHkgaW4gdGhpcykgaWYgKHByb3BlcnR5WzBdID09PSBwcmVmaXgpIGRlbGV0ZSB0aGlzW3Byb3BlcnR5XTsKICB9LAogIGtleXM6IGZ1bmN0aW9uKCkgewogICAgdmFyIGtleXMgPSBbXTsKICAgIGZvciAodmFyIHByb3BlcnR5IGluIHRoaXMpIGlmIChwcm9wZXJ0eVswXSA9PT0gcHJlZml4KSBrZXlzLnB1c2gocHJvcGVydHkuc2xpY2UoMSkpOwogICAgcmV0dXJuIGtleXM7CiAgfSwKICB2YWx1ZXM6IGZ1bmN0aW9uKCkgewogICAgdmFyIHZhbHVlcyA9IFtdOwogICAgZm9yICh2YXIgcHJvcGVydHkgaW4gdGhpcykgaWYgKHByb3BlcnR5WzBdID09PSBwcmVmaXgpIHZhbHVlcy5wdXNoKHRoaXNbcHJvcGVydHldKTsKICAgIHJldHVybiB2YWx1ZXM7CiAgfSwKICBlbnRyaWVzOiBmdW5jdGlvbigpIHsKICAgIHZhciBlbnRyaWVzID0gW107CiAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiB0aGlzKSBpZiAocHJvcGVydHlbMF0gPT09IHByZWZpeCkgZW50cmllcy5wdXNoKHtrZXk6IHByb3BlcnR5LnNsaWNlKDEpLCB2YWx1ZTogdGhpc1twcm9wZXJ0eV19KTsKICAgIHJldHVybiBlbnRyaWVzOwogIH0sCiAgc2l6ZTogZnVuY3Rpb24oKSB7CiAgICB2YXIgc2l6ZSA9IDA7CiAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiB0aGlzKSBpZiAocHJvcGVydHlbMF0gPT09IHByZWZpeCkgKytzaXplOwogICAgcmV0dXJuIHNpemU7CiAgfSwKICBlbXB0eTogZnVuY3Rpb24oKSB7CiAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiB0aGlzKSBpZiAocHJvcGVydHlbMF0gPT09IHByZWZpeCkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHRydWU7CiAgfSwKICBlYWNoOiBmdW5jdGlvbihmKSB7CiAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiB0aGlzKSBpZiAocHJvcGVydHlbMF0gPT09IHByZWZpeCkgZih0aGlzW3Byb3BlcnR5XSwgcHJvcGVydHkuc2xpY2UoMSksIHRoaXMpOwogIH0KfTsKCmZ1bmN0aW9uIG1hcChvYmplY3QsIGYpIHsKICB2YXIgbWFwID0gbmV3IE1hcDsKCiAgLy8gQ29weSBjb25zdHJ1Y3Rvci4KICBpZiAob2JqZWN0IGluc3RhbmNlb2YgTWFwKSBvYmplY3QuZWFjaChmdW5jdGlvbih2YWx1ZSwga2V5KSB7IG1hcC5zZXQoa2V5LCB2YWx1ZSk7IH0pOwoKICAvLyBJbmRleCBhcnJheSBieSBudW1lcmljIGluZGV4IG9yIHNwZWNpZmllZCBrZXkgZnVuY3Rpb24uCiAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7CiAgICB2YXIgaSA9IC0xLAogICAgICAgIG4gPSBvYmplY3QubGVuZ3RoLAogICAgICAgIG87CgogICAgaWYgKGYgPT0gbnVsbCkgd2hpbGUgKCsraSA8IG4pIG1hcC5zZXQoaSwgb2JqZWN0W2ldKTsKICAgIGVsc2Ugd2hpbGUgKCsraSA8IG4pIG1hcC5zZXQoZihvID0gb2JqZWN0W2ldLCBpLCBvYmplY3QpLCBvKTsKICB9CgogIC8vIENvbnZlcnQgb2JqZWN0IHRvIG1hcC4KICBlbHNlIGlmIChvYmplY3QpIGZvciAodmFyIGtleSBpbiBvYmplY3QpIG1hcC5zZXQoa2V5LCBvYmplY3Rba2V5XSk7CgogIHJldHVybiBtYXA7Cn0KCnZhciBuZXN0ID0gZnVuY3Rpb24oKSB7CiAgdmFyIGtleXMgPSBbXSwKICAgICAgc29ydEtleXMgPSBbXSwKICAgICAgc29ydFZhbHVlcywKICAgICAgcm9sbHVwLAogICAgICBuZXN0OwoKICBmdW5jdGlvbiBhcHBseShhcnJheSwgZGVwdGgsIGNyZWF0ZVJlc3VsdCwgc2V0UmVzdWx0KSB7CiAgICBpZiAoZGVwdGggPj0ga2V5cy5sZW5ndGgpIHJldHVybiByb2xsdXAgIT0gbnVsbAogICAgICAgID8gcm9sbHVwKGFycmF5KSA6IChzb3J0VmFsdWVzICE9IG51bGwKICAgICAgICA/IGFycmF5LnNvcnQoc29ydFZhbHVlcykKICAgICAgICA6IGFycmF5KTsKCiAgICB2YXIgaSA9IC0xLAogICAgICAgIG4gPSBhcnJheS5sZW5ndGgsCiAgICAgICAga2V5ID0ga2V5c1tkZXB0aCsrXSwKICAgICAgICBrZXlWYWx1ZSwKICAgICAgICB2YWx1ZSwKICAgICAgICB2YWx1ZXNCeUtleSA9IG1hcCgpLAogICAgICAgIHZhbHVlcywKICAgICAgICByZXN1bHQgPSBjcmVhdGVSZXN1bHQoKTsKCiAgICB3aGlsZSAoKytpIDwgbikgewogICAgICBpZiAodmFsdWVzID0gdmFsdWVzQnlLZXkuZ2V0KGtleVZhbHVlID0ga2V5KHZhbHVlID0gYXJyYXlbaV0pICsgIiIpKSB7CiAgICAgICAgdmFsdWVzLnB1c2godmFsdWUpOwogICAgICB9IGVsc2UgewogICAgICAgIHZhbHVlc0J5S2V5LnNldChrZXlWYWx1ZSwgW3ZhbHVlXSk7CiAgICAgIH0KICAgIH0KCiAgICB2YWx1ZXNCeUtleS5lYWNoKGZ1bmN0aW9uKHZhbHVlcywga2V5KSB7CiAgICAgIHNldFJlc3VsdChyZXN1bHQsIGtleSwgYXBwbHkodmFsdWVzLCBkZXB0aCwgY3JlYXRlUmVzdWx0LCBzZXRSZXN1bHQpKTsKICAgIH0pOwoKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBmdW5jdGlvbiBlbnRyaWVzKG1hcCQkMSwgZGVwdGgpIHsKICAgIGlmICgrK2RlcHRoID4ga2V5cy5sZW5ndGgpIHJldHVybiBtYXAkJDE7CiAgICB2YXIgYXJyYXksIHNvcnRLZXkgPSBzb3J0S2V5c1tkZXB0aCAtIDFdOwogICAgaWYgKHJvbGx1cCAhPSBudWxsICYmIGRlcHRoID49IGtleXMubGVuZ3RoKSBhcnJheSA9IG1hcCQkMS5lbnRyaWVzKCk7CiAgICBlbHNlIGFycmF5ID0gW10sIG1hcCQkMS5lYWNoKGZ1bmN0aW9uKHYsIGspIHsgYXJyYXkucHVzaCh7a2V5OiBrLCB2YWx1ZXM6IGVudHJpZXModiwgZGVwdGgpfSk7IH0pOwogICAgcmV0dXJuIHNvcnRLZXkgIT0gbnVsbCA/IGFycmF5LnNvcnQoZnVuY3Rpb24oYSwgYikgeyByZXR1cm4gc29ydEtleShhLmtleSwgYi5rZXkpOyB9KSA6IGFycmF5OwogIH0KCiAgcmV0dXJuIG5lc3QgPSB7CiAgICBvYmplY3Q6IGZ1bmN0aW9uKGFycmF5KSB7IHJldHVybiBhcHBseShhcnJheSwgMCwgY3JlYXRlT2JqZWN0LCBzZXRPYmplY3QpOyB9LAogICAgbWFwOiBmdW5jdGlvbihhcnJheSkgeyByZXR1cm4gYXBwbHkoYXJyYXksIDAsIGNyZWF0ZU1hcCwgc2V0TWFwKTsgfSwKICAgIGVudHJpZXM6IGZ1bmN0aW9uKGFycmF5KSB7IHJldHVybiBlbnRyaWVzKGFwcGx5KGFycmF5LCAwLCBjcmVhdGVNYXAsIHNldE1hcCksIDApOyB9LAogICAga2V5OiBmdW5jdGlvbihkKSB7IGtleXMucHVzaChkKTsgcmV0dXJuIG5lc3Q7IH0sCiAgICBzb3J0S2V5czogZnVuY3Rpb24ob3JkZXIpIHsgc29ydEtleXNba2V5cy5sZW5ndGggLSAxXSA9IG9yZGVyOyByZXR1cm4gbmVzdDsgfSwKICAgIHNvcnRWYWx1ZXM6IGZ1bmN0aW9uKG9yZGVyKSB7IHNvcnRWYWx1ZXMgPSBvcmRlcjsgcmV0dXJuIG5lc3Q7IH0sCiAgICByb2xsdXA6IGZ1bmN0aW9uKGYpIHsgcm9sbHVwID0gZjsgcmV0dXJuIG5lc3Q7IH0KICB9Owp9OwoKZnVuY3Rpb24gY3JlYXRlT2JqZWN0KCkgewogIHJldHVybiB7fTsKfQoKZnVuY3Rpb24gc2V0T2JqZWN0KG9iamVjdCwga2V5LCB2YWx1ZSkgewogIG9iamVjdFtrZXldID0gdmFsdWU7Cn0KCmZ1bmN0aW9uIGNyZWF0ZU1hcCgpIHsKICByZXR1cm4gbWFwKCk7Cn0KCmZ1bmN0aW9uIHNldE1hcChtYXAkJDEsIGtleSwgdmFsdWUpIHsKICBtYXAkJDEuc2V0KGtleSwgdmFsdWUpOwp9CgpmdW5jdGlvbiBTZXQoKSB7fQoKdmFyIHByb3RvID0gbWFwLnByb3RvdHlwZTsKClNldC5wcm90b3R5cGUgPSBzZXQucHJvdG90eXBlID0gewogIGNvbnN0cnVjdG9yOiBTZXQsCiAgaGFzOiBwcm90by5oYXMsCiAgYWRkOiBmdW5jdGlvbih2YWx1ZSkgewogICAgdmFsdWUgKz0gIiI7CiAgICB0aGlzW3ByZWZpeCArIHZhbHVlXSA9IHZhbHVlOwogICAgcmV0dXJuIHRoaXM7CiAgfSwKICByZW1vdmU6IHByb3RvLnJlbW92ZSwKICBjbGVhcjogcHJvdG8uY2xlYXIsCiAgdmFsdWVzOiBwcm90by5rZXlzLAogIHNpemU6IHByb3RvLnNpemUsCiAgZW1wdHk6IHByb3RvLmVtcHR5LAogIGVhY2g6IHByb3RvLmVhY2gKfTsKCmZ1bmN0aW9uIHNldChvYmplY3QsIGYpIHsKICB2YXIgc2V0ID0gbmV3IFNldDsKCiAgLy8gQ29weSBjb25zdHJ1Y3Rvci4KICBpZiAob2JqZWN0IGluc3RhbmNlb2YgU2V0KSBvYmplY3QuZWFjaChmdW5jdGlvbih2YWx1ZSkgeyBzZXQuYWRkKHZhbHVlKTsgfSk7CgogIC8vIE90aGVyd2lzZSwgYXNzdW1lIGl04oCZcyBhbiBhcnJheS4KICBlbHNlIGlmIChvYmplY3QpIHsKICAgIHZhciBpID0gLTEsIG4gPSBvYmplY3QubGVuZ3RoOwogICAgaWYgKGYgPT0gbnVsbCkgd2hpbGUgKCsraSA8IG4pIHNldC5hZGQob2JqZWN0W2ldKTsKICAgIGVsc2Ugd2hpbGUgKCsraSA8IG4pIHNldC5hZGQoZihvYmplY3RbaV0sIGksIG9iamVjdCkpOwogIH0KCiAgcmV0dXJuIHNldDsKfQoKdmFyIGtleXMgPSBmdW5jdGlvbihtYXApIHsKICB2YXIga2V5cyA9IFtdOwogIGZvciAodmFyIGtleSBpbiBtYXApIGtleXMucHVzaChrZXkpOwogIHJldHVybiBrZXlzOwp9OwoKdmFyIHZhbHVlcyA9IGZ1bmN0aW9uKG1hcCkgewogIHZhciB2YWx1ZXMgPSBbXTsKICBmb3IgKHZhciBrZXkgaW4gbWFwKSB2YWx1ZXMucHVzaChtYXBba2V5XSk7CiAgcmV0dXJuIHZhbHVlczsKfTsKCnZhciBlbnRyaWVzID0gZnVuY3Rpb24obWFwKSB7CiAgdmFyIGVudHJpZXMgPSBbXTsKICBmb3IgKHZhciBrZXkgaW4gbWFwKSBlbnRyaWVzLnB1c2goe2tleToga2V5LCB2YWx1ZTogbWFwW2tleV19KTsKICByZXR1cm4gZW50cmllczsKfTsKCmV4cG9ydHMubmVzdCA9IG5lc3Q7CmV4cG9ydHMuc2V0ID0gc2V0OwpleHBvcnRzLm1hcCA9IG1hcDsKZXhwb3J0cy5rZXlzID0ga2V5czsKZXhwb3J0cy52YWx1ZXMgPSB2YWx1ZXM7CmV4cG9ydHMuZW50cmllcyA9IGVudHJpZXM7CgpPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pOwoKfSkpKTsKCn0se31dLDU6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewovLyBodHRwczovL2QzanMub3JnL2QzLWNvbG9yLyBWZXJzaW9uIDEuMC4zLiBDb3B5cmlnaHQgMjAxNyBNaWtlIEJvc3RvY2suCihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7Cgl0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBmYWN0b3J5KGV4cG9ydHMpIDoKCXR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2V4cG9ydHMnXSwgZmFjdG9yeSkgOgoJKGZhY3RvcnkoKGdsb2JhbC5kMyA9IGdsb2JhbC5kMyB8fCB7fSkpKTsKfSh0aGlzLCAoZnVuY3Rpb24gKGV4cG9ydHMpIHsgJ3VzZSBzdHJpY3QnOwoKdmFyIGRlZmluZSA9IGZ1bmN0aW9uKGNvbnN0cnVjdG9yLCBmYWN0b3J5LCBwcm90b3R5cGUpIHsKICBjb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBmYWN0b3J5LnByb3RvdHlwZSA9IHByb3RvdHlwZTsKICBwcm90b3R5cGUuY29uc3RydWN0b3IgPSBjb25zdHJ1Y3RvcjsKfTsKCmZ1bmN0aW9uIGV4dGVuZChwYXJlbnQsIGRlZmluaXRpb24pIHsKICB2YXIgcHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShwYXJlbnQucHJvdG90eXBlKTsKICBmb3IgKHZhciBrZXkgaW4gZGVmaW5pdGlvbikgcHJvdG90eXBlW2tleV0gPSBkZWZpbml0aW9uW2tleV07CiAgcmV0dXJuIHByb3RvdHlwZTsKfQoKZnVuY3Rpb24gQ29sb3IoKSB7fQoKdmFyIGRhcmtlciA9IDAuNzsKdmFyIGJyaWdodGVyID0gMSAvIGRhcmtlcjsKCnZhciByZUkgPSAiXFxzKihbKy1dP1xcZCspXFxzKiI7CnZhciByZU4gPSAiXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIjsKdmFyIHJlUCA9ICJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIjsKdmFyIHJlSGV4MyA9IC9eIyhbMC05YS1mXXszfSkkLzsKdmFyIHJlSGV4NiA9IC9eIyhbMC05YS1mXXs2fSkkLzsKdmFyIHJlUmdiSW50ZWdlciA9IG5ldyBSZWdFeHAoIl5yZ2JcXCgiICsgW3JlSSwgcmVJLCByZUldICsgIlxcKSQiKTsKdmFyIHJlUmdiUGVyY2VudCA9IG5ldyBSZWdFeHAoIl5yZ2JcXCgiICsgW3JlUCwgcmVQLCByZVBdICsgIlxcKSQiKTsKdmFyIHJlUmdiYUludGVnZXIgPSBuZXcgUmVnRXhwKCJecmdiYVxcKCIgKyBbcmVJLCByZUksIHJlSSwgcmVOXSArICJcXCkkIik7CnZhciByZVJnYmFQZXJjZW50ID0gbmV3IFJlZ0V4cCgiXnJnYmFcXCgiICsgW3JlUCwgcmVQLCByZVAsIHJlTl0gKyAiXFwpJCIpOwp2YXIgcmVIc2xQZXJjZW50ID0gbmV3IFJlZ0V4cCgiXmhzbFxcKCIgKyBbcmVOLCByZVAsIHJlUF0gKyAiXFwpJCIpOwp2YXIgcmVIc2xhUGVyY2VudCA9IG5ldyBSZWdFeHAoIl5oc2xhXFwoIiArIFtyZU4sIHJlUCwgcmVQLCByZU5dICsgIlxcKSQiKTsKCnZhciBuYW1lZCA9IHsKICBhbGljZWJsdWU6IDB4ZjBmOGZmLAogIGFudGlxdWV3aGl0ZTogMHhmYWViZDcsCiAgYXF1YTogMHgwMGZmZmYsCiAgYXF1YW1hcmluZTogMHg3ZmZmZDQsCiAgYXp1cmU6IDB4ZjBmZmZmLAogIGJlaWdlOiAweGY1ZjVkYywKICBiaXNxdWU6IDB4ZmZlNGM0LAogIGJsYWNrOiAweDAwMDAwMCwKICBibGFuY2hlZGFsbW9uZDogMHhmZmViY2QsCiAgYmx1ZTogMHgwMDAwZmYsCiAgYmx1ZXZpb2xldDogMHg4YTJiZTIsCiAgYnJvd246IDB4YTUyYTJhLAogIGJ1cmx5d29vZDogMHhkZWI4ODcsCiAgY2FkZXRibHVlOiAweDVmOWVhMCwKICBjaGFydHJldXNlOiAweDdmZmYwMCwKICBjaG9jb2xhdGU6IDB4ZDI2OTFlLAogIGNvcmFsOiAweGZmN2Y1MCwKICBjb3JuZmxvd2VyYmx1ZTogMHg2NDk1ZWQsCiAgY29ybnNpbGs6IDB4ZmZmOGRjLAogIGNyaW1zb246IDB4ZGMxNDNjLAogIGN5YW46IDB4MDBmZmZmLAogIGRhcmtibHVlOiAweDAwMDA4YiwKICBkYXJrY3lhbjogMHgwMDhiOGIsCiAgZGFya2dvbGRlbnJvZDogMHhiODg2MGIsCiAgZGFya2dyYXk6IDB4YTlhOWE5LAogIGRhcmtncmVlbjogMHgwMDY0MDAsCiAgZGFya2dyZXk6IDB4YTlhOWE5LAogIGRhcmtraGFraTogMHhiZGI3NmIsCiAgZGFya21hZ2VudGE6IDB4OGIwMDhiLAogIGRhcmtvbGl2ZWdyZWVuOiAweDU1NmIyZiwKICBkYXJrb3JhbmdlOiAweGZmOGMwMCwKICBkYXJrb3JjaGlkOiAweDk5MzJjYywKICBkYXJrcmVkOiAweDhiMDAwMCwKICBkYXJrc2FsbW9uOiAweGU5OTY3YSwKICBkYXJrc2VhZ3JlZW46IDB4OGZiYzhmLAogIGRhcmtzbGF0ZWJsdWU6IDB4NDgzZDhiLAogIGRhcmtzbGF0ZWdyYXk6IDB4MmY0ZjRmLAogIGRhcmtzbGF0ZWdyZXk6IDB4MmY0ZjRmLAogIGRhcmt0dXJxdW9pc2U6IDB4MDBjZWQxLAogIGRhcmt2aW9sZXQ6IDB4OTQwMGQzLAogIGRlZXBwaW5rOiAweGZmMTQ5MywKICBkZWVwc2t5Ymx1ZTogMHgwMGJmZmYsCiAgZGltZ3JheTogMHg2OTY5NjksCiAgZGltZ3JleTogMHg2OTY5NjksCiAgZG9kZ2VyYmx1ZTogMHgxZTkwZmYsCiAgZmlyZWJyaWNrOiAweGIyMjIyMiwKICBmbG9yYWx3aGl0ZTogMHhmZmZhZjAsCiAgZm9yZXN0Z3JlZW46IDB4MjI4YjIyLAogIGZ1Y2hzaWE6IDB4ZmYwMGZmLAogIGdhaW5zYm9ybzogMHhkY2RjZGMsCiAgZ2hvc3R3aGl0ZTogMHhmOGY4ZmYsCiAgZ29sZDogMHhmZmQ3MDAsCiAgZ29sZGVucm9kOiAweGRhYTUyMCwKICBncmF5OiAweDgwODA4MCwKICBncmVlbjogMHgwMDgwMDAsCiAgZ3JlZW55ZWxsb3c6IDB4YWRmZjJmLAogIGdyZXk6IDB4ODA4MDgwLAogIGhvbmV5ZGV3OiAweGYwZmZmMCwKICBob3RwaW5rOiAweGZmNjliNCwKICBpbmRpYW5yZWQ6IDB4Y2Q1YzVjLAogIGluZGlnbzogMHg0YjAwODIsCiAgaXZvcnk6IDB4ZmZmZmYwLAogIGtoYWtpOiAweGYwZTY4YywKICBsYXZlbmRlcjogMHhlNmU2ZmEsCiAgbGF2ZW5kZXJibHVzaDogMHhmZmYwZjUsCiAgbGF3bmdyZWVuOiAweDdjZmMwMCwKICBsZW1vbmNoaWZmb246IDB4ZmZmYWNkLAogIGxpZ2h0Ymx1ZTogMHhhZGQ4ZTYsCiAgbGlnaHRjb3JhbDogMHhmMDgwODAsCiAgbGlnaHRjeWFuOiAweGUwZmZmZiwKICBsaWdodGdvbGRlbnJvZHllbGxvdzogMHhmYWZhZDIsCiAgbGlnaHRncmF5OiAweGQzZDNkMywKICBsaWdodGdyZWVuOiAweDkwZWU5MCwKICBsaWdodGdyZXk6IDB4ZDNkM2QzLAogIGxpZ2h0cGluazogMHhmZmI2YzEsCiAgbGlnaHRzYWxtb246IDB4ZmZhMDdhLAogIGxpZ2h0c2VhZ3JlZW46IDB4MjBiMmFhLAogIGxpZ2h0c2t5Ymx1ZTogMHg4N2NlZmEsCiAgbGlnaHRzbGF0ZWdyYXk6IDB4Nzc4ODk5LAogIGxpZ2h0c2xhdGVncmV5OiAweDc3ODg5OSwKICBsaWdodHN0ZWVsYmx1ZTogMHhiMGM0ZGUsCiAgbGlnaHR5ZWxsb3c6IDB4ZmZmZmUwLAogIGxpbWU6IDB4MDBmZjAwLAogIGxpbWVncmVlbjogMHgzMmNkMzIsCiAgbGluZW46IDB4ZmFmMGU2LAogIG1hZ2VudGE6IDB4ZmYwMGZmLAogIG1hcm9vbjogMHg4MDAwMDAsCiAgbWVkaXVtYXF1YW1hcmluZTogMHg2NmNkYWEsCiAgbWVkaXVtYmx1ZTogMHgwMDAwY2QsCiAgbWVkaXVtb3JjaGlkOiAweGJhNTVkMywKICBtZWRpdW1wdXJwbGU6IDB4OTM3MGRiLAogIG1lZGl1bXNlYWdyZWVuOiAweDNjYjM3MSwKICBtZWRpdW1zbGF0ZWJsdWU6IDB4N2I2OGVlLAogIG1lZGl1bXNwcmluZ2dyZWVuOiAweDAwZmE5YSwKICBtZWRpdW10dXJxdW9pc2U6IDB4NDhkMWNjLAogIG1lZGl1bXZpb2xldHJlZDogMHhjNzE1ODUsCiAgbWlkbmlnaHRibHVlOiAweDE5MTk3MCwKICBtaW50Y3JlYW06IDB4ZjVmZmZhLAogIG1pc3R5cm9zZTogMHhmZmU0ZTEsCiAgbW9jY2FzaW46IDB4ZmZlNGI1LAogIG5hdmFqb3doaXRlOiAweGZmZGVhZCwKICBuYXZ5OiAweDAwMDA4MCwKICBvbGRsYWNlOiAweGZkZjVlNiwKICBvbGl2ZTogMHg4MDgwMDAsCiAgb2xpdmVkcmFiOiAweDZiOGUyMywKICBvcmFuZ2U6IDB4ZmZhNTAwLAogIG9yYW5nZXJlZDogMHhmZjQ1MDAsCiAgb3JjaGlkOiAweGRhNzBkNiwKICBwYWxlZ29sZGVucm9kOiAweGVlZThhYSwKICBwYWxlZ3JlZW46IDB4OThmYjk4LAogIHBhbGV0dXJxdW9pc2U6IDB4YWZlZWVlLAogIHBhbGV2aW9sZXRyZWQ6IDB4ZGI3MDkzLAogIHBhcGF5YXdoaXA6IDB4ZmZlZmQ1LAogIHBlYWNocHVmZjogMHhmZmRhYjksCiAgcGVydTogMHhjZDg1M2YsCiAgcGluazogMHhmZmMwY2IsCiAgcGx1bTogMHhkZGEwZGQsCiAgcG93ZGVyYmx1ZTogMHhiMGUwZTYsCiAgcHVycGxlOiAweDgwMDA4MCwKICByZWJlY2NhcHVycGxlOiAweDY2MzM5OSwKICByZWQ6IDB4ZmYwMDAwLAogIHJvc3licm93bjogMHhiYzhmOGYsCiAgcm95YWxibHVlOiAweDQxNjllMSwKICBzYWRkbGVicm93bjogMHg4YjQ1MTMsCiAgc2FsbW9uOiAweGZhODA3MiwKICBzYW5keWJyb3duOiAweGY0YTQ2MCwKICBzZWFncmVlbjogMHgyZThiNTcsCiAgc2Vhc2hlbGw6IDB4ZmZmNWVlLAogIHNpZW5uYTogMHhhMDUyMmQsCiAgc2lsdmVyOiAweGMwYzBjMCwKICBza3libHVlOiAweDg3Y2VlYiwKICBzbGF0ZWJsdWU6IDB4NmE1YWNkLAogIHNsYXRlZ3JheTogMHg3MDgwOTAsCiAgc2xhdGVncmV5OiAweDcwODA5MCwKICBzbm93OiAweGZmZmFmYSwKICBzcHJpbmdncmVlbjogMHgwMGZmN2YsCiAgc3RlZWxibHVlOiAweDQ2ODJiNCwKICB0YW46IDB4ZDJiNDhjLAogIHRlYWw6IDB4MDA4MDgwLAogIHRoaXN0bGU6IDB4ZDhiZmQ4LAogIHRvbWF0bzogMHhmZjYzNDcsCiAgdHVycXVvaXNlOiAweDQwZTBkMCwKICB2aW9sZXQ6IDB4ZWU4MmVlLAogIHdoZWF0OiAweGY1ZGViMywKICB3aGl0ZTogMHhmZmZmZmYsCiAgd2hpdGVzbW9rZTogMHhmNWY1ZjUsCiAgeWVsbG93OiAweGZmZmYwMCwKICB5ZWxsb3dncmVlbjogMHg5YWNkMzIKfTsKCmRlZmluZShDb2xvciwgY29sb3IsIHsKICBkaXNwbGF5YWJsZTogZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpOwogIH0sCiAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHRoaXMucmdiKCkgKyAiIjsKICB9Cn0pOwoKZnVuY3Rpb24gY29sb3IoZm9ybWF0KSB7CiAgdmFyIG07CiAgZm9ybWF0ID0gKGZvcm1hdCArICIiKS50cmltKCkudG9Mb3dlckNhc2UoKTsKICByZXR1cm4gKG0gPSByZUhleDMuZXhlYyhmb3JtYXQpKSA/IChtID0gcGFyc2VJbnQobVsxXSwgMTYpLCBuZXcgUmdiKChtID4+IDggJiAweGYpIHwgKG0gPj4gNCAmIDB4MGYwKSwgKG0gPj4gNCAmIDB4ZikgfCAobSAmIDB4ZjApLCAoKG0gJiAweGYpIDw8IDQpIHwgKG0gJiAweGYpLCAxKSkgLy8gI2YwMAogICAgICA6IChtID0gcmVIZXg2LmV4ZWMoZm9ybWF0KSkgPyByZ2JuKHBhcnNlSW50KG1bMV0sIDE2KSkgLy8gI2ZmMDAwMAogICAgICA6IChtID0gcmVSZ2JJbnRlZ2VyLmV4ZWMoZm9ybWF0KSkgPyBuZXcgUmdiKG1bMV0sIG1bMl0sIG1bM10sIDEpIC8vIHJnYigyNTUsIDAsIDApCiAgICAgIDogKG0gPSByZVJnYlBlcmNlbnQuZXhlYyhmb3JtYXQpKSA/IG5ldyBSZ2IobVsxXSAqIDI1NSAvIDEwMCwgbVsyXSAqIDI1NSAvIDEwMCwgbVszXSAqIDI1NSAvIDEwMCwgMSkgLy8gcmdiKDEwMCUsIDAlLCAwJSkKICAgICAgOiAobSA9IHJlUmdiYUludGVnZXIuZXhlYyhmb3JtYXQpKSA/IHJnYmEobVsxXSwgbVsyXSwgbVszXSwgbVs0XSkgLy8gcmdiYSgyNTUsIDAsIDAsIDEpCiAgICAgIDogKG0gPSByZVJnYmFQZXJjZW50LmV4ZWMoZm9ybWF0KSkgPyByZ2JhKG1bMV0gKiAyNTUgLyAxMDAsIG1bMl0gKiAyNTUgLyAxMDAsIG1bM10gKiAyNTUgLyAxMDAsIG1bNF0pIC8vIHJnYigxMDAlLCAwJSwgMCUsIDEpCiAgICAgIDogKG0gPSByZUhzbFBlcmNlbnQuZXhlYyhmb3JtYXQpKSA/IGhzbGEobVsxXSwgbVsyXSAvIDEwMCwgbVszXSAvIDEwMCwgMSkgLy8gaHNsKDEyMCwgNTAlLCA1MCUpCiAgICAgIDogKG0gPSByZUhzbGFQZXJjZW50LmV4ZWMoZm9ybWF0KSkgPyBoc2xhKG1bMV0sIG1bMl0gLyAxMDAsIG1bM10gLyAxMDAsIG1bNF0pIC8vIGhzbGEoMTIwLCA1MCUsIDUwJSwgMSkKICAgICAgOiBuYW1lZC5oYXNPd25Qcm9wZXJ0eShmb3JtYXQpID8gcmdibihuYW1lZFtmb3JtYXRdKQogICAgICA6IGZvcm1hdCA9PT0gInRyYW5zcGFyZW50IiA/IG5ldyBSZ2IoTmFOLCBOYU4sIE5hTiwgMCkKICAgICAgOiBudWxsOwp9CgpmdW5jdGlvbiByZ2JuKG4pIHsKICByZXR1cm4gbmV3IFJnYihuID4+IDE2ICYgMHhmZiwgbiA+PiA4ICYgMHhmZiwgbiAmIDB4ZmYsIDEpOwp9CgpmdW5jdGlvbiByZ2JhKHIsIGcsIGIsIGEpIHsKICBpZiAoYSA8PSAwKSByID0gZyA9IGIgPSBOYU47CiAgcmV0dXJuIG5ldyBSZ2IociwgZywgYiwgYSk7Cn0KCmZ1bmN0aW9uIHJnYkNvbnZlcnQobykgewogIGlmICghKG8gaW5zdGFuY2VvZiBDb2xvcikpIG8gPSBjb2xvcihvKTsKICBpZiAoIW8pIHJldHVybiBuZXcgUmdiOwogIG8gPSBvLnJnYigpOwogIHJldHVybiBuZXcgUmdiKG8uciwgby5nLCBvLmIsIG8ub3BhY2l0eSk7Cn0KCmZ1bmN0aW9uIHJnYihyLCBnLCBiLCBvcGFjaXR5KSB7CiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyByZ2JDb252ZXJ0KHIpIDogbmV3IFJnYihyLCBnLCBiLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7Cn0KCmZ1bmN0aW9uIFJnYihyLCBnLCBiLCBvcGFjaXR5KSB7CiAgdGhpcy5yID0gK3I7CiAgdGhpcy5nID0gK2c7CiAgdGhpcy5iID0gK2I7CiAgdGhpcy5vcGFjaXR5ID0gK29wYWNpdHk7Cn0KCmRlZmluZShSZ2IsIHJnYiwgZXh0ZW5kKENvbG9yLCB7CiAgYnJpZ2h0ZXI6IGZ1bmN0aW9uKGspIHsKICAgIGsgPSBrID09IG51bGwgPyBicmlnaHRlciA6IE1hdGgucG93KGJyaWdodGVyLCBrKTsKICAgIHJldHVybiBuZXcgUmdiKHRoaXMuciAqIGssIHRoaXMuZyAqIGssIHRoaXMuYiAqIGssIHRoaXMub3BhY2l0eSk7CiAgfSwKICBkYXJrZXI6IGZ1bmN0aW9uKGspIHsKICAgIGsgPSBrID09IG51bGwgPyBkYXJrZXIgOiBNYXRoLnBvdyhkYXJrZXIsIGspOwogICAgcmV0dXJuIG5ldyBSZ2IodGhpcy5yICogaywgdGhpcy5nICogaywgdGhpcy5iICogaywgdGhpcy5vcGFjaXR5KTsKICB9LAogIHJnYjogZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gdGhpczsKICB9LAogIGRpc3BsYXlhYmxlOiBmdW5jdGlvbigpIHsKICAgIHJldHVybiAoMCA8PSB0aGlzLnIgJiYgdGhpcy5yIDw9IDI1NSkKICAgICAgICAmJiAoMCA8PSB0aGlzLmcgJiYgdGhpcy5nIDw9IDI1NSkKICAgICAgICAmJiAoMCA8PSB0aGlzLmIgJiYgdGhpcy5iIDw9IDI1NSkKICAgICAgICAmJiAoMCA8PSB0aGlzLm9wYWNpdHkgJiYgdGhpcy5vcGFjaXR5IDw9IDEpOwogIH0sCiAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkgewogICAgdmFyIGEgPSB0aGlzLm9wYWNpdHk7IGEgPSBpc05hTihhKSA/IDEgOiBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBhKSk7CiAgICByZXR1cm4gKGEgPT09IDEgPyAicmdiKCIgOiAicmdiYSgiKQogICAgICAgICsgTWF0aC5tYXgoMCwgTWF0aC5taW4oMjU1LCBNYXRoLnJvdW5kKHRoaXMucikgfHwgMCkpICsgIiwgIgogICAgICAgICsgTWF0aC5tYXgoMCwgTWF0aC5taW4oMjU1LCBNYXRoLnJvdW5kKHRoaXMuZykgfHwgMCkpICsgIiwgIgogICAgICAgICsgTWF0aC5tYXgoMCwgTWF0aC5taW4oMjU1LCBNYXRoLnJvdW5kKHRoaXMuYikgfHwgMCkpCiAgICAgICAgKyAoYSA9PT0gMSA/ICIpIiA6ICIsICIgKyBhICsgIikiKTsKICB9Cn0pKTsKCmZ1bmN0aW9uIGhzbGEoaCwgcywgbCwgYSkgewogIGlmIChhIDw9IDApIGggPSBzID0gbCA9IE5hTjsKICBlbHNlIGlmIChsIDw9IDAgfHwgbCA+PSAxKSBoID0gcyA9IE5hTjsKICBlbHNlIGlmIChzIDw9IDApIGggPSBOYU47CiAgcmV0dXJuIG5ldyBIc2woaCwgcywgbCwgYSk7Cn0KCmZ1bmN0aW9uIGhzbENvbnZlcnQobykgewogIGlmIChvIGluc3RhbmNlb2YgSHNsKSByZXR1cm4gbmV3IEhzbChvLmgsIG8ucywgby5sLCBvLm9wYWNpdHkpOwogIGlmICghKG8gaW5zdGFuY2VvZiBDb2xvcikpIG8gPSBjb2xvcihvKTsKICBpZiAoIW8pIHJldHVybiBuZXcgSHNsOwogIGlmIChvIGluc3RhbmNlb2YgSHNsKSByZXR1cm4gbzsKICBvID0gby5yZ2IoKTsKICB2YXIgciA9IG8uciAvIDI1NSwKICAgICAgZyA9IG8uZyAvIDI1NSwKICAgICAgYiA9IG8uYiAvIDI1NSwKICAgICAgbWluID0gTWF0aC5taW4ociwgZywgYiksCiAgICAgIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpLAogICAgICBoID0gTmFOLAogICAgICBzID0gbWF4IC0gbWluLAogICAgICBsID0gKG1heCArIG1pbikgLyAyOwogIGlmIChzKSB7CiAgICBpZiAociA9PT0gbWF4KSBoID0gKGcgLSBiKSAvIHMgKyAoZyA8IGIpICogNjsKICAgIGVsc2UgaWYgKGcgPT09IG1heCkgaCA9IChiIC0gcikgLyBzICsgMjsKICAgIGVsc2UgaCA9IChyIC0gZykgLyBzICsgNDsKICAgIHMgLz0gbCA8IDAuNSA/IG1heCArIG1pbiA6IDIgLSBtYXggLSBtaW47CiAgICBoICo9IDYwOwogIH0gZWxzZSB7CiAgICBzID0gbCA+IDAgJiYgbCA8IDEgPyAwIDogaDsKICB9CiAgcmV0dXJuIG5ldyBIc2woaCwgcywgbCwgby5vcGFjaXR5KTsKfQoKZnVuY3Rpb24gaHNsKGgsIHMsIGwsIG9wYWNpdHkpIHsKICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGhzbENvbnZlcnQoaCkgOiBuZXcgSHNsKGgsIHMsIGwsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTsKfQoKZnVuY3Rpb24gSHNsKGgsIHMsIGwsIG9wYWNpdHkpIHsKICB0aGlzLmggPSAraDsKICB0aGlzLnMgPSArczsKICB0aGlzLmwgPSArbDsKICB0aGlzLm9wYWNpdHkgPSArb3BhY2l0eTsKfQoKZGVmaW5lKEhzbCwgaHNsLCBleHRlbmQoQ29sb3IsIHsKICBicmlnaHRlcjogZnVuY3Rpb24oaykgewogICAgayA9IGsgPT0gbnVsbCA/IGJyaWdodGVyIDogTWF0aC5wb3coYnJpZ2h0ZXIsIGspOwogICAgcmV0dXJuIG5ldyBIc2wodGhpcy5oLCB0aGlzLnMsIHRoaXMubCAqIGssIHRoaXMub3BhY2l0eSk7CiAgfSwKICBkYXJrZXI6IGZ1bmN0aW9uKGspIHsKICAgIGsgPSBrID09IG51bGwgPyBkYXJrZXIgOiBNYXRoLnBvdyhkYXJrZXIsIGspOwogICAgcmV0dXJuIG5ldyBIc2wodGhpcy5oLCB0aGlzLnMsIHRoaXMubCAqIGssIHRoaXMub3BhY2l0eSk7CiAgfSwKICByZ2I6IGZ1bmN0aW9uKCkgewogICAgdmFyIGggPSB0aGlzLmggJSAzNjAgKyAodGhpcy5oIDwgMCkgKiAzNjAsCiAgICAgICAgcyA9IGlzTmFOKGgpIHx8IGlzTmFOKHRoaXMucykgPyAwIDogdGhpcy5zLAogICAgICAgIGwgPSB0aGlzLmwsCiAgICAgICAgbTIgPSBsICsgKGwgPCAwLjUgPyBsIDogMSAtIGwpICogcywKICAgICAgICBtMSA9IDIgKiBsIC0gbTI7CiAgICByZXR1cm4gbmV3IFJnYigKICAgICAgaHNsMnJnYihoID49IDI0MCA/IGggLSAyNDAgOiBoICsgMTIwLCBtMSwgbTIpLAogICAgICBoc2wycmdiKGgsIG0xLCBtMiksCiAgICAgIGhzbDJyZ2IoaCA8IDEyMCA/IGggKyAyNDAgOiBoIC0gMTIwLCBtMSwgbTIpLAogICAgICB0aGlzLm9wYWNpdHkKICAgICk7CiAgfSwKICBkaXNwbGF5YWJsZTogZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gKDAgPD0gdGhpcy5zICYmIHRoaXMucyA8PSAxIHx8IGlzTmFOKHRoaXMucykpCiAgICAgICAgJiYgKDAgPD0gdGhpcy5sICYmIHRoaXMubCA8PSAxKQogICAgICAgICYmICgwIDw9IHRoaXMub3BhY2l0eSAmJiB0aGlzLm9wYWNpdHkgPD0gMSk7CiAgfQp9KSk7CgovKiBGcm9tIEZ2RCAxMy4zNywgQ1NTIENvbG9yIE1vZHVsZSBMZXZlbCAzICovCmZ1bmN0aW9uIGhzbDJyZ2IoaCwgbTEsIG0yKSB7CiAgcmV0dXJuIChoIDwgNjAgPyBtMSArIChtMiAtIG0xKSAqIGggLyA2MAogICAgICA6IGggPCAxODAgPyBtMgogICAgICA6IGggPCAyNDAgPyBtMSArIChtMiAtIG0xKSAqICgyNDAgLSBoKSAvIDYwCiAgICAgIDogbTEpICogMjU1Owp9Cgp2YXIgZGVnMnJhZCA9IE1hdGguUEkgLyAxODA7CnZhciByYWQyZGVnID0gMTgwIC8gTWF0aC5QSTsKCnZhciBLbiA9IDE4Owp2YXIgWG4gPSAwLjk1MDQ3MDsKdmFyIFluID0gMTsKdmFyIFpuID0gMS4wODg4MzA7CnZhciB0MCA9IDQgLyAyOTsKdmFyIHQxID0gNiAvIDI5Owp2YXIgdDIgPSAzICogdDEgKiB0MTsKdmFyIHQzID0gdDEgKiB0MSAqIHQxOwoKZnVuY3Rpb24gbGFiQ29udmVydChvKSB7CiAgaWYgKG8gaW5zdGFuY2VvZiBMYWIpIHJldHVybiBuZXcgTGFiKG8ubCwgby5hLCBvLmIsIG8ub3BhY2l0eSk7CiAgaWYgKG8gaW5zdGFuY2VvZiBIY2wpIHsKICAgIHZhciBoID0gby5oICogZGVnMnJhZDsKICAgIHJldHVybiBuZXcgTGFiKG8ubCwgTWF0aC5jb3MoaCkgKiBvLmMsIE1hdGguc2luKGgpICogby5jLCBvLm9wYWNpdHkpOwogIH0KICBpZiAoIShvIGluc3RhbmNlb2YgUmdiKSkgbyA9IHJnYkNvbnZlcnQobyk7CiAgdmFyIGIgPSByZ2IyeHl6KG8uciksCiAgICAgIGEgPSByZ2IyeHl6KG8uZyksCiAgICAgIGwgPSByZ2IyeHl6KG8uYiksCiAgICAgIHggPSB4eXoybGFiKCgwLjQxMjQ1NjQgKiBiICsgMC4zNTc1NzYxICogYSArIDAuMTgwNDM3NSAqIGwpIC8gWG4pLAogICAgICB5ID0geHl6MmxhYigoMC4yMTI2NzI5ICogYiArIDAuNzE1MTUyMiAqIGEgKyAwLjA3MjE3NTAgKiBsKSAvIFluKSwKICAgICAgeiA9IHh5ejJsYWIoKDAuMDE5MzMzOSAqIGIgKyAwLjExOTE5MjAgKiBhICsgMC45NTAzMDQxICogbCkgLyBabik7CiAgcmV0dXJuIG5ldyBMYWIoMTE2ICogeSAtIDE2LCA1MDAgKiAoeCAtIHkpLCAyMDAgKiAoeSAtIHopLCBvLm9wYWNpdHkpOwp9CgpmdW5jdGlvbiBsYWIobCwgYSwgYiwgb3BhY2l0eSkgewogIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gbGFiQ29udmVydChsKSA6IG5ldyBMYWIobCwgYSwgYiwgb3BhY2l0eSA9PSBudWxsID8gMSA6IG9wYWNpdHkpOwp9CgpmdW5jdGlvbiBMYWIobCwgYSwgYiwgb3BhY2l0eSkgewogIHRoaXMubCA9ICtsOwogIHRoaXMuYSA9ICthOwogIHRoaXMuYiA9ICtiOwogIHRoaXMub3BhY2l0eSA9ICtvcGFjaXR5Owp9CgpkZWZpbmUoTGFiLCBsYWIsIGV4dGVuZChDb2xvciwgewogIGJyaWdodGVyOiBmdW5jdGlvbihrKSB7CiAgICByZXR1cm4gbmV3IExhYih0aGlzLmwgKyBLbiAqIChrID09IG51bGwgPyAxIDogayksIHRoaXMuYSwgdGhpcy5iLCB0aGlzLm9wYWNpdHkpOwogIH0sCiAgZGFya2VyOiBmdW5jdGlvbihrKSB7CiAgICByZXR1cm4gbmV3IExhYih0aGlzLmwgLSBLbiAqIChrID09IG51bGwgPyAxIDogayksIHRoaXMuYSwgdGhpcy5iLCB0aGlzLm9wYWNpdHkpOwogIH0sCiAgcmdiOiBmdW5jdGlvbigpIHsKICAgIHZhciB5ID0gKHRoaXMubCArIDE2KSAvIDExNiwKICAgICAgICB4ID0gaXNOYU4odGhpcy5hKSA/IHkgOiB5ICsgdGhpcy5hIC8gNTAwLAogICAgICAgIHogPSBpc05hTih0aGlzLmIpID8geSA6IHkgLSB0aGlzLmIgLyAyMDA7CiAgICB5ID0gWW4gKiBsYWIyeHl6KHkpOwogICAgeCA9IFhuICogbGFiMnh5eih4KTsKICAgIHogPSBabiAqIGxhYjJ4eXooeik7CiAgICByZXR1cm4gbmV3IFJnYigKICAgICAgeHl6MnJnYiggMy4yNDA0NTQyICogeCAtIDEuNTM3MTM4NSAqIHkgLSAwLjQ5ODUzMTQgKiB6KSwgLy8gRDY1IC0+IHNSR0IKICAgICAgeHl6MnJnYigtMC45NjkyNjYwICogeCArIDEuODc2MDEwOCAqIHkgKyAwLjA0MTU1NjAgKiB6KSwKICAgICAgeHl6MnJnYiggMC4wNTU2NDM0ICogeCAtIDAuMjA0MDI1OSAqIHkgKyAxLjA1NzIyNTIgKiB6KSwKICAgICAgdGhpcy5vcGFjaXR5CiAgICApOwogIH0KfSkpOwoKZnVuY3Rpb24geHl6MmxhYih0KSB7CiAgcmV0dXJuIHQgPiB0MyA/IE1hdGgucG93KHQsIDEgLyAzKSA6IHQgLyB0MiArIHQwOwp9CgpmdW5jdGlvbiBsYWIyeHl6KHQpIHsKICByZXR1cm4gdCA+IHQxID8gdCAqIHQgKiB0IDogdDIgKiAodCAtIHQwKTsKfQoKZnVuY3Rpb24geHl6MnJnYih4KSB7CiAgcmV0dXJuIDI1NSAqICh4IDw9IDAuMDAzMTMwOCA/IDEyLjkyICogeCA6IDEuMDU1ICogTWF0aC5wb3coeCwgMSAvIDIuNCkgLSAwLjA1NSk7Cn0KCmZ1bmN0aW9uIHJnYjJ4eXooeCkgewogIHJldHVybiAoeCAvPSAyNTUpIDw9IDAuMDQwNDUgPyB4IC8gMTIuOTIgOiBNYXRoLnBvdygoeCArIDAuMDU1KSAvIDEuMDU1LCAyLjQpOwp9CgpmdW5jdGlvbiBoY2xDb252ZXJ0KG8pIHsKICBpZiAobyBpbnN0YW5jZW9mIEhjbCkgcmV0dXJuIG5ldyBIY2woby5oLCBvLmMsIG8ubCwgby5vcGFjaXR5KTsKICBpZiAoIShvIGluc3RhbmNlb2YgTGFiKSkgbyA9IGxhYkNvbnZlcnQobyk7CiAgdmFyIGggPSBNYXRoLmF0YW4yKG8uYiwgby5hKSAqIHJhZDJkZWc7CiAgcmV0dXJuIG5ldyBIY2woaCA8IDAgPyBoICsgMzYwIDogaCwgTWF0aC5zcXJ0KG8uYSAqIG8uYSArIG8uYiAqIG8uYiksIG8ubCwgby5vcGFjaXR5KTsKfQoKZnVuY3Rpb24gaGNsKGgsIGMsIGwsIG9wYWNpdHkpIHsKICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGhjbENvbnZlcnQoaCkgOiBuZXcgSGNsKGgsIGMsIGwsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTsKfQoKZnVuY3Rpb24gSGNsKGgsIGMsIGwsIG9wYWNpdHkpIHsKICB0aGlzLmggPSAraDsKICB0aGlzLmMgPSArYzsKICB0aGlzLmwgPSArbDsKICB0aGlzLm9wYWNpdHkgPSArb3BhY2l0eTsKfQoKZGVmaW5lKEhjbCwgaGNsLCBleHRlbmQoQ29sb3IsIHsKICBicmlnaHRlcjogZnVuY3Rpb24oaykgewogICAgcmV0dXJuIG5ldyBIY2wodGhpcy5oLCB0aGlzLmMsIHRoaXMubCArIEtuICogKGsgPT0gbnVsbCA/IDEgOiBrKSwgdGhpcy5vcGFjaXR5KTsKICB9LAogIGRhcmtlcjogZnVuY3Rpb24oaykgewogICAgcmV0dXJuIG5ldyBIY2wodGhpcy5oLCB0aGlzLmMsIHRoaXMubCAtIEtuICogKGsgPT0gbnVsbCA/IDEgOiBrKSwgdGhpcy5vcGFjaXR5KTsKICB9LAogIHJnYjogZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gbGFiQ29udmVydCh0aGlzKS5yZ2IoKTsKICB9Cn0pKTsKCnZhciBBID0gLTAuMTQ4NjE7CnZhciBCID0gKzEuNzgyNzc7CnZhciBDID0gLTAuMjkyMjc7CnZhciBEID0gLTAuOTA2NDk7CnZhciBFID0gKzEuOTcyOTQ7CnZhciBFRCA9IEUgKiBEOwp2YXIgRUIgPSBFICogQjsKdmFyIEJDX0RBID0gQiAqIEMgLSBEICogQTsKCmZ1bmN0aW9uIGN1YmVoZWxpeENvbnZlcnQobykgewogIGlmIChvIGluc3RhbmNlb2YgQ3ViZWhlbGl4KSByZXR1cm4gbmV3IEN1YmVoZWxpeChvLmgsIG8ucywgby5sLCBvLm9wYWNpdHkpOwogIGlmICghKG8gaW5zdGFuY2VvZiBSZ2IpKSBvID0gcmdiQ29udmVydChvKTsKICB2YXIgciA9IG8uciAvIDI1NSwKICAgICAgZyA9IG8uZyAvIDI1NSwKICAgICAgYiA9IG8uYiAvIDI1NSwKICAgICAgbCA9IChCQ19EQSAqIGIgKyBFRCAqIHIgLSBFQiAqIGcpIC8gKEJDX0RBICsgRUQgLSBFQiksCiAgICAgIGJsID0gYiAtIGwsCiAgICAgIGsgPSAoRSAqIChnIC0gbCkgLSBDICogYmwpIC8gRCwKICAgICAgcyA9IE1hdGguc3FydChrICogayArIGJsICogYmwpIC8gKEUgKiBsICogKDEgLSBsKSksIC8vIE5hTiBpZiBsPTAgb3IgbD0xCiAgICAgIGggPSBzID8gTWF0aC5hdGFuMihrLCBibCkgKiByYWQyZGVnIC0gMTIwIDogTmFOOwogIHJldHVybiBuZXcgQ3ViZWhlbGl4KGggPCAwID8gaCArIDM2MCA6IGgsIHMsIGwsIG8ub3BhY2l0eSk7Cn0KCmZ1bmN0aW9uIGN1YmVoZWxpeChoLCBzLCBsLCBvcGFjaXR5KSB7CiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBjdWJlaGVsaXhDb252ZXJ0KGgpIDogbmV3IEN1YmVoZWxpeChoLCBzLCBsLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7Cn0KCmZ1bmN0aW9uIEN1YmVoZWxpeChoLCBzLCBsLCBvcGFjaXR5KSB7CiAgdGhpcy5oID0gK2g7CiAgdGhpcy5zID0gK3M7CiAgdGhpcy5sID0gK2w7CiAgdGhpcy5vcGFjaXR5ID0gK29wYWNpdHk7Cn0KCmRlZmluZShDdWJlaGVsaXgsIGN1YmVoZWxpeCwgZXh0ZW5kKENvbG9yLCB7CiAgYnJpZ2h0ZXI6IGZ1bmN0aW9uKGspIHsKICAgIGsgPSBrID09IG51bGwgPyBicmlnaHRlciA6IE1hdGgucG93KGJyaWdodGVyLCBrKTsKICAgIHJldHVybiBuZXcgQ3ViZWhlbGl4KHRoaXMuaCwgdGhpcy5zLCB0aGlzLmwgKiBrLCB0aGlzLm9wYWNpdHkpOwogIH0sCiAgZGFya2VyOiBmdW5jdGlvbihrKSB7CiAgICBrID0gayA9PSBudWxsID8gZGFya2VyIDogTWF0aC5wb3coZGFya2VyLCBrKTsKICAgIHJldHVybiBuZXcgQ3ViZWhlbGl4KHRoaXMuaCwgdGhpcy5zLCB0aGlzLmwgKiBrLCB0aGlzLm9wYWNpdHkpOwogIH0sCiAgcmdiOiBmdW5jdGlvbigpIHsKICAgIHZhciBoID0gaXNOYU4odGhpcy5oKSA/IDAgOiAodGhpcy5oICsgMTIwKSAqIGRlZzJyYWQsCiAgICAgICAgbCA9ICt0aGlzLmwsCiAgICAgICAgYSA9IGlzTmFOKHRoaXMucykgPyAwIDogdGhpcy5zICogbCAqICgxIC0gbCksCiAgICAgICAgY29zaCA9IE1hdGguY29zKGgpLAogICAgICAgIHNpbmggPSBNYXRoLnNpbihoKTsKICAgIHJldHVybiBuZXcgUmdiKAogICAgICAyNTUgKiAobCArIGEgKiAoQSAqIGNvc2ggKyBCICogc2luaCkpLAogICAgICAyNTUgKiAobCArIGEgKiAoQyAqIGNvc2ggKyBEICogc2luaCkpLAogICAgICAyNTUgKiAobCArIGEgKiAoRSAqIGNvc2gpKSwKICAgICAgdGhpcy5vcGFjaXR5CiAgICApOwogIH0KfSkpOwoKZXhwb3J0cy5jb2xvciA9IGNvbG9yOwpleHBvcnRzLnJnYiA9IHJnYjsKZXhwb3J0cy5oc2wgPSBoc2w7CmV4cG9ydHMubGFiID0gbGFiOwpleHBvcnRzLmhjbCA9IGhjbDsKZXhwb3J0cy5jdWJlaGVsaXggPSBjdWJlaGVsaXg7CgpPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pOwoKfSkpKTsKCn0se31dLDY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewovLyBodHRwczovL2QzanMub3JnL2QzLWZvcm1hdC8gVmVyc2lvbiAxLjIuMC4gQ29weXJpZ2h0IDIwMTcgTWlrZSBCb3N0b2NrLgooZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkgewoJdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gZmFjdG9yeShleHBvcnRzKSA6Cgl0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWydleHBvcnRzJ10sIGZhY3RvcnkpIDoKCShmYWN0b3J5KChnbG9iYWwuZDMgPSBnbG9iYWwuZDMgfHwge30pKSk7Cn0odGhpcywgKGZ1bmN0aW9uIChleHBvcnRzKSB7ICd1c2Ugc3RyaWN0JzsKCi8vIENvbXB1dGVzIHRoZSBkZWNpbWFsIGNvZWZmaWNpZW50IGFuZCBleHBvbmVudCBvZiB0aGUgc3BlY2lmaWVkIG51bWJlciB4IHdpdGgKLy8gc2lnbmlmaWNhbnQgZGlnaXRzIHAsIHdoZXJlIHggaXMgcG9zaXRpdmUgYW5kIHAgaXMgaW4gWzEsIDIxXSBvciB1bmRlZmluZWQuCi8vIEZvciBleGFtcGxlLCBmb3JtYXREZWNpbWFsKDEuMjMpIHJldHVybnMgWyIxMjMiLCAwXS4KdmFyIGZvcm1hdERlY2ltYWwgPSBmdW5jdGlvbih4LCBwKSB7CiAgaWYgKChpID0gKHggPSBwID8geC50b0V4cG9uZW50aWFsKHAgLSAxKSA6IHgudG9FeHBvbmVudGlhbCgpKS5pbmRleE9mKCJlIikpIDwgMCkgcmV0dXJuIG51bGw7IC8vIE5hTiwgwrFJbmZpbml0eQogIHZhciBpLCBjb2VmZmljaWVudCA9IHguc2xpY2UoMCwgaSk7CgogIC8vIFRoZSBzdHJpbmcgcmV0dXJuZWQgYnkgdG9FeHBvbmVudGlhbCBlaXRoZXIgaGFzIHRoZSBmb3JtIFxkXC5cZCtlWy0rXVxkKwogIC8vIChlLmcuLCAxLjJlKzMpIG9yIHRoZSBmb3JtIFxkZVstK11cZCsgKGUuZy4sIDFlKzMpLgogIHJldHVybiBbCiAgICBjb2VmZmljaWVudC5sZW5ndGggPiAxID8gY29lZmZpY2llbnRbMF0gKyBjb2VmZmljaWVudC5zbGljZSgyKSA6IGNvZWZmaWNpZW50LAogICAgK3guc2xpY2UoaSArIDEpCiAgXTsKfTsKCnZhciBleHBvbmVudCA9IGZ1bmN0aW9uKHgpIHsKICByZXR1cm4geCA9IGZvcm1hdERlY2ltYWwoTWF0aC5hYnMoeCkpLCB4ID8geFsxXSA6IE5hTjsKfTsKCnZhciBmb3JtYXRHcm91cCA9IGZ1bmN0aW9uKGdyb3VwaW5nLCB0aG91c2FuZHMpIHsKICByZXR1cm4gZnVuY3Rpb24odmFsdWUsIHdpZHRoKSB7CiAgICB2YXIgaSA9IHZhbHVlLmxlbmd0aCwKICAgICAgICB0ID0gW10sCiAgICAgICAgaiA9IDAsCiAgICAgICAgZyA9IGdyb3VwaW5nWzBdLAogICAgICAgIGxlbmd0aCA9IDA7CgogICAgd2hpbGUgKGkgPiAwICYmIGcgPiAwKSB7CiAgICAgIGlmIChsZW5ndGggKyBnICsgMSA+IHdpZHRoKSBnID0gTWF0aC5tYXgoMSwgd2lkdGggLSBsZW5ndGgpOwogICAgICB0LnB1c2godmFsdWUuc3Vic3RyaW5nKGkgLT0gZywgaSArIGcpKTsKICAgICAgaWYgKChsZW5ndGggKz0gZyArIDEpID4gd2lkdGgpIGJyZWFrOwogICAgICBnID0gZ3JvdXBpbmdbaiA9IChqICsgMSkgJSBncm91cGluZy5sZW5ndGhdOwogICAgfQoKICAgIHJldHVybiB0LnJldmVyc2UoKS5qb2luKHRob3VzYW5kcyk7CiAgfTsKfTsKCnZhciBmb3JtYXROdW1lcmFscyA9IGZ1bmN0aW9uKG51bWVyYWxzKSB7CiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7CiAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvWzAtOV0vZywgZnVuY3Rpb24oaSkgewogICAgICByZXR1cm4gbnVtZXJhbHNbK2ldOwogICAgfSk7CiAgfTsKfTsKCnZhciBmb3JtYXREZWZhdWx0ID0gZnVuY3Rpb24oeCwgcCkgewogIHggPSB4LnRvUHJlY2lzaW9uKHApOwoKICBvdXQ6IGZvciAodmFyIG4gPSB4Lmxlbmd0aCwgaSA9IDEsIGkwID0gLTEsIGkxOyBpIDwgbjsgKytpKSB7CiAgICBzd2l0Y2ggKHhbaV0pIHsKICAgICAgY2FzZSAiLiI6IGkwID0gaTEgPSBpOyBicmVhazsKICAgICAgY2FzZSAiMCI6IGlmIChpMCA9PT0gMCkgaTAgPSBpOyBpMSA9IGk7IGJyZWFrOwogICAgICBjYXNlICJlIjogYnJlYWsgb3V0OwogICAgICBkZWZhdWx0OiBpZiAoaTAgPiAwKSBpMCA9IDA7IGJyZWFrOwogICAgfQogIH0KCiAgcmV0dXJuIGkwID4gMCA/IHguc2xpY2UoMCwgaTApICsgeC5zbGljZShpMSArIDEpIDogeDsKfTsKCnZhciBwcmVmaXhFeHBvbmVudDsKCnZhciBmb3JtYXRQcmVmaXhBdXRvID0gZnVuY3Rpb24oeCwgcCkgewogIHZhciBkID0gZm9ybWF0RGVjaW1hbCh4LCBwKTsKICBpZiAoIWQpIHJldHVybiB4ICsgIiI7CiAgdmFyIGNvZWZmaWNpZW50ID0gZFswXSwKICAgICAgZXhwb25lbnQgPSBkWzFdLAogICAgICBpID0gZXhwb25lbnQgLSAocHJlZml4RXhwb25lbnQgPSBNYXRoLm1heCgtOCwgTWF0aC5taW4oOCwgTWF0aC5mbG9vcihleHBvbmVudCAvIDMpKSkgKiAzKSArIDEsCiAgICAgIG4gPSBjb2VmZmljaWVudC5sZW5ndGg7CiAgcmV0dXJuIGkgPT09IG4gPyBjb2VmZmljaWVudAogICAgICA6IGkgPiBuID8gY29lZmZpY2llbnQgKyBuZXcgQXJyYXkoaSAtIG4gKyAxKS5qb2luKCIwIikKICAgICAgOiBpID4gMCA/IGNvZWZmaWNpZW50LnNsaWNlKDAsIGkpICsgIi4iICsgY29lZmZpY2llbnQuc2xpY2UoaSkKICAgICAgOiAiMC4iICsgbmV3IEFycmF5KDEgLSBpKS5qb2luKCIwIikgKyBmb3JtYXREZWNpbWFsKHgsIE1hdGgubWF4KDAsIHAgKyBpIC0gMSkpWzBdOyAvLyBsZXNzIHRoYW4gMXkhCn07Cgp2YXIgZm9ybWF0Um91bmRlZCA9IGZ1bmN0aW9uKHgsIHApIHsKICB2YXIgZCA9IGZvcm1hdERlY2ltYWwoeCwgcCk7CiAgaWYgKCFkKSByZXR1cm4geCArICIiOwogIHZhciBjb2VmZmljaWVudCA9IGRbMF0sCiAgICAgIGV4cG9uZW50ID0gZFsxXTsKICByZXR1cm4gZXhwb25lbnQgPCAwID8gIjAuIiArIG5ldyBBcnJheSgtZXhwb25lbnQpLmpvaW4oIjAiKSArIGNvZWZmaWNpZW50CiAgICAgIDogY29lZmZpY2llbnQubGVuZ3RoID4gZXhwb25lbnQgKyAxID8gY29lZmZpY2llbnQuc2xpY2UoMCwgZXhwb25lbnQgKyAxKSArICIuIiArIGNvZWZmaWNpZW50LnNsaWNlKGV4cG9uZW50ICsgMSkKICAgICAgOiBjb2VmZmljaWVudCArIG5ldyBBcnJheShleHBvbmVudCAtIGNvZWZmaWNpZW50Lmxlbmd0aCArIDIpLmpvaW4oIjAiKTsKfTsKCnZhciBmb3JtYXRUeXBlcyA9IHsKICAiIjogZm9ybWF0RGVmYXVsdCwKICAiJSI6IGZ1bmN0aW9uKHgsIHApIHsgcmV0dXJuICh4ICogMTAwKS50b0ZpeGVkKHApOyB9LAogICJiIjogZnVuY3Rpb24oeCkgeyByZXR1cm4gTWF0aC5yb3VuZCh4KS50b1N0cmluZygyKTsgfSwKICAiYyI6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIHggKyAiIjsgfSwKICAiZCI6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIE1hdGgucm91bmQoeCkudG9TdHJpbmcoMTApOyB9LAogICJlIjogZnVuY3Rpb24oeCwgcCkgeyByZXR1cm4geC50b0V4cG9uZW50aWFsKHApOyB9LAogICJmIjogZnVuY3Rpb24oeCwgcCkgeyByZXR1cm4geC50b0ZpeGVkKHApOyB9LAogICJnIjogZnVuY3Rpb24oeCwgcCkgeyByZXR1cm4geC50b1ByZWNpc2lvbihwKTsgfSwKICAibyI6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIE1hdGgucm91bmQoeCkudG9TdHJpbmcoOCk7IH0sCiAgInAiOiBmdW5jdGlvbih4LCBwKSB7IHJldHVybiBmb3JtYXRSb3VuZGVkKHggKiAxMDAsIHApOyB9LAogICJyIjogZm9ybWF0Um91bmRlZCwKICAicyI6IGZvcm1hdFByZWZpeEF1dG8sCiAgIlgiOiBmdW5jdGlvbih4KSB7IHJldHVybiBNYXRoLnJvdW5kKHgpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpOyB9LAogICJ4IjogZnVuY3Rpb24oeCkgeyByZXR1cm4gTWF0aC5yb3VuZCh4KS50b1N0cmluZygxNik7IH0KfTsKCi8vIFtbZmlsbF1hbGlnbl1bc2lnbl1bc3ltYm9sXVswXVt3aWR0aF1bLF1bLnByZWNpc2lvbl1bdHlwZV0KdmFyIHJlID0gL14oPzooLik/KFs8Pj1eXSkpPyhbK1wtXCggXSk/KFskI10pPygwKT8oXGQrKT8oLCk/KFwuXGQrKT8oW2EteiVdKT8kL2k7CgpmdW5jdGlvbiBmb3JtYXRTcGVjaWZpZXIoc3BlY2lmaWVyKSB7CiAgcmV0dXJuIG5ldyBGb3JtYXRTcGVjaWZpZXIoc3BlY2lmaWVyKTsKfQoKZm9ybWF0U3BlY2lmaWVyLnByb3RvdHlwZSA9IEZvcm1hdFNwZWNpZmllci5wcm90b3R5cGU7IC8vIGluc3RhbmNlb2YKCmZ1bmN0aW9uIEZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIpIHsKICBpZiAoIShtYXRjaCA9IHJlLmV4ZWMoc3BlY2lmaWVyKSkpIHRocm93IG5ldyBFcnJvcigiaW52YWxpZCBmb3JtYXQ6ICIgKyBzcGVjaWZpZXIpOwoKICB2YXIgbWF0Y2gsCiAgICAgIGZpbGwgPSBtYXRjaFsxXSB8fCAiICIsCiAgICAgIGFsaWduID0gbWF0Y2hbMl0gfHwgIj4iLAogICAgICBzaWduID0gbWF0Y2hbM10gfHwgIi0iLAogICAgICBzeW1ib2wgPSBtYXRjaFs0XSB8fCAiIiwKICAgICAgemVybyA9ICEhbWF0Y2hbNV0sCiAgICAgIHdpZHRoID0gbWF0Y2hbNl0gJiYgK21hdGNoWzZdLAogICAgICBjb21tYSA9ICEhbWF0Y2hbN10sCiAgICAgIHByZWNpc2lvbiA9IG1hdGNoWzhdICYmICttYXRjaFs4XS5zbGljZSgxKSwKICAgICAgdHlwZSA9IG1hdGNoWzldIHx8ICIiOwoKICAvLyBUaGUgIm4iIHR5cGUgaXMgYW4gYWxpYXMgZm9yICIsZyIuCiAgaWYgKHR5cGUgPT09ICJuIikgY29tbWEgPSB0cnVlLCB0eXBlID0gImciOwoKICAvLyBNYXAgaW52YWxpZCB0eXBlcyB0byB0aGUgZGVmYXVsdCBmb3JtYXQuCiAgZWxzZSBpZiAoIWZvcm1hdFR5cGVzW3R5cGVdKSB0eXBlID0gIiI7CgogIC8vIElmIHplcm8gZmlsbCBpcyBzcGVjaWZpZWQsIHBhZGRpbmcgZ29lcyBhZnRlciBzaWduIGFuZCBiZWZvcmUgZGlnaXRzLgogIGlmICh6ZXJvIHx8IChmaWxsID09PSAiMCIgJiYgYWxpZ24gPT09ICI9IikpIHplcm8gPSB0cnVlLCBmaWxsID0gIjAiLCBhbGlnbiA9ICI9IjsKCiAgdGhpcy5maWxsID0gZmlsbDsKICB0aGlzLmFsaWduID0gYWxpZ247CiAgdGhpcy5zaWduID0gc2lnbjsKICB0aGlzLnN5bWJvbCA9IHN5bWJvbDsKICB0aGlzLnplcm8gPSB6ZXJvOwogIHRoaXMud2lkdGggPSB3aWR0aDsKICB0aGlzLmNvbW1hID0gY29tbWE7CiAgdGhpcy5wcmVjaXNpb24gPSBwcmVjaXNpb247CiAgdGhpcy50eXBlID0gdHlwZTsKfQoKRm9ybWF0U3BlY2lmaWVyLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkgewogIHJldHVybiB0aGlzLmZpbGwKICAgICAgKyB0aGlzLmFsaWduCiAgICAgICsgdGhpcy5zaWduCiAgICAgICsgdGhpcy5zeW1ib2wKICAgICAgKyAodGhpcy56ZXJvID8gIjAiIDogIiIpCiAgICAgICsgKHRoaXMud2lkdGggPT0gbnVsbCA/ICIiIDogTWF0aC5tYXgoMSwgdGhpcy53aWR0aCB8IDApKQogICAgICArICh0aGlzLmNvbW1hID8gIiwiIDogIiIpCiAgICAgICsgKHRoaXMucHJlY2lzaW9uID09IG51bGwgPyAiIiA6ICIuIiArIE1hdGgubWF4KDAsIHRoaXMucHJlY2lzaW9uIHwgMCkpCiAgICAgICsgdGhpcy50eXBlOwp9OwoKdmFyIGlkZW50aXR5ID0gZnVuY3Rpb24oeCkgewogIHJldHVybiB4Owp9OwoKdmFyIHByZWZpeGVzID0gWyJ5IiwieiIsImEiLCJmIiwicCIsIm4iLCLCtSIsIm0iLCIiLCJrIiwiTSIsIkciLCJUIiwiUCIsIkUiLCJaIiwiWSJdOwoKdmFyIGZvcm1hdExvY2FsZSA9IGZ1bmN0aW9uKGxvY2FsZSkgewogIHZhciBncm91cCA9IGxvY2FsZS5ncm91cGluZyAmJiBsb2NhbGUudGhvdXNhbmRzID8gZm9ybWF0R3JvdXAobG9jYWxlLmdyb3VwaW5nLCBsb2NhbGUudGhvdXNhbmRzKSA6IGlkZW50aXR5LAogICAgICBjdXJyZW5jeSA9IGxvY2FsZS5jdXJyZW5jeSwKICAgICAgZGVjaW1hbCA9IGxvY2FsZS5kZWNpbWFsLAogICAgICBudW1lcmFscyA9IGxvY2FsZS5udW1lcmFscyA/IGZvcm1hdE51bWVyYWxzKGxvY2FsZS5udW1lcmFscykgOiBpZGVudGl0eSwKICAgICAgcGVyY2VudCA9IGxvY2FsZS5wZXJjZW50IHx8ICIlIjsKCiAgZnVuY3Rpb24gbmV3Rm9ybWF0KHNwZWNpZmllcikgewogICAgc3BlY2lmaWVyID0gZm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllcik7CgogICAgdmFyIGZpbGwgPSBzcGVjaWZpZXIuZmlsbCwKICAgICAgICBhbGlnbiA9IHNwZWNpZmllci5hbGlnbiwKICAgICAgICBzaWduID0gc3BlY2lmaWVyLnNpZ24sCiAgICAgICAgc3ltYm9sID0gc3BlY2lmaWVyLnN5bWJvbCwKICAgICAgICB6ZXJvID0gc3BlY2lmaWVyLnplcm8sCiAgICAgICAgd2lkdGggPSBzcGVjaWZpZXIud2lkdGgsCiAgICAgICAgY29tbWEgPSBzcGVjaWZpZXIuY29tbWEsCiAgICAgICAgcHJlY2lzaW9uID0gc3BlY2lmaWVyLnByZWNpc2lvbiwKICAgICAgICB0eXBlID0gc3BlY2lmaWVyLnR5cGU7CgogICAgLy8gQ29tcHV0ZSB0aGUgcHJlZml4IGFuZCBzdWZmaXguCiAgICAvLyBGb3IgU0ktcHJlZml4LCB0aGUgc3VmZml4IGlzIGxhemlseSBjb21wdXRlZC4KICAgIHZhciBwcmVmaXggPSBzeW1ib2wgPT09ICIkIiA/IGN1cnJlbmN5WzBdIDogc3ltYm9sID09PSAiIyIgJiYgL1tib3hYXS8udGVzdCh0eXBlKSA/ICIwIiArIHR5cGUudG9Mb3dlckNhc2UoKSA6ICIiLAogICAgICAgIHN1ZmZpeCA9IHN5bWJvbCA9PT0gIiQiID8gY3VycmVuY3lbMV0gOiAvWyVwXS8udGVzdCh0eXBlKSA/IHBlcmNlbnQgOiAiIjsKCiAgICAvLyBXaGF0IGZvcm1hdCBmdW5jdGlvbiBzaG91bGQgd2UgdXNlPwogICAgLy8gSXMgdGhpcyBhbiBpbnRlZ2VyIHR5cGU/CiAgICAvLyBDYW4gdGhpcyB0eXBlIGdlbmVyYXRlIGV4cG9uZW50aWFsIG5vdGF0aW9uPwogICAgdmFyIGZvcm1hdFR5cGUgPSBmb3JtYXRUeXBlc1t0eXBlXSwKICAgICAgICBtYXliZVN1ZmZpeCA9ICF0eXBlIHx8IC9bZGVmZ3BycyVdLy50ZXN0KHR5cGUpOwoKICAgIC8vIFNldCB0aGUgZGVmYXVsdCBwcmVjaXNpb24gaWYgbm90IHNwZWNpZmllZCwKICAgIC8vIG9yIGNsYW1wIHRoZSBzcGVjaWZpZWQgcHJlY2lzaW9uIHRvIHRoZSBzdXBwb3J0ZWQgcmFuZ2UuCiAgICAvLyBGb3Igc2lnbmlmaWNhbnQgcHJlY2lzaW9uLCBpdCBtdXN0IGJlIGluIFsxLCAyMV0uCiAgICAvLyBGb3IgZml4ZWQgcHJlY2lzaW9uLCBpdCBtdXN0IGJlIGluIFswLCAyMF0uCiAgICBwcmVjaXNpb24gPSBwcmVjaXNpb24gPT0gbnVsbCA/ICh0eXBlID8gNiA6IDEyKQogICAgICAgIDogL1tncHJzXS8udGVzdCh0eXBlKSA/IE1hdGgubWF4KDEsIE1hdGgubWluKDIxLCBwcmVjaXNpb24pKQogICAgICAgIDogTWF0aC5tYXgoMCwgTWF0aC5taW4oMjAsIHByZWNpc2lvbikpOwoKICAgIGZ1bmN0aW9uIGZvcm1hdCh2YWx1ZSkgewogICAgICB2YXIgdmFsdWVQcmVmaXggPSBwcmVmaXgsCiAgICAgICAgICB2YWx1ZVN1ZmZpeCA9IHN1ZmZpeCwKICAgICAgICAgIGksIG4sIGM7CgogICAgICBpZiAodHlwZSA9PT0gImMiKSB7CiAgICAgICAgdmFsdWVTdWZmaXggPSBmb3JtYXRUeXBlKHZhbHVlKSArIHZhbHVlU3VmZml4OwogICAgICAgIHZhbHVlID0gIiI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdmFsdWUgPSArdmFsdWU7CgogICAgICAgIC8vIFBlcmZvcm0gdGhlIGluaXRpYWwgZm9ybWF0dGluZy4KICAgICAgICB2YXIgdmFsdWVOZWdhdGl2ZSA9IHZhbHVlIDwgMDsKICAgICAgICB2YWx1ZSA9IGZvcm1hdFR5cGUoTWF0aC5hYnModmFsdWUpLCBwcmVjaXNpb24pOwoKICAgICAgICAvLyBJZiBhIG5lZ2F0aXZlIHZhbHVlIHJvdW5kcyB0byB6ZXJvIGR1cmluZyBmb3JtYXR0aW5nLCB0cmVhdCBhcyBwb3NpdGl2ZS4KICAgICAgICBpZiAodmFsdWVOZWdhdGl2ZSAmJiArdmFsdWUgPT09IDApIHZhbHVlTmVnYXRpdmUgPSBmYWxzZTsKCiAgICAgICAgLy8gQ29tcHV0ZSB0aGUgcHJlZml4IGFuZCBzdWZmaXguCiAgICAgICAgdmFsdWVQcmVmaXggPSAodmFsdWVOZWdhdGl2ZSA/IChzaWduID09PSAiKCIgPyBzaWduIDogIi0iKSA6IHNpZ24gPT09ICItIiB8fCBzaWduID09PSAiKCIgPyAiIiA6IHNpZ24pICsgdmFsdWVQcmVmaXg7CiAgICAgICAgdmFsdWVTdWZmaXggPSB2YWx1ZVN1ZmZpeCArICh0eXBlID09PSAicyIgPyBwcmVmaXhlc1s4ICsgcHJlZml4RXhwb25lbnQgLyAzXSA6ICIiKSArICh2YWx1ZU5lZ2F0aXZlICYmIHNpZ24gPT09ICIoIiA/ICIpIiA6ICIiKTsKCiAgICAgICAgLy8gQnJlYWsgdGhlIGZvcm1hdHRlZCB2YWx1ZSBpbnRvIHRoZSBpbnRlZ2VyIOKAnHZhbHVl4oCdIHBhcnQgdGhhdCBjYW4gYmUKICAgICAgICAvLyBncm91cGVkLCBhbmQgZnJhY3Rpb25hbCBvciBleHBvbmVudGlhbCDigJxzdWZmaXjigJ0gcGFydCB0aGF0IGlzIG5vdC4KICAgICAgICBpZiAobWF5YmVTdWZmaXgpIHsKICAgICAgICAgIGkgPSAtMSwgbiA9IHZhbHVlLmxlbmd0aDsKICAgICAgICAgIHdoaWxlICgrK2kgPCBuKSB7CiAgICAgICAgICAgIGlmIChjID0gdmFsdWUuY2hhckNvZGVBdChpKSwgNDggPiBjIHx8IGMgPiA1NykgewogICAgICAgICAgICAgIHZhbHVlU3VmZml4ID0gKGMgPT09IDQ2ID8gZGVjaW1hbCArIHZhbHVlLnNsaWNlKGkgKyAxKSA6IHZhbHVlLnNsaWNlKGkpKSArIHZhbHVlU3VmZml4OwogICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMCwgaSk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8vIElmIHRoZSBmaWxsIGNoYXJhY3RlciBpcyBub3QgIjAiLCBncm91cGluZyBpcyBhcHBsaWVkIGJlZm9yZSBwYWRkaW5nLgogICAgICBpZiAoY29tbWEgJiYgIXplcm8pIHZhbHVlID0gZ3JvdXAodmFsdWUsIEluZmluaXR5KTsKCiAgICAgIC8vIENvbXB1dGUgdGhlIHBhZGRpbmcuCiAgICAgIHZhciBsZW5ndGggPSB2YWx1ZVByZWZpeC5sZW5ndGggKyB2YWx1ZS5sZW5ndGggKyB2YWx1ZVN1ZmZpeC5sZW5ndGgsCiAgICAgICAgICBwYWRkaW5nID0gbGVuZ3RoIDwgd2lkdGggPyBuZXcgQXJyYXkod2lkdGggLSBsZW5ndGggKyAxKS5qb2luKGZpbGwpIDogIiI7CgogICAgICAvLyBJZiB0aGUgZmlsbCBjaGFyYWN0ZXIgaXMgIjAiLCBncm91cGluZyBpcyBhcHBsaWVkIGFmdGVyIHBhZGRpbmcuCiAgICAgIGlmIChjb21tYSAmJiB6ZXJvKSB2YWx1ZSA9IGdyb3VwKHBhZGRpbmcgKyB2YWx1ZSwgcGFkZGluZy5sZW5ndGggPyB3aWR0aCAtIHZhbHVlU3VmZml4Lmxlbmd0aCA6IEluZmluaXR5KSwgcGFkZGluZyA9ICIiOwoKICAgICAgLy8gUmVjb25zdHJ1Y3QgdGhlIGZpbmFsIG91dHB1dCBiYXNlZCBvbiB0aGUgZGVzaXJlZCBhbGlnbm1lbnQuCiAgICAgIHN3aXRjaCAoYWxpZ24pIHsKICAgICAgICBjYXNlICI8IjogdmFsdWUgPSB2YWx1ZVByZWZpeCArIHZhbHVlICsgdmFsdWVTdWZmaXggKyBwYWRkaW5nOyBicmVhazsKICAgICAgICBjYXNlICI9IjogdmFsdWUgPSB2YWx1ZVByZWZpeCArIHBhZGRpbmcgKyB2YWx1ZSArIHZhbHVlU3VmZml4OyBicmVhazsKICAgICAgICBjYXNlICJeIjogdmFsdWUgPSBwYWRkaW5nLnNsaWNlKDAsIGxlbmd0aCA9IHBhZGRpbmcubGVuZ3RoID4+IDEpICsgdmFsdWVQcmVmaXggKyB2YWx1ZSArIHZhbHVlU3VmZml4ICsgcGFkZGluZy5zbGljZShsZW5ndGgpOyBicmVhazsKICAgICAgICBkZWZhdWx0OiB2YWx1ZSA9IHBhZGRpbmcgKyB2YWx1ZVByZWZpeCArIHZhbHVlICsgdmFsdWVTdWZmaXg7IGJyZWFrOwogICAgICB9CgogICAgICByZXR1cm4gbnVtZXJhbHModmFsdWUpOwogICAgfQoKICAgIGZvcm1hdC50b1N0cmluZyA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gc3BlY2lmaWVyICsgIiI7CiAgICB9OwoKICAgIHJldHVybiBmb3JtYXQ7CiAgfQoKICBmdW5jdGlvbiBmb3JtYXRQcmVmaXgoc3BlY2lmaWVyLCB2YWx1ZSkgewogICAgdmFyIGYgPSBuZXdGb3JtYXQoKHNwZWNpZmllciA9IGZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIpLCBzcGVjaWZpZXIudHlwZSA9ICJmIiwgc3BlY2lmaWVyKSksCiAgICAgICAgZSA9IE1hdGgubWF4KC04LCBNYXRoLm1pbig4LCBNYXRoLmZsb29yKGV4cG9uZW50KHZhbHVlKSAvIDMpKSkgKiAzLAogICAgICAgIGsgPSBNYXRoLnBvdygxMCwgLWUpLAogICAgICAgIHByZWZpeCA9IHByZWZpeGVzWzggKyBlIC8gM107CiAgICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHsKICAgICAgcmV0dXJuIGYoayAqIHZhbHVlKSArIHByZWZpeDsKICAgIH07CiAgfQoKICByZXR1cm4gewogICAgZm9ybWF0OiBuZXdGb3JtYXQsCiAgICBmb3JtYXRQcmVmaXg6IGZvcm1hdFByZWZpeAogIH07Cn07Cgp2YXIgbG9jYWxlOwoKCgpkZWZhdWx0TG9jYWxlKHsKICBkZWNpbWFsOiAiLiIsCiAgdGhvdXNhbmRzOiAiLCIsCiAgZ3JvdXBpbmc6IFszXSwKICBjdXJyZW5jeTogWyIkIiwgIiJdCn0pOwoKZnVuY3Rpb24gZGVmYXVsdExvY2FsZShkZWZpbml0aW9uKSB7CiAgbG9jYWxlID0gZm9ybWF0TG9jYWxlKGRlZmluaXRpb24pOwogIGV4cG9ydHMuZm9ybWF0ID0gbG9jYWxlLmZvcm1hdDsKICBleHBvcnRzLmZvcm1hdFByZWZpeCA9IGxvY2FsZS5mb3JtYXRQcmVmaXg7CiAgcmV0dXJuIGxvY2FsZTsKfQoKdmFyIHByZWNpc2lvbkZpeGVkID0gZnVuY3Rpb24oc3RlcCkgewogIHJldHVybiBNYXRoLm1heCgwLCAtZXhwb25lbnQoTWF0aC5hYnMoc3RlcCkpKTsKfTsKCnZhciBwcmVjaXNpb25QcmVmaXggPSBmdW5jdGlvbihzdGVwLCB2YWx1ZSkgewogIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1heCgtOCwgTWF0aC5taW4oOCwgTWF0aC5mbG9vcihleHBvbmVudCh2YWx1ZSkgLyAzKSkpICogMyAtIGV4cG9uZW50KE1hdGguYWJzKHN0ZXApKSk7Cn07Cgp2YXIgcHJlY2lzaW9uUm91bmQgPSBmdW5jdGlvbihzdGVwLCBtYXgpIHsKICBzdGVwID0gTWF0aC5hYnMoc3RlcCksIG1heCA9IE1hdGguYWJzKG1heCkgLSBzdGVwOwogIHJldHVybiBNYXRoLm1heCgwLCBleHBvbmVudChtYXgpIC0gZXhwb25lbnQoc3RlcCkpICsgMTsKfTsKCmV4cG9ydHMuZm9ybWF0RGVmYXVsdExvY2FsZSA9IGRlZmF1bHRMb2NhbGU7CmV4cG9ydHMuZm9ybWF0TG9jYWxlID0gZm9ybWF0TG9jYWxlOwpleHBvcnRzLmZvcm1hdFNwZWNpZmllciA9IGZvcm1hdFNwZWNpZmllcjsKZXhwb3J0cy5wcmVjaXNpb25GaXhlZCA9IHByZWNpc2lvbkZpeGVkOwpleHBvcnRzLnByZWNpc2lvblByZWZpeCA9IHByZWNpc2lvblByZWZpeDsKZXhwb3J0cy5wcmVjaXNpb25Sb3VuZCA9IHByZWNpc2lvblJvdW5kOwoKT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTsKCn0pKSk7Cgp9LHt9XSw3OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLy8gaHR0cHM6Ly9kM2pzLm9yZy9kMy1pbnRlcnBvbGF0ZS8gVmVyc2lvbiAxLjEuNC4gQ29weXJpZ2h0IDIwMTcgTWlrZSBCb3N0b2NrLgooZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkgewoJdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gZmFjdG9yeShleHBvcnRzLCByZXF1aXJlKCdkMy1jb2xvcicpKSA6Cgl0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWydleHBvcnRzJywgJ2QzLWNvbG9yJ10sIGZhY3RvcnkpIDoKCShmYWN0b3J5KChnbG9iYWwuZDMgPSBnbG9iYWwuZDMgfHwge30pLGdsb2JhbC5kMykpOwp9KHRoaXMsIChmdW5jdGlvbiAoZXhwb3J0cyxkM0NvbG9yKSB7ICd1c2Ugc3RyaWN0JzsKCmZ1bmN0aW9uIGJhc2lzKHQxLCB2MCwgdjEsIHYyLCB2MykgewogIHZhciB0MiA9IHQxICogdDEsIHQzID0gdDIgKiB0MTsKICByZXR1cm4gKCgxIC0gMyAqIHQxICsgMyAqIHQyIC0gdDMpICogdjAKICAgICAgKyAoNCAtIDYgKiB0MiArIDMgKiB0MykgKiB2MQogICAgICArICgxICsgMyAqIHQxICsgMyAqIHQyIC0gMyAqIHQzKSAqIHYyCiAgICAgICsgdDMgKiB2MykgLyA2Owp9Cgp2YXIgYmFzaXMkMSA9IGZ1bmN0aW9uKHZhbHVlcykgewogIHZhciBuID0gdmFsdWVzLmxlbmd0aCAtIDE7CiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHsKICAgIHZhciBpID0gdCA8PSAwID8gKHQgPSAwKSA6IHQgPj0gMSA/ICh0ID0gMSwgbiAtIDEpIDogTWF0aC5mbG9vcih0ICogbiksCiAgICAgICAgdjEgPSB2YWx1ZXNbaV0sCiAgICAgICAgdjIgPSB2YWx1ZXNbaSArIDFdLAogICAgICAgIHYwID0gaSA+IDAgPyB2YWx1ZXNbaSAtIDFdIDogMiAqIHYxIC0gdjIsCiAgICAgICAgdjMgPSBpIDwgbiAtIDEgPyB2YWx1ZXNbaSArIDJdIDogMiAqIHYyIC0gdjE7CiAgICByZXR1cm4gYmFzaXMoKHQgLSBpIC8gbikgKiBuLCB2MCwgdjEsIHYyLCB2Myk7CiAgfTsKfTsKCnZhciBiYXNpc0Nsb3NlZCA9IGZ1bmN0aW9uKHZhbHVlcykgewogIHZhciBuID0gdmFsdWVzLmxlbmd0aDsKICByZXR1cm4gZnVuY3Rpb24odCkgewogICAgdmFyIGkgPSBNYXRoLmZsb29yKCgodCAlPSAxKSA8IDAgPyArK3QgOiB0KSAqIG4pLAogICAgICAgIHYwID0gdmFsdWVzWyhpICsgbiAtIDEpICUgbl0sCiAgICAgICAgdjEgPSB2YWx1ZXNbaSAlIG5dLAogICAgICAgIHYyID0gdmFsdWVzWyhpICsgMSkgJSBuXSwKICAgICAgICB2MyA9IHZhbHVlc1soaSArIDIpICUgbl07CiAgICByZXR1cm4gYmFzaXMoKHQgLSBpIC8gbikgKiBuLCB2MCwgdjEsIHYyLCB2Myk7CiAgfTsKfTsKCnZhciBjb25zdGFudCA9IGZ1bmN0aW9uKHgpIHsKICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICByZXR1cm4geDsKICB9Owp9OwoKZnVuY3Rpb24gbGluZWFyKGEsIGQpIHsKICByZXR1cm4gZnVuY3Rpb24odCkgewogICAgcmV0dXJuIGEgKyB0ICogZDsKICB9Owp9CgpmdW5jdGlvbiBleHBvbmVudGlhbChhLCBiLCB5KSB7CiAgcmV0dXJuIGEgPSBNYXRoLnBvdyhhLCB5KSwgYiA9IE1hdGgucG93KGIsIHkpIC0gYSwgeSA9IDEgLyB5LCBmdW5jdGlvbih0KSB7CiAgICByZXR1cm4gTWF0aC5wb3coYSArIHQgKiBiLCB5KTsKICB9Owp9CgpmdW5jdGlvbiBodWUoYSwgYikgewogIHZhciBkID0gYiAtIGE7CiAgcmV0dXJuIGQgPyBsaW5lYXIoYSwgZCA+IDE4MCB8fCBkIDwgLTE4MCA/IGQgLSAzNjAgKiBNYXRoLnJvdW5kKGQgLyAzNjApIDogZCkgOiBjb25zdGFudChpc05hTihhKSA/IGIgOiBhKTsKfQoKZnVuY3Rpb24gZ2FtbWEoeSkgewogIHJldHVybiAoeSA9ICt5KSA9PT0gMSA/IG5vZ2FtbWEgOiBmdW5jdGlvbihhLCBiKSB7CiAgICByZXR1cm4gYiAtIGEgPyBleHBvbmVudGlhbChhLCBiLCB5KSA6IGNvbnN0YW50KGlzTmFOKGEpID8gYiA6IGEpOwogIH07Cn0KCmZ1bmN0aW9uIG5vZ2FtbWEoYSwgYikgewogIHZhciBkID0gYiAtIGE7CiAgcmV0dXJuIGQgPyBsaW5lYXIoYSwgZCkgOiBjb25zdGFudChpc05hTihhKSA/IGIgOiBhKTsKfQoKdmFyIHJnYiQxID0gKChmdW5jdGlvbiByZ2JHYW1tYSh5KSB7CiAgdmFyIGNvbG9yJCQxID0gZ2FtbWEoeSk7CgogIGZ1bmN0aW9uIHJnYiQkMShzdGFydCwgZW5kKSB7CiAgICB2YXIgciA9IGNvbG9yJCQxKChzdGFydCA9IGQzQ29sb3IucmdiKHN0YXJ0KSkuciwgKGVuZCA9IGQzQ29sb3IucmdiKGVuZCkpLnIpLAogICAgICAgIGcgPSBjb2xvciQkMShzdGFydC5nLCBlbmQuZyksCiAgICAgICAgYiA9IGNvbG9yJCQxKHN0YXJ0LmIsIGVuZC5iKSwKICAgICAgICBvcGFjaXR5ID0gbm9nYW1tYShzdGFydC5vcGFjaXR5LCBlbmQub3BhY2l0eSk7CiAgICByZXR1cm4gZnVuY3Rpb24odCkgewogICAgICBzdGFydC5yID0gcih0KTsKICAgICAgc3RhcnQuZyA9IGcodCk7CiAgICAgIHN0YXJ0LmIgPSBiKHQpOwogICAgICBzdGFydC5vcGFjaXR5ID0gb3BhY2l0eSh0KTsKICAgICAgcmV0dXJuIHN0YXJ0ICsgIiI7CiAgICB9OwogIH0KCiAgcmdiJCQxLmdhbW1hID0gcmdiR2FtbWE7CgogIHJldHVybiByZ2IkJDE7Cn0pKSgxKTsKCmZ1bmN0aW9uIHJnYlNwbGluZShzcGxpbmUpIHsKICByZXR1cm4gZnVuY3Rpb24oY29sb3JzKSB7CiAgICB2YXIgbiA9IGNvbG9ycy5sZW5ndGgsCiAgICAgICAgciA9IG5ldyBBcnJheShuKSwKICAgICAgICBnID0gbmV3IEFycmF5KG4pLAogICAgICAgIGIgPSBuZXcgQXJyYXkobiksCiAgICAgICAgaSwgY29sb3IkJDE7CiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7CiAgICAgIGNvbG9yJCQxID0gZDNDb2xvci5yZ2IoY29sb3JzW2ldKTsKICAgICAgcltpXSA9IGNvbG9yJCQxLnIgfHwgMDsKICAgICAgZ1tpXSA9IGNvbG9yJCQxLmcgfHwgMDsKICAgICAgYltpXSA9IGNvbG9yJCQxLmIgfHwgMDsKICAgIH0KICAgIHIgPSBzcGxpbmUocik7CiAgICBnID0gc3BsaW5lKGcpOwogICAgYiA9IHNwbGluZShiKTsKICAgIGNvbG9yJCQxLm9wYWNpdHkgPSAxOwogICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHsKICAgICAgY29sb3IkJDEuciA9IHIodCk7CiAgICAgIGNvbG9yJCQxLmcgPSBnKHQpOwogICAgICBjb2xvciQkMS5iID0gYih0KTsKICAgICAgcmV0dXJuIGNvbG9yJCQxICsgIiI7CiAgICB9OwogIH07Cn0KCnZhciByZ2JCYXNpcyA9IHJnYlNwbGluZShiYXNpcyQxKTsKdmFyIHJnYkJhc2lzQ2xvc2VkID0gcmdiU3BsaW5lKGJhc2lzQ2xvc2VkKTsKCnZhciBhcnJheSA9IGZ1bmN0aW9uKGEsIGIpIHsKICB2YXIgbmIgPSBiID8gYi5sZW5ndGggOiAwLAogICAgICBuYSA9IGEgPyBNYXRoLm1pbihuYiwgYS5sZW5ndGgpIDogMCwKICAgICAgeCA9IG5ldyBBcnJheShuYiksCiAgICAgIGMgPSBuZXcgQXJyYXkobmIpLAogICAgICBpOwoKICBmb3IgKGkgPSAwOyBpIDwgbmE7ICsraSkgeFtpXSA9IHZhbHVlKGFbaV0sIGJbaV0pOwogIGZvciAoOyBpIDwgbmI7ICsraSkgY1tpXSA9IGJbaV07CgogIHJldHVybiBmdW5jdGlvbih0KSB7CiAgICBmb3IgKGkgPSAwOyBpIDwgbmE7ICsraSkgY1tpXSA9IHhbaV0odCk7CiAgICByZXR1cm4gYzsKICB9Owp9OwoKdmFyIGRhdGUgPSBmdW5jdGlvbihhLCBiKSB7CiAgdmFyIGQgPSBuZXcgRGF0ZTsKICByZXR1cm4gYSA9ICthLCBiIC09IGEsIGZ1bmN0aW9uKHQpIHsKICAgIHJldHVybiBkLnNldFRpbWUoYSArIGIgKiB0KSwgZDsKICB9Owp9OwoKdmFyIG51bWJlciA9IGZ1bmN0aW9uKGEsIGIpIHsKICByZXR1cm4gYSA9ICthLCBiIC09IGEsIGZ1bmN0aW9uKHQpIHsKICAgIHJldHVybiBhICsgYiAqIHQ7CiAgfTsKfTsKCnZhciBvYmplY3QgPSBmdW5jdGlvbihhLCBiKSB7CiAgdmFyIGkgPSB7fSwKICAgICAgYyA9IHt9LAogICAgICBrOwoKICBpZiAoYSA9PT0gbnVsbCB8fCB0eXBlb2YgYSAhPT0gIm9iamVjdCIpIGEgPSB7fTsKICBpZiAoYiA9PT0gbnVsbCB8fCB0eXBlb2YgYiAhPT0gIm9iamVjdCIpIGIgPSB7fTsKCiAgZm9yIChrIGluIGIpIHsKICAgIGlmIChrIGluIGEpIHsKICAgICAgaVtrXSA9IHZhbHVlKGFba10sIGJb
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment