(()=>{var __webpack_modules__={741:function(__unused_webpack_module,exports){eval('/* @preserve\n * Leaflet 1.9.4, a JS library for interactive maps. https://leafletjs.com\n * (c) 2010-2023 Vladimir Agafonkin, (c) 2010-2011 CloudMade\n */\n!function (t, e){\n   true ? e(exports):0;\n}(this, function (t){\n  "use strict";\n\n  function l(t){\n    for (var e, i, n=1, o=arguments.length; n < o; n++) for (e in i=arguments[n]) t[e]=i[e];\n    return t;\n  }\n  var R=Object.create||function (t){\n    return N.prototype=t, new N();\n  };\n  function N(){}\n  function a(t, e){\n    var i,\n      n=Array.prototype.slice;\n    return t.bind ? t.bind.apply(t, n.call(arguments, 1)):(i=n.call(arguments, 2), function (){\n      return t.apply(e, i.length ? i.concat(n.call(arguments)):arguments);\n    });\n  }\n  var D=0;\n  function h(t){\n    return "_leaflet_id" in t||(t._leaflet_id=++D), t._leaflet_id;\n  }\n  function j(t, e, i){\n    var n,\n      o,\n      s=function (){\n        n = !1, o&&(r.apply(i, o), o = !1);\n      },\n      r=function (){\n        n ? o=arguments:(t.apply(i, arguments), setTimeout(s, e), n = !0);\n      };\n    return r;\n  }\n  function H(t, e, i){\n    var n=e[1],\n      e=e[0],\n      o=n - e;\n    return t===n&&i ? t:((t - e) % o + o) % o + e;\n  }\n  function u(){\n    return !1;\n  }\n  function i(t, e){\n    return !1===e ? t:(e=Math.pow(10, void 0===e ? 6:e), Math.round(t * e) / e);\n  }\n  function W(t){\n    return t.trim ? t.trim():t.replace(/^\\s+|\\s+$/g, "");\n  }\n  function F(t){\n    return W(t).split(/\\s+/);\n  }\n  function c(t, e){\n    for (var i in Object.prototype.hasOwnProperty.call(t, "options")||(t.options=t.options ? R(t.options):{}), e) t.options[i]=e[i];\n    return t.options;\n  }\n  function U(t, e, i){\n    var n,\n      o=[];\n    for (n in t) o.push(encodeURIComponent(i ? n.toUpperCase():n) + "=" + encodeURIComponent(t[n]));\n    return (e&&-1!==e.indexOf("?") ? "&":"?") + o.join("&");\n  }\n  var V=/\\{ *([\\w_ -]+) *\\}/g;\n  function q(t, i){\n    return t.replace(V, function (t, e){\n      e=i[e];\n      if(void 0===e) throw new Error("No value provided for variable " + t);\n      return e="function"==typeof e ? e(i):e;\n    });\n  }\n  var d=Array.isArray||function (t){\n    return "[object Array]"===Object.prototype.toString.call(t);\n  };\n  function G(t, e){\n    for (var i=0; i < t.length; i++) if(t[i]===e) return i;\n    return -1;\n  }\n  var K="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=";\n  function Y(t){\n    return window["webkit" + t]||window["moz" + t]||window["ms" + t];\n  }\n  var X=0;\n  function J(t){\n    var e=+new Date(),\n      i=Math.max(0, 16 - (e - X));\n    return X=e + i, window.setTimeout(t, i);\n  }\n  var $=window.requestAnimationFrame||Y("RequestAnimationFrame")||J,\n    Q=window.cancelAnimationFrame||Y("CancelAnimationFrame")||Y("CancelRequestAnimationFrame")||function (t){\n      window.clearTimeout(t);\n    };\n  function x(t, e, i){\n    if(!i||$!==J) return $.call(window, a(t, e));\n    t.call(e);\n  }\n  function r(t){\n    t&&Q.call(window, t);\n  }\n  var tt={\n    __proto__: null,\n    extend: l,\n    create: R,\n    bind: a,\n    get lastId(){\n      return D;\n    },\n    stamp: h,\n    throttle: j,\n    wrapNum: H,\n    falseFn: u,\n    formatNum: i,\n    trim: W,\n    splitWords: F,\n    setOptions: c,\n    getParamString: U,\n    template: q,\n    isArray: d,\n    indexOf: G,\n    emptyImageUrl: K,\n    requestFn: $,\n    cancelFn: Q,\n    requestAnimFrame: x,\n    cancelAnimFrame: r\n  };\n  function et(){}\n  et.extend=function (t){\n    function e(){\n      c(this), this.initialize&&this.initialize.apply(this, arguments), this.callInitHooks();\n    }\n    var i,\n      n=e.__super__=this.prototype,\n      o=R(n);\n    for (i in (o.constructor=e).prototype=o, this) Object.prototype.hasOwnProperty.call(this, i)&&"prototype"!==i&&"__super__"!==i&&(e[i]=this[i]);\n    if(t.statics&&l(e, t.statics), t.includes){\n      var s=t.includes;\n      if("undefined"!=typeof L&&L && L.Mixin){\n        s=d(s) ? s:[s];\n        for (var r=0; r < s.length; r++) s[r]===L.Mixin.Events&&console.warn("Deprecated include of L.Mixin.Events: this property will be removed in future releases, please inherit from L.Evented instead.", new Error().stack);\n      }\n      l.apply(null, [o].concat(t.includes));\n    }\n    return l(o, t), delete o.statics, delete o.includes, o.options&&(o.options=n.options ? R(n.options):{}, l(o.options, t.options)), o._initHooks=[], o.callInitHooks=function (){\n      if(!this._initHooksCalled){\n        n.callInitHooks&&n.callInitHooks.call(this), this._initHooksCalled = !0;\n        for (var t=0, e=o._initHooks.length; t < e; t++) o._initHooks[t].call(this);\n      }\n    }, e;\n  }, et.include=function (t){\n    var e=this.prototype.options;\n    return l(this.prototype, t), t.options&&(this.prototype.options=e, this.mergeOptions(t.options)), this;\n  }, et.mergeOptions=function (t){\n    return l(this.prototype.options, t), this;\n  }, et.addInitHook=function (t){\n    var e=Array.prototype.slice.call(arguments, 1),\n      i="function"==typeof t ? t:function (){\n        this[t].apply(this, e);\n      };\n    return this.prototype._initHooks=this.prototype._initHooks||[], this.prototype._initHooks.push(i), this;\n  };\n  var e={\n      on: function (t, e, i){\n        if("object"==typeof t) for (var n in t) this._on(n, t[n], e);else for (var o=0, s=(t=F(t)).length; o < s; o++) this._on(t[o], e, i);\n        return this;\n      },\n      off: function (t, e, i){\n        if(arguments.length){\n          if("object"==typeof t) for (var n in t) this._off(n, t[n], e);else {\n            t=F(t);\n            for (var o=1===arguments.length, s=0, r=t.length; s < r; s++) o ? this._off(t[s]):this._off(t[s], e, i);\n          }\n        } else delete this._events;\n        return this;\n      },\n      _on: function (t, e, i, n){\n        "function"!=typeof e ? console.warn("wrong listener type: " + typeof e):!1===this._listens(t, e, i)&&(e={\n          fn: e,\n          ctx: i=i===this ? void 0:i\n        }, n&&(e.once = !0), this._events=this._events||{}, this._events[t]=this._events[t]||[], this._events[t].push(e));\n      },\n      _off: function (t, e, i){\n        var n, o, s;\n        if(this._events&&(n=this._events[t])) if(1===arguments.length){\n          if(this._firingCount) for (o=0, s=n.length; o < s; o++) n[o].fn=u;\n          delete this._events[t];\n        } else "function"!=typeof e ? console.warn("wrong listener type: " + typeof e):!1!==(e=this._listens(t, e, i))&&(i=n[e], this._firingCount&&(i.fn=u, this._events[t]=n = n.slice()), n.splice(e, 1));\n      },\n      fire: function (t, e, i){\n        if(this.listens(t, i)){\n          var n=l({}, e, {\n            type: t,\n            target: this,\n            sourceTarget: e&&e.sourceTarget||this\n          });\n          if(this._events){\n            var o=this._events[t];\n            if(o){\n              this._firingCount=this._firingCount + 1||1;\n              for (var s=0, r=o.length; s < r; s++){\n                var a=o[s],\n                  h=a.fn;\n                a.once&&this.off(t, h, a.ctx), h.call(a.ctx||this, n);\n              }\n              this._firingCount--;\n            }\n          }\n          i&&this._propagateEvent(n);\n        }\n        return this;\n      },\n      listens: function (t, e, i, n){\n        "string"!=typeof t&&console.warn(\'"string" type argument expected\');\n        var o=e,\n          s=("function"!=typeof e&&(n = !!e, i=o = void 0), this._events&&this._events[t]);\n        if(s&&s.length&&!1!==this._listens(t, o, i)) return !0;\n        if(n) for (var r in this._eventParents) if(this._eventParents[r].listens(t, e, i, n)) return !0;\n        return !1;\n      },\n      _listens: function (t, e, i){\n        if(this._events){\n          var n=this._events[t]||[];\n          if(!e) return !!n.length;\n          i===this&&(i=void 0);\n          for (var o=0, s=n.length; o < s; o++) if(n[o].fn===e&&n[o].ctx===i) return o;\n        }\n        return !1;\n      },\n      once: function (t, e, i){\n        if("object"==typeof t) for (var n in t) this._on(n, t[n], e, !0);else for (var o=0, s=(t=F(t)).length; o < s; o++) this._on(t[o], e, i, !0);\n        return this;\n      },\n      addEventParent: function (t){\n        return this._eventParents=this._eventParents||{}, this._eventParents[h(t)]=t, this;\n      },\n      removeEventParent: function (t){\n        return this._eventParents&&delete this._eventParents[h(t)], this;\n      },\n      _propagateEvent: function (t){\n        for (var e in this._eventParents) this._eventParents[e].fire(t.type, l({\n          layer: t.target,\n          propagatedFrom: t.target\n        }, t), !0);\n      }\n    },\n    it=(e.addEventListener=e.on, e.removeEventListener=e.clearAllEventListeners=e.off, e.addOneTimeEventListener=e.once, e.fireEvent=e.fire, e.hasEventListeners=e.listens, et.extend(e));\n  function p(t, e, i){\n    this.x=i ? Math.round(t):t, this.y=i ? Math.round(e):e;\n  }\n  var nt=Math.trunc||function (t){\n    return 0 < t ? Math.floor(t):Math.ceil(t);\n  };\n  function m(t, e, i){\n    return t instanceof p ? t:d(t) ? new p(t[0], t[1]):null==t ? t:"object"==typeof t&&"x" in t&&"y" in t ? new p(t.x, t.y):new p(t, e, i);\n  }\n  function f(t, e){\n    if(t) for (var i=e ? [t, e]:t, n=0, o=i.length; n < o; n++) this.extend(i[n]);\n  }\n  function _(t, e){\n    return !t||t instanceof f ? t:new f(t, e);\n  }\n  function s(t, e){\n    if(t) for (var i=e ? [t, e]:t, n=0, o=i.length; n < o; n++) this.extend(i[n]);\n  }\n  function g(t, e){\n    return t instanceof s ? t:new s(t, e);\n  }\n  function v(t, e, i){\n    if(isNaN(t)||isNaN(e)) throw new Error("Invalid LatLng object: (" + t + ", " + e + ")");\n    this.lat=+t, this.lng=+e, void 0!==i&&(this.alt=+i);\n  }\n  function w(t, e, i){\n    return t instanceof v ? t:d(t)&&"object"!=typeof t[0] ? 3===t.length ? new v(t[0], t[1], t[2]):2===t.length ? new v(t[0], t[1]):null:null==t ? t:"object"==typeof t&&"lat" in t ? new v(t.lat, "lng" in t ? t.lng:t.lon, t.alt):void 0===e ? null:new v(t, e, i);\n  }\n  p.prototype={\n    clone: function (){\n      return new p(this.x, this.y);\n    },\n    add: function (t){\n      return this.clone()._add(m(t));\n    },\n    _add: function (t){\n      return this.x +=t.x, this.y +=t.y, this;\n    },\n    subtract: function (t){\n      return this.clone()._subtract(m(t));\n    },\n    _subtract: function (t){\n      return this.x -=t.x, this.y -=t.y, this;\n    },\n    divideBy: function (t){\n      return this.clone()._divideBy(t);\n    },\n    _divideBy: function (t){\n      return this.x /=t, this.y /=t, this;\n    },\n    multiplyBy: function (t){\n      return this.clone()._multiplyBy(t);\n    },\n    _multiplyBy: function (t){\n      return this.x *=t, this.y *=t, this;\n    },\n    scaleBy: function (t){\n      return new p(this.x * t.x, this.y * t.y);\n    },\n    unscaleBy: function (t){\n      return new p(this.x / t.x, this.y / t.y);\n    },\n    round: function (){\n      return this.clone()._round();\n    },\n    _round: function (){\n      return this.x=Math.round(this.x), this.y=Math.round(this.y), this;\n    },\n    floor: function (){\n      return this.clone()._floor();\n    },\n    _floor: function (){\n      return this.x=Math.floor(this.x), this.y=Math.floor(this.y), this;\n    },\n    ceil: function (){\n      return this.clone()._ceil();\n    },\n    _ceil: function (){\n      return this.x=Math.ceil(this.x), this.y=Math.ceil(this.y), this;\n    },\n    trunc: function (){\n      return this.clone()._trunc();\n    },\n    _trunc: function (){\n      return this.x=nt(this.x), this.y=nt(this.y), this;\n    },\n    distanceTo: function (t){\n      var e=(t=m(t)).x - this.x,\n        t=t.y - this.y;\n      return Math.sqrt(e * e + t * t);\n    },\n    equals: function (t){\n      return (t=m(t)).x===this.x&&t.y===this.y;\n    },\n    contains: function (t){\n      return t=m(t), Math.abs(t.x) <=Math.abs(this.x)&&Math.abs(t.y) <=Math.abs(this.y);\n    },\n    toString: function (){\n      return "Point(" + i(this.x) + ", " + i(this.y) + ")";\n    }\n  }, f.prototype={\n    extend: function (t){\n      var e, i;\n      if(t){\n        if(t instanceof p||"number"==typeof t[0]||"x" in t) e=i = m(t);else if(e=(t=_(t)).min, i=t.max, !e||!i) return this;\n        this.min||this.max ? (this.min.x=Math.min(e.x, this.min.x), this.max.x=Math.max(i.x, this.max.x), this.min.y=Math.min(e.y, this.min.y), this.max.y=Math.max(i.y, this.max.y)):(this.min=e.clone(), this.max=i.clone());\n      }\n      return this;\n    },\n    getCenter: function (t){\n      return m((this.min.x + this.max.x) / 2, (this.min.y + this.max.y) / 2, t);\n    },\n    getBottomLeft: function (){\n      return m(this.min.x, this.max.y);\n    },\n    getTopRight: function (){\n      return m(this.max.x, this.min.y);\n    },\n    getTopLeft: function (){\n      return this.min;\n    },\n    getBottomRight: function (){\n      return this.max;\n    },\n    getSize: function (){\n      return this.max.subtract(this.min);\n    },\n    contains: function (t){\n      var e, i;\n      return (t=("number"==typeof t[0]||t instanceof p ? m:_)(t)) instanceof f ? (e=t.min, i=t.max):e=i = t, e.x >=this.min.x&&i.x <=this.max.x&&e.y >=this.min.y&&i.y <=this.max.y;\n    },\n    intersects: function (t){\n      t=_(t);\n      var e=this.min,\n        i=this.max,\n        n=t.min,\n        t=t.max,\n        o=t.x >=e.x&&n.x <=i.x,\n        t=t.y >=e.y&&n.y <=i.y;\n      return o&&t;\n    },\n    overlaps: function (t){\n      t=_(t);\n      var e=this.min,\n        i=this.max,\n        n=t.min,\n        t=t.max,\n        o=t.x > e.x&&n.x < i.x,\n        t=t.y > e.y&&n.y < i.y;\n      return o&&t;\n    },\n    isValid: function (){\n      return !(!this.min||!this.max);\n    },\n    pad: function (t){\n      var e=this.min,\n        i=this.max,\n        n=Math.abs(e.x - i.x) * t,\n        t=Math.abs(e.y - i.y) * t;\n      return _(m(e.x - n, e.y - t), m(i.x + n, i.y + t));\n    },\n    equals: function (t){\n      return !!t&&(t=_(t), this.min.equals(t.getTopLeft())&&this.max.equals(t.getBottomRight()));\n    }\n  }, s.prototype={\n    extend: function (t){\n      var e,\n        i,\n        n=this._southWest,\n        o=this._northEast;\n      if(t instanceof v) i=e = t;else {\n        if(!(t instanceof s)) return t ? this.extend(w(t)||g(t)):this;\n        if(e=t._southWest, i=t._northEast, !e||!i) return this;\n      }\n      return n||o ? (n.lat=Math.min(e.lat, n.lat), n.lng=Math.min(e.lng, n.lng), o.lat=Math.max(i.lat, o.lat), o.lng=Math.max(i.lng, o.lng)):(this._southWest=new v(e.lat, e.lng), this._northEast=new v(i.lat, i.lng)), this;\n    },\n    pad: function (t){\n      var e=this._southWest,\n        i=this._northEast,\n        n=Math.abs(e.lat - i.lat) * t,\n        t=Math.abs(e.lng - i.lng) * t;\n      return new s(new v(e.lat - n, e.lng - t), new v(i.lat + n, i.lng + t));\n    },\n    getCenter: function (){\n      return new v((this._southWest.lat + this._northEast.lat) / 2, (this._southWest.lng + this._northEast.lng) / 2);\n    },\n    getSouthWest: function (){\n      return this._southWest;\n    },\n    getNorthEast: function (){\n      return this._northEast;\n    },\n    getNorthWest: function (){\n      return new v(this.getNorth(), this.getWest());\n    },\n    getSouthEast: function (){\n      return new v(this.getSouth(), this.getEast());\n    },\n    getWest: function (){\n      return this._southWest.lng;\n    },\n    getSouth: function (){\n      return this._southWest.lat;\n    },\n    getEast: function (){\n      return this._northEast.lng;\n    },\n    getNorth: function (){\n      return this._northEast.lat;\n    },\n    contains: function (t){\n      t=("number"==typeof t[0]||t instanceof v||"lat" in t ? w:g)(t);\n      var e,\n        i,\n        n=this._southWest,\n        o=this._northEast;\n      return t instanceof s ? (e=t.getSouthWest(), i=t.getNorthEast()):e=i = t, e.lat >=n.lat&&i.lat <=o.lat&&e.lng >=n.lng&&i.lng <=o.lng;\n    },\n    intersects: function (t){\n      t=g(t);\n      var e=this._southWest,\n        i=this._northEast,\n        n=t.getSouthWest(),\n        t=t.getNorthEast(),\n        o=t.lat >=e.lat&&n.lat <=i.lat,\n        t=t.lng >=e.lng&&n.lng <=i.lng;\n      return o&&t;\n    },\n    overlaps: function (t){\n      t=g(t);\n      var e=this._southWest,\n        i=this._northEast,\n        n=t.getSouthWest(),\n        t=t.getNorthEast(),\n        o=t.lat > e.lat&&n.lat < i.lat,\n        t=t.lng > e.lng&&n.lng < i.lng;\n      return o&&t;\n    },\n    toBBoxString: function (){\n      return [this.getWest(), this.getSouth(), this.getEast(), this.getNorth()].join(",");\n    },\n    equals: function (t, e){\n      return !!t&&(t=g(t), this._southWest.equals(t.getSouthWest(), e)&&this._northEast.equals(t.getNorthEast(), e));\n    },\n    isValid: function (){\n      return !(!this._southWest||!this._northEast);\n    }\n  };\n  var ot={\n      latLngToPoint: function (t, e){\n        t=this.projection.project(t), e=this.scale(e);\n        return this.transformation._transform(t, e);\n      },\n      pointToLatLng: function (t, e){\n        e=this.scale(e), t=this.transformation.untransform(t, e);\n        return this.projection.unproject(t);\n      },\n      project: function (t){\n        return this.projection.project(t);\n      },\n      unproject: function (t){\n        return this.projection.unproject(t);\n      },\n      scale: function (t){\n        return 256 * Math.pow(2, t);\n      },\n      zoom: function (t){\n        return Math.log(t / 256) / Math.LN2;\n      },\n      getProjectedBounds: function (t){\n        var e;\n        return this.infinite ? null:(e=this.projection.bounds, t=this.scale(t), new f(this.transformation.transform(e.min, t), this.transformation.transform(e.max, t)));\n      },\n      infinite: !(v.prototype={\n        equals: function (t, e){\n          return !!t&&(t=w(t), Math.max(Math.abs(this.lat - t.lat), Math.abs(this.lng - t.lng)) <=(void 0===e ? 1e-9:e));\n        },\n        toString: function (t){\n          return "LatLng(" + i(this.lat, t) + ", " + i(this.lng, t) + ")";\n        },\n        distanceTo: function (t){\n          return st.distance(this, w(t));\n        },\n        wrap: function (){\n          return st.wrapLatLng(this);\n        },\n        toBounds: function (t){\n          var t=180 * t / 40075017,\n            e=t / Math.cos(Math.PI / 180 * this.lat);\n          return g([this.lat - t, this.lng - e], [this.lat + t, this.lng + e]);\n        },\n        clone: function (){\n          return new v(this.lat, this.lng, this.alt);\n        }\n      }),\n      wrapLatLng: function (t){\n        var e=this.wrapLng ? H(t.lng, this.wrapLng, !0):t.lng;\n        return new v(this.wrapLat ? H(t.lat, this.wrapLat, !0):t.lat, e, t.alt);\n      },\n      wrapLatLngBounds: function (t){\n        var e=t.getCenter(),\n          i=this.wrapLatLng(e),\n          n=e.lat - i.lat,\n          e=e.lng - i.lng;\n        return 0==n&&0==e ? t:(i=t.getSouthWest(), t=t.getNorthEast(), new s(new v(i.lat - n, i.lng - e), new v(t.lat - n, t.lng - e)));\n      }\n    },\n    st=l({}, ot, {\n      wrapLng: [-180, 180],\n      R: 6371e3,\n      distance: function (t, e){\n        var i=Math.PI / 180,\n          n=t.lat * i,\n          o=e.lat * i,\n          s=Math.sin((e.lat - t.lat) * i / 2),\n          e=Math.sin((e.lng - t.lng) * i / 2),\n          t=s * s + Math.cos(n) * Math.cos(o) * e * e,\n          i=2 * Math.atan2(Math.sqrt(t), Math.sqrt(1 - t));\n        return this.R * i;\n      }\n    }),\n    rt=6378137,\n    rt={\n      R: rt,\n      MAX_LATITUDE: 85.0511287798,\n      project: function (t){\n        var e=Math.PI / 180,\n          i=this.MAX_LATITUDE,\n          i=Math.max(Math.min(i, t.lat), -i),\n          i=Math.sin(i * e);\n        return new p(this.R * t.lng * e, this.R * Math.log((1 + i) / (1 - i)) / 2);\n      },\n      unproject: function (t){\n        var e=180 / Math.PI;\n        return new v((2 * Math.atan(Math.exp(t.y / this.R)) - Math.PI / 2) * e, t.x * e / this.R);\n      },\n      bounds: new f([-(rt=rt * Math.PI), -rt], [rt, rt])\n    };\n  function at(t, e, i, n){\n    d(t) ? (this._a=t[0], this._b=t[1], this._c=t[2], this._d=t[3]):(this._a=t, this._b=e, this._c=i, this._d=n);\n  }\n  function ht(t, e, i, n){\n    return new at(t, e, i, n);\n  }\n  at.prototype={\n    transform: function (t, e){\n      return this._transform(t.clone(), e);\n    },\n    _transform: function (t, e){\n      return t.x=(e=e||1) * (this._a * t.x + this._b), t.y=e * (this._c * t.y + this._d), t;\n    },\n    untransform: function (t, e){\n      return new p((t.x / (e=e||1) - this._b) / this._a, (t.y / e - this._d) / this._c);\n    }\n  };\n  var lt=l({}, st, {\n      code: "EPSG:3857",\n      projection: rt,\n      transformation: ht(lt=.5 / (Math.PI * rt.R), .5, -lt, .5)\n    }),\n    ut=l({}, lt, {\n      code: "EPSG:900913"\n    });\n  function ct(t){\n    return document.createElementNS("http://www.w3.org/2000/svg", t);\n  }\n  function dt(t, e){\n    for (var i, n, o, s, r="", a=0, h=t.length; a < h; a++){\n      for (i=0, n=(o=t[a]).length; i < n; i++) r +=(i ? "L":"M") + (s=o[i]).x + " " + s.y;\n      r +=e ? b.svg ? "z":"x":"";\n    }\n    return r||"M0 0";\n  }\n  var _t=document.documentElement.style,\n    pt="ActiveXObject" in window,\n    mt=pt&&!document.addEventListener,\n    n="msLaunchUri" in navigator&&!("documentMode" in document),\n    ft=y("webkit"),\n    gt=y("android"),\n    vt=y("android 2")||y("android 3"),\n    yt=parseInt(/WebKit\\/([0-9]+)|$/.exec(navigator.userAgent)[1], 10),\n    yt=gt&&y("Google")&&yt < 537&&!("AudioNode" in window),\n    xt = !!window.opera,\n    wt = !n&&y("chrome"),\n    bt=y("gecko")&&!ft&&!xt&&!pt,\n    Pt = !wt&&y("safari"),\n    Lt=y("phantom"),\n    o="OTransition" in _t,\n    Tt=0===navigator.platform.indexOf("Win"),\n    Mt=pt&&"transition" in _t,\n    zt="WebKitCSSMatrix" in window&&"m11" in new window.WebKitCSSMatrix()&&!vt,\n    _t="MozPerspective" in _t,\n    Ct = !window.L_DISABLE_3D&&(Mt||zt||_t)&&!o&&!Lt,\n    Zt="undefined"!=typeof orientation||y("mobile"),\n    St=Zt&&ft,\n    Et=Zt&&zt,\n    kt = !window.PointerEvent&&window.MSPointerEvent,\n    Ot = !(!window.PointerEvent&&!kt),\n    At="ontouchstart" in window||!!window.TouchEvent,\n    Bt = !window.L_NO_TOUCH&&(At||Ot),\n    It=Zt&&xt,\n    Rt=Zt&&bt,\n    Nt=1 < (window.devicePixelRatio||window.screen.deviceXDPI / window.screen.logicalXDPI),\n    Dt=function (){\n      var t = !1;\n      try {\n        var e=Object.defineProperty({}, "passive", {\n          get: function (){\n            t = !0;\n          }\n        });\n        window.addEventListener("testPassiveEventSupport", u, e), window.removeEventListener("testPassiveEventSupport", u, e);\n      } catch (t){}\n      return t;\n    }(),\n    jt = !!document.createElement("canvas").getContext,\n    Ht = !(!document.createElementNS||!ct("svg").createSVGRect),\n    Wt = !!Ht&&((Wt=document.createElement("div")).innerHTML="<svg/>", "http://www.w3.org/2000/svg"===(Wt.firstChild&&Wt.firstChild.namespaceURI));\n  function y(t){\n    return 0 <=navigator.userAgent.toLowerCase().indexOf(t);\n  }\n  var b={\n      ie: pt,\n      ielt9: mt,\n      edge: n,\n      webkit: ft,\n      android: gt,\n      android23: vt,\n      androidStock: yt,\n      opera: xt,\n      chrome: wt,\n      gecko: bt,\n      safari: Pt,\n      phantom: Lt,\n      opera12: o,\n      win: Tt,\n      ie3d: Mt,\n      webkit3d: zt,\n      gecko3d: _t,\n      any3d: Ct,\n      mobile: Zt,\n      mobileWebkit: St,\n      mobileWebkit3d: Et,\n      msPointer: kt,\n      pointer: Ot,\n      touch: Bt,\n      touchNative: At,\n      mobileOpera: It,\n      mobileGecko: Rt,\n      retina: Nt,\n      passiveEvents: Dt,\n      canvas: jt,\n      svg: Ht,\n      vml: !Ht&&function (){\n        try {\n          var t=document.createElement("div"),\n            e=(t.innerHTML=\'<v:shape adj="1"/>\', t.firstChild);\n          return e.style.behavior="url(#default#VML)", e&&"object"==typeof e.adj;\n        } catch (t){\n          return !1;\n        }\n      }(),\n      inlineSvg: Wt,\n      mac: 0===navigator.platform.indexOf("Mac"),\n      linux: 0===navigator.platform.indexOf("Linux")\n    },\n    Ft=b.msPointer ? "MSPointerDown":"pointerdown",\n    Ut=b.msPointer ? "MSPointerMove":"pointermove",\n    Vt=b.msPointer ? "MSPointerUp":"pointerup",\n    qt=b.msPointer ? "MSPointerCancel":"pointercancel",\n    Gt={\n      touchstart: Ft,\n      touchmove: Ut,\n      touchend: Vt,\n      touchcancel: qt\n    },\n    Kt={\n      touchstart: function (t, e){\n        e.MSPOINTER_TYPE_TOUCH&&e.pointerType===e.MSPOINTER_TYPE_TOUCH&&O(e);\n        ee(t, e);\n      },\n      touchmove: ee,\n      touchend: ee,\n      touchcancel: ee\n    },\n    Yt={},\n    Xt = !1;\n  function Jt(t, e, i){\n    return "touchstart"!==e||Xt||(document.addEventListener(Ft, $t, !0), document.addEventListener(Ut, Qt, !0), document.addEventListener(Vt, te, !0), document.addEventListener(qt, te, !0), Xt = !0), Kt[e] ? (i=Kt[e].bind(this, i), t.addEventListener(Gt[e], i, !1), i):(console.warn("wrong event specified:", e), u);\n  }\n  function $t(t){\n    Yt[t.pointerId]=t;\n  }\n  function Qt(t){\n    Yt[t.pointerId]&&(Yt[t.pointerId]=t);\n  }\n  function te(t){\n    delete Yt[t.pointerId];\n  }\n  function ee(t, e){\n    if(e.pointerType!==(e.MSPOINTER_TYPE_MOUSE||"mouse")){\n      for (var i in e.touches=[], Yt) e.touches.push(Yt[i]);\n      e.changedTouches=[e], t(e);\n    }\n  }\n  var ie=200;\n  function ne(t, i){\n    t.addEventListener("dblclick", i);\n    var n,\n      o=0;\n    function e(t){\n      var e;\n      1!==t.detail ? n=t.detail:"mouse"===t.pointerType||t.sourceCapabilities&&!t.sourceCapabilities.firesTouchEvents||(e=Ne(t)).some(function (t){\n        return t instanceof HTMLLabelElement&&t.attributes.for;\n      })&&!e.some(function (t){\n        return t instanceof HTMLInputElement||t instanceof HTMLSelectElement;\n      })||((e=Date.now()) - o <=ie ? 2===++n&&i(function (t){\n        var e,\n          i,\n          n={};\n        for (i in t) e=t[i], n[i]=e&&e.bind ? e.bind(t):e;\n        return (t=n).type="dblclick", n.detail=2, n.isTrusted = !1, n._simulated = !0, n;\n      }(t)):n=1, o=e);\n    }\n    return t.addEventListener("click", e), {\n      dblclick: i,\n      simDblclick: e\n    };\n  }\n  var oe,\n    se,\n    re,\n    ae,\n    he,\n    le,\n    ue=we(["transform", "webkitTransform", "OTransform", "MozTransform", "msTransform"]),\n    ce=we(["webkitTransition", "transition", "OTransition", "MozTransition", "msTransition"]),\n    de="webkitTransition"===ce||"OTransition"===ce ? ce + "End":"transitionend";\n  function _e(t){\n    return "string"==typeof t ? document.getElementById(t):t;\n  }\n  function pe(t, e){\n    var i=t.style[e]||t.currentStyle&&t.currentStyle[e];\n    return "auto"===(i=i&&"auto"!==i||!document.defaultView ? i:(t=document.defaultView.getComputedStyle(t, null)) ? t[e]:null) ? null:i;\n  }\n  function P(t, e, i){\n    t=document.createElement(t);\n    return t.className=e||"", i&&i.appendChild(t), t;\n  }\n  function T(t){\n    var e=t.parentNode;\n    e&&e.removeChild(t);\n  }\n  function me(t){\n    for (; t.firstChild;) t.removeChild(t.firstChild);\n  }\n  function fe(t){\n    var e=t.parentNode;\n    e&&e.lastChild!==t&&e.appendChild(t);\n  }\n  function ge(t){\n    var e=t.parentNode;\n    e&&e.firstChild!==t&&e.insertBefore(t, e.firstChild);\n  }\n  function ve(t, e){\n    return void 0!==t.classList ? t.classList.contains(e):0 < (t=xe(t)).length&&new RegExp("(^|\\\\s)" + e + "(\\\\s|$)").test(t);\n  }\n  function M(t, e){\n    var i;\n    if(void 0!==t.classList) for (var n=F(e), o=0, s=n.length; o < s; o++) t.classList.add(n[o]);else ve(t, e)||ye(t, ((i=xe(t)) ? i + " ":"") + e);\n  }\n  function z(t, e){\n    void 0!==t.classList ? t.classList.remove(e):ye(t, W((" " + xe(t) + " ").replace(" " + e + " ", " ")));\n  }\n  function ye(t, e){\n    void 0===t.className.baseVal ? t.className=e:t.className.baseVal=e;\n  }\n  function xe(t){\n    return void 0===(t=t.correspondingElement ? t.correspondingElement:t).className.baseVal ? t.className:t.className.baseVal;\n  }\n  function C(t, e){\n    if("opacity" in t.style) t.style.opacity=e;else if("filter" in t.style){\n      var i = !1,\n        n="DXImageTransform.Microsoft.Alpha";\n      try {\n        i=t.filters.item(n);\n      } catch (t){\n        if(1===e) return;\n      }\n      e=Math.round(100 * e), i ? (i.Enabled=100!==e, i.Opacity=e):t.style.filter +=" progid:" + n + "(opacity=" + e + ")";\n    }\n  }\n  function we(t){\n    for (var e=document.documentElement.style, i=0; i < t.length; i++) if(t[i] in e) return t[i];\n    return !1;\n  }\n  function be(t, e, i){\n    e=e||new p(0, 0);\n    t.style[ue]=(b.ie3d ? "translate(" + e.x + "px," + e.y + "px)":"translate3d(" + e.x + "px," + e.y + "px,0)") + (i ? " scale(" + i + ")":"");\n  }\n  function Z(t, e){\n    t._leaflet_pos=e, b.any3d ? be(t, e):(t.style.left=e.x + "px", t.style.top=e.y + "px");\n  }\n  function Pe(t){\n    return t._leaflet_pos||new p(0, 0);\n  }\n  function Le(){\n    S(window, "dragstart", O);\n  }\n  function Te(){\n    k(window, "dragstart", O);\n  }\n  function Me(t){\n    for (; -1===t.tabIndex;) t=t.parentNode;\n    t.style&&(ze(), le=(he=t).style.outlineStyle, t.style.outlineStyle="none", S(window, "keydown", ze));\n  }\n  function ze(){\n    he&&(he.style.outlineStyle=le, le=he=void 0, k(window, "keydown", ze));\n  }\n  function Ce(t){\n    for (; !((t=t.parentNode).offsetWidth&&t.offsetHeight||t===document.body););\n    return t;\n  }\n  function Ze(t){\n    var e=t.getBoundingClientRect();\n    return {\n      x: e.width / t.offsetWidth||1,\n      y: e.height / t.offsetHeight||1,\n      boundingClientRect: e\n    };\n  }\n  ae="onselectstart" in document ? (re=function (){\n    S(window, "selectstart", O);\n  }, function (){\n    k(window, "selectstart", O);\n  }):(se=we(["userSelect", "WebkitUserSelect", "OUserSelect", "MozUserSelect", "msUserSelect"]), re=function (){\n    var t;\n    se&&(t=document.documentElement.style, oe=t[se], t[se]="none");\n  }, function (){\n    se&&(document.documentElement.style[se]=oe, oe=void 0);\n  });\n  pt={\n    __proto__: null,\n    TRANSFORM: ue,\n    TRANSITION: ce,\n    TRANSITION_END: de,\n    get: _e,\n    getStyle: pe,\n    create: P,\n    remove: T,\n    empty: me,\n    toFront: fe,\n    toBack: ge,\n    hasClass: ve,\n    addClass: M,\n    removeClass: z,\n    setClass: ye,\n    getClass: xe,\n    setOpacity: C,\n    testProp: we,\n    setTransform: be,\n    setPosition: Z,\n    getPosition: Pe,\n    get disableTextSelection(){\n      return re;\n    },\n    get enableTextSelection(){\n      return ae;\n    },\n    disableImageDrag: Le,\n    enableImageDrag: Te,\n    preventOutline: Me,\n    restoreOutline: ze,\n    getSizedParentNode: Ce,\n    getScale: Ze\n  };\n  function S(t, e, i, n){\n    if(e&&"object"==typeof e) for (var o in e) ke(t, o, e[o], i);else for (var s=0, r=(e=F(e)).length; s < r; s++) ke(t, e[s], i, n);\n    return this;\n  }\n  var E="_leaflet_events";\n  function k(t, e, i, n){\n    if(1===arguments.length) Se(t), delete t[E];else if(e&&"object"==typeof e) for (var o in e) Oe(t, o, e[o], i);else if(e=F(e), 2===arguments.length) Se(t, function (t){\n      return -1!==G(e, t);\n    });else for (var s=0, r=e.length; s < r; s++) Oe(t, e[s], i, n);\n    return this;\n  }\n  function Se(t, e){\n    for (var i in t[E]){\n      var n=i.split(/\\d/)[0];\n      e&&!e(n)||Oe(t, n, null, null, i);\n    }\n  }\n  var Ee={\n    mouseenter: "mouseover",\n    mouseleave: "mouseout",\n    wheel: !("onwheel" in window)&&"mousewheel"\n  };\n  function ke(e, t, i, n){\n    var o,\n      s,\n      r=t + h(i) + (n ? "_" + h(n):"");\n    e[E]&&e[E][r]||(s=o = function (t){\n      return i.call(n||e, t||window.event);\n    }, !b.touchNative&&b.pointer&&0===t.indexOf("touch") ? o=Jt(e, t, o):b.touch&&"dblclick"===t ? o=ne(e, o):"addEventListener" in e ? "touchstart"===t||"touchmove"===t||"wheel"===t||"mousewheel"===t ? e.addEventListener(Ee[t]||t, o, !!b.passiveEvents&&{\n      passive: !1\n    }):"mouseenter"===t||"mouseleave"===t ? e.addEventListener(Ee[t], o=function (t){\n      t=t||window.event, We(e, t)&&s(t);\n    }, !1):e.addEventListener(t, s, !1):e.attachEvent("on" + t, o), e[E]=e[E]||{}, e[E][r]=o);\n  }\n  function Oe(t, e, i, n, o){\n    o=o||e + h(i) + (n ? "_" + h(n):"");\n    var s,\n      r,\n      i=t[E]&&t[E][o];\n    i&&(!b.touchNative&&b.pointer&&0===e.indexOf("touch") ? (n=t, r=i, Gt[s=e] ? n.removeEventListener(Gt[s], r, !1):console.warn("wrong event specified:", s)):b.touch&&"dblclick"===e ? (n=i, (r=t).removeEventListener("dblclick", n.dblclick), r.removeEventListener("click", n.simDblclick)):"removeEventListener" in t ? t.removeEventListener(Ee[e]||e, i, !1):t.detachEvent("on" + e, i), t[E][o]=null);\n  }\n  function Ae(t){\n    return t.stopPropagation ? t.stopPropagation():t.originalEvent ? t.originalEvent._stopped = !0:t.cancelBubble = !0, this;\n  }\n  function Be(t){\n    return ke(t, "wheel", Ae), this;\n  }\n  function Ie(t){\n    return S(t, "mousedown touchstart dblclick contextmenu", Ae), t._leaflet_disable_click = !0, this;\n  }\n  function O(t){\n    return t.preventDefault ? t.preventDefault():t.returnValue = !1, this;\n  }\n  function Re(t){\n    return O(t), Ae(t), this;\n  }\n  function Ne(t){\n    if(t.composedPath) return t.composedPath();\n    for (var e=[], i=t.target; i;) e.push(i), i=i.parentNode;\n    return e;\n  }\n  function De(t, e){\n    var i, n;\n    return e ? (n=(i=Ze(e)).boundingClientRect, new p((t.clientX - n.left) / i.x - e.clientLeft, (t.clientY - n.top) / i.y - e.clientTop)):new p(t.clientX, t.clientY);\n  }\n  var je=b.linux&&b.chrome ? window.devicePixelRatio:b.mac ? 3 * window.devicePixelRatio:0 < window.devicePixelRatio ? 2 * window.devicePixelRatio:1;\n  function He(t){\n    return b.edge ? t.wheelDeltaY / 2:t.deltaY&&0===t.deltaMode ? -t.deltaY / je:t.deltaY&&1===t.deltaMode ? 20 * -t.deltaY:t.deltaY&&2===t.deltaMode ? 60 * -t.deltaY:t.deltaX||t.deltaZ ? 0:t.wheelDelta ? (t.wheelDeltaY||t.wheelDelta) / 2:t.detail&&Math.abs(t.detail) < 32765 ? 20 * -t.detail:t.detail ? t.detail / -32765 * 60:0;\n  }\n  function We(t, e){\n    var i=e.relatedTarget;\n    if(!i) return !0;\n    try {\n      for (; i&&i!==t;) i=i.parentNode;\n    } catch (t){\n      return !1;\n    }\n    return i!==t;\n  }\n  var mt={\n      __proto__: null,\n      on: S,\n      off: k,\n      stopPropagation: Ae,\n      disableScrollPropagation: Be,\n      disableClickPropagation: Ie,\n      preventDefault: O,\n      stop: Re,\n      getPropagationPath: Ne,\n      getMousePosition: De,\n      getWheelDelta: He,\n      isExternalTarget: We,\n      addListener: S,\n      removeListener: k\n    },\n    Fe=it.extend({\n      run: function (t, e, i, n){\n        this.stop(), this._el=t, this._inProgress = !0, this._duration=i||.25, this._easeOutPower=1 / Math.max(n||.5, .2), this._startPos=Pe(t), this._offset=e.subtract(this._startPos), this._startTime=+new Date(), this.fire("start"), this._animate();\n      },\n      stop: function (){\n        this._inProgress&&(this._step(!0), this._complete());\n      },\n      _animate: function (){\n        this._animId=x(this._animate, this), this._step();\n      },\n      _step: function (t){\n        var e=+new Date() - this._startTime,\n          i=1e3 * this._duration;\n        e < i ? this._runFrame(this._easeOut(e / i), t):(this._runFrame(1), this._complete());\n      },\n      _runFrame: function (t, e){\n        t=this._startPos.add(this._offset.multiplyBy(t));\n        e&&t._round(), Z(this._el, t), this.fire("step");\n      },\n      _complete: function (){\n        r(this._animId), this._inProgress = !1, this.fire("end");\n      },\n      _easeOut: function (t){\n        return 1 - Math.pow(1 - t, this._easeOutPower);\n      }\n    }),\n    A=it.extend({\n      options: {\n        crs: lt,\n        center: void 0,\n        zoom: void 0,\n        minZoom: void 0,\n        maxZoom: void 0,\n        layers: [],\n        maxBounds: void 0,\n        renderer: void 0,\n        zoomAnimation: !0,\n        zoomAnimationThreshold: 4,\n        fadeAnimation: !0,\n        markerZoomAnimation: !0,\n        transform3DLimit: 8388608,\n        zoomSnap: 1,\n        zoomDelta: 1,\n        trackResize: !0\n      },\n      initialize: function (t, e){\n        e=c(this, e), this._handlers=[], this._layers={}, this._zoomBoundLayers={}, this._sizeChanged = !0, this._initContainer(t), this._initLayout(), this._onResize=a(this._onResize, this), this._initEvents(), e.maxBounds&&this.setMaxBounds(e.maxBounds), void 0!==e.zoom&&(this._zoom=this._limitZoom(e.zoom)), e.center&&void 0!==e.zoom&&this.setView(w(e.center), e.zoom, {\n          reset: !0\n        }), this.callInitHooks(), this._zoomAnimated=ce&&b.any3d&&!b.mobileOpera&&this.options.zoomAnimation, this._zoomAnimated&&(this._createAnimProxy(), S(this._proxy, de, this._catchTransitionEnd, this)), this._addLayers(this.options.layers);\n      },\n      setView: function (t, e, i){\n        if((e=void 0===e ? this._zoom:this._limitZoom(e), t=this._limitCenter(w(t), e, this.options.maxBounds), i=i||{}, this._stop(), this._loaded&&!i.reset&&!0!==i)&&(void 0!==i.animate&&(i.zoom=l({\n          animate: i.animate\n        }, i.zoom), i.pan=l({\n          animate: i.animate,\n          duration: i.duration\n        }, i.pan)), this._zoom!==e ? this._tryAnimatedZoom&&this._tryAnimatedZoom(t, e, i.zoom):this._tryAnimatedPan(t, i.pan))) return clearTimeout(this._sizeTimer), this;\n        return this._resetView(t, e, i.pan&&i.pan.noMoveStart), this;\n      },\n      setZoom: function (t, e){\n        return this._loaded ? this.setView(this.getCenter(), t, {\n          zoom: e\n        }):(this._zoom=t, this);\n      },\n      zoomIn: function (t, e){\n        return t=t||(b.any3d ? this.options.zoomDelta:1), this.setZoom(this._zoom + t, e);\n      },\n      zoomOut: function (t, e){\n        return t=t||(b.any3d ? this.options.zoomDelta:1), this.setZoom(this._zoom - t, e);\n      },\n      setZoomAround: function (t, e, i){\n        var n=this.getZoomScale(e),\n          o=this.getSize().divideBy(2),\n          t=(t instanceof p ? t:this.latLngToContainerPoint(t)).subtract(o).multiplyBy(1 - 1 / n),\n          n=this.containerPointToLatLng(o.add(t));\n        return this.setView(n, e, {\n          zoom: i\n        });\n      },\n      _getBoundsCenterZoom: function (t, e){\n        e=e||{}, t=t.getBounds ? t.getBounds():g(t);\n        var i=m(e.paddingTopLeft||e.padding||[0, 0]),\n          n=m(e.paddingBottomRight||e.padding||[0, 0]),\n          o=this.getBoundsZoom(t, !1, i.add(n));\n        return (o="number"==typeof e.maxZoom ? Math.min(e.maxZoom, o):o)===1 / 0 ? {\n          center: t.getCenter(),\n          zoom: o\n        }:(e=n.subtract(i).divideBy(2), n=this.project(t.getSouthWest(), o), i=this.project(t.getNorthEast(), o), {\n          center: this.unproject(n.add(i).divideBy(2).add(e), o),\n          zoom: o\n        });\n      },\n      fitBounds: function (t, e){\n        if((t=g(t)).isValid()) return t=this._getBoundsCenterZoom(t, e), this.setView(t.center, t.zoom, e);\n        throw new Error("Bounds are not valid.");\n      },\n      fitWorld: function (t){\n        return this.fitBounds([[-90, -180], [90, 180]], t);\n      },\n      panTo: function (t, e){\n        return this.setView(t, this._zoom, {\n          pan: e\n        });\n      },\n      panBy: function (t, e){\n        var i;\n        return e=e||{}, (t=m(t).round()).x||t.y ? (!0===e.animate||this.getSize().contains(t) ? (this._panAnim||(this._panAnim=new Fe(), this._panAnim.on({\n          step: this._onPanTransitionStep,\n          end: this._onPanTransitionEnd\n        }, this)), e.noMoveStart||this.fire("movestart"), !1!==e.animate ? (M(this._mapPane, "leaflet-pan-anim"), i=this._getMapPanePos().subtract(t).round(), this._panAnim.run(this._mapPane, i, e.duration||.25, e.easeLinearity)):(this._rawPanBy(t), this.fire("move").fire("moveend"))):this._resetView(this.unproject(this.project(this.getCenter()).add(t)), this.getZoom()), this):this.fire("moveend");\n      },\n      flyTo: function (n, o, t){\n        if(!1===(t=t||{}).animate||!b.any3d) return this.setView(n, o, t);\n        this._stop();\n        var s=this.project(this.getCenter()),\n          r=this.project(n),\n          e=this.getSize(),\n          a=this._zoom,\n          h=(n=w(n), o=void 0===o ? a:o, Math.max(e.x, e.y)),\n          i=h * this.getZoomScale(a, o),\n          l=r.distanceTo(s)||1,\n          u=1.42,\n          c=u * u;\n        function d(t){\n          t=(i * i - h * h + (t ? -1:1) * c * c * l * l) / (2 * (t ? i:h) * c * l), t=Math.sqrt(t * t + 1) - t;\n          return t < 1e-9 ? -18:Math.log(t);\n        }\n        function _(t){\n          return (Math.exp(t) - Math.exp(-t)) / 2;\n        }\n        function p(t){\n          return (Math.exp(t) + Math.exp(-t)) / 2;\n        }\n        var m=d(0);\n        function f(t){\n          return h * (p(m) * (_(t=m + u * t) / p(t)) - _(m)) / c;\n        }\n        var g=Date.now(),\n          v=(d(1) - m) / u,\n          y=t.duration ? 1e3 * t.duration:1e3 * v * .8;\n        return this._moveStart(!0, t.noMoveStart), function t(){\n          var e=(Date.now() - g) / y,\n            i=(1 - Math.pow(1 - e, 1.5)) * v;\n          e <=1 ? (this._flyToFrame=x(t, this), this._move(this.unproject(s.add(r.subtract(s).multiplyBy(f(i) / l)), a), this.getScaleZoom(h / (e=i, h * (p(m) / p(m + u * e))), a), {\n            flyTo: !0\n          })):this._move(n, o)._moveEnd(!0);\n        }.call(this), this;\n      },\n      flyToBounds: function (t, e){\n        t=this._getBoundsCenterZoom(t, e);\n        return this.flyTo(t.center, t.zoom, e);\n      },\n      setMaxBounds: function (t){\n        return t=g(t), this.listens("moveend", this._panInsideMaxBounds)&&this.off("moveend", this._panInsideMaxBounds), t.isValid() ? (this.options.maxBounds=t, this._loaded&&this._panInsideMaxBounds(), this.on("moveend", this._panInsideMaxBounds)):(this.options.maxBounds=null, this);\n      },\n      setMinZoom: function (t){\n        var e=this.options.minZoom;\n        return this.options.minZoom=t, this._loaded&&e!==t&&(this.fire("zoomlevelschange"), this.getZoom() < this.options.minZoom) ? this.setZoom(t):this;\n      },\n      setMaxZoom: function (t){\n        var e=this.options.maxZoom;\n        return this.options.maxZoom=t, this._loaded&&e!==t&&(this.fire("zoomlevelschange"), this.getZoom() > this.options.maxZoom) ? this.setZoom(t):this;\n      },\n      panInsideBounds: function (t, e){\n        this._enforcingBounds = !0;\n        var i=this.getCenter(),\n          t=this._limitCenter(i, this._zoom, g(t));\n        return i.equals(t)||this.panTo(t, e), this._enforcingBounds = !1, this;\n      },\n      panInside: function (t, e){\n        var i=m((e=e||{}).paddingTopLeft||e.padding||[0, 0]),\n          n=m(e.paddingBottomRight||e.padding||[0, 0]),\n          o=this.project(this.getCenter()),\n          t=this.project(t),\n          s=this.getPixelBounds(),\n          i=_([s.min.add(i), s.max.subtract(n)]),\n          s=i.getSize();\n        return i.contains(t)||(this._enforcingBounds = !0, n=t.subtract(i.getCenter()), i=i.extend(t).getSize().subtract(s), o.x +=n.x < 0 ? -i.x:i.x, o.y +=n.y < 0 ? -i.y:i.y, this.panTo(this.unproject(o), e), this._enforcingBounds = !1), this;\n      },\n      invalidateSize: function (t){\n        if(!this._loaded) return this;\n        t=l({\n          animate: !1,\n          pan: !0\n        }, !0===t ? {\n          animate: !0\n        }:t);\n        var e=this.getSize(),\n          i=(this._sizeChanged = !0, this._lastCenter=null, this.getSize()),\n          n=e.divideBy(2).round(),\n          o=i.divideBy(2).round(),\n          n=n.subtract(o);\n        return n.x||n.y ? (t.animate&&t.pan ? this.panBy(n):(t.pan&&this._rawPanBy(n), this.fire("move"), t.debounceMoveend ? (clearTimeout(this._sizeTimer), this._sizeTimer=setTimeout(a(this.fire, this, "moveend"), 200)):this.fire("moveend")), this.fire("resize", {\n          oldSize: e,\n          newSize: i\n        })):this;\n      },\n      stop: function (){\n        return this.setZoom(this._limitZoom(this._zoom)), this.options.zoomSnap||this.fire("viewreset"), this._stop();\n      },\n      locate: function (t){\n        var e, i;\n        return t=this._locateOptions=l({\n          timeout: 1e4,\n          watch: !1\n        }, t), "geolocation" in navigator ? (e=a(this._handleGeolocationResponse, this), i=a(this._handleGeolocationError, this), t.watch ? this._locationWatchId=navigator.geolocation.watchPosition(e, i, t):navigator.geolocation.getCurrentPosition(e, i, t)):this._handleGeolocationError({\n          code: 0,\n          message: "Geolocation not supported."\n        }), this;\n      },\n      stopLocate: function (){\n        return navigator.geolocation&&navigator.geolocation.clearWatch&&navigator.geolocation.clearWatch(this._locationWatchId), this._locateOptions&&(this._locateOptions.setView = !1), this;\n      },\n      _handleGeolocationError: function (t){\n        var e;\n        this._container._leaflet_id&&(e=t.code, t=t.message||(1===e ? "permission denied":2===e ? "position unavailable":"timeout"), this._locateOptions.setView&&!this._loaded&&this.fitWorld(), this.fire("locationerror", {\n          code: e,\n          message: "Geolocation error: " + t + "."\n        }));\n      },\n      _handleGeolocationResponse: function (t){\n        if(this._container._leaflet_id){\n          var e,\n            i,\n            n=new v(t.coords.latitude, t.coords.longitude),\n            o=n.toBounds(2 * t.coords.accuracy),\n            s=this._locateOptions,\n            r=(s.setView&&(e=this.getBoundsZoom(o), this.setView(n, s.maxZoom ? Math.min(e, s.maxZoom):e)), {\n              latlng: n,\n              bounds: o,\n              timestamp: t.timestamp\n            });\n          for (i in t.coords) "number"==typeof t.coords[i]&&(r[i]=t.coords[i]);\n          this.fire("locationfound", r);\n        }\n      },\n      addHandler: function (t, e){\n        return e&&(e=this[t]=new e(this), this._handlers.push(e), this.options[t]&&e.enable()), this;\n      },\n      remove: function (){\n        if(this._initEvents(!0), this.options.maxBounds&&this.off("moveend", this._panInsideMaxBounds), this._containerId!==this._container._leaflet_id) throw new Error("Map container is being reused by another instance");\n        try {\n          delete this._container._leaflet_id, delete this._containerId;\n        } catch (t){\n          this._container._leaflet_id=void 0, this._containerId=void 0;\n        }\n        for (var t in void 0!==this._locationWatchId&&this.stopLocate(), this._stop(), T(this._mapPane), this._clearControlPos&&this._clearControlPos(), this._resizeRequest&&(r(this._resizeRequest), this._resizeRequest=null), this._clearHandlers(), this._loaded&&this.fire("unload"), this._layers) this._layers[t].remove();\n        for (t in this._panes) T(this._panes[t]);\n        return this._layers=[], this._panes=[], delete this._mapPane, delete this._renderer, this;\n      },\n      createPane: function (t, e){\n        e=P("div", "leaflet-pane" + (t ? " leaflet-" + t.replace("Pane", "") + "-pane":""), e||this._mapPane);\n        return t&&(this._panes[t]=e), e;\n      },\n      getCenter: function (){\n        return this._checkIfLoaded(), this._lastCenter&&!this._moved() ? this._lastCenter.clone():this.layerPointToLatLng(this._getCenterLayerPoint());\n      },\n      getZoom: function (){\n        return this._zoom;\n      },\n      getBounds: function (){\n        var t=this.getPixelBounds();\n        return new s(this.unproject(t.getBottomLeft()), this.unproject(t.getTopRight()));\n      },\n      getMinZoom: function (){\n        return void 0===this.options.minZoom ? this._layersMinZoom||0:this.options.minZoom;\n      },\n      getMaxZoom: function (){\n        return void 0===this.options.maxZoom ? void 0===this._layersMaxZoom ? 1 / 0:this._layersMaxZoom:this.options.maxZoom;\n      },\n      getBoundsZoom: function (t, e, i){\n        t=g(t), i=m(i||[0, 0]);\n        var n=this.getZoom()||0,\n          o=this.getMinZoom(),\n          s=this.getMaxZoom(),\n          r=t.getNorthWest(),\n          t=t.getSouthEast(),\n          i=this.getSize().subtract(i),\n          t=_(this.project(t, n), this.project(r, n)).getSize(),\n          r=b.any3d ? this.options.zoomSnap:1,\n          a=i.x / t.x,\n          i=i.y / t.y,\n          t=e ? Math.max(a, i):Math.min(a, i),\n          n=this.getScaleZoom(t, n);\n        return r&&(n=Math.round(n / (r / 100)) * (r / 100), n=e ? Math.ceil(n / r) * r:Math.floor(n / r) * r), Math.max(o, Math.min(s, n));\n      },\n      getSize: function (){\n        return this._size&&!this._sizeChanged||(this._size=new p(this._container.clientWidth||0, this._container.clientHeight||0), this._sizeChanged = !1), this._size.clone();\n      },\n      getPixelBounds: function (t, e){\n        t=this._getTopLeftPoint(t, e);\n        return new f(t, t.add(this.getSize()));\n      },\n      getPixelOrigin: function (){\n        return this._checkIfLoaded(), this._pixelOrigin;\n      },\n      getPixelWorldBounds: function (t){\n        return this.options.crs.getProjectedBounds(void 0===t ? this.getZoom():t);\n      },\n      getPane: function (t){\n        return "string"==typeof t ? this._panes[t]:t;\n      },\n      getPanes: function (){\n        return this._panes;\n      },\n      getContainer: function (){\n        return this._container;\n      },\n      getZoomScale: function (t, e){\n        var i=this.options.crs;\n        return e=void 0===e ? this._zoom:e, i.scale(t) / i.scale(e);\n      },\n      getScaleZoom: function (t, e){\n        var i=this.options.crs,\n          t=(e=void 0===e ? this._zoom:e, i.zoom(t * i.scale(e)));\n        return isNaN(t) ? 1 / 0:t;\n      },\n      project: function (t, e){\n        return e=void 0===e ? this._zoom:e, this.options.crs.latLngToPoint(w(t), e);\n      },\n      unproject: function (t, e){\n        return e=void 0===e ? this._zoom:e, this.options.crs.pointToLatLng(m(t), e);\n      },\n      layerPointToLatLng: function (t){\n        t=m(t).add(this.getPixelOrigin());\n        return this.unproject(t);\n      },\n      latLngToLayerPoint: function (t){\n        return this.project(w(t))._round()._subtract(this.getPixelOrigin());\n      },\n      wrapLatLng: function (t){\n        return this.options.crs.wrapLatLng(w(t));\n      },\n      wrapLatLngBounds: function (t){\n        return this.options.crs.wrapLatLngBounds(g(t));\n      },\n      distance: function (t, e){\n        return this.options.crs.distance(w(t), w(e));\n      },\n      containerPointToLayerPoint: function (t){\n        return m(t).subtract(this._getMapPanePos());\n      },\n      layerPointToContainerPoint: function (t){\n        return m(t).add(this._getMapPanePos());\n      },\n      containerPointToLatLng: function (t){\n        t=this.containerPointToLayerPoint(m(t));\n        return this.layerPointToLatLng(t);\n      },\n      latLngToContainerPoint: function (t){\n        return this.layerPointToContainerPoint(this.latLngToLayerPoint(w(t)));\n      },\n      mouseEventToContainerPoint: function (t){\n        return De(t, this._container);\n      },\n      mouseEventToLayerPoint: function (t){\n        return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t));\n      },\n      mouseEventToLatLng: function (t){\n        return this.layerPointToLatLng(this.mouseEventToLayerPoint(t));\n      },\n      _initContainer: function (t){\n        t=this._container=_e(t);\n        if(!t) throw new Error("Map container not found.");\n        if(t._leaflet_id) throw new Error("Map container is already initialized.");\n        S(t, "scroll", this._onScroll, this), this._containerId=h(t);\n      },\n      _initLayout: function (){\n        var t=this._container,\n          e=(this._fadeAnimated=this.options.fadeAnimation&&b.any3d, M(t, "leaflet-container" + (b.touch ? " leaflet-touch":"") + (b.retina ? " leaflet-retina":"") + (b.ielt9 ? " leaflet-oldie":"") + (b.safari ? " leaflet-safari":"") + (this._fadeAnimated ? " leaflet-fade-anim":"")), pe(t, "position"));\n        "absolute"!==e&&"relative"!==e&&"fixed"!==e&&"sticky"!==e&&(t.style.position="relative"), this._initPanes(), this._initControlPos&&this._initControlPos();\n      },\n      _initPanes: function (){\n        var t=this._panes={};\n        this._paneRenderers={}, this._mapPane=this.createPane("mapPane", this._container), Z(this._mapPane, new p(0, 0)), this.createPane("tilePane"), this.createPane("overlayPane"), this.createPane("shadowPane"), this.createPane("markerPane"), this.createPane("tooltipPane"), this.createPane("popupPane"), this.options.markerZoomAnimation||(M(t.markerPane, "leaflet-zoom-hide"), M(t.shadowPane, "leaflet-zoom-hide"));\n      },\n      _resetView: function (t, e, i){\n        Z(this._mapPane, new p(0, 0));\n        var n = !this._loaded,\n          o=(this._loaded = !0, e=this._limitZoom(e), this.fire("viewprereset"), this._zoom!==e);\n        this._moveStart(o, i)._move(t, e)._moveEnd(o), this.fire("viewreset"), n&&this.fire("load");\n      },\n      _moveStart: function (t, e){\n        return t&&this.fire("zoomstart"), e||this.fire("movestart"), this;\n      },\n      _move: function (t, e, i, n){\n        void 0===e&&(e=this._zoom);\n        var o=this._zoom!==e;\n        return this._zoom=e, this._lastCenter=t, this._pixelOrigin=this._getNewPixelOrigin(t), n ? i&&i.pinch&&this.fire("zoom", i):((o||i&&i.pinch)&&this.fire("zoom", i), this.fire("move", i)), this;\n      },\n      _moveEnd: function (t){\n        return t&&this.fire("zoomend"), this.fire("moveend");\n      },\n      _stop: function (){\n        return r(this._flyToFrame), this._panAnim&&this._panAnim.stop(), this;\n      },\n      _rawPanBy: function (t){\n        Z(this._mapPane, this._getMapPanePos().subtract(t));\n      },\n      _getZoomSpan: function (){\n        return this.getMaxZoom() - this.getMinZoom();\n      },\n      _panInsideMaxBounds: function (){\n        this._enforcingBounds||this.panInsideBounds(this.options.maxBounds);\n      },\n      _checkIfLoaded: function (){\n        if(!this._loaded) throw new Error("Set map center and zoom first.");\n      },\n      _initEvents: function (t){\n        this._targets={};\n        var e=t ? k:S;\n        e((this._targets[h(this._container)]=this)._container, "click dblclick mousedown mouseup mouseover mouseout mousemove contextmenu keypress keydown keyup", this._handleDOMEvent, this), this.options.trackResize&&e(window, "resize", this._onResize, this), b.any3d&&this.options.transform3DLimit&&(t ? this.off:this.on).call(this, "moveend", this._onMoveEnd);\n      },\n      _onResize: function (){\n        r(this._resizeRequest), this._resizeRequest=x(function (){\n          this.invalidateSize({\n            debounceMoveend: !0\n          });\n        }, this);\n      },\n      _onScroll: function (){\n        this._container.scrollTop=0, this._container.scrollLeft=0;\n      },\n      _onMoveEnd: function (){\n        var t=this._getMapPanePos();\n        Math.max(Math.abs(t.x), Math.abs(t.y)) >=this.options.transform3DLimit&&this._resetView(this.getCenter(), this.getZoom());\n      },\n      _findEventTargets: function (t, e){\n        for (var i, n=[], o="mouseout"===e||"mouseover"===e, s=t.target||t.srcElement, r = !1; s;){\n          if((i=this._targets[h(s)])&&("click"===e||"preclick"===e)&&this._draggableMoved(i)){\n            r = !0;\n            break;\n          }\n          if(i&&i.listens(e, !0)){\n            if(o&&!We(s, t)) break;\n            if(n.push(i), o) break;\n          }\n          if(s===this._container) break;\n          s=s.parentNode;\n        }\n        return n=n.length||r || o||!this.listens(e, !0) ? n:[this];\n      },\n      _isClickDisabled: function (t){\n        for (; t&&t!==this._container;){\n          if(t._leaflet_disable_click) return !0;\n          t=t.parentNode;\n        }\n      },\n      _handleDOMEvent: function (t){\n        var e,\n          i=t.target||t.srcElement;\n        !this._loaded||i._leaflet_disable_events||"click"===t.type&&this._isClickDisabled(i)||("mousedown"===(e=t.type)&&Me(i), this._fireDOMEvent(t, e));\n      },\n      _mouseEvents: ["click", "dblclick", "mouseover", "mouseout", "contextmenu"],\n      _fireDOMEvent: function (t, e, i){\n        "click"===t.type&&((a=l({}, t)).type="preclick", this._fireDOMEvent(a, a.type, i));\n        var n=this._findEventTargets(t, e);\n        if(i){\n          for (var o=[], s=0; s < i.length; s++) i[s].listens(e, !0)&&o.push(i[s]);\n          n=o.concat(n);\n        }\n        if(n.length){\n          "contextmenu"===e&&O(t);\n          var r,\n            a=n[0],\n            h={\n              originalEvent: t\n            };\n          for ("keypress"!==t.type&&"keydown"!==t.type&&"keyup"!==t.type&&(r=a.getLatLng&&(!a._radius||a._radius <=10), h.containerPoint=r ? this.latLngToContainerPoint(a.getLatLng()):this.mouseEventToContainerPoint(t), h.layerPoint=this.containerPointToLayerPoint(h.containerPoint), h.latlng=r ? a.getLatLng():this.layerPointToLatLng(h.layerPoint)), s=0; s < n.length; s++) if(n[s].fire(e, h, !0), h.originalEvent._stopped||!1===n[s].options.bubblingMouseEvents&&-1!==G(this._mouseEvents, e)) return;\n        }\n      },\n      _draggableMoved: function (t){\n        return (t=t.dragging&&t.dragging.enabled() ? t:this).dragging&&t.dragging.moved()||this.boxZoom&&this.boxZoom.moved();\n      },\n      _clearHandlers: function (){\n        for (var t=0, e=this._handlers.length; t < e; t++) this._handlers[t].disable();\n      },\n      whenReady: function (t, e){\n        return this._loaded ? t.call(e||this, {\n          target: this\n        }):this.on("load", t, e), this;\n      },\n      _getMapPanePos: function (){\n        return Pe(this._mapPane)||new p(0, 0);\n      },\n      _moved: function (){\n        var t=this._getMapPanePos();\n        return t&&!t.equals([0, 0]);\n      },\n      _getTopLeftPoint: function (t, e){\n        return (t&&void 0!==e ? this._getNewPixelOrigin(t, e):this.getPixelOrigin()).subtract(this._getMapPanePos());\n      },\n      _getNewPixelOrigin: function (t, e){\n        var i=this.getSize()._divideBy(2);\n        return this.project(t, e)._subtract(i)._add(this._getMapPanePos())._round();\n      },\n      _latLngToNewLayerPoint: function (t, e, i){\n        i=this._getNewPixelOrigin(i, e);\n        return this.project(t, e)._subtract(i);\n      },\n      _latLngBoundsToNewLayerBounds: function (t, e, i){\n        i=this._getNewPixelOrigin(i, e);\n        return _([this.project(t.getSouthWest(), e)._subtract(i), this.project(t.getNorthWest(), e)._subtract(i), this.project(t.getSouthEast(), e)._subtract(i), this.project(t.getNorthEast(), e)._subtract(i)]);\n      },\n      _getCenterLayerPoint: function (){\n        return this.containerPointToLayerPoint(this.getSize()._divideBy(2));\n      },\n      _getCenterOffset: function (t){\n        return this.latLngToLayerPoint(t).subtract(this._getCenterLayerPoint());\n      },\n      _limitCenter: function (t, e, i){\n        var n, o;\n        return !i||(n=this.project(t, e), o=this.getSize().divideBy(2), o=new f(n.subtract(o), n.add(o)), o=this._getBoundsOffset(o, i, e), Math.abs(o.x) <=1&&Math.abs(o.y) <=1) ? t:this.unproject(n.add(o), e);\n      },\n      _limitOffset: function (t, e){\n        var i;\n        return e ? (i=new f((i=this.getPixelBounds()).min.add(t), i.max.add(t)), t.add(this._getBoundsOffset(i, e))):t;\n      },\n      _getBoundsOffset: function (t, e, i){\n        e=_(this.project(e.getNorthEast(), i), this.project(e.getSouthWest(), i)), i=e.min.subtract(t.min), e=e.max.subtract(t.max);\n        return new p(this._rebound(i.x, -e.x), this._rebound(i.y, -e.y));\n      },\n      _rebound: function (t, e){\n        return 0 < t + e ? Math.round(t - e) / 2:Math.max(0, Math.ceil(t)) - Math.max(0, Math.floor(e));\n      },\n      _limitZoom: function (t){\n        var e=this.getMinZoom(),\n          i=this.getMaxZoom(),\n          n=b.any3d ? this.options.zoomSnap:1;\n        return n&&(t=Math.round(t / n) * n), Math.max(e, Math.min(i, t));\n      },\n      _onPanTransitionStep: function (){\n        this.fire("move");\n      },\n      _onPanTransitionEnd: function (){\n        z(this._mapPane, "leaflet-pan-anim"), this.fire("moveend");\n      },\n      _tryAnimatedPan: function (t, e){\n        t=this._getCenterOffset(t)._trunc();\n        return !(!0!==(e&&e.animate)&&!this.getSize().contains(t))&&(this.panBy(t, e), !0);\n      },\n      _createAnimProxy: function (){\n        var t=this._proxy=P("div", "leaflet-proxy leaflet-zoom-animated");\n        this._panes.mapPane.appendChild(t), this.on("zoomanim", function (t){\n          var e=ue,\n            i=this._proxy.style[e];\n          be(this._proxy, this.project(t.center, t.zoom), this.getZoomScale(t.zoom, 1)), i===this._proxy.style[e]&&this._animatingZoom&&this._onZoomTransitionEnd();\n        }, this), this.on("load moveend", this._animMoveEnd, this), this._on("unload", this._destroyAnimProxy, this);\n      },\n      _destroyAnimProxy: function (){\n        T(this._proxy), this.off("load moveend", this._animMoveEnd, this), delete this._proxy;\n      },\n      _animMoveEnd: function (){\n        var t=this.getCenter(),\n          e=this.getZoom();\n        be(this._proxy, this.project(t, e), this.getZoomScale(e, 1));\n      },\n      _catchTransitionEnd: function (t){\n        this._animatingZoom&&0 <=t.propertyName.indexOf("transform")&&this._onZoomTransitionEnd();\n      },\n      _nothingToAnimate: function (){\n        return !this._container.getElementsByClassName("leaflet-zoom-animated").length;\n      },\n      _tryAnimatedZoom: function (t, e, i){\n        if(!this._animatingZoom){\n          if(i=i||{}, !this._zoomAnimated||!1===i.animate||this._nothingToAnimate()||Math.abs(e - this._zoom) > this.options.zoomAnimationThreshold) return !1;\n          var n=this.getZoomScale(e),\n            n=this._getCenterOffset(t)._divideBy(1 - 1 / n);\n          if(!0!==i.animate&&!this.getSize().contains(n)) return !1;\n          x(function (){\n            this._moveStart(!0, i.noMoveStart||!1)._animateZoom(t, e, !0);\n          }, this);\n        }\n        return !0;\n      },\n      _animateZoom: function (t, e, i, n){\n        this._mapPane&&(i&&(this._animatingZoom = !0, this._animateToCenter=t, this._animateToZoom=e, M(this._mapPane, "leaflet-zoom-anim")), this.fire("zoomanim", {\n          center: t,\n          zoom: e,\n          noUpdate: n\n        }), this._tempFireZoomEvent||(this._tempFireZoomEvent=this._zoom!==this._animateToZoom), this._move(this._animateToCenter, this._animateToZoom, void 0, !0), setTimeout(a(this._onZoomTransitionEnd, this), 250));\n      },\n      _onZoomTransitionEnd: function (){\n        this._animatingZoom&&(this._mapPane&&z(this._mapPane, "leaflet-zoom-anim"), this._animatingZoom = !1, this._move(this._animateToCenter, this._animateToZoom, void 0, !0), this._tempFireZoomEvent&&this.fire("zoom"), delete this._tempFireZoomEvent, this.fire("move"), this._moveEnd(!0));\n      }\n    });\n  function Ue(t){\n    return new B(t);\n  }\n  var B=et.extend({\n      options: {\n        position: "topright"\n      },\n      initialize: function (t){\n        c(this, t);\n      },\n      getPosition: function (){\n        return this.options.position;\n      },\n      setPosition: function (t){\n        var e=this._map;\n        return e&&e.removeControl(this), this.options.position=t, e&&e.addControl(this), this;\n      },\n      getContainer: function (){\n        return this._container;\n      },\n      addTo: function (t){\n        this.remove(), this._map=t;\n        var e=this._container=this.onAdd(t),\n          i=this.getPosition(),\n          t=t._controlCorners[i];\n        return M(e, "leaflet-control"), -1!==i.indexOf("bottom") ? t.insertBefore(e, t.firstChild):t.appendChild(e), this._map.on("unload", this.remove, this), this;\n      },\n      remove: function (){\n        return this._map&&(T(this._container), this.onRemove&&this.onRemove(this._map), this._map.off("unload", this.remove, this), this._map=null), this;\n      },\n      _refocusOnMap: function (t){\n        this._map&&t && 0 < t.screenX&&0 < t.screenY&&this._map.getContainer().focus();\n      }\n    }),\n    Ve=(A.include({\n      addControl: function (t){\n        return t.addTo(this), this;\n      },\n      removeControl: function (t){\n        return t.remove(), this;\n      },\n      _initControlPos: function (){\n        var i=this._controlCorners={},\n          n="leaflet-",\n          o=this._controlContainer=P("div", n + "control-container", this._container);\n        function t(t, e){\n          i[t + e]=P("div", n + t + " " + n + e, o);\n        }\n        t("top", "left"), t("top", "right"), t("bottom", "left"), t("bottom", "right");\n      },\n      _clearControlPos: function (){\n        for (var t in this._controlCorners) T(this._controlCorners[t]);\n        T(this._controlContainer), delete this._controlCorners, delete this._controlContainer;\n      }\n    }), B.extend({\n      options: {\n        collapsed: !0,\n        position: "topright",\n        autoZIndex: !0,\n        hideSingleBase: !1,\n        sortLayers: !1,\n        sortFunction: function (t, e, i, n){\n          return i < n ? -1:n < i ? 1:0;\n        }\n      },\n      initialize: function (t, e, i){\n        for (var n in c(this, i), this._layerControlInputs=[], this._layers=[], this._lastZIndex=0, this._handlingClick = !1, this._preventClick = !1, t) this._addLayer(t[n], n);\n        for (n in e) this._addLayer(e[n], n, !0);\n      },\n      onAdd: function (t){\n        this._initLayout(), this._update(), (this._map=t).on("zoomend", this._checkDisabledLayers, this);\n        for (var e=0; e < this._layers.length; e++) this._layers[e].layer.on("add remove", this._onLayerChange, this);\n        return this._container;\n      },\n      addTo: function (t){\n        return B.prototype.addTo.call(this, t), this._expandIfNotCollapsed();\n      },\n      onRemove: function (){\n        this._map.off("zoomend", this._checkDisabledLayers, this);\n        for (var t=0; t < this._layers.length; t++) this._layers[t].layer.off("add remove", this._onLayerChange, this);\n      },\n      addBaseLayer: function (t, e){\n        return this._addLayer(t, e), this._map ? this._update():this;\n      },\n      addOverlay: function (t, e){\n        return this._addLayer(t, e, !0), this._map ? this._update():this;\n      },\n      removeLayer: function (t){\n        t.off("add remove", this._onLayerChange, this);\n        t=this._getLayer(h(t));\n        return t&&this._layers.splice(this._layers.indexOf(t), 1), this._map ? this._update():this;\n      },\n      expand: function (){\n        M(this._container, "leaflet-control-layers-expanded"), this._section.style.height=null;\n        var t=this._map.getSize().y - (this._container.offsetTop + 50);\n        return t < this._section.clientHeight ? (M(this._section, "leaflet-control-layers-scrollbar"), this._section.style.height=t + "px"):z(this._section, "leaflet-control-layers-scrollbar"), this._checkDisabledLayers(), this;\n      },\n      collapse: function (){\n        return z(this._container, "leaflet-control-layers-expanded"), this;\n      },\n      _initLayout: function (){\n        var t="leaflet-control-layers",\n          e=this._container=P("div", t),\n          i=this.options.collapsed,\n          n=(e.setAttribute("aria-haspopup", !0), Ie(e), Be(e), this._section=P("section", t + "-list")),\n          o=(i&&(this._map.on("click", this.collapse, this), S(e, {\n            mouseenter: this._expandSafely,\n            mouseleave: this.collapse\n          }, this)), this._layersLink=P("a", t + "-toggle", e));\n        o.href="#", o.title="Layers", o.setAttribute("role", "button"), S(o, {\n          keydown: function (t){\n            13===t.keyCode&&this._expandSafely();\n          },\n          click: function (t){\n            O(t), this._expandSafely();\n          }\n        }, this), i||this.expand (), this._baseLayersList=P("div", t + "-base", n), this._separator=P("div", t + "-separator", n), this._overlaysList=P("div", t + "-overlays", n), e.appendChild(n);\n      },\n      _getLayer: function (t){\n        for (var e=0; e < this._layers.length; e++) if(this._layers[e]&&h(this._layers[e].layer)===t) return this._layers[e];\n      },\n      _addLayer: function (t, e, i){\n        this._map&&t.on("add remove", this._onLayerChange, this), this._layers.push({\n          layer: t,\n          name: e,\n          overlay: i\n        }), this.options.sortLayers&&this._layers.sort(a(function (t, e){\n          return this.options.sortFunction(t.layer, e.layer, t.name, e.name);\n        }, this)), this.options.autoZIndex&&t.setZIndex&&(this._lastZIndex++, t.setZIndex(this._lastZIndex)), this._expandIfNotCollapsed();\n      },\n      _update: function (){\n        if(this._container){\n          me(this._baseLayersList), me(this._overlaysList), this._layerControlInputs=[];\n          for (var t, e, i, n=0, o=0; o < this._layers.length; o++) i=this._layers[o], this._addItem(i), e=e||i.overlay, t=t||!i.overlay, n +=i.overlay ? 0:1;\n          this.options.hideSingleBase&&(this._baseLayersList.style.display=(t=t&&1 < n) ? "":"none"), this._separator.style.display=e&&t ? "":"none";\n        }\n        return this;\n      },\n      _onLayerChange: function (t){\n        this._handlingClick||this._update();\n        var e=this._getLayer(h(t.target)),\n          t=e.overlay ? "add"===t.type ? "overlayadd":"overlayremove":"add"===t.type ? "baselayerchange":null;\n        t&&this._map.fire(t, e);\n      },\n      _createRadioElement: function (t, e){\n        t=\'<input type="radio" class="leaflet-control-layers-selector" name="\' + t + \'"\' + (e ? \' checked="checked"\':"") + "/>", e=document.createElement("div");\n        return e.innerHTML=t, e.firstChild;\n      },\n      _addItem: function (t){\n        var e,\n          i=document.createElement("label"),\n          n=this._map.hasLayer(t.layer),\n          n=(t.overlay ? ((e=document.createElement("input")).type="checkbox", e.className="leaflet-control-layers-selector", e.defaultChecked=n):e=this._createRadioElement("leaflet-base-layers_" + h(this), n), this._layerControlInputs.push(e), e.layerId=h(t.layer), S(e, "click", this._onInputClick, this), document.createElement("span")),\n          o=(n.innerHTML=" " + t.name, document.createElement("span"));\n        return i.appendChild(o), o.appendChild(e), o.appendChild(n), (t.overlay ? this._overlaysList:this._baseLayersList).appendChild(i), this._checkDisabledLayers(), i;\n      },\n      _onInputClick: function (){\n        if(!this._preventClick){\n          var t,\n            e,\n            i=this._layerControlInputs,\n            n=[],\n            o=[];\n          this._handlingClick = !0;\n          for (var s=i.length - 1; 0 <=s; s--) t=i[s], e=this._getLayer(t.layerId).layer, t.checked ? n.push(e):t.checked||o.push(e);\n          for (s=0; s < o.length; s++) this._map.hasLayer(o[s])&&this._map.removeLayer(o[s]);\n          for (s=0; s < n.length; s++) this._map.hasLayer(n[s])||this._map.addLayer(n[s]);\n          this._handlingClick = !1, this._refocusOnMap();\n        }\n      },\n      _checkDisabledLayers: function (){\n        for (var t, e, i=this._layerControlInputs, n=this._map.getZoom(), o=i.length - 1; 0 <=o; o--) t=i[o], e=this._getLayer(t.layerId).layer, t.disabled=void 0!==e.options.minZoom&&n < e.options.minZoom||void 0!==e.options.maxZoom&&n > e.options.maxZoom;\n      },\n      _expandIfNotCollapsed: function (){\n        return this._map&&!this.options.collapsed&&this.expand (), this;\n      },\n      _expandSafely: function (){\n        var t=this._section,\n          e=(this._preventClick = !0, S(t, "click", O), this.expand (), this);\n        setTimeout(function (){\n          k(t, "click", O), e._preventClick = !1;\n        });\n      }\n    })),\n    qe=B.extend({\n      options: {\n        position: "topleft",\n        zoomInText: \'<span aria-hidden="true">+</span>\',\n        zoomInTitle: "Zoom in",\n        zoomOutText: \'<span aria-hidden="true">&#x2212;</span>\',\n        zoomOutTitle: "Zoom out"\n      },\n      onAdd: function (t){\n        var e="leaflet-control-zoom",\n          i=P("div", e + " leaflet-bar"),\n          n=this.options;\n        return this._zoomInButton=this._createButton(n.zoomInText, n.zoomInTitle, e + "-in", i, this._zoomIn), this._zoomOutButton=this._createButton(n.zoomOutText, n.zoomOutTitle, e + "-out", i, this._zoomOut), this._updateDisabled(), t.on("zoomend zoomlevelschange", this._updateDisabled, this), i;\n      },\n      onRemove: function (t){\n        t.off("zoomend zoomlevelschange", this._updateDisabled, this);\n      },\n      disable: function (){\n        return this._disabled = !0, this._updateDisabled(), this;\n      },\n      enable: function (){\n        return this._disabled = !1, this._updateDisabled(), this;\n      },\n      _zoomIn: function (t){\n        !this._disabled&&this._map._zoom < this._map.getMaxZoom()&&this._map.zoomIn(this._map.options.zoomDelta * (t.shiftKey ? 3:1));\n      },\n      _zoomOut: function (t){\n        !this._disabled&&this._map._zoom > this._map.getMinZoom()&&this._map.zoomOut(this._map.options.zoomDelta * (t.shiftKey ? 3:1));\n      },\n      _createButton: function (t, e, i, n, o){\n        i=P("a", i, n);\n        return i.innerHTML=t, i.href="#", i.title=e, i.setAttribute("role", "button"), i.setAttribute("aria-label", e), Ie(i), S(i, "click", Re), S(i, "click", o, this), S(i, "click", this._refocusOnMap, this), i;\n      },\n      _updateDisabled: function (){\n        var t=this._map,\n          e="leaflet-disabled";\n        z(this._zoomInButton, e), z(this._zoomOutButton, e), this._zoomInButton.setAttribute("aria-disabled", "false"), this._zoomOutButton.setAttribute("aria-disabled", "false"), !this._disabled&&t._zoom!==t.getMinZoom()||(M(this._zoomOutButton, e), this._zoomOutButton.setAttribute("aria-disabled", "true")), !this._disabled&&t._zoom!==t.getMaxZoom()||(M(this._zoomInButton, e), this._zoomInButton.setAttribute("aria-disabled", "true"));\n      }\n    }),\n    Ge=(A.mergeOptions({\n      zoomControl: !0\n    }), A.addInitHook(function (){\n      this.options.zoomControl&&(this.zoomControl=new qe(), this.addControl(this.zoomControl));\n    }), B.extend({\n      options: {\n        position: "bottomleft",\n        maxWidth: 100,\n        metric: !0,\n        imperial: !0\n      },\n      onAdd: function (t){\n        var e="leaflet-control-scale",\n          i=P("div", e),\n          n=this.options;\n        return this._addScales(n, e + "-line", i), t.on(n.updateWhenIdle ? "moveend":"move", this._update, this), t.whenReady(this._update, this), i;\n      },\n      onRemove: function (t){\n        t.off(this.options.updateWhenIdle ? "moveend":"move", this._update, this);\n      },\n      _addScales: function (t, e, i){\n        t.metric&&(this._mScale=P("div", e, i)), t.imperial&&(this._iScale=P("div", e, i));\n      },\n      _update: function (){\n        var t=this._map,\n          e=t.getSize().y / 2,\n          t=t.distance(t.containerPointToLatLng([0, e]), t.containerPointToLatLng([this.options.maxWidth, e]));\n        this._updateScales(t);\n      },\n      _updateScales: function (t){\n        this.options.metric&&t && this._updateMetric(t), this.options.imperial&&t && this._updateImperial(t);\n      },\n      _updateMetric: function (t){\n        var e=this._getRoundNum(t);\n        this._updateScale(this._mScale, e < 1e3 ? e + " m":e / 1e3 + " km", e / t);\n      },\n      _updateImperial: function (t){\n        var e,\n          i,\n          t=3.2808399 * t;\n        5280 < t ? (i=this._getRoundNum(e=t / 5280), this._updateScale(this._iScale, i + " mi", i / e)):(i=this._getRoundNum(t), this._updateScale(this._iScale, i + " ft", i / t));\n      },\n      _updateScale: function (t, e, i){\n        t.style.width=Math.round(this.options.maxWidth * i) + "px", t.innerHTML=e;\n      },\n      _getRoundNum: function (t){\n        var e=Math.pow(10, (Math.floor(t) + "").length - 1),\n          t=t / e;\n        return e * (t=10 <=t ? 10:5 <=t ? 5:3 <=t ? 3:2 <=t ? 2:1);\n      }\n    })),\n    Ke=B.extend({\n      options: {\n        position: "bottomright",\n        prefix: \'<a href="https://leafletjs.com" title="A JavaScript library for interactive maps">\' + (b.inlineSvg ? \'<svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="12" height="8" viewBox="0 0 12 8" class="leaflet-attribution-flag"><path fill="#4C7BE1" d="M0 0h12v4H0z"/><path fill="#FFD500" d="M0 4h12v3H0z"/><path fill="#E0BC00" d="M0 7h12v1H0z"/></svg> \':"") + "Leaflet</a>"\n      },\n      initialize: function (t){\n        c(this, t), this._attributions={};\n      },\n      onAdd: function (t){\n        for (var e in (t.attributionControl=this)._container=P("div", "leaflet-control-attribution"), Ie(this._container), t._layers) t._layers[e].getAttribution&&this.addAttribution(t._layers[e].getAttribution());\n        return this._update(), t.on("layeradd", this._addAttribution, this), this._container;\n      },\n      onRemove: function (t){\n        t.off("layeradd", this._addAttribution, this);\n      },\n      _addAttribution: function (t){\n        t.layer.getAttribution&&(this.addAttribution(t.layer.getAttribution()), t.layer.once("remove", function (){\n          this.removeAttribution(t.layer.getAttribution());\n        }, this));\n      },\n      setPrefix: function (t){\n        return this.options.prefix=t, this._update(), this;\n      },\n      addAttribution: function (t){\n        return t&&(this._attributions[t]||(this._attributions[t]=0), this._attributions[t]++, this._update()), this;\n      },\n      removeAttribution: function (t){\n        return t&&this._attributions[t]&&(this._attributions[t]--, this._update()), this;\n      },\n      _update: function (){\n        if(this._map){\n          var t,\n            e=[];\n          for (t in this._attributions) this._attributions[t]&&e.push(t);\n          var i=[];\n          this.options.prefix&&i.push(this.options.prefix), e.length&&i.push(e.join(", ")), this._container.innerHTML=i.join(\' <span aria-hidden="true">|</span> \');\n        }\n      }\n    }),\n    n=(A.mergeOptions({\n      attributionControl: !0\n    }), A.addInitHook(function (){\n      this.options.attributionControl&&new Ke().addTo(this);\n    }), B.Layers=Ve, B.Zoom=qe, B.Scale=Ge, B.Attribution=Ke, Ue.layers=function (t, e, i){\n      return new Ve(t, e, i);\n    }, Ue.zoom=function (t){\n      return new qe(t);\n    }, Ue.scale=function (t){\n      return new Ge(t);\n    }, Ue.attribution=function (t){\n      return new Ke(t);\n    }, et.extend({\n      initialize: function (t){\n        this._map=t;\n      },\n      enable: function (){\n        return this._enabled||(this._enabled = !0, this.addHooks()), this;\n      },\n      disable: function (){\n        return this._enabled&&(this._enabled = !1, this.removeHooks()), this;\n      },\n      enabled: function (){\n        return !!this._enabled;\n      }\n    })),\n    ft=(n.addTo=function (t, e){\n      return t.addHandler(e, this), this;\n    }, {\n      Events: e\n    }),\n    Ye=b.touch ? "touchstart mousedown":"mousedown",\n    Xe=it.extend({\n      options: {\n        clickTolerance: 3\n      },\n      initialize: function (t, e, i, n){\n        c(this, n), this._element=t, this._dragStartTarget=e||t, this._preventOutline=i;\n      },\n      enable: function (){\n        this._enabled||(S(this._dragStartTarget, Ye, this._onDown, this), this._enabled = !0);\n      },\n      disable: function (){\n        this._enabled&&(Xe._dragging===this&&this.finishDrag(!0), k(this._dragStartTarget, Ye, this._onDown, this), this._enabled = !1, this._moved = !1);\n      },\n      _onDown: function (t){\n        var e, i;\n        this._enabled&&(this._moved = !1, ve(this._element, "leaflet-zoom-anim")||(t.touches&&1!==t.touches.length ? Xe._dragging===this&&this.finishDrag():Xe._dragging||t.shiftKey||1!==t.which&&1!==t.button&&!t.touches||((Xe._dragging=this)._preventOutline&&Me(this._element), Le(), re(), this._moving||(this.fire("down"), i=t.touches ? t.touches[0]:t, e=Ce(this._element), this._startPoint=new p(i.clientX, i.clientY), this._startPos=Pe(this._element), this._parentScale=Ze(e), i="mousedown"===t.type, S(document, i ? "mousemove":"touchmove", this._onMove, this), S(document, i ? "mouseup":"touchend touchcancel", this._onUp, this)))));\n      },\n      _onMove: function (t){\n        var e;\n        this._enabled&&(t.touches&&1 < t.touches.length ? this._moved = !0:!(e=new p((e=t.touches&&1===t.touches.length ? t.touches[0]:t).clientX, e.clientY)._subtract(this._startPoint)).x&&!e.y||Math.abs(e.x) + Math.abs(e.y) < this.options.clickTolerance||(e.x /=this._parentScale.x, e.y /=this._parentScale.y, O(t), this._moved||(this.fire("dragstart"), this._moved = !0, M(document.body, "leaflet-dragging"), this._lastTarget=t.target||t.srcElement, window.SVGElementInstance&&this._lastTarget instanceof window.SVGElementInstance&&(this._lastTarget=this._lastTarget.correspondingUseElement), M(this._lastTarget, "leaflet-drag-target")), this._newPos=this._startPos.add(e), this._moving = !0, this._lastEvent=t, this._updatePosition()));\n      },\n      _updatePosition: function (){\n        var t={\n          originalEvent: this._lastEvent\n        };\n        this.fire("predrag", t), Z(this._element, this._newPos), this.fire("drag", t);\n      },\n      _onUp: function (){\n        this._enabled&&this.finishDrag();\n      },\n      finishDrag: function (t){\n        z(document.body, "leaflet-dragging"), this._lastTarget&&(z(this._lastTarget, "leaflet-drag-target"), this._lastTarget=null), k(document, "mousemove touchmove", this._onMove, this), k(document, "mouseup touchend touchcancel", this._onUp, this), Te(), ae();\n        var e=this._moved&&this._moving;\n        this._moving = !1, Xe._dragging = !1, e&&this.fire("dragend", {\n          noInertia: t,\n          distance: this._newPos.distanceTo(this._startPos)\n        });\n      }\n    });\n  function Je(t, e, i){\n    for (var n, o, s, r, a, h, l, u=[1, 4, 2, 8], c=0, d=t.length; c < d; c++) t[c]._code=si(t[c], e);\n    for (s=0; s < 4; s++){\n      for (h=u[s], n=[], c=0, o=(d=t.length) - 1; c < d; o=c++) r=t[c], a=t[o], r._code & h ? a._code & h||((l=oi(a, r, h, e, i))._code=si(l, e), n.push(l)):(a._code & h&&((l=oi(a, r, h, e, i))._code=si(l, e), n.push(l)), n.push(r));\n      t=n;\n    }\n    return t;\n  }\n  function $e(t, e){\n    var i, n, o, s, r, a, h;\n    if(!t||0===t.length) throw new Error("latlngs not passed");\n    I(t)||(console.warn("latlngs are not flat! Only the first ring will be used"), t=t[0]);\n    for (var l=w([0, 0]), u=g(t), c=(u.getNorthWest().distanceTo(u.getSouthWest()) * u.getNorthEast().distanceTo(u.getNorthWest()) < 1700&&(l=Qe(t)), t.length), d=[], _=0; _ < c; _++){\n      var p=w(t[_]);\n      d.push(e.project(w([p.lat - l.lat, p.lng - l.lng])));\n    }\n    for (_=r = a=h = 0, i=c - 1; _ < c; i=_++) n=d[_], o=d[i], s=n.y * o.x - o.y * n.x, a +=(n.x + o.x) * s, h +=(n.y + o.y) * s, r +=3 * s;\n    u=0===r ? d[0]:[a / r, h / r], u=e.unproject(m(u));\n    return w([u.lat + l.lat, u.lng + l.lng]);\n  }\n  function Qe(t){\n    for (var e=0, i=0, n=0, o=0; o < t.length; o++){\n      var s=w(t[o]);\n      e +=s.lat, i +=s.lng, n++;\n    }\n    return w([e / n, i / n]);\n  }\n  var ti,\n    gt={\n      __proto__: null,\n      clipPolygon: Je,\n      polygonCenter: $e,\n      centroid: Qe\n    };\n  function ei(t, e){\n    if(e&&t.length){\n      var i=t = function (t, e){\n          for (var i=[t[0]], n=1, o=0, s=t.length; n < s; n++) (function (t, e){\n            var i=e.x - t.x,\n              e=e.y - t.y;\n            return i * i + e * e;\n          })(t[n], t[o]) > e&&(i.push(t[n]), o=n);\n          o < s - 1&&i.push(t[s - 1]);\n          return i;\n        }(t, e=e * e),\n        n=i.length,\n        o=new (typeof Uint8Array!=void 0 + "" ? Uint8Array:Array)(n);\n      o[0]=o[n - 1]=1, function t(e, i, n, o, s){\n        var r,\n          a,\n          h,\n          l=0;\n        for (a=o + 1; a <=s - 1; a++) h=ri(e[a], e[o], e[s], !0), l < h&&(r=a, l=h);\n        n < l&&(i[r]=1, t(e, i, n, o, r), t(e, i, n, r, s));\n      }(i, o, e, 0, n - 1);\n      var s,\n        r=[];\n      for (s=0; s < n; s++) o[s]&&r.push(i[s]);\n      return r;\n    }\n    return t.slice();\n  }\n  function ii(t, e, i){\n    return Math.sqrt(ri(t, e, i, !0));\n  }\n  function ni(t, e, i, n, o){\n    var s,\n      r,\n      a,\n      h=n ? ti:si(t, i),\n      l=si(e, i);\n    for (ti=l;;){\n      if(!(h | l)) return [t, e];\n      if(h & l) return !1;\n      a=si(r=oi(t, e, s=h||l, i, o), i), s===h ? (t=r, h=a):(e=r, l=a);\n    }\n  }\n  function oi(t, e, i, n, o){\n    var s,\n      r,\n      a=e.x - t.x,\n      e=e.y - t.y,\n      h=n.min,\n      n=n.max;\n    return 8 & i ? (s=t.x + a * (n.y - t.y) / e, r=n.y):4 & i ? (s=t.x + a * (h.y - t.y) / e, r=h.y):2 & i ? (s=n.x, r=t.y + e * (n.x - t.x) / a):1 & i&&(s=h.x, r=t.y + e * (h.x - t.x) / a), new p(s, r, o);\n  }\n  function si(t, e){\n    var i=0;\n    return t.x < e.min.x ? i |=1:t.x > e.max.x&&(i |=2), t.y < e.min.y ? i |=4:t.y > e.max.y&&(i |=8), i;\n  }\n  function ri(t, e, i, n){\n    var o=e.x,\n      e=e.y,\n      s=i.x - o,\n      r=i.y - e,\n      a=s * s + r * r;\n    return 0 < a&&(1 < (a=((t.x - o) * s + (t.y - e) * r) / a) ? (o=i.x, e=i.y):0 < a&&(o +=s * a, e +=r * a)), s=t.x - o, r=t.y - e, n ? s * s + r * r:new p(o, e);\n  }\n  function I(t){\n    return !d(t[0])||"object"!=typeof t[0][0]&&void 0!==t[0][0];\n  }\n  function ai(t){\n    return console.warn("Deprecated use of _flat, please use L.LineUtil.isFlat instead."), I(t);\n  }\n  function hi(t, e){\n    var i, n, o, s, r, a;\n    if(!t||0===t.length) throw new Error("latlngs not passed");\n    I(t)||(console.warn("latlngs are not flat! Only the first ring will be used"), t=t[0]);\n    for (var h=w([0, 0]), l=g(t), u=(l.getNorthWest().distanceTo(l.getSouthWest()) * l.getNorthEast().distanceTo(l.getNorthWest()) < 1700&&(h=Qe(t)), t.length), c=[], d=0; d < u; d++){\n      var _=w(t[d]);\n      c.push(e.project(w([_.lat - h.lat, _.lng - h.lng])));\n    }\n    for (i=d = 0; d < u - 1; d++) i +=c[d].distanceTo(c[d + 1]) / 2;\n    if(0===i) a=c[0];else for (n=d = 0; d < u - 1; d++) if(o=c[d], s=c[d + 1], i < (n +=r = o.distanceTo(s))){\n      a=[s.x - (r=(n - i) / r) * (s.x - o.x), s.y - r * (s.y - o.y)];\n      break;\n    }\n    l=e.unproject(m(a));\n    return w([l.lat + h.lat, l.lng + h.lng]);\n  }\n  var vt={\n      __proto__: null,\n      simplify: ei,\n      pointToSegmentDistance: ii,\n      closestPointOnSegment: function (t, e, i){\n        return ri(t, e, i);\n      },\n      clipSegment: ni,\n      _getEdgeIntersection: oi,\n      _getBitCode: si,\n      _sqClosestPointOnSegment: ri,\n      isFlat: I,\n      _flat: ai,\n      polylineCenter: hi\n    },\n    yt={\n      project: function (t){\n        return new p(t.lng, t.lat);\n      },\n      unproject: function (t){\n        return new v(t.y, t.x);\n      },\n      bounds: new f([-180, -90], [180, 90])\n    },\n    xt={\n      R: 6378137,\n      R_MINOR: 6356752.314245179,\n      bounds: new f([-20037508.34279, -15496570.73972], [20037508.34279, 18764656.23138]),\n      project: function (t){\n        var e=Math.PI / 180,\n          i=this.R,\n          n=t.lat * e,\n          o=this.R_MINOR / i,\n          o=Math.sqrt(1 - o * o),\n          s=o * Math.sin(n),\n          s=Math.tan(Math.PI / 4 - n / 2) / Math.pow((1 - s) / (1 + s), o / 2),\n          n=-i * Math.log(Math.max(s, 1e-10));\n        return new p(t.lng * e * i, n);\n      },\n      unproject: function (t){\n        for (var e, i=180 / Math.PI, n=this.R, o=this.R_MINOR / n, s=Math.sqrt(1 - o * o), r=Math.exp(-t.y / n), a=Math.PI / 2 - 2 * Math.atan(r), h=0, l=.1; h < 15&&1e-7 < Math.abs(l); h++) e=s * Math.sin(a), e=Math.pow((1 - e) / (1 + e), s / 2), a +=l = Math.PI / 2 - 2 * Math.atan(r * e) - a;\n        return new v(a * i, t.x * i / n);\n      }\n    },\n    wt={\n      __proto__: null,\n      LonLat: yt,\n      Mercator: xt,\n      SphericalMercator: rt\n    },\n    Pt=l({}, st, {\n      code: "EPSG:3395",\n      projection: xt,\n      transformation: ht(bt=.5 / (Math.PI * xt.R), .5, -bt, .5)\n    }),\n    li=l({}, st, {\n      code: "EPSG:4326",\n      projection: yt,\n      transformation: ht(1 / 180, 1, -1 / 180, .5)\n    }),\n    Lt=l({}, ot, {\n      projection: yt,\n      transformation: ht(1, 0, -1, 0),\n      scale: function (t){\n        return Math.pow(2, t);\n      },\n      zoom: function (t){\n        return Math.log(t) / Math.LN2;\n      },\n      distance: function (t, e){\n        var i=e.lng - t.lng,\n          e=e.lat - t.lat;\n        return Math.sqrt(i * i + e * e);\n      },\n      infinite: !0\n    }),\n    o=(ot.Earth=st, ot.EPSG3395=Pt, ot.EPSG3857=lt, ot.EPSG900913=ut, ot.EPSG4326=li, ot.Simple=Lt, it.extend({\n      options: {\n        pane: "overlayPane",\n        attribution: null,\n        bubblingMouseEvents: !0\n      },\n      addTo: function (t){\n        return t.addLayer(this), this;\n      },\n      remove: function (){\n        return this.removeFrom(this._map||this._mapToAdd);\n      },\n      removeFrom: function (t){\n        return t&&t.removeLayer(this), this;\n      },\n      getPane: function (t){\n        return this._map.getPane(t ? this.options[t]||t:this.options.pane);\n      },\n      addInteractiveTarget: function (t){\n        return this._map._targets[h(t)]=this;\n      },\n      removeInteractiveTarget: function (t){\n        return delete this._map._targets[h(t)], this;\n      },\n      getAttribution: function (){\n        return this.options.attribution;\n      },\n      _layerAdd: function (t){\n        var e,\n          i=t.target;\n        i.hasLayer(this)&&(this._map=i, this._zoomAnimated=i._zoomAnimated, this.getEvents&&(e=this.getEvents(), i.on(e, this), this.once("remove", function (){\n          i.off(e, this);\n        }, this)), this.onAdd(i), this.fire("add"), i.fire("layeradd", {\n          layer: this\n        }));\n      }\n    })),\n    ui=(A.include({\n      addLayer: function (t){\n        var e;\n        if(t._layerAdd) return e=h(t), this._layers[e]||((this._layers[e]=t)._mapToAdd=this, t.beforeAdd&&t.beforeAdd(this), this.whenReady(t._layerAdd, t)), this;\n        throw new Error("The provided object is not a Layer.");\n      },\n      removeLayer: function (t){\n        var e=h(t);\n        return this._layers[e]&&(this._loaded&&t.onRemove(this), delete this._layers[e], this._loaded&&(this.fire("layerremove", {\n          layer: t\n        }), t.fire("remove")), t._map=t._mapToAdd=null), this;\n      },\n      hasLayer: function (t){\n        return h(t) in this._layers;\n      },\n      eachLayer: function (t, e){\n        for (var i in this._layers) t.call(e, this._layers[i]);\n        return this;\n      },\n      _addLayers: function (t){\n        for (var e=0, i=(t=t ? d(t) ? t:[t]:[]).length; e < i; e++) this.addLayer(t[e]);\n      },\n      _addZoomLimit: function (t){\n        isNaN(t.options.maxZoom)&&isNaN(t.options.minZoom)||(this._zoomBoundLayers[h(t)]=t, this._updateZoomLevels());\n      },\n      _removeZoomLimit: function (t){\n        t=h(t);\n        this._zoomBoundLayers[t]&&(delete this._zoomBoundLayers[t], this._updateZoomLevels());\n      },\n      _updateZoomLevels: function (){\n        var t,\n          e=1 / 0,\n          i=-1 / 0,\n          n=this._getZoomSpan();\n        for (t in this._zoomBoundLayers) var o=this._zoomBoundLayers[t].options, e=void 0===o.minZoom ? e:Math.min(e, o.minZoom), i=void 0===o.maxZoom ? i:Math.max(i, o.maxZoom);\n        this._layersMaxZoom=i===-1 / 0 ? void 0:i, this._layersMinZoom=e===1 / 0 ? void 0:e, n!==this._getZoomSpan()&&this.fire("zoomlevelschange"), void 0===this.options.maxZoom&&this._layersMaxZoom&&this.getZoom() > this._layersMaxZoom&&this.setZoom(this._layersMaxZoom), void 0===this.options.minZoom&&this._layersMinZoom&&this.getZoom() < this._layersMinZoom&&this.setZoom(this._layersMinZoom);\n      }\n    }), o.extend({\n      initialize: function (t, e){\n        var i, n;\n        if(c(this, e), this._layers={}, t) for (i=0, n=t.length; i < n; i++) this.addLayer(t[i]);\n      },\n      addLayer: function (t){\n        var e=this.getLayerId(t);\n        return this._layers[e]=t, this._map&&this._map.addLayer(t), this;\n      },\n      removeLayer: function (t){\n        t=t in this._layers ? t:this.getLayerId(t);\n        return this._map&&this._layers[t]&&this._map.removeLayer(this._layers[t]), delete this._layers[t], this;\n      },\n      hasLayer: function (t){\n        return ("number"==typeof t ? t:this.getLayerId(t)) in this._layers;\n      },\n      clearLayers: function (){\n        return this.eachLayer(this.removeLayer, this);\n      },\n      invoke: function (t){\n        var e,\n          i,\n          n=Array.prototype.slice.call(arguments, 1);\n        for (e in this._layers) (i=this._layers[e])[t]&&i[t].apply(i, n);\n        return this;\n      },\n      onAdd: function (t){\n        this.eachLayer(t.addLayer, t);\n      },\n      onRemove: function (t){\n        this.eachLayer(t.removeLayer, t);\n      },\n      eachLayer: function (t, e){\n        for (var i in this._layers) t.call(e, this._layers[i]);\n        return this;\n      },\n      getLayer: function (t){\n        return this._layers[t];\n      },\n      getLayers: function (){\n        var t=[];\n        return this.eachLayer(t.push, t), t;\n      },\n      setZIndex: function (t){\n        return this.invoke("setZIndex", t);\n      },\n      getLayerId: h\n    })),\n    ci=ui.extend({\n      addLayer: function (t){\n        return this.hasLayer(t) ? this:(t.addEventParent(this), ui.prototype.addLayer.call(this, t), this.fire("layeradd", {\n          layer: t\n        }));\n      },\n      removeLayer: function (t){\n        return this.hasLayer(t) ? ((t=t in this._layers ? this._layers[t]:t).removeEventParent(this), ui.prototype.removeLayer.call(this, t), this.fire("layerremove", {\n          layer: t\n        })):this;\n      },\n      setStyle: function (t){\n        return this.invoke("setStyle", t);\n      },\n      bringToFront: function (){\n        return this.invoke("bringToFront");\n      },\n      bringToBack: function (){\n        return this.invoke("bringToBack");\n      },\n      getBounds: function (){\n        var t,\n          e=new s();\n        for (t in this._layers){\n          var i=this._layers[t];\n          e.extend(i.getBounds ? i.getBounds():i.getLatLng());\n        }\n        return e;\n      }\n    }),\n    di=et.extend({\n      options: {\n        popupAnchor: [0, 0],\n        tooltipAnchor: [0, 0],\n        crossOrigin: !1\n      },\n      initialize: function (t){\n        c(this, t);\n      },\n      createIcon: function (t){\n        return this._createIcon("icon", t);\n      },\n      createShadow: function (t){\n        return this._createIcon("shadow", t);\n      },\n      _createIcon: function (t, e){\n        var i=this._getIconUrl(t);\n        if(i) return i=this._createImg(i, e&&"IMG"===e.tagName ? e:null), this._setIconStyles(i, t), !this.options.crossOrigin&&""!==this.options.crossOrigin||(i.crossOrigin = !0===this.options.crossOrigin ? "":this.options.crossOrigin), i;\n        if("icon"===t) throw new Error("iconUrl not set in Icon options (see the docs).");\n        return null;\n      },\n      _setIconStyles: function (t, e){\n        var i=this.options,\n          n=i[e + "Size"],\n          n=m(n="number"==typeof n ? [n, n]:n),\n          o=m("shadow"===e&&i.shadowAnchor||i.iconAnchor||n&&n.divideBy(2, !0));\n        t.className="leaflet-marker-" + e + " " + (i.className||""), o&&(t.style.marginLeft=-o.x + "px", t.style.marginTop=-o.y + "px"), n&&(t.style.width=n.x + "px", t.style.height=n.y + "px");\n      },\n      _createImg: function (t, e){\n        return (e=e||document.createElement("img")).src=t, e;\n      },\n      _getIconUrl: function (t){\n        return b.retina&&this.options[t + "RetinaUrl"]||this.options[t + "Url"];\n      }\n    });\n  var _i=di.extend({\n      options: {\n        iconUrl: "marker-icon.png",\n        iconRetinaUrl: "marker-icon-2x.png",\n        shadowUrl: "marker-shadow.png",\n        iconSize: [25, 41],\n        iconAnchor: [12, 41],\n        popupAnchor: [1, -34],\n        tooltipAnchor: [16, -28],\n        shadowSize: [41, 41]\n      },\n      _getIconUrl: function (t){\n        return "string"!=typeof _i.imagePath&&(_i.imagePath=this._detectIconPath()), (this.options.imagePath||_i.imagePath) + di.prototype._getIconUrl.call(this, t);\n      },\n      _stripUrl: function (t){\n        function e(t, e, i){\n          return (e=e.exec(t))&&e[i];\n        }\n        return (t=e(t, /^url\\(([\'"])?(.+)\\1\\)$/, 2))&&e(t, /^(.*)marker-icon\\.png$/, 1);\n      },\n      _detectIconPath: function (){\n        var t=P("div", "leaflet-default-icon-path", document.body),\n          e=pe(t, "background-image")||pe(t, "backgroundImage");\n        return document.body.removeChild(t), (e=this._stripUrl(e)) ? e:(t=document.querySelector(\'link[href$="leaflet.css"]\')) ? t.href.substring(0, t.href.length - "leaflet.css".length - 1):"";\n      }\n    }),\n    pi=n.extend({\n      initialize: function (t){\n        this._marker=t;\n      },\n      addHooks: function (){\n        var t=this._marker._icon;\n        this._draggable||(this._draggable=new Xe(t, t, !0)), this._draggable.on({\n          dragstart: this._onDragStart,\n          predrag: this._onPreDrag,\n          drag: this._onDrag,\n          dragend: this._onDragEnd\n        }, this).enable(), M(t, "leaflet-marker-draggable");\n      },\n      removeHooks: function (){\n        this._draggable.off({\n          dragstart: this._onDragStart,\n          predrag: this._onPreDrag,\n          drag: this._onDrag,\n          dragend: this._onDragEnd\n        }, this).disable(), this._marker._icon&&z(this._marker._icon, "leaflet-marker-draggable");\n      },\n      moved: function (){\n        return this._draggable&&this._draggable._moved;\n      },\n      _adjustPan: function (t){\n        var e=this._marker,\n          i=e._map,\n          n=this._marker.options.autoPanSpeed,\n          o=this._marker.options.autoPanPadding,\n          s=Pe(e._icon),\n          r=i.getPixelBounds(),\n          a=i.getPixelOrigin(),\n          a=_(r.min._subtract(a).add(o), r.max._subtract(a).subtract(o));\n        a.contains(s)||(o=m((Math.max(a.max.x, s.x) - a.max.x) / (r.max.x - a.max.x) - (Math.min(a.min.x, s.x) - a.min.x) / (r.min.x - a.min.x), (Math.max(a.max.y, s.y) - a.max.y) / (r.max.y - a.max.y) - (Math.min(a.min.y, s.y) - a.min.y) / (r.min.y - a.min.y)).multiplyBy(n), i.panBy(o, {\n          animate: !1\n        }), this._draggable._newPos._add(o), this._draggable._startPos._add(o), Z(e._icon, this._draggable._newPos), this._onDrag(t), this._panRequest=x(this._adjustPan.bind(this, t)));\n      },\n      _onDragStart: function (){\n        this._oldLatLng=this._marker.getLatLng(), this._marker.closePopup&&this._marker.closePopup(), this._marker.fire("movestart").fire("dragstart");\n      },\n      _onPreDrag: function (t){\n        this._marker.options.autoPan&&(r(this._panRequest), this._panRequest=x(this._adjustPan.bind(this, t)));\n      },\n      _onDrag: function (t){\n        var e=this._marker,\n          i=e._shadow,\n          n=Pe(e._icon),\n          o=e._map.layerPointToLatLng(n);\n        i&&Z(i, n), e._latlng=o, t.latlng=o, t.oldLatLng=this._oldLatLng, e.fire("move", t).fire("drag", t);\n      },\n      _onDragEnd: function (t){\n        r(this._panRequest), delete this._oldLatLng, this._marker.fire("moveend").fire("dragend", t);\n      }\n    }),\n    mi=o.extend({\n      options: {\n        icon: new _i(),\n        interactive: !0,\n        keyboard: !0,\n        title: "",\n        alt: "Marker",\n        zIndexOffset: 0,\n        opacity: 1,\n        riseOnHover: !1,\n        riseOffset: 250,\n        pane: "markerPane",\n        shadowPane: "shadowPane",\n        bubblingMouseEvents: !1,\n        autoPanOnFocus: !0,\n        draggable: !1,\n        autoPan: !1,\n        autoPanPadding: [50, 50],\n        autoPanSpeed: 10\n      },\n      initialize: function (t, e){\n        c(this, e), this._latlng=w(t);\n      },\n      onAdd: function (t){\n        this._zoomAnimated=this._zoomAnimated&&t.options.markerZoomAnimation, this._zoomAnimated&&t.on("zoomanim", this._animateZoom, this), this._initIcon(), this.update();\n      },\n      onRemove: function (t){\n        this.dragging&&this.dragging.enabled()&&(this.options.draggable = !0, this.dragging.removeHooks()), delete this.dragging, this._zoomAnimated&&t.off("zoomanim", this._animateZoom, this), this._removeIcon(), this._removeShadow();\n      },\n      getEvents: function (){\n        return {\n          zoom: this.update,\n          viewreset: this.update\n        };\n      },\n      getLatLng: function (){\n        return this._latlng;\n      },\n      setLatLng: function (t){\n        var e=this._latlng;\n        return this._latlng=w(t), this.update(), this.fire("move", {\n          oldLatLng: e,\n          latlng: this._latlng\n        });\n      },\n      setZIndexOffset: function (t){\n        return this.options.zIndexOffset=t, this.update();\n      },\n      getIcon: function (){\n        return this.options.icon;\n      },\n      setIcon: function (t){\n        return this.options.icon=t, this._map&&(this._initIcon(), this.update()), this._popup&&this.bindPopup(this._popup, this._popup.options), this;\n      },\n      getElement: function (){\n        return this._icon;\n      },\n      update: function (){\n        var t;\n        return this._icon&&this._map&&(t=this._map.latLngToLayerPoint(this._latlng).round(), this._setPos(t)), this;\n      },\n      _initIcon: function (){\n        var t=this.options,\n          e="leaflet-zoom-" + (this._zoomAnimated ? "animated":"hide"),\n          i=t.icon.createIcon(this._icon),\n          n = !1,\n          i=(i!==this._icon&&(this._icon&&this._removeIcon(), n = !0, t.title&&(i.title=t.title), "IMG"===i.tagName&&(i.alt=t.alt||"")), M(i, e), t.keyboard&&(i.tabIndex="0", i.setAttribute("role", "button")), this._icon=i, t.riseOnHover&&this.on({\n            mouseover: this._bringToFront,\n            mouseout: this._resetZIndex\n          }), this.options.autoPanOnFocus&&S(i, "focus", this._panOnFocus, this), t.icon.createShadow(this._shadow)),\n          o = !1;\n        i!==this._shadow&&(this._removeShadow(), o = !0), i&&(M(i, e), i.alt=""), this._shadow=i, t.opacity < 1&&this._updateOpacity(), n&&this.getPane().appendChild(this._icon), this._initInteraction(), i&&o && this.getPane(t.shadowPane).appendChild(this._shadow);\n      },\n      _removeIcon: function (){\n        this.options.riseOnHover&&this.off({\n          mouseover: this._bringToFront,\n          mouseout: this._resetZIndex\n        }), this.options.autoPanOnFocus&&k(this._icon, "focus", this._panOnFocus, this), T(this._icon), this.removeInteractiveTarget(this._icon), this._icon=null;\n      },\n      _removeShadow: function (){\n        this._shadow&&T(this._shadow), this._shadow=null;\n      },\n      _setPos: function (t){\n        this._icon&&Z(this._icon, t), this._shadow&&Z(this._shadow, t), this._zIndex=t.y + this.options.zIndexOffset, this._resetZIndex();\n      },\n      _updateZIndex: function (t){\n        this._icon&&(this._icon.style.zIndex=this._zIndex + t);\n      },\n      _animateZoom: function (t){\n        t=this._map._latLngToNewLayerPoint(this._latlng, t.zoom, t.center).round();\n        this._setPos(t);\n      },\n      _initInteraction: function (){\n        var t;\n        this.options.interactive&&(M(this._icon, "leaflet-interactive"), this.addInteractiveTarget(this._icon), pi&&(t=this.options.draggable, this.dragging&&(t=this.dragging.enabled(), this.dragging.disable()), this.dragging=new pi(this), t&&this.dragging.enable()));\n      },\n      setOpacity: function (t){\n        return this.options.opacity=t, this._map&&this._updateOpacity(), this;\n      },\n      _updateOpacity: function (){\n        var t=this.options.opacity;\n        this._icon&&C(this._icon, t), this._shadow&&C(this._shadow, t);\n      },\n      _bringToFront: function (){\n        this._updateZIndex(this.options.riseOffset);\n      },\n      _resetZIndex: function (){\n        this._updateZIndex(0);\n      },\n      _panOnFocus: function (){\n        var t,\n          e,\n          i=this._map;\n        i&&(t=(e=this.options.icon.options).iconSize ? m(e.iconSize):m(0, 0), e=e.iconAnchor ? m(e.iconAnchor):m(0, 0), i.panInside(this._latlng, {\n          paddingTopLeft: e,\n          paddingBottomRight: t.subtract(e)\n        }));\n      },\n      _getPopupAnchor: function (){\n        return this.options.icon.options.popupAnchor;\n      },\n      _getTooltipAnchor: function (){\n        return this.options.icon.options.tooltipAnchor;\n      }\n    });\n  var fi=o.extend({\n      options: {\n        stroke: !0,\n        color: "#3388ff",\n        weight: 3,\n        opacity: 1,\n        lineCap: "round",\n        lineJoin: "round",\n        dashArray: null,\n        dashOffset: null,\n        fill: !1,\n        fillColor: null,\n        fillOpacity: .2,\n        fillRule: "evenodd",\n        interactive: !0,\n        bubblingMouseEvents: !0\n      },\n      beforeAdd: function (t){\n        this._renderer=t.getRenderer(this);\n      },\n      onAdd: function (){\n        this._renderer._initPath(this), this._reset(), this._renderer._addPath(this);\n      },\n      onRemove: function (){\n        this._renderer._removePath(this);\n      },\n      redraw: function (){\n        return this._map&&this._renderer._updatePath(this), this;\n      },\n      setStyle: function (t){\n        return c(this, t), this._renderer&&(this._renderer._updateStyle(this), this.options.stroke&&t && Object.prototype.hasOwnProperty.call(t, "weight")&&this._updateBounds()), this;\n      },\n      bringToFront: function (){\n        return this._renderer&&this._renderer._bringToFront(this), this;\n      },\n      bringToBack: function (){\n        return this._renderer&&this._renderer._bringToBack(this), this;\n      },\n      getElement: function (){\n        return this._path;\n      },\n      _reset: function (){\n        this._project(), this._update();\n      },\n      _clickTolerance: function (){\n        return (this.options.stroke ? this.options.weight / 2:0) + (this._renderer.options.tolerance||0);\n      }\n    }),\n    gi=fi.extend({\n      options: {\n        fill: !0,\n        radius: 10\n      },\n      initialize: function (t, e){\n        c(this, e), this._latlng=w(t), this._radius=this.options.radius;\n      },\n      setLatLng: function (t){\n        var e=this._latlng;\n        return this._latlng=w(t), this.redraw(), this.fire("move", {\n          oldLatLng: e,\n          latlng: this._latlng\n        });\n      },\n      getLatLng: function (){\n        return this._latlng;\n      },\n      setRadius: function (t){\n        return this.options.radius=this._radius=t, this.redraw();\n      },\n      getRadius: function (){\n        return this._radius;\n      },\n      setStyle: function (t){\n        var e=t&&t.radius||this._radius;\n        return fi.prototype.setStyle.call(this, t), this.setRadius(e), this;\n      },\n      _project: function (){\n        this._point=this._map.latLngToLayerPoint(this._latlng), this._updateBounds();\n      },\n      _updateBounds: function (){\n        var t=this._radius,\n          e=this._radiusY||t,\n          i=this._clickTolerance(),\n          t=[t + i, e + i];\n        this._pxBounds=new f(this._point.subtract(t), this._point.add(t));\n      },\n      _update: function (){\n        this._map&&this._updatePath();\n      },\n      _updatePath: function (){\n        this._renderer._updateCircle(this);\n      },\n      _empty: function (){\n        return this._radius&&!this._renderer._bounds.intersects(this._pxBounds);\n      },\n      _containsPoint: function (t){\n        return t.distanceTo(this._point) <=this._radius + this._clickTolerance();\n      }\n    });\n  var vi=gi.extend({\n    initialize: function (t, e, i){\n      if(c(this, e="number"==typeof e ? l({}, i, {\n        radius: e\n      }):e), this._latlng=w(t), isNaN(this.options.radius)) throw new Error("Circle radius cannot be NaN");\n      this._mRadius=this.options.radius;\n    },\n    setRadius: function (t){\n      return this._mRadius=t, this.redraw();\n    },\n    getRadius: function (){\n      return this._mRadius;\n    },\n    getBounds: function (){\n      var t=[this._radius, this._radiusY||this._radius];\n      return new s(this._map.layerPointToLatLng(this._point.subtract(t)), this._map.layerPointToLatLng(this._point.add(t)));\n    },\n    setStyle: fi.prototype.setStyle,\n    _project: function (){\n      var t,\n        e,\n        i,\n        n,\n        o,\n        s=this._latlng.lng,\n        r=this._latlng.lat,\n        a=this._map,\n        h=a.options.crs;\n      h.distance===st.distance ? (n=Math.PI / 180, o=this._mRadius / st.R / n, t=a.project([r + o, s]), e=a.project([r - o, s]), e=t.add(e).divideBy(2), i=a.unproject(e).lat, n=Math.acos((Math.cos(o * n) - Math.sin(r * n) * Math.sin(i * n)) / (Math.cos(r * n) * Math.cos(i * n))) / n, !isNaN(n)&&0!==n||(n=o / Math.cos(Math.PI / 180 * r)), this._point=e.subtract(a.getPixelOrigin()), this._radius=isNaN(n) ? 0:e.x - a.project([i, s - n]).x, this._radiusY=e.y - t.y):(o=h.unproject(h.project(this._latlng).subtract([this._mRadius, 0])), this._point=a.latLngToLayerPoint(this._latlng), this._radius=this._point.x - a.latLngToLayerPoint(o).x), this._updateBounds();\n    }\n  });\n  var yi=fi.extend({\n    options: {\n      smoothFactor: 1,\n      noClip: !1\n    },\n    initialize: function (t, e){\n      c(this, e), this._setLatLngs(t);\n    },\n    getLatLngs: function (){\n      return this._latlngs;\n    },\n    setLatLngs: function (t){\n      return this._setLatLngs(t), this.redraw();\n    },\n    isEmpty: function (){\n      return !this._latlngs.length;\n    },\n    closestLayerPoint: function (t){\n      for (var e=1 / 0, i=null, n=ri, o=0, s=this._parts.length; o < s; o++) for (var r=this._parts[o], a=1, h=r.length; a < h; a++){\n        var l,\n          u,\n          c=n(t, l=r[a - 1], u=r[a], !0);\n        c < e&&(e=c, i=n(t, l, u));\n      }\n      return i&&(i.distance=Math.sqrt(e)), i;\n    },\n    getCenter: function (){\n      if(this._map) return hi(this._defaultShape(), this._map.options.crs);\n      throw new Error("Must add layer to map before using getCenter()");\n    },\n    getBounds: function (){\n      return this._bounds;\n    },\n    addLatLng: function (t, e){\n      return e=e||this._defaultShape(), t=w(t), e.push(t), this._bounds.extend(t), this.redraw();\n    },\n    _setLatLngs: function (t){\n      this._bounds=new s(), this._latlngs=this._convertLatLngs(t);\n    },\n    _defaultShape: function (){\n      return I(this._latlngs) ? this._latlngs:this._latlngs[0];\n    },\n    _convertLatLngs: function (t){\n      for (var e=[], i=I(t), n=0, o=t.length; n < o; n++) i ? (e[n]=w(t[n]), this._bounds.extend(e[n])):e[n]=this._convertLatLngs(t[n]);\n      return e;\n    },\n    _project: function (){\n      var t=new f();\n      this._rings=[], this._projectLatlngs(this._latlngs, this._rings, t), this._bounds.isValid()&&t.isValid()&&(this._rawPxBounds=t, this._updateBounds());\n    },\n    _updateBounds: function (){\n      var t=this._clickTolerance(),\n        t=new p(t, t);\n      this._rawPxBounds&&(this._pxBounds=new f([this._rawPxBounds.min.subtract(t), this._rawPxBounds.max.add(t)]));\n    },\n    _projectLatlngs: function (t, e, i){\n      var n,\n        o,\n        s=t[0] instanceof v,\n        r=t.length;\n      if(s){\n        for (o=[], n=0; n < r; n++) o[n]=this._map.latLngToLayerPoint(t[n]), i.extend(o[n]);\n        e.push(o);\n      } else for (n=0; n < r; n++) this._projectLatlngs(t[n], e, i);\n    },\n    _clipPoints: function (){\n      var t=this._renderer._bounds;\n      if(this._parts=[], this._pxBounds&&this._pxBounds.intersects(t)) if(this.options.noClip) this._parts=this._rings;else for (var e, i, n, o, s=this._parts, r=0, a=0, h=this._rings.length; r < h; r++) for (e=0, i=(o=this._rings[r]).length; e < i - 1; e++) (n=ni(o[e], o[e + 1], t, e, !0))&&(s[a]=s[a]||[], s[a].push(n[0]), n[1]===o[e + 1]&&e!==i - 2||(s[a].push(n[1]), a++));\n    },\n    _simplifyPoints: function (){\n      for (var t=this._parts, e=this.options.smoothFactor, i=0, n=t.length; i < n; i++) t[i]=ei(t[i], e);\n    },\n    _update: function (){\n      this._map&&(this._clipPoints(), this._simplifyPoints(), this._updatePath());\n    },\n    _updatePath: function (){\n      this._renderer._updatePoly(this);\n    },\n    _containsPoint: function (t, e){\n      var i,\n        n,\n        o,\n        s,\n        r,\n        a,\n        h=this._clickTolerance();\n      if(this._pxBounds&&this._pxBounds.contains(t)) for (i=0, s=this._parts.length; i < s; i++) for (n=0, o=(r=(a=this._parts[i]).length) - 1; n < r; o=n++) if((e||0!==n)&&ii(t, a[o], a[n]) <=h) return !0;\n      return !1;\n    }\n  });\n  yi._flat=ai;\n  var xi=yi.extend({\n    options: {\n      fill: !0\n    },\n    isEmpty: function (){\n      return !this._latlngs.length||!this._latlngs[0].length;\n    },\n    getCenter: function (){\n      if(this._map) return $e(this._defaultShape(), this._map.options.crs);\n      throw new Error("Must add layer to map before using getCenter()");\n    },\n    _convertLatLngs: function (t){\n      var t=yi.prototype._convertLatLngs.call(this, t),\n        e=t.length;\n      return 2 <=e&&t[0] instanceof v&&t[0].equals(t[e - 1])&&t.pop(), t;\n    },\n    _setLatLngs: function (t){\n      yi.prototype._setLatLngs.call(this, t), I(this._latlngs)&&(this._latlngs=[this._latlngs]);\n    },\n    _defaultShape: function (){\n      return (I(this._latlngs[0]) ? this._latlngs:this._latlngs[0])[0];\n    },\n    _clipPoints: function (){\n      var t=this._renderer._bounds,\n        e=this.options.weight,\n        e=new p(e, e),\n        t=new f(t.min.subtract(e), t.max.add(e));\n      if(this._parts=[], this._pxBounds&&this._pxBounds.intersects(t)) if(this.options.noClip) this._parts=this._rings;else for (var i, n=0, o=this._rings.length; n < o; n++) (i=Je(this._rings[n], t, !0)).length&&this._parts.push(i);\n    },\n    _updatePath: function (){\n      this._renderer._updatePoly(this, !0);\n    },\n    _containsPoint: function (t){\n      var e,\n        i,\n        n,\n        o,\n        s,\n        r,\n        a,\n        h,\n        l = !1;\n      if(!this._pxBounds||!this._pxBounds.contains(t)) return !1;\n      for (o=0, a=this._parts.length; o < a; o++) for (s=0, r=(h=(e=this._parts[o]).length) - 1; s < h; r=s++) i=e[s], n=e[r], i.y > t.y!=n.y > t.y&&t.x < (n.x - i.x) * (t.y - i.y) / (n.y - i.y) + i.x&&(l = !l);\n      return l||yi.prototype._containsPoint.call(this, t, !0);\n    }\n  });\n  var wi=ci.extend({\n    initialize: function (t, e){\n      c(this, e), this._layers={}, t&&this.addData(t);\n    },\n    addData: function (t){\n      var e,\n        i,\n        n,\n        o=d(t) ? t:t.features;\n      if(o){\n        for (e=0, i=o.length; e < i; e++) ((n=o[e]).geometries||n.geometry||n.features||n.coordinates)&&this.addData(n);\n        return this;\n      }\n      var s,\n        r=this.options;\n      return (!r.filter||r.filter(t))&&(s=bi(t, r)) ? (s.feature=Zi(t), s.defaultOptions=s.options, this.resetStyle(s), r.onEachFeature&&r.onEachFeature(t, s), this.addLayer(s)):this;\n    },\n    resetStyle: function (t){\n      return void 0===t ? this.eachLayer(this.resetStyle, this):(t.options=l({}, t.defaultOptions), this._setLayerStyle(t, this.options.style), this);\n    },\n    setStyle: function (e){\n      return this.eachLayer(function (t){\n        this._setLayerStyle(t, e);\n      }, this);\n    },\n    _setLayerStyle: function (t, e){\n      t.setStyle&&("function"==typeof e&&(e=e(t.feature)), t.setStyle(e));\n    }\n  });\n  function bi(t, e){\n    var i,\n      n,\n      o,\n      s,\n      r="Feature"===t.type ? t.geometry:t,\n      a=r ? r.coordinates:null,\n      h=[],\n      l=e&&e.pointToLayer,\n      u=e&&e.coordsToLatLng||Li;\n    if(!a&&!r) return null;\n    switch (r.type){\n      case "Point":\n        return Pi(l, t, i=u(a), e);\n      case "MultiPoint":\n        for (o=0, s=a.length; o < s; o++) i=u(a[o]), h.push(Pi(l, t, i, e));\n        return new ci(h);\n      case "LineString":\n      case "MultiLineString":\n        return n=Ti(a, "LineString"===r.type ? 0:1, u), new yi(n, e);\n      case "Polygon":\n      case "MultiPolygon":\n        return n=Ti(a, "Polygon"===r.type ? 1:2, u), new xi(n, e);\n      case "GeometryCollection":\n        for (o=0, s=r.geometries.length; o < s; o++){\n          var c=bi({\n            geometry: r.geometries[o],\n            type: "Feature",\n            properties: t.properties\n          }, e);\n          c&&h.push(c);\n        }\n        return new ci(h);\n      case "FeatureCollection":\n        for (o=0, s=r.features.length; o < s; o++){\n          var d=bi(r.features[o], e);\n          d&&h.push(d);\n        }\n        return new ci(h);\n      default:\n        throw new Error("Invalid GeoJSON object.");\n    }\n  }\n  function Pi(t, e, i, n){\n    return t ? t(e, i):new mi(i, n&&n.markersInheritOptions&&n);\n  }\n  function Li(t){\n    return new v(t[1], t[0], t[2]);\n  }\n  function Ti(t, e, i){\n    for (var n, o=[], s=0, r=t.length; s < r; s++) n=e ? Ti(t[s], e - 1, i):(i||Li)(t[s]), o.push(n);\n    return o;\n  }\n  function Mi(t, e){\n    return void 0!==(t=w(t)).alt ? [i(t.lng, e), i(t.lat, e), i(t.alt, e)]:[i(t.lng, e), i(t.lat, e)];\n  }\n  function zi(t, e, i, n){\n    for (var o=[], s=0, r=t.length; s < r; s++) o.push(e ? zi(t[s], I(t[s]) ? 0:e - 1, i, n):Mi(t[s], n));\n    return !e&&i && 0 < o.length&&o.push(o[0].slice()), o;\n  }\n  function Ci(t, e){\n    return t.feature ? l({}, t.feature, {\n      geometry: e\n    }):Zi(e);\n  }\n  function Zi(t){\n    return "Feature"===t.type||"FeatureCollection"===t.type ? t:{\n      type: "Feature",\n      properties: {},\n      geometry: t\n    };\n  }\n  Tt={\n    toGeoJSON: function (t){\n      return Ci(this, {\n        type: "Point",\n        coordinates: Mi(this.getLatLng(), t)\n      });\n    }\n  };\n  function Si(t, e){\n    return new wi(t, e);\n  }\n  mi.include(Tt), vi.include(Tt), gi.include(Tt), yi.include({\n    toGeoJSON: function (t){\n      var e = !I(this._latlngs);\n      return Ci(this, {\n        type: (e ? "Multi":"") + "LineString",\n        coordinates: zi(this._latlngs, e ? 1:0, !1, t)\n      });\n    }\n  }), xi.include({\n    toGeoJSON: function (t){\n      var e = !I(this._latlngs),\n        i=e&&!I(this._latlngs[0]),\n        t=zi(this._latlngs, i ? 2:e ? 1:0, !0, t);\n      return Ci(this, {\n        type: (i ? "Multi":"") + "Polygon",\n        coordinates: t=e ? t:[t]\n      });\n    }\n  }), ui.include({\n    toMultiPoint: function (e){\n      var i=[];\n      return this.eachLayer(function (t){\n        i.push(t.toGeoJSON(e).geometry.coordinates);\n      }), Ci(this, {\n        type: "MultiPoint",\n        coordinates: i\n      });\n    },\n    toGeoJSON: function (e){\n      var i,\n        n,\n        t=this.feature&&this.feature.geometry&&this.feature.geometry.type;\n      return "MultiPoint"===t ? this.toMultiPoint(e):(i="GeometryCollection"===t, n=[], this.eachLayer(function (t){\n        t.toGeoJSON&&(t=t.toGeoJSON(e), i ? n.push(t.geometry):"FeatureCollection"===(t=Zi(t)).type ? n.push.apply(n, t.features):n.push(t));\n      }), i ? Ci(this, {\n        geometries: n,\n        type: "GeometryCollection"\n      }):{\n        type: "FeatureCollection",\n        features: n\n      });\n    }\n  });\n  var Mt=Si,\n    Ei=o.extend({\n      options: {\n        opacity: 1,\n        alt: "",\n        interactive: !1,\n        crossOrigin: !1,\n        errorOverlayUrl: "",\n        zIndex: 1,\n        className: ""\n      },\n      initialize: function (t, e, i){\n        this._url=t, this._bounds=g(e), c(this, i);\n      },\n      onAdd: function (){\n        this._image||(this._initImage(), this.options.opacity < 1&&this._updateOpacity()), this.options.interactive&&(M(this._image, "leaflet-interactive"), this.addInteractiveTarget(this._image)), this.getPane().appendChild(this._image), this._reset();\n      },\n      onRemove: function (){\n        T(this._image), this.options.interactive&&this.removeInteractiveTarget(this._image);\n      },\n      setOpacity: function (t){\n        return this.options.opacity=t, this._image&&this._updateOpacity(), this;\n      },\n      setStyle: function (t){\n        return t.opacity&&this.setOpacity(t.opacity), this;\n      },\n      bringToFront: function (){\n        return this._map&&fe(this._image), this;\n      },\n      bringToBack: function (){\n        return this._map&&ge(this._image), this;\n      },\n      setUrl: function (t){\n        return this._url=t, this._image&&(this._image.src=t), this;\n      },\n      setBounds: function (t){\n        return this._bounds=g(t), this._map&&this._reset(), this;\n      },\n      getEvents: function (){\n        var t={\n          zoom: this._reset,\n          viewreset: this._reset\n        };\n        return this._zoomAnimated&&(t.zoomanim=this._animateZoom), t;\n      },\n      setZIndex: function (t){\n        return this.options.zIndex=t, this._updateZIndex(), this;\n      },\n      getBounds: function (){\n        return this._bounds;\n      },\n      getElement: function (){\n        return this._image;\n      },\n      _initImage: function (){\n        var t="IMG"===this._url.tagName,\n          e=this._image=t ? this._url:P("img");\n        M(e, "leaflet-image-layer"), this._zoomAnimated&&M(e, "leaflet-zoom-animated"), this.options.className&&M(e, this.options.className), e.onselectstart=u, e.onmousemove=u, e.onload=a(this.fire, this, "load"), e.onerror=a(this._overlayOnError, this, "error"), !this.options.crossOrigin&&""!==this.options.crossOrigin||(e.crossOrigin = !0===this.options.crossOrigin ? "":this.options.crossOrigin), this.options.zIndex&&this._updateZIndex(), t ? this._url=e.src:(e.src=this._url, e.alt=this.options.alt);\n      },\n      _animateZoom: function (t){\n        var e=this._map.getZoomScale(t.zoom),\n          t=this._map._latLngBoundsToNewLayerBounds(this._bounds, t.zoom, t.center).min;\n        be(this._image, t, e);\n      },\n      _reset: function (){\n        var t=this._image,\n          e=new f(this._map.latLngToLayerPoint(this._bounds.getNorthWest()), this._map.latLngToLayerPoint(this._bounds.getSouthEast())),\n          i=e.getSize();\n        Z(t, e.min), t.style.width=i.x + "px", t.style.height=i.y + "px";\n      },\n      _updateOpacity: function (){\n        C(this._image, this.options.opacity);\n      },\n      _updateZIndex: function (){\n        this._image&&void 0!==this.options.zIndex&&null!==this.options.zIndex&&(this._image.style.zIndex=this.options.zIndex);\n      },\n      _overlayOnError: function (){\n        this.fire("error");\n        var t=this.options.errorOverlayUrl;\n        t&&this._url!==t&&(this._url=t, this._image.src=t);\n      },\n      getCenter: function (){\n        return this._bounds.getCenter();\n      }\n    }),\n    ki=Ei.extend({\n      options: {\n        autoplay: !0,\n        loop: !0,\n        keepAspectRatio: !0,\n        muted: !1,\n        playsInline: !0\n      },\n      _initImage: function (){\n        var t="VIDEO"===this._url.tagName,\n          e=this._image=t ? this._url:P("video");\n        if(M(e, "leaflet-image-layer"), this._zoomAnimated&&M(e, "leaflet-zoom-animated"), this.options.className&&M(e, this.options.className), e.onselectstart=u, e.onmousemove=u, e.onloadeddata=a(this.fire, this, "load"), t){\n          for (var i=e.getElementsByTagName("source"), n=[], o=0; o < i.length; o++) n.push(i[o].src);\n          this._url=0 < i.length ? n:[e.src];\n        }else{\n          d(this._url)||(this._url=[this._url]), !this.options.keepAspectRatio&&Object.prototype.hasOwnProperty.call(e.style, "objectFit")&&(e.style.objectFit="fill"), e.autoplay = !!this.options.autoplay, e.loop = !!this.options.loop, e.muted = !!this.options.muted, e.playsInline = !!this.options.playsInline;\n          for (var s=0; s < this._url.length; s++){\n            var r=P("source");\n            r.src=this._url[s], e.appendChild(r);\n          }\n        }\n      }\n    });\n  var Oi=Ei.extend({\n    _initImage: function (){\n      var t=this._image=this._url;\n      M(t, "leaflet-image-layer"), this._zoomAnimated&&M(t, "leaflet-zoom-animated"), this.options.className&&M(t, this.options.className), t.onselectstart=u, t.onmousemove=u;\n    }\n  });\n  var Ai=o.extend({\n      options: {\n        interactive: !1,\n        offset: [0, 0],\n        className: "",\n        pane: void 0,\n        content: ""\n      },\n      initialize: function (t, e){\n        t&&(t instanceof v||d(t)) ? (this._latlng=w(t), c(this, e)):(c(this, t), this._source=e), this.options.content&&(this._content=this.options.content);\n      },\n      openOn: function (t){\n        return (t=arguments.length ? t:this._source._map).hasLayer(this)||t.addLayer(this), this;\n      },\n      close: function (){\n        return this._map&&this._map.removeLayer(this), this;\n      },\n      toggle: function (t){\n        return this._map ? this.close():(arguments.length ? this._source=t:t=this._source, this._prepareOpen(), this.openOn(t._map)), this;\n      },\n      onAdd: function (t){\n        this._zoomAnimated=t._zoomAnimated, this._container||this._initLayout(), t._fadeAnimated&&C(this._container, 0), clearTimeout(this._removeTimeout), this.getPane().appendChild(this._container), this.update(), t._fadeAnimated&&C(this._container, 1), this.bringToFront(), this.options.interactive&&(M(this._container, "leaflet-interactive"), this.addInteractiveTarget(this._container));\n      },\n      onRemove: function (t){\n        t._fadeAnimated ? (C(this._container, 0), this._removeTimeout=setTimeout(a(T, void 0, this._container), 200)):T(this._container), this.options.interactive&&(z(this._container, "leaflet-interactive"), this.removeInteractiveTarget(this._container));\n      },\n      getLatLng: function (){\n        return this._latlng;\n      },\n      setLatLng: function (t){\n        return this._latlng=w(t), this._map&&(this._updatePosition(), this._adjustPan()), this;\n      },\n      getContent: function (){\n        return this._content;\n      },\n      setContent: function (t){\n        return this._content=t, this.update(), this;\n      },\n      getElement: function (){\n        return this._container;\n      },\n      update: function (){\n        this._map&&(this._container.style.visibility="hidden", this._updateContent(), this._updateLayout(), this._updatePosition(), this._container.style.visibility="", this._adjustPan());\n      },\n      getEvents: function (){\n        var t={\n          zoom: this._updatePosition,\n          viewreset: this._updatePosition\n        };\n        return this._zoomAnimated&&(t.zoomanim=this._animateZoom), t;\n      },\n      isOpen: function (){\n        return !!this._map&&this._map.hasLayer(this);\n      },\n      bringToFront: function (){\n        return this._map&&fe(this._container), this;\n      },\n      bringToBack: function (){\n        return this._map&&ge(this._container), this;\n      },\n      _prepareOpen: function (t){\n        if(!(i=this._source)._map) return !1;\n        if(i instanceof ci){\n          var e,\n            i=null,\n            n=this._source._layers;\n          for (e in n) if(n[e]._map){\n            i=n[e];\n            break;\n          }\n          if(!i) return !1;\n          this._source=i;\n        }\n        if(!t) if(i.getCenter) t=i.getCenter();else if(i.getLatLng) t=i.getLatLng();else {\n          if(!i.getBounds) throw new Error("Unable to get source layer LatLng.");\n          t=i.getBounds().getCenter();\n        }\n        return this.setLatLng(t), this._map&&this.update(), !0;\n      },\n      _updateContent: function (){\n        if(this._content){\n          var t=this._contentNode,\n            e="function"==typeof this._content ? this._content(this._source||this):this._content;\n          if("string"==typeof e) t.innerHTML=e;else {\n            for (; t.hasChildNodes();) t.removeChild(t.firstChild);\n            t.appendChild(e);\n          }\n          this.fire("contentupdate");\n        }\n      },\n      _updatePosition: function (){\n        var t, e, i;\n        this._map&&(e=this._map.latLngToLayerPoint(this._latlng), t=m(this.options.offset), i=this._getAnchor(), this._zoomAnimated ? Z(this._container, e.add(i)):t=t.add(e).add(i), e=this._containerBottom=-t.y, i=this._containerLeft=-Math.round(this._containerWidth / 2) + t.x, this._container.style.bottom=e + "px", this._container.style.left=i + "px");\n      },\n      _getAnchor: function (){\n        return [0, 0];\n      }\n    }),\n    Bi=(A.include({\n      _initOverlay: function (t, e, i, n){\n        var o=e;\n        return o instanceof t||(o=new t(n).setContent(e)), i&&o.setLatLng(i), o;\n      }\n    }), o.include({\n      _initOverlay: function (t, e, i, n){\n        var o=i;\n        return o instanceof t ? (c(o, n), o._source=this):(o=e&&!n ? e:new t(n, this)).setContent(i), o;\n      }\n    }), Ai.extend({\n      options: {\n        pane: "popupPane",\n        offset: [0, 7],\n        maxWidth: 300,\n        minWidth: 50,\n        maxHeight: null,\n        autoPan: !0,\n        autoPanPaddingTopLeft: null,\n        autoPanPaddingBottomRight: null,\n        autoPanPadding: [5, 5],\n        keepInView: !1,\n        closeButton: !0,\n        autoClose: !0,\n        closeOnEscapeKey: !0,\n        className: ""\n      },\n      openOn: function (t){\n        return !(t=arguments.length ? t:this._source._map).hasLayer(this)&&t._popup&&t._popup.options.autoClose&&t.removeLayer(t._popup), t._popup=this, Ai.prototype.openOn.call(this, t);\n      },\n      onAdd: function (t){\n        Ai.prototype.onAdd.call(this, t), t.fire("popupopen", {\n          popup: this\n        }), this._source&&(this._source.fire("popupopen", {\n          popup: this\n        }, !0), this._source instanceof fi||this._source.on("preclick", Ae));\n      },\n      onRemove: function (t){\n        Ai.prototype.onRemove.call(this, t), t.fire("popupclose", {\n          popup: this\n        }), this._source&&(this._source.fire("popupclose", {\n          popup: this\n        }, !0), this._source instanceof fi||this._source.off("preclick", Ae));\n      },\n      getEvents: function (){\n        var t=Ai.prototype.getEvents.call(this);\n        return (void 0!==this.options.closeOnClick ? this.options.closeOnClick:this._map.options.closePopupOnClick)&&(t.preclick=this.close), this.options.keepInView&&(t.moveend=this._adjustPan), t;\n      },\n      _initLayout: function (){\n        var t="leaflet-popup",\n          e=this._container=P("div", t + " " + (this.options.className||"") + " leaflet-zoom-animated"),\n          i=this._wrapper=P("div", t + "-content-wrapper", e);\n        this._contentNode=P("div", t + "-content", i), Ie(e), Be(this._contentNode), S(e, "contextmenu", Ae), this._tipContainer=P("div", t + "-tip-container", e), this._tip=P("div", t + "-tip", this._tipContainer), this.options.closeButton&&((i=this._closeButton=P("a", t + "-close-button", e)).setAttribute("role", "button"), i.setAttribute("aria-label", "Close popup"), i.href="#close", i.innerHTML=\'<span aria-hidden="true">&#215;</span>\', S(i, "click", function (t){\n          O(t), this.close();\n        }, this));\n      },\n      _updateLayout: function (){\n        var t=this._contentNode,\n          e=t.style,\n          i=(e.width="", e.whiteSpace="nowrap", t.offsetWidth),\n          i=Math.min(i, this.options.maxWidth),\n          i=(i=Math.max(i, this.options.minWidth), e.width=i + 1 + "px", e.whiteSpace="", e.height="", t.offsetHeight),\n          n=this.options.maxHeight,\n          o="leaflet-popup-scrolled";\n        (n&&n < i ? (e.height=n + "px", M):z)(t, o), this._containerWidth=this._container.offsetWidth;\n      },\n      _animateZoom: function (t){\n        var t=this._map._latLngToNewLayerPoint(this._latlng, t.zoom, t.center),\n          e=this._getAnchor();\n        Z(this._container, t.add(e));\n      },\n      _adjustPan: function (){\n        var t, e, i, n, o, s, r, a;\n        this.options.autoPan&&(this._map._panAnim&&this._map._panAnim.stop(), this._autopanning ? this._autopanning = !1:(t=this._map, e=parseInt(pe(this._container, "marginBottom"), 10)||0, e=this._container.offsetHeight + e, a=this._containerWidth, (i=new p(this._containerLeft, -e - this._containerBottom))._add(Pe(this._container)), i=t.layerPointToContainerPoint(i), o=m(this.options.autoPanPadding), n=m(this.options.autoPanPaddingTopLeft||o), o=m(this.options.autoPanPaddingBottomRight||o), s=t.getSize(), r=0, i.x + a + o.x > s.x&&(r=i.x + a - s.x + o.x), i.x - r - n.x < (a=0)&&(r=i.x - n.x), i.y + e + o.y > s.y&&(a=i.y + e - s.y + o.y), i.y - a - n.y < 0&&(a=i.y - n.y), (r||a)&&(this.options.keepInView&&(this._autopanning = !0), t.fire("autopanstart").panBy([r, a]))));\n      },\n      _getAnchor: function (){\n        return m(this._source&&this._source._getPopupAnchor ? this._source._getPopupAnchor():[0, 0]);\n      }\n    })),\n    Ii=(A.mergeOptions({\n      closePopupOnClick: !0\n    }), A.include({\n      openPopup: function (t, e, i){\n        return this._initOverlay(Bi, t, e, i).openOn(this), this;\n      },\n      closePopup: function (t){\n        return (t=arguments.length ? t:this._popup)&&t.close(), this;\n      }\n    }), o.include({\n      bindPopup: function (t, e){\n        return this._popup=this._initOverlay(Bi, this._popup, t, e), this._popupHandlersAdded||(this.on({\n          click: this._openPopup,\n          keypress: this._onKeyPress,\n          remove: this.closePopup,\n          move: this._movePopup\n        }), this._popupHandlersAdded = !0), this;\n      },\n      unbindPopup: function (){\n        return this._popup&&(this.off({\n          click: this._openPopup,\n          keypress: this._onKeyPress,\n          remove: this.closePopup,\n          move: this._movePopup\n        }), this._popupHandlersAdded = !1, this._popup=null), this;\n      },\n      openPopup: function (t){\n        return this._popup&&(this instanceof ci||(this._popup._source=this), this._popup._prepareOpen(t||this._latlng)&&this._popup.openOn(this._map)), this;\n      },\n      closePopup: function (){\n        return this._popup&&this._popup.close(), this;\n      },\n      togglePopup: function (){\n        return this._popup&&this._popup.toggle(this), this;\n      },\n      isPopupOpen: function (){\n        return !!this._popup&&this._popup.isOpen();\n      },\n      setPopupContent: function (t){\n        return this._popup&&this._popup.setContent(t), this;\n      },\n      getPopup: function (){\n        return this._popup;\n      },\n      _openPopup: function (t){\n        var e;\n        this._popup&&this._map&&(Re(t), e=t.layer||t.target, this._popup._source!==e||e instanceof fi ? (this._popup._source=e, this.openPopup(t.latlng)):this._map.hasLayer(this._popup) ? this.closePopup():this.openPopup(t.latlng));\n      },\n      _movePopup: function (t){\n        this._popup.setLatLng(t.latlng);\n      },\n      _onKeyPress: function (t){\n        13===t.originalEvent.keyCode&&this._openPopup(t);\n      }\n    }), Ai.extend({\n      options: {\n        pane: "tooltipPane",\n        offset: [0, 0],\n        direction: "auto",\n        permanent: !1,\n        sticky: !1,\n        opacity: .9\n      },\n      onAdd: function (t){\n        Ai.prototype.onAdd.call(this, t), this.setOpacity(this.options.opacity), t.fire("tooltipopen", {\n          tooltip: this\n        }), this._source&&(this.addEventParent(this._source), this._source.fire("tooltipopen", {\n          tooltip: this\n        }, !0));\n      },\n      onRemove: function (t){\n        Ai.prototype.onRemove.call(this, t), t.fire("tooltipclose", {\n          tooltip: this\n        }), this._source&&(this.removeEventParent(this._source), this._source.fire("tooltipclose", {\n          tooltip: this\n        }, !0));\n      },\n      getEvents: function (){\n        var t=Ai.prototype.getEvents.call(this);\n        return this.options.permanent||(t.preclick=this.close), t;\n      },\n      _initLayout: function (){\n        var t="leaflet-tooltip " + (this.options.className||"") + " leaflet-zoom-" + (this._zoomAnimated ? "animated":"hide");\n        this._contentNode=this._container=P("div", t), this._container.setAttribute("role", "tooltip"), this._container.setAttribute("id", "leaflet-tooltip-" + h(this));\n      },\n      _updateLayout: function (){},\n      _adjustPan: function (){},\n      _setPosition: function (t){\n        var e,\n          i=this._map,\n          n=this._container,\n          o=i.latLngToContainerPoint(i.getCenter()),\n          i=i.layerPointToContainerPoint(t),\n          s=this.options.direction,\n          r=n.offsetWidth,\n          a=n.offsetHeight,\n          h=m(this.options.offset),\n          l=this._getAnchor(),\n          i="top"===s ? (e=r / 2, a):"bottom"===s ? (e=r / 2, 0):(e="center"===s ? r / 2:"right"===s ? 0:"left"===s ? r:i.x < o.x ? (s="right", 0):(s="left", r + 2 * (h.x + l.x)), a / 2);\n        t=t.subtract(m(e, i, !0)).add(h).add(l), z(n, "leaflet-tooltip-right"), z(n, "leaflet-tooltip-left"), z(n, "leaflet-tooltip-top"), z(n, "leaflet-tooltip-bottom"), M(n, "leaflet-tooltip-" + s), Z(n, t);\n      },\n      _updatePosition: function (){\n        var t=this._map.latLngToLayerPoint(this._latlng);\n        this._setPosition(t);\n      },\n      setOpacity: function (t){\n        this.options.opacity=t, this._container&&C(this._container, t);\n      },\n      _animateZoom: function (t){\n        t=this._map._latLngToNewLayerPoint(this._latlng, t.zoom, t.center);\n        this._setPosition(t);\n      },\n      _getAnchor: function (){\n        return m(this._source&&this._source._getTooltipAnchor&&!this.options.sticky ? this._source._getTooltipAnchor():[0, 0]);\n      }\n    })),\n    Ri=(A.include({\n      openTooltip: function (t, e, i){\n        return this._initOverlay(Ii, t, e, i).openOn(this), this;\n      },\n      closeTooltip: function (t){\n        return t.close(), this;\n      }\n    }), o.include({\n      bindTooltip: function (t, e){\n        return this._tooltip&&this.isTooltipOpen()&&this.unbindTooltip(), this._tooltip=this._initOverlay(Ii, this._tooltip, t, e), this._initTooltipInteractions(), this._tooltip.options.permanent&&this._map&&this._map.hasLayer(this)&&this.openTooltip(), this;\n      },\n      unbindTooltip: function (){\n        return this._tooltip&&(this._initTooltipInteractions(!0), this.closeTooltip(), this._tooltip=null), this;\n      },\n      _initTooltipInteractions: function (t){\n        var e, i;\n        !t&&this._tooltipHandlersAdded||(e=t ? "off":"on", i={\n          remove: this.closeTooltip,\n          move: this._moveTooltip\n        }, this._tooltip.options.permanent ? i.add=this._openTooltip:(i.mouseover=this._openTooltip, i.mouseout=this.closeTooltip, i.click=this._openTooltip, this._map ? this._addFocusListeners():i.add=this._addFocusListeners), this._tooltip.options.sticky&&(i.mousemove=this._moveTooltip), this[e](i), this._tooltipHandlersAdded = !t);\n      },\n      openTooltip: function (t){\n        return this._tooltip&&(this instanceof ci||(this._tooltip._source=this), this._tooltip._prepareOpen(t)&&(this._tooltip.openOn(this._map), this.getElement ? this._setAriaDescribedByOnLayer(this):this.eachLayer&&this.eachLayer(this._setAriaDescribedByOnLayer, this))), this;\n      },\n      closeTooltip: function (){\n        if(this._tooltip) return this._tooltip.close();\n      },\n      toggleTooltip: function (){\n        return this._tooltip&&this._tooltip.toggle(this), this;\n      },\n      isTooltipOpen: function (){\n        return this._tooltip.isOpen();\n      },\n      setTooltipContent: function (t){\n        return this._tooltip&&this._tooltip.setContent(t), this;\n      },\n      getTooltip: function (){\n        return this._tooltip;\n      },\n      _addFocusListeners: function (){\n        this.getElement ? this._addFocusListenersOnLayer(this):this.eachLayer&&this.eachLayer(this._addFocusListenersOnLayer, this);\n      },\n      _addFocusListenersOnLayer: function (t){\n        var e="function"==typeof t.getElement&&t.getElement();\n        e&&(S(e, "focus", function (){\n          this._tooltip._source=t, this.openTooltip();\n        }, this), S(e, "blur", this.closeTooltip, this));\n      },\n      _setAriaDescribedByOnLayer: function (t){\n        t="function"==typeof t.getElement&&t.getElement();\n        t&&t.setAttribute("aria-describedby", this._tooltip._container.id);\n      },\n      _openTooltip: function (t){\n        var e;\n        this._tooltip&&this._map&&(this._map.dragging&&this._map.dragging.moving()&&!this._openOnceFlag ? (this._openOnceFlag = !0, (e=this)._map.once("moveend", function (){\n          e._openOnceFlag = !1, e._openTooltip(t);\n        })):(this._tooltip._source=t.layer||t.target, this.openTooltip(this._tooltip.options.sticky ? t.latlng:void 0)));\n      },\n      _moveTooltip: function (t){\n        var e=t.latlng;\n        this._tooltip.options.sticky&&t.originalEvent&&(t=this._map.mouseEventToContainerPoint(t.originalEvent), t=this._map.containerPointToLayerPoint(t), e=this._map.layerPointToLatLng(t)), this._tooltip.setLatLng(e);\n      }\n    }), di.extend({\n      options: {\n        iconSize: [12, 12],\n        html: !1,\n        bgPos: null,\n        className: "leaflet-div-icon"\n      },\n      createIcon: function (t){\n        var t=t&&"DIV"===t.tagName ? t:document.createElement("div"),\n          e=this.options;\n        return e.html instanceof Element ? (me(t), t.appendChild(e.html)):t.innerHTML = !1!==e.html ? e.html:"", e.bgPos&&(e=m(e.bgPos), t.style.backgroundPosition=-e.x + "px " + -e.y + "px"), this._setIconStyles(t, "icon"), t;\n      },\n      createShadow: function (){\n        return null;\n      }\n    }));\n  di.Default=_i;\n  var Ni=o.extend({\n    options: {\n      tileSize: 256,\n      opacity: 1,\n      updateWhenIdle: b.mobile,\n      updateWhenZooming: !0,\n      updateInterval: 200,\n      zIndex: 1,\n      bounds: null,\n      minZoom: 0,\n      maxZoom: void 0,\n      maxNativeZoom: void 0,\n      minNativeZoom: void 0,\n      noWrap: !1,\n      pane: "tilePane",\n      className: "",\n      keepBuffer: 2\n    },\n    initialize: function (t){\n      c(this, t);\n    },\n    onAdd: function (){\n      this._initContainer(), this._levels={}, this._tiles={}, this._resetView();\n    },\n    beforeAdd: function (t){\n      t._addZoomLimit(this);\n    },\n    onRemove: function (t){\n      this._removeAllTiles(), T(this._container), t._removeZoomLimit(this), this._container=null, this._tileZoom=void 0;\n    },\n    bringToFront: function (){\n      return this._map&&(fe(this._container), this._setAutoZIndex(Math.max)), this;\n    },\n    bringToBack: function (){\n      return this._map&&(ge(this._container), this._setAutoZIndex(Math.min)), this;\n    },\n    getContainer: function (){\n      return this._container;\n    },\n    setOpacity: function (t){\n      return this.options.opacity=t, this._updateOpacity(), this;\n    },\n    setZIndex: function (t){\n      return this.options.zIndex=t, this._updateZIndex(), this;\n    },\n    isLoading: function (){\n      return this._loading;\n    },\n    redraw: function (){\n      var t;\n      return this._map&&(this._removeAllTiles(), (t=this._clampZoom(this._map.getZoom()))!==this._tileZoom&&(this._tileZoom=t, this._updateLevels()), this._update()), this;\n    },\n    getEvents: function (){\n      var t={\n        viewprereset: this._invalidateAll,\n        viewreset: this._resetView,\n        zoom: this._resetView,\n        moveend: this._onMoveEnd\n      };\n      return this.options.updateWhenIdle||(this._onMove||(this._onMove=j(this._onMoveEnd, this.options.updateInterval, this)), t.move=this._onMove), this._zoomAnimated&&(t.zoomanim=this._animateZoom), t;\n    },\n    createTile: function (){\n      return document.createElement("div");\n    },\n    getTileSize: function (){\n      var t=this.options.tileSize;\n      return t instanceof p ? t:new p(t, t);\n    },\n    _updateZIndex: function (){\n      this._container&&void 0!==this.options.zIndex&&null!==this.options.zIndex&&(this._container.style.zIndex=this.options.zIndex);\n    },\n    _setAutoZIndex: function (t){\n      for (var e, i=this.getPane().children, n=-t(-1 / 0, 1 / 0), o=0, s=i.length; o < s; o++) e=i[o].style.zIndex, i[o]!==this._container&&e && (n=t(n, +e));\n      isFinite(n)&&(this.options.zIndex=n + t(-1, 1), this._updateZIndex());\n    },\n    _updateOpacity: function (){\n      if(this._map&&!b.ielt9){\n        C(this._container, this.options.opacity);\n        var t,\n          e=+new Date(),\n          i = !1,\n          n = !1;\n        for (t in this._tiles){\n          var o,\n            s=this._tiles[t];\n          s.current&&s.loaded&&(o=Math.min(1, (e - s.loaded) / 200), C(s.el, o), o < 1 ? i = !0:(s.active ? n = !0:this._onOpaqueTile(s), s.active = !0));\n        }\n        n&&!this._noPrune&&this._pruneTiles(), i&&(r(this._fadeFrame), this._fadeFrame=x(this._updateOpacity, this));\n      }\n    },\n    _onOpaqueTile: u,\n    _initContainer: function (){\n      this._container||(this._container=P("div", "leaflet-layer " + (this.options.className||"")), this._updateZIndex(), this.options.opacity < 1&&this._updateOpacity(), this.getPane().appendChild(this._container));\n    },\n    _updateLevels: function (){\n      var t=this._tileZoom,\n        e=this.options.maxZoom;\n      if(void 0!==t){\n        for (var i in this._levels) i=Number(i), this._levels[i].el.children.length||i===t ? (this._levels[i].el.style.zIndex=e - Math.abs(t - i), this._onUpdateLevel(i)):(T(this._levels[i].el), this._removeTilesAtZoom(i), this._onRemoveLevel(i), delete this._levels[i]);\n        var n=this._levels[t],\n          o=this._map;\n        return n||((n=this._levels[t]={}).el=P("div", "leaflet-tile-container leaflet-zoom-animated", this._container), n.el.style.zIndex=e, n.origin=o.project(o.unproject(o.getPixelOrigin()), t).round(), n.zoom=t, this._setZoomTransform(n, o.getCenter(), o.getZoom()), u(n.el.offsetWidth), this._onCreateLevel(n)), this._level=n;\n      }\n    },\n    _onUpdateLevel: u,\n    _onRemoveLevel: u,\n    _onCreateLevel: u,\n    _pruneTiles: function (){\n      if(this._map){\n        var t,\n          e,\n          i,\n          n=this._map.getZoom();\n        if(n > this.options.maxZoom||n < this.options.minZoom) this._removeAllTiles();else {\n          for (t in this._tiles) (i=this._tiles[t]).retain=i.current;\n          for (t in this._tiles) (i=this._tiles[t]).current&&!i.active&&(e=i.coords, this._retainParent(e.x, e.y, e.z, e.z - 5)||this._retainChildren(e.x, e.y, e.z, e.z + 2));\n          for (t in this._tiles) this._tiles[t].retain||this._removeTile(t);\n        }\n      }\n    },\n    _removeTilesAtZoom: function (t){\n      for (var e in this._tiles) this._tiles[e].coords.z===t&&this._removeTile(e);\n    },\n    _removeAllTiles: function (){\n      for (var t in this._tiles) this._removeTile(t);\n    },\n    _invalidateAll: function (){\n      for (var t in this._levels) T(this._levels[t].el), this._onRemoveLevel(Number(t)), delete this._levels[t];\n      this._removeAllTiles(), this._tileZoom=void 0;\n    },\n    _retainParent: function (t, e, i, n){\n      var t=Math.floor(t / 2),\n        e=Math.floor(e / 2),\n        i=i - 1,\n        o=new p(+t, +e),\n        o=(o.z=i, this._tileCoordsToKey(o)),\n        o=this._tiles[o];\n      return o&&o.active ? o.retain = !0:(o&&o.loaded&&(o.retain = !0), n < i&&this._retainParent(t, e, i, n));\n    },\n    _retainChildren: function (t, e, i, n){\n      for (var o=2 * t; o < 2 * t + 2; o++) for (var s=2 * e; s < 2 * e + 2; s++){\n        var r=new p(o, s),\n          r=(r.z=i + 1, this._tileCoordsToKey(r)),\n          r=this._tiles[r];\n        r&&r.active ? r.retain = !0:(r&&r.loaded&&(r.retain = !0), i + 1 < n&&this._retainChildren(o, s, i + 1, n));\n      }\n    },\n    _resetView: function (t){\n      t=t&&(t.pinch||t.flyTo);\n      this._setView(this._map.getCenter(), this._map.getZoom(), t, t);\n    },\n    _animateZoom: function (t){\n      this._setView(t.center, t.zoom, !0, t.noUpdate);\n    },\n    _clampZoom: function (t){\n      var e=this.options;\n      return void 0!==e.minNativeZoom&&t < e.minNativeZoom ? e.minNativeZoom:void 0!==e.maxNativeZoom&&e.maxNativeZoom < t ? e.maxNativeZoom:t;\n    },\n    _setView: function (t, e, i, n){\n      var o=Math.round(e),\n        o=void 0!==this.options.maxZoom&&o > this.options.maxZoom||void 0!==this.options.minZoom&&o < this.options.minZoom ? void 0:this._clampZoom(o),\n        s=this.options.updateWhenZooming&&o!==this._tileZoom;\n      n&&!s||(this._tileZoom=o, this._abortLoading&&this._abortLoading(), this._updateLevels(), this._resetGrid(), void 0!==o&&this._update(t), i||this._pruneTiles(), this._noPrune = !!i), this._setZoomTransforms(t, e);\n    },\n    _setZoomTransforms: function (t, e){\n      for (var i in this._levels) this._setZoomTransform(this._levels[i], t, e);\n    },\n    _setZoomTransform: function (t, e, i){\n      var n=this._map.getZoomScale(i, t.zoom),\n        e=t.origin.multiplyBy(n).subtract(this._map._getNewPixelOrigin(e, i)).round();\n      b.any3d ? be(t.el, e, n):Z(t.el, e);\n    },\n    _resetGrid: function (){\n      var t=this._map,\n        e=t.options.crs,\n        i=this._tileSize=this.getTileSize(),\n        n=this._tileZoom,\n        o=this._map.getPixelWorldBounds(this._tileZoom);\n      o&&(this._globalTileRange=this._pxBoundsToTileRange(o)), this._wrapX=e.wrapLng&&!this.options.noWrap&&[Math.floor(t.project([0, e.wrapLng[0]], n).x / i.x), Math.ceil(t.project([0, e.wrapLng[1]], n).x / i.y)], this._wrapY=e.wrapLat&&!this.options.noWrap&&[Math.floor(t.project([e.wrapLat[0], 0], n).y / i.x), Math.ceil(t.project([e.wrapLat[1], 0], n).y / i.y)];\n    },\n    _onMoveEnd: function (){\n      this._map&&!this._map._animatingZoom&&this._update();\n    },\n    _getTiledPixelBounds: function (t){\n      var e=this._map,\n        i=e._animatingZoom ? Math.max(e._animateToZoom, e.getZoom()):e.getZoom(),\n        i=e.getZoomScale(i, this._tileZoom),\n        t=e.project(t, this._tileZoom).floor(),\n        e=e.getSize().divideBy(2 * i);\n      return new f(t.subtract(e), t.add(e));\n    },\n    _update: function (t){\n      var e=this._map;\n      if(e){\n        var i=this._clampZoom(e.getZoom());\n        if(void 0===t&&(t=e.getCenter()), void 0!==this._tileZoom){\n          var n,\n            e=this._getTiledPixelBounds(t),\n            o=this._pxBoundsToTileRange(e),\n            s=o.getCenter(),\n            r=[],\n            e=this.options.keepBuffer,\n            a=new f(o.getBottomLeft().subtract([e, -e]), o.getTopRight().add([e, -e]));\n          if(!(isFinite(o.min.x)&&isFinite(o.min.y)&&isFinite(o.max.x)&&isFinite(o.max.y))) throw new Error("Attempted to load an infinite number of tiles");\n          for (n in this._tiles){\n            var h=this._tiles[n].coords;\n            h.z===this._tileZoom&&a.contains(new p(h.x, h.y))||(this._tiles[n].current = !1);\n          }\n          if(1 < Math.abs(i - this._tileZoom)) this._setView(t, i);else {\n            for (var l=o.min.y; l <=o.max.y; l++) for (var u=o.min.x; u <=o.max.x; u++){\n              var c,\n                d=new p(u, l);\n              d.z=this._tileZoom, this._isValidTile(d)&&((c=this._tiles[this._tileCoordsToKey(d)]) ? c.current = !0:r.push(d));\n            }\n            if(r.sort(function (t, e){\n              return t.distanceTo(s) - e.distanceTo(s);\n            }), 0!==r.length){\n              this._loading||(this._loading = !0, this.fire("loading"));\n              for (var _=document.createDocumentFragment(), u=0; u < r.length; u++) this._addTile(r[u], _);\n              this._level.el.appendChild(_);\n            }\n          }\n        }\n      }\n    },\n    _isValidTile: function (t){\n      var e=this._map.options.crs;\n      if(!e.infinite){\n        var i=this._globalTileRange;\n        if(!e.wrapLng&&(t.x < i.min.x||t.x > i.max.x)||!e.wrapLat&&(t.y < i.min.y||t.y > i.max.y)) return !1;\n      }\n      return !this.options.bounds||(e=this._tileCoordsToBounds(t), g(this.options.bounds).overlaps(e));\n    },\n    _keyToBounds: function (t){\n      return this._tileCoordsToBounds(this._keyToTileCoords(t));\n    },\n    _tileCoordsToNwSe: function (t){\n      var e=this._map,\n        i=this.getTileSize(),\n        n=t.scaleBy(i),\n        i=n.add(i);\n      return [e.unproject(n, t.z), e.unproject(i, t.z)];\n    },\n    _tileCoordsToBounds: function (t){\n      t=this._tileCoordsToNwSe(t), t=new s(t[0], t[1]);\n      return t=this.options.noWrap ? t:this._map.wrapLatLngBounds(t);\n    },\n    _tileCoordsToKey: function (t){\n      return t.x + ":" + t.y + ":" + t.z;\n    },\n    _keyToTileCoords: function (t){\n      var t=t.split(":"),\n        e=new p(+t[0], +t[1]);\n      return e.z=+t[2], e;\n    },\n    _removeTile: function (t){\n      var e=this._tiles[t];\n      e&&(T(e.el), delete this._tiles[t], this.fire("tileunload", {\n        tile: e.el,\n        coords: this._keyToTileCoords(t)\n      }));\n    },\n    _initTile: function (t){\n      M(t, "leaflet-tile");\n      var e=this.getTileSize();\n      t.style.width=e.x + "px", t.style.height=e.y + "px", t.onselectstart=u, t.onmousemove=u, b.ielt9&&this.options.opacity < 1&&C(t, this.options.opacity);\n    },\n    _addTile: function (t, e){\n      var i=this._getTilePos(t),\n        n=this._tileCoordsToKey(t),\n        o=this.createTile(this._wrapCoords(t), a(this._tileReady, this, t));\n      this._initTile(o), this.createTile.length < 2&&x(a(this._tileReady, this, t, null, o)), Z(o, i), this._tiles[n]={\n        el: o,\n        coords: t,\n        current: !0\n      }, e.appendChild(o), this.fire("tileloadstart", {\n        tile: o,\n        coords: t\n      });\n    },\n    _tileReady: function (t, e, i){\n      e&&this.fire("tileerror", {\n        error: e,\n        tile: i,\n        coords: t\n      });\n      var n=this._tileCoordsToKey(t);\n      (i=this._tiles[n])&&(i.loaded=+new Date(), this._map._fadeAnimated ? (C(i.el, 0), r(this._fadeFrame), this._fadeFrame=x(this._updateOpacity, this)):(i.active = !0, this._pruneTiles()), e||(M(i.el, "leaflet-tile-loaded"), this.fire("tileload", {\n        tile: i.el,\n        coords: t\n      })), this._noTilesToLoad()&&(this._loading = !1, this.fire("load"), b.ielt9||!this._map._fadeAnimated ? x(this._pruneTiles, this):setTimeout(a(this._pruneTiles, this), 250)));\n    },\n    _getTilePos: function (t){\n      return t.scaleBy(this.getTileSize()).subtract(this._level.origin);\n    },\n    _wrapCoords: function (t){\n      var e=new p(this._wrapX ? H(t.x, this._wrapX):t.x, this._wrapY ? H(t.y, this._wrapY):t.y);\n      return e.z=t.z, e;\n    },\n    _pxBoundsToTileRange: function (t){\n      var e=this.getTileSize();\n      return new f(t.min.unscaleBy(e).floor(), t.max.unscaleBy(e).ceil().subtract([1, 1]));\n    },\n    _noTilesToLoad: function (){\n      for (var t in this._tiles) if(!this._tiles[t].loaded) return !1;\n      return !0;\n    }\n  });\n  var Di=Ni.extend({\n    options: {\n      minZoom: 0,\n      maxZoom: 18,\n      subdomains: "abc",\n      errorTileUrl: "",\n      zoomOffset: 0,\n      tms: !1,\n      zoomReverse: !1,\n      detectRetina: !1,\n      crossOrigin: !1,\n      referrerPolicy: !1\n    },\n    initialize: function (t, e){\n      this._url=t, (e=c(this, e)).detectRetina&&b.retina&&0 < e.maxZoom ? (e.tileSize=Math.floor(e.tileSize / 2), e.zoomReverse ? (e.zoomOffset--, e.minZoom=Math.min(e.maxZoom, e.minZoom + 1)):(e.zoomOffset++, e.maxZoom=Math.max(e.minZoom, e.maxZoom - 1)), e.minZoom=Math.max(0, e.minZoom)):e.zoomReverse ? e.minZoom=Math.min(e.maxZoom, e.minZoom):e.maxZoom=Math.max(e.minZoom, e.maxZoom), "string"==typeof e.subdomains&&(e.subdomains=e.subdomains.split("")), this.on("tileunload", this._onTileRemove);\n    },\n    setUrl: function (t, e){\n      return this._url===t&&void 0===e&&(e = !0), this._url=t, e||this.redraw(), this;\n    },\n    createTile: function (t, e){\n      var i=document.createElement("img");\n      return S(i, "load", a(this._tileOnLoad, this, e, i)), S(i, "error", a(this._tileOnError, this, e, i)), !this.options.crossOrigin&&""!==this.options.crossOrigin||(i.crossOrigin = !0===this.options.crossOrigin ? "":this.options.crossOrigin), "string"==typeof this.options.referrerPolicy&&(i.referrerPolicy=this.options.referrerPolicy), i.alt="", i.src=this.getTileUrl(t), i;\n    },\n    getTileUrl: function (t){\n      var e={\n        r: b.retina ? "@2x":"",\n        s: this._getSubdomain(t),\n        x: t.x,\n        y: t.y,\n        z: this._getZoomForUrl()\n      };\n      return this._map&&!this._map.options.crs.infinite&&(t=this._globalTileRange.max.y - t.y, this.options.tms&&(e.y=t), e["-y"]=t), q(this._url, l(e, this.options));\n    },\n    _tileOnLoad: function (t, e){\n      b.ielt9 ? setTimeout(a(t, this, null, e), 0):t(null, e);\n    },\n    _tileOnError: function (t, e, i){\n      var n=this.options.errorTileUrl;\n      n&&e.getAttribute("src")!==n&&(e.src=n), t(i, e);\n    },\n    _onTileRemove: function (t){\n      t.tile.onload=null;\n    },\n    _getZoomForUrl: function (){\n      var t=this._tileZoom,\n        e=this.options.maxZoom;\n      return (t=this.options.zoomReverse ? e - t:t) + this.options.zoomOffset;\n    },\n    _getSubdomain: function (t){\n      t=Math.abs(t.x + t.y) % this.options.subdomains.length;\n      return this.options.subdomains[t];\n    },\n    _abortLoading: function (){\n      var t, e, i;\n      for (t in this._tiles) this._tiles[t].coords.z!==this._tileZoom&&((i=this._tiles[t].el).onload=u, i.onerror=u, i.complete||(i.src=K, e=this._tiles[t].coords, T(i), delete this._tiles[t], this.fire("tileabort", {\n        tile: i,\n        coords: e\n      })));\n    },\n    _removeTile: function (t){\n      var e=this._tiles[t];\n      if(e) return e.el.setAttribute("src", K), Ni.prototype._removeTile.call(this, t);\n    },\n    _tileReady: function (t, e, i){\n      if(this._map&&(!i||i.getAttribute("src")!==K)) return Ni.prototype._tileReady.call(this, t, e, i);\n    }\n  });\n  function ji(t, e){\n    return new Di(t, e);\n  }\n  var Hi=Di.extend({\n    defaultWmsParams: {\n      service: "WMS",\n      request: "GetMap",\n      layers: "",\n      styles: "",\n      format: "image/jpeg",\n      transparent: !1,\n      version: "1.1.1"\n    },\n    options: {\n      crs: null,\n      uppercase: !1\n    },\n    initialize: function (t, e){\n      this._url=t;\n      var i,\n        n=l({}, this.defaultWmsParams);\n      for (i in e) i in this.options||(n[i]=e[i]);\n      var t=(e=c(this, e)).detectRetina&&b.retina ? 2:1,\n        o=this.getTileSize();\n      n.width=o.x * t, n.height=o.y * t, this.wmsParams=n;\n    },\n    onAdd: function (t){\n      this._crs=this.options.crs||t.options.crs, this._wmsVersion=parseFloat(this.wmsParams.version);\n      var e=1.3 <=this._wmsVersion ? "crs":"srs";\n      this.wmsParams[e]=this._crs.code, Di.prototype.onAdd.call(this, t);\n    },\n    getTileUrl: function (t){\n      var e=this._tileCoordsToNwSe(t),\n        i=this._crs,\n        i=_(i.project(e[0]), i.project(e[1])),\n        e=i.min,\n        i=i.max,\n        e=(1.3 <=this._wmsVersion&&this._crs===li ? [e.y, e.x, i.y, i.x]:[e.x, e.y, i.x, i.y]).join(","),\n        i=Di.prototype.getTileUrl.call(this, t);\n      return i + U(this.wmsParams, i, this.options.uppercase) + (this.options.uppercase ? "&BBOX=":"&bbox=") + e;\n    },\n    setParams: function (t, e){\n      return l(this.wmsParams, t), e||this.redraw(), this;\n    }\n  });\n  Di.WMS=Hi, ji.wms=function (t, e){\n    return new Hi(t, e);\n  };\n  var Wi=o.extend({\n      options: {\n        padding: .1\n      },\n      initialize: function (t){\n        c(this, t), h(this), this._layers=this._layers||{};\n      },\n      onAdd: function (){\n        this._container||(this._initContainer(), M(this._container, "leaflet-zoom-animated")), this.getPane().appendChild(this._container), this._update(), this.on("update", this._updatePaths, this);\n      },\n      onRemove: function (){\n        this.off("update", this._updatePaths, this), this._destroyContainer();\n      },\n      getEvents: function (){\n        var t={\n          viewreset: this._reset,\n          zoom: this._onZoom,\n          moveend: this._update,\n          zoomend: this._onZoomEnd\n        };\n        return this._zoomAnimated&&(t.zoomanim=this._onAnimZoom), t;\n      },\n      _onAnimZoom: function (t){\n        this._updateTransform(t.center, t.zoom);\n      },\n      _onZoom: function (){\n        this._updateTransform(this._map.getCenter(), this._map.getZoom());\n      },\n      _updateTransform: function (t, e){\n        var i=this._map.getZoomScale(e, this._zoom),\n          n=this._map.getSize().multiplyBy(.5 + this.options.padding),\n          o=this._map.project(this._center, e),\n          n=n.multiplyBy(-i).add(o).subtract(this._map._getNewPixelOrigin(t, e));\n        b.any3d ? be(this._container, n, i):Z(this._container, n);\n      },\n      _reset: function (){\n        for (var t in this._update(), this._updateTransform(this._center, this._zoom), this._layers) this._layers[t]._reset();\n      },\n      _onZoomEnd: function (){\n        for (var t in this._layers) this._layers[t]._project();\n      },\n      _updatePaths: function (){\n        for (var t in this._layers) this._layers[t]._update();\n      },\n      _update: function (){\n        var t=this.options.padding,\n          e=this._map.getSize(),\n          i=this._map.containerPointToLayerPoint(e.multiplyBy(-t)).round();\n        this._bounds=new f(i, i.add(e.multiplyBy(1 + 2 * t)).round()), this._center=this._map.getCenter(), this._zoom=this._map.getZoom();\n      }\n    }),\n    Fi=Wi.extend({\n      options: {\n        tolerance: 0\n      },\n      getEvents: function (){\n        var t=Wi.prototype.getEvents.call(this);\n        return t.viewprereset=this._onViewPreReset, t;\n      },\n      _onViewPreReset: function (){\n        this._postponeUpdatePaths = !0;\n      },\n      onAdd: function (){\n        Wi.prototype.onAdd.call(this), this._draw();\n      },\n      _initContainer: function (){\n        var t=this._container=document.createElement("canvas");\n        S(t, "mousemove", this._onMouseMove, this), S(t, "click dblclick mousedown mouseup contextmenu", this._onClick, this), S(t, "mouseout", this._handleMouseOut, this), t._leaflet_disable_events = !0, this._ctx=t.getContext("2d");\n      },\n      _destroyContainer: function (){\n        r(this._redrawRequest), delete this._ctx, T(this._container), k(this._container), delete this._container;\n      },\n      _updatePaths: function (){\n        if(!this._postponeUpdatePaths){\n          for (var t in this._redrawBounds=null, this._layers) this._layers[t]._update();\n          this._redraw();\n        }\n      },\n      _update: function (){\n        var t, e, i, n;\n        this._map._animatingZoom&&this._bounds||(Wi.prototype._update.call(this), t=this._bounds, e=this._container, i=t.getSize(), n=b.retina ? 2:1, Z(e, t.min), e.width=n * i.x, e.height=n * i.y, e.style.width=i.x + "px", e.style.height=i.y + "px", b.retina&&this._ctx.scale(2, 2), this._ctx.translate(-t.min.x, -t.min.y), this.fire("update"));\n      },\n      _reset: function (){\n        Wi.prototype._reset.call(this), this._postponeUpdatePaths&&(this._postponeUpdatePaths = !1, this._updatePaths());\n      },\n      _initPath: function (t){\n        this._updateDashArray(t);\n        t=(this._layers[h(t)]=t)._order={\n          layer: t,\n          prev: this._drawLast,\n          next: null\n        };\n        this._drawLast&&(this._drawLast.next=t), this._drawLast=t, this._drawFirst=this._drawFirst||this._drawLast;\n      },\n      _addPath: function (t){\n        this._requestRedraw(t);\n      },\n      _removePath: function (t){\n        var e=t._order,\n          i=e.next,\n          e=e.prev;\n        i ? i.prev=e:this._drawLast=e, e ? e.next=i:this._drawFirst=i, delete t._order, delete this._layers[h(t)], this._requestRedraw(t);\n      },\n      _updatePath: function (t){\n        this._extendRedrawBounds(t), t._project(), t._update(), this._requestRedraw(t);\n      },\n      _updateStyle: function (t){\n        this._updateDashArray(t), this._requestRedraw(t);\n      },\n      _updateDashArray: function (t){\n        if("string"==typeof t.options.dashArray){\n          for (var e, i=t.options.dashArray.split(/[, ]+/), n=[], o=0; o < i.length; o++){\n            if(e=Number(i[o]), isNaN(e)) return;\n            n.push(e);\n          }\n          t.options._dashArray=n;\n        } else t.options._dashArray=t.options.dashArray;\n      },\n      _requestRedraw: function (t){\n        this._map&&(this._extendRedrawBounds(t), this._redrawRequest=this._redrawRequest||x(this._redraw, this));\n      },\n      _extendRedrawBounds: function (t){\n        var e;\n        t._pxBounds&&(e=(t.options.weight||0) + 1, this._redrawBounds=this._redrawBounds||new f(), this._redrawBounds.extend(t._pxBounds.min.subtract([e, e])), this._redrawBounds.extend(t._pxBounds.max.add([e, e])));\n      },\n      _redraw: function (){\n        this._redrawRequest=null, this._redrawBounds&&(this._redrawBounds.min._floor(), this._redrawBounds.max._ceil()), this._clear(), this._draw(), this._redrawBounds=null;\n      },\n      _clear: function (){\n        var t,\n          e=this._redrawBounds;\n        e ? (t=e.getSize(), this._ctx.clearRect(e.min.x, e.min.y, t.x, t.y)):(this._ctx.save(), this._ctx.setTransform(1, 0, 0, 1, 0, 0), this._ctx.clearRect(0, 0, this._container.width, this._container.height), this._ctx.restore());\n      },\n      _draw: function (){\n        var t,\n          e,\n          i=this._redrawBounds;\n        this._ctx.save(), i&&(e=i.getSize(), this._ctx.beginPath(), this._ctx.rect(i.min.x, i.min.y, e.x, e.y), this._ctx.clip()), this._drawing = !0;\n        for (var n=this._drawFirst; n; n=n.next) t=n.layer, (!i||t._pxBounds&&t._pxBounds.intersects(i))&&t._updatePath();\n        this._drawing = !1, this._ctx.restore();\n      },\n      _updatePoly: function (t, e){\n        if(this._drawing){\n          var i,\n            n,\n            o,\n            s,\n            r=t._parts,\n            a=r.length,\n            h=this._ctx;\n          if(a){\n            for (h.beginPath(), i=0; i < a; i++){\n              for (n=0, o=r[i].length; n < o; n++) s=r[i][n], h[n ? "lineTo":"moveTo"](s.x, s.y);\n              e&&h.closePath();\n            }\n            this._fillStroke(h, t);\n          }\n        }\n      },\n      _updateCircle: function (t){\n        var e, i, n, o;\n        this._drawing&&!t._empty()&&(e=t._point, i=this._ctx, n=Math.max(Math.round(t._radius), 1), 1!=(o=(Math.max(Math.round(t._radiusY), 1)||n) / n)&&(i.save(), i.scale(1, o)), i.beginPath(), i.arc(e.x, e.y / o, n, 0, 2 * Math.PI, !1), 1!=o&&i.restore(), this._fillStroke(i, t));\n      },\n      _fillStroke: function (t, e){\n        var i=e.options;\n        i.fill&&(t.globalAlpha=i.fillOpacity, t.fillStyle=i.fillColor||i.color, t.fill(i.fillRule||"evenodd")), i.stroke&&0!==i.weight&&(t.setLineDash&&t.setLineDash(e.options&&e.options._dashArray||[]), t.globalAlpha=i.opacity, t.lineWidth=i.weight, t.strokeStyle=i.color, t.lineCap=i.lineCap, t.lineJoin=i.lineJoin, t.stroke());\n      },\n      _onClick: function (t){\n        for (var e, i, n=this._map.mouseEventToLayerPoint(t), o=this._drawFirst; o; o=o.next) (e=o.layer).options.interactive&&e._containsPoint(n)&&(("click"===t.type||"preclick"===t.type)&&this._map._draggableMoved(e)||(i=e));\n        this._fireEvent(!!i&&[i], t);\n      },\n      _onMouseMove: function (t){\n        var e;\n        !this._map||this._map.dragging.moving()||this._map._animatingZoom||(e=this._map.mouseEventToLayerPoint(t), this._handleMouseHover(t, e));\n      },\n      _handleMouseOut: function (t){\n        var e=this._hoveredLayer;\n        e&&(z(this._container, "leaflet-interactive"), this._fireEvent([e], t, "mouseout"), this._hoveredLayer=null, this._mouseHoverThrottled = !1);\n      },\n      _handleMouseHover: function (t, e){\n        if(!this._mouseHoverThrottled){\n          for (var i, n, o=this._drawFirst; o; o=o.next) (i=o.layer).options.interactive&&i._containsPoint(e)&&(n=i);\n          n!==this._hoveredLayer&&(this._handleMouseOut(t), n&&(M(this._container, "leaflet-interactive"), this._fireEvent([n], t, "mouseover"), this._hoveredLayer=n)), this._fireEvent(!!this._hoveredLayer&&[this._hoveredLayer], t), this._mouseHoverThrottled = !0, setTimeout(a(function (){\n            this._mouseHoverThrottled = !1;\n          }, this), 32);\n        }\n      },\n      _fireEvent: function (t, e, i){\n        this._map._fireDOMEvent(e, i||e.type, t);\n      },\n      _bringToFront: function (t){\n        var e,\n          i,\n          n=t._order;\n        n&&(e=n.next, i=n.prev, e&&((e.prev=i) ? i.next=e:e&&(this._drawFirst=e), n.prev=this._drawLast, (this._drawLast.next=n).next=null, this._drawLast=n, this._requestRedraw(t)));\n      },\n      _bringToBack: function (t){\n        var e,\n          i,\n          n=t._order;\n        n&&(e=n.next, (i=n.prev)&&((i.next=e) ? e.prev=i:i&&(this._drawLast=i), n.prev=null, n.next=this._drawFirst, this._drawFirst.prev=n, this._drawFirst=n, this._requestRedraw(t)));\n      }\n    });\n  function Ui(t){\n    return b.canvas ? new Fi(t):null;\n  }\n  var Vi=function (){\n      try {\n        return document.namespaces.add("lvml", "urn:schemas-microsoft-com:vml"), function (t){\n          return document.createElement("<lvml:" + t + \' class="lvml">\');\n        };\n      } catch (t){}\n      return function (t){\n        return document.createElement("<" + t + \' xmlns="urn:schemas-microsoft.com:vml" class="lvml">\');\n      };\n    }(),\n    zt={\n      _initContainer: function (){\n        this._container=P("div", "leaflet-vml-container");\n      },\n      _update: function (){\n        this._map._animatingZoom||(Wi.prototype._update.call(this), this.fire("update"));\n      },\n      _initPath: function (t){\n        var e=t._container=Vi("shape");\n        M(e, "leaflet-vml-shape " + (this.options.className||"")), e.coordsize="1 1", t._path=Vi("path"), e.appendChild(t._path), this._updateStyle(t), this._layers[h(t)]=t;\n      },\n      _addPath: function (t){\n        var e=t._container;\n        this._container.appendChild(e), t.options.interactive&&t.addInteractiveTarget(e);\n      },\n      _removePath: function (t){\n        var e=t._container;\n        T(e), t.removeInteractiveTarget(e), delete this._layers[h(t)];\n      },\n      _updateStyle: function (t){\n        var e=t._stroke,\n          i=t._fill,\n          n=t.options,\n          o=t._container;\n        o.stroked = !!n.stroke, o.filled = !!n.fill, n.stroke ? (e=e||(t._stroke=Vi("stroke")), o.appendChild(e), e.weight=n.weight + "px", e.color=n.color, e.opacity=n.opacity, n.dashArray ? e.dashStyle=d(n.dashArray) ? n.dashArray.join(" "):n.dashArray.replace(/( *, *)/g, " "):e.dashStyle="", e.endcap=n.lineCap.replace("butt", "flat"), e.joinstyle=n.lineJoin):e&&(o.removeChild(e), t._stroke=null), n.fill ? (i=i||(t._fill=Vi("fill")), o.appendChild(i), i.color=n.fillColor||n.color, i.opacity=n.fillOpacity):i&&(o.removeChild(i), t._fill=null);\n      },\n      _updateCircle: function (t){\n        var e=t._point.round(),\n          i=Math.round(t._radius),\n          n=Math.round(t._radiusY||i);\n        this._setPath(t, t._empty() ? "M0 0":"AL " + e.x + "," + e.y + " " + i + "," + n + " 0,23592600");\n      },\n      _setPath: function (t, e){\n        t._path.v=e;\n      },\n      _bringToFront: function (t){\n        fe(t._container);\n      },\n      _bringToBack: function (t){\n        ge(t._container);\n      }\n    },\n    qi=b.vml ? Vi:ct,\n    Gi=Wi.extend({\n      _initContainer: function (){\n        this._container=qi("svg"), this._container.setAttribute("pointer-events", "none"), this._rootGroup=qi("g"), this._container.appendChild(this._rootGroup);\n      },\n      _destroyContainer: function (){\n        T(this._container), k(this._container), delete this._container, delete this._rootGroup, delete this._svgSize;\n      },\n      _update: function (){\n        var t, e, i;\n        this._map._animatingZoom&&this._bounds||(Wi.prototype._update.call(this), e=(t=this._bounds).getSize(), i=this._container, this._svgSize&&this._svgSize.equals(e)||(this._svgSize=e, i.setAttribute("width", e.x), i.setAttribute("height", e.y)), Z(i, t.min), i.setAttribute("viewBox", [t.min.x, t.min.y, e.x, e.y].join(" ")), this.fire("update"));\n      },\n      _initPath: function (t){\n        var e=t._path=qi("path");\n        t.options.className&&M(e, t.options.className), t.options.interactive&&M(e, "leaflet-interactive"), this._updateStyle(t), this._layers[h(t)]=t;\n      },\n      _addPath: function (t){\n        this._rootGroup||this._initContainer(), this._rootGroup.appendChild(t._path), t.addInteractiveTarget(t._path);\n      },\n      _removePath: function (t){\n        T(t._path), t.removeInteractiveTarget(t._path), delete this._layers[h(t)];\n      },\n      _updatePath: function (t){\n        t._project(), t._update();\n      },\n      _updateStyle: function (t){\n        var e=t._path,\n          t=t.options;\n        e&&(t.stroke ? (e.setAttribute("stroke", t.color), e.setAttribute("stroke-opacity", t.opacity), e.setAttribute("stroke-width", t.weight), e.setAttribute("stroke-linecap", t.lineCap), e.setAttribute("stroke-linejoin", t.lineJoin), t.dashArray ? e.setAttribute("stroke-dasharray", t.dashArray):e.removeAttribute("stroke-dasharray"), t.dashOffset ? e.setAttribute("stroke-dashoffset", t.dashOffset):e.removeAttribute("stroke-dashoffset")):e.setAttribute("stroke", "none"), t.fill ? (e.setAttribute("fill", t.fillColor||t.color), e.setAttribute("fill-opacity", t.fillOpacity), e.setAttribute("fill-rule", t.fillRule||"evenodd")):e.setAttribute("fill", "none"));\n      },\n      _updatePoly: function (t, e){\n        this._setPath(t, dt(t._parts, e));\n      },\n      _updateCircle: function (t){\n        var e=t._point,\n          i=Math.max(Math.round(t._radius), 1),\n          n="a" + i + "," + (Math.max(Math.round(t._radiusY), 1)||i) + " 0 1,0 ",\n          e=t._empty() ? "M0 0":"M" + (e.x - i) + "," + e.y + n + 2 * i + ",0 " + n + 2 * -i + ",0 ";\n        this._setPath(t, e);\n      },\n      _setPath: function (t, e){\n        t._path.setAttribute("d", e);\n      },\n      _bringToFront: function (t){\n        fe(t._path);\n      },\n      _bringToBack: function (t){\n        ge(t._path);\n      }\n    });\n  function Ki(t){\n    return b.svg||b.vml ? new Gi(t):null;\n  }\n  b.vml&&Gi.include(zt), A.include({\n    getRenderer: function (t){\n      t=(t=t.options.renderer||this._getPaneRenderer(t.options.pane)||this.options.renderer||this._renderer)||(this._renderer=this._createRenderer());\n      return this.hasLayer(t)||this.addLayer(t), t;\n    },\n    _getPaneRenderer: function (t){\n      var e;\n      return "overlayPane"!==t&&void 0!==t&&(void 0===(e=this._paneRenderers[t])&&(e=this._createRenderer({\n        pane: t\n      }), this._paneRenderers[t]=e), e);\n    },\n    _createRenderer: function (t){\n      return this.options.preferCanvas&&Ui(t)||Ki(t);\n    }\n  });\n  var Yi=xi.extend({\n    initialize: function (t, e){\n      xi.prototype.initialize.call(this, this._boundsToLatLngs(t), e);\n    },\n    setBounds: function (t){\n      return this.setLatLngs(this._boundsToLatLngs(t));\n    },\n    _boundsToLatLngs: function (t){\n      return [(t=g(t)).getSouthWest(), t.getNorthWest(), t.getNorthEast(), t.getSouthEast()];\n    }\n  });\n  Gi.create=qi, Gi.pointsToPath=dt, wi.geometryToLayer=bi, wi.coordsToLatLng=Li, wi.coordsToLatLngs=Ti, wi.latLngToCoords=Mi, wi.latLngsToCoords=zi, wi.getFeature=Ci, wi.asFeature=Zi, A.mergeOptions({\n    boxZoom: !0\n  });\n  var _t=n.extend({\n      initialize: function (t){\n        this._map=t, this._container=t._container, this._pane=t._panes.overlayPane, this._resetStateTimeout=0, t.on("unload", this._destroy, this);\n      },\n      addHooks: function (){\n        S(this._container, "mousedown", this._onMouseDown, this);\n      },\n      removeHooks: function (){\n        k(this._container, "mousedown", this._onMouseDown, this);\n      },\n      moved: function (){\n        return this._moved;\n      },\n      _destroy: function (){\n        T(this._pane), delete this._pane;\n      },\n      _resetState: function (){\n        this._resetStateTimeout=0, this._moved = !1;\n      },\n      _clearDeferredResetState: function (){\n        0!==this._resetStateTimeout&&(clearTimeout(this._resetStateTimeout), this._resetStateTimeout=0);\n      },\n      _onMouseDown: function (t){\n        if(!t.shiftKey||1!==t.which&&1!==t.button) return !1;\n        this._clearDeferredResetState(), this._resetState(), re(), Le(), this._startPoint=this._map.mouseEventToContainerPoint(t), S(document, {\n          contextmenu: Re,\n          mousemove: this._onMouseMove,\n          mouseup: this._onMouseUp,\n          keydown: this._onKeyDown\n        }, this);\n      },\n      _onMouseMove: function (t){\n        this._moved||(this._moved = !0, this._box=P("div", "leaflet-zoom-box", this._container), M(this._container, "leaflet-crosshair"), this._map.fire("boxzoomstart")), this._point=this._map.mouseEventToContainerPoint(t);\n        var t=new f(this._point, this._startPoint),\n          e=t.getSize();\n        Z(this._box, t.min), this._box.style.width=e.x + "px", this._box.style.height=e.y + "px";\n      },\n      _finish: function (){\n        this._moved&&(T(this._box), z(this._container, "leaflet-crosshair")), ae(), Te(), k(document, {\n          contextmenu: Re,\n          mousemove: this._onMouseMove,\n          mouseup: this._onMouseUp,\n          keydown: this._onKeyDown\n        }, this);\n      },\n      _onMouseUp: function (t){\n        1!==t.which&&1!==t.button||(this._finish(), this._moved&&(this._clearDeferredResetState(), this._resetStateTimeout=setTimeout(a(this._resetState, this), 0), t=new s(this._map.containerPointToLatLng(this._startPoint), this._map.containerPointToLatLng(this._point)), this._map.fitBounds(t).fire("boxzoomend", {\n          boxZoomBounds: t\n        })));\n      },\n      _onKeyDown: function (t){\n        27===t.keyCode&&(this._finish(), this._clearDeferredResetState(), this._resetState());\n      }\n    }),\n    Ct=(A.addInitHook("addHandler", "boxZoom", _t), A.mergeOptions({\n      doubleClickZoom: !0\n    }), n.extend({\n      addHooks: function (){\n        this._map.on("dblclick", this._onDoubleClick, this);\n      },\n      removeHooks: function (){\n        this._map.off("dblclick", this._onDoubleClick, this);\n      },\n      _onDoubleClick: function (t){\n        var e=this._map,\n          i=e.getZoom(),\n          n=e.options.zoomDelta,\n          i=t.originalEvent.shiftKey ? i - n:i + n;\n        "center"===e.options.doubleClickZoom ? e.setZoom(i):e.setZoomAround(t.containerPoint, i);\n      }\n    })),\n    Zt=(A.addInitHook("addHandler", "doubleClickZoom", Ct), A.mergeOptions({\n      dragging: !0,\n      inertia: !0,\n      inertiaDeceleration: 3400,\n      inertiaMaxSpeed: 1 / 0,\n      easeLinearity: .2,\n      worldCopyJump: !1,\n      maxBoundsViscosity: 0\n    }), n.extend({\n      addHooks: function (){\n        var t;\n        this._draggable||(t=this._map, this._draggable=new Xe(t._mapPane, t._container), this._draggable.on({\n          dragstart: this._onDragStart,\n          drag: this._onDrag,\n          dragend: this._onDragEnd\n        }, this), this._draggable.on("predrag", this._onPreDragLimit, this), t.options.worldCopyJump&&(this._draggable.on("predrag", this._onPreDragWrap, this), t.on("zoomend", this._onZoomEnd, this), t.whenReady(this._onZoomEnd, this))), M(this._map._container, "leaflet-grab leaflet-touch-drag"), this._draggable.enable(), this._positions=[], this._times=[];\n      },\n      removeHooks: function (){\n        z(this._map._container, "leaflet-grab"), z(this._map._container, "leaflet-touch-drag"), this._draggable.disable();\n      },\n      moved: function (){\n        return this._draggable&&this._draggable._moved;\n      },\n      moving: function (){\n        return this._draggable&&this._draggable._moving;\n      },\n      _onDragStart: function (){\n        var t,\n          e=this._map;\n        e._stop(), this._map.options.maxBounds&&this._map.options.maxBoundsViscosity ? (t=g(this._map.options.maxBounds), this._offsetLimit=_(this._map.latLngToContainerPoint(t.getNorthWest()).multiplyBy(-1), this._map.latLngToContainerPoint(t.getSouthEast()).multiplyBy(-1).add(this._map.getSize())), this._viscosity=Math.min(1, Math.max(0, this._map.options.maxBoundsViscosity))):this._offsetLimit=null, e.fire("movestart").fire("dragstart"), e.options.inertia&&(this._positions=[], this._times=[]);\n      },\n      _onDrag: function (t){\n        var e, i;\n        this._map.options.inertia&&(e=this._lastTime=+new Date(), i=this._lastPos=this._draggable._absPos||this._draggable._newPos, this._positions.push(i), this._times.push(e), this._prunePositions(e)), this._map.fire("move", t).fire("drag", t);\n      },\n      _prunePositions: function (t){\n        for (; 1 < this._positions.length&&50 < t - this._times[0];) this._positions.shift(), this._times.shift();\n      },\n      _onZoomEnd: function (){\n        var t=this._map.getSize().divideBy(2),\n          e=this._map.latLngToLayerPoint([0, 0]);\n        this._initialWorldOffset=e.subtract(t).x, this._worldWidth=this._map.getPixelWorldBounds().getSize().x;\n      },\n      _viscousLimit: function (t, e){\n        return t - (t - e) * this._viscosity;\n      },\n      _onPreDragLimit: function (){\n        var t, e;\n        this._viscosity&&this._offsetLimit&&(t=this._draggable._newPos.subtract(this._draggable._startPos), e=this._offsetLimit, t.x < e.min.x&&(t.x=this._viscousLimit(t.x, e.min.x)), t.y < e.min.y&&(t.y=this._viscousLimit(t.y, e.min.y)), t.x > e.max.x&&(t.x=this._viscousLimit(t.x, e.max.x)), t.y > e.max.y&&(t.y=this._viscousLimit(t.y, e.max.y)), this._draggable._newPos=this._draggable._startPos.add(t));\n      },\n      _onPreDragWrap: function (){\n        var t=this._worldWidth,\n          e=Math.round(t / 2),\n          i=this._initialWorldOffset,\n          n=this._draggable._newPos.x,\n          o=(n - e + i) % t + e - i,\n          n=(n + e + i) % t - e - i,\n          t=Math.abs(o + i) < Math.abs(n + i) ? o:n;\n        this._draggable._absPos=this._draggable._newPos.clone(), this._draggable._newPos.x=t;\n      },\n      _onDragEnd: function (t){\n        var e,\n          i,\n          n,\n          o,\n          s=this._map,\n          r=s.options,\n          a = !r.inertia||t.noInertia||this._times.length < 2;\n        s.fire("dragend", t), !a&&(this._prunePositions(+new Date()), t=this._lastPos.subtract(this._positions[0]), a=(this._lastTime - this._times[0]) / 1e3, e=r.easeLinearity, a=(t=t.multiplyBy(e / a)).distanceTo([0, 0]), i=Math.min(r.inertiaMaxSpeed, a), t=t.multiplyBy(i / a), n=i / (r.inertiaDeceleration * e), (o=t.multiplyBy(-n / 2).round()).x||o.y) ? (o=s._limitOffset(o, s.options.maxBounds), x(function (){\n          s.panBy(o, {\n            duration: n,\n            easeLinearity: e,\n            noMoveStart: !0,\n            animate: !0\n          });\n        })):s.fire("moveend");\n      }\n    })),\n    St=(A.addInitHook("addHandler", "dragging", Zt), A.mergeOptions({\n      keyboard: !0,\n      keyboardPanDelta: 80\n    }), n.extend({\n      keyCodes: {\n        left: [37],\n        right: [39],\n        down: [40],\n        up: [38],\n        zoomIn: [187, 107, 61, 171],\n        zoomOut: [189, 109, 54, 173]\n      },\n      initialize: function (t){\n        this._map=t, this._setPanDelta(t.options.keyboardPanDelta), this._setZoomDelta(t.options.zoomDelta);\n      },\n      addHooks: function (){\n        var t=this._map._container;\n        t.tabIndex <=0&&(t.tabIndex="0"), S(t, {\n          focus: this._onFocus,\n          blur: this._onBlur,\n          mousedown: this._onMouseDown\n        }, this), this._map.on({\n          focus: this._addHooks,\n          blur: this._removeHooks\n        }, this);\n      },\n      removeHooks: function (){\n        this._removeHooks(), k(this._map._container, {\n          focus: this._onFocus,\n          blur: this._onBlur,\n          mousedown: this._onMouseDown\n        }, this), this._map.off({\n          focus: this._addHooks,\n          blur: this._removeHooks\n        }, this);\n      },\n      _onMouseDown: function (){\n        var t, e, i;\n        this._focused||(i=document.body, t=document.documentElement, e=i.scrollTop||t.scrollTop, i=i.scrollLeft||t.scrollLeft, this._map._container.focus(), window.scrollTo(i, e));\n      },\n      _onFocus: function (){\n        this._focused = !0, this._map.fire("focus");\n      },\n      _onBlur: function (){\n        this._focused = !1, this._map.fire("blur");\n      },\n      _setPanDelta: function (t){\n        for (var e=this._panKeys={}, i=this.keyCodes, n=0, o=i.left.length; n < o; n++) e[i.left[n]]=[-1 * t, 0];\n        for (n=0, o=i.right.length; n < o; n++) e[i.right[n]]=[t, 0];\n        for (n=0, o=i.down.length; n < o; n++) e[i.down[n]]=[0, t];\n        for (n=0, o=i.up.length; n < o; n++) e[i.up[n]]=[0, -1 * t];\n      },\n      _setZoomDelta: function (t){\n        for (var e=this._zoomKeys={}, i=this.keyCodes, n=0, o=i.zoomIn.length; n < o; n++) e[i.zoomIn[n]]=t;\n        for (n=0, o=i.zoomOut.length; n < o; n++) e[i.zoomOut[n]]=-t;\n      },\n      _addHooks: function (){\n        S(document, "keydown", this._onKeyDown, this);\n      },\n      _removeHooks: function (){\n        k(document, "keydown", this._onKeyDown, this);\n      },\n      _onKeyDown: function (t){\n        if(!(t.altKey||t.ctrlKey||t.metaKey)){\n          var e,\n            i,\n            n=t.keyCode,\n            o=this._map;\n          if(n in this._panKeys) o._panAnim&&o._panAnim._inProgress||(i=this._panKeys[n], t.shiftKey&&(i=m(i).multiplyBy(3)), o.options.maxBounds&&(i=o._limitOffset(m(i), o.options.maxBounds)), o.options.worldCopyJump ? (e=o.wrapLatLng(o.unproject(o.project(o.getCenter()).add(i))), o.panTo(e)):o.panBy(i));else if(n in this._zoomKeys) o.setZoom(o.getZoom() + (t.shiftKey ? 3:1) * this._zoomKeys[n]);else {\n            if(27!==n||!o._popup||!o._popup.options.closeOnEscapeKey) return;\n            o.closePopup();\n          }\n          Re(t);\n        }\n      }\n    })),\n    Et=(A.addInitHook("addHandler", "keyboard", St), A.mergeOptions({\n      scrollWheelZoom: !0,\n      wheelDebounceTime: 40,\n      wheelPxPerZoomLevel: 60\n    }), n.extend({\n      addHooks: function (){\n        S(this._map._container, "wheel", this._onWheelScroll, this), this._delta=0;\n      },\n      removeHooks: function (){\n        k(this._map._container, "wheel", this._onWheelScroll, this);\n      },\n      _onWheelScroll: function (t){\n        var e=He(t),\n          i=this._map.options.wheelDebounceTime,\n          e=(this._delta +=e, this._lastMousePos=this._map.mouseEventToContainerPoint(t), this._startTime||(this._startTime=+new Date()), Math.max(i - (+new Date() - this._startTime), 0));\n        clearTimeout(this._timer), this._timer=setTimeout(a(this._performZoom, this), e), Re(t);\n      },\n      _performZoom: function (){\n        var t=this._map,\n          e=t.getZoom(),\n          i=this._map.options.zoomSnap||0,\n          n=(t._stop(), this._delta / (4 * this._map.options.wheelPxPerZoomLevel)),\n          n=4 * Math.log(2 / (1 + Math.exp(-Math.abs(n)))) / Math.LN2,\n          i=i ? Math.ceil(n / i) * i:n,\n          n=t._limitZoom(e + (0 < this._delta ? i:-i)) - e;\n        this._delta=0, this._startTime=null, n&&("center"===t.options.scrollWheelZoom ? t.setZoom(e + n):t.setZoomAround(this._lastMousePos, e + n));\n      }\n    })),\n    kt=(A.addInitHook("addHandler", "scrollWheelZoom", Et), A.mergeOptions({\n      tapHold: b.touchNative&&b.safari&&b.mobile,\n      tapTolerance: 15\n    }), n.extend({\n      addHooks: function (){\n        S(this._map._container, "touchstart", this._onDown, this);\n      },\n      removeHooks: function (){\n        k(this._map._container, "touchstart", this._onDown, this);\n      },\n      _onDown: function (t){\n        var e;\n        clearTimeout(this._holdTimeout), 1===t.touches.length&&(e=t.touches[0], this._startPos=this._newPos=new p(e.clientX, e.clientY), this._holdTimeout=setTimeout(a(function (){\n          this._cancel(), this._isTapValid()&&(S(document, "touchend", O), S(document, "touchend touchcancel", this._cancelClickPrevent), this._simulateEvent("contextmenu", e));\n        }, this), 600), S(document, "touchend touchcancel contextmenu", this._cancel, this), S(document, "touchmove", this._onMove, this));\n      },\n      _cancelClickPrevent: function t(){\n        k(document, "touchend", O), k(document, "touchend touchcancel", t);\n      },\n      _cancel: function (){\n        clearTimeout(this._holdTimeout), k(document, "touchend touchcancel contextmenu", this._cancel, this), k(document, "touchmove", this._onMove, this);\n      },\n      _onMove: function (t){\n        t=t.touches[0];\n        this._newPos=new p(t.clientX, t.clientY);\n      },\n      _isTapValid: function (){\n        return this._newPos.distanceTo(this._startPos) <=this._map.options.tapTolerance;\n      },\n      _simulateEvent: function (t, e){\n        t=new MouseEvent(t, {\n          bubbles: !0,\n          cancelable: !0,\n          view: window,\n          screenX: e.screenX,\n          screenY: e.screenY,\n          clientX: e.clientX,\n          clientY: e.clientY\n        });\n        t._simulated = !0, e.target.dispatchEvent(t);\n      }\n    })),\n    Ot=(A.addInitHook("addHandler", "tapHold", kt), A.mergeOptions({\n      touchZoom: b.touch,\n      bounceAtZoomLimits: !0\n    }), n.extend({\n      addHooks: function (){\n        M(this._map._container, "leaflet-touch-zoom"), S(this._map._container, "touchstart", this._onTouchStart, this);\n      },\n      removeHooks: function (){\n        z(this._map._container, "leaflet-touch-zoom"), k(this._map._container, "touchstart", this._onTouchStart, this);\n      },\n      _onTouchStart: function (t){\n        var e,\n          i,\n          n=this._map;\n        !t.touches||2!==t.touches.length||n._animatingZoom||this._zooming||(e=n.mouseEventToContainerPoint(t.touches[0]), i=n.mouseEventToContainerPoint(t.touches[1]), this._centerPoint=n.getSize()._divideBy(2), this._startLatLng=n.containerPointToLatLng(this._centerPoint), "center"!==n.options.touchZoom&&(this._pinchStartLatLng=n.containerPointToLatLng(e.add(i)._divideBy(2))), this._startDist=e.distanceTo(i), this._startZoom=n.getZoom(), this._moved = !1, this._zooming = !0, n._stop(), S(document, "touchmove", this._onTouchMove, this), S(document, "touchend touchcancel", this._onTouchEnd, this), O(t));\n      },\n      _onTouchMove: function (t){\n        if(t.touches&&2===t.touches.length&&this._zooming){\n          var e=this._map,\n            i=e.mouseEventToContainerPoint(t.touches[0]),\n            n=e.mouseEventToContainerPoint(t.touches[1]),\n            o=i.distanceTo(n) / this._startDist;\n          if(this._zoom=e.getScaleZoom(o, this._startZoom), !e.options.bounceAtZoomLimits&&(this._zoom < e.getMinZoom()&&o < 1||this._zoom > e.getMaxZoom()&&1 < o)&&(this._zoom=e._limitZoom(this._zoom)), "center"===e.options.touchZoom){\n            if(this._center=this._startLatLng, 1==o) return;\n          }else{\n            i=i._add(n)._divideBy(2)._subtract(this._centerPoint);\n            if(1==o&&0===i.x&&0===i.y) return;\n            this._center=e.unproject(e.project(this._pinchStartLatLng, this._zoom).subtract(i), this._zoom);\n          }\n          this._moved||(e._moveStart(!0, !1), this._moved = !0), r(this._animRequest);\n          n=a(e._move, e, this._center, this._zoom, {\n            pinch: !0,\n            round: !1\n          }, void 0);\n          this._animRequest=x(n, this, !0), O(t);\n        }\n      },\n      _onTouchEnd: function (){\n        this._moved&&this._zooming ? (this._zooming = !1, r(this._animRequest), k(document, "touchmove", this._onTouchMove, this), k(document, "touchend touchcancel", this._onTouchEnd, this), this._map.options.zoomAnimation ? this._map._animateZoom(this._center, this._map._limitZoom(this._zoom), !0, this._map.options.zoomSnap):this._map._resetView(this._center, this._map._limitZoom(this._zoom))):this._zooming = !1;\n      }\n    })),\n    Xi=(A.addInitHook("addHandler", "touchZoom", Ot), A.BoxZoom=_t, A.DoubleClickZoom=Ct, A.Drag=Zt, A.Keyboard=St, A.ScrollWheelZoom=Et, A.TapHold=kt, A.TouchZoom=Ot, t.Bounds=f, t.Browser=b, t.CRS=ot, t.Canvas=Fi, t.Circle=vi, t.CircleMarker=gi, t.Class=et, t.Control=B, t.DivIcon=Ri, t.DivOverlay=Ai, t.DomEvent=mt, t.DomUtil=pt, t.Draggable=Xe, t.Evented=it, t.FeatureGroup=ci, t.GeoJSON=wi, t.GridLayer=Ni, t.Handler=n, t.Icon=di, t.ImageOverlay=Ei, t.LatLng=v, t.LatLngBounds=s, t.Layer=o, t.LayerGroup=ui, t.LineUtil=vt, t.Map=A, t.Marker=mi, t.Mixin=ft, t.Path=fi, t.Point=p, t.PolyUtil=gt, t.Polygon=xi, t.Polyline=yi, t.Popup=Bi, t.PosAnimation=Fe, t.Projection=wt, t.Rectangle=Yi, t.Renderer=Wi, t.SVG=Gi, t.SVGOverlay=Oi, t.TileLayer=Di, t.Tooltip=Ii, t.Transformation=at, t.Util=tt, t.VideoOverlay=ki, t.bind=a, t.bounds=_, t.canvas=Ui, t.circle=function (t, e, i){\n      return new vi(t, e, i);\n    }, t.circleMarker=function (t, e){\n      return new gi(t, e);\n    }, t.control=Ue, t.divIcon=function (t){\n      return new Ri(t);\n    }, t.extend=l, t.featureGroup=function (t, e){\n      return new ci(t, e);\n    }, t.geoJSON=Si, t.geoJson=Mt, t.gridLayer=function (t){\n      return new Ni(t);\n    }, t.icon=function (t){\n      return new di(t);\n    }, t.imageOverlay=function (t, e, i){\n      return new Ei(t, e, i);\n    }, t.latLng=w, t.latLngBounds=g, t.layerGroup=function (t, e){\n      return new ui(t, e);\n    }, t.map=function (t, e){\n      return new A(t, e);\n    }, t.marker=function (t, e){\n      return new mi(t, e);\n    }, t.point=m, t.polygon=function (t, e){\n      return new xi(t, e);\n    }, t.polyline=function (t, e){\n      return new yi(t, e);\n    }, t.popup=function (t, e){\n      return new Bi(t, e);\n    }, t.rectangle=function (t, e){\n      return new Yi(t, e);\n    }, t.setOptions=c, t.stamp=h, t.svg=Ki, t.svgOverlay=function (t, e, i){\n      return new Oi(t, e, i);\n    }, t.tileLayer=ji, t.tooltip=function (t, e){\n      return new Ii(t, e);\n    }, t.transformation=ht, t.version="1.9.4", t.videoOverlay=function (t, e, i){\n      return new ki(t, e, i);\n    }, window.L);\n  t.noConflict=function (){\n    return window.L=Xi, this;\n  }, window.L=t;\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUM7SUFBQSxDQUFDLEVBQUNELENBQUMsQ0FBQzBNLGNBQWMsR0FBQ2lDLEVBQUUsRUFBQzNPLENBQUMsQ0FBQyt3QyxPQUFPLEdBQUMsT0FBTyxFQUFDL3dDLENBQUMsQ0FBQ3VnRCxZQUFZLEdBQUMsVUFBU3ZnRCxDQUFDLEVBQUNDLENBQUMsRUFBQ1MsQ0FBQyxFQUFDO01BQUMsT0FBTyxJQUFJdWtDLEVBQUUsQ0FBQ2psQyxDQUFDLEVBQUNDLENBQUMsRUFBQ1MsQ0FBQyxDQUFDO0lBQUEsQ0FBQyxFQUFDb0QsTUFBTSxDQUFDb0MsQ0FBQyxDQUFDO0VBQUNsRyxDQUFDLENBQUN3Z0QsVUFBVSxHQUFDLFlBQVU7SUFBQyxPQUFPMThDLE1BQU0sQ0FBQ29DLENBQUMsR0FBQzYxQyxFQUFFLEVBQUMsSUFBSTtFQUFBLENBQUMsRUFBQ2o0QyxNQUFNLENBQUNvQyxDQUFDLEdBQUNsRyxDQUFDO0FBQUEsQ0FBQyxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc2hpcHRpbWl6ZS8uL2pzL2xlYWZsZXQtMS40LjAuanM/ODM1MiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBAcHJlc2VydmVcbiAqIExlYWZsZXQgMS45LjQsIGEgSlMgbGlicmFyeSBmb3IgaW50ZXJhY3RpdmUgbWFwcy4gaHR0cHM6Ly9sZWFmbGV0anMuY29tXG4gKiAoYykgMjAxMC0yMDIzIFZsYWRpbWlyIEFnYWZvbmtpbiwgKGMpIDIwMTAtMjAxMSBDbG91ZE1hZGVcbiAqL1xuIWZ1bmN0aW9uKHQsZSl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/ZShleHBvcnRzKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImV4cG9ydHNcIl0sZSk6ZSgodD1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOnR8fHNlbGYpLmxlYWZsZXQ9e30pfSh0aGlzLGZ1bmN0aW9uKHQpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGwodCl7Zm9yKHZhciBlLGksbj0xLG89YXJndW1lbnRzLmxlbmd0aDtuPG87bisrKWZvcihlIGluIGk9YXJndW1lbnRzW25dKXRbZV09aVtlXTtyZXR1cm4gdH12YXIgUj1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbih0KXtyZXR1cm4gTi5wcm90b3R5cGU9dCxuZXcgTn07ZnVuY3Rpb24gTigpe31mdW5jdGlvbiBhKHQsZSl7dmFyIGksbj1BcnJheS5wcm90b3R5cGUuc2xpY2U7cmV0dXJuIHQuYmluZD90LmJpbmQuYXBwbHkodCxuLmNhbGwoYXJndW1lbnRzLDEpKTooaT1uLmNhbGwoYXJndW1lbnRzLDIpLGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkoZSxpLmxlbmd0aD9pLmNvbmNhdChuLmNhbGwoYXJndW1lbnRzKSk6YXJndW1lbnRzKX0pfXZhciBEPTA7ZnVuY3Rpb24gaCh0KXtyZXR1cm5cIl9sZWFmbGV0X2lkXCJpbiB0fHwodC5fbGVhZmxldF9pZD0rK0QpLHQuX2xlYWZsZXRfaWR9ZnVuY3Rpb24gaih0LGUsaSl7dmFyIG4sbyxzPWZ1bmN0aW9uKCl7bj0hMSxvJiYoci5hcHBseShpLG8pLG89ITEpfSxyPWZ1bmN0aW9uKCl7bj9vPWFyZ3VtZW50czoodC5hcHBseShpLGFyZ3VtZW50cyksc2V0VGltZW91dChzLGUpLG49ITApfTtyZXR1cm4gcn1mdW5jdGlvbiBIKHQsZSxpKXt2YXIgbj1lWzFdLGU9ZVswXSxvPW4tZTtyZXR1cm4gdD09PW4mJmk/dDooKHQtZSklbytvKSVvK2V9ZnVuY3Rpb24gdSgpe3JldHVybiExfWZ1bmN0aW9uIGkodCxlKXtyZXR1cm4hMT09PWU/dDooZT1NYXRoLnBvdygxMCx2b2lkIDA9PT1lPzY6ZSksTWF0aC5yb3VuZCh0KmUpL2UpfWZ1bmN0aW9uIFcodCl7cmV0dXJuIHQudHJpbT90LnRyaW0oKTp0LnJlcGxhY2UoL15cXHMrfFxccyskL2csXCJcIil9ZnVuY3Rpb24gRih0KXtyZXR1cm4gVyh0KS5zcGxpdCgvXFxzKy8pfWZ1bmN0aW9uIGModCxlKXtmb3IodmFyIGkgaW4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsXCJvcHRpb25zXCIpfHwodC5vcHRpb25zPXQub3B0aW9ucz9SKHQub3B0aW9ucyk6e30pLGUpdC5vcHRpb25zW2ldPWVbaV07cmV0dXJuIHQub3B0aW9uc31mdW5jdGlvbiBVKHQsZSxpKXt2YXIgbixvPVtdO2ZvcihuIGluIHQpby5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChpP24udG9VcHBlckNhc2UoKTpuKStcIj1cIitlbmNvZGVVUklDb21wb25lbnQodFtuXSkpO3JldHVybihlJiYtMSE9PWUuaW5kZXhPZihcIj9cIik/XCImXCI6XCI/XCIpK28uam9pbihcIiZcIil9dmFyIFY9L1xceyAqKFtcXHdfIC1dKykgKlxcfS9nO2Z1bmN0aW9uIHEodCxpKXtyZXR1cm4gdC5yZXBsYWNlKFYsZnVuY3Rpb24odCxlKXtlPWlbZV07aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgRXJyb3IoXCJObyB2YWx1ZSBwcm92aWRlZCBmb3IgdmFyaWFibGUgXCIrdCk7cmV0dXJuIGU9XCJmdW5jdGlvblwiPT10eXBlb2YgZT9lKGkpOmV9KX12YXIgZD1BcnJheS5pc0FycmF5fHxmdW5jdGlvbih0KXtyZXR1cm5cIltvYmplY3QgQXJyYXldXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9O2Z1bmN0aW9uIEcodCxlKXtmb3IodmFyIGk9MDtpPHQubGVuZ3RoO2krKylpZih0W2ldPT09ZSlyZXR1cm4gaTtyZXR1cm4tMX12YXIgSz1cImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEFRQUJBQUQvQUN3QUFBQUFBUUFCQUFBQ0FEcz1cIjtmdW5jdGlvbiBZKHQpe3JldHVybiB3aW5kb3dbXCJ3ZWJraXRcIit0XXx8d2luZG93W1wibW96XCIrdF18fHdpbmRvd1tcIm1zXCIrdF19dmFyIFg9MDtmdW5jdGlvbiBKKHQpe3ZhciBlPStuZXcgRGF0ZSxpPU1hdGgubWF4KDAsMTYtKGUtWCkpO3JldHVybiBYPWUraSx3aW5kb3cuc2V0VGltZW91dCh0LGkpfXZhciAkPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fFkoXCJSZXF1ZXN0QW5pbWF0aW9uRnJhbWVcIil8fEosUT13aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWV8fFkoXCJDYW5jZWxBbmltYXRpb25GcmFtZVwiKXx8WShcIkNhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZVwiKXx8ZnVuY3Rpb24odCl7d2luZG93LmNsZWFyVGltZW91dCh0KX07ZnVuY3Rpb24geCh0LGUsaSl7aWYoIWl8fCQhPT1KKXJldHVybiAkLmNhbGwod2luZG93LGEodCxlKSk7dC5jYWxsKGUpfWZ1bmN0aW9uIHIodCl7dCYmUS5jYWxsKHdpbmRvdyx0KX12YXIgdHQ9e19fcHJvdG9fXzpudWxsLGV4dGVuZDpsLGNyZWF0ZTpSLGJpbmQ6YSxnZXQgbGFzdElkKCl7cmV0dXJuIER9LHN0YW1wOmgsdGhyb3R0bGU6aix3cmFwTnVtOkgsZmFsc2VGbjp1LGZvcm1hdE51bTppLHRyaW06VyxzcGxpdFdvcmRzOkYsc2V0T3B0aW9uczpjLGdldFBhcmFtU3RyaW5nOlUsdGVtcGxhdGU6cSxpc0FycmF5OmQsaW5kZXhPZjpHLGVtcHR5SW1hZ2VVcmw6SyxyZXF1ZXN0Rm46JCxjYW5jZWxGbjpRLHJlcXVlc3RBbmltRnJhbWU6eCxjYW5jZWxBbmltRnJhbWU6cn07ZnVuY3Rpb24gZXQoKXt9ZXQuZXh0ZW5kPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtjKHRoaXMpLHRoaXMuaW5pdGlhbGl6ZSYmdGhpcy5pbml0aWFsaXplLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLmNhbGxJbml0SG9va3MoKX12YXIgaSxuPWUuX19zdXBlcl9fPXRoaXMucHJvdG90eXBlLG89UihuKTtmb3IoaSBpbihvLmNvbnN0cnVjdG9yPWUpLnByb3RvdHlwZT1vLHRoaXMpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMsaSkmJlwicHJvdG90eXBlXCIhPT1pJiZcIl9fc3VwZXJfX1wiIT09aSYmKGVbaV09dGhpc1tpXSk7aWYodC5zdGF0aWNzJiZsKGUsdC5zdGF0aWNzKSx0LmluY2x1ZGVzKXt2YXIgcz10LmluY2x1ZGVzO2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBMJiZMJiZMLk1peGluKXtzPWQocyk/czpbc107Zm9yKHZhciByPTA7cjxzLmxlbmd0aDtyKyspc1tyXT09PUwuTWl4aW4uRXZlbnRzJiZjb25zb2xlLndhcm4oXCJEZXByZWNhdGVkIGluY2x1ZGUgb2YgTC5NaXhpbi5FdmVudHM6IHRoaXMgcHJvcGVydHkgd2lsbCBiZSByZW1vdmVkIGluIGZ1dHVyZSByZWxlYXNlcywgcGxlYXNlIGluaGVyaXQgZnJvbSBMLkV2ZW50ZWQgaW5zdGVhZC5cIiwobmV3IEVycm9yKS5zdGFjayl9bC5hcHBseShudWxsLFtvXS5jb25jYXQodC5pbmNsdWRlcykpfXJldHVybiBsKG8sdCksZGVsZXRlIG8uc3RhdGljcyxkZWxldGUgby5pbmNsdWRlcyxvLm9wdGlvbnMmJihvLm9wdGlvbnM9bi5vcHRpb25zP1Iobi5vcHRpb25zKTp7fSxsKG8ub3B0aW9ucyx0Lm9wdGlvbnMpKSxvLl9pbml0SG9va3M9W10sby5jYWxsSW5pdEhvb2tzPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2luaXRIb29rc0NhbGxlZCl7bi5jYWxsSW5pdEhvb2tzJiZuLmNhbGxJbml0SG9va3MuY2FsbCh0aGlzKSx0aGlzLl9pbml0SG9va3NDYWxsZWQ9ITA7Zm9yKHZhciB0PTAsZT1vLl9pbml0SG9va3MubGVuZ3RoO3Q8ZTt0Kyspby5faW5pdEhvb2tzW3RdLmNhbGwodGhpcyl9fSxlfSxldC5pbmNsdWRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucHJvdG90eXBlLm9wdGlvbnM7cmV0dXJuIGwodGhpcy5wcm90b3R5cGUsdCksdC5vcHRpb25zJiYodGhpcy5wcm90b3R5cGUub3B0aW9ucz1lLHRoaXMubWVyZ2VPcHRpb25zKHQub3B0aW9ucykpLHRoaXN9LGV0Lm1lcmdlT3B0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gbCh0aGlzLnByb3RvdHlwZS5vcHRpb25zLHQpLHRoaXN9LGV0LmFkZEluaXRIb29rPWZ1bmN0aW9uKHQpe3ZhciBlPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxpPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpmdW5jdGlvbigpe3RoaXNbdF0uYXBwbHkodGhpcyxlKX07cmV0dXJuIHRoaXMucHJvdG90eXBlLl9pbml0SG9va3M9dGhpcy5wcm90b3R5cGUuX2luaXRIb29rc3x8W10sdGhpcy5wcm90b3R5cGUuX2luaXRIb29rcy5wdXNoKGkpLHRoaXN9O3ZhciBlPXtvbjpmdW5jdGlvbih0LGUsaSl7aWYoXCJvYmplY3RcIj09dHlwZW9mIHQpZm9yKHZhciBuIGluIHQpdGhpcy5fb24obix0W25dLGUpO2Vsc2UgZm9yKHZhciBvPTAscz0odD1GKHQpKS5sZW5ndGg7bzxzO28rKyl0aGlzLl9vbih0W29dLGUsaSk7cmV0dXJuIHRoaXN9LG9mZjpmdW5jdGlvbih0LGUsaSl7aWYoYXJndW1lbnRzLmxlbmd0aClpZihcIm9iamVjdFwiPT10eXBlb2YgdClmb3IodmFyIG4gaW4gdCl0aGlzLl9vZmYobix0W25dLGUpO2Vsc2V7dD1GKHQpO2Zvcih2YXIgbz0xPT09YXJndW1lbnRzLmxlbmd0aCxzPTAscj10Lmxlbmd0aDtzPHI7cysrKW8/dGhpcy5fb2ZmKHRbc10pOnRoaXMuX29mZih0W3NdLGUsaSl9ZWxzZSBkZWxldGUgdGhpcy5fZXZlbnRzO3JldHVybiB0aGlzfSxfb246ZnVuY3Rpb24odCxlLGksbil7XCJmdW5jdGlvblwiIT10eXBlb2YgZT9jb25zb2xlLndhcm4oXCJ3cm9uZyBsaXN0ZW5lciB0eXBlOiBcIit0eXBlb2YgZSk6ITE9PT10aGlzLl9saXN0ZW5zKHQsZSxpKSYmKGU9e2ZuOmUsY3R4Omk9aT09PXRoaXM/dm9pZCAwOml9LG4mJihlLm9uY2U9ITApLHRoaXMuX2V2ZW50cz10aGlzLl9ldmVudHN8fHt9LHRoaXMuX2V2ZW50c1t0XT10aGlzLl9ldmVudHNbdF18fFtdLHRoaXMuX2V2ZW50c1t0XS5wdXNoKGUpKX0sX29mZjpmdW5jdGlvbih0LGUsaSl7dmFyIG4sbyxzO2lmKHRoaXMuX2V2ZW50cyYmKG49dGhpcy5fZXZlbnRzW3RdKSlpZigxPT09YXJndW1lbnRzLmxlbmd0aCl7aWYodGhpcy5fZmlyaW5nQ291bnQpZm9yKG89MCxzPW4ubGVuZ3RoO288cztvKyspbltvXS5mbj11O2RlbGV0ZSB0aGlzLl9ldmVudHNbdF19ZWxzZVwiZnVuY3Rpb25cIiE9dHlwZW9mIGU/Y29uc29sZS53YXJuKFwid3JvbmcgbGlzdGVuZXIgdHlwZTogXCIrdHlwZW9mIGUpOiExIT09KGU9dGhpcy5fbGlzdGVucyh0LGUsaSkpJiYoaT1uW2VdLHRoaXMuX2ZpcmluZ0NvdW50JiYoaS5mbj11LHRoaXMuX2V2ZW50c1t0XT1uPW4uc2xpY2UoKSksbi5zcGxpY2UoZSwxKSl9LGZpcmU6ZnVuY3Rpb24odCxlLGkpe2lmKHRoaXMubGlzdGVucyh0LGkpKXt2YXIgbj1sKHt9LGUse3R5cGU6dCx0YXJnZXQ6dGhpcyxzb3VyY2VUYXJnZXQ6ZSYmZS5zb3VyY2VUYXJnZXR8fHRoaXN9KTtpZih0aGlzLl9ldmVudHMpe3ZhciBvPXRoaXMuX2V2ZW50c1t0XTtpZihvKXt0aGlzLl9maXJpbmdDb3VudD10aGlzLl9maXJpbmdDb3VudCsxfHwxO2Zvcih2YXIgcz0wLHI9by5sZW5ndGg7czxyO3MrKyl7dmFyIGE9b1tzXSxoPWEuZm47YS5vbmNlJiZ0aGlzLm9mZih0LGgsYS5jdHgpLGguY2FsbChhLmN0eHx8dGhpcyxuKX10aGlzLl9maXJpbmdDb3VudC0tfX1pJiZ0aGlzLl9wcm9wYWdhdGVFdmVudChuKX1yZXR1cm4gdGhpc30sbGlzdGVuczpmdW5jdGlvbih0LGUsaSxuKXtcInN0cmluZ1wiIT10eXBlb2YgdCYmY29uc29sZS53YXJuKCdcInN0cmluZ1wiIHR5cGUgYXJndW1lbnQgZXhwZWN0ZWQnKTt2YXIgbz1lLHM9KFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUmJihuPSEhZSxpPW89dm9pZCAwKSx0aGlzLl9ldmVudHMmJnRoaXMuX2V2ZW50c1t0XSk7aWYocyYmcy5sZW5ndGgmJiExIT09dGhpcy5fbGlzdGVucyh0LG8saSkpcmV0dXJuITA7aWYobilmb3IodmFyIHIgaW4gdGhpcy5fZXZlbnRQYXJlbnRzKWlmKHRoaXMuX2V2ZW50UGFyZW50c1tyXS5saXN0ZW5zKHQsZSxpLG4pKXJldHVybiEwO3JldHVybiExfSxfbGlzdGVuczpmdW5jdGlvbih0LGUsaSl7aWYodGhpcy5fZXZlbnRzKXt2YXIgbj10aGlzLl9ldmVudHNbdF18fFtdO2lmKCFlKXJldHVybiEhbi5sZW5ndGg7aT09PXRoaXMmJihpPXZvaWQgMCk7Zm9yKHZhciBvPTAscz1uLmxlbmd0aDtvPHM7bysrKWlmKG5bb10uZm49PT1lJiZuW29dLmN0eD09PWkpcmV0dXJuIG99cmV0dXJuITF9LG9uY2U6ZnVuY3Rpb24odCxlLGkpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiB0KWZvcih2YXIgbiBpbiB0KXRoaXMuX29uKG4sdFtuXSxlLCEwKTtlbHNlIGZvcih2YXIgbz0wLHM9KHQ9Rih0KSkubGVuZ3RoO288cztvKyspdGhpcy5fb24odFtvXSxlLGksITApO3JldHVybiB0aGlzfSxhZGRFdmVudFBhcmVudDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZXZlbnRQYXJlbnRzPXRoaXMuX2V2ZW50UGFyZW50c3x8e30sdGhpcy5fZXZlbnRQYXJlbnRzW2godCldPXQsdGhpc30scmVtb3ZlRXZlbnRQYXJlbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2V2ZW50UGFyZW50cyYmZGVsZXRlIHRoaXMuX2V2ZW50UGFyZW50c1toKHQpXSx0aGlzfSxfcHJvcGFnYXRlRXZlbnQ6ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuX2V2ZW50UGFyZW50cyl0aGlzLl9ldmVudFBhcmVudHNbZV0uZmlyZSh0LnR5cGUsbCh7bGF5ZXI6dC50YXJnZXQscHJvcGFnYXRlZEZyb206dC50YXJnZXR9LHQpLCEwKX19LGl0PShlLmFkZEV2ZW50TGlzdGVuZXI9ZS5vbixlLnJlbW92ZUV2ZW50TGlzdGVuZXI9ZS5jbGVhckFsbEV2ZW50TGlzdGVuZXJzPWUub2ZmLGUuYWRkT25lVGltZUV2ZW50TGlzdGVuZXI9ZS5vbmNlLGUuZmlyZUV2ZW50PWUuZmlyZSxlLmhhc0V2ZW50TGlzdGVuZXJzPWUubGlzdGVucyxldC5leHRlbmQoZSkpO2Z1bmN0aW9uIHAodCxlLGkpe3RoaXMueD1pP01hdGgucm91bmQodCk6dCx0aGlzLnk9aT9NYXRoLnJvdW5kKGUpOmV9dmFyIG50PU1hdGgudHJ1bmN8fGZ1bmN0aW9uKHQpe3JldHVybiAwPHQ/TWF0aC5mbG9vcih0KTpNYXRoLmNlaWwodCl9O2Z1bmN0aW9uIG0odCxlLGkpe3JldHVybiB0IGluc3RhbmNlb2YgcD90OmQodCk/bmV3IHAodFswXSx0WzFdKTpudWxsPT10P3Q6XCJvYmplY3RcIj09dHlwZW9mIHQmJlwieFwiaW4gdCYmXCJ5XCJpbiB0P25ldyBwKHQueCx0LnkpOm5ldyBwKHQsZSxpKX1mdW5jdGlvbiBmKHQsZSl7aWYodClmb3IodmFyIGk9ZT9bdCxlXTp0LG49MCxvPWkubGVuZ3RoO248bztuKyspdGhpcy5leHRlbmQoaVtuXSl9ZnVuY3Rpb24gXyh0LGUpe3JldHVybiF0fHx0IGluc3RhbmNlb2YgZj90Om5ldyBmKHQsZSl9ZnVuY3Rpb24gcyh0LGUpe2lmKHQpZm9yKHZhciBpPWU/W3QsZV06dCxuPTAsbz1pLmxlbmd0aDtuPG87bisrKXRoaXMuZXh0ZW5kKGlbbl0pfWZ1bmN0aW9uIGcodCxlKXtyZXR1cm4gdCBpbnN0YW5jZW9mIHM/dDpuZXcgcyh0LGUpfWZ1bmN0aW9uIHYodCxlLGkpe2lmKGlzTmFOKHQpfHxpc05hTihlKSl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIExhdExuZyBvYmplY3Q6IChcIit0K1wiLCBcIitlK1wiKVwiKTt0aGlzLmxhdD0rdCx0aGlzLmxuZz0rZSx2b2lkIDAhPT1pJiYodGhpcy5hbHQ9K2kpfWZ1bmN0aW9uIHcodCxlLGkpe3JldHVybiB0IGluc3RhbmNlb2Ygdj90OmQodCkmJlwib2JqZWN0XCIhPXR5cGVvZiB0WzBdPzM9PT10Lmxlbmd0aD9uZXcgdih0WzBdLHRbMV0sdFsyXSk6Mj09PXQubGVuZ3RoP25ldyB2KHRbMF0sdFsxXSk6bnVsbDpudWxsPT10P3Q6XCJvYmplY3RcIj09dHlwZW9mIHQmJlwibGF0XCJpbiB0P25ldyB2KHQubGF0LFwibG5nXCJpbiB0P3QubG5nOnQubG9uLHQuYWx0KTp2b2lkIDA9PT1lP251bGw6bmV3IHYodCxlLGkpfXAucHJvdG90eXBlPXtjbG9uZTpmdW5jdGlvbigpe3JldHVybiBuZXcgcCh0aGlzLngsdGhpcy55KX0sYWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX2FkZChtKHQpKX0sX2FkZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpc30sc3VidHJhY3Q6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fc3VidHJhY3QobSh0KSl9LF9zdWJ0cmFjdDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54LT10LngsdGhpcy55LT10LnksdGhpc30sZGl2aWRlQnk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fZGl2aWRlQnkodCl9LF9kaXZpZGVCeTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54Lz10LHRoaXMueS89dCx0aGlzfSxtdWx0aXBseUJ5OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX211bHRpcGx5QnkodCl9LF9tdWx0aXBseUJ5OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLngqPXQsdGhpcy55Kj10LHRoaXN9LHNjYWxlQnk6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBwKHRoaXMueCp0LngsdGhpcy55KnQueSl9LHVuc2NhbGVCeTpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IHAodGhpcy54L3QueCx0aGlzLnkvdC55KX0scm91bmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9yb3VuZCgpfSxfcm91bmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54PU1hdGgucm91bmQodGhpcy54KSx0aGlzLnk9TWF0aC5yb3VuZCh0aGlzLnkpLHRoaXN9LGZsb29yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fZmxvb3IoKX0sX2Zsb29yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueD1NYXRoLmZsb29yKHRoaXMueCksdGhpcy55PU1hdGguZmxvb3IodGhpcy55KSx0aGlzfSxjZWlsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fY2VpbCgpfSxfY2VpbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLng9TWF0aC5jZWlsKHRoaXMueCksdGhpcy55PU1hdGguY2VpbCh0aGlzLnkpLHRoaXN9LHRydW5jOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fdHJ1bmMoKX0sX3RydW5jOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueD1udCh0aGlzLngpLHRoaXMueT1udCh0aGlzLnkpLHRoaXN9LGRpc3RhbmNlVG86ZnVuY3Rpb24odCl7dmFyIGU9KHQ9bSh0KSkueC10aGlzLngsdD10LnktdGhpcy55O3JldHVybiBNYXRoLnNxcnQoZSplK3QqdCl9LGVxdWFsczpmdW5jdGlvbih0KXtyZXR1cm4odD1tKHQpKS54PT09dGhpcy54JiZ0Lnk9PT10aGlzLnl9LGNvbnRhaW5zOmZ1bmN0aW9uKHQpe3JldHVybiB0PW0odCksTWF0aC5hYnModC54KTw9TWF0aC5hYnModGhpcy54KSYmTWF0aC5hYnModC55KTw9TWF0aC5hYnModGhpcy55KX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm5cIlBvaW50KFwiK2kodGhpcy54KStcIiwgXCIraSh0aGlzLnkpK1wiKVwifX0sZi5wcm90b3R5cGU9e2V4dGVuZDpmdW5jdGlvbih0KXt2YXIgZSxpO2lmKHQpe2lmKHQgaW5zdGFuY2VvZiBwfHxcIm51bWJlclwiPT10eXBlb2YgdFswXXx8XCJ4XCJpbiB0KWU9aT1tKHQpO2Vsc2UgaWYoZT0odD1fKHQpKS5taW4saT10Lm1heCwhZXx8IWkpcmV0dXJuIHRoaXM7dGhpcy5taW58fHRoaXMubWF4Pyh0aGlzLm1pbi54PU1hdGgubWluKGUueCx0aGlzLm1pbi54KSx0aGlzLm1heC54PU1hdGgubWF4KGkueCx0aGlzLm1heC54KSx0aGlzLm1pbi55PU1hdGgubWluKGUueSx0aGlzLm1pbi55KSx0aGlzLm1heC55PU1hdGgubWF4KGkueSx0aGlzLm1heC55KSk6KHRoaXMubWluPWUuY2xvbmUoKSx0aGlzLm1heD1pLmNsb25lKCkpfXJldHVybiB0aGlzfSxnZXRDZW50ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG0oKHRoaXMubWluLngrdGhpcy5tYXgueCkvMiwodGhpcy5taW4ueSt0aGlzLm1heC55KS8yLHQpfSxnZXRCb3R0b21MZWZ0OmZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5taW4ueCx0aGlzLm1heC55KX0sZ2V0VG9wUmlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLm1heC54LHRoaXMubWluLnkpfSxnZXRUb3BMZWZ0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWlufSxnZXRCb3R0b21SaWdodDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1heH0sZ2V0U2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1heC5zdWJ0cmFjdCh0aGlzLm1pbil9LGNvbnRhaW5zOmZ1bmN0aW9uKHQpe3ZhciBlLGk7cmV0dXJuKHQ9KFwibnVtYmVyXCI9PXR5cGVvZiB0WzBdfHx0IGluc3RhbmNlb2YgcD9tOl8pKHQpKWluc3RhbmNlb2YgZj8oZT10Lm1pbixpPXQubWF4KTplPWk9dCxlLng+PXRoaXMubWluLngmJmkueDw9dGhpcy5tYXgueCYmZS55Pj10aGlzLm1pbi55JiZpLnk8PXRoaXMubWF4Lnl9LGludGVyc2VjdHM6ZnVuY3Rpb24odCl7dD1fKHQpO3ZhciBlPXRoaXMubWluLGk9dGhpcy5tYXgsbj10Lm1pbix0PXQubWF4LG89dC54Pj1lLngmJm4ueDw9aS54LHQ9dC55Pj1lLnkmJm4ueTw9aS55O3JldHVybiBvJiZ0fSxvdmVybGFwczpmdW5jdGlvbih0KXt0PV8odCk7dmFyIGU9dGhpcy5taW4saT10aGlzLm1heCxuPXQubWluLHQ9dC5tYXgsbz10Lng+ZS54JiZuLng8aS54LHQ9dC55PmUueSYmbi55PGkueTtyZXR1cm4gbyYmdH0saXNWYWxpZDpmdW5jdGlvbigpe3JldHVybiEoIXRoaXMubWlufHwhdGhpcy5tYXgpfSxwYWQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5taW4saT10aGlzLm1heCxuPU1hdGguYWJzKGUueC1pLngpKnQsdD1NYXRoLmFicyhlLnktaS55KSp0O3JldHVybiBfKG0oZS54LW4sZS55LXQpLG0oaS54K24saS55K3QpKX0sZXF1YWxzOmZ1bmN0aW9uKHQpe3JldHVybiEhdCYmKHQ9Xyh0KSx0aGlzLm1pbi5lcXVhbHModC5nZXRUb3BMZWZ0KCkpJiZ0aGlzLm1heC5lcXVhbHModC5nZXRCb3R0b21SaWdodCgpKSl9fSxzLnByb3RvdHlwZT17ZXh0ZW5kOmZ1bmN0aW9uKHQpe3ZhciBlLGksbj10aGlzLl9zb3V0aFdlc3Qsbz10aGlzLl9ub3J0aEVhc3Q7aWYodCBpbnN0YW5jZW9mIHYpaT1lPXQ7ZWxzZXtpZighKHQgaW5zdGFuY2VvZiBzKSlyZXR1cm4gdD90aGlzLmV4dGVuZCh3KHQpfHxnKHQpKTp0aGlzO2lmKGU9dC5fc291dGhXZXN0LGk9dC5fbm9ydGhFYXN0LCFlfHwhaSlyZXR1cm4gdGhpc31yZXR1cm4gbnx8bz8obi5sYXQ9TWF0aC5taW4oZS5sYXQsbi5sYXQpLG4ubG5nPU1hdGgubWluKGUubG5nLG4ubG5nKSxvLmxhdD1NYXRoLm1heChpLmxhdCxvLmxhdCksby5sbmc9TWF0aC5tYXgoaS5sbmcsby5sbmcpKToodGhpcy5fc291dGhXZXN0PW5ldyB2KGUubGF0LGUubG5nKSx0aGlzLl9ub3J0aEVhc3Q9bmV3IHYoaS5sYXQsaS5sbmcpKSx0aGlzfSxwYWQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fc291dGhXZXN0LGk9dGhpcy5fbm9ydGhFYXN0LG49TWF0aC5hYnMoZS5sYXQtaS5sYXQpKnQsdD1NYXRoLmFicyhlLmxuZy1pLmxuZykqdDtyZXR1cm4gbmV3IHMobmV3IHYoZS5sYXQtbixlLmxuZy10KSxuZXcgdihpLmxhdCtuLGkubG5nK3QpKX0sZ2V0Q2VudGVyOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB2KCh0aGlzLl9zb3V0aFdlc3QubGF0K3RoaXMuX25vcnRoRWFzdC5sYXQpLzIsKHRoaXMuX3NvdXRoV2VzdC5sbmcrdGhpcy5fbm9ydGhFYXN0LmxuZykvMil9LGdldFNvdXRoV2VzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zb3V0aFdlc3R9LGdldE5vcnRoRWFzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9ub3J0aEVhc3R9LGdldE5vcnRoV2VzdDpmdW5jdGlvbigpe3JldHVybiBuZXcgdih0aGlzLmdldE5vcnRoKCksdGhpcy5nZXRXZXN0KCkpfSxnZXRTb3V0aEVhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHYodGhpcy5nZXRTb3V0aCgpLHRoaXMuZ2V0RWFzdCgpKX0sZ2V0V2VzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zb3V0aFdlc3QubG5nfSxnZXRTb3V0aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zb3V0aFdlc3QubGF0fSxnZXRFYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25vcnRoRWFzdC5sbmd9LGdldE5vcnRoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25vcnRoRWFzdC5sYXR9LGNvbnRhaW5zOmZ1bmN0aW9uKHQpe3Q9KFwibnVtYmVyXCI9PXR5cGVvZiB0WzBdfHx0IGluc3RhbmNlb2Ygdnx8XCJsYXRcImluIHQ/dzpnKSh0KTt2YXIgZSxpLG49dGhpcy5fc291dGhXZXN0LG89dGhpcy5fbm9ydGhFYXN0O3JldHVybiB0IGluc3RhbmNlb2Ygcz8oZT10LmdldFNvdXRoV2VzdCgpLGk9dC5nZXROb3J0aEVhc3QoKSk6ZT1pPXQsZS5sYXQ+PW4ubGF0JiZpLmxhdDw9by5sYXQmJmUubG5nPj1uLmxuZyYmaS5sbmc8PW8ubG5nfSxpbnRlcnNlY3RzOmZ1bmN0aW9uKHQpe3Q9Zyh0KTt2YXIgZT10aGlzLl9zb3V0aFdlc3QsaT10aGlzLl9ub3J0aEVhc3Qsbj10LmdldFNvdXRoV2VzdCgpLHQ9dC5nZXROb3J0aEVhc3QoKSxvPXQubGF0Pj1lLmxhdCYmbi5sYXQ8PWkubGF0LHQ9dC5sbmc+PWUubG5nJiZuLmxuZzw9aS5sbmc7cmV0dXJuIG8mJnR9LG92ZXJsYXBzOmZ1bmN0aW9uKHQpe3Q9Zyh0KTt2YXIgZT10aGlzLl9zb3V0aFdlc3QsaT10aGlzLl9ub3J0aEVhc3Qsbj10LmdldFNvdXRoV2VzdCgpLHQ9dC5nZXROb3J0aEVhc3QoKSxvPXQubGF0PmUubGF0JiZuLmxhdDxpLmxhdCx0PXQubG5nPmUubG5nJiZuLmxuZzxpLmxuZztyZXR1cm4gbyYmdH0sdG9CQm94U3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuW3RoaXMuZ2V0V2VzdCgpLHRoaXMuZ2V0U291dGgoKSx0aGlzLmdldEVhc3QoKSx0aGlzLmdldE5vcnRoKCldLmpvaW4oXCIsXCIpfSxlcXVhbHM6ZnVuY3Rpb24odCxlKXtyZXR1cm4hIXQmJih0PWcodCksdGhpcy5fc291dGhXZXN0LmVxdWFscyh0LmdldFNvdXRoV2VzdCgpLGUpJiZ0aGlzLl9ub3J0aEVhc3QuZXF1YWxzKHQuZ2V0Tm9ydGhFYXN0KCksZSkpfSxpc1ZhbGlkOmZ1bmN0aW9uKCl7cmV0dXJuISghdGhpcy5fc291dGhXZXN0fHwhdGhpcy5fbm9ydGhFYXN0KX19O3ZhciBvdD17bGF0TG5nVG9Qb2ludDpmdW5jdGlvbih0LGUpe3Q9dGhpcy5wcm9qZWN0aW9uLnByb2plY3QodCksZT10aGlzLnNjYWxlKGUpO3JldHVybiB0aGlzLnRyYW5zZm9ybWF0aW9uLl90cmFuc2Zvcm0odCxlKX0scG9pbnRUb0xhdExuZzpmdW5jdGlvbih0LGUpe2U9dGhpcy5zY2FsZShlKSx0PXRoaXMudHJhbnNmb3JtYXRpb24udW50cmFuc2Zvcm0odCxlKTtyZXR1cm4gdGhpcy5wcm9qZWN0aW9uLnVucHJvamVjdCh0KX0scHJvamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcm9qZWN0aW9uLnByb2plY3QodCl9LHVucHJvamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcm9qZWN0aW9uLnVucHJvamVjdCh0KX0sc2NhbGU6ZnVuY3Rpb24odCl7cmV0dXJuIDI1NipNYXRoLnBvdygyLHQpfSx6b29tOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0LzI1NikvTWF0aC5MTjJ9LGdldFByb2plY3RlZEJvdW5kczpmdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4gdGhpcy5pbmZpbml0ZT9udWxsOihlPXRoaXMucHJvamVjdGlvbi5ib3VuZHMsdD10aGlzLnNjYWxlKHQpLG5ldyBmKHRoaXMudHJhbnNmb3JtYXRpb24udHJhbnNmb3JtKGUubWluLHQpLHRoaXMudHJhbnNmb3JtYXRpb24udHJhbnNmb3JtKGUubWF4LHQpKSl9LGluZmluaXRlOiEodi5wcm90b3R5cGU9e2VxdWFsczpmdW5jdGlvbih0LGUpe3JldHVybiEhdCYmKHQ9dyh0KSxNYXRoLm1heChNYXRoLmFicyh0aGlzLmxhdC10LmxhdCksTWF0aC5hYnModGhpcy5sbmctdC5sbmcpKTw9KHZvaWQgMD09PWU/MWUtOTplKSl9LHRvU3RyaW5nOmZ1bmN0aW9uKHQpe3JldHVyblwiTGF0TG5nKFwiK2kodGhpcy5sYXQsdCkrXCIsIFwiK2kodGhpcy5sbmcsdCkrXCIpXCJ9LGRpc3RhbmNlVG86ZnVuY3Rpb24odCl7cmV0dXJuIHN0LmRpc3RhbmNlKHRoaXMsdyh0KSl9LHdyYXA6ZnVuY3Rpb24oKXtyZXR1cm4gc3Qud3JhcExhdExuZyh0aGlzKX0sdG9Cb3VuZHM6ZnVuY3Rpb24odCl7dmFyIHQ9MTgwKnQvNDAwNzUwMTcsZT10L01hdGguY29zKE1hdGguUEkvMTgwKnRoaXMubGF0KTtyZXR1cm4gZyhbdGhpcy5sYXQtdCx0aGlzLmxuZy1lXSxbdGhpcy5sYXQrdCx0aGlzLmxuZytlXSl9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB2KHRoaXMubGF0LHRoaXMubG5nLHRoaXMuYWx0KX19KSx3cmFwTGF0TG5nOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMud3JhcExuZz9IKHQubG5nLHRoaXMud3JhcExuZywhMCk6dC5sbmc7cmV0dXJuIG5ldyB2KHRoaXMud3JhcExhdD9IKHQubGF0LHRoaXMud3JhcExhdCwhMCk6dC5sYXQsZSx0LmFsdCl9LHdyYXBMYXRMbmdCb3VuZHM6ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRDZW50ZXIoKSxpPXRoaXMud3JhcExhdExuZyhlKSxuPWUubGF0LWkubGF0LGU9ZS5sbmctaS5sbmc7cmV0dXJuIDA9PW4mJjA9PWU/dDooaT10LmdldFNvdXRoV2VzdCgpLHQ9dC5nZXROb3J0aEVhc3QoKSxuZXcgcyhuZXcgdihpLmxhdC1uLGkubG5nLWUpLG5ldyB2KHQubGF0LW4sdC5sbmctZSkpKX19LHN0PWwoe30sb3Qse3dyYXBMbmc6Wy0xODAsMTgwXSxSOjYzNzFlMyxkaXN0YW5jZTpmdW5jdGlvbih0LGUpe3ZhciBpPU1hdGguUEkvMTgwLG49dC5sYXQqaSxvPWUubGF0Kmkscz1NYXRoLnNpbigoZS5sYXQtdC5sYXQpKmkvMiksZT1NYXRoLnNpbigoZS5sbmctdC5sbmcpKmkvMiksdD1zKnMrTWF0aC5jb3MobikqTWF0aC5jb3MobykqZSplLGk9MipNYXRoLmF0YW4yKE1hdGguc3FydCh0KSxNYXRoLnNxcnQoMS10KSk7cmV0dXJuIHRoaXMuUippfX0pLHJ0PTYzNzgxMzcscnQ9e1I6cnQsTUFYX0xBVElUVURFOjg1LjA1MTEyODc3OTgscHJvamVjdDpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLlBJLzE4MCxpPXRoaXMuTUFYX0xBVElUVURFLGk9TWF0aC5tYXgoTWF0aC5taW4oaSx0LmxhdCksLWkpLGk9TWF0aC5zaW4oaSplKTtyZXR1cm4gbmV3IHAodGhpcy5SKnQubG5nKmUsdGhpcy5SKk1hdGgubG9nKCgxK2kpLygxLWkpKS8yKX0sdW5wcm9qZWN0OmZ1bmN0aW9uKHQpe3ZhciBlPTE4MC9NYXRoLlBJO3JldHVybiBuZXcgdigoMipNYXRoLmF0YW4oTWF0aC5leHAodC55L3RoaXMuUikpLU1hdGguUEkvMikqZSx0LngqZS90aGlzLlIpfSxib3VuZHM6bmV3IGYoWy0ocnQ9cnQqTWF0aC5QSSksLXJ0XSxbcnQscnRdKX07ZnVuY3Rpb24gYXQodCxlLGksbil7ZCh0KT8odGhpcy5fYT10WzBdLHRoaXMuX2I9dFsxXSx0aGlzLl9jPXRbMl0sdGhpcy5fZD10WzNdKToodGhpcy5fYT10LHRoaXMuX2I9ZSx0aGlzLl9jPWksdGhpcy5fZD1uKX1mdW5jdGlvbiBodCh0LGUsaSxuKXtyZXR1cm4gbmV3IGF0KHQsZSxpLG4pfWF0LnByb3RvdHlwZT17dHJhbnNmb3JtOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3RyYW5zZm9ybSh0LmNsb25lKCksZSl9LF90cmFuc2Zvcm06ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC54PShlPWV8fDEpKih0aGlzLl9hKnQueCt0aGlzLl9iKSx0Lnk9ZSoodGhpcy5fYyp0LnkrdGhpcy5fZCksdH0sdW50cmFuc2Zvcm06ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IHAoKHQueC8oZT1lfHwxKS10aGlzLl9iKS90aGlzLl9hLCh0LnkvZS10aGlzLl9kKS90aGlzLl9jKX19O3ZhciBsdD1sKHt9LHN0LHtjb2RlOlwiRVBTRzozODU3XCIscHJvamVjdGlvbjpydCx0cmFuc2Zvcm1hdGlvbjpodChsdD0uNS8oTWF0aC5QSSpydC5SKSwuNSwtbHQsLjUpfSksdXQ9bCh7fSxsdCx7Y29kZTpcIkVQU0c6OTAwOTEzXCJ9KTtmdW5jdGlvbiBjdCh0KXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIix0KX1mdW5jdGlvbiBkdCh0LGUpe2Zvcih2YXIgaSxuLG8scyxyPVwiXCIsYT0wLGg9dC5sZW5ndGg7YTxoO2ErKyl7Zm9yKGk9MCxuPShvPXRbYV0pLmxlbmd0aDtpPG47aSsrKXIrPShpP1wiTFwiOlwiTVwiKSsocz1vW2ldKS54K1wiIFwiK3MueTtyKz1lP2Iuc3ZnP1wielwiOlwieFwiOlwiXCJ9cmV0dXJuIHJ8fFwiTTAgMFwifXZhciBfdD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUscHQ9XCJBY3RpdmVYT2JqZWN0XCJpbiB3aW5kb3csbXQ9cHQmJiFkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyLG49XCJtc0xhdW5jaFVyaVwiaW4gbmF2aWdhdG9yJiYhKFwiZG9jdW1lbnRNb2RlXCJpbiBkb2N1bWVudCksZnQ9eShcIndlYmtpdFwiKSxndD15KFwiYW5kcm9pZFwiKSx2dD15KFwiYW5kcm9pZCAyXCIpfHx5KFwiYW5kcm9pZCAzXCIpLHl0PXBhcnNlSW50KC9XZWJLaXRcXC8oWzAtOV0rKXwkLy5leGVjKG5hdmlnYXRvci51c2VyQWdlbnQpWzFdLDEwKSx5dD1ndCYmeShcIkdvb2dsZVwiKSYmeXQ8NTM3JiYhKFwiQXVkaW9Ob2RlXCJpbiB3aW5kb3cpLHh0PSEhd2luZG93Lm9wZXJhLHd0PSFuJiZ5KFwiY2hyb21lXCIpLGJ0PXkoXCJnZWNrb1wiKSYmIWZ0JiYheHQmJiFwdCxQdD0hd3QmJnkoXCJzYWZhcmlcIiksTHQ9eShcInBoYW50b21cIiksbz1cIk9UcmFuc2l0aW9uXCJpbiBfdCxUdD0wPT09bmF2aWdhdG9yLnBsYXRmb3JtLmluZGV4T2YoXCJXaW5cIiksTXQ9cHQmJlwidHJhbnNpdGlvblwiaW4gX3QsenQ9XCJXZWJLaXRDU1NNYXRyaXhcImluIHdpbmRvdyYmXCJtMTFcImluIG5ldyB3aW5kb3cuV2ViS2l0Q1NTTWF0cml4JiYhdnQsX3Q9XCJNb3pQZXJzcGVjdGl2ZVwiaW4gX3QsQ3Q9IXdpbmRvdy5MX0RJU0FCTEVfM0QmJihNdHx8enR8fF90KSYmIW8mJiFMdCxadD1cInVuZGVmaW5lZFwiIT10eXBlb2Ygb3JpZW50YXRpb258fHkoXCJtb2JpbGVcIiksU3Q9WnQmJmZ0LEV0PVp0JiZ6dCxrdD0hd2luZG93LlBvaW50ZXJFdmVudCYmd2luZG93Lk1TUG9pbnRlckV2ZW50LE90PSEoIXdpbmRvdy5Qb2ludGVyRXZlbnQmJiFrdCksQXQ9XCJvbnRvdWNoc3RhcnRcImluIHdpbmRvd3x8ISF3aW5kb3cuVG91Y2hFdmVudCxCdD0hd2luZG93LkxfTk9fVE9VQ0gmJihBdHx8T3QpLEl0PVp0JiZ4dCxSdD1adCYmYnQsTnQ9MTwod2luZG93LmRldmljZVBpeGVsUmF0aW98fHdpbmRvdy5zY3JlZW4uZGV2aWNlWERQSS93aW5kb3cuc2NyZWVuLmxvZ2ljYWxYRFBJKSxEdD1mdW5jdGlvbigpe3ZhciB0PSExO3RyeXt2YXIgZT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sXCJwYXNzaXZlXCIse2dldDpmdW5jdGlvbigpe3Q9ITB9fSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJ0ZXN0UGFzc2l2ZUV2ZW50U3VwcG9ydFwiLHUsZSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0ZXN0UGFzc2l2ZUV2ZW50U3VwcG9ydFwiLHUsZSl9Y2F0Y2godCl7fXJldHVybiB0fSgpLGp0PSEhZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKS5nZXRDb250ZXh0LEh0PSEoIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROU3x8IWN0KFwic3ZnXCIpLmNyZWF0ZVNWR1JlY3QpLFd0PSEhSHQmJigoV3Q9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSkuaW5uZXJIVE1MPVwiPHN2Zy8+XCIsXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPT09KFd0LmZpcnN0Q2hpbGQmJld0LmZpcnN0Q2hpbGQubmFtZXNwYWNlVVJJKSk7ZnVuY3Rpb24geSh0KXtyZXR1cm4gMDw9bmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YodCl9dmFyIGI9e2llOnB0LGllbHQ5Om10LGVkZ2U6bix3ZWJraXQ6ZnQsYW5kcm9pZDpndCxhbmRyb2lkMjM6dnQsYW5kcm9pZFN0b2NrOnl0LG9wZXJhOnh0LGNocm9tZTp3dCxnZWNrbzpidCxzYWZhcmk6UHQscGhhbnRvbTpMdCxvcGVyYTEyOm8sd2luOlR0LGllM2Q6TXQsd2Via2l0M2Q6enQsZ2Vja28zZDpfdCxhbnkzZDpDdCxtb2JpbGU6WnQsbW9iaWxlV2Via2l0OlN0LG1vYmlsZVdlYmtpdDNkOkV0LG1zUG9pbnRlcjprdCxwb2ludGVyOk90LHRvdWNoOkJ0LHRvdWNoTmF0aXZlOkF0LG1vYmlsZU9wZXJhOkl0LG1vYmlsZUdlY2tvOlJ0LHJldGluYTpOdCxwYXNzaXZlRXZlbnRzOkR0LGNhbnZhczpqdCxzdmc6SHQsdm1sOiFIdCYmZnVuY3Rpb24oKXt0cnl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSxlPSh0LmlubmVySFRNTD0nPHY6c2hhcGUgYWRqPVwiMVwiLz4nLHQuZmlyc3RDaGLSDkZCk7cmV0dXJuIGUuc3R5bGUuYmVoYXZpb3I9XCJ1cmwoI2RlZmF1bHQjVk1MKVwiLGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlLmFkan1jYXRjaCh0KXtyZXR1cm4hMX19KCksaW5saW5lU3ZnOld0LG1hYzowPT09bmF2aWdhdG9yLnBsYXRmb3JtLmluZGV4T2YoXCJNYWNcIiksbGludXg6MD09PW5hdmlnYXRvci5wbGF0Zm9ybS5pbmRleE9mKFwiTGludXhcIil9LEZ0PWIubXNQb2ludGVyP1wiTVNQb2ludGVyRG93blwiOlwicG9pbnRlcmRvd25cIixVdD1iLm1zUG9pbnRlcj9cIk1TUG9pbnRlck1vdmVcIjpcInBvaW50ZXJtb3ZlXCIsVnQ9Yi5tc1BvaW50ZXI/XCJNU1BvaW50ZXJVcFwiOlwicG9pbnRlcnVwXCIscXQ9Yi5tc1BvaW50ZXI/XCJNU1BvaW50ZXJDYW5jZWxcIjpcInBvaW50ZXJjYW5jZWxcIixHdD17dG91Y2hzdGFydDpGdCx0b3VjaG1vdmU6VXQsdG91Y2hlbmQ6VnQsdG91Y2hjYW5jZWw6cXR9LEt0PXt0b3VjaHN0YXJ0OmZ1bmN0aW9uKHQsZSl7ZS5NU1BPSU5URVJfVFlQRV9UT1VDSCYmZS5wb2ludGVyVHlwZT09PWUuTVNQT0lOVEVSX1RZUEVfVE9VQ0gmJk8oZSk7ZWUodCxlKX0sdG91Y2htb3ZlOmVlLHRvdWNoZW5kOmVlLHRvdWNoY2FuY2VsOmVlfSxZdD17fSxYdD0hMTtmdW5jdGlvbiBKdCh0LGUsaSl7cmV0dXJuXCJ0b3VjaHN0YXJ0XCIhPT1lfHxYdHx8KGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoRnQsJHQsITApLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoVXQsUXQsITApLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoVnQsdGUsITApLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIocXQsdGUsITApLFh0PSEwKSxLdFtlXT8oaT1LdFtlXS5iaW5kKHRoaXMsaSksdC5hZGRFdmVudExpc3RlbmVyKEd0W2VdLGksITEpLGkpOihjb25zb2xlLndhcm4oXCJ3cm9uZyBldmVudCBzcGVjaWZpZWQ6XCIsZSksdSl9ZnVuY3Rpb24gJHQodCl7WXRbdC5wb2ludGVySWRdPXR9ZnVuY3Rpb24gUXQodCl7WXRbdC5wb2ludGVySWRdJiYoWXRbdC5wb2ludGVySWRdPXQpfWZ1bmN0aW9uIHRlKHQpe2RlbGV0ZSBZdFt0LnBvaW50ZXJJZF19ZnVuY3Rpb24gZWUodCxlKXtpZihlLnBvaW50ZXJUeXBlIT09KGUuTVNQT0lOVEVSX1RZUEVfTU9VU0V8fFwibW91c2VcIikpe2Zvcih2YXIgaSBpbiBlLnRvdWNoZXM9W10sWXQpZS50b3VjaGVzLnB1c2goWXRbaV0pO2UuY2hhbmdlZFRvdWNoZXM9W2VdLHQoZSl9fXZhciBpZT0yMDA7ZnVuY3Rpb24gbmUodCxpKXt0LmFkZEV2ZW50TGlzdGVuZXIoXCJkYmxjbGlja1wiLGkpO3ZhciBuLG89MDtmdW5jdGlvbiBlKHQpe3ZhciBlOzEhPT10LmRldGFpbD9uPXQuZGV0YWlsOlwibW91c2VcIj09PXQucG9pbnRlclR5cGV8fHQuc291cmNlQ2FwYWJpbGl0aWVzJiYhdC5zb3VyY2VDYXBhYmlsaXRpZXMuZmlyZXNUb3VjaEV2ZW50c3x8KChlPU5lKHQpKS5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgSFRNTExhYmVsRWxlbWVudCYmdC5hdHRyaWJ1dGVzLmZvcn0pJiYhZS5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudHx8dCBpbnN0YW5jZW9mIEhUTUxTZWxlY3RFbGVtZW50fSl8fCgoZT1EYXRlLm5vdygpKS1vPD1pZT8yPT09KytuJiZpKGZ1bmN0aW9uKHQpe3ZhciBlLGksbj17fTtmb3IoaSBpbiB0KWU9dFtpXSxuW2ldPWUmJmUuYmluZD9lLmJpbmQodCk6ZTtyZXR1cm4odD1uKS50eXBlPVwiZGJsY2xpY2tcIixuLmRldGFpbD0yLG4uaXNUcnVzdGVkPSExLG4uX3NpbXVsYXRlZD0hMCxufSh0KSk6bj0xLG89ZSkpfXJldHVybiB0LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLGUpLHtkYmxjbGljazppLHNpbURibGNsaWNrOmV9fXZhciBvZSxzZSxyZSxhZSxoZSxsZSx1ZT13ZShbXCJ0cmFuc2Zvcm1cIixcIndlYmtpdFRyYW5zZm9ybVwiLFwiT1RyYW5zZm9ybVwiLFwiTW96VHJhbnNmb3JtXCIsXCJtc1RyYW5zZm9ybVwiXSksY2U9d2UoW1wid2Via2l0VHJhbnNpdGlvblwiLFwidHJhbnNpdGlvblwiLFwiT1RyYW5zaXRpb25cIixcIk1velRyYW5zaXRpb25cIixcIm1zVHJhbnNpdGlvblwiXSksZGU9XCJ3ZWJraXRUcmFuc2l0aW9uXCI9PT1jZXx8XCJPVHJhbnNpdGlvblwiPT09Y2U/Y2UrXCJFbmRcIjpcInRyYW5zaXRpb25lbmRcIjtmdW5jdGlvbiBfZSh0KXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdD9kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0KTp0fWZ1bmN0aW9uIHBlKHQsZSl7dmFyIGk9dC5zdHlsZVtlXXx8dC5jdXJyZW50U3R5bGUmJnQuY3VycmVudFN0eWxlW2VdO3JldHVyblwiYXV0b1wiPT09KGk9aSYmXCJhdXRvXCIhPT1pfHwhZG9jdW1lbnQuZGVmYXVsdFZpZXc/aToodD1kb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKHQsbnVsbCkpP3RbZV06bnVsbCk/bnVsbDppfWZ1bmN0aW9uIFAodCxlLGkpe3Q9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0KTtyZXR1cm4gdC5jbGFzc05hbWU9ZXx8XCJcIixpJiZpLmFwcGVuZENoaWxkKHQpLHR9ZnVuY3Rpb24gVCh0KXt2YXIgZT10LnBhcmVudE5vZGU7ZSYmZS5yZW1vdmVDaGLSDkZCh0KX1mdW5jdGlvbiBtZSh0KXtmb3IoO3QuZmlyc3RDaGLSDkZDspdC5yZW1vdmVDaGLSDkZCh0LmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIGZlKHQpe3ZhciBlPXQucGFyZW50Tm9kZTtlJiZlLmxhc3RDaGLSDkZCE9PXQmJmUuYXBwZW5kQ2hpbGQodCl9ZnVuY3Rpb24gZ2UodCl7dmFyIGU9dC5wYXJlbnROb2RlO2UmJmUuZmlyc3RDaGLSDkZCE9PXQmJmUuaW5zZXJ0QmVmb3JlKHQsZS5maXJzdENoaWxkKX1mdW5jdGlvbiB2ZSh0LGUpe3JldHVybiB2b2lkIDAhPT10LmNsYXNzTGlzdD90LmNsYXNzTGlzdC5jb250YWlucyhlKTowPCh0PXhlKHQpKS5sZW5ndGgmJm5ldyBSZWdFeHAoXCIoXnxcXFxccylcIitlK1wiKFxcXFxzfCQpXCIpLnRlc3QodCl9ZnVuY3Rpb24gTSh0LGUpe3ZhciBpO2lmKHZvaWQgMCE9PXQuY2xhc3NMaXN0KWZvcih2YXIgbj1GKGUpLG89MCxzPW4ubGVuZ3RoO288cztvKyspdC5jbGFzc0xpc3QuYWRkKG5bb10pO2Vsc2UgdmUodCxlKXx8eWUodCwoKGk9eGUodCkpP2krXCIgXCI6XCJcIikrZSl9ZnVuY3Rpb24geih0LGUpe3ZvaWQgMCE9PXQuY2xhc3NMaXN0P3QuY2xhc3NMaXN0LnJlbW92ZShlKTp5ZSh0LFcoKFwiIFwiK3hlKHQpK1wiIFwiKS5yZXBsYWNlKFwiIFwiK2UrXCIgXCIsXCIgXCIpKSl9ZnVuY3Rpb24geWUodCxlKXt2b2lkIDA9PT10LmNsYXNzTmFtZS5iYXNlVmFsP3QuY2xhc3NOYW1lPWU6dC5jbGFzc05hbWUuYmFzZVZhbD1lfWZ1bmN0aW9uIHhlKHQpe3JldHVybiB2b2lkIDA9PT0odD10LmNvcnJlc3BvbmRpbmdFbGVtZW50P3QuY29ycmVzcG9uZGluZ0VsZW1lbnQ6dCkuY2xhc3NOYW1lLmJhc2VWYWw/dC5jbGFzc05hbWU6dC5jbGFzc05hbWUuYmFzZVZhbH1mdW5jdGlvbiBDKHQsZSl7aWYoXCJvcGFjaXR5XCJpbiB0LnN0eWxlKXQuc3R5bGUub3BhY2l0eT1lO2Vsc2UgaWYoXCJmaWx0ZXJcImluIHQuc3R5bGUpe3ZhciBpPSExLG49XCJEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYVwiO3RyeXtpPXQuZmlsdGVycy5pdGVtKG4pfWNhdGNoKHQpe2lmKDE9PT1lKXJldHVybn1lPU1hdGgucm91bmQoMTAwKmUpLGk/KGkuRW5hYmxlZD0xMDAhPT1lLGkuT3BhY2l0eT1lKTp0LnN0eWxlLmZpbHRlcis9XCIgcHJvZ2lkOlwiK24rXCIob3BhY2l0eT1cIitlK1wiKVwifX1mdW5jdGlvbiB3ZSh0KXtmb3IodmFyIGU9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLGk9MDtpPHQubGVuZ3RoO2krKylpZih0W2ldaW4gZSlyZXR1cm4gdFtpXTtyZXR1cm4hMX1mdW5jdGlvbiBiZSh0LGUsaSl7ZT1lfHxuZXcgcCgwLDApO3Quc3R5bGVbdWVdPShiLmllM2Q/XCJ0cmFuc2xhdGUoXCIrZS54K1wicHgsXCIrZS55K1wicHgpXCI6XCJ0cmFuc2xhdGUzZChcIitlLngrXCJweCxcIitlLnkrXCJweCwwKVwiKSsoaT9cIiBzY2FsZShcIitpK1wiKVwiOlwiXCIpfWZ1bmN0aW9uIFoodCxlKXt0Ll9sZWFmbGV0X3Bvcz1lLGIuYW55M2Q/YmUodCxlKToodC5zdHlsZS5sZWZ0PWUueCtcInB4XCIsdC5zdHlsZS50b3A9ZS55K1wicHhcIil9ZnVuY3Rpb24gUGUodCl7cmV0dXJuIHQuX2xlYWZsZXRfcG9zfHxuZXcgcCgwLDApfWZ1bmN0aW9uIExlKCl7Uyh3aW5kb3csXCJkcmFnc3RhcnRcIixPKX1mdW5jdGlvbiBUZSgpe2sod2luZG93LFwiZHJhZ3N0YXJ0XCIsTyl9ZnVuY3Rpb24gTWUodCl7Zm9yKDstMT09PXQudGFiSW5kZXg7KXQ9dC5wYXJlbnROb2RlO3Quc3R5bGUmJih6ZSgpLGxlPShoZT10KS5zdHlsZS5vdXRsaW5lU3R5bGUsdC5zdHlsZS5vdXRsaW5lU3R5bGU9XCJub25lXCIsUyh3aW5kb3csXCJrZXlkb3duXCIsemUpKX1mdW5jdGlvbiB6ZSgpe2hlJiYoaGUuc3R5bGUub3V0bGluZVN0eWxlPWxlLGxlPWhlPXZvaWQgMCxrKHdpbmRvdyxcImtleWRvd25cIix6ZSkpfWZ1bmN0aW9uIENlKHQpe2Zvcig7ISgodD10LnBhcmVudE5vZGUpLm9mZnNldFdpZHRoJiZ0Lm9mZnNldEhlaWdodHx8dD09PWRvY3VtZW50LmJvZHkpOyk7cmV0dXJuIHR9ZnVuY3Rpb24gWmUodCl7dmFyIGU9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57eDplLndpZHRoL3Qub2Zmc2V0V2lkdGh8fDEseTplLmhlaWdodC90Lm9mZnNldEhlaWdodHx8MSxib3VuZGluZ0NsaWVudFJlY3Q6ZX19YWU9XCJvbnNlbGVjdHN0YXJ0XCJpbiBkb2N1bWVudD8ocmU9ZnVuY3Rpb24oKXtTKHdpbmRvdyxcInNlbGVjdHN0YXJ0XCIsTyl9LGZ1bmN0aW9uKCl7ayh3aW5kb3csXCJzZWxlY3RzdGFydFwiLE8pfSk6KHNlPXdlKFtcInVzZXJTZWxlY3RcIixcIldlYmtpdFVzZXJTZWxlY3RcIixcIk9Vc2VyU2VsZWN0XCIsXCJNb3pVc2VyU2VsZWN0XCIsXCJtc1VzZXJTZWxlY3RcIl0pLHJlPWZ1bmN0aW9uKCl7dmFyIHQ7c2UmJih0PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZSxvZT10W3NlXSx0W3NlXT1cIm5vbmVcIil9LGZ1bmN0aW9uKCl7c2UmJihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGVbc2VdPW9lLG9lPXZvaWQgMCl9KTtwdD17X19wcm90b19fOm51bGwsVFJBTlNGT1JNOnVlLFRSQU5TSVRJT046Y2UsVFJBTlNJVElPTl9FTkQ6ZGUsZ2V0Ol9lLGdldFN0eWxlOnBlLGNyZWF0ZTpQLHJlbW92ZTpULGVtcHR5Om1lLHRvRnJvbnQ6ZmUsdG9CYWNrOmdlLGhhc0NsYXNzOnZlLGFkZENsYXNzOk0scmVtb3ZlQ2xhc3M6eixzZXRDbGFzczp5ZSxnZXRDbGFzczp4ZSxzZXRPcGFjaXR5OkMsdGVzdFByb3A6d2Usc2V0VHJhbnNmb3JtOmJlLHNldFBvc2l0aW9uOlosZ2V0UG9zaXRpb246UGUsZ2V0IGRpc2FibGVUZXh0U2VsZWN0aW9uKCl7cmV0dXJuIHJlfSxnZXQgZW5hYmxlVGV4dFNlbGVjdGlvbigpe3JldHVybiBhZX0sZGlzYWJsZUltYWdlRHJhZzpMZSxlbmFibGVJbWFnZURyYWc6VGUscHJldmVudE91dGxpbmU6TWUscmVzdG9yZU91dGxpbmU6emUsZ2V0U2l6ZWRQYXJlbnROb2RlOkNlLGdldFNjYWxlOlplfTtmdW5jdGlvbiBTKHQsZSxpLG4pe2lmKGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlKWZvcih2YXIgbyBpbiBlKWtlKHQsbyxlW29dLGkpO2Vsc2UgZm9yKHZhciBzPTAscj0oZT1GKGUpKS5sZW5ndGg7czxyO3MrKylrZSh0LGVbc10saSxuKTtyZXR1cm4gdGhpc312YXIgRT1cIl9sZWFmbGV0X2V2ZW50c1wiO2Z1bmN0aW9uIGsodCxlLGksbil7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpU2UodCksZGVsZXRlIHRbRV07ZWxzZSBpZihlJiZcIm9iamVjdFwiPT10eXBlb2YgZSlmb3IodmFyIG8gaW4gZSlPZSh0LG8sZVtvXSxpKTtlbHNlIGlmKGU9RihlKSwyPT09YXJndW1lbnRzLmxlbmd0aClTZSh0LGZ1bmN0aW9uKHQpe3JldHVybi0xIT09RyhlLHQpfSk7ZWxzZSBmb3IodmFyIHM9MCxyPWUubGVuZ3RoO3M8cjtzKyspT2UodCxlW3NdLGksbik7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gU2UodCxlKXtmb3IodmFyIGkgaW4gdFtFXSl7dmFyIG49aS5zcGxpdCgvXFxkLylbMF07ZSYmIWUobil8fE9lKHQsbixudWxsLG51bGwsaSl9fXZhciBFZT17bW91c2VlbnRlcjpcIm1vdXNlb3ZlclwiLG1vdXNlbGVhdmU6XCJtb3VzZW91dFwiLHdoZWVsOiEoXCJvbndoZWVsXCJpbiB3aW5kb3cpJiZcIm1vdXNld2hlZWxcIn07ZnVuY3Rpb24ga2UoZSx0LGksbil7dmFyIG8scyxyPXQraChpKSsobj9cIl9cIitoKG4pOlwiXCIpO2VbRV0mJmVbRV1bcl18fChzPW89ZnVuY3Rpb24odCl7cmV0dXJuIGkuY2FsbChufHxlLHR8fHdpbmRvdy5ldmVudCl9LCFiLnRvdWNoTmF0aXZlJiZiLnBvaW50ZXImJjA9PT10LmluZGV4T2YoXCJ0b3VjaFwiKT9vPUp0KGUsdCxvKTpiLnRvdWNoJiZcImRibGNsaWNrXCI9PT10P289bmUoZSxvKTpcImFkZEV2ZW50TGlzdGVuZXJcImluIGU/XCJ0b3VjaHN0YXJ0XCI9PT10fHxcInRvdWNobW92ZVwiPT09dHx8XCJ3aGVlbFwiPT09dHx8XCJtb3VzZXdoZWVsXCI9PT10P2UuYWRkRXZlbnRMaXN0ZW5lcihFZVt0XXx8dCxvLCEhYi5wYXNzaXZlRXZlbnRzJiZ7cGFzc2l2ZTohMX0pOlwibW91c2VlbnRlclwiPT09dHx8XCJtb3VzZWxlYXZlXCI9PT10P2UuYWRkRXZlbnRMaXN0ZW5lcihFZVt0XSxvPWZ1bmN0aW9uKHQpe3Q9dHx8d2luZG93LmV2ZW50LFdlKGUsdCkmJnModCl9LCExKTplLmFkZEV2ZW50TGlzdGVuZXIodCxzLCExKTplLmF0dGFjaEV2ZW50KFwib25cIit0LG8pLGVbRV09ZVtFXXx8e30sZVtFXVtyXT1vKX1mdW5jdGlvbiBPZSh0LGUsaSxuLG8pe289b3x8ZStoKGkpKyhuP1wiX1wiK2gobik6XCJcIik7dmFyIHMscixpPXRbRV0mJnRbRV1bb107aSYmKCFiLnRvdWNoTmF0aXZlJiZiLnBvaW50ZXImJjA9PT1lLmluZGV4T2YoXCJ0b3VjaFwiKT8obj10LHI9aSxHdFtzPWVdP24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihHdFtzXSxyLCExKTpjb25zb2xlLndhcm4oXCJ3cm9uZyBldmVudCBzcGVjaWZpZWQ6XCIscykpOmIudG91Y2gmJlwiZGJsY2xpY2tcIj09PWU/KG49aSwocj10KS5yZW1vdmVFdmVudExpc3RlbmVyKFwiZGJsY2xpY2tcIixuLmRibGNsaWNrKSxyLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLG4uc2ltRGJsY2xpY2spKTpcInJlbW92ZUV2ZW50TGlzdGVuZXJcImluIHQ/dC5yZW1vdmVFdmVudExpc3RlbmVyKEVlW2VdfHxlLGksITEpOnQuZGV0YWNoRXZlbnQoXCJvblwiK2UsaSksdFtFXVtvXT1udWxsKX1mdW5jdGlvbiBBZSh0KXtyZXR1cm4gdC5zdG9wUHJvcGFnYXRpb24/dC5zdG9wUHJvcGFnYXRpb24oKTp0Lm9yaWdpbmFsRXZlbnQ/dC5vcmlnaW5hbEV2ZW50Ll9zdG9wcGVkPSEwOnQuY2FuY2VsQnViYmxlPSEwLHRoaXN9ZnVuY3Rpb24gQmUodCl7cmV0dXJuIGtlKHQsXCJ3aGVlbFwiLEFlKSx0aGlzfWZ1bmN0aW9uIEllKHQpe3JldHVybiBTKHQsXCJtb3VzZWRvd24gdG91Y2hzdGFydCBkYmxjbGljayBjb250ZXh0bWVudVwiLEFlKSx0Ll9sZWFmbGV0X2Rpc2FibGVfY2xpY2s9ITAsdGhpc31mdW5jdGlvbiBPKHQpe3JldHVybiB0LnByZXZlbnREZWZhdWx0P3QucHJldmVudERlZmF1bHQoKTp0LnJldHVyblZhbHVlPSExLHRoaXN9ZnVuY3Rpb24gUmUodCl7cmV0dXJuIE8odCksQWUodCksdGhpc31mdW5jdGlvbiBOZSh0KXtpZih0LmNvbXBvc2VkUGF0aClyZXR1cm4gdC5jb21wb3NlZFBhdGgoKTtmb3IodmFyIGU9W10saT10LnRhcmdldDtpOyllLnB1c2goaSksaT1pLnBhcmVudE5vZGU7cmV0dXJuIGV9ZnVuY3Rpb24gRGUodCxlKXt2YXIgaSxuO3JldHVybiBlPyhuPShpPVplKGUpKS5ib3VuZGluZ0NsaWVudFJlY3QsbmV3IHAoKHQuY2xpZW50WC1uLmxlZnQpL2kueC1lLmNsaWVudExlZnQsKHQuY2xpZW50WS1uLnRvcCkvaS55LWUuY2xpZW50VG9wKSk6bmV3IHAodC5jbGllbnRYLHQuY2xpZW50WSl9dmFyIGplPWIubGludXgmJmIuY2hyb21lP3dpbmRvdy5kZXZpY2VQaXhlbFJhdGlvOmIubWFjPzMqd2luZG93LmRldmljZVBpeGVsUmF0aW86MDx3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbz8yKndpbmRvdy5kZXZpY2VQaXhlbFJhdGlvOjE7ZnVuY3Rpb24gSGUodCl7cmV0dXJuIGIuZWRnZT90LndoZWVsRGVsdGFZLzI6dC5kZWx0YVkmJjA9PT10LmRlbHRhTW9kZT8tdC5kZWx0YVkvamU6dC5kZWx0YVkmJjE9PT10LmRlbHRhTW9kZT8yMCotdC5kZWx0YVk6dC5kZWx0YVkmJjI9PT10LmRlbHRhTW9kZT82MCotdC5kZWx0YVk6dC5kZWx0YVh8fHQuZGVsdGFaPzA6dC53aGVlbERlbHRhPyh0LndoZWVsRGVsdGFZfHx0LndoZWVsRGVsdGEpLzI6dC5kZXRhaWwmJk1hdGguYWJzKHQuZGV0YWlsKTwzMjc2NT8yMCotdC5kZXRhaWw6dC5kZXRhaWw/dC5kZXRhaWwvLTMyNzY1KjYwOjB9ZnVuY3Rpb24gV2UodCxlKXt2YXIgaT1lLnJlbGF0ZWRUYXJnZXQ7aWYoIWkpcmV0dXJuITA7dHJ5e2Zvcig7aSYmaSE9PXQ7KWk9aS5wYXJlbnROb2RlfWNhdGNoKHQpe3JldHVybiExfXJldHVybiBpIT09dH12YXIgbXQ9e19fcHJvdG9fXzpudWxsLG9uOlMsb2ZmOmssc3RvcFByb3BhZ2F0aW9uOkFlLGRpc2FibGVTY3JvbGxQcm9wYWdhdGlvbjpCZSxkaXNhYmxlQ2xpY2tQcm9wYWdhdGlvbjpJZSxwcmV2ZW50RGVmYXVsdDpPLHN0b3A6UmUsZ2V0UHJvcGFnYXRpb25QYXRoOk5lLGdldE1vdXNlUG9zaXRpb246RGUsZ2V0V2hlZWxEZWx0YTpIZSxpc0V4dGVybmFsVGFyZ2V0OldlLGFkZExpc3RlbmVyOlMscmVtb3ZlTGlzdGVuZXI6a30sRmU9aXQuZXh0ZW5kKHtydW46ZnVuY3Rpb24odCxlLGksbil7dGhpcy5zdG9wKCksdGhpcy5fZWw9dCx0aGlzLl9pblByb2dyZXNzPSEwLHRoaXMuX2R1cmF0aW9uPWl8fC4yNSx0aGlzLl9lYXNlT3V0UG93ZXI9MS9NYXRoLm1heChufHwuNSwuMiksdGhpcy5fc3RhcnRQb3M9UGUodCksdGhpcy5fb2Zmc2V0PWUuc3VidHJhY3QodGhpcy5fc3RhcnRQb3MpLHRoaXMuX3N0YXJ0VGltZT0rbmV3IERhdGUsdGhpcy5maXJlKFwic3RhcnRcIiksdGhpcy5fYW5pbWF0ZSgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5faW5Qcm9ncmVzcyYmKHRoaXMuX3N0ZXAoITApLHRoaXMuX2NvbXBsZXRlKCkpfSxfYW5pbWF0ZTpmdW5jdGlvbigpe3RoaXMuX2FuaW1JZD14KHRoaXMuX2FuaW1hdGUsdGhpcyksdGhpcy5fc3RlcCgpfSxfc3RlcDpmdW5jdGlvbih0KXt2YXIgZT0rbmV3IERhdGUtdGhpcy5fc3RhcnRUaW1lLGk9MWUzKnRoaXMuX2R1cmF0aW9uO2U8aT90aGlzLl9ydW5GcmFtZSh0aGlzLl9lYXNlT3V0KGUvaSksdCk6KHRoaXMuX3J1bkZyYW1lKDEpLHRoaXMuX2NvbXBsZXRlKCkpfSxfcnVuRnJhbWU6ZnVuY3Rpb24odCxlKXt0PXRoaXMuX3N0YXJ0UG9zLmFkZCh0aGlzLl9vZmZzZXQubXVsdGlwbHlCeSh0KSk7ZSYmdC5fcm91bmQoKSxaKHRoaXMuX2VsLHQpLHRoaXMuZmlyZShcInN0ZXBcIil9LF9jb21wbGV0ZTpmdW5jdGlvbigpe3IodGhpcy5fYW5pbUlkKSx0aGlzLl9pblByb2dyZXNzPSExLHRoaXMuZmlyZShcImVuZFwiKX0sX2Vhc2VPdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIDEtTWF0aC5wb3coMS10LHRoaXMuX2Vhc2VPdXRQb3dlcil9fSksQT1pdC5leHRlbmQoe29wdGlvbnM6e2NyczpsdCxjZW50ZXI6dm9pZCAwLHpvb206dm9pZCAwLG1pblpvb206dm9pZCAwLG1heFpvb206dm9pZCAwLGxheWVyczpbXSxtYXhCb3VuZHM6dm9pZCAwLHJlbmRlcmVyOnZvaWQgMCx6b29tQW5pbWF0aW9uOiEwLHpvb21BbmltYXRpb25UaHJlc2hvbGQ6NCxmYWRlQW5pbWF0aW9uOiEwLG1hcmtlclpvb21BbmltYXRpb246ITAsdHJhbnNmb3JtM0RMaW1pdDo4Mzg4NjA4LHpvb21TbmFwOjEsem9vbURlbHRhOjEsdHJhY2tSZXNpemU6ITB9LGluaXRpYWxpemU6ZnVuY3Rpb24odCxlKXtlPWModGhpcyxlKSx0aGlzLl9oYW5kbGVycz1bXSx0aGlzLl9sYXllcnM9e30sdGhpcy5fem9vbUJvdW5kTGF5ZXJzPXt9LHRoaXMuX3NpemVDaGFuZ2VkPSEwLHRoaXMuX2luaXRDb250YWluZXIodCksdGhpcy5faW5pdExheW91dCgpLHRoaXMuX29uUmVzaXplPWEodGhpcy5fb25SZXNpemUsdGhpcyksdGhpcy5faW5pdEV2ZW50cygpLGUubWF4Qm91bmRzJiZ0aGlzLnNldE1heEJvdW5kcyhlLm1heEJvdW5kcyksdm9pZCAwIT09ZS56b29tJiYodGhpcy5fem9vbT10aGlzLl9saW1pdFpvb20oZS56b29tKSksZS5jZW50ZXImJnZvaWQgMCE9PWUuem9vbSYmdGhpcy5zZXRWaWV3KHcoZS5jZW50ZXIpLGUuem9vbSx7cmVzZXQ6ITB9KSx0aGlzLmNhbGxJbml0SG9va3MoKSx0aGlzLl96b29tQW5pbWF0ZWQ9Y2UmJmIuYW55M2QmJiFiLm1vYmlsZU9wZXJhJiZ0aGlzLm9wdGlvbnMuem9vbUFuaW1hdGlvbix0aGlzLl96b29tQW5pbWF0ZWQmJih0aGlzLl9jcmVhdGVBbmltUHJveHkoKSxTKHRoaXMuX3Byb3h5LGRlLHRoaXMuX2NhdGNoVHJhbnNpdGlvbkVuZCx0aGlzKSksdGhpcy5fYWRkTGF5ZXJzKHRoaXMub3B0aW9ucy5sYXllcnMpfSxzZXRWaWV3OmZ1bmN0aW9uKHQsZSxpKXtpZigoZT12b2lkIDA9PT1lP3RoaXMuX3pvb206dGhpcy5fbGltaXRab29tKGUpLHQ9dGhpcy5fbGltaXRDZW50ZXIodyh0KSxlLHRoaXMub3B0aW9ucy5tYXhCb3VuZHMpLGk9aXx8e30sdGhpcy5fc3RvcCgpLHRoaXMuX2xvYWRlZCYmIWkucmVzZXQmJiEwIT09aSkmJih2b2lkIDAhPT1pLmFuaW1hdGUmJihpLnpvb209bCh7YW5pbWF0ZTppLmFuaW1hdGV9LGkuem9vbSksaS5wYW49bCh7YW5pbWF0ZTppLmFuaW1hdGUsZHVyYXRpb246aS5kdXJhdGlvbn0saS5wYW4pKSx0aGlzLl96b29tIT09ZT90aGlzLl90cnlBbmltYXRlZFpvb20mJnRoaXMuX3RyeUFuaW1hdGVkWm9vbSh0LGUsaS56b29tKTp0aGlzLl90cnlBbmltYXRlZFBhbih0LGkucGFuKSkpcmV0dXJuIGNsZWFyVGltZW91dCh0aGlzLl9zaXplVGltZXIpLHRoaXM7cmV0dXJuIHRoaXMuX3Jlc2V0Vmlldyh0LGUsaS5wYW4mJmkucGFuLm5vTW92ZVN0YXJ0KSx0aGlzfSxzZXRab29tOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2xvYWRlZD90aGlzLnNldFZpZXcodGhpcy5nZXRDZW50ZXIoKSx0LHt6b29tOmV9KToodGhpcy5fem9vbT10LHRoaXMpfSx6b29tSW46ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD10fHwoYi5hbnkzZD90aGlzLm9wdGlvbnMuem9vbURlbHRhOjEpLHRoaXMuc2V0Wm9vbSh0aGlzLl96b29tK3QsZSl9LHpvb21PdXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD10fHwoYi5hbnkzZD90aGlzLm9wdGlvbnMuem9vbURlbHRhOjEpLHRoaXMuc2V0Wm9vbSh0aGlzLl96b29tLXQsZSl9LHNldFpvb21Bcm91bmQ6ZnVuY3Rpb24odCxlLGkpe3ZhciBuPXRoaXMuZ2V0Wm9vbVNjYWxlKGUpLG89dGhpcy5nZXRTaXplKCkuZGl2aWRlQnkoMiksdD0odCBpbnN0YW5jZW9mIHA/dDp0aGlzLmxhdExuZ1RvQ29udGFpbmVyUG9pbnQodCkpLnN1YnRyYWN0KG8pLm11bHRpcGx5QnkoMS0xL24pLG49dGhpcy5jb250YWluZXJQb2ludFRvTGF0TG5nKG8uYWRkKHQpKTtyZXR1cm4gdGhpcy5zZXRWaWV3KG4sZSx7em9vbTppfSl9LF9nZXRCb3VuZHNDZW50ZXJab29tOmZ1bmN0aW9uKHQsZSl7ZT1lfHx7fSx0PXQuZ2V0Qm91bmRzP3QuZ2V0Qm91bmRzKCk6Zyh0KTt2YXIgaT1tKGUucGFkZGluZ1RvcExlZnR8fGUucGFkZGluZ3x8WzAsMF0pLG49bShlLnBhZGRpbmdCb3R0b21SaWdodHx8ZS5wYWRkaW5nfHxbMCwwXSksbz10aGlzLmdldEJvdW5kc1pvb20odCwhMSxpLmFkZChuKSk7cmV0dXJuKG89XCJudW1iZXJcIj09dHlwZW9mIGUubWF4Wm9vbT9NYXRoLm1pbihlLm1heFpvb20sbyk6byk9PT0xLzA/e2NlbnRlcjp0LmdldENlbnRlcigpLHpvb206b306KGU9bi5zdWJ0cmFjdChpKS5kaXZpZGVCeSgyKSxuPXRoaXMucHJvamVjdCh0LmdldFNvdXRoV2VzdCgpLG8pLGk9dGhpcy5wcm9qZWN0KHQuZ2V0Tm9ydGhFYXN0KCksbykse2NlbnRlcjp0aGlzLnVucHJvamVjdChuLmFkZChpKS5kaXZpZGVCeSgyKS5hZGQoZSksbyksem9vbTpvfSl9LGZpdEJvdW5kczpmdW5jdGlvbih0LGUpe2lmKCh0PWcodCkpLmlzVmFsaWQoKSlyZXR1cm4gdD10aGlzLl9nZXRCb3VuZHNDZW50ZXJab29tKHQsZSksdGhpcy5zZXRWaWV3KHQuY2VudGVyLHQuem9vbSxlKTt0aHJvdyBuZXcgRXJyb3IoXCJCb3VuZHMgYXJlIG5vdCB2YWxpZC5cIil9LGZpdFdvcmxkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmZpdEJvdW5kcyhbWy05MCwtMTgwXSxbOTAsMTgwXV0sdCl9LHBhblRvOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc2V0Vmlldyh0LHRoaXMuX3pvb20se3BhbjplfSl9LHBhbkJ5OmZ1bmN0aW9uKHQsZSl7dmFyIGk7cmV0dXJuIGU9ZXx8e30sKHQ9bSh0KS5yb3VuZCgpKS54fHx0Lnk/KCEwPT09ZS5hbmltYXRlfHx0aGlzLmdldFNpemUoKS5jb250YWlucyh0KT8odGhpcy5fcGFuQW5pbXx8KHRoaXMuX3BhbkFuaW09bmV3IEZlLHRoaXMuX3BhbkFuaW0ub24oe3N0ZXA6dGhpcy5fb25QYW5UcmFuc2l0aW9uU3RlcCxlbmQ6dGhpcy5fb25QYW5UcmFuc2l0aW9uRW5kfSx0aGlzKSksZS5ub01vdmVTdGFydHx8dGhpcy5maXJlKFwibW92ZXN0YXJ0XCIpLCExIT09ZS5hbmltYXRlPyhNKHRoaXMuX21hcFBhbmUsXCJsZWFmbGV0LXBhbi1hbmltXCIpLGk9dGhpcy5fZ2V0TWFwUGFuZVBvcygpLnN1YnRyYWN0KHQpLnJvdW5kKCksdGhpcy5fcGFuQW5pbS5ydW4odGhpcy5fbWFwUGFuZSxpLGUuZHVyYXRpb258fC4yNSxlLmVhc2VMaW5lYXJpdHkpKToodGhpcy5fcmF3UGFuQnkodCksdGhpcy5maXJlKFwibW92ZVwiKS5maXJlKFwibW92ZWVuZFwiKSkpOnRoaXMuX3Jlc2V0Vmlldyh0aGlzLnVucHJvamVjdCh0aGlzLnByb2plY3QodGhpcy5nZXRDZW50ZXIoKSkuYWRkKHQpKSx0aGlzLmdldFpvb20oKSksdGhpcyk6dGhpcy5maXJlKFwibW92ZWVuZFwiKX0sZmx5VG86ZnVuY3Rpb24obixvLHQpe2lmKCExPT09KHQ9dHx8e30pLmFuaW1hdGV8fCFiLmFueTNkKXJldHVybiB0aGlzLnNldFZpZXcobixvLHQpO3RoaXMuX3N0b3AoKTt2YXIgcz10aGlzLnByb2plY3QodGhpcy5nZXRDZW50ZXIoKSkscj10aGlzLnByb2plY3QobiksZT10aGlzLmdldFNpemUoKSxhPXRoaXMuX3pvb20saD0obj13KG4pLG89dm9pZCAwPT09bz9hOm8sTWF0aC5tYXgoZS54LGUueSkpLGk9aCp0aGlzLmdldFpvb21TY2FsZShhLG8pLGw9ci5kaXN0YW5jZVRvKHMpfHwxLHU9MS40MixjPXUqdTtmdW5jdGlvbiBkKHQpe3Q9KGkqaS1oKmgrKHQ/LTE6MSkqYypjKmwqbCkvKDIqKHQ/aTpoKSpjKmwpLHQ9TWF0aC5zcXJ0KHQqdCsxKS10O3JldHVybiB0PDFlLTk/LTE4Ok1hdGgubG9nKHQpfWZ1bmN0aW9uIF8odCl7cmV0dXJuKE1hdGguZXhwKHQpLU1hdGguZXhwKC10KSkvMn1mdW5jdGlvbiBwKHQpe3JldHVybihNYXRoLmV4cCh0KStNYXRoLmV4cCgtdCkpLzJ9dmFyIG09ZCgwKTtmdW5jdGlvbiBmKHQpe3JldHVybiBoKihwKG0pKihfKHQ9bSt1KnQpL3AodCkpLV8obSkpL2N9dmFyIGc9RGF0ZS5ub3coKSx2PShkKDEpLW0pL3UseT10LmR1cmF0aW9uPzFlMyp0LmR1cmF0aW9uOjFlMyp2Ki44O3JldHVybiB0aGlzLl9tb3ZlU3RhcnQoITAsdC5ub01vdmVTdGFydCksZnVuY3Rpb24gdCgpe3ZhciBlPShEYXRlLm5vdygpLWcpL3ksaT0oMS1NYXRoLnBvdygxLWUsMS41KSkqdjtlPD0xPyh0aGlzLl9mbHlUb0ZyYW1lPXgodCx0aGlzKSx0aGlzLl9tb3ZlKHRoaXMudW5wcm9qZWN0KHMuYWRkKHIuc3VidHJhY3QocykubXVsdGlwbHlCeShmKGkpL2wpKSxhKSx0aGlzLmdldFNjYWxlWm9vbShoLyhlPWksaCoocChtKS9wKG0rdSplKSkpLGEpLHtmbHlUbzohMH0pKTp0aGlzLl9tb3ZlKG4sbykuX21vdmVFbmQoITApfS5jYWxsKHRoaXMpLHRoaXN9LGZseVRvQm91bmRzOmZ1bmN0aW9uKHQsZSl7dD10aGlzLl9nZXRCb3VuZHNDZW50ZXJab29tKHQsZSk7cmV0dXJuIHRoaXMuZmx5VG8odC5jZW50ZXIsdC56b29tLGUpfSxzZXRNYXhCb3VuZHM6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9Zyh0KSx0aGlzLmxpc3RlbnMoXCJtb3ZlZW5kXCIsdGhpcy5fcGFuSW5zaWRlTWF4Qm91bmRzKSYmdGhpcy5vZmYoXCJtb3ZlZW5kXCIsdGhpcy5fcGFuSW5zaWRlTWF4Qm91bmRzKSx0LmlzVmFsaWQoKT8odGhpcy5vcHRpb25zLm1heEJvdW5kcz10LHRoaXMuX2xvYWRlZCYmdGhpcy5fcGFuSW5zaWRlTWF4Qm91bmRzKCksdGhpcy5vbihcIm1vdmVlbmRcIix0aGlzLl9wYW5JbnNpZGVNYXhCb3VuZHMpKToodGhpcy5vcHRpb25zLm1heEJvdW5kcz1udWxsLHRoaXMpfSxzZXRNaW5ab29tOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMub3B0aW9ucy5taW5ab29tO3JldHVybiB0aGlzLm9wdGlvbnMubWluWm9vbT10LHRoaXMuX2xvYWRlZCYmZSE9PXQmJih0aGlzLmZpcmUoXCJ6b29tbGV2ZWxzY2hhbmdlXCIpLHRoaXMuZ2V0Wm9vbSgpPHRoaXMub3B0aW9ucy5taW5ab29tKT90aGlzLnNldFpvb20odCk6dGhpc30sc2V0TWF4Wm9vbTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLm9wdGlvbnMubWF4Wm9vbTtyZXR1cm4gdGhpcy5vcHRpb25zLm1heFpvb209dCx0aGlzLl9sb2FkZWQmJmUhPT10JiYodGhpcy5maXJlKFwiem9vbWxldmVsc2NoYW5nZVwiKSx0aGlzLmdldFpvb20oKT50aGlzLm9wdGlvbnMubWF4Wm9vbSk/dGhpcy5zZXRab29tKHQpOnRoaXN9LHBhbkluc2lkZUJvdW5kczpmdW5jdGlvbih0LGUpe3RoaXMuX2VuZm9yY2luZ0JvdW5kcz0hMDt2YXIgaT10aGlzLmdldENlbnRlcigpLHQ9dGhpcy5fbGltaXRDZW50ZXIoaSx0aGlzLl96b29tLGcodCkpO3JldHVybiBpLmVxdWFscyh0KXx8dGhpcy5wYW5Ubyh0LGUpLHRoaXMuX2VuZm9yY2luZ0JvdW5kcz0hMSx0aGlzfSxwYW5JbnNpZGU6ZnVuY3Rpb24odCxlKXt2YXIgaT1tKChlPWV8fHt9KS5wYWRkaW5nVG9wTGVmdHx8ZS5wYWRkaW5nfHxbMCwwXSksbj1tKGUucGFkZGluZ0JvdHRvbVJpZ2h0fHxlLnBhZGRpbmd8fFswLDBdKSxvPXRoaXMucHJvamVjdCh0aGlzLmdldENlbnRlcigpKSx0PXRoaXMucHJvamVjdCh0KSxzPXRoaXMuZ2V0UGl4ZWxCb3VuZHMoKSxpPV8oW3MubWluLmFkZChpKSxzLm1heC5zdWJ0cmFjdChuKV0pLHM9aS5nZXRTaXplKCk7cmV0dXJuIGkuY29udGFpbnModCl8fCh0aGlzLl9lbmZvcmNpbmdCb3VuZHM9ITAsbj10LnN1YnRyYWN0KGkuZ2V0Q2VudGVyKCkpLGk9aS5leHRlbmQodCkuZ2V0U2l6ZSgpLnN1YnRyYWN0KHMpLG8ueCs9bi54PDA/LWkueDppLngsby55Kz1uLnk8MD8taS55OmkueSx0aGlzLnBhblRvKHRoaXMudW5wcm9qZWN0KG8pLGUpLHRoaXMuX2VuZm9yY2luZ0JvdW5kcz0hMSksdGhpc30saW52YWxpZGF0ZVNpemU6ZnVuY3Rpb24odCl7aWYoIXRoaXMuX2xvYWRlZClyZXR1cm4gdGhpczt0PWwoe2FuaW1hdGU6ITEscGFuOiEwfSwhMD09PXQ/e2FuaW1hdGU6ITB9OnQpO3ZhciBlPXRoaXMuZ2V0U2l6ZSgpLGk9KHRoaXMuX3NpemVDaGFuZ2VkPSEwLHRoaXMuX2xhc3RDZW50ZXI9bnVsbCx0aGlzLmdldFNpemUoKSksbj1lLmRpdmlkZUJ5KDIpLnJvdW5kKCksbz1pLmRpdmlkZUJ5KDIpLnJvdW5kKCksbj1uLnN1YnRyYWN0KG8pO3JldHVybiBuLnh8fG4ueT8odC5hbmltYXRlJiZ0LnBhbj90aGlzLnBhbkJ5KG4pOih0LnBhbiYmdGhpcy5fcmF3UGFuQnkobiksdGhpcy5maXJlKFwibW92ZVwiKSx0LmRlYm91bmNlTW92ZWVuZD8oY2xlYXJUaW1lb3V0KHRoaXMuX3NpemVUaW1lciksdGhpcy5fc2l6ZVRpbWVyPXNldFRpbWVvdXQoYSh0aGlzLmZpcmUsdGhpcyxcIm1vdmVlbmRcIiksMjAwKSk6dGhpcy5maXJlKFwibW92ZWVuZFwiKSksdGhpcy5maXJlKFwicmVzaXplXCIse29sZFNpemU6ZSxuZXdTaXplOml9KSk6dGhpc30sc3RvcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFpvb20odGhpcy5fbGltaXRab29tKHRoaXMuX3pvb20pKSx0aGlzLm9wdGlvbnMuem9vbVNuYXB8fHRoaXMuZmlyZShcInZpZXdyZXNldFwiKSx0aGlzLl9zdG9wKCl9LGxvY2F0ZTpmdW5jdGlvbih0KXt2YXIgZSxpO3JldHVybiB0PXRoaXMuX2xvY2F0ZU9wdGlvbnM9bCh7dGltZW91dDoxZTQsd2F0Y2g6ITF9LHQpLFwiZ2VvbG9jYXRpb25cImluIG5hdmlnYXRvcj8oZT1hKHRoaXMuX2hhbmRsZUdlb2xvY2F0aW9uUmVzcG9uc2UsdGhpcyksaT1hKHRoaXMuX2hhbmRsZUdlb2xvY2F0aW9uRXJyb3IsdGhpcyksdC53YXRjaD90aGlzLl9sb2NhdGlvbldhdGNoSWQ9bmF2aWdhdG9yLmdlb2xvY2F0aW9uLndhdGNoUG9zaXRpb24oZSxpLHQpOm5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZSxpLHQpKTp0aGlzLl9oYW5kbGVHZW9sb2NhdGlvbkVycm9yKHtjb2RlOjAsbWVzc2FnZTpcIkdlb2xvY2F0aW9uIG5vdCBzdXBwb3J0ZWQuXCJ9KSx0aGlzfSxzdG9wTG9jYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIG5hdmlnYXRvci5nZW9sb2NhdGlvbiYmbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmNsZWFyV2F0Y2gmJm5hdmlnYXRvci5nZW9sb2NhdGlvbi5jbGVhcldhdGNoKHRoaXMuX2xvY2F0aW9uV2F0Y2hJZCksdGhpcy5fbG9jYXRlT3B0aW9ucyYmKHRoaXMuX2xvY2F0ZU9wdGlvbnMuc2V0Vmlldz0hMSksdGhpc30sX2hhbmRsZUdlb2xvY2F0aW9uRXJyb3I6ZnVuY3Rpb24odCl7dmFyIGU7dGhpcy5fY29udGFpbmVyLl9sZWFmbGV0X2lkJiYoZT10LmNvZGUsdD10Lm1lc3NhZ2V8fCgxPT09ZT9cInBlcm1pc3Npb24gZGVuaWVkXCI6Mj09PWU/XCJwb3NpdGlvbiB1bmF2YWlsYWJsZVwiOlwidGltZW91dFwiKSx0aGlzLl9sb2NhdGVPcHRpb25zLnNldFZpZXcmJiF0aGlzLl9sb2FkZWQmJnRoaXMuZml0V29ybGQoKSx0aGlzLmZpcmUoXCJsb2NhdGlvbmVycm9yXCIse2NvZGU6ZSxtZXNzYWdlOlwiR2VvbG9jYXRpb24gZXJyb3I6IFwiK3QrXCIuXCJ9KSl9LF9oYW5kbGVHZW9sb2NhdGlvblJlc3BvbnNlOmZ1bmN0aW9uKHQpe2lmKHRoaXMuX2NvbnRhaW5lci5fbGVhZmxldF9pZCl7dmFyIGUsaSxuPW5ldyB2KHQuY29vcmRzLmxhdGl0dWRlLHQuY29vcmRzLmxvbmdpdHVkZSksbz1uLnRvQm91bmRzKDIqdC5jb29yZHMuYWNjdXJhY3kpLHM9dGhpcy5fbG9jYXRlT3B0aW9ucyxyPShzLnNldFZpZXcmJihlPXRoaXMuZ2V0Qm91bmRzWm9vbShvKSx0aGlzLnNldFZpZXcobixzLm1heFpvb20/TWF0aC5taW4oZSxzLm1heFpvb20pOmUpKSx7bGF0bG5nOm4sYm91bmRzOm8sdGltZXN0YW1wOnQudGltZXN0YW1wfSk7Zm9yKGkgaW4gdC5jb29yZHMpXCJudW1iZXJcIj09dHlwZW9mIHQuY29vcmRzW2ldJiYocltpXT10LmNvb3Jkc1tpXSk7dGhpcy5maXJlKFwibG9jYXRpb25mb3VuZFwiLHIpfX0sYWRkSGFuZGxlcjpmdW5jdGlvbih0LGUpe3JldHVybiBlJiYoZT10aGlzW3RdPW5ldyBlKHRoaXMpLHRoaXMuX2hhbmRsZXJzLnB1c2goZSksdGhpcy5vcHRpb25zW3RdJiZlLmVuYWJsZSgpKSx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oKXtpZih0aGlzLl9pbml0RXZlbnRzKCEwKSx0aGlzLm9wdGlvbnMubWF4Qm91bmRzJiZ0aGlzLm9mZihcIm1vdmVlbmRcIix0aGlzLl9wYW5JbnNpZGVNYXhCb3VuZHMpLHRoaXMuX2NvbnRhaW5lcklkIT09dGhpcy5fY29udGFpbmVyLl9sZWFmbGV0X2lkKXRocm93IG5ldyBFcnJvcihcIk1hcCBjb250YWluZXIgaXMgYmVpbmcgcmV1c2VkIGJ5IGFub3RoZXIgaW5zdGFuY2VcIik7dHJ5e2RlbGV0ZSB0aGlzLl9jb250YWluZXIuX2xlYWZsZXRfaWQsZGVsZXRlIHRoaXMuX2NvbnRhaW5lcklkfWNhdGNoKHQpe3RoaXMuX2NvbnRhaW5lci5fbGVhZmxldF9pZD12b2lkIDAsdGhpcy5fY29udGFpbmVySWQ9dm9pZCAwfWZvcih2YXIgdCBpbiB2b2lkIDAhPT10aGlzLl9sb2NhdGlvbldhdGNoSWQmJnRoaXMuc3RvcExvY2F0ZSgpLHRoaXMuX3N0b3AoKSxUKHRoaXMuX21hcFBhbmUpLHRoaXMuX2NsZWFyQ29udHJvbFBvcyYmdGhpcy5fY2xlYXJDb250cm9sUG9zKCksdGhpcy5fcmVzaXplUmVxdWVzdCYmKHIodGhpcy5fcmVzaXplUmVxdWVzdCksdGhpcy5fcmVzaXplUmVxdWVzdD1udWxsKSx0aGlzLl9jbGVhckhhbmRsZXJzKCksdGhpcy5fbG9hZGVkJiZ0aGlzLmZpcmUoXCJ1bmxvYWRcIiksdGhpcy5fbGF5ZXJzKXRoaXMuX2xheWVyc1t0XS5yZW1vdmUoKTtmb3IodCBpbiB0aGlzLl9wYW5lcylUKHRoaXMuX3BhbmVzW3RdKTtyZXR1cm4gdGhpcy5fbGF5ZXJzPVtdLHRoaXMuX3BhbmVzPVtdLGRlbGV0ZSB0aGlzLl9tYXBQYW5lLGRlbGV0ZSB0aGlzLl9yZW5kZXJlcix0aGlzfSxjcmVhdGVQYW5lOmZ1bmN0aW9uKHQsZSl7ZT1QKFwiZGl2XCIsXCJsZWFmbGV0LXBhbmVcIisodD9cIiBsZWFmbGV0LVwiK3QucmVwbGFjZShcIlBhbmVcIixcIlwiKStcIi1wYW5lXCI6XCJcIiksZXx8dGhpcy5fbWFwUGFuZSk7cmV0dXJuIHQmJih0aGlzLl9wYW5lc1t0XT1lKSxlfSxnZXRDZW50ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hlY2tJZkxvYWRlZCgpLHRoaXMuX2xhc3RDZW50ZXImJiF0aGlzLl9tb3ZlZCgpP3RoaXMuX2xhc3RDZW50ZXIuY2xvbmUoKTp0aGlzLmxheWVyUG9pbnRUb0xhdExuZyh0aGlzLl9nZXRDZW50ZXJMYXllclBvaW50KCkpfSxnZXRab29tOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3pvb219LGdldEJvdW5kczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2V0UGl4ZWxCb3VuZHMoKTtyZXR1cm4gbmV3IHModGhpcy51bnByb2plY3QodC5nZXRCb3R0b21MZWZ0KCkpLHRoaXMudW5wcm9qZWN0KHQuZ2V0VG9wUmlnaHQoKSkpfSxnZXRNaW5ab29tOmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PXRoaXMub3B0aW9ucy5taW5ab29tP3RoaXMuX2xheWVyc01pblpvb218fDA6dGhpcy5vcHRpb25zLm1pblpvb219LGdldE1heFpvb206ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09dGhpcy5vcHRpb25zLm1heFpvb20/dm9pZCAwPT09dGhpcy5fbGF5ZXJzTWF4Wm9vbT8xLzA6dGhpcy5fbGF5ZXJzTWF4Wm9vbTp0aGlzLm9wdGlvbnMubWF4Wm9vbX0sZ2V0Qm91bmRzWm9vbTpmdW5jdGlvbih0LGUsaSl7dD1nKHQpLGk9bShpfHxbMCwwXSk7dmFyIG49dGhpcy5nZXRab29tKCl8fDAsbz10aGlzLmdldE1pblpvb20oKSxzPXRoaXMuZ2V0TWF4Wm9vbSgpLHI9dC5nZXROb3J0aFdlc3QoKSx0PXQuZ2V0U291dGhFYXN0KCksaT10aGlzLmdldFNpemUoKS5zdWJ0cmFjdChpKSx0PV8odGhpcy5wcm9qZWN0KHQsbiksdGhpcy5wcm9qZWN0KHIsbikpLmdldFNpemUoKSxyPWIuYW55M2Q/dGhpcy5vcHRpb25zLnpvb21TbmFwOjEsYT1pLngvdC54LGk9aS55L3QueSx0PWU/TWF0aC5tYXgoYSxpKTpNYXRoLm1pbihhLGkpLG49dGhpcy5nZXRTY2FsZVpvb20odCxuKTtyZXR1cm4gciYmKG49TWF0aC5yb3VuZChuLyhyLzEwMCkpKihyLzEwMCksbj1lP01hdGguY2VpbChuL3IpKnI6TWF0aC5mbG9vcihuL3IpKnIpLE1hdGgubWF4KG8sTWF0aC5taW4ocyxuKSl9LGdldFNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2l6ZSYmIXRoaXMuX3NpemVDaGFuZ2VkfHwodGhpcy5fc2l6ZT1uZXcgcCh0aGlzLl9jb250YWluZXIuY2xpZW50V2lkdGh8fDAsdGhpcy5fY29udGFpbmVyLmNsaWVudEhlaWdodHx8MCksdGhpcy5fc2l6ZUNoYW5nZWQ9ITEpLHRoaXMuX3NpemUuY2xvbmUoKX0sZ2V0UGl4ZWxCb3VuZHM6ZnVuY3Rpb24odCxlKXt0PXRoaXMuX2dldFRvcExlZnRQb2ludCh0LGUpO3JldHVybiBuZXcgZih0LHQuYWRkKHRoaXMuZ2V0U2l6ZSgpKSl9LGdldFBpeGVsT3JpZ2luOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NoZWNrSWZMb2FkZWQoKSx0aGlzLl9waXhlbE9yaWdpbn0sZ2V0UGl4ZWxXb3JsZEJvdW5kczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLmNycy5nZXRQcm9qZWN0ZWRCb3VuZHModm9pZCAwPT09dD90aGlzLmdldFpvb20oKTp0KX0sZ2V0UGFuZTpmdW5jdGlvbih0KXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdD90aGlzLl9wYW5lc1t0XTp0fSxnZXRQYW5lczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYW5lc30sZ2V0Q29udGFpbmVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbnRhaW5lcn0sZ2V0Wm9vbVNjYWxlOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5vcHRpb25zLmNycztyZXR1cm4gZT12b2lkIDA9PT1lP3RoaXMuX3pvb206ZSxpLnNjYWxlKHQpL2kuc2NhbGUoZSl9LGdldFNjYWxlWm9vbTpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMub3B0aW9ucy5jcnMsdD0oZT12b2lkIDA9PT1lP3RoaXMuX3pvb206ZSxpLnpvb20odCppLnNjYWxlKGUpKSk7cmV0dXJuIGlzTmFOKHQpPzEvMDp0fSxwcm9qZWN0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9dm9pZCAwPT09ZT90aGlzLl96b29tOmUsdGhpcy5vcHRpb25zLmNycy5sYXRMbmdUb1BvaW50KHcodCksZSl9LHVucHJvamVjdDpmdW5jdGlvbih0LGUpe3JldHVybiBlPXZvaWQgMD09PWU/dGhpcy5fem9vbTplLHRoaXMub3B0aW9ucy5jcnMucG9pbnRUb0xhdExuZyhtKHQpLGUpfSxsYXllclBvaW50VG9MYXRMbmc6ZnVuY3Rpb24odCl7dD1tKHQpLmFkZCh0aGlzLmdldFBpeGVsT3JpZ2luKCkpO3JldHVybiB0aGlzLnVucHJvamVjdCh0KX0sbGF0TG5nVG9MYXllclBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnByb2plY3Qodyh0KSkuX3JvdW5kKCkuX3N1YnRyYWN0KHRoaXMuZ2V0UGl4ZWxPcmlnaW4oKSl9LHdyYXBMYXRMbmc6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy5jcnMud3JhcExhdExuZyh3KHQpKX0sd3JhcExhdExuZ0JvdW5kczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLmNycy53cmFwTGF0TG5nQm91bmRzKGcodCkpfSxkaXN0YW5jZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLm9wdGlvbnMuY3JzLmRpc3RhbmNlKHcodCksdyhlKSl9LGNvbnRhaW5lclBvaW50VG9MYXllclBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiBtKHQpLnN1YnRyYWN0KHRoaXMuX2dldE1hcFBhbmVQb3MoKSl9LGxheWVyUG9pbnRUb0NvbnRhaW5lclBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiBtKHQpLmFkZCh0aGlzLl9nZXRNYXBQYW5lUG9zKCkpfSxjb250YWluZXJQb2ludFRvTGF0TG5nOmZ1bmN0aW9uKHQpe3Q9dGhpcy5jb250YWluZXJQb2ludFRvTGF5ZXJQb2ludChtKHQpKTtyZXR1cm4gdGhpcy5sYXllclBvaW50VG9MYXRMbmcodCl9LGxhdExuZ1RvQ29udGFpbmVyUG9pbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGF5ZXJQb2ludFRvQ29udGFpbmVyUG9pbnQodGhpcy5sYXRMbmdUb0xheWVyUG9pbnQodyh0KSkpfSxtb3VzZUV2ZW50VG9Db250YWluZXJQb2ludDpmdW5jdGlvbih0KXtyZXR1cm4gRGUodCx0aGlzLl9jb250YWluZXIpfSxtb3VzZUV2ZW50VG9MYXllclBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNvbnRhaW5lclBvaW50VG9MYXllclBvaW50KHRoaXMubW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQodCkpfSxtb3VzZUV2ZW50VG9MYXRMbmc6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGF5ZXJQb2ludFRvTGF0TG5nKHRoaXMubW91c2VFdmVudFRvTGF5ZXJQb2ludCh0KSl9LF9pbml0Q29udGFpbmVyOmZ1bmN0aW9uKHQpe3Q9dGhpcy5fY29udGFpbmVyPV9lKHQpO2lmKCF0KXRocm93IG5ldyBFcnJvcihcIk1hcCBjb250YWluZXIgbm90IGZvdW5kLlwiKTtpZih0Ll9sZWFmbGV0X2lkKXRocm93IG5ldyBFcnJvcihcIk1hcCBjb250YWluZXIgaXMgYWxyZWFkeSBpbml0aWFsaXplZC5cIik7Uyh0LFwic2Nyb2xsXCIsdGhpcy5fb25TY3JvbGwsdGhpcyksdGhpcy5fY29udGFpbmVySWQ9aCh0KX0sX2luaXRMYXlvdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jb250YWluZXIsZT0odGhpcy5fZmFkZUFuaW1hdGVkPXRoaXMub3B0aW9ucy5mYWRlQW5pbWF0aW9uJiZiLmFueTNkLE0odCxcImxlYWZsZXQtY29udGFpbmVyXCIrKGIudG91Y2g/XCIgbGVhZmxldC10b3VjaFwiOlwiXCIpKyhiLnJldGluYT9cIiBsZWFmbGV0LXJldGluYVwiOlwiXCIpKyhiLmllbHQ5P1wiIGxlYWZsZXQtb2xkaWVcIjpcIlwiKSsoYi5zYWZhcmk/XCIgbGVhZmxldC1zYWZhcmlcIjpcIlwiKSsodGhpcy5fZmFkZUFuaW1hdGVkP1wiIGxlYWZsZXQtZmFkZS1hbmltXCI6XCJcIikpLHBlKHQsXCJwb3NpdGlvblwiKSk7XCJhYnNvbHV0ZVwiIT09ZSYmXCJyZWxhdGl2ZVwiIT09ZSYmXCJmaXhlZFwiIT09ZSYmXCJzdGlja3lcIiE9PWUmJih0LnN0eWxlLnBvc2l0aW9uPVwicmVsYXRpdmVcIiksdGhpcy5faW5pdFBhbmVzKCksdGhpcy5faW5pdENvbnRyb2xQb3MmJnRoaXMuX2luaXRDb250cm9sUG9zKCl9LF9pbml0UGFuZXM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wYW5lcz17fTt0aGlzLl9wYW5lUmVuZGVyZXJzPXt9LHRoaXMuX21hcFBhbmU9dGhpcy5jcmVhdGVQYW5lKFwibWFwUGFuZVwiLHRoaXMuX2NvbnRhaW5lciksWih0aGlzLl9tYXBQYW5lLG5ldyBwKDAsMCkpLHRoaXMuY3JlYXRlUGFuZShcInRpbGVQYW5lXCIpLHRoaXMuY3JlYXRlUGFuZShcIm92ZXJsYXlQYW5lXCIpLHRoaXMuY3JlYXRlUGFuZShcInNoYWRvd1BhbmVcIiksdGhpcy5jcmVhdGVQYW5lKFwibWFya2VyUGFuZVwiKSx0aGlzLmNyZWF0ZVBhbmUoXCJ0b29sdGlwUGFuZVwiKSx0aGlzLmNyZWF0ZVBhbmUoXCJwb3B1cFBhbmVcIiksdGhpcy5vcHRpb25zLm1hcmtlclpvb21BbmltYXRpb258fChNKHQubWFya2VyUGFuZSxcImxlYWZsZXQtem9vbS1oaWRlXCIpLE0odC5zaGFkb3dQYW5lLFwibGVhZmxldC16b29tLWhpZGVcIikpfSxfcmVzZXRWaWV3OmZ1bmN0aW9uKHQsZSxpKXtaKHRoaXMuX21hcFBhbmUsbmV3IHAoMCwwKSk7dmFyIG49IXRoaXMuX2xvYWRlZCxvPSh0aGlzLl9sb2FkZWQ9ITAsZT10aGlzLl9saW1pdFpvb20oZSksdGhpcy5maXJlKFwidmlld3ByZXJlc2V0XCIpLHRoaXMuX3pvb20hPT1lKTt0aGlzLl9tb3ZlU3RhcnQobyxpKS5fbW92ZSh0LGUpLl9tb3ZlRW5kKG8pLHRoaXMuZmlyZShcInZpZXdyZXNldFwiKSxuJiZ0aGlzLmZpcmUoXCJsb2FkXCIpfSxfbW92ZVN0YXJ0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQmJnRoaXMuZmlyZShcInpvb21zdGFydFwiKSxlfHx0aGlzLmZpcmUoXCJtb3Zlc3RhcnRcIiksdGhpc30sX21vdmU6ZnVuY3Rpb24odCxlLGksbil7dm9pZCAwPT09ZSYmKGU9dGhpcy5fem9vbSk7dmFyIG89dGhpcy5fem9vbSE9PWU7cmV0dXJuIHRoaXMuX3pvb209ZSx0aGlzLl9sYXN0Q2VudGVyPXQsdGhpcy5fcGl4ZWxPcmlnaW49dGhpcy5fZ2V0TmV3UGl4ZWxPcmlnaW4odCksbj9pJiZpLnBpbmNoJiZ0aGlzLmZpcmUoXCJ6b29tXCIsaSk6KChvfHxpJiZpLnBpbmNoKSYmdGhpcy5maXJlKFwiem9vbVwiLGkpLHRoaXMuZmlyZShcIm1vdmVcIixpKSksdGhpc30sX21vdmVFbmQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnRoaXMuZmlyZShcInpvb21lbmRcIiksdGhpcy5maXJlKFwibW92ZWVuZFwiKX0sX3N0b3A6ZnVuY3Rpb24oKXtyZXR1cm4gcih0aGlzLl9mbHlUb0ZyYW1lKSx0aGlzLl9wYW5BbmltJiZ0aGlzLl9wYW5BbmltLnN0b3AoKSx0aGlzfSxfcmF3UGFuQnk6ZnVuY3Rpb24odCl7Wih0aGlzLl9tYXBQYW5lLHRoaXMuX2dldE1hcFBhbmVQb3MoKS5zdWJ0cmFjdCh0KSl9LF9nZXRab29tU3BhbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldE1heFpvb20oKS10aGlzLmdldE1pblpvb20oKX0sX3Bhbkluc2lkZU1heEJvdW5kczpmdW5jdGlvbigpe3RoaXMuX2VuZm9yY2luZ0JvdW5kc3x8dGhpcy5wYW5JbnNpZGVCb3VuZHModGhpcy5vcHRpb25zLm1heEJvdW5kcyl9LF9jaGVja0lmTG9hZGVkOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX2xvYWRlZCl0aHJvdyBuZXcgRXJyb3IoXCJTZXQgbWFwIGNlbnRlciBhbmQgem9vbSBmaXJzdC5cIil9LF9pbml0RXZlbnRzOmZ1bmN0aW9uKHQpe3RoaXMuX3RhcmdldHM9e307dmFyIGU9dD9rOlM7ZSgodGhpcy5fdGFyZ2V0c1toKHRoaXMuX2NvbnRhaW5lcildPXRoaXMpLl9jb250YWluZXIsXCJjbGljayBkYmxjbGljayBtb3VzZWRvd24gbW91c2V1cCBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2Vtb3ZlIGNvbnRleHRtZW51IGtleXByZXNzIGtleWRvd24ga2V5dXBcIix0aGlzLl9oYW5kbGVET01FdmVudCx0aGlzKSx0aGlzLm9wdGlvbnMudHJhY2tSZXNpemUmJmUod2luZG93LFwicmVzaXplXCIsdGhpcy5fb25SZXNpemUsdGhpcyksYi5hbnkzZCYmdGhpcy5vcHRpb25zLnRyYW5zZm9ybTNETGltaXQmJih0P3RoaXMub2ZmOnRoaXMub24pLmNhbGwodGhpcyxcIm1vdmVlbmRcIix0aGlzLl9vbk1vdmVFbmQpfSxfb25SZXNpemU6ZnVuY3Rpb24oKXtyKHRoaXMuX3Jlc2l6ZVJlcXVlc3QpLHRoaXMuX3Jlc2l6ZVJlcXVlc3Q9eChmdW5jdGlvbigpe3RoaXMuaW52YWxpZGF0ZVNpemUoe2RlYm91bmNlTW92ZWVuZDohMH0pfSx0aGlzKX0sX29uU2Nyb2xsOmZ1bmN0aW9uKCl7dGhpcy5fY29udGFpbmVyLnNjcm9sbFRvcD0wLHRoaXMuX2NvbnRhaW5lci5zY3JvbGxMZWZ0PTB9LF9vbk1vdmVFbmQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9nZXRNYXBQYW5lUG9zKCk7TWF0aC5tYXgoTWF0aC5hYnModC54KSxNYXRoLmFicyh0LnkpKT49dGhpcy5vcHRpb25zLnRyYW5zZm9ybTNETGltaXQmJnRoaXMuX3Jlc2V0Vmlldyh0aGlzLmdldENlbnRlcigpLHRoaXMuZ2V0Wm9vbSgpKX0sX2ZpbmRFdmVudFRhcmdldHM6ZnVuY3Rpb24odCxlKXtmb3IodmFyIGksbj1bXSxvPVwibW91c2VvdXRcIj09PWV8fFwibW91c2VvdmVyXCI9PT1lLHM9dC50YXJnZXR8fHQuc3JjRWxlbWVudCxyPSExO3M7KXtpZigoaT10aGlzLl90YXJnZXRzW2gocyldKSYmKFwiY2xpY2tcIj09PWV8fFwicHJlY2xpY2tcIj09PWUpJiZ0aGlzLl9kcmFnZ2FibGVNb3ZlZChpKSl7cj0hMDticmVha31pZihpJiZpLmxpc3RlbnMoZSwhMCkpe2lmKG8mJiFXZShzLHQpKWJyZWFrO2lmKG4ucHVzaChpKSxvKWJyZWFrfWlmKHM9PT10aGlzLl9jb250YWluZXIpYnJlYWs7cz1zLnBhcmVudE5vZGV9cmV0dXJuIG49bi5sZW5ndGh8fHJ8fG98fCF0aGlzLmxpc3RlbnMoZSwhMCk/bjpbdGhpc119LF9pc0NsaWNrRGlzYWJsZWQ6ZnVuY3Rpb24odCl7Zm9yKDt0JiZ0IT09dGhpcy5fY29udGFpbmVyOyl7aWYodC5fbGVhZmxldF9kaXNhYmxlX2NsaWNrKXJldHVybiEwO3Q9dC5wYXJlbnROb2RlfX0sX2hhbmRsZURPTUV2ZW50OmZ1bmN0aW9uKHQpe3ZhciBlLGk9dC50YXJnZXR8fHQuc3JjRWxlbWVudDshdGhpcy5fbG9hZGVkfHxpLl9sZWFmbGV0X2Rpc2FibGVfZXZlbnRzfHxcImNsaWNrXCI9PT10LnR5cGUmJnRoaXMuX2lzQ2xpY2tEaXNhYmxlZChpKXx8KFwibW91c2Vkb3duXCI9PT0oZT10LnR5cGUpJiZNZShpKSx0aGlzLl9maXJlRE9NRXZlbnQodCxlKSl9LF9tb3VzZUV2ZW50czpbXCJjbGlja1wiLFwiZGJsY2xpY2tcIixcIm1vdXNlb3ZlclwiLFwibW91c2VvdXRcIixcImNvbnRleHRtZW51XCJdLF9maXJlRE9NRXZlbnQ6ZnVuY3Rpb24odCxlLGkpe1wiY2xpY2tcIj09PXQudHlwZSYmKChhPWwoe30sdCkpLnR5cGU9XCJwcmVjbGlja1wiLHRoaXMuX2ZpcmVET01FdmVudChhLGEudHlwZSxpKSk7dmFyIG49dGhpcy5fZmluZEV2ZW50VGFyZ2V0cyh0LGUpO2lmKGkpe2Zvcih2YXIgbz1bXSxzPTA7czxpLmxlbmd0aDtzKyspaVtzXS5saXN0ZW5zKGUsITApJiZvLnB1c2goaVtzXSk7bj1vLmNvbmNhdChuKX1pZihuLmxlbmd0aCl7XCJjb250ZXh0bWVudVwiPT09ZSYmTyh0KTt2YXIgcixhPW5bMF0saD17b3JpZ2luYWxFdmVudDp0fTtmb3IoXCJrZXlwcmVzc1wiIT09dC50eXBlJiZcImtleWRvd25cIiE9PXQudHlwZSYmXCJrZXl1cFwiIT09dC50eXBlJiYocj1hLmdldExhdExuZyYmKCFhLl9yYWRpdXN8fGEuX3JhZGl1czw9MTApLGguY29udGFpbmVyUG9pbnQ9cj90aGlzLmxhdExuZ1RvQ29udGFpbmVyUG9pbnQoYS5nZXRMYXRMbmcoKSk6dGhpcy5tb3VzZUV2ZW50VG9Db250YWluZXJQb2ludCh0KSxoLmxheWVyUG9pbnQ9dGhpcy5jb250YWluZXJQb2ludFRvTGF5ZXJQb2ludChoLmNvbnRhaW5lclBvaW50KSxoLmxhdGxuZz1yP2EuZ2V0TGF0TG5nKCk6dGhpcy5sYXllclBvaW50VG9MYXRMbmcoaC5sYXllclBvaW50KSkscz0wO3M8bi5sZW5ndGg7cysrKWlmKG5bc10uZmlyZShlLGgsITApLGgub3JpZ2luYWxFdmVudC5fc3RvcHBlZHx8ITE9PT1uW3NdLm9wdGlvbnMuYnViYmxpbmdNb3VzZUV2ZW50cyYmLTEhPT1HKHRoaXMuX21vdXNlRXZlbnRzLGUpKXJldHVybn19LF9kcmFnZ2FibGVNb3ZlZDpmdW5jdGlvbih0KXtyZXR1cm4odD10LmRyYWdnaW5nJiZ0LmRyYWdnaW5nLmVuYWJsZWQoKT90OnRoaXMpLmRyYWdnaW5nJiZ0LmRyYWdnaW5nLm1vdmVkKCl8fHRoaXMuYm94Wm9vbSYmdGhpcy5ib3hab29tLm1vdmVkKCl9LF9jbGVhckhhbmRsZXJzOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsZT10aGlzLl9oYW5kbGVycy5sZW5ndGg7dDxlO3QrKyl0aGlzLl9oYW5kbGVyc1t0XS5kaXNhYmxlKCl9LHdoZW5SZWFkeTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9sb2FkZWQ/dC5jYWxsKGV8fHRoaXMse3RhcmdldDp0aGlzfSk6dGhpcy5vbihcImxvYWRcIix0LGUpLHRoaXN9LF9nZXRNYXBQYW5lUG9zOmZ1bmN0aW9uKCl7cmV0dXJuIFBlKHRoaXMuX21hcFBhbmUpfHxuZXcgcCgwLDApfSxfbW92ZWQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9nZXRNYXBQYW5lUG9zKCk7cmV0dXJuIHQmJiF0LmVxdWFscyhbMCwwXSl9LF9nZXRUb3BMZWZ0UG9pbnQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4odCYmdm9pZCAwIT09ZT90aGlzLl9nZXROZXdQaXhlbE9yaWdpbih0LGUpOnRoaXMuZ2V0UGl4ZWxPcmlnaW4oKSkuc3VidHJhY3QodGhpcy5fZ2V0TWFwUGFuZVBvcygpKX0sX2dldE5ld1BpeGVsT3JpZ2luOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5nZXRTaXplKCkuX2RpdmlkZUJ5KDIpO3JldHVybiB0aGlzLnByb2plY3QodCxlKS5fc3VidHJhY3QoaSkuX2FkZCh0aGlzLl9nZXRNYXBQYW5lUG9zKCkpLl9yb3VuZCgpfSxfbGF0TG5nVG9OZXdMYXllclBvaW50OmZ1bmN0aW9uKHQsZSxpKXtpPXRoaXMuX2dldE5ld1BpeGVsT3JpZ2luKGksZSk7cmV0dXJuIHRoaXMucHJvamVjdCh0LGUpLl9zdWJ0cmFjdChpKX0sX2xhdExuZ0JvdW5kc1RvTmV3TGF5ZXJCb3VuZHM6ZnVuY3Rpb24odCxlLGkpe2k9dGhpcy5fZ2V0TmV3UGl4ZWxPcmlnaW4oaSxlKTtyZXR1cm4gXyhbdGhpcy5wcm9qZWN0KHQuZ2V0U291dGhXZXN0KCksZSkuX3N1YnRyYWN0KGkpLHRoaXMucHJvamVjdCh0LmdldE5vcnRoV2VzdCgpLGUpLl9zdWJ0cmFjdChpKSx0aGlzLnByb2plY3QodC5nZXRTb3V0aEVhc3QoKSxlKS5fc3VidHJhY3QoaSksdGhpcy5wcm9qZWN0KHQuZ2V0Tm9ydGhFYXN0KCksZSkuX3N1YnRyYWN0KGkpXSl9LF9nZXRDZW50ZXJMYXllclBvaW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udGFpbmVyUG9pbnRUb0xheWVyUG9pbnQodGhpcy5nZXRTaXplKCkuX2RpdmlkZUJ5KDIpKX0sX2dldENlbnRlck9mZnNldDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sYXRMbmdUb0xheWVyUG9pbnQodCkuc3VidHJhY3QodGhpcy5fZ2V0Q2VudGVyTGF5ZXJQb2ludCgpKX0sX2xpbWl0Q2VudGVyOmZ1bmN0aW9uKHQsZSxpKXt2YXIgbixvO3JldHVybiFpfHwobj10aGlzLnByb2plY3QodCxlKSxvPXRoaXMuZ2V0U2l6ZSgpLmRpdmlkZUJ5KDIpLG89bmV3IGYobi5zdWJ0cmFjdChvKSxuLmFkZChvKSksbz10aGlzLl9nZXRCb3VuZHNPZmZzZXQobyxpLGUpLE1hdGguYWJzKG8ueCk8PTEmJk1hdGguYWJzKG8ueSk8PTEpP3Q6dGhpcy51bnByb2plY3Qobi5hZGQobyksZSl9LF9saW1pdE9mZnNldDpmdW5jdGlvbih0LGUpe3ZhciBpO3JldHVybiBlPyhpPW5ldyBmKChpPXRoaXMuZ2V0UGl4ZWxCb3VuZHMoKSkubWluLmFkZCh0KSxpLm1heC5hZGQodCkpLHQuYWRkKHRoaXMuX2dldEJvdW5kc09mZnNldChpLGUpKSk6dH0sX2dldEJvdW5kc09mZnNldDpmdW5jdGlvbih0LGUsaSl7ZT1fKHRoaXMucHJvamVjdChlLmdldE5vcnRoRWFzdCgpLGkpLHRoaXMucHJvamVjdChlLmdldFNvdXRoV2VzdCgpLGkpKSxpPWUubWluLnN1YnRyYWN0KHQubWluKSxlPWUubWF4LnN1YnRyYWN0KHQubWF4KTtyZXR1cm4gbmV3IHAodGhpcy5fcmVib3VuZChpLngsLWUueCksdGhpcy5fcmVib3VuZChpLnksLWUueSkpfSxfcmVib3VuZDpmdW5jdGlvbih0LGUpe3JldHVybiAwPHQrZT9NYXRoLnJvdW5kKHQtZSkvMjpNYXRoLm1heCgwLE1hdGguY2VpbCh0KSktTWF0aC5tYXgoMCxNYXRoLmZsb29yKGUpKX0sX2xpbWl0Wm9vbTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmdldE1pblpvb20oKSxpPXRoaXMuZ2V0TWF4Wm9vbSgpLG49Yi5hbnkzZD90aGlzLm9wdGlvbnMuem9vbVNuYXA6MTtyZXR1cm4gbiYmKHQ9TWF0aC5yb3VuZCh0L24pKm4pLE1hdGgubWF4KGUsTWF0aC5taW4oaSx0KSl9LF9vblBhblRyYW5zaXRpb25TdGVwOmZ1bmN0aW9uKCl7dGhpcy5maXJlKFwibW92ZVwiKX0sX29uUGFuVHJhbnNpdGlvbkVuZDpmdW5jdGlvbigpe3oodGhpcy5fbWFwUGFuZSxcImxlYWZsZXQtcGFuLWFuaW1cIiksdGhpcy5maXJlKFwibW92ZWVuZFwiKX0sX3RyeUFuaW1hdGVkUGFuOmZ1bmN0aW9uKHQsZSl7dD10aGlzLl9nZXRDZW50ZXJPZmZzZXQodCkuX3RydW5jKCk7cmV0dXJuISghMCE9PShlJiZlLmFuaW1hdGUpJiYhdGhpcy5nZXRTaXplKCkuY29udGFpbnModCkpJiYodGhpcy5wYW5CeSh0LGUpLCEwKX0sX2NyZWF0ZUFuaW1Qcm94eTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3Byb3h5PVAoXCJkaXZcIixcImxlYWZsZXQtcHJveHkgbGVhZmxldC16b29tLWFuaW1hdGVkXCIpO3RoaXMuX3BhbmVzLm1hcFBhbmUuYXBwZW5kQ2hpbGQodCksdGhpcy5vbihcInpvb21hbmltXCIsZnVuY3Rpb24odCl7dmFyIGU9dWUsaT10aGlzLl9wcm94eS5zdHlsZVtlXTtiZSh0aGlzLl9wcm94eSx0aGlzLnByb2plY3QodC5jZW50ZXIsdC56b29tKSx0aGlzLmdldFpvb21TY2FsZSh0Lnpvb20sMSkpLGk9PT10aGlzLl9wcm94eS5zdHlsZVtlXSYmdGhpcy5fYW5pbWF0aW5nWm9vbSYmdGhpcy5fb25ab29tVHJhbnNpdGlvbkVuZCgpfSx0aGlzKSx0aGlzLm9uKFwibG9hZCBtb3ZlZW5kXCIsdGhpcy5fYW5pbU1vdmVFbmQsdGhpcyksdGhpcy5fb24oXCJ1bmxvYWRcIix0aGlzLl9kZXN0cm95QW5pbVByb3h5LHRoaXMpfSxfZGVzdHJveUFuaW1Qcm94eTpmdW5jdGlvbigpe1QodGhpcy5fcHJveHkpLHRoaXMub2ZmKFwibG9hZCBtb3ZlZW5kXCIsdGhpcy5fYW5pbU1vdmVFbmQsdGhpcyksZGVsZXRlIHRoaXMuX3Byb3h5fSxfYW5pbU1vdmVFbmQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdldENlbnRlcigpLGU9dGhpcy5nZXRab29tKCk7YmUodGhpcy5fcHJveHksdGhpcy5wcm9qZWN0KHQsZSksdGhpcy5nZXRab29tU2NhbGUoZSwxKSl9LF9jYXRjaFRyYW5zaXRpb25FbmQ6ZnVuY3Rpb24odCl7dGhpcy5fYW5pbWF0aW5nWm9vbSYmMDw9dC5wcm9wZXJ0eU5hbWUuaW5kZXhPZihcInRyYW5zZm9ybVwiKSYmdGhpcy5fb25ab29tVHJhbnNpdGlvbkVuZCgpfSxfbm90aGluZ1RvQW5pbWF0ZTpmdW5jdGlvbigpe3JldHVybiF0aGlzLl9jb250YWluZXIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImxlYWZsZXQtem9vbS1hbmltYXRlZFwiKS5sZW5ndGh9LF90cnlBbmltYXRlZFpvb206ZnVuY3Rpb24odCxlLGkpe2lmKCF0aGlzLl9hbmltYXRpbmdab29tKXtpZihpPWl8fHt9LCF0aGlzLl96b29tQW5pbWF0ZWR8fCExPT09aS5hbmltYXRlfHx0aGlzLl9ub3RoaW5nVG9BbmltYXRlKCl8fE1hdGguYWJzKGUtdGhpcy5fem9vbSk+dGhpcy5vcHRpb25zLnpvb21BbmltYXRpb25UaHJlc2hvbGQpcmV0dXJuITE7dmFyIG49dGhpcy5nZXRab29tU2NhbGUoZSksbj10aGlzLl9nZXRDZW50ZXJPZmZzZXQodCkuX2RpdmlkZUJ5KDEtMS9uKTtpZighMCE9PWkuYW5pbWF0ZSYmIXRoaXMuZ2V0U2l6ZSgpLmNvbnRhaW5zKG4pKXJldHVybiExO3goZnVuY3Rpb24oKXt0aGlzLl9tb3ZlU3RhcnQoITAsaS5ub01vdmVTdGFydHx8ITEpLl9hbmltYXRlWm9vbSh0LGUsITApfSx0aGlzKX1yZXR1cm4hMH0sX2FuaW1hdGVab29tOmZ1bmN0aW9uKHQsZSxpLG4pe3RoaXMuX21hcFBhbmUmJihpJiYodGhpcy5fYW5pbWF0aW5nWm9vbT0hMCx0aGlzLl9hbmltYXRlVG9DZW50ZXI9dCx0aGlzLl9hbmltYXRlVG9ab29tPWUsTSh0aGlzLl9tYXBQYW5lLFwibGVhZmxldC16b29tLWFuaW1cIikpLHRoaXMuZmlyZShcInpvb21hbmltXCIse2NlbnRlcjp0LHpvb206ZSxub1VwZGF0ZTpufSksdGhpcy5fdGVtcEZpcmVab29tRXZlbnR8fCh0aGlzLl90ZW1wRmlyZVpvb21FdmVudD10aGlzLl96b29tIT09dGhpcy5fYW5pbWF0ZVRvWm9vbSksdGhpcy5fbW92ZSh0aGlzLl9hbmltYXRlVG9DZW50ZXIsdGhpcy5fYW5pbWF0ZVRvWm9vbSx2b2lkIDAsITApLHNldFRpbWVvdXQoYSh0aGlzLl9vblpvb21UcmFuc2l0aW9uRW5kLHRoaXMpLDI1MCkpfSxfb25ab29tVHJhbnNpdGlvbkVuZDpmdW5jdGlvbigpe3RoaXMuX2FuaW1hdGluZ1pvb20mJih0aGlzLl9tYXBQYW5lJiZ6KHRoaXMuX21hcFBhbmUsXCJsZWFmbGV0LXpvb20tYW5pbVwiKSx0aGlzLl9hbmltYXRpbmdab29tPSExLHRoaXMuX21vdmUodGhpcy5fYW5pbWF0ZVRvQ2VudGVyLHRoaXMuX2FuaW1hdGVUb1pvb20sdm9pZCAwLCEwKSx0aGlzLl90ZW1wRmlyZVpvb21FdmVudCYmdGhpcy5maXJlKFwiem9vbVwiKSxkZWxldGUgdGhpcy5fdGVtcEZpcmVab29tRXZlbnQsdGhpcy5maXJlKFwibW92ZVwiKSx0aGlzLl9tb3ZlRW5kKCEwKSl9fSk7ZnVuY3Rpb24gVWUodCl7cmV0dXJuIG5ldyBCKHQpfXZhciBCPWV0LmV4dGVuZCh7b3B0aW9uczp7cG9zaXRpb246XCJ0b3ByaWdodFwifSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe2ModGhpcyx0KX0sZ2V0UG9zaXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLnBvc2l0aW9ufSxzZXRQb3NpdGlvbjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9tYXA7cmV0dXJuIGUmJmUucmVtb3ZlQ29udHJvbCh0aGlzKSx0aGlzLm9wdGlvbnMucG9zaXRpb249dCxlJiZlLmFkZENvbnRyb2wodGhpcyksdGhpc30sZ2V0Q29udGFpbmVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbnRhaW5lcn0sYWRkVG86ZnVuY3Rpb24odCl7dGhpcy5yZW1vdmUoKSx0aGlzLl9tYXA9dDt2YXIgZT10aGlzLl9jb250YWluZXI9dGhpcy5vbkFkZCh0KSxpPXRoaXMuZ2V0UG9zaXRpb24oKSx0PXQuX2NvbnRyb2xDb3JuZXJzW2ldO3JldHVybiBNKGUsXCJsZWFmbGV0LWNvbnRyb2xcIiksLTEhPT1pLmluZGV4T2YoXCJib3R0b21cIik/dC5pbnNlcnRCZWZvcmUoZSx0LmZpcnN0Q2hpbGQpOnQuYXBwZW5kQ2hpbGQoZSksdGhpcy5fbWFwLm9uKFwidW5sb2FkXCIsdGhpcy5yZW1vdmUsdGhpcyksdGhpc30scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hcCYmKFQodGhpcy5fY29udGFpbmVyKSx0aGlzLm9uUmVtb3ZlJiZ0aGlzLm9uUmVtb3ZlKHRoaXMuX21hcCksdGhpcy5fbWFwLm9mZihcInVubG9hZFwiLHRoaXMucmVtb3ZlLHRoaXMpLHRoaXMuX21hcD1udWxsKSx0aGlzfSxfcmVmb2N1c09uTWFwOmZ1bmN0aW9uKHQpe3RoaXMuX21hcCYmdCYmMDx0LnNjcmVlblgmJjA8dC5zY3JlZW5ZJiZ0aGlzLl9tYXAuZ2V0Q29udGFpbmVyKCkuZm9jdXMoKX19KSxWZT0oQS5pbmNsdWRlKHthZGRDb250cm9sOmZ1bmN0aW9uKHQpe3JldHVybiB0LmFkZFRvKHRoaXMpLHRoaXN9LHJlbW92ZUNvbnRyb2w6ZnVuY3Rpb24odCl7cmV0dXJuIHQucmVtb3ZlKCksdGhpc30sX2luaXRDb250cm9sUG9zOmZ1bmN0aW9uKCl7dmFyIGk9dGhpcy5fY29udHJvbENvcm5lcnM9e30sbj1cImxlYWZsZXQtXCIsbz10aGlzLl9jb250cm9sQ29udGFpbmVyPVAoXCJkaXZcIixuK1wiY29udHJvbC1jb250YWluZXJcIix0aGlzLl9jb250YWluZXIpO2Z1bmN0aW9uIHQodCxlKXtpW3QrZV09UChcImRpdlwiLG4rdCtcIiBcIituK2Usbyl9dChcInRvcFwiLFwibGVmdFwiKSx0KFwidG9wXCIsXCJyaWdodFwiKSx0KFwiYm90dG9tXCIsXCJsZWZ0XCIpLHQoXCJib3R0b21cIixcInJpZ2h0XCIpfSxfY2xlYXJDb250cm9sUG9zOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuX2NvbnRyb2xDb3JuZXJzKVQodGhpcy5fY29udHJvbENvcm5lcnNbdF0pO1QodGhpcy5fY29udHJvbENvbnRhaW5lciksZGVsZXRlIHRoaXMuX2NvbnRyb2xDb3JuZXJzLGRlbGV0ZSB0aGlzLl9jb250cm9sQ29udGFpbmVyfX0pLEIuZXh0ZW5kKHtvcHRpb25zOntjb2xsYXBzZWQ6ITAscG9zaXRpb246XCJ0b3ByaWdodFwiLGF1dG9aSW5kZXg6ITAsaGlkZVNpbmdsZUJhc2U6ITEsc29ydExheWVyczohMSxzb3J0RnVuY3Rpb246ZnVuY3Rpb24odCxlLGksbil7cmV0dXJuIGk8bj8tMTpuPGk/MTowfX0saW5pdGlhbGl6ZTpmdW5jdGlvbih0LGUsaSl7Zm9yKHZhciBuIGluIGModGhpcyxpKSx0aGlzLl9sYXllckNvbnRyb2xJbnB1dHM9W10sdGhpcy5fbGF5ZXJzPVtdLHRoaXMuX2xhc3RaSW5kZXg9MCx0aGlzLl9oYW5kbGluZ0NsaWNrPSExLHRoaXMuX3ByZXZlbnRDbGljaz0hMSx0KXRoaXMuX2FkZExheWVyKHRbbl0sbik7Zm9yKG4gaW4gZSl0aGlzLl9hZGRMYXllcihlW25dLG4sITApfSxvbkFkZDpmdW5jdGlvbih0KXt0aGlzLl9pbml0TGF5b3V0KCksdGhpcy5fdXBkYXRlKCksKHRoaXMuX21hcD10KS5vbihcInpvb21lbmRcIix0aGlzLl9jaGVja0Rpc2FibGVkTGF5ZXJzLHRoaXMpO2Zvcih2YXIgZT0wO2U8dGhpcy5fbGF5ZXJzLmxlbmd0aDtlKyspdGhpcy5fbGF5ZXJzW2VdLmxheWVyLm9uKFwiYWRkIHJlbW92ZVwiLHRoaXMuX29uTGF5ZXJDaGFuZ2UsdGhpcyk7cmV0dXJuIHRoaXMuX2NvbnRhaW5lcn0sYWRkVG86ZnVuY3Rpb24odCl7cmV0dXJuIEIucHJvdG90eXBlLmFkZFRvLmNhbGwodGhpcyx0KSx0aGlzLl9leHBhbmRJZk5vdENvbGxhcHNlZCgpfSxvblJlbW92ZTpmdW5jdGlvbigpe3RoaXMuX21hcC5vZmYoXCJ6b29tZW5kXCIsdGhpcy5fY2hlY2tEaXNhYmxlZExheWVycyx0aGlzKTtmb3IodmFyIHQ9MDt0PHRoaXMuX2xheWVycy5sZW5ndGg7dCsrKXRoaXMuX2xheWVyc1t0XS5sYXllci5vZmYoXCJhZGQgcmVtb3ZlXCIsdGhpcy5fb25MYXllckNoYW5nZSx0aGlzKX0sYWRkQmFzZUxheWVyOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2FkZExheWVyKHQsZSksdGhpcy5fbWFwP3RoaXMuX3VwZGF0ZSgpOnRoaXN9LGFkZE92ZXJsYXk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fYWRkTGF5ZXIodCxlLCEwKSx0aGlzLl9tYXA/dGhpcy5fdXBkYXRlKCk6dGhpc30scmVtb3ZlTGF5ZXI6ZnVuY3Rpb24odCl7dC5vZmYoXCJhZGQgcmVtb3ZlXCIsdGhpcy5fb25MYXllckNoYW5nZSx0aGlzKTt0PXRoaXMuX2dldExheWVyKGgodCkpO3JldHVybiB0JiZ0aGlzLl9sYXllcnMuc3BsaWNlKHRoaXMuX2xheWVycy5pbmRleE9mKHQpLDEpLHRoaXMuX21hcD90aGlzLl91cGRhdGUoKTp0aGlzfSxleHBhbmQ6ZnVuY3Rpb24oKXtNKHRoaXMuX2NvbnRhaW5lcixcImxlYWZsZXQtY29udHJvbC1sYXllcnMtZXhwYW5kZWRcIiksdGhpcy5fc2VjdGlvbi5zdHlsZS5oZWlnaHQ9bnVsbDt2YXIgdD10aGlzLl9tYXAuZ2V0U2l6ZSgpLnktKHRoaXMuX2NvbnRhaW5lci5vZmZzZXRUb3ArNTApO3JldHVybiB0PHRoaXMuX3NlY3Rpb24uY2xpZW50SGVpZ2h0PyhNKHRoaXMuX3NlY3Rpb24sXCJsZWFmbGV0LWNvbnRyb2wtbGF5ZXJzLXNjcm9sbGJhclwiKSx0aGlzLl9zZWN0aW9uLnN0eWxlLmhlaWdodD10K1wicHhcIik6eih0aGlzLl9zZWN0aW9uLFwibGVhZmxldC1jb250cm9sLWxheWVycy1zY3JvbGxiYXJcIiksdGhpcy5fY2hlY2tEaXNhYmxlZExheWVycygpLHRoaXN9LGNvbGxhcHNlOmZ1bmN0aW9uKCl7cmV0dXJuIHoodGhpcy5fY29udGFpbmVyLFwibGVhZmxldC1jb250cm9sLWxheWVycy1leHBhbmRlZFwiKSx0aGlzfSxfaW5pdExheW91dDpmdW5jdGlvbigpe3ZhciB0PVwibGVhZmxldC1jb250cm9sLWxheWVyc1wiLGU9dGhpcy5fY29udGFpbmVyPVAoXCJkaXZcIix0KSxpPXRoaXMub3B0aW9ucy5jb2xsYXBzZWQsbj0oZS5zZXRBdHRyaWJ1dGUoXCJhcmlhLWhhc3BvcHVwXCIsITApLEllKGUpLEJlKGUpLHRoaXMuX3NlY3Rpb249UChcInNlY3Rpb25cIix0K1wiLWxpc3RcIikpLG89KGkmJih0aGlzLl9tYXAub24oXCJjbGlja1wiLHRoaXMuY29sbGFwc2UsdGhpcyksUyhlLHttb3VzZWVudGVyOnRoaXMuX2V4cGFuZFNhZmVseSxtb3VzZWxlYXZlOnRoaXMuY29sbGFwc2V9LHRoaXMpKSx0aGlzLl9sYXllcnNMaW5rPVAoXCJhXCIsdCtcIi10b2dnbGVcIixlKSk7by5ocmVmPVwiI1wiLG8udGl0bGU9XCJMYXllcnNcIixvLnNldEF0dHJpYnV0ZShcInJvbGVcIixcImJ1dHRvblwiKSxTKG8se2tleWRvd246ZnVuY3Rpb24odCl7MTM9PT10LmtleUNvZGUmJnRoaXMuX2V4cGFuZFNhZmVseSgpfSxjbGljazpmdW5jdGlvbih0KXtPKHQpLHRoaXMuX2V4cGFuZFNhZmVseSgpfX0sdGhpcyksaXx8dGhpcy5leHBhbmQoKSx0aGlzLl9iYXNlTGF5ZXJzTGlzdD1QKFwiZGl2XCIsdCtcIi1iYXNlXCIsbiksdGhpcy5fc2VwYXJhdG9yPVAoXCJkaXZcIix0K1wiLXNlcGFyYXRvclwiLG4pLHRoaXMuX292ZXJsYXlzTGlzdD1QKFwiZGl2XCIsdCtcIi1vdmVybGF5c1wiLG4pLGUuYXBwZW5kQ2hpbGQobil9LF9nZXRMYXllcjpmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHRoaXMuX2xheWVycy5sZW5ndGg7ZSsrKWlmKHRoaXMuX2xheWVyc1tlXSYmaCh0aGlzLl9sYXllcnNbZV0ubGF5ZXIpPT09dClyZXR1cm4gdGhpcy5fbGF5ZXJzW2VdfSxfYWRkTGF5ZXI6ZnVuY3Rpb24odCxlLGkpe3RoaXMuX21hcCYmdC5vbihcImFkZCByZW1vdmVcIix0aGlzLl9vbkxheWVyQ2hhbmdlLHRoaXMpLHRoaXMuX2xheWVycy5wdXNoKHtsYXllcjp0LG5hbWU6ZSxvdmVybGF5Oml9KSx0aGlzLm9wdGlvbnMuc29ydExheWVycyYmdGhpcy5fbGF5ZXJzLnNvcnQoYShmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLm9wdGlvbnMuc29ydEZ1bmN0aW9uKHQubGF5ZXIsZS5sYXllcix0Lm5hbWUsZS5uYW1lKX0sdGhpcykpLHRoaXMub3B0aW9ucy5hdXRvWkluZGV4JiZ0LnNldFpJbmRleCYmKHRoaXMuX2xhc3RaSW5kZXgrKyx0LnNldFpJbmRleCh0aGlzLl9sYXN0WkluZGV4KSksdGhpcy5fZXhwYW5kSWZOb3RDb2xsYXBzZWQoKX0sX3VwZGF0ZTpmdW5jdGlvbigpe2lmKHRoaXMuX2NvbnRhaW5lcil7bWUodGhpcy5fYmFzZUxheWVyc0xpc3QpLG1lKHRoaXMuX292ZXJsYXlzTGlzdCksdGhpcy5fbGF5ZXJDb250cm9sSW5wdXRzPVtdO2Zvcih2YXIgdCxlLGksbj0wLG89MDtvPHRoaXMuX2xheWVycy5sZW5ndGg7bysrKWk9dGhpcy5fbGF5ZXJzW29dLHRoaXMuX2FkZEl0ZW0oaSksZT1lfHxpLm92ZXJsYXksdD10fHwhaS5vdmVybGF5LG4rPWkub3ZlcmxheT8wOjE7dGhpcy5vcHRpb25zLmhpZGVTaW5nbGVCYXNlJiYodGhpcy5fYmFzZUxheWVyc0xpc3Quc3R5bGUuZGlzcGxheT0odD10JiYxPG4pP1wiXCI6XCJub25lXCIpLHRoaXMuX3NlcGFyYXRvci5zdHlsZS5kaXNwbGF5PWUmJnQ/XCJcIjpcIm5vbmVcIn1yZXR1cm4gdGhpc30sX29uTGF5ZXJDaGFuZ2U6ZnVuY3Rpb24odCl7dGhpcy5faGFuZGxpbmdDbGlja3x8dGhpcy5fdXBkYXRlKCk7dmFyIGU9dGhpcy5fZ2V0TGF5ZXIoaCh0LnRhcmdldCkpLHQ9ZS5vdmVybGF5P1wiYWRkXCI9PT10LnR5cGU/XCJvdmVybGF5YWRkXCI6XCJvdmVybGF5cmVtb3ZlXCI6XCJhZGRcIj09PXQudHlwZT9cImJhc2VsYXllcmNoYW5nZVwiOm51bGw7dCYmdGhpcy5fbWFwLmZpcmUodCxlKX0sX2NyZWF0ZVJhZGlvRWxlbWVudDpmdW5jdGlvbih0LGUpe3Q9JzxpbnB1dCB0eXBlPVwicmFkaW9cIiBjbGFzcz1cImxlYWZsZXQtY29udHJvbC1sYXllcnMtc2VsZWN0b3JcIiBuYW1lPVwiJyt0KydcIicrKGU/JyBjaGVja2VkPVwiY2hlY2tlZFwiJzpcIlwiKStcIi8+XCIsZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO3JldHVybiBlLmlubmVySFRNTD10LGUuZmlyc3RDaGLSDkZH0sX2FkZEl0ZW06ZnVuY3Rpb24odCl7dmFyIGUsaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGFiZWxcIiksbj10aGlzLl9tYXAuaGFzTGF5ZXIodC5sYXllciksbj0odC5vdmVybGF5PygoZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIikpLnR5cGU9XCJjaGVja2JveFwiLGUuY2xhc3NOYW1lPVwibGVhZmxldC1jb250cm9sLWxheWVycy1zZWxlY3RvclwiLGUuZGVmYXVsdENoZWNrZWQ9bik6ZT10aGlzLl9jcmVhdGVSYWRpb0VsZW1lbnQoXCJsZWFmbGV0LWJhc2UtbGF5ZXJzX1wiK2godGhpcyksbiksdGhpcy5fbGF5ZXJDb250cm9sSW5wdXRzLnB1c2goZSksZS5sYXllcklkPWgodC5sYXllciksUyhlLFwiY2xpY2tcIix0aGlzLl9vbklucHV0Q2xpY2ssdGhpcyksZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIikpLG89KG4uaW5uZXJIVE1MPVwiIFwiK3QubmFtZSxkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKSk7cmV0dXJuIGkuYXBwZW5kQ2hpbGQobyksby5hcHBlbmRDaGLSDkZChlKSxvLmFwcGVuZENoaWxkKG4pLCh0Lm92ZXJsYXk/dGhpcy5fb3ZlcmxheXNMaXN0OnRoaXMuX2Jhc2VMYXllcnNMaXN0KS5hcHBlbmRDaGLSDkZChpKSx0aGlzLl9jaGVja0Rpc2FibGVkTGF5ZXJzKCksaX0sX29uSW5wdXRDbGljazpmdW5jdGlvbigpe2lmKCF0aGlzLl9wcmV2ZW50Q2xpY2spe3ZhciB0LGUsaT10aGlzLl9sYXllckNvbnRyb2xJbnB1dHMsbj1bXSxvPVtdO3RoaXMuX2hhbmRsaW5nQ2xpY2s9ITA7Zm9yKHZhciBzPWkubGVuZ3RoLTE7MDw9cztzLS0pdD1pW3NdLGU9dGhpcy5fZ2V0TGF5ZXIodC5sYXllcklkKS5sYXllcix0LmNoZWNrZWQ/bi5wdXNoKGUpOnQuY2hlY2tlZHx8by5wdXNoKGUpO2ZvcihzPTA7czxvLmxlbmd0aDtzKyspdGhpcy5fbWFwLmhhc0xheWVyKG9bc10pJiZ0aGlzLl9tYXAucmVtb3ZlTGF5ZXIob1tzXSk7Zm9yKHM9MDtzPG4ubGVuZ3RoO3MrKyl0aGlzLl9tYXAuaGFzTGF5ZXIobltzXSl8fHRoaXMuX21hcC5hZGRMYXllcihuW3NdKTt0aGlzLl9oYW5kbGluZ0NsaWNrPSExLHRoaXMuX3JlZm9jdXNPbk1hcCgpfX0sX2NoZWNrRGlzYWJsZWRMYXllcnM6ZnVuY3Rpb24oKXtmb3IodmFyIHQsZSxpPXRoaXMuX2xheWVyQ29udHJvbElucHV0cyxuPXRoaXMuX21hcC5nZXRab29tKCksbz1pLmxlbmd0aC0xOzA8PW87by0tKXQ9aVtvXSxlPXRoaXMuX2dldExheWVyKHQubGF5ZXJJZCkubGF5ZXIsdC5kaXNhYmxlZD12b2lkIDAhPT1lLm9wdGlvbnMubWluWm9vbSYmbjxlLm9wdGlvbnMubWluWm9vbXx8dm9pZCAwIT09ZS5vcHRpb25zLm1heFpvb20mJm4+ZS5vcHRpb25zLm1heFpvb219LF9leHBhbmRJZk5vdENvbGxhcHNlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXAmJiF0aGlzLm9wdGlvbnMuY29sbGFwc2VkJiZ0aGlzLmV4cGFuZCgpLHRoaXN9LF9leHBhbmRTYWZlbHk6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zZWN0aW9uLGU9KHRoaXMuX3ByZXZlbnRDbGljaz0hMCxTKHQsXCJjbGlja1wiLE8pLHRoaXMuZXhwYW5kKCksdGhpcyk7c2V0VGltZW91dChmdW5jdGlvbigpe2sodCxcImNsaWNrXCIsTyksZS5fcHJldmVudENsaWNrPSExfSl9fSkpLHFlPUIuZXh0ZW5kKHtvcHRpb25zOntwb3NpdGlvbjpcInRvcGxlZnRcIix6b29tSW5UZXh0Oic8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4rPC9zcGFuPicsem9vbUluVGl0bGU6XCJab29tIGluXCIsem9vbU91dFRleHQ6JzxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiYjeDIyMTI7PC9zcGFuPicsem9vbU91dFRpdGxlOlwiWm9vbSBvdXRcIn0sb25BZGQ6ZnVuY3Rpb24odCl7dmFyIGU9XCJsZWFmbGV0LWNvbnRyb2wtem9vbVwiLGk9UChcImRpdlwiLGUrXCIgbGVhZmxldC1iYXJcIiksbj10aGlzLm9wdGlvbnM7cmV0dXJuIHRoaXMuX3pvb21JbkJ1dHRvbj10aGlzLl9jcmVhdGVCdXR0b24obi56b29tSW5UZXh0LG4uem9vbUluVGl0bGUsZStcIi1pblwiLGksdGhpcy5fem9vbUluKSx0aGlzLl96b29tT3V0QnV0dG9uPXRoaXMuX2NyZWF0ZUJ1dHRvbihuLnpvb21PdXRUZXh0LG4uem9vbU91dFRpdGxlLGUrXCItb3V0XCIsaSx0aGlzLl96b29tT3V0KSx0aGlzLl91cGRhdGVEaXNhYmxlZCgpLHQub24oXCJ6b29tZW5kIHpvb21sZXZlbHNjaGFuZ2VcIix0aGlzLl91cGRhdGVEaXNhYmxlZCx0aGlzKSxpfSxvblJlbW92ZTpmdW5jdGlvbih0KXt0Lm9mZihcInpvb21lbmQgem9vbWxldmVsc2NoYW5nZVwiLHRoaXMuX3VwZGF0ZURpc2FibGVkLHRoaXMpfSxkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkPSEwLHRoaXMuX3VwZGF0ZURpc2FibGVkKCksdGhpc30sZW5hYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkPSExLHRoaXMuX3VwZGF0ZURpc2FibGVkKCksdGhpc30sX3pvb21JbjpmdW5jdGlvbih0KXshdGhpcy5fZGlzYWJsZWQmJnRoaXMuX21hcC5fem9vbTx0aGlzLl9tYXAuZ2V0TWF4Wm9vbSgpJiZ0aGlzLl9tYXAuem9vbUluKHRoaXMuX21hcC5vcHRpb25zLnpvb21EZWx0YSoodC5zaGlmdEtleT8zOjEpKX0sX3pvb21PdXQ6ZnVuY3Rpb24odCl7IXRoaXMuX2Rpc2FibGVkJiZ0aGlzLl9tYXAuX3pvb20+dGhpcy5fbWFwLmdldE1pblpvb20oKSYmdGhpcy5fbWFwLnpvb21PdXQodGhpcy5fbWFwLm9wdGlvbnMuem9vbURlbHRhKih0LnNoaWZ0S2V5PzM6MSkpfSxfY3JlYXRlQnV0dG9uOmZ1bmN0aW9uKHQsZSxpLG4sbyl7aT1QKFwiYVwiLGksbik7cmV0dXJuIGkuaW5uZXJIVE1MPXQsaS5ocmVmPVwiI1wiLGkudGl0bGU9ZSxpLnNldEF0dHJpYnV0ZShcInJvbGVcIixcImJ1dHRvblwiKSxpLnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIixlKSxJZShpKSxTKGksXCJjbGlja1wiLFJlKSxTKGksXCJjbGlja1wiLG8sdGhpcyksUyhpLFwiY2xpY2tcIix0aGlzLl9yZWZvY3VzT25NYXAsdGhpcyksaX0sX3VwZGF0ZURpc2FibGVkOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwLGU9XCJsZWFmbGV0LWRpc2FibGVkXCI7eih0aGlzLl96b29tSW5CdXR0b24sZSkseih0aGlzLl96b29tT3V0QnV0dG9uLGUpLHRoaXMuX3pvb21JbkJ1dHRvbi5zZXRBdHRyaWJ1dGUoXCJhcmlhLWRpc2FibGVkXCIsXCJmYWxzZVwiKSx0aGlzLl96b29tT3V0QnV0dG9uLnNldEF0dHJpYnV0ZShcImFyaWEtZGlzYWJsZWRcIixcImZhbHNlXCIpLCF0aGlzLl9kaXNhYmxlZCYmdC5fem9vbSE9PXQuZ2V0TWluWm9vbSgpfHwoTSh0aGlzLl96b29tT3V0QnV0dG9uLGUpLHRoaXMuX3pvb21PdXRCdXR0b24uc2V0QXR0cmlidXRlKFwiYXJpYS1kaXNhYmxlZFwiLFwidHJ1ZVwiKSksIXRoaXMuX2Rpc2FibGVkJiZ0Ll96b29tIT09dC5nZXRNYXhab29tKCl8fChNKHRoaXMuX3pvb21JbkJ1dHRvbixlKSx0aGlzLl96b29tSW5CdXR0b24uc2V0QXR0cmlidXRlKFwiYXJpYS1kaXNhYmxlZFwiLFwidHJ1ZVwiKSl9fSksR2U9KEEubWVyZ2VPcHRpb25zKHt6b29tQ29udHJvbDohMH0pLEEuYWRkSW5pdEhvb2soZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuem9vbUNvbnRyb2wmJih0aGlzLnpvb21Db250cm9sPW5ldyBxZSx0aGlzLmFkZENvbnRyb2wodGhpcy56b29tQ29udHJvbCkpfSksQi5leHRlbmQoe29wdGlvbnM6e3Bvc2l0aW9uOlwiYm90dG9tbGVmdFwiLG1heFdpZHRoOjEwMCxtZXRyaWM6ITAsaW1wZXJpYWw6ITB9LG9uQWRkOmZ1bmN0aW9uKHQpe3ZhciBlPVwibGVhZmxldC1jb250cm9sLXNjYWxlXCIsaT1QKFwiZGl2XCIsZSksbj10aGlzLm9wdGlvbnM7cmV0dXJuIHRoaXMuX2FkZFNjYWxlcyhuLGUrXCItbGluZVwiLGkpLHQub24obi51cGRhdGVXaGVuSWRsZT9cIm1vdmVlbmRcIjpcIm1vdmVcIix0aGlzLl91cGRhdGUsdGhpcyksdC53aGVuUmVhZHkodGhpcy5fdXBkYXRlLHRoaXMpLGl9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe3Qub2ZmKHRoaXMub3B0aW9ucy51cGRhdGVXaGVuSWRsZT9cIm1vdmVlbmRcIjpcIm1vdmVcIix0aGlzLl91cGRhdGUsdGhpcyl9LF9hZGRTY2FsZXM6ZnVuY3Rpb24odCxlLGkpe3QubWV0cmljJiYodGhpcy5fbVNjYWxlPVAoXCJkaXZcIixlLGkpKSx0LmltcGVyaWFsJiYodGhpcy5faVNjYWxlPVAoXCJkaXZcIixlLGkpKX0sX3VwZGF0ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcCxlPXQuZ2V0U2l6ZSgpLnkvMix0PXQuZGlzdGFuY2UodC5jb250YWluZXJQb2ludFRvTGF0TG5nKFswLGVdKSx0LmNvbnRhaW5lclBvaW50VG9MYXRMbmcoW3RoaXMub3B0aW9ucy5tYXhXaWR0aCxlXSkpO3RoaXMuX3VwZGF0ZVNjYWxlcyh0KX0sX3VwZGF0ZVNjYWxlczpmdW5jdGlvbih0KXt0aGlzLm9wdGlvbnMubWV0cmljJiZ0JiZ0aGlzLl91cGRhdGVNZXRyaWModCksdGhpcy5vcHRpb25zLmltcGVyaWFsJiZ0JiZ0aGlzLl91cGRhdGVJbXBlcmlhbCh0KX0sX3VwZGF0ZU1ldHJpYzpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9nZXRSb3VuZE51bSh0KTt0aGlzLl91cGRhdGVTY2FsZSh0aGlzLl9tU2NhbGUsZTwxZTM/ZStcIiBtXCI6ZS8xZTMrXCIga21cIixlL3QpfSxfdXBkYXRlSW1wZXJpYWw6ZnVuY3Rpb24odCl7dmFyIGUsaSx0PTMuMjgwODM5OSp0OzUyODA8dD8oaT10aGlzLl9nZXRSb3VuZE51bShlPXQvNTI4MCksdGhpcy5fdXBkYXRlU2NhbGUodGhpcy5faVNjYWxlLGkrXCIgbWlcIixpL2UpKTooaT10aGlzLl9nZXRSb3VuZE51bSh0KSx0aGlzLl91cGRhdGVTY2FsZSh0aGlzLl9pU2NhbGUsaStcIiBmdFwiLGkvdCkpfSxfdXBkYXRlU2NhbGU6ZnVuY3Rpb24odCxlLGkpe3Quc3R5bGUud2lkdGg9TWF0aC5yb3VuZCh0aGlzLm9wdGlvbnMubWF4V2lkdGgqaSkrXCJweFwiLHQuaW5uZXJIVE1MPWV9LF9nZXRSb3VuZE51bTpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLnBvdygxMCwoTWF0aC5mbG9vcih0KStcIlwiKS5sZW5ndGgtMSksdD10L2U7cmV0dXJuIGUqKHQ9MTA8PXQ/MTA6NTw9dD81OjM8PXQ/MzoyPD10PzI6MSl9fSkpLEtlPUIuZXh0ZW5kKHtvcHRpb25zOntwb3NpdGlvbjpcImJvdHRvbXJpZ2h0XCIscHJlZml4Oic8YSBocmVmPVwiaHR0cHM6Ly9sZWFmbGV0anMuY29tXCIgdGl0bGU9XCJBIEphdmFTY3JpcHQgbGlicmFyeSBmb3IgaW50ZXJhY3RpdmUgbWFwc1wiPicrKGIuaW5saW5lU3ZnPyc8c3ZnIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiOFwiIHZpZXdCb3g9XCIwIDAgMTIgOFwiIGNsYXNzPVwibGVhZmxldC1hdHRyaWJ1dGlvbi1mbGFnXCI+PHBhdGggZmlsbD1cIiM0QzdCRTFcIiBkPVwiTTAgMGgxMnY0SDB6XCIvPjxwYXRoIGZpbGw9XCIjRkZENTAwXCIgZD1cIk0wIDRoMTJ2M0gwelwiLz48cGF0aCBmaWxsPVwiI0UwQkMwMFwiIGQ9XCJNMCA3aDEydjFIMHpcIi8+PC9zdmc+ICc6XCJcIikrXCJMZWFmbGV0PC9hPlwifSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe2ModGhpcyx0KSx0aGlzLl9hdHRyaWJ1dGlvbnM9e319LG9uQWRkOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbih0LmF0dHJpYnV0aW9uQ29udHJvbD10aGlzKS5fY29udGFpbmVyPVAoXCJkaXZcIixcImxlYWZsZXQtY29udHJvbC1hdHRyaWJ1dGlvblwiKSxJZSh0aGlzLl9jb250YWluZXIpLHQuX2xheWVycyl0Ll9sYXllcnNbZV0uZ2V0QXR0cmlidXRpb24mJnRoaXMuYWRkQXR0cmlidXRpb24odC5fbGF5ZXJzW2VdLmdldEF0dHJpYnV0aW9uKCkpO3JldHVybiB0aGlzLl91cGRhdGUoKSx0Lm9uKFwibGF5ZXJhZGRcIix0aGlzLl9hZGRBdHRyaWJ1dGlvbix0aGlzKSx0aGlzLl9jb250YWluZXJ9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe3Qub2ZmKFwibGF5ZXJhZGRcIix0aGlzLl9hZGRBdHRyaWJ1dGlvbix0aGlzKX0sX2FkZEF0dHJpYnV0aW9uOmZ1bmN0aW9uKHQpe3QubGF5ZXIuZ2V0QXR0cmlidXRpb24mJih0aGlzLmFkZEF0dHJpYnV0aW9uKHQubGF5ZXIuZ2V0QXR0cmlidXRpb24oKSksdC5sYXllci5vbmNlKFwicmVtb3ZlXCIsZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0aW9uKHQubGF5ZXIuZ2V0QXR0cmlidXRpb24oKSl9LHRoaXMpKX0sc2V0UHJlZml4OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnMucHJlZml4PXQsdGhpcy5fdXBkYXRlKCksdGhpc30sYWRkQXR0cmlidXRpb246ZnVuY3Rpb24odCl7cmV0dXJuIHQmJih0aGlzLl9hdHRyaWJ1dGlvbnNbdF18fCh0aGlzLl9hdHRyaWJ1dGlvbnNbdF09MCksdGhpcy5fYXR0cmlidXRpb25zW3RdKyssdGhpcy5fdXBkYXRlKCkpLHRoaXN9LHJlbW92ZUF0dHJpYnV0aW9uOmZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0aGlzLl9hdHRyaWJ1dGlvbnNbdF0mJih0aGlzLl9hdHRyaWJ1dGlvbnNbdF0tLSx0aGlzLl91cGRhdGUoKSksdGhpc30sX3VwZGF0ZTpmdW5jdGlvbigpe2lmKHRoaXMuX21hcCl7dmFyIHQsZT1bXTtmb3IodCBpbiB0aGlzLl9hdHRyaWJ1dGlvbnMpdGhpcy5fYXR0cmlidXRpb25zW3RdJiZlLnB1c2godCk7dmFyIGk9W107dGhpcy5vcHRpb25zLnByZWZpeCYmaS5wdXNoKHRoaXMub3B0aW9ucy5wcmVmaXgpLGUubGVuZ3RoJiZpLnB1c2goZS5qb2luKFwiLCBcIikpLHRoaXMuX2NvbnRhaW5lci5pbm5lckhUTUw9aS5qb2luKCcgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+fDwvc3Bhbj4gJyl9fX0pLG49KEEubWVyZ2VPcHRpb25zKHthdHRyaWJ1dGlvbkNvbnRyb2w6ITB9KSxBLmFkZEluaXRIb29rKGZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLmF0dHJpYnV0aW9uQ29udHJvbCYmKG5ldyBLZSkuYWRkVG8odGhpcyl9KSxCLkxheWVycz1WZSxCLlpvb209cWUsQi5TY2FsZT1HZSxCLkF0dHJpYnV0aW9uPUtlLFVlLmxheWVycz1mdW5jdGlvbih0LGUsaSl7cmV0dXJuIG5ldyBWZSh0LGUsaSl9LFVlLnpvb209ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBxZSh0KX0sVWUuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBHZSh0KX0sVWUuYXR0cmlidXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBLZSh0KX0sZXQuZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9uKHQpe3RoaXMuX21hcD10fSxlbmFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5hYmxlZHx8KHRoaXMuX2VuYWJsZWQ9ITAsdGhpcy5hZGRIb29rcygpKSx0aGlzfSxkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VuYWJsZWQmJih0aGlzLl9lbmFibGVkPSExLHRoaXMucmVtb3ZlSG9va3MoKSksdGhpc30sZW5hYmxlZDpmdW5jdGlvbigpe3JldHVybiEhdGhpcy5fZW5hYmxlZH19KSksZnQ9KG4uYWRkVG89ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5hZGRIYW5kbGVyKGUsdGhpcyksdGhpc30se0V2ZW50czplfSksWWU9Yi50b3VjaD9cInRvdWNoc3RhcnQgbW91c2Vkb3duXCI6XCJtb3VzZWRvd25cIixYZT1pdC5leHRlbmQoe29wdGlvbnM6e2NsaWNrVG9sZXJhbmNlOjN9LGluaXRpYWxpemU6ZnVuY3Rpb24odCxlLGksbil7Yyh0aGlzLG4pLHRoaXMuX2VsZW1lbnQ9dCx0aGlzLl9kcmFnU3RhcnRUYXJnZXQ9ZXx8dCx0aGlzLl9wcmV2ZW50T3V0bGluZT1pfSxlbmFibGU6ZnVuY3Rpb24oKXt0aGlzLl9lbmFibGVkfHwoUyh0aGlzLl9kcmFnU3RhcnRUYXJnZXQsWWUsdGhpcy5fb25Eb3duLHRoaXMpLHRoaXMuX2VuYWJsZWQ9ITApfSxkaXNhYmxlOmZ1bmN0aW9uKCl7dGhpcy5fZW5hYmxlZCYmKFhlLl9kcmFnZ2luZz09PXRoaXMmJnRoaXMuZmluaXNoRHJhZyghMCksayh0aGlzLl9kcmFnU3RhcnRUYXJnZXQsWWUsdGhpcy5fb25Eb3duLHRoaXMpLHRoaXMuX2VuYWJsZWQ9ITEsdGhpcy5fbW92ZWQ9ITEpfSxfb25Eb3duOmZ1bmN0aW9uKHQpe3ZhciBlLGk7dGhpcy5fZW5hYmxlZCYmKHRoaXMuX21vdmVkPSExLHZlKHRoaXMuX2VsZW1lbnQsXCJsZWFmbGV0LXpvb20tYW5pbVwiKXx8KHQudG91Y2hlcyYmMSE9PXQudG91Y2hlcy5sZW5ndGg/WGUuX2RyYWdnaW5nPT09dGhpcyYmdGhpcy5maW5pc2hEcmFnKCk6WGUuX2RyYWdnaW5nfHx0LnNoaWZ0S2V5fHwxIT09dC53aGljaCYmMSE9PXQuYnV0dG9uJiYhdC50b3VjaGVzfHwoKFhlLl9kcmFnZ2luZz10aGlzKS5fcHJldmVudE91dGxpbmUmJk1lKHRoaXMuX2VsZW1lbnQpLExlKCkscmUoKSx0aGlzLl9tb3Zpbmd8fCh0aGlzLmZpcmUoXCJkb3duXCIpLGk9dC50b3VjaGVzP3QudG91Y2hlc1swXTp0LGU9Q2UodGhpcy5fZWxlbWVudCksdGhpcy5fc3RhcnRQb2ludD1uZXcgcChpLmNsaWVudFgsaS5jbGllbnRZKSx0aGlzLl9zdGFydFBvcz1QZSh0aGlzLl9lbGVtZW50KSx0aGlzLl9wYXJlbnRTY2FsZT1aZShlKSxpPVwibW91c2Vkb3duXCI9PT10LnR5cGUsUyhkb2N1bWVudCxpP1wibW91c2Vtb3ZlXCI6XCJ0b3VjaG1vdmVcIix0aGlzLl9vbk1vdmUsdGhpcyksUyhkb2N1bWVudCxpP1wibW91c2V1cFwiOlwidG91Y2hlbmQgdG91Y2hjYW5jZWxcIix0aGlzLl9vblVwLHRoaXMpKSkpKX0sX29uTW92ZTpmdW5jdGlvbih0KXt2YXIgZTt0aGlzLl9lbmFibGVkJiYodC50b3VjaGVzJiYxPHQudG91Y2hlcy5sZW5ndGg/dGhpcy5fbW92ZWQ9ITA6IShlPW5ldyBwKChlPXQudG91Y2hlcyYmMT09PXQudG91Y2hlcy5sZW5ndGg/dC50b3VjaGVzWzBdOnQpLmNsaWVudFgsZS5jbGllbnRZKS5fc3VidHJhY3QodGhpcy5fc3RhcnRQb2ludCkpLngmJiFlLnl8fE1hdGguYWJzKGUueCkrTWF0aC5hYnMoZS55KTx0aGlzLm9wdGlvbnMuY2xpY2tUb2xlcmFuY2V8fChlLngvPXRoaXMuX3BhcmVudFNjYWxlLngsZS55Lz10aGlzLl9wYXJlbnRTY2FsZS55LE8odCksdGhpcy5fbW92ZWR8fCh0aGlzLmZpcmUoXCJkcmFnc3RhcnRcIiksdGhpcy5fbW92ZWQ9ITAsTShkb2N1bWVudC5ib2R5LFwibGVhZmxldC1kcmFnZ2luZ1wiKSx0aGlzLl9sYXN0VGFyZ2V0PXQudGFyZ2V0fHx0LnNyY0VsZW1lbnQsd2luZG93LlNWR0VsZW1lbnRJbnN0YW5jZSYmdGhpcy5fbGFzdFRhcmdldCBpbnN0YW5jZW9mIHdpbmRvdy5TVkdFbGVtZW50SW5zdGFuY2UmJih0aGlzLl9sYXN0VGFyZ2V0PXRoaXMuX2xhc3RUYXJnZXQuY29ycmVzcG9uZGluZ1VzZUVsZW1lbnQpLE0odGhpcy5fbGFzdFRhcmdldCxcImxlYWZsZXQtZHJhZy10YXJnZXRcIikpLHRoaXMuX25ld1Bvcz10aGlzLl9zdGFydFBvcy5hZGQoZSksdGhpcy5fbW92aW5nPSEwLHRoaXMuX2xhc3RFdmVudD10LHRoaXMuX3VwZGF0ZVBvc2l0aW9uKCkpKX0sX3VwZGF0ZVBvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9e29yaWdpbmFsRXZlbnQ6dGhpcy5fbGFzdEV2ZW50fTt0aGlzLmZpcmUoXCJwcmVkcmFnXCIsdCksWih0aGlzLl9lbGVtZW50LHRoaXMuX25ld1BvcyksdGhpcy5maXJlKFwiZHJhZ1wiLHQpfSxfb25VcDpmdW5jdGlvbigpe3RoaXMuX2VuYWJsZWQmJnRoaXMuZmluaXNoRHJhZygpfSxmaW5pc2hEcmFnOmZ1bmN0aW9uKHQpe3ooZG9jdW1lbnQuYm9keSxcImxlYWZsZXQtZHJhZ2dpbmdcIiksdGhpcy5fbGFzdFRhcmdldCYmKHoodGhpcy5fbGFzdFRhcmdldCxcImxlYWZsZXQtZHJhZy10YXJnZXRcIiksdGhpcy5fbGFzdFRhcmdldD1udWxsKSxrKGRvY3VtZW50LFwibW91c2Vtb3ZlIHRvdWNobW92ZVwiLHRoaXMuX29uTW92ZSx0aGlzKSxrKGRvY3VtZW50LFwibW91c2V1cCB0b3VjaGVuZCB0b3VjaGNhbmNlbFwiLHRoaXMuX29uVXAsdGhpcyksVGUoKSxhZSgpO3ZhciBlPXRoaXMuX21vdmVkJiZ0aGlzLl9tb3Zpbmc7dGhpcy5fbW92aW5nPSExLFhlLl9kcmFnZ2luZz0hMSxlJiZ0aGlzLmZpcmUoXCJkcmFnZW5kXCIse25vSW5lcnRpYTp0LGRpc3RhbmNlOnRoaXMuX25ld1Bvcy5kaXN0YW5jZVRvKHRoaXMuX3N0YXJ0UG9zKX0pfX0pO2Z1bmN0aW9uIEplKHQsZSxpKXtmb3IodmFyIG4sbyxzLHIsYSxoLGwsdT1bMSw0LDIsOF0sYz0wLGQ9dC5sZW5ndGg7YzxkO2MrKyl0W2NdLl9jb2RlPXNpKHRbY10sZSk7Zm9yKHM9MDtzPDQ7cysrKXtmb3IoaD11W3NdLG49W10sYz0wLG89KGQ9dC5sZW5ndGgpLTE7YzxkO289YysrKXI9dFtjXSxhPXRbb10sci5fY29kZSZoP2EuX2NvZGUmaHx8KChsPW9pKGEscixoLGUsaSkpLl9jb2RlPXNpKGwsZSksbi5wdXNoKGwpKTooYS5fY29kZSZoJiYoKGw9b2koYSxyLGgsZSxpKSkuX2NvZGU9c2kobCxlKSxuLnB1c2gobCkpLG4ucHVzaChyKSk7dD1ufXJldHVybiB0fWZ1bmN0aW9uICRlKHQsZSl7dmFyIGksbixvLHMscixhLGg7aWYoIXR8fDA9PT10Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJsYXRsbmdzIG5vdCBwYXNzZWRcIik7SSh0KXx8KGNvbnNvbGUud2FybihcImxhdGxuZ3MgYXJlIG5vdCBmbGF0ISBPbmx5IHRoZSBmaXJzdCByaW5nIHdpbGwgYmUgdXNlZFwiKSx0PXRbMF0pO2Zvcih2YXIgbD13KFswLDBdKSx1PWcodCksYz0odS5nZXROb3J0aFdlc3QoKS5kaXN0YW5jZVRvKHUuZ2V0U291dGhXZXN0KCkpKnUuZ2V0Tm9ydGhFYXN0KCkuZGlzdGFuY2VUbyh1LmdldE5vcnRoV2VzdCgpKTwxNzAwJiYobD1RZSh0KSksdC5sZW5ndGgpLGQ9W10sXz0wO188YztfKyspe3ZhciBwPXcodFtfXSk7ZC5wdXNoKGUucHJvamVjdCh3KFtwLmxhdC1sLmxhdCxwLmxuZy1sLmxuZ10pKSl9Zm9yKF89cj1hPWg9MCxpPWMtMTtfPGM7aT1fKyspbj1kW19dLG89ZFtpXSxzPW4ueSpvLngtby55Km4ueCxhKz0obi54K28ueCkqcyxoKz0obi55K28ueSkqcyxyKz0zKnM7dT0wPT09cj9kWzBdOlthL3IsaC9yXSx1PWUudW5wcm9qZWN0KG0odSkpO3JldHVybiB3KFt1LmxhdCtsLmxhdCx1LmxuZytsLmxuZ10pfWZ1bmN0aW9uIFFlKHQpe2Zvcih2YXIgZT0wLGk9MCxuPTAsbz0wO288dC5sZW5ndGg7bysrKXt2YXIgcz13KHRbb10pO2UrPXMubGF0LGkrPXMubG5nLG4rK31yZXR1cm4gdyhbZS9uLGkvbl0pfXZhciB0aSxndD17X19wcm90b19fOm51bGwsY2xpcFBvbHlnb246SmUscG9seWdvbkNlbnRlcjokZSxjZW50cm9pZDpRZX07ZnVuY3Rpb24gZWkodCxlKXtpZihlJiZ0Lmxlbmd0aCl7dmFyIGk9dD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgaT1bdFswXV0sbj0xLG89MCxzPXQubGVuZ3RoO248cztuKyspKGZ1bmN0aW9uKHQsZSl7dmFyIGk9ZS54LXQueCxlPWUueS10Lnk7cmV0dXJuIGkqaStlKmV9KSh0W25dLHRbb10pPmUmJihpLnB1c2godFtuXSksbz1uKTtvPHMtMSYmaS5wdXNoKHRbcy0xXSk7cmV0dXJuIGl9KHQsZT1lKmUpLG49aS5sZW5ndGgsbz1uZXcodHlwZW9mIFVpbnQ4QXJyYXkhPXZvaWQgMCtcIlwiP1VpbnQ4QXJyYXk6QXJyYXkpKG4pO29bMF09b1tuLTFdPTEsZnVuY3Rpb24gdChlLGksbixvLHMpe3ZhciByLGEsaCxsPTA7Zm9yKGE9bysxO2E8PXMtMTthKyspaD1yaShlW2FdLGVbb10sZVtzXSwhMCksbDxoJiYocj1hLGw9aCk7bjxsJiYoaVtyXT0xLHQoZSxpLG4sbyxyKSx0KGUsaSxuLHIscykpfShpLG8sZSwwLG4tMSk7dmFyIHMscj1bXTtmb3Iocz0wO3M8bjtzKyspb1tzXSYmci5wdXNoKGlbc10pO3JldHVybiByfXJldHVybiB0LnNsaWNlKCl9ZnVuY3Rpb24gaWkodCxlLGkpe3JldHVybiBNYXRoLnNxcnQocmkodCxlLGksITApKX1mdW5jdGlvbiBuaSh0LGUsaSxuLG8pe3ZhciBzLHIsYSxoPW4/dGk6c2kodCxpKSxsPXNpKGUsaSk7Zm9yKHRpPWw7Oyl7aWYoIShofGwpKXJldHVyblt0LGVdO2lmKGgmbClyZXR1cm4hMTthPXNpKHI9b2kodCxlLHM9aHx8bCxpLG8pLGkpLHM9PT1oPyh0PXIsaD1hKTooZT1yLGw9YSl9fWZ1bmN0aW9uIG9pKHQsZSxpLG4sbyl7dmFyIHMscixhPWUueC10LngsZT1lLnktdC55LGg9bi5taW4sbj1uLm1heDtyZXR1cm4gOCZpPyhzPXQueCthKihuLnktdC55KS9lLHI9bi55KTo0Jmk/KHM9dC54K2EqKGgueS10LnkpL2Uscj1oLnkpOjImaT8ocz1uLngscj10LnkrZSoobi54LXQueCkvYSk6MSZpJiYocz1oLngscj10LnkrZSooaC54LXQueCkvYSksbmV3IHAocyxyLG8pfWZ1bmN0aW9uIHNpKHQsZSl7dmFyIGk9MDtyZXR1cm4gdC54PGUubWluLng/aXw9MTp0Lng+ZS5tYXgueCYmKGl8PTIpLHQueTxlLm1pbi55P2l8PTQ6dC55PmUubWF4LnkmJihpfD04KSxpfWZ1bmN0aW9uIHJpKHQsZSxpLG4pe3ZhciBvPWUueCxlPWUueSxzPWkueC1vLHI9aS55LWUsYT1zKnMrcipyO3JldHVybiAwPGEmJigxPChhPSgodC54LW8pKnMrKHQueS1lKSpyKS9hKT8obz1pLngsZT1pLnkpOjA8YSYmKG8rPXMqYSxlKz1yKmEpKSxzPXQueC1vLHI9dC55LWUsbj9zKnMrcipyOm5ldyBwKG8sZSl9ZnVuY3Rpb24gSSh0KXtyZXR1cm4hZCh0WzBdKXx8XCJvYmplY3RcIiE9dHlwZW9mIHRbMF1bMF0mJnZvaWQgMCE9PXRbMF1bMF19ZnVuY3Rpb24gYWkodCl7cmV0dXJuIGNvbnNvbGUud2FybihcIkRlcHJlY2F0ZWQgdXNlIG9mIF9mbGF0LCBwbGVhc2UgdXNlIEwuTGluZVV0aWwuaXNGbGF0IGluc3RlYWQuXCIpLEkodCl9ZnVuY3Rpb24gaGkodCxlKXt2YXIgaSxuLG8scyxyLGE7aWYoIXR8fDA9PT10Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJsYXRsbmdzIG5vdCBwYXNzZWRcIik7SSh0KXx8KGNvbnNvbGUud2FybihcImxhdGxuZ3MgYXJlIG5vdCBmbGF0ISBPbmx5IHRoZSBmaXJzdCByaW5nIHdpbGwgYmUgdXNlZFwiKSx0PXRbMF0pO2Zvcih2YXIgaD13KFswLDBdKSxsPWcodCksdT0obC5nZXROb3J0aFdlc3QoKS5kaXN0YW5jZVRvKGwuZ2V0U291dGhXZXN0KCkpKmwuZ2V0Tm9ydGhFYXN0KCkuZGlzdGFuY2VUbyhsLmdldE5vcnRoV2VzdCgpKTwxNzAwJiYoaD1RZSh0KSksdC5sZW5ndGgpLGM9W10sZD0wO2Q8dTtkKyspe3ZhciBfPXcodFtkXSk7Yy5wdXNoKGUucHJvamVjdCh3KFtfLmxhdC1oLmxhdCxfLmxuZy1oLmxuZ10pKSl9Zm9yKGk9ZD0wO2Q8dS0xO2QrKylpKz1jW2RdLmRpc3RhbmNlVG8oY1tkKzFdKS8yO2lmKDA9PT1pKWE9Y1swXTtlbHNlIGZvcihuPWQ9MDtkPHUtMTtkKyspaWYobz1jW2RdLHM9Y1tkKzFdLGk8KG4rPXI9by5kaXN0YW5jZVRvKHMpKSl7YT1bcy54LShyPShuLWkpL3IpKihzLngtby54KSxzLnktcioocy55LW8ueSldO2JyZWFrfWw9ZS51bnByb2plY3QobShhKSk7cmV0dXJuIHcoW2wubGF0K2gubGF0LGwubG5nK2gubG5nXSl9dmFyIHZ0PXtfX3Byb3RvX186bnVsbCxzaW1wbGlmeTplaSxwb2ludFRvU2VnbWVudERpc3RhbmNlOmlpLGNsb3Nlc3RQb2ludE9uU2VnbWVudDpmdW5jdGlvbih0LGUsaSl7cmV0dXJuIHJpKHQsZSxpKX0sY2xpcFNlZ21lbnQ6bmksX2dldEVkZ2VJbnRlcnNlY3Rpb246b2ksX2dldEJpdENvZGU6c2ksX3NxQ2xvc2VzdFBvaW50T25TZWdtZW50OnJpLGlzRmxhdDpJLF9mbGF0OmFpLHBvbHlsaW5lQ2VudGVyOmhpfSx5dD17cHJvamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IHAodC5sbmcsdC5sYXQpfSx1bnByb2plY3Q6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB2KHQueSx0LngpfSxib3VuZHM6bmV3IGYoWy0xODAsLTkwXSxbMTgwLDkwXSl9LHh0PXtSOjYzNzgxMzcsUl9NSU5PUjo2MzU2NzUyLjMxNDI0NTE3OSxib3VuZHM6bmV3IGYoWy0yMDAzNzUwOC4zNDI3OSwtMTU0OTY1NzAuNzM5NzJdLFsyMDAzNzUwOC4zNDI3OSwxODc2NDY1Ni4yMzEzOF0pLHByb2plY3Q6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5QSS8xODAsaT10aGlzLlIsbj10LmxhdCplLG89dGhpcy5SX01JTk9SL2ksbz1NYXRoLnNxcnQoMS1vKm8pLHM9bypNYXRoLnNpbihuKSxzPU1hdGgudGFuKE1hdGguUEkvNC1uLzIpL01hdGgucG93KCgxLXMpLygxK3MpLG8vMiksbj0taSpNYXRoLmxvZyhNYXRoLm1heChzLDFlLTEwKSk7cmV0dXJuIG5ldyBwKHQubG5nKmUqaSxuKX0sdW5wcm9qZWN0OmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxpPTE4MC9NYXRoLlBJLG49dGhpcy5SLG89dGhpcy5SX01JTk9SL24scz1NYXRoLnNxcnQoMS1vKm8pLHI9TWF0aC5leHAoLXQueS9uKSxhPU1hdGguUEkvMi0yKk1hdGguYXRhbihyKSxoPTAsbD0uMTtoPDE1JiYxZS03PE1hdGguYWJzKGwpO2grKyllPXMqTWF0aC5zaW4oYSksZT1NYXRoLnBvdygoMS1lKS8oMStlKSxzLzIpLGErPWw9TWF0aC5QSS8yLTIqTWF0aC5hdGFuKHIqZSktYTtyZXR1cm4gbmV3IHYoYSppLHQueCppL24pfX0sd3Q9e19fcHJvdG9fXzpudWxsLExvbkxhdDp5dCxNZXJjYXRvcjp4dCxTcGhlcmljYWxNZXJjYXRvcjpydH0sUHQ9bCh7fSxzdCx7Y29kZTpcIkVQU0c6MzM5NVwiLHByb2plY3Rpb246eHQsdHJhbnNmb3JtYXRpb246aHQoYnQ9LjUvKE1hdGguUEkqeHQuUiksLjUsLWJ0LC41KX0pLGxpPWwoe30sc3Qse2NvZGU6XCJFUFNHOjQzMjZcIixwcm9qZWN0aW9uOnl0LHRyYW5zZm9ybWF0aW9uOmh0KDEvMTgwLDEsLTEvMTgwLC41KX0pLEx0PWwoe30sb3Qse3Byb2plY3Rpb246eXQsdHJhbnNmb3JtYXRpb246aHQoMSwwLC0xLDApLHNjYWxlOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdygyLHQpfSx6b29tOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0KS9NYXRoLkxOMn0sZGlzdGFuY2U6ZnVuY3Rpb24odCxlKXt2YXIgaT1lLmxuZy10LmxuZyxlPWUubGF0LXQubGF0O3JldHVybiBNYXRoLnNxcnQoaSppK2UqZSl9LGluZmluaXRlOiEwfSksbz0ob3QuRWFydGg9c3Qsb3QuRVBTRzMzOTU9UHQsb3QuRVBTRzM4NTc9bHQsb3QuRVBTRzkwMDkxMz11dCxvdC5FUFNHNDMyNj1saSxvdC5TaW1wbGU9THQsaXQuZXh0ZW5kKHtvcHRpb25zOntwYW5lOlwib3ZlcmxheVBhbmVcIixhdHRyaWJ1dGlvbjpudWxsLGJ1YmJsaW5nTW91c2VFdmVudHM6ITB9LGFkZFRvOmZ1bmN0aW9uKHQpe3JldHVybiB0LmFkZExheWVyKHRoaXMpLHRoaXN9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlbW92ZUZyb20odGhpcy5fbWFwfHx0aGlzLl9tYXBUb0FkZCl9LHJlbW92ZUZyb206ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQucmVtb3ZlTGF5ZXIodGhpcyksdGhpc30sZ2V0UGFuZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbWFwLmdldFBhbmUodD90aGlzLm9wdGlvbnNbdF18fHQ6dGhpcy5vcHRpb25zLnBhbmUpfSxhZGRJbnRlcmFjdGl2ZVRhcmdldDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbWFwLl90YXJnZXRzW2godCldPXRoaXN9LHJlbW92ZUludGVyYWN0aXZlVGFyZ2V0OmZ1bmN0aW9uKHQpe3JldHVybiBkZWxldGUgdGhpcy5fbWFwLl90YXJnZXRzW2godCldLHRoaXN9LGdldEF0dHJpYnV0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGlvbn0sX2xheWVyQWRkOmZ1bmN0aW9uKHQpe3ZhciBlLGk9dC50YXJnZXQ7aS5oYXNMYXllcih0aGlzKSYmKHRoaXMuX21hcD1pLHRoaXMuX3pvb21BbmltYXRlZD1pLl96b29tQW5pbWF0ZWQsdGhpcy5nZXRFdmVudHMmJihlPXRoaXMuZ2V0RXZlbnRzKCksaS5vbihlLHRoaXMpLHRoaXMub25jZShcInJlbW92ZVwiLGZ1bmN0aW9uKCl7aS5vZmYoZSx0aGlzKX0sdGhpcykpLHRoaXMub25BZGQoaSksdGhpcy5maXJlKFwiYWRkXCIpLGkuZmlyZShcImxheWVyYWRkXCIse2xheWVyOnRoaXN9KSl9fSkpLHVpPShBLmluY2x1ZGUoe2FkZExheWVyOmZ1bmN0aW9uKHQpe3ZhciBlO2lmKHQuX2xheWVyQWRkKXJldHVybiBlPWgodCksdGhpcy5fbGF5ZXJzW2VdfHwoKHRoaXMuX2xheWVyc1tlXT10KS5fbWFwVG9BZGQ9dGhpcyx0LmJlZm9yZUFkZCYmdC5iZWZvcmVBZGQodGhpcyksdGhpcy53aGVuUmVhZHkodC5fbGF5ZXJBZGQsdCkpLHRoaXM7dGhyb3cgbmV3IEVycm9yKFwiVGhlIHByb3ZpZGVkIG9iamVjdCBpcyBub3QgYSBMYXllci5cIil9LHJlbW92ZUxheWVyOmZ1bmN0aW9uKHQpe3ZhciBlPWgodCk7cmV0dXJuIHRoaXMuX2xheWVyc1tlXSYmKHRoaXMuX2xvYWRlZCYmdC5vblJlbW92ZSh0aGlzKSxkZWxldGUgdGhpcy5fbGF5ZXJzW2VdLHRoaXMuX2xvYWRlZCYmKHRoaXMuZmlyZShcImxheWVycmVtb3ZlXCIse2xheWVyOnR9KSx0LmZpcmUoXCJyZW1vdmVcIikpLHQuX21hcD10Ll9tYXBUb0FkZD1udWxsKSx0aGlzfSxoYXNMYXllcjpmdW5jdGlvbih0KXtyZXR1cm4gaCh0KWluIHRoaXMuX2xheWVyc30sZWFjaExheWVyOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBpIGluIHRoaXMuX2xheWVycyl0LmNhbGwoZSx0aGlzLl9sYXllcnNbaV0pO3JldHVybiB0aGlzfSxfYWRkTGF5ZXJzOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLGk9KHQ9dD9kKHQpP3Q6W3RdOltdKS5sZW5ndGg7ZTxpO2UrKyl0aGlzLmFkZExheWVyKHRbZV0pfSxfYWRkWm9vbUxpbWl0OmZ1bmN0aW9uKHQpe2lzTmFOKHQub3B0aW9ucy5tYXhab29tKSYmaXNOYU4odC5vcHRpb25zLm1pblpvb20pfHwodGhpcy5fem9vbUJvdW5kTGF5ZXJzW2godCldPXQsdGhpcy5fdXBkYXRlWm9vbUxldmVscygpKX0sX3JlbW92ZVpvb21MaW1pdDpmdW5jdGlvbih0KXt0PWgodCk7dGhpcy5fem9vbUJvdW5kTGF5ZXJzW3RdJiYoZGVsZXRlIHRoaXMuX3pvb21Cb3VuZExheWVyc1t0XSx0aGlzLl91cGRhdGVab29tTGV2ZWxzKCkpfSxfdXBkYXRlWm9vbUxldmVsczpmdW5jdGlvbigpe3ZhciB0LGU9MS8wLGk9LTEvMCxuPXRoaXMuX2dldFpvb21TcGFuKCk7Zm9yKHQgaW4gdGhpcy5fem9vbUJvdW5kTGF5ZXJzKXZhciBvPXRoaXMuX3pvb21Cb3VuZExheWVyc1t0XS5vcHRpb25zLGU9dm9pZCAwPT09by5taW5ab29tP2U6TWF0aC5taW4oZSxvLm1pblpvb20pLGk9dm9pZCAwPT09by5tYXhab29tP2k6TWF0aC5tYXgoaSxvLm1heFpvb20pO3RoaXMuX2xheWVyc01heFpvb209aT09PS0xLzA/dm9pZCAwOmksdGhpcy5fbGF5ZXJzTWluWm9vbT1lPT09MS8wP3ZvaWQgMDplLG4hPT10aGlzLl9nZXRab29tU3BhbigpJiZ0aGlzLmZpcmUoXCJ6b29tbGV2ZWxzY2hhbmdlXCIpLHZvaWQgMD09PXRoaXMub3B0aW9ucy5tYXhab29tJiZ0aGlzLl9sYXllcnNNYXhab29tJiZ0aGlzLmdldFpvb20oKT50aGlzLl9sYXllcnNNYXhab29tJiZ0aGlzLnNldFpvb20odGhpcy5fbGF5ZXJzTWF4Wm9vbSksdm9pZCAwPT09dGhpcy5vcHRpb25zLm1pblpvb20mJnRoaXMuX2xheWVyc01pblpvb20mJnRoaXMuZ2V0Wm9vbSgpPHRoaXMuX2xheWVyc01pblpvb20mJnRoaXMuc2V0Wm9vbSh0aGlzLl9sYXllcnNNaW5ab29tKX19KSxvLmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbih0LGUpe3ZhciBpLG47aWYoYyh0aGlzLGUpLHRoaXMuX2xheWVycz17fSx0KWZvcihpPTAsbj10Lmxlbmd0aDtpPG47aSsrKXRoaXMuYWRkTGF5ZXIodFtpXSl9LGFkZExheWVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2V0TGF5ZXJJZCh0KTtyZXR1cm4gdGhpcy5fbGF5ZXJzW2VdPXQsdGhpcy5fbWFwJiZ0aGlzLl9tYXAuYWRkTGF5ZXIodCksdGhpc30scmVtb3ZlTGF5ZXI6ZnVuY3Rpb24odCl7dD10IGluIHRoaXMuX2xheWVycz90OnRoaXMuZ2V0TGF5ZXJJZCh0KTtyZXR1cm4gdGhpcy5fbWFwJiZ0aGlzLl9sYXllcnNbdF0mJnRoaXMuX21hcC5yZW1vdmVMYXllcih0aGlzLl9sYXllcnNbdF0pLGRlbGV0ZSB0aGlzLl9sYXllcnNbdF0sdGhpc30saGFzTGF5ZXI6ZnVuY3Rpb24odCl7cmV0dXJuKFwibnVtYmVyXCI9PXR5cGVvZiB0P3Q6dGhpcy5nZXRMYXllcklkKHQpKWluIHRoaXMuX2xheWVyc30sY2xlYXJMYXllcnM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoTGF5ZXIodGhpcy5yZW1vdmVMYXllcix0aGlzKX0saW52b2tlOmZ1bmN0aW9uKHQpe3ZhciBlLGksbj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7Zm9yKGUgaW4gdGhpcy5fbGF5ZXJzKShpPXRoaXMuX2xheWVyc1tlXSlbdF0mJmlbdF0uYXBwbHkoaSxuKTtyZXR1cm4gdGhpc30sb25BZGQ6ZnVuY3Rpb24odCl7dGhpcy5lYWNoTGF5ZXIodC5hZGRMYXllcix0KX0sb25SZW1vdmU6ZnVuY3Rpb24odCl7dGhpcy5lYWNoTGF5ZXIodC5yZW1vdmVMYXllcix0KX0sZWFjaExheWVyOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBpIGluIHRoaXMuX2xheWVycyl0LmNhbGwoZSx0aGlzLl9sYXllcnNbaV0pO3JldHVybiB0aGlzfSxnZXRMYXllcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbGF5ZXJzW3RdfSxnZXRMYXllcnM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5lYWNoTGF5ZXIodC5wdXNoLHQpLHR9LHNldFpJbmRleDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbnZva2UoXCJzZXRaSW5kZXhcIix0KX0sZ2V0TGF5ZXJJZDpofSkpLGNpPXVpLmV4dGVuZCh7YWRkTGF5ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaGFzTGF5ZXIodCk/dGhpczoodC5hZGRFdmVudFBhcmVudCh0aGlzKSx1aS5wcm90b3R5cGUuYWRkTGF5ZXIuY2FsbCh0aGlzLHQpLHRoaXMuZmlyZShcImxheWVyYWRkXCIse2xheWVyOnR9KSl9LHJlbW92ZUxheWVyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmhhc0xheWVyKHQpPygodD10IGluIHRoaXMuX2xheWVycz90aGlzLl9sYXllcnNbdF06dCkucmVtb3ZlRXZlbnRQYXJlbnQodGhpcyksdWkucHJvdG90eXBlLnJlbW92ZUxheWVyLmNhbGwodGhpcyx0KSx0aGlzLmZpcmUoXCJsYXllcnJlbW92ZVwiLHtsYXllcjp0fSkpOnRoaXN9LHNldFN0eWxlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmludm9rZShcInNldFN0eWxlXCIsdCl9LGJyaW5nVG9Gcm9udDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmludm9rZShcImJyaW5nVG9Gcm9udFwiKX0sYnJpbmdUb0JhY2s6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnZva2UoXCJicmluZ1RvQmFja1wiKX0sZ2V0Qm91bmRzOmZ1bmN0aW9uKCl7dmFyIHQsZT1uZXcgcztmb3IodCBpbiB0aGlzLl9sYXllcnMpe3ZhciBpPXRoaXMuX2xheWVyc1t0XTtlLmV4dGVuZChpLmdldEJvdW5kcz9pLmdldEJvdW5kcygpOmkuZ2V0TGF0TG5nKCkpfXJldHVybiBlfX0pLGRpPWV0LmV4dGVuZCh7b3B0aW9uczp7cG9wdXBBbmNob3I6WzAsMF0sdG9vbHRpcEFuY2hvcjpbMCwwXSxjcm9zc09yaWdpbjohMX0saW5pdGlhbGl6ZTpmdW5jdGlvbih0KXtjKHRoaXMsdCl9LGNyZWF0ZUljb246ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUljb24oXCJpY29uXCIsdCl9LGNyZWF0ZVNoYWRvdzpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY3JlYXRlSWNvbihcInNoYWRvd1wiLHQpfSxfY3JlYXRlSWNvbjpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMuX2dldEljb25VcmwodCk7aWYoaSlyZXR1cm4gaT10aGlzLl9jcmVhdGVJbWcoaSxlJiZcIklNR1wiPT09ZS50YWdOYW1lP2U6bnVsbCksdGhpcy5fc2V0SWNvblN0eWxlcyhpLHQpLCF0aGlzLm9wdGlvbnMuY3Jvc3NPcmlnaW4mJlwiXCIhPT10aGlzLm9wdGlvbnMuY3Jvc3NPcmlnaW58fChpLmNyb3NzT3JpZ2luPSEwPT09dGhpcy5vcHRpb25zLmNyb3NzT3JpZ2luP1wiXCI6dGhpcy5vcHRpb25zLmNyb3NzT3JpZ2luKSxpO2lmKFwiaWNvblwiPT09dCl0aHJvdyBuZXcgRXJyb3IoXCJpY29uVXJsIG5vdCBzZXQgaW4gSWNvbiBvcHRpb25zIChzZWUgdGhlIGRvY3MpLlwiKTtyZXR1cm4gbnVsbH0sX3NldEljb25TdHlsZXM6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLm9wdGlvbnMsbj1pW2UrXCJTaXplXCJdLG49bShuPVwibnVtYmVyXCI9PXR5cGVvZiBuP1tuLG5dOm4pLG89bShcInNoYWRvd1wiPT09ZSYmaS5zaGFkb3dBbmNob3J8fGkuaWNvbkFuY2hvcnx8biYmbi5kaXZpZGVCeSgyLCEwKSk7dC5jbGFzc05hbWU9XCJsZWFmbGV0LW1hcmtlci1cIitlK1wiIFwiKyhpLmNsYXNzTmFtZXx8XCJcIiksbyYmKHQuc3R5bGUubWFyZ2luTGVmdD0tby54K1wicHhcIix0LnN0eWxlLm1hcmdpblRvcD0tby55K1wicHhcIiksbiYmKHQuc3R5bGUud2lkdGg9bi54K1wicHhcIix0LnN0eWxlLmhlaWdodD1uLnkrXCJweFwiKX0sX2NyZWF0ZUltZzpmdW5jdGlvbih0LGUpe3JldHVybihlPWV8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIikpLnNyYz10LGV9LF9nZXRJY29uVXJsOmZ1bmN0aW9uKHQpe3JldHVybiBiLnJldGluYSYmdGhpcy5vcHRpb25zW3QrXCJSZXRpbmFVcmxcIl18fHRoaXMub3B0aW9uc1t0K1wiVXJsXCJdfX0pO3ZhciBfaT1kaS5leHRlbmQoe29wdGlvbnM6e2ljb25Vcmw6XCJtYXJrZXItaWNvbi5wbmdcIixpY29uUmV0aW5hVXJsOlwibWFya2VyLWljb24tMngucG5nXCIsc2hhZG93VXJsOlwibWFya2VyLXNoYWRvdy5wbmdcIixpY29uU2l6ZTpbMjUsNDFdLGljb25BbmNob3I6WzEyLDQxXSxwb3B1cEFuY2hvcjpbMSwtMzRdLHRvb2x0aXBBbmNob3I6WzE2LC0yOF0sc2hhZG93U2l6ZTpbNDEsNDFdfSxfZ2V0SWNvblVybDpmdW5jdGlvbih0KXtyZXR1cm5cInN0cmluZ1wiIT10eXBlb2YgX2kuaW1hZ2VQYXRoJiYoX2kuaW1hZ2VQYXRoPXRoaXMuX2RldGVjdEljb25QYXRoKCkpLCh0aGlzLm9wdGlvbnMuaW1hZ2VQYXRofHxfaS5pbWFnZVBhdGgpK2RpLnByb3RvdHlwZS5fZ2V0SWNvblVybC5jYWxsKHRoaXMsdCl9LF9zdHJpcFVybDpmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQsZSxpKXtyZXR1cm4oZT1lLmV4ZWModCkpJiZlW2ldfXJldHVybih0PWUodCwvXnVybFxcKChbJ1wiXSk/KC4rKVxcMVxcKSQvLDIpKSYmZSh0LC9eKC4qKW1hcmtlci1pY29uXFwucG5nJC8sMSl9LF9kZXRlY3RJY29uUGF0aDpmdW5jdGlvbigpe3ZhciB0PVAoXCJkaXZcIixcImxlYWZsZXQtZGVmYXVsdC1pY29uLXBhdGhcIixkb2N1bWVudC5ib2R5KSxlPXBlKHQsXCJiYWNrZ3JvdW5kLWltYWdlXCIpfHxwZSh0LFwiYmFja2dyb3VuZEltYWdlXCIpO3JldHVybiBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHQpLChlPXRoaXMuX3N0cmlwVXJsKGUpKT9lOih0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2xpbmtbaHJlZiQ9XCJsZWFmbGV0LmNzc1wiXScpKT90LmhyZWYuc3Vic3RyaW5nKDAsdC5ocmVmLmxlbmd0aC1cImxlYWZsZXQuY3NzXCIubGVuZ3RoLTEpOlwiXCJ9fSkscGk9bi5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24odCl7dGhpcy5fbWFya2VyPXR9LGFkZEhvb2tzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFya2VyLl9pY29uO3RoaXMuX2RyYWdnYWJsZXx8KHRoaXMuX2RyYWdnYWJsZT1uZXcgWGUodCx0LCEwKSksdGhpcy5fZHJhZ2dhYmxlLm9uKHtkcmFnc3RhcnQ6dGhpcy5fb25EcmFnU3RhcnQscHJlZHJhZzp0aGlzLl9vblByZURyYWcsZHJhZzp0aGlzLl9vbkRyYWcsZHJhZ2VuZDp0aGlzLl9vbkRyYWdFbmR9LHRoaXMpLmVuYWJsZSgpLE0odCxcImxlYWZsZXQtbWFya2VyLWRyYWdnYWJsZVwiKX0scmVtb3ZlSG9va3M6ZnVuY3Rpb24oKXt0aGlzLl9kcmFnZ2FibGUub2ZmKHtkcmFnc3RhcnQ6dGhpcy5fb25EcmFnU3RhcnQscHJlZHJhZzp0aGlzLl9vblByZURyYWcsZHJhZzp0aGlzLl9vbkRyYWcsZHJhZ2VuZDp0aGlzLl9vbkRyYWdFbmR9LHRoaXMpLmRpc2FibGUoKSx0aGlzLl9tYXJrZXIuX2ljb24mJnoodGhpcy5fbWFya2VyLl9pY29uLFwibGVhZmxldC1tYXJrZXItZHJhZ2dhYmxlXCIpfSxtb3ZlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kcmFnZ2FibGUmJnRoaXMuX2RyYWdnYWJsZS5fbW92ZWR9LF9hZGp1c3RQYW46ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbWFya2VyLGk9ZS5fbWFwLG49dGhpcy5fbWFya2VyLm9wdGlvbnMuYXV0b1BhblNwZWVkLG89dGhpcy5fbWFya2VyLm9wdGlvbnMuYXV0b1BhblBhZGRpbmcscz1QZShlLl9pY29uKSxyPWkuZ2V0UGl4ZWxCb3VuZHMoKSxhPWkuZ2V0UGl4ZWxPcmlnaW4oKSxhPV8oci5taW4uX3N1YnRyYWN0KGEpLmFkZChvKSxyLm1heC5fc3VidHJhY3QoYSkuc3VidHJhY3QobykpO2EuY29udGFpbnMocyl8fChvPW0oKE1hdGgubWF4KGEubWF4Lngscy54KS1hLm1heC54KS8oci5tYXgueC1hLm1heC54KS0oTWF0aC5taW4oYS5taW4ueCxzLngpLWEubWluLngpLyhyLm1pbi54LWEubWluLngpLChNYXRoLm1heChhLm1heC55LHMueSktYS5tYXgueSkvKHIubWF4LnktYS5tYXgueSktKE1hdGgubWluKGEubWluLnkscy55KS1hLm1pbi55KS8oci5taW4ueS1hLm1pbi55KSkubXVsdGlwbHlCeShuKSxpLnBhbkJ5KG8se2FuaW1hdGU6ITF9KSx0aGlzLl9kcmFnZ2FibGUuX25ld1Bvcy5fYWRkKG8pLHRoaXMuX2RyYWdnYWJsZS5fc3RhcnRQb3MuX2FkZChvKSxaKGUuX2ljb24sdGhpcy5fZHJhZ2dhYmxlLl9uZXdQb3MpLHRoaXMuX29uRHJhZyh0KSx0aGlzLl9wYW5SZXF1ZXN0PXgodGhpcy5fYWRqdXN0UGFuLmJpbmQodGhpcyx0KSkpfSxfb25EcmFnU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9vbGRMYXRMbmc9dGhpcy5fbWFya2VyLmdldExhdExuZygpLHRoaXMuX21hcmtlci5jbG9zZVBvcHVwJiZ0aGlzLl9tYXJrZXIuY2xvc2VQb3B1cCgpLHRoaXMuX21hcmtlci5maXJlKFwibW92ZXN0YXJ0XCIpLmZpcmUoXCJkcmFnc3RhcnRcIil9LF9vblByZURyYWc6ZnVuY3Rpb24odCl7dGhpcy5fbWFya2VyLm9wdGlvbnMuYXV0b1BhbiYmKHIodGhpcy5fcGFuUmVxdWVzdCksdGhpcy5fcGFuUmVxdWVzdD14KHRoaXMuX2FkanVzdFBhbi5iaW5kKHRoaXMsdCkpKX0sX29uRHJhZzpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9tYXJrZXIsaT1lLl9zaGFkb3csbj1QZShlLl9pY29uKSxvPWUuX21hcC5sYXllclBvaW50VG9MYXRMbmcobik7aSYmWihpLG4pLGUuX2xhdGxuZz1vLHQubGF0bG5nPW8sdC5vbGRMYXRMbmc9dGhpcy5fb2xkTGF0TG5nLGUuZmlyZShcIm1vdmVcIix0KS5maXJlKFwiZHJhZ1wiLHQpfSxfb25EcmFnRW5kOmZ1bmN0aW9uKHQpe3IodGhpcy5fcGFuUmVxdWVzdCksZGVsZXRlIHRoaXMuX29sZExhdExuZyx0aGlzLl9tYXJrZXIuZmlyZShcIm1vdmVlbmRcIikuZmlyZShcImRyYWdlbmRcIix0KX19KSxtaT1vLmV4dGVuZCh7b3B0aW9uczp7aWNvbjpuZXcgX2ksaW50ZXJhY3RpdmU6ITAsa2V5Ym9hcmQ6ITAsdGl0bGU6XCJcIixhbHQ6XCJNYXJrZXJcIix6SW5kZXhPZmZzZXQ6MCxvcGFjaXR5OjEscmlzZU9uSG92ZXI6ITEscmlzZU9mZnNldDoyNTAscGFuZTpcIm1hcmtlclBhbmVcIixzaGFkb3dQYW5lOlwic2hhZG93UGFuZVwiLGJ1YmJsaW5nTW91c2VFdmVudHM6ITEsYXV0b1Bhbk9uRm9jdXM6ITAsZHJhZ2dhYmxlOiExLGF1dG9QYW46ITEsYXV0b1BhblBhZGRpbmc6WzUwLDUwXSxhdXRvUGFuU3BlZWQ6MTB9LGluaXRpYWxpemU6ZnVuY3Rpb24odCxlKXtjKHRoaXMsZSksdGhpcy5fbGF0bG5nPXcodCl9LG9uQWRkOmZ1bmN0aW9uKHQpe3RoaXMuX3pvb21BbmltYXRlZD10aGlzLl96b29tQW5pbWF0ZWQmJnQub3B0aW9ucy5tYXJrZXJab29tQW5pbWF0aW9uLHRoaXMuX3pvb21BbmltYXRlZCYmdC5vbihcInpvb21hbmltXCIsdGhpcy5fYW5pbWF0ZVpvb20sdGhpcyksdGhpcy5faW5pdEljb24oKSx0aGlzLnVwZGF0ZSgpfSxvblJlbW92ZTpmdW5jdGlvbih0KXt0aGlzLmRyYWdnaW5nJiZ0aGlzLmRyYWdnaW5nLmVuYWJsZWQoKSYmKHRoaXMub3B0aW9ucy5kcmFnZ2FibGU9ITAsdGhpcy5kcmFnZ2luZy5yZW1vdmVIb29rcygpKSxkZWxldGUgdGhpcy5kcmFnZ2luZyx0aGlzLl96b29tQW5pbWF0ZWQmJnQub2ZmKFwiem9vbWFuaW1cIix0aGlzLl9hbmltYXRlWm9vbSx0aGlzKSx0aGlzLl9yZW1vdmVJY29uKCksdGhpcy5fcmVtb3ZlU2hhZG93KCl9LGdldEV2ZW50czpmdW5jdGlvbigpe3JldHVybnt6b29tOnRoaXMudXBkYXRlLHZpZXdyZXNldDp0aGlzLnVwZGF0ZX19LGdldExhdExuZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sYXRsbmd9LHNldExhdExuZzpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9sYXRsbmc7cmV0dXJuIHRoaXMuX2xhdGxuZz13KHQpLHRoaXMudXBkYXRlKCksdGhpcy5maXJlKFwibW92ZVwiLHtvbGRMYXRMbmc6ZSxsYXRsbmc6dGhpcy5fbGF0bG5nfSl9LHNldFpJbmRleE9mZnNldDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLnpJbmRleE9mZnNldD10LHRoaXMudXBkYXRlKCl9LGdldEljb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmljb259LHNldEljb246ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy5pY29uPXQsdGhpcy5fbWFwJiYodGhpcy5faW5pdEljb24oKSx0aGlzLnVwZGF0ZSgpKSx0aGlzLl9wb3B1cCYmdGhpcy5iaW5kUG9wdXAodGhpcy5fcG9wdXAsdGhpcy5fcG9wdXAub3B0aW9ucyksdGhpc30sZ2V0RWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pY29ufSx1cGRhdGU6ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdGhpcy5faWNvbiYmdGhpcy5fbWFwJiYodD10aGlzLl9tYXAubGF0TG5nVG9MYXllclBvaW50KHRoaXMuX2xhdGxuZykucm91bmQoKSx0aGlzLl9zZXRQb3ModCkpLHRoaXN9LF9pbml0SWNvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucyxlPVwibGVhZmxldC16b29tLVwiKyh0aGlzLl96b29tQW5pbWF0ZWQ/XCJhbmltYXRlZFwiOlwiaGlkZVwiKSxpPXQuaWNvbi5jcmVhdGVJY29uKHRoaXMuX2ljb24pLG49ITEsaT0oaSE9PXRoaXMuX2ljb24mJih0aGlzLl9pY29uJiZ0aGlzLl9yZW1vdmVJY29uKCksbj0hMCx0LnRpdGxlJiYoaS50aXRsZT10LnRpdGxlKSxcIklNR1wiPT09aS50YWdOYW1lJiYoaS5hbHQ9dC5hbHR8fFwiXCIpKSxNKGksZSksdC5rZXlib2FyZCYmKGkudGFiSW5kZXg9XCIwXCIsaS5zZXRBdHRyaWJ1dGUoXCJyb2xlXCIsXCJidXR0b25cIikpLHRoaXMuX2ljb249aSx0LnJpc2VPbkhvdmVyJiZ0aGlzLm9uKHttb3VzZW92ZXI6dGhpcy5fYnJpbmdUb0Zyb250LG1vdXNlb3V0OnRoaXMuX3Jlc2V0WkluZGV4fSksdGhpcy5vcHRpb25zLmF1dG9QYW5PbkZvY3VzJiZTKGksXCJmb2N1c1wiLHRoaXMuX3Bhbk9uRm9jdXMsdGhpcyksdC5pY29uLmNyZWF0ZVNoYWRvdyh0aGlzLl9zaGFkb3cpKSxvPSExO2khPT10aGlzLl9zaGFkb3cmJih0aGlzLl9yZW1vdmVTaGFkb3coKSxvPSEwKSxpJiYoTShpLGUpLGkuYWx0PVwiXCIpLHRoaXMuX3NoYWRvdz1pLHQub3BhY2l0eTwxJiZ0aGlzLl91cGRhdGVPcGFjaXR5KCksbiYmdGhpcy5nZXRQYW5lKCkuYXBwZW5kQ2hpbGQodGhpcy5faWNvbiksdGhpcy5faW5pdEludGVyYWN0aW9uKCksaSYmbyYmdGhpcy5nZXRQYW5lKHQuc2hhZG93UGFuZSkuYXBwZW5kQ2hpbGQodGhpcy5fc2hhZG93KX0sX3JlbW92ZUljb246ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMucmlzZU9uSG92ZXImJnRoaXMub2ZmKHttb3VzZW92ZXI6dGhpcy5fYnJpbmdUb0Zyb250LG1vdXNlb3V0OnRoaXMuX3Jlc2V0WkluZGV4fSksdGhpcy5vcHRpb25zLmF1dG9QYW5PbkZvY3VzJiZrKHRoaXMuX2ljb24sXCJmb2N1c1wiLHRoaXMuX3Bhbk9uRm9jdXMsdGhpcyksVCh0aGlzLl9pY29uKSx0aGlzLnJlbW92ZUludGVyYWN0aXZlVGFyZ2V0KHRoaXMuX2ljb24pLHRoaXMuX2ljb249bnVsbH0sX3JlbW92ZVNoYWRvdzpmdW5jdGlvbigpe3RoaXMuX3NoYWRvdyYmVCh0aGlzLl9zaGFkb3cpLHRoaXMuX3NoYWRvdz1udWxsfSxfc2V0UG9zOmZ1bmN0aW9uKHQpe3RoaXMuX2ljb24mJloodGhpcy5faWNvbix0KSx0aGlzLl9zaGFkb3cmJloodGhpcy5fc2hhZG93LHQpLHRoaXMuX3pJbmRleD10LnkrdGhpcy5vcHRpb25zLnpJbmRleE9mZnNldCx0aGlzLl9yZXNldFpJbmRleCgpfSxfdXBkYXRlWkluZGV4OmZ1bmN0aW9uKHQpe3RoaXMuX2ljb24mJih0aGlzLl9pY29uLnN0eWxlLnpJbmRleD10aGlzLl96SW5kZXgrdCl9LF9hbmltYXRlWm9vbTpmdW5jdGlvbih0KXt0PXRoaXMuX21hcC5fbGF0TG5nVG9OZXdMYXllclBvaW50KHRoaXMuX2xhdGxuZyx0Lnpvb20sdC5jZW50ZXIpLnJvdW5kKCk7dGhpcy5fc2V0UG9zKHQpfSxfaW5pdEludGVyYWN0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ7dGhpcy5vcHRpb25zLmludGVyYWN0aXZlJiYoTSh0aGlzLl9pY29uLFwibGVhZmxldC1pbnRlcmFjdGl2ZVwiKSx0aGlzLmFkZEludGVyYWN0aXZlVGFyZ2V0KHRoaXMuX2ljb24pLHBpJiYodD10aGlzLm9wdGlvbnMuZHJhZ2dhYmxlLHRoaXMuZHJhZ2dpbmcmJih0PXRoaXMuZHJhZ2dpbmcuZW5hYmxlZCgpLHRoaXMuZHJhZ2dpbmcuZGlzYWJsZSgpKSx0aGlzLmRyYWdnaW5nPW5ldyBwaSh0aGlzKSx0JiZ0aGlzLmRyYWdnaW5nLmVuYWJsZSgpKSl9LHNldE9wYWNpdHk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy5vcGFjaXR5PXQsdGhpcy5fbWFwJiZ0aGlzLl91cGRhdGVPcGFjaXR5KCksdGhpc30sX3VwZGF0ZU9wYWNpdHk6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMub3BhY2l0eTt0aGlzLl9pY29uJiZDKHRoaXMuX2ljb24sdCksdGhpcy5fc2hhZG93JiZDKHRoaXMuX3NoYWRvdyx0KX0sX2JyaW5nVG9Gcm9udDpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVpJbmRleCh0aGlzLm9wdGlvbnMucmlzZU9mZnNldCl9LF9yZXNldFpJbmRleDpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVpJbmRleCgwKX0sX3Bhbk9uRm9jdXM6ZnVuY3Rpb24oKXt2YXIgdCxlLGk9dGhpcy5fbWFwO2kmJih0PShlPXRoaXMub3B0aW9ucy5pY29uLm9wdGlvbnMpLmljb25TaXplP20oZS5pY29uU2l6ZSk6bSgwLDApLGU9ZS5pY29uQW5jaG9yP20oZS5pY29uQW5jaG9yKTptKDAsMCksaS5wYW5JbnNpZGUodGhpcy5fbGF0bG5nLHtwYWRkaW5nVG9wTGVmdDplLHBhZGRpbmdCb3R0b21SaWdodDp0LnN1YnRyYWN0KGUpfSkpfSxfZ2V0UG9wdXBBbmNob3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmljb24ub3B0aW9ucy5wb3B1cEFuY2hvcn0sX2dldFRvb2x0aXBBbmNob3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmljb24ub3B0aW9ucy50b29sdGlwQW5jaG9yfX0pO3ZhciBmaT1vLmV4dGVuZCh7b3B0aW9uczp7c3Ryb2tlOiEwLGNvbG9yOlwiIzMzODhmZlwiLHdlaWdodDozLG9wYWNpdHk6MSxsaW5lQ2FwOlwicm91bmRcIixsaW5lSm9pbjpcInJvdW5kXCIsZGFzaEFycmF5Om51bGwsZGFzaE9mZnNldDpudWxsLGZpbGw6ITEsZmlsbENvbG9yOm51bGwsZmlsbE9wYWNpdHk6LjIsZmlsbFJ1bGU6XCJldmVub2RkXCIsaW50ZXJhY3RpdmU6ITAsYnViYmxpbmdNb3VzZUV2ZW50czohMH0sYmVmb3JlQWRkOmZ1bmN0aW9uKHQpe3RoaXMuX3JlbmRlcmVyPXQuZ2V0UmVuZGVyZXIodGhpcyl9LG9uQWRkOmZ1bmN0aW9uKCl7dGhpcy5fcmVuZGVyZXIuX2luaXRQYXRoKHRoaXMpLHRoaXMuX3Jlc2V0KCksdGhpcy5fcmVuZGVyZXIuX2FkZFBhdGgodGhpcyl9LG9uUmVtb3ZlOmZ1bmN0aW9uKCl7dGhpcy5fcmVuZGVyZXIuX3JlbW92ZVBhdGgodGhpcyl9LHJlZHJhdzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXAmJnRoaXMuX3JlbmRlcmVyLl91cGRhdGVQYXRoKHRoaXMpLHRoaXN9LHNldFN0eWxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHRoaXMsdCksdGhpcy5fcmVuZGVyZXImJih0aGlzLl9yZW5kZXJlci5fdXBkYXRlU3R5bGUodGhpcyksdGhpcy5vcHRpb25zLnN0cm9rZSYmdCYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsXCJ3ZWlnaHRcIikmJnRoaXMuX3VwZGF0ZUJvdW5kcygpKSx0aGlzfSxicmluZ1RvRnJvbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXImJnRoaXMuX3JlbmRlcmVyLl9icmluZ1RvRnJvbnQodGhpcyksdGhpc30sYnJpbmdUb0JhY2s6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXImJnRoaXMuX3JlbmRlcmVyLl9icmluZ1RvQmFjayh0aGlzKSx0aGlzfSxnZXRFbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhdGh9LF9yZXNldDpmdW5jdGlvbigpe3RoaXMuX3Byb2plY3QoKSx0aGlzLl91cGRhdGUoKX0sX2NsaWNrVG9sZXJhbmNlOmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMub3B0aW9ucy5zdHJva2U/dGhpcy5vcHRpb25zLndlaWdodC8yOjApKyh0aGlzLl9yZW5kZXJlci5vcHRpb25zLnRvbGVyYW5jZXx8MCl9fSksZ2k9ZmkuZXh0ZW5kKHtvcHRpb25zOntmaWxsOiEwLHJhZGl1czoxMH0saW5pdGlhbGl6ZTpmdW5jdGlvbih0LGUpe2ModGhpcyxlKSx0aGlzLl9sYXRsbmc9dyh0KSx0aGlzLl9yYWRpdXM9dGhpcy5vcHRpb25zLnJhZGl1c30sc2V0TGF0TG5nOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2xhdGxuZztyZXR1cm4gdGhpcy5fbGF0bG5nPXcodCksdGhpcy5yZWRyYXcoKSx0aGlzLmZpcmUoXCJtb3ZlXCIse29sZExhdExuZzplLGxhdGxuZzp0aGlzLl9sYXRsbmd9KX0sZ2V0TGF0TG5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xhdGxuZ30sc2V0UmFkaXVzOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnMucmFkaXVzPXRoaXMuX3JhZGl1cz10LHRoaXMucmVkcmF3KCl9LGdldFJhZGl1czpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yYWRpdXN9LHNldFN0eWxlOmZ1bmN0aW9uKHQpe3ZhciBlPXQmJnQucmFkaXVzfHx0aGlzLl9yYWRpdXM7cmV0dXJuIGZpLnByb3RvdHlwZS5zZXRTdHlsZS5jYWxsKHRoaXMsdCksdGhpcy5zZXRSYWRpdXMoZSksdGhpc30sX3Byb2plY3Q6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD10aGlzLl9tYXAubGF0TG5nVG9MYXllclBvaW50KHRoaXMuX2xhdGxuZyksdGhpcy5fdXBkYXRlQm91bmRzKCl9LF91cGRhdGVCb3VuZHM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9yYWRpdXMsZT10aGlzLl9yYWRpdXNZfHx0LGk9dGhpcy5fY2xpY2tUb2xlcmFuY2UoKSx0PVt0K2ksZStpXTt0aGlzLl9weEJvdW5kcz1uZXcgZih0aGlzLl9wb2ludC5zdWJ0cmFjdCh0KSx0aGlzLl9wb2ludC5hZGQodCkpfSxfdXBkYXRlOmZ1bmN0aW9uKCl7dGhpcy5fbWFwJiZ0aGlzLl91cGRhdGVQYXRoKCl9LF91cGRhdGVQYXRoOmZ1bmN0aW9uKCl7dGhpcy5fcmVuZGVyZXIuX3VwZGF0ZUNpcmNsZSh0aGlzKX0sX2VtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JhZGl1cyYmIXRoaXMuX3JlbmRlcmVyLl9ib3VuZHMuaW50ZXJzZWN0cyh0aGlzLl9weEJvdW5kcyl9LF9jb250YWluc1BvaW50OmZ1bmN0aW9uKHQpe3JldHVybiB0LmRpc3RhbmNlVG8odGhpcy5fcG9pbnQpPD10aGlzLl9yYWRpdXMrdGhpcy5fY2xpY2tUb2xlcmFuY2UoKX19KTt2YXIgdmk9Z2kuZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9uKHQsZSxpKXtpZihjKHRoaXMsZT1cIm51bWJlclwiPT10eXBlb2YgZT9sKHt9LGkse3JhZGl1czplfSk6ZSksdGhpcy5fbGF0bG5nPXcodCksaXNOYU4odGhpcy5vcHRpb25zLnJhZGl1cykpdGhyb3cgbmV3IEVycm9yKFwiQ2lyY2xlIHJhZGl1cyBjYW5ub3QgYmUgTmFOXCIpO3RoaXMuX21SYWRpdXM9dGhpcy5vcHRpb25zLnJhZGl1c30sc2V0UmFkaXVzOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tUmFkaXVzPXQsdGhpcy5yZWRyYXcoKX0sZ2V0UmFkaXVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21SYWRpdXN9LGdldEJvdW5kczpmdW5jdGlvbigpe3ZhciB0PVt0aGlzLl9yYWRpdXMsdGhpcy5fcmFkaXVzWXx8dGhpcy5fcmFkaXVzXTtyZXR1cm4gbmV3IHModGhpcy5fbWFwLmxheWVyUG9pbnRUb0xhdExuZyh0aGlzLl9wb2ludC5zdWJ0cmFjdCh0KSksdGhpcy5fbWFwLmxheWVyUG9pbnRUb0xhdExuZyh0aGlzLl9wb2ludC5hZGQodCkpKX0sc2V0U3R5bGU6ZmkucHJvdG90eXBlLnNldFN0eWxlLF9wcm9qZWN0OmZ1bmN0aW9uKCl7dmFyIHQsZSxpLG4sbyxzPXRoaXMuX2xhdGxuZy5sbmcscj10aGlzLl9sYXRsbmcubGF0LGE9dGhpcy5fbWFwLGg9YS5vcHRpb25zLmNycztoLmRpc3RhbmNlPT09c3QuZGlzdGFuY2U/KG49TWF0aC5QSS8xODAsbz10aGlzLl9tUmFkaXVzL3N0LlIvbix0PWEucHJvamVjdChbcitvLHNdKSxlPWEucHJvamVjdChbci1vLHNdKSxlPXQuYWRkKGUpLmRpdmlkZUJ5KDIpLGk9YS51bnByb2plY3QoZSkubGF0LG49TWF0aC5hY29zKChNYXRoLmNvcyhvKm4pLU1hdGguc2luKHIqbikqTWF0aC5zaW4oaSpuKSkvKE1hdGguY29zKHIqbikqTWF0aC5jb3MoaSpuKSkpL24sIWlzTmFOKG4pJiYwIT09bnx8KG49by9NYXRoLmNvcyhNYXRoLlBJLzE4MCpyKSksdGhpcy5fcG9pbnQ9ZS5zdWJ0cmFjdChhLmdldFBpeGVsT3JpZ2luKCkpLHRoaXMuX3JhZGl1cz1pc05hTihuKT8wOmUueC1hLnByb2plY3QoW2kscy1uXSkueCx0aGlzLl9yYWRpdXNZPWUueS10LnkpOihvPWgudW5wcm9qZWN0KGgucHJvamVjdCh0aGlzLl9sYXRsbmcpLnN1YnRyYWN0KFt0aGlzLl9tUmFkaXVzLDBdKSksdGhpcy5fcG9pbnQ9YS5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fbGF0bG5nKSx0aGlzLl9yYWRpdXM9dGhpcy5fcG9pbnQueC1hLmxhdExuZ1RvTGF5ZXJQb2ludChvKS54KSx0aGlzLl91cGRhdGVCb3VuZHMoKX19KTt2YXIgeWk9ZmkuZXh0ZW5kKHtvcHRpb25zOntzbW9vdGhGYWN0b3I6MSxub0NsaXA6ITF9LGluaXRpYWxpemU6ZnVuY3Rpb24odCxlKXtjKHRoaXMsZSksdGhpcy5fc2V0TGF0TG5ncyh0KX0sZ2V0TGF0TG5nczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sYXRsbmdzfSxzZXRMYXRMbmdzOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9zZXRMYXRMbmdzKHQpLHRoaXMucmVkcmF3KCl9LGlzRW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5fbGF0bG5ncy5sZW5ndGh9LGNsb3Nlc3RMYXllclBvaW50OmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0xLzAsaT1udWxsLG49cmksbz0wLHM9dGhpcy5fcGFydHMubGVuZ3RoO288cztvKyspZm9yKHZhciByPXRoaXMuX3BhcnRzW29dLGE9MSxoPXIubGVuZ3RoO2E8aDthKyspe3ZhciBsLHUsYz1uKHQsbD1yW2EtMV0sdT1yW2FdLCEwKTtjPGUmJihlPWMsaT1uKHQsbCx1KSl9cmV0dXJuIGkmJihpLmRpc3RhbmNlPU1hdGguc3FydChlKSksaX0sZ2V0Q2VudGVyOmZ1bmN0aW9uKCl7aWYodGhpcy5fbWFwKXJldHVybiBoaSh0aGlzLl9kZWZhdWx0U2hhcGUoKSx0aGlzLl9tYXAub3B0aW9ucy5jcnMpO3Rocm93IG5ldyBFcnJvcihcIk11c3QgYWRkIGxheWVyIHRvIG1hcCBiZWZvcmUgdXNpbmcgZ2V0Q2VudGVyKClcIil9LGdldEJvdW5kczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9ib3VuZHN9LGFkZExhdExuZzpmdW5jdGlvbih0LGUpe3JldHVybiBlPWV8fHRoaXMuX2RlZmF1bHRTaGFwZSgpLHQ9dyh0KSxlLnB1c2godCksdGhpcy5fYm91bmRzLmV4dGVuZCh0KSx0aGlzLnJlZHJhdygpfSxfc2V0TGF0TG5nczpmdW5jdGlvbih0KXt0aGlzLl9ib3VuZHM9bmV3IHMsdGhpcy5fbGF0bG5ncz10aGlzLl9jb252ZXJ0TGF0TG5ncyh0KX0sX2RlZmF1bHRTaGFwZTpmdW5jdGlvbigpe3JldHVybiBJKHRoaXMuX2xhdGxuZ3MpP3RoaXMuX2xhdGxuZ3M6dGhpcy5fbGF0bG5nc1swXX0sX2NvbnZlcnRMYXRMbmdzOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxpPUkodCksbj0wLG89dC5sZW5ndGg7bjxvO24rKylpPyhlW25dPXcodFtuXSksdGhpcy5fYm91bmRzLmV4dGVuZChlW25dKSk6ZVtuXT10aGlzLl9jb252ZXJ0TGF0TG5ncyh0W25dKTtyZXR1cm4gZX0sX3Byb2plY3Q6ZnVuY3Rpb24oKXt2YXIgdD1uZXcgZjt0aGlzLl9yaW5ncz1bXSx0aGlzLl9wcm9qZWN0TGF0bG5ncyh0aGlzLl9sYXRsbmdzLHRoaXMuX3JpbmdzLHQpLHRoaXMuX2JvdW5kcy5pc1ZhbGlkKCkmJnQuaXNWYWxpZCgpJiYodGhpcy5fcmF3UHhCb3VuZHM9dCx0aGlzLl91cGRhdGVCb3VuZHMoKSl9LF91cGRhdGVCb3VuZHM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jbGlja1RvbGVyYW5jZSgpLHQ9bmV3IHAodCx0KTt0aGlzLl9yYXdQeEJvdW5kcyYmKHRoaXMuX3B4Qm91bmRzPW5ldyBmKFt0aGlzLl9yYXdQeEJvdW5kcy5taW4uc3VidHJhY3QodCksdGhpcy5fcmF3UHhCb3VuZHMubWF4LmFkZCh0KV0pKX0sX3Byb2plY3RMYXRsbmdzOmZ1bmN0aW9uKHQsZSxpKXt2YXIgbixvLHM9dFswXWluc3RhbmNlb2YgdixyPXQubGVuZ3RoO2lmKHMpe2ZvcihvPVtdLG49MDtuPHI7bisrKW9bbl09dGhpcy5fbWFwLmxhdExuZ1RvTGF5ZXJQb2ludCh0W25dKSxpLmV4dGVuZChvW25dKTtlLnB1c2gobyl9ZWxzZSBmb3Iobj0wO248cjtuKyspdGhpcy5fcHJvamVjdExhdGxuZ3ModFtuXSxlLGkpfSxfY2xpcFBvaW50czpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3JlbmRlcmVyLl9ib3VuZHM7aWYodGhpcy5fcGFydHM9W10sdGhpcy5fcHhCb3VuZHMmJnRoaXMuX3B4Qm91bmRzLmludGVyc2VjdHModCkpaWYodGhpcy5vcHRpb25zLm5vQ2xpcCl0aGlzLl9wYXJ0cz10aGlzLl9yaW5ncztlbHNlIGZvcih2YXIgZSxpLG4sbyxzPXRoaXMuX3BhcnRzLHI9MCxhPTAsaD10aGlzLl9yaW5ncy5sZW5ndGg7cjxoO3IrKylmb3IoZT0wLGk9KG89dGhpcy5fcmluZ3Nbcl0pLmxlbmd0aDtlPGktMTtlKyspKG49bmkob1tlXSxvW2UrMV0sdCxlLCEwKSkmJihzW2FdPXNbYV18fFtdLHNbYV0ucHVzaChuWzBdKSxuWzFdPT09b1tlKzFdJiZlIT09aS0yfHwoc1thXS5wdXNoKG5bMV0pLGErKykpfSxfc2ltcGxpZnlQb2ludHM6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fcGFydHMsZT10aGlzLm9wdGlvbnMuc21vb3RoRmFjdG9yLGk9MCxuPXQubGVuZ3RoO2k8bjtpKyspdFtpXT1laSh0W2ldLGUpfSxfdXBkYXRlOmZ1bmN0aW9uKCl7dGhpcy5fbWFwJiYodGhpcy5fY2xpcFBvaW50cygpLHRoaXMuX3NpbXBsaWZ5UG9pbnRzKCksdGhpcy5fdXBkYXRlUGF0aCgpKX0sX3VwZGF0ZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl9yZW5kZXJlci5fdXBkYXRlUG9seSh0aGlzKX0sX2NvbnRhaW5zUG9pbnQ6ZnVuY3Rpb24odCxlKXt2YXIgaSxuLG8scyxyLGEsaD10aGlzLl9jbGlja1RvbGVyYW5jZSgpO2lmKHRoaXMuX3B4Qm91bmRzJiZ0aGlzLl9weEJvdW5kcy5jb250YWlucyh0KSlmb3IoaT0wLHM9dGhpcy5fcGFydHMubGVuZ3RoO2k8cztpKyspZm9yKG49MCxvPShyPShhPXRoaXMuX3BhcnRzW2ldKS5sZW5ndGgpLTE7bjxyO289bisrKWlmKChlfHwwIT09bikmJmlpKHQsYVtvXSxhW25dKTw9aClyZXR1cm4hMDtyZXR1cm4hMX19KTt5aS5fZmxhdD1haTt2YXIgeGk9eWkuZXh0ZW5kKHtvcHRpb25zOntmaWxsOiEwfSxpc0VtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuX2xhdGxuZ3MubGVuZ3RofHwhdGhpcy5fbGF0bG5nc1swXS5sZW5ndGh9LGdldENlbnRlcjpmdW5jdGlvbigpe2lmKHRoaXMuX21hcClyZXR1cm4gJGUodGhpcy5fZGVmYXVsdFNoYXBlKCksdGhpcy5fbWFwLm9wdGlvbnMuY3JzKTt0aHJvdyBuZXcgRXJyb3IoXCJNdXN0IGFkZCBsYXllciB0byBtYXAgYmVmb3JlIHVzaW5nIGdldENlbnRlcigpXCIpfSxfY29udmVydExhdExuZ3M6ZnVuY3Rpb24odCl7dmFyIHQ9eWkucHJvdG90eXBlLl9jb252ZXJ0TGF0TG5ncy5jYWxsKHRoaXMsdCksZT10Lmxlbmd0aDtyZXR1cm4gMjw9ZSYmdFswXWluc3RhbmNlb2YgdiYmdFswXS5lcXVhbHModFtlLTFdKSYmdC5wb3AoKSx0fSxfc2V0TGF0TG5nczpmdW5jdGlvbih0KXt5aS5wcm90b3R5cGUuX3NldExhdExuZ3MuY2FsbCh0aGlzLHQpLEkodGhpcy5fbGF0bG5ncykmJih0aGlzLl9sYXRsbmdzPVt0aGlzLl9sYXRsbmdzXSl9LF9kZWZhdWx0U2hhcGU6ZnVuY3Rpb24oKXtyZXR1cm4oSSh0aGlzLl9sYXRsbmdzWzBdKT90aGlzLl9sYXRsbmdzOnRoaXMuX2xhdGxuZ3NbMF0pWzBdfSxfY2xpcFBvaW50czpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3JlbmRlcmVyLl9ib3VuZHMsZT10aGlzLm9wdGlvbnMud2VpZ2h0LGU9bmV3IHAoZSxlKSx0PW5ldyBmKHQubWluLnN1YnRyYWN0KGUpLHQubWF4LmFkZChlKSk7aWYodGhpcy5fcGFydHM9W10sdGhpcy5fcHhCb3VuZHMmJnRoaXMuX3B4Qm91bmRzLmludGVyc2VjdHModCkpaWYodGhpcy5vcHRpb25zLm5vQ2xpcCl0aGlzLl9wYXJ0cz10aGlzLl9yaW5ncztlbHNlIGZvcih2YXIgaSxuPTAsbz10aGlzLl9yaW5ncy5sZW5ndGg7bjxvO24rKykoaT1KZSh0aGlzLl9yaW5nc1tuXSx0LCEwKSkubGVuZ3RoJiZ0aGlzLl9wYXJ0cy5wdXNoKGkpfSxfdXBkYXRlUGF0aDpmdW5jdGlvbigpe3RoaXMuX3JlbmRlcmVyLl91cGRhdGVQb2x5KHRoaXMsITApfSxfY29udGFpbnNQb2ludDpmdW5jdGlvbih0KXt2YXIgZSxpLG4sbyxzLHIsYSxoLGw9ITE7aWYoIXRoaXMuX3B4Qm91bmRzfHwhdGhpcy5fcHhCb3VuZHMuY29udGFpbnModCkpcmV0dXJuITE7Zm9yKG89MCxhPXRoaXMuX3BhcnRzLmxlbmd0aDtvPGE7bysrKWZvcihzPTAscj0oaD0oZT10aGlzLl9wYXJ0c1tvXSkubGVuZ3RoKS0xO3M8aDtyPXMrKylpPWVbc10sbj1lW3JdLGkueT50LnkhPW4ueT50LnkmJnQueDwobi54LWkueCkqKHQueS1pLnkpLyhuLnktaS55KStpLngmJihsPSFsKTtyZXR1cm4gbHx8eWkucHJvdG90eXBlLl9jb250YWluc1BvaW50LmNhbGwodGhpcyx0LCEwKX19KTt2YXIgd2k9Y2kuZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9uKHQsZSl7Yyh0aGlzLGUpLHRoaXMuX2xheWVycz17fSx0JiZ0aGlzLmFkZERhdGEodCl9LGFkZERhdGE6ZnVuY3Rpb24odCl7dmFyIGUsaSxuLG89ZCh0KT90OnQuZmVhdHVyZXM7aWYobyl7Zm9yKGU9MCxpPW8ubGVuZ3RoO2U8aTtlKyspKChuPW9bZV0pLmdlb21ldHJpZXN8fG4uZ2VvbWV0cnl8fG4uZmVhdHVyZXN8fG4uY29vcmRpbmF0ZXMpJiZ0aGlzLmFkZERhdGEobik7cmV0dXJuIHRoaXN9dmFyIHMscj10aGlzLm9wdGlvbnM7cmV0dXJuKCFyLmZpbHRlcnx8ci5maWx0ZXIodCkpJiYocz1iaSh0LHIpKT8ocy5mZWF0dXJlPVppKHQpLHMuZGVmYXVsdE9wdGlvbnM9cy5vcHRpb25zLHRoaXMucmVzZXRTdHlsZShzKSxyLm9uRWFjaEZlYXR1cmUmJnIub25FYWNoRmVhdHVyZSh0LHMpLHRoaXMuYWRkTGF5ZXIocykpOnRoaXN9LHJlc2V0U3R5bGU6ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQ/dGhpcy5lYWNoTGF5ZXIodGhpcy5yZXNldFN0eWxlLHRoaXMpOih0Lm9wdGlvbnM9bCh7fSx0LmRlZmF1bHRPcHRpb25zKSx0aGlzLl9zZXRMYXllclN0eWxlKHQsdGhpcy5vcHRpb25zLnN0eWxlKSx0aGlzKX0sc2V0U3R5bGU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaExheWVyKGZ1bmN0aW9uKHQpe3RoaXMuX3NldExheWVyU3R5bGUodCxlKX0sdGhpcyl9LF9zZXRMYXllclN0eWxlOmZ1bmN0aW9uKHQsZSl7dC5zZXRTdHlsZSYmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJihlPWUodC5mZWF0dXJlKSksdC5zZXRTdHlsZShlKSl9fSk7ZnVuY3Rpb24gYmkodCxlKXt2YXIgaSxuLG8scyxyPVwiRmVhdHVyZVwiPT09dC50eXBlP3QuZ2VvbWV0cnk6dCxhPXI/ci5jb29yZGluYXRlczpudWxsLGg9W10sbD1lJiZlLnBvaW50VG9MYXllcix1PWUmJmUuY29vcmRzVG9MYXRMbmd8fExpO2lmKCFhJiYhcilyZXR1cm4gbnVsbDtzd2l0Y2goci50eXBlKXtjYXNlXCJQb2ludFwiOnJldHVybiBQaShsLHQsaT11KGEpLGUpO2Nhc2VcIk11bHRpUG9pbnRcIjpmb3Iobz0wLHM9YS5sZW5ndGg7bzxzO28rKylpPXUoYVtvXSksaC5wdXNoKFBpKGwsdCxpLGUpKTtyZXR1cm4gbmV3IGNpKGgpO2Nhc2VcIkxpbmVTdHJpbmdcIjpjYXNlXCJNdWx0aUxpbmVTdHJpbmdcIjpyZXR1cm4gbj1UaShhLFwiTGluZVN0cmluZ1wiPT09ci50eXBlPzA6MSx1KSxuZXcgeWkobixlKTtjYXNlXCJQb2x5Z29uXCI6Y2FzZVwiTXVsdGlQb2x5Z29uXCI6cmV0dXJuIG49VGkoYSxcIlBvbHlnb25cIj09PXIudHlwZT8xOjIsdSksbmV3IHhpKG4sZSk7Y2FzZVwiR2VvbWV0cnlDb2xsZWN0aW9uXCI6Zm9yKG89MCxzPXIuZ2VvbWV0cmllcy5sZW5ndGg7bzxzO28rKyl7dmFyIGM9Ymkoe2dlb21ldHJ5OnIuZ2VvbWV0cmllc1tvXSx0eXBlOlwiRmVhdHVyZVwiLHByb3BlcnRpZXM6dC5wcm9wZXJ0aWVzfSxlKTtjJiZoLnB1c2goYyl9cmV0dXJuIG5ldyBjaShoKTtjYXNlXCJGZWF0dXJlQ29sbGVjdGlvblwiOmZvcihvPTAscz1yLmZlYXR1cmVzLmxlbmd0aDtvPHM7bysrKXt2YXIgZD1iaShyLmZlYXR1cmVzW29dLGUpO2QmJmgucHVzaChkKX1yZXR1cm4gbmV3IGNpKGgpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBHZW9KU09OIG9iamVjdC5cIil9fWZ1bmN0aW9uIFBpKHQsZSxpLG4pe3JldHVybiB0P3QoZSxpKTpuZXcgbWkoaSxuJiZuLm1hcmtlcnNJbmhlcml0T3B0aW9ucyYmbil9ZnVuY3Rpb24gTGkodCl7cmV0dXJuIG5ldyB2KHRbMV0sdFswXSx0WzJdKX1mdW5jdGlvbiBUaSh0LGUsaSl7Zm9yKHZhciBuLG89W10scz0wLHI9dC5sZW5ndGg7czxyO3MrKyluPWU/VGkodFtzXSxlLTEsaSk6KGl8fExpKSh0W3NdKSxvLnB1c2gobik7cmV0dXJuIG99ZnVuY3Rpb24gTWkodCxlKXtyZXR1cm4gdm9pZCAwIT09KHQ9dyh0KSkuYWx0P1tpKHQubG5nLGUpLGkodC5sYXQsZSksaSh0LmFsdCxlKV06W2kodC5sbmcsZSksaSh0LmxhdCxlKV19ZnVuY3Rpb24gemkodCxlLGksbil7Zm9yKHZhciBvPVtdLHM9MCxyPXQubGVuZ3RoO3M8cjtzKyspby5wdXNoKGU/emkodFtzXSxJKHRbc10pPzA6ZS0xLGksbik6TWkodFtzXSxuKSk7cmV0dXJuIWUmJmkmJjA8by5sZW5ndGgmJm8ucHVzaChvWzBdLnNsaWNlKCkpLG99ZnVuY3Rpb24gQ2kodCxlKXtyZXR1cm4gdC5mZWF0dXJlP2woe30sdC5mZWF0dXJlLHtnZW9tZXRyeTplfSk6WmkoZSl9ZnVuY3Rpb24gWmkodCl7cmV0dXJuXCJGZWF0dXJlXCI9PT10LnR5cGV8fFwiRmVhdHVyZUNvbGxlY3Rpb25cIj09PXQudHlwZT90Ont0eXBlOlwiRmVhdHVyZVwiLHByb3BlcnRpZXM6e30sZ2VvbWV0cnk6dH19VHQ9e3RvR2VvSlNPTjpmdW5jdGlvbih0KXtyZXR1cm4gQ2kodGhpcyx7dHlwZTpcIlBvaW50XCIsY29vcmRpbmF0ZXM6TWkodGhpcy5nZXRMYXRMbmcoKSx0KX0pfX07ZnVuY3Rpb24gU2kodCxlKXtyZXR1cm4gbmV3IHdpKHQsZSl9bWkuaW5jbHVkZShUdCksdmkuaW5jbHVkZShUdCksZ2kuaW5jbHVkZShUdCkseWkuaW5jbHVkZSh7dG9HZW9KU09OOmZ1bmN0aW9uKHQpe3ZhciBlPSFJKHRoaXMuX2xhdGxuZ3MpO3JldHVybiBDaSh0aGlzLHt0eXBlOihlP1wiTXVsdGlcIjpcIlwiKStcIkxpbmVTdHJpbmdcIixjb29yZGluYXRlczp6aSh0aGlzLl9sYXRsbmdzLGU/MTowLCExLHQpfSl9fSkseGkuaW5jbHVkZSh7dG9HZW9KU09OOmZ1bmN0aW9uKHQpe3ZhciBlPSFJKHRoaXMuX2xhdGxuZ3MpLGk9ZSYmIUkodGhpcy5fbGF0bG5nc1swXSksdD16aSh0aGlzLl9sYXRsbmdzLGk/MjplPzE6MCwhMCx0KTtyZXR1cm4gQ2kodGhpcyx7dHlwZTooaT9cIk11bHRpXCI6XCJcIikrXCJQb2x5Z29uXCIsY29vcmRpbmF0ZXM6dD1lP3Q6W3RdfSl9fSksdWkuaW5jbHVkZSh7dG9NdWx0aVBvaW50OmZ1bmN0aW9uKGUpe3ZhciBpPVtdO3JldHVybiB0aGlzLmVhY2hMYXllcihmdW5jdGlvbih0KXtpLnB1c2godC50b0dlb0pTT04oZSkuZ2VvbWV0cnkuY29vcmRpbmF0ZXMpfSksQ2kodGhpcyx7dHlwZTpcIk11bHRpUG9pbnRcIixjb29yZGluYXRlczppfSl9LHRvR2VvSlNPTjpmdW5jdGlvbihlKXt2YXIgaSxuLHQ9dGhpcy5mZWF0dXJlJiZ0aGlzLmZlYXR1cmUuZ2VvbWV0cnkmJnRoaXMuZmVhdHVyZS5nZW9tZXRyeS50eXBlO3JldHVyblwiTXVsdGlQb2ludFwiPT09dD90aGlzLnRvTXVsdGlQb2ludChlKTooaT1cIkdlb21ldHJ5Q29sbGVjdGlvblwiPT09dCxuPVtdLHRoaXMuZWFjaExheWVyKGZ1bmN0aW9uKHQpe3QudG9HZW9KU09OJiYodD10LnRvR2VvSlNPTihlKSxpP24ucHVzaCh0Lmdlb21ldHJ5KTpcIkZlYXR1cmVDb2xsZWN0aW9uXCI9PT0odD1aaSh0KSkudHlwZT9uLnB1c2guYXBwbHkobix0LmZlYXR1cmVzKTpuLnB1c2godCkpfSksaT9DaSh0aGlzLHtnZW9tZXRyaWVzOm4sdHlwZTpcIkdlb21ldHJ5Q29sbGVjdGlvblwifSk6e3R5cGU6XCJGZWF0dXJlQ29sbGVjdGlvblwiLGZlYXR1cmVzOm59KX19KTt2YXIgTXQ9U2ksRWk9by5leHRlbmQoe29wdGlvbnM6e29wYWNpdHk6MSxhbHQ6XCJcIixpbnRlcmFjdGl2ZTohMSxjcm9zc09yaWdpbjohMSxlcnJvck92ZXJsYXlVcmw6XCJcIix6SW5kZXg6MSxjbGFzc05hbWU6XCJcIn0saW5pdGlhbGl6ZTpmdW5jdGlvbih0LGUsaSl7dGhpcy5fdXJsPXQsdGhpcy5fYm91bmRzPWcoZSksYyh0aGlzLGkpfSxvbkFkZDpmdW5jdGlvbigpe3RoaXMuX2ltYWdlfHwodGhpcy5faW5pdEltYWdlKCksdGhpcy5vcHRpb25zLm9wYWNpdHk8MSYmdGhpcy5fdXBkYXRlT3BhY2l0eSgpKSx0aGlzLm9wdGlvbnMuaW50ZXJhY3RpdmUmJihNKHRoaXMuX2ltYWdlLFwibGVhZmxldC1pbnRlcmFjdGl2ZVwiKSx0aGlzLmFkZEludGVyYWN0aXZlVGFyZ2V0KHRoaXMuX2ltYWdlKSksdGhpcy5nZXRQYW5lKCkuYXBwZW5kQ2hpbGQodGhpcy5faW1hZ2UpLHRoaXMuX3Jlc2V0KCl9LG9uUmVtb3ZlOmZ1bmN0aW9uKCl7VCh0aGlzLl9pbWFnZSksdGhpcy5vcHRpb25zLmludGVyYWN0aXZlJiZ0aGlzLnJlbW92ZUludGVyYWN0aXZlVGFyZ2V0KHRoaXMuX2ltYWdlKX0sc2V0T3BhY2l0eTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLm9wYWNpdHk9dCx0aGlzLl9pbWFnZSYmdGhpcy5fdXBkYXRlT3BhY2l0eSgpLHRoaXN9LHNldFN0eWxlOmZ1bmN0aW9uKHQpe3JldHVybiB0Lm9wYWNpdHkmJnRoaXMuc2V0T3BhY2l0eSh0Lm9wYWNpdHkpLHRoaXN9LGJyaW5nVG9Gcm9udDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXAmJmZlKHRoaXMuX2ltYWdlKSx0aGlzfSxicmluZ1RvQmFjazpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXAmJmdlKHRoaXMuX2ltYWdlKSx0aGlzfSxzZXRVcmw6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3VybD10LHRoaXMuX2ltYWdlJiYodGhpcy5faW1hZ2Uuc3JjPXQpLHRoaXN9LHNldEJvdW5kczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYm91bmRzPWcodCksdGhpcy5fbWFwJiZ0aGlzLl9yZXNldCgpLHRoaXN9LGdldEV2ZW50czpmdW5jdGlvbigpe3ZhciB0PXt6b29tOnRoaXMuX3Jlc2V0LHZpZXdyZXNldDp0aGlzLl9yZXNldH07cmV0dXJuIHRoaXMuX3pvb21BbmltYXRlZCYmKHQuem9vbWFuaW09dGhpcy5fYW5pbWF0ZVpvb20pLHR9LHNldFpJbmRleDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLnpJbmRleD10LHRoaXMuX3VwZGF0ZVpJbmRleCgpLHRoaXN9LGdldEJvdW5kczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9ib3VuZHN9LGdldEVsZW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faW1hZ2V9LF9pbml0SW1hZ2U6ZnVuY3Rpb24oKXt2YXIgdD1cIklNR1wiPT09dGhpcy5fdXJsLnRhZ05hbWUsZT10aGlzLl9pbWFnZT10P3RoaXMuX3VybDpQKFwiaW1nXCIpO00oZSxcImxlYWZsZXQtaW1hZ2UtbGF5ZXJcIiksdGhpcy5fem9vbUFuaW1hdGVkJiZNKGUsXCJsZWFmbGV0LXpvb20tYW5pbWF0ZWRcIiksdGhpcy5vcHRpb25zLmNsYXNzTmFtZSYmTShlLHRoaXMub3B0aW9ucy5jbGFzc05hbWUpLGUub25zZWxlY3RzdGFydD11LGUub25tb3VzZW1vdmU9dSxlLm9ubG9hZD1hKHRoaXMuZmlyZSx0aGlzLFwibG9hZFwiKSxlLm9uZXJyb3I9YSh0aGlzLl9vdmVybGF5T25FcnJvcix0aGlzLFwiZXJyb3JcIiksIXRoaXMub3B0aW9ucy5jcm9zc09yaWdpbiYmXCJcIiE9PXRoaXMub3B0aW9ucy5jcm9zc09yaWdpbnx8KGUuY3Jvc3NPcmlnaW49ITA9PT10aGlzLm9wdGlvbnMuY3Jvc3NPcmlnaW4/XCJcIjp0aGlzLm9wdGlvbnMuY3Jvc3NPcmlnaW4pLHRoaXMub3B0aW9ucy56SW5kZXgmJnRoaXMuX3VwZGF0ZVpJbmRleCgpLHQ/dGhpcy5fdXJsPWUuc3JjOihlLnNyYz10aGlzLl91cmwsZS5hbHQ9dGhpcy5vcHRpb25zLmFsdCl9LF9hbmltYXRlWm9vbTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9tYXAuZ2V0Wm9vbVNjYWxlKHQuem9vbSksdD10aGlzLl9tYXAuX2xhdExuZ0JvdW5kc1RvTmV3TGF5ZXJCb3VuZHModGhpcy5fYm91bmRzLHQuem9vbSx0LmNlbnRlcikubWluO2JlKHRoaXMuX2ltYWdlLHQsZSl9LF9yZXNldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2ltYWdlLGU9bmV3IGYodGhpcy5fbWFwLmxhdExuZ1RvTGF5ZXJQb2ludCh0aGlzLl9ib3VuZHMuZ2V0Tm9ydGhXZXN0KCkpLHRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fYm91bmRzLmdldFNvdXRoRWFzdCgpKSksaT1lLmdldFNpemUoKTtaKHQsZS5taW4pLHQuc3R5bGUud2lkdGg9aS54K1wicHhcIix0LnN0eWxlLmhlaWdodD1pLnkrXCJweFwifSxfdXBkYXRlT3BhY2l0eTpmdW5jdGlvbigpe0ModGhpcy5faW1hZ2UsdGhpcy5vcHRpb25zLm9wYWNpdHkpfSxfdXBkYXRlWkluZGV4OmZ1bmN0aW9uKCl7dGhpcy5faW1hZ2UmJnZvaWQgMCE9PXRoaXMub3B0aW9ucy56SW5kZXgmJm51bGwhPT10aGlzLm9wdGlvbnMuekluZGV4JiYodGhpcy5faW1hZ2Uuc3R5bGUuekluZGV4PXRoaXMub3B0aW9ucy56SW5kZXgpfSxfb3ZlcmxheU9uRXJyb3I6ZnVuY3Rpb24oKXt0aGlzLmZpcmUoXCJlcnJvclwiKTt2YXIgdD10aGlzLm9wdGlvbnMuZXJyb3JPdmVybGF5VXJsO3QmJnRoaXMuX3VybCE9PXQmJih0aGlzLl91cmw9dCx0aGlzLl9pbWFnZS5zcmM9dCl9LGdldENlbnRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9ib3VuZHMuZ2V0Q2VudGVyKCl9fSksa2k9RWkuZXh0ZW5kKHtvcHRpb25zOnthdXRvcGxheTohMCxsb29wOiEwLGtlZXBBc3BlY3RSYXRpbzohMCxtdXRlZDohMSxwbGF5c0lubGluZTohMH0sX2luaXRJbWFnZTpmdW5jdGlvbigpe3ZhciB0PVwiVklERU9cIj09PXRoaXMuX3VybC50YWdOYW1lLGU9dGhpcy5faW1hZ2U9dD90aGlzLl91cmw6UChcInZpZGVvXCIpO2lmKE0oZSxcImxlYWZsZXQtaW1hZ2UtbGF5ZXJcIiksdGhpcy5fem9vbUFuaW1hdGVkJiZNKGUsXCJsZWFmbGV0LXpvb20tYW5pbWF0ZWRcIiksdGhpcy5vcHRpb25zLmNsYXNzTmFtZSYmTShlLHRoaXMub3B0aW9ucy5jbGFzc05hbWUpLGUub25zZWxlY3RzdGFydD11LGUub25tb3VzZW1vdmU9dSxlLm9ubG9hZGVkZGF0YT1hKHRoaXMuZmlyZSx0aGlzLFwibG9hZFwiKSx0KXtmb3IodmFyIGk9ZS5nZXRFbGVtZW50c0J5VGFnTmFtZShcInNvdXJjZVwiKSxuPVtdLG89MDtvPGkubGVuZ3RoO28rKyluLnB1c2goaVtvXS5zcmMpO3RoaXMuX3VybD0wPGkubGVuZ3RoP246W2Uuc3JjXX1lbHNle2QodGhpcy5fdXJsKXx8KHRoaXMuX3VybD1bdGhpcy5fdXJsXSksIXRoaXMub3B0aW9ucy5rZWVwQXNwZWN0UmF0aW8mJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLnN0eWxlLFwib2JqZWN0Rml0XCIpJiYoZS5zdHlsZS5vYmplY3RGaXQ9XCJmaWxsXCIpLGUuYXV0b3BsYXk9ISF0aGlzLm9wdGlvbnMuYXV0b3BsYXksZS5sb29wPSEhdGhpcy5vcHRpb25zLmxvb3AsZS5tdXRlZD0hIXRoaXMub3B0aW9ucy5tdXRlZCxlLnBsYXlzSW5saW5lPSEhdGhpcy5vcHRpb25zLnBsYXlzSW5saW5lO2Zvcih2YXIgcz0wO3M8dGhpcy5fdXJsLmxlbmd0aDtzKyspe3ZhciByPVAoXCJzb3VyY2VcIik7ci5zcmM9dGhpcy5fdXJsW3NdLGUuYXBwZW5kQ2hpbGQocil9fX19KTt2YXIgT2k9RWkuZXh0ZW5kKHtfaW5pdEltYWdlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5faW1hZ2U9dGhpcy5fdXJsO00odCxcImxlYWZsZXQtaW1hZ2UtbGF5ZXJcIiksdGhpcy5fem9vbUFuaW1hdGVkJiZNKHQsXCJsZWFmbGV0LXpvb20tYW5pbWF0ZWRcIiksdGhpcy5vcHRpb25zLmNsYXNzTmFtZSYmTSh0LHRoaXMub3B0aW9ucy5jbGFzc05hbWUpLHQub25zZWxlY3RzdGFydD11LHQub25tb3VzZW1vdmU9dX19KTt2YXIgQWk9by5leHRlbmQoe29wdGlvbnM6e2ludGVyYWN0aXZlOiExLG9mZnNldDpbMCwwXSxjbGFzc05hbWU6XCJcIixwYW5lOnZvaWQgMCxjb250ZW50OlwiXCJ9LGluaXRpYWxpemU6ZnVuY3Rpb24odCxlKXt0JiYodCBpbnN0YW5jZW9mIHZ8fGQodCkpPyh0aGlzLl9sYXRsbmc9dyh0KSxjKHRoaXMsZSkpOihjKHRoaXMsdCksdGhpcy5fc291cmNlPWUpLHRoaXMub3B0aW9ucy5jb250ZW50JiYodGhpcy5fY29udGVudD10aGlzLm9wdGlvbnMuY29udGVudCl9LG9wZW5PbjpmdW5jdGlvbih0KXtyZXR1cm4odD1hcmd1bWVudHMubGVuZ3RoP3Q6dGhpcy5fc291cmNlLl9tYXApLmhhc0xheWVyKHRoaXMpfHx0LmFkZExheWVyKHRoaXMpLHRoaXN9LGNsb3NlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hcCYmdGhpcy5fbWFwLnJlbW92ZUxheWVyKHRoaXMpLHRoaXN9LHRvZ2dsZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbWFwP3RoaXMuY2xvc2UoKTooYXJndW1lbnRzLmxlbmd0aD90aGlzLl9zb3VyY2U9dDp0PXRoaXMuX3NvdXJjZSx0aGlzLl9wcmVwYXJlT3BlbigpLHRoaXMub3Blbk9uKHQuX21hcCkpLHRoaXN9LG9uQWRkOmZ1bmN0aW9uKHQpe3RoaXMuX3pvb21BbmltYXRlZD10Ll96b29tQW5pbWF0ZWQsdGhpcy5fY29udGFpbmVyfHx0aGlzLl9pbml0TGF5b3V0KCksdC5fZmFkZUFuaW1hdGVkJiZDKHRoaXMuX2NvbnRhaW5lciwwKSxjbGVhclRpbWVvdXQodGhpcy5fcmVtb3ZlVGltZW91dCksdGhpcy5nZXRQYW5lKCkuYXBwZW5kQ2hpbGQodGhpcy5fY29udGFpbmVyKSx0aGlzLnVwZGF0ZSgpLHQuX2ZhZGVBbmltYXRlZCYmQyh0aGlzLl9jb250YWluZXIsMSksdGhpcy5icmluZ1RvRnJvbnQoKSx0aGlzLm9wdGlvbnMuaW50ZXJhY3RpdmUmJihNKHRoaXMuX2NvbnRhaW5lcixcImxlYWZsZXQtaW50ZXJhY3RpdmVcIiksdGhpcy5hZGRJbnRlcmFjdGl2ZVRhcmdldCh0aGlzLl9jb250YWluZXIpKX0sb25SZW1vdmU6ZnVuY3Rpb24odCl7dC5fZmFkZUFuaW1hdGVkPyhDKHRoaXMuX2NvbnRhaW5lciwwKSx0aGlzLl9yZW1vdmVUaW1lb3V0PXNldFRpbWVvdXQoYShULHZvaWQgMCx0aGlzLl9jb250YWluZXIpLDIwMCkpOlQodGhpcy5fY29udGFpbmVyKSx0aGlzLm9wdGlvbnMuaW50ZXJhY3RpdmUmJih6KHRoaXMuX2NvbnRhaW5lcixcImxlYWZsZXQtaW50ZXJhY3RpdmVcIiksdGhpcy5yZW1vdmVJbnRlcmFjdGl2ZVRhcmdldCh0aGlzLl9jb250YWluZXIpKX0sZ2V0TGF0TG5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xhdGxuZ30sc2V0TGF0TG5nOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9sYXRsbmc9dyh0KSx0aGlzLl9tYXAmJih0aGlzLl91cGRhdGVQb3NpdGlvbigpLHRoaXMuX2FkanVzdFBhbigpKSx0aGlzfSxnZXRDb250ZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbnRlbnR9LHNldENvbnRlbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NvbnRlbnQ9dCx0aGlzLnVwZGF0ZSgpLHRoaXN9LGdldEVsZW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGFpbmVyfSx1cGRhdGU6ZnVuY3Rpb24oKXt0aGlzLl9tYXAmJih0aGlzLl9jb250YWluZXIuc3R5bGUudmlzaWJpbGl0eT1cImhpZGRlblwiLHRoaXMuX3VwZGF0ZUNvbnRlbnQoKSx0aGlzLl91cGRhdGVMYXlvdXQoKSx0aGlzLl91cGRhdGVQb3NpdGlvbigpLHRoaXMuX2NvbnRhaW5lci5zdHlsZS52aXNpYmlsaXR5PVwiXCIsdGhpcy5fYWRqdXN0UGFuKCkpfSxnZXRFdmVudHM6ZnVuY3Rpb24oKXt2YXIgdD17em9vbTp0aGlzLl91cGRhdGVQb3NpdGlvbix2aWV3cmVzZXQ6dGhpcy5fdXBkYXRlUG9zaXRpb259O3JldHVybiB0aGlzLl96b29tQW5pbWF0ZWQmJih0Lnpvb21hbmltPXRoaXMuX2FuaW1hdGVab29tKSx0fSxpc09wZW46ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX21hcCYmdGhpcy5fbWFwLmhhc0xheWVyKHRoaXMpfSxicmluZ1RvRnJvbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwJiZmZSh0aGlzLl9jb250YWluZXIpLHRoaXN9LGJyaW5nVG9CYWNrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hcCYmZ2UodGhpcy5fY29udGFpbmVyKSx0aGlzfSxfcHJlcGFyZU9wZW46ZnVuY3Rpb24odCl7aWYoIShpPXRoaXMuX3NvdXJjZSkuX21hcClyZXR1cm4hMTtpZihpIGluc3RhbmNlb2YgY2kpe3ZhciBlLGk9bnVsbCxuPXRoaXMuX3NvdXJjZS5fbGF5ZXJzO2ZvcihlIGluIG4paWYobltlXS5fbWFwKXtpPW5bZV07YnJlYWt9aWYoIWkpcmV0dXJuITE7dGhpcy5fc291cmNlPWl9aWYoIXQpaWYoaS5nZXRDZW50ZXIpdD1pLmdldENlbnRlcigpO2Vsc2UgaWYoaS5nZXRMYXRMbmcpdD1pLmdldExhdExuZygpO2Vsc2V7aWYoIWkuZ2V0Qm91bmRzKXRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBnZXQgc291cmNlIGxheWVyIExhdExuZy5cIik7dD1pLmdldEJvdW5kcygpLmdldENlbnRlcigpfXJldHVybiB0aGlzLnNldExhdExuZyh0KSx0aGlzLl9tYXAmJnRoaXMudXBkYXRlKCksITB9LF91cGRhdGVDb250ZW50OmZ1bmN0aW9uKCl7aWYodGhpcy5fY29udGVudCl7dmFyIHQ9dGhpcy5fY29udGVudE5vZGUsZT1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzLl9jb250ZW50P3RoaXMuX2NvbnRlbnQodGhpcy5fc291cmNlfHx0aGlzKTp0aGlzLl9jb250ZW50O2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXQuaW5uZXJIVE1MPWU7ZWxzZXtmb3IoO3QuaGFzQ2hpbGROb2RlcygpOyl0LnJlbW92ZUNoaWxkKHQuZmlyc3RDaGLSDkZCk7dC5hcHBlbmRDaGLSDkZChlKX10aGlzLmZpcmUoXCJjb250ZW50dXBkYXRlXCIpfX0sX3VwZGF0ZVBvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQsZSxpO3RoaXMuX21hcCYmKGU9dGhpcy5fbWFwLmxhdExuZ1RvTGF5ZXJQb2ludCh0aGlzLl9sYXRsbmcpLHQ9bSh0aGlzLm9wdGlvbnMub2Zmc2V0KSxpPXRoaXMuX2dldEFuY2hvcigpLHRoaXMuX3pvb21BbmltYXRlZD9aKHRoaXMuX2NvbnRhaW5lcixlLmFkZChpKSk6dD10LmFkZChlKS5hZGQoaSksZT10aGlzLl9jb250YWluZXJCb3R0b209LXQueSxpPXRoaXMuX2NvbnRhaW5lckxlZnQ9LU1hdGgucm91bmQodGhpcy5fY29udGFpbmVyV2lkdGgvMikrdC54LHRoaXMuX2NvbnRhaW5lci5zdHlsZS5ib3R0b209ZStcInB4XCIsdGhpcy5fY29udGFpbmVyLnN0eWxlLmxlZnQ9aStcInB4XCIpfSxfZ2V0QW5jaG9yOmZ1bmN0aW9uKCl7cmV0dXJuWzAsMF19fSksQmk9KEEuaW5jbHVkZSh7X2luaXRPdmVybGF5OmZ1bmN0aW9uKHQsZSxpLG4pe3ZhciBvPWU7cmV0dXJuIG8gaW5zdGFuY2VvZiB0fHwobz1uZXcgdChuKS5zZXRDb250ZW50KGUpKSxpJiZvLnNldExhdExuZyhpKSxvfX0pLG8uaW5jbHVkZSh7X2luaXRPdmVybGF5OmZ1bmN0aW9uKHQsZSxpLG4pe3ZhciBvPWk7cmV0dXJuIG8gaW5zdGFuY2VvZiB0PyhjKG8sbiksby5fc291cmNlPXRoaXMpOihvPWUmJiFuP2U6bmV3IHQobix0aGlzKSkuc2V0Q29udGVudChpKSxvfX0pLEFpLmV4dGVuZCh7b3B0aW9uczp7cGFuZTpcInBvcHVwUGFuZVwiLG9mZnNldDpbMCw3XSxtYXhXaWR0aDozMDAsbWluV2lkdGg6NTAsbWF4SGVpZ2h0Om51bGwsYXV0b1BhbjohMCxhdXRvUGFuUGFkZGluZ1RvcExlZnQ6bnVsbCxhdXRvUGFuUGFkZGluZ0JvdHRvbVJpZ2h0Om51bGwsYXV0b1BhblBhZGRpbmc6WzUsNV0sa2VlcEluVmlldzohMSxjbG9zZUJ1dHRvbjohMCxhdXRvQ2xvc2U6ITAsY2xvc2VPbkVzY2FwZUtleTohMCxjbGFzc05hbWU6XCJcIn0sb3Blbk9uOmZ1bmN0aW9uKHQpe3JldHVybiEodD1hcmd1bWVudHMubGVuZ3RoP3Q6dGhpcy5fc291cmNlLl9tYXApLmhhc0xheWVyKHRoaXMpJiZ0Ll9wb3B1cCYmdC5fcG9wdXAub3B0aW9ucy5hdXRvQ2xvc2UmJnQucmVtb3ZlTGF5ZXIodC5fcG9wdXApLHQuX3BvcHVwPXRoaXMsQWkucHJvdG90eXBlLm9wZW5Pbi5jYWxsKHRoaXMsdCl9LG9uQWRkOmZ1bmN0aW9uKHQpe0FpLnByb3RvdHlwZS5vbkFkZC5jYWxsKHRoaXMsdCksdC5maXJlKFwicG9wdXBvcGVuXCIse3BvcHVwOnRoaXN9KSx0aGlzLl9zb3VyY2UmJih0aGlzLl9zb3VyY2UuZmlyZShcInBvcHVwb3BlblwiLHtwb3B1cDp0aGlzfSwhMCksdGhpcy5fc291cmNlIGluc3RhbmNlb2YgZml8fHRoaXMuX3NvdXJjZS5vbihcInByZWNsaWNrXCIsQWUpKX0sb25SZW1vdmU6ZnVuY3Rpb24odCl7QWkucHJvdG90eXBlLm9uUmVtb3ZlLmNhbGwodGhpcyx0KSx0LmZpcmUoXCJwb3B1cGNsb3NlXCIse3BvcHVwOnRoaXN9KSx0aGlzLl9zb3VyY2UmJih0aGlzLl9zb3VyY2UuZmlyZShcInBvcHVwY2xvc2VcIix7cG9wdXA6dGhpc30sITApLHRoaXMuX3NvdXJjZSBpbnN0YW5jZW9mIGZpfHx0aGlzLl9zb3VyY2Uub2ZmKFwicHJlY2xpY2tcIixBZSkpfSxnZXRFdmVudHM6ZnVuY3Rpb24oKXt2YXIgdD1BaS5wcm90b3R5cGUuZ2V0RXZlbnRzLmNhbGwodGhpcyk7cmV0dXJuKHZvaWQgMCE9PXRoaXMub3B0aW9ucy5jbG9zZU9uQ2xpY2s/dGhpcy5vcHRpb25zLmNsb3NlT25DbGljazp0aGlzLl9tYXAub3B0aW9ucy5jbG9zZVBvcHVwT25DbGljaykmJih0LnByZWNsaWNrPXRoaXMuY2xvc2UpLHRoaXMub3B0aW9ucy5rZWVwSW5WaWV3JiYodC5tb3ZlZW5kPXRoaXMuX2FkanVzdFBhbiksdH0sX2luaXRMYXlvdXQ6ZnVuY3Rpb24oKXt2YXIgdD1cImxlYWZsZXQtcG9wdXBcIixlPXRoaXMuX2NvbnRhaW5lcj1QKFwiZGl2XCIsdCtcIiBcIisodGhpcy5vcHRpb25zLmNsYXNzTmFtZXx8XCJcIikrXCIgbGVhZmxldC16b29tLWFuaW1hdGVkXCIpLGk9dGhpcy5fd3JhcHBlcj1QKFwiZGl2XCIsdCtcIi1jb250ZW50LXdyYXBwZXJcIixlKTt0aGlzLl9jb250ZW50Tm9kZT1QKFwiZGl2XCIsdCtcIi1jb250ZW50XCIsaSksSWUoZSksQmUodGhpcy5fY29udGVudE5vZGUpLFMoZSxcImNvbnRleHRtZW51XCIsQWUpLHRoaXMuX3RpcENvbnRhaW5lcj1QKFwiZGl2XCIsdCtcIi10aXAtY29udGFpbmVyXCIsZSksdGhpcy5fdGlwPVAoXCJkaXZcIix0K1wiLXRpcFwiLHRoaXMuX3RpcENvbnRhaW5lciksdGhpcy5vcHRpb25zLmNsb3NlQnV0dG9uJiYoKGk9dGhpcy5fY2xvc2VCdXR0b249UChcImFcIix0K1wiLWNsb3NlLWJ1dHRvblwiLGUpKS5zZXRBdHRyaWJ1dGUoXCJyb2xlXCIsXCJidXR0b25cIiksaS5zZXRBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsXCIsXCJDbG9zZSBwb3B1cFwiKSxpLmhyZWY9XCIjY2xvc2VcIixpLmlubmVySFRNTD0nPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JiMyMTU7PC9zcGFuPicsUyhpLFwiY2xpY2tcIixmdW5jdGlvbih0KXtPKHQpLHRoaXMuY2xvc2UoKX0sdGhpcykpfSxfdXBkYXRlTGF5b3V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fY29udGVudE5vZGUsZT10LnN0eWxlLGk9KGUud2lkdGg9XCJcIixlLndoaXRlU3BhY2U9XCJub3dyYXBcIix0Lm9mZnNldFdpZHRoKSxpPU1hdGgubWluKGksdGhpcy5vcHRpb25zLm1heFdpZHRoKSxpPShpPU1hdGgubWF4KGksdGhpcy5vcHRpb25zLm1pbldpZHRoKSxlLndpZHRoPWkrMStcInB4XCIsZS53aGl0ZVNwYWNlPVwiXCIsZS5oZWlnaHQ9XCJcIix0Lm9mZnNldEhlaWdodCksbj10aGlzLm9wdGlvbnMubWF4SGVpZ2h0LG89XCJsZWFmbGV0LXBvcHVwLXNjcm9sbGVkXCI7KG4mJm48aT8oZS5oZWlnaHQ9bitcInB4XCIsTSk6eikodCxvKSx0aGlzLl9jb250YWluZXJXaWR0aD10aGlzLl9jb250YWluZXIub2Zmc2V0V2lkdGh9LF9hbmltYXRlWm9vbTpmdW5jdGlvbih0KXt2YXIgdD10aGlzLl9tYXAuX2xhdExuZ1RvTmV3TGF5ZXJQb2ludCh0aGlzLl9sYXRsbmcsdC56b29tLHQuY2VudGVyKSxlPXRoaXMuX2dldEFuY2hvcigpO1oodGhpcy5fY29udGFpbmVyLHQuYWRkKGUpKX0sX2FkanVzdFBhbjpmdW5jdGlvbigpe3ZhciB0LGUsaSxuLG8scyxyLGE7dGhpcy5vcHRpb25zLmF1dG9QYW4mJih0aGlzLl9tYXAuX3BhbkFuaW0mJnRoaXMuX21hcC5fcGFuQW5pbS5zdG9wKCksdGhpcy5fYXV0b3Bhbm5pbmc/dGhpcy5fYXV0b3Bhbm5pbmc9ITE6KHQ9dGhpcy5fbWFwLGU9cGFyc2VJbnQocGUodGhpcy5fY29udGFpbmVyLFwibWFyZ2luQm90dG9tXCIpLDEwKXx8MCxlPXRoaXMuX2NvbnRhaW5lci5vZmZzZXRIZWlnaHQrZSxhPXRoaXMuX2NvbnRhaW5lcldpZHRoLChpPW5ldyBwKHRoaXMuX2NvbnRhaW5lckxlZnQsLWUtdGhpcy5fY29udGFpbmVyQm90dG9tKSkuX2FkZChQZSh0aGlzLl9jb250YWluZXIpKSxpPXQubGF5ZXJQb2ludFRvQ29udGFpbmVyUG9pbnQoaSksbz1tKHRoaXMub3B0aW9ucy5hdXRvUGFuUGFkZGluZyksbj1tKHRoaXMub3B0aW9ucy5hdXRvUGFuUGFkZGluZ1RvcExlZnR8fG8pLG89bSh0aGlzLm9wdGlvbnMuYXV0b1BhblBhZGRpbmdCb3R0b21SaWdodHx8bykscz10LmdldFNpemUoKSxyPTAsaS54K2Erby54PnMueCYmKHI9aS54K2Etcy54K28ueCksaS54LXItbi54PChhPTApJiYocj1pLngtbi54KSxpLnkrZStvLnk+cy55JiYoYT1pLnkrZS1zLnkrby55KSxpLnktYS1uLnk8MCYmKGE9aS55LW4ueSksKHJ8fGEpJiYodGhpcy5vcHRpb25zLmtlZXBJblZpZXcmJih0aGlzLl9hdXRvcGFubmluZz0hMCksdC5maXJlKFwiYXV0b3BhbnN0YXJ0XCIpLnBhbkJ5KFtyLGFdKSkpKX0sX2dldEFuY2hvcjpmdW5jdGlvbigpe3JldHVybiBtKHRoaXMuX3NvdXJjZSYmdGhpcy5fc291cmNlLl9nZXRQb3B1cEFuY2hvcj90aGlzLl9zb3VyY2UuX2dldFBvcHVwQW5jaG9yKCk6WzAsMF0pfX0pKSxJaT0oQS5tZXJnZU9wdGlvbnMoe2Nsb3NlUG9wdXBPbkNsaWNrOiEwfSksQS5pbmNsdWRlKHtvcGVuUG9wdXA6ZnVuY3Rpb24odCxlLGkpe3JldHVybiB0aGlzLl9pbml0T3ZlcmxheShCaSx0LGUsaSkub3Blbk9uKHRoaXMpLHRoaXN9LGNsb3NlUG9wdXA6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9YXJndW1lbnRzLmxlbmd0aD90OnRoaXMuX3BvcHVwKSYmdC5jbG9zZSgpLHRoaXN9fSksby5pbmNsdWRlKHtiaW5kUG9wdXA6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fcG9wdXA9dGhpcy5faW5pdE92ZXJsYXkoQmksdGhpcy5fcG9wdXAsdCxlKSx0aGlzLl9wb3B1cEhhbmRsZXJzQWRkZWR8fCh0aGlzLm9uKHtjbGljazp0aGlzLl9vcGVuUG9wdXAsa2V5cHJlc3M6dGhpcy5fb25LZXlQcmVzcyxyZW1vdmU6dGhpcy5jbG9zZVBvcHVwLG1vdmU6dGhpcy5fbW92ZVBvcHVwfSksdGhpcy5fcG9wdXBIYW5kbGVyc0FkZGVkPSEwKSx0aGlzfSx1bmJpbmRQb3B1cDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3B1cCYmKHRoaXMub2ZmKHtjbGljazp0aGlzLl9vcGVuUG9wdXAsa2V5cHJlc3M6dGhpcy5fb25LZXlQcmVzcyxyZW1vdmU6dGhpcy5jbG9zZVBvcHVwLG1vdmU6dGhpcy5fbW92ZVBvcHVwfSksdGhpcy5fcG9wdXBIYW5kbGVyc0FkZGVkPSExLHRoaXMuX3BvcHVwPW51bGwpLHRoaXN9LG9wZW5Qb3B1cDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcG9wdXAmJih0aGlzIGluc3RhbmNlb2YgY2l8fCh0aGlzLl9wb3B1cC5fc291cmNlPXRoaXMpLHRoaXMuX3BvcHVwLl9wcmVwYXJlT3Blbih0fHx0aGlzLl9sYXRsbmcpJiZ0aGlzLl9wb3B1cC5vcGVuT24odGhpcy5fbWFwKSksdGhpc30sY2xvc2VQb3B1cDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3B1cCYmdGhpcy5fcG9wdXAuY2xvc2UoKSx0aGlzfSx0b2dnbGVQb3B1cDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3B1cCYmdGhpcy5fcG9wdXAudG9nZ2xlKHRoaXMpLHRoaXN9LGlzUG9wdXBPcGVuOmZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9wb3B1cCYmdGhpcy5fcG9wdXAuaXNPcGVuKCl9LHNldFBvcHVwQ29udGVudDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcG9wdXAmJnRoaXMuX3BvcHVwLnNldENvbnRlbnQodCksdGhpc30sZ2V0UG9wdXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9wdXB9LF9vcGVuUG9wdXA6ZnVuY3Rpb24odCl7dmFyIGU7dGhpcy5fcG9wdXAmJnRoaXMuX21hcCYmKFJlKHQpLGU9dC5sYXllcnx8dC50YXJnZXQsdGhpcy5fcG9wdXAuX3NvdXJjZSE9PWV8fGUgaW5zdGFuY2VvZiBmaT8odGhpcy5fcG9wdXAuX3NvdXJjZT1lLHRoaXMub3BlblBvcHVwKHQubGF0bG5nKSk6dGhpcy5fbWFwLmhhc0xheWVyKHRoaXMuX3BvcHVwKT90aGlzLmNsb3NlUG9wdXAoKTp0aGlzLm9wZW5Qb3B1cCh0LmxhdGxuZykpfSxfbW92ZVBvcHVwOmZ1bmN0aW9uKHQpe3RoaXMuX3BvcHVwLnNldExhdExuZyh0LmxhdGxuZyl9LF9vbktleVByZXNzOmZ1bmN0aW9uKHQpezEzPT09dC5vcmlnaW5hbEV2ZW50LmtleUNvZGUmJnRoaXMuX29wZW5Qb3B1cCh0KX19KSxBaS5leHRlbmQoe29wdGlvbnM6e3BhbmU6XCJ0b29sdGlwUGFuZVwiLG9mZnNldDpbMCwwXSxkaXJlY3Rpb246XCJhdXRvXCIscGVybWFuZW50OiExLHN0aWNreTohMSxvcGFjaXR5Oi45fSxvbkFkZDpmdW5jdGlvbih0KXtBaS5wcm90b3R5cGUub25BZGQuY2FsbCh0aGlzLHQpLHRoaXMuc2V0T3BhY2l0eSh0aGlzLm9wdGlvbnMub3BhY2l0eSksdC5maXJlKFwidG9vbHRpcG9wZW5cIix7dG9vbHRpcDp0aGlzfSksdGhpcy5fc291cmNlJiYodGhpcy5hZGRFdmVudFBhcmVudCh0aGlzLl9zb3VyY2UpLHRoaXMuX3NvdXJjZS5maXJlKFwidG9vbHRpcG9wZW5cIix7dG9vbHRpcDp0aGlzfSwhMCkpfSxvblJlbW92ZTpmdW5jdGlvbih0KXtBaS5wcm90b3R5cGUub25SZW1vdmUuY2FsbCh0aGlzLHQpLHQuZmlyZShcInRvb2x0aXBjbG9zZVwiLHt0b29sdGlwOnRoaXN9KSx0aGlzLl9zb3VyY2UmJih0aGlzLnJlbW92ZUV2ZW50UGFyZW50KHRoaXMuX3NvdXJjZSksdGhpcy5fc291cmNlLmZpcmUoXCJ0b29sdGlwY2xvc2VcIix7dG9vbHRpcDp0aGlzfSwhMCkpfSxnZXRFdmVudHM6ZnVuY3Rpb24oKXt2YXIgdD1BaS5wcm90b3R5cGUuZ2V0RXZlbnRzLmNhbGwodGhpcyk7cmV0dXJuIHRoaXMub3B0aW9ucy5wZXJtYW5lbnR8fCh0LnByZWNsaWNrPXRoaXMuY2xvc2UpLHR9LF9pbml0TGF5b3V0OmZ1bmN0aW9uKCl7dmFyIHQ9XCJsZWFmbGV0LXRvb2x0aXAgXCIrKHRoaXMub3B0aW9ucy5jbGFzc05hbWV8fFwiXCIpK1wiIGxlYWZsZXQtem9vbS1cIisodGhpcy5fem9vbUFuaW1hdGVkP1wiYW5pbWF0ZWRcIjpcImhpZGVcIik7dGhpcy5fY29udGVudE5vZGU9dGhpcy5fY29udGFpbmVyPVAoXCJkaXZcIix0KSx0aGlzLl9jb250YWluZXIuc2V0QXR0cmlidXRlKFwicm9sZVwiLFwidG9vbHRpcFwiKSx0aGlzLl9jb250YWluZXIuc2V0QXR0cmlidXRlKFwiaWRcIixcImxlYWZsZXQtdG9vbHRpcC1cIitoKHRoaXMpKX0sX3VwZGF0ZUxheW91dDpmdW5jdGlvbigpe30sX2FkanVzdFBhbjpmdW5jdGlvbigpe30sX3NldFBvc2l0aW9uOmZ1bmN0aW9uKHQpe3ZhciBlLGk9dGhpcy5fbWFwLG49dGhpcy5fY29udGFpbmVyLG89aS5sYXRMbmdUb0NvbnRhaW5lclBvaW50KGkuZ2V0Q2VudGVyKCkpLGk9aS5sYXllclBvaW50VG9Db250YWluZXJQb2ludCh0KSxzPXRoaXMub3B0aW9ucy5kaXJlY3Rpb24scj1uLm9mZnNldFdpZHRoLGE9bi5vZmZzZXRIZWlnaHQsaD1tKHRoaXMub3B0aW9ucy5vZmZzZXQpLGw9dGhpcy5fZ2V0QW5jaG9yKCksaT1cInRvcFwiPT09cz8oZT1yLzIsYSk6XCJib3R0b21cIj09PXM/KGU9ci8yLDApOihlPVwiY2VudGVyXCI9PT1zP3IvMjpcInJpZ2h0XCI9PT1zPzA6XCJsZWZ0XCI9PT1zP3I6aS54PG8ueD8ocz1cInJpZ2h0XCIsMCk6KHM9XCJsZWZ0XCIscisyKihoLngrbC54KSksYS8yKTt0PXQuc3VidHJhY3QobShlLGksITApKS5hZGQoaCkuYWRkKGwpLHoobixcImxlYWZsZXQtdG9vbHRpcC1yaWdodFwiKSx6KG4sXCJsZWFmbGV0LXRvb2x0aXAtbGVmdFwiKSx6KG4sXCJsZWFmbGV0LXRvb2x0aXAtdG9wXCIpLHoobixcImxlYWZsZXQtdG9vbHRpcC1ib3R0b21cIiksTShuLFwibGVhZmxldC10b29sdGlwLVwiK3MpLFoobix0KX0sX3VwZGF0ZVBvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwLmxhdExuZ1RvTGF5ZXJQb2ludCh0aGlzLl9sYXRsbmcpO3RoaXMuX3NldFBvc2l0aW9uKHQpfSxzZXRPcGFjaXR5OmZ1bmN0aW9uKHQpe3RoaXMub3B0aW9ucy5vcGFjaXR5PXQsdGhpcy5fY29udGFpbmVyJiZDKHRoaXMuX2NvbnRhaW5lcix0KX0sX2FuaW1hdGVab29tOmZ1bmN0aW9uKHQpe3Q9dGhpcy5fbWFwLl9sYXRMbmdUb05ld0xheWVyUG9pbnQodGhpcy5fbGF0bG5nLHQuem9vbSx0LmNlbnRlcik7dGhpcy5fc2V0UG9zaXRpb24odCl9LF9nZXRBbmNob3I6ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLl9zb3VyY2UmJnRoaXMuX3NvdXJjZS5fZ2V0VG9vbHRpcEFuY2hvciYmIXRoaXMub3B0aW9ucy5zdGlja3k/dGhpcy5fc291cmNlLl9nZXRUb29sdGlwQW5jaG9yKCk6WzAsMF0pfX0pKSxSaT0oQS5pbmNsdWRlKHtvcGVuVG9vbHRpcDpmdW5jdGlvbih0LGUsaSl7cmV0dXJuIHRoaXMuX2luaXRPdmVybGF5KElpLHQsZSxpKS5vcGVuT24odGhpcyksdGhpc30sY2xvc2VUb29sdGlwOmZ1bmN0aW9uKHQpe3JldHVybiB0LmNsb3NlKCksdGhpc319KSxvLmluY2x1ZGUoe2JpbmRUb29sdGlwOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3Rvb2x0aXAmJnRoaXMuaXNUb29sdGlwT3BlbigpJiZ0aGlzLnVuYmluZFRvb2x0aXAoKSx0aGlzLl90b29sdGlwPXRoaXMuX2luaXRPdmVybGF5KElpLHRoaXMuX3Rvb2x0aXAsdCxlKSx0aGlzLl9pbml0VG9vbHRpcEludGVyYWN0aW9ucygpLHRoaXMuX3Rvb2x0aXAub3B0aW9ucy5wZXJtYW5lbnQmJnRoaXMuX21hcCYmdGhpcy5fbWFwLmhhc0xheWVyKHRoaXMpJiZ0aGlzLm9wZW5Ub29sdGlwKCksdGhpc30sdW5iaW5kVG9vbHRpcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90b29sdGlwJiYodGhpcy5faW5pdFRvb2x0aXBJbnRlcmFjdGlvbnMoITApLHRoaXMuY2xvc2VUb29sdGlwKCksdGhpcy5fdG9vbHRpcD1udWxsKSx0aGlzfSxfaW5pdFRvb2x0aXBJbnRlcmFjdGlvbnM6ZnVuY3Rpb24odCl7dmFyIGUsaTshdCYmdGhpcy5fdG9vbHRpcEhhbmRsZXJzQWRkZWR8fChlPXQ/XCJvZmZcIjpcIm9uXCIsaT17cmVtb3ZlOnRoaXMuY2xvc2VUb29sdGlwLG1vdmU6dGhpcy5fbW92ZVRvb2x0aXB9LHRoaXMuX3Rvb2x0aXAub3B0aW9ucy5wZXJtYW5lbnQ/aS5hZGQ9dGhpcy5fb3BlblRvb2x0aXA6KGkubW91c2VvdmVyPXRoaXMuX29wZW5Ub29sdGlwLGkubW91c2VvdXQ9dGhpcy5jbG9zZVRvb2x0aXAsaS5jbGljaz10aGlzLl9vcGVuVG9vbHRpcCx0aGlzLl9tYXA/dGhpcy5fYWRkRm9jdXNMaXN0ZW5lcnMoKTppLmFkZD10aGlzLl9hZGRGb2N1c0xpc3RlbmVycyksdGhpcy5fdG9vbHRpcC5vcHRpb25zLnN0aWNreSYmKGkubW91c2Vtb3ZlPXRoaXMuX21vdmVUb29sdGlwKSx0aGlzW2VdKGkpLHRoaXMuX3Rvb2x0aXBIYW5kbGVyc0FkZGVkPSF0KX0sb3BlblRvb2x0aXA6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3Rvb2x0aXAmJih0aGlzIGluc3RhbmNlb2YgY2l8fCh0aGlzLl90b29sdGlwLl9zb3VyY2U9dGhpcyksdGhpcy5fdG9vbHRpcC5fcHJlcGFyZU9wZW4odCkmJih0aGlzLl90b29sdGlwLm9wZW5Pbih0aGlzLl9tYXApLHRoaXMuZ2V0RWxlbWVudD90aGlzLl9zZXRBcmlhRGVzY3JpYmVkQnlPbkxheWVyKHRoaXMpOnRoaXMuZWFjaExheWVyJiZ0aGlzLmVhY2hMYXllcih0aGlzLl9zZXRBcmlhRGVzY3JpYmVkQnlPbkxheWVyLHRoaXMpKSksdGhpc30sY2xvc2VUb29sdGlwOmZ1bmN0aW9uKCl7aWYodGhpcy5fdG9vbHRpcClyZXR1cm4gdGhpcy5fdG9vbHRpcC5jbG9zZSgpfSx0b2dnbGVUb29sdGlwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Rvb2x0aXAmJnRoaXMuX3Rvb2x0aXAudG9nZ2xlKHRoaXMpLHRoaXN9LGlzVG9vbHRpcE9wZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdG9vbHRpcC5pc09wZW4oKX0sc2V0VG9vbHRpcENvbnRlbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3Rvb2x0aXAmJnRoaXMuX3Rvb2x0aXAuc2V0Q29udGVudCh0KSx0aGlzfSxnZXRUb29sdGlwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Rvb2x0aXB9LF9hZGRGb2N1c0xpc3RlbmVyczpmdW5jdGlvbigpe3RoaXMuZ2V0RWxlbWVudD90aGlzLl9hZGRGb2N1c0xpc3RlbmVyc09uTGF5ZXIodGhpcyk6dGhpcy5lYWNoTGF5ZXImJnRoaXMuZWFjaExheWVyKHRoaXMuX2FkZEZvY3VzTGlzdGVuZXJzT25MYXllcix0aGlzKX0sX2FkZEZvY3VzTGlzdGVuZXJzT25MYXllcjpmdW5jdGlvbih0KXt2YXIgZT1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0LmdldEVsZW1lbnQmJnQuZ2V0RWxlbWVudCgpO2UmJihTKGUsXCJmb2N1c1wiLGZ1bmN0aW9uKCl7dGhpcy5fdG9vbHRpcC5fc291cmNlPXQsdGhpcy5vcGVuVG9vbHRpcCgpfSx0aGlzKSxTKGUsXCJibHVyXCIsdGhpcy5jbG9zZVRvb2x0aXAsdGhpcykpfSxfc2V0QXJpYURlc2NyaWJlZEJ5T25MYXllcjpmdW5jdGlvbih0KXt0PVwiZnVuY3Rpb25cIj09dHlwZW9mIHQuZ2V0RWxlbWVudCYmdC5nZXRFbGVtZW50KCk7dCYmdC5zZXRBdHRyaWJ1dGUoXCJhcmlhLWRlc2NyaWJlZGJ5XCIsdGhpcy5fdG9vbHRpcC5fY29udGFpbmVyLmlkKX0sX29wZW5Ub29sdGlwOmZ1bmN0aW9uKHQpe3ZhciBlO3RoaXMuX3Rvb2x0aXAmJnRoaXMuX21hcCYmKHRoaXMuX21hcC5kcmFnZ2luZyYmdGhpcy5fbWFwLmRyYWdnaW5nLm1vdmluZygpJiYhdGhpcy5fb3Blbk9uY2VGbGFnPyh0aGlzLl9vcGVuT25jZUZsYWc9ITAsKGU9dGhpcykuX21hcC5vbmNlKFwibW92ZWVuZFwiLGZ1bmN0aW9uKCl7ZS5fb3Blbk9uY2VGbGFnPSExLGUuX29wZW5Ub29sdGlwKHQpfSkpOih0aGlzLl90b29sdGlwLl9zb3VyY2U9dC5sYXllcnx8dC50YXJnZX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ZhciB0O3JldHVybiB0aGlzLl9tYXAmJih0aGlzLl9yZW1vdmVBbGxUaWxlcygpLCh0PXRoaXMuX2NsYW1wWm9vbSh0aGlzLl9tYXAuZ2V0Wm9vbSgpKSkhPT10aGlzLl90aWxlWm9vbSYmKHRoaXMuX3RpbGVab29tPXQsdGhpcy5fdXBkYXRlTGV2ZWxzKCkpLHRoaXMuX3VwZGF0ZSgpKSx0aGlzfSxnZXRFdmVudHM6ZnVuY3Rpb24oKXt2YXIgdD17dmlld3ByZXJlc2V0OnRoaXMuX2ludmFsaWRhdGVBbGwsdmlld3Jlc2V0OnRoaXMuX3Jlc2V0Vmlldyx6b29tOnRoaXMuX3Jlc2V0Vmlldyxtb3ZlZW5kOnRoaXMuX29uTW92ZUVuZH07cmV0dXJuIHRoaXMub3B0aW9ucy51cGRhdGVXaGVuSWRsZXx8KHRoaXMuX29uTW92ZXx8KHRoaXMuX29uTW92ZT1qKHRoaXMuX29uTW92ZUVuZCx0aGlzLm9wdGlvbnMudXBkYXRlSW50ZXJ2YWwsdGhpcykpLHQubW92ZT10aGlzLl9vbk1vdmUpLHRoaXMuX3pvb21BbmltYXRlZCYmKHQuem9vbWFuaW09dGhpcy5fYW5pbWF0ZVpvb20pLHR9LGNyZWF0ZVRpbGU6ZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKX0sZ2V0VGLSDkZVNpemU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMudGLSDkZVNpemU7cmV0dXJuIHQgaW5zdGFuY2VvZiBwP3Q6bmV3IHAodCx0KX0sX3VwZGF0ZVpJbmRleDpmdW5jdGlvbigpe3RoaXMuX2NvbnRhaW5lciYmdm9pZCAwIT09dGhpcy5vcHRpb25zLnpJbmRleCYmbnVsbCE9PXRoaXMub3B0aW9ucy56SW5kZXgmJih0aGlzLl9jb250YWluZXIuc3R5bGUuekluZGV4PXRoaXMub3B0aW9ucy56SW5kZXgpfSxfc2V0QXV0b1pJbmRleDpmdW5jdGlvbih0KXtmb3IodmFyIGUsaT10aGlzLmdldFBhbmUoKS5jaGLSDkZHJlbixuPS10KC0xLzAsMS8wKSxvPTAscz1pLmxlbmd0aDtvPHM7bysrKWU9aVtvXS5zdHlsZS56SW5kZXgsaVtvXSE9PXRoaXMuX2NvbnRhaW5lciYmZSYmKG49dChuLCtlKSk7aXNGaW5pdGUobikmJih0aGlzLm9wdGlvbnMuekluZGV4PW4rdCgtMSwxKSx0aGlzLl91cGRhdGVaSW5kZXgoKSl9LF91cGRhdGVPcGFjaXR5OmZ1bmN0aW9uKCl7aWYodGhpcy5fbWFwJiYhYi5pZWx0OSl7Qyh0aGlzLl9jb250YWluZXIsdGhpcy5vcHRpb25zLm9wYWNpdHkpO3ZhciB0LGU9K25ldyBEYXRlLGk9ITEsbj0hMTtmb3IodCBpbiB0aGlzLl90aWxlcyl7dmFyIG8scz10aGlzLl90aWxlc1t0XTtzLmN1cnJlbnQmJnMubG9hZGVkJiYobz1NYXRoLm1pbigxLChlLXMubG9hZGVkKS8yMDApLEMocy5lbCxvKSxvPDE/aT0hMDoocy5hY3RpdmU/bj0hMDp0aGlzLl9vbk9wYXF1ZVRpbGUocykscy5hY3RpdmU9ITApKX1uJiYhdGhpcy5fbm9QcnVuZSYmdGhpcy5fcHJ1bmVUaWxlcygpLGkmJihyKHRoaXMuX2ZhZGVGcmFtZSksdGhpcy5fZmFkZUZyYW1lPXgodGhpcy5fdXBkYXRlT3BhY2l0eSx0aGlzKSl9fSxfb25PcGFxdWVUaWxlOnUsX2luaXRDb250YWluZXI6ZnVuY3Rpb24oKXt0aGlzLl9jb250YWluZXJ8fCh0aGlzLl9jb250YWluZXI9UChcImRpdlwiLFwibGVhZmxldC1sYXllciBcIisodGhpcy5vcHRpb25zLmNsYXNzTmFtZXx8XCJcIikpLHRoaXMuX3VwZGF0ZVpJbmRleCgpLHRoaXMub3B0aW9ucy5vcGFjaXR5PDEmJnRoaXMuX3VwZGF0ZU9wYWNpdHkoKSx0aGlzLmdldFBhbmUoKS5hcHBlbmRDaGLSDkZCh0aGlzLl9jb250YWluZXIpKX0sX3VwZGF0ZUxldmVsczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3RpbGVab29tLGU9dGhpcy5vcHRpb25zLm1heFpvb207aWYodm9pZCAwIT09dCl7Zm9yKHZhciBpIGluIHRoaXMuX2xldmVscylpPU51bWJlcihpKSx0aGlzLl9sZXZlbHNbaV0uZWwuY2hpbGRyZW4ubGVuZ3RofHxpPT09dD8odGhpcy5fbGV2ZWxzW2ldLmVsLnN0eWxlLnpJbmRleD1lLU1hdGguYWJzKHQtaSksdGhpcy5fb25VcGRhdGVMZXZlbChpKSk6KFQodGhpcy5fbGV2ZWxzW2ldLmVsKSx0aGlzLl9yZW1vdmVUaWxlc0F0Wm9vbShpKSx0aGlzLl9vblJlbW92ZUxldmVsKGkpLGRlbGV0ZSB0aGlzLl9sZXZlbHNbaV0pO3ZhciBuPXRoaXMuX2xldmVsc1t0XSxvPXRoaXMuX21hcDtyZXR1cm4gbnx8KChuPXRoaXMuX2xldmVsc1t0XT17fSkuZWw9UChcImRpdlwiLFwibGVhZmxldC10aWxlLWNvbnRhaW5lciBsZWFmbGV0LXpvb20tYW5pbWF0ZWRcIix0aGlzLl9jb250YWluZXIpLG4uZWwuc3R5bGUuekluZGV4PWUsbi5vcmlnaW49by5wcm9qZWN0KG8udW5wcm9qZWN0KG8uZ2V0UGl4ZWxPcmlnaW4oKSksdCkucm91bmQoKSxuLnpvb209dCx0aGlzLl9zZXRab29tVHJhbnNmb3JtKG4sby5nZXRDZW50ZXIoKSxvLmdldFpvb20oKSksdShuLmVsLm9mZnNldFdpZHRoKSx0aGlzLl9vbkNyZWF0ZUxldmVsKG4pKSx0aGlzLl9sZXZlbD1ufX0sX29uVXBkYXRlTGV2ZWw6dSxfb25SZW1vdmVMZXZlbDp1LF9vbkNyZWF0ZUxldmVsOnUsX3BydW5lVGLSDkZXM6ZnVuY3Rpb24oKXtpZih0aGlzLl9tYXApe3ZhciB0LGUsaSxuPXRoaXMuX21hcC5nZXRab29tKCk7aWYobj50aGlzLm9wdGlvbnMubWF4Wm9vbXx8bjx0aGlzLm9wdGlvbnMubWluWm9vbSl0aGlzLl9yZW1vdmVBbGxUaWxlcygpO2Vsc2V7Zm9yKHQgaW4gdGhpcy5fdGLSDkZXMpKGk9dGhpcy5fdGLSDkZXNbdF0pLnJldGFpbj1pLmN1cnJlbnQ7Zm9yKHQgaW4gdGhpcy5fdGLSDkZXMpKGk9dGhpcy5fdGLSDkZXNbdF0pLmN1cnJlbnQmJiFpLmFjdGl2ZSYmKGU9aS5jb29yZHMsdGhpcy5fcmV0YWluUGFyZW50KGUueCxlLnksZS56LGUuei01KXx8dGhpcy5fcmV0YWluQ2hpbGRyZW4oZS54LGUueSxlLnosZS56KzIpKTtmb3IodCBpbiB0aGlzLl90aWxlcyl0aGlzLl90aWxlc1t0XS5yZXRhaW58fHRoaXMuX3JlbW92ZVRpbGUodCl9fX0sX3JlbW92ZVRpbGVzQXRab29tOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0aGlzLl90aWxlcyl0aGlzLl90aWxlc1tlXS5jb29yZHMuej09PXQmJnRoaXMuX3JlbW92ZVRpbGUoZSl9LF9yZW1vdmVBbGxUaWxlczpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLl90aWxlcyl0aGlzLl9yZW1vdmVUaWxlKHQpfSxfaW52YWxpZGF0ZUFsbDpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLl9sZXZlbHMpVCh0aGlzLl9sZXZlbHNbdF0uZWwpLHRoaXMuX29uUmVtb3ZlTGV2ZWwoTnVtYmVyKHQpKSxkZWxldGUgdGhpcy5fbGV2ZWxzW3RdO3RoaXMuX3JlbW92ZUFsbFRpbGVzKCksdGhpcy5fdGLSDkZVpvb209dm9pZCAwfSxfcmV0YWluUGFyZW50OmZ1bmN0aW9uKHQsZSxpLG4pe3ZhciB0PU1hdGguZmxvb3IodC8yKSxlPU1hdGguZmxvb3IoZS8yKSxpPWktMSxvPW5ldyBwKCt0LCtlKSxvPShvLno9aSx0aGlzLl90aWxlQ29vcmRzVG9LZXkobykpLG89dGhpcy5fdGLSDkZXNbb107cmV0dXJuIG8mJm8uYWN0aXZlP28ucmV0YWluPSEwOihvJiZvLmxvYWRlZCYmKG8ucmV0YWluPSEwKSxuPGkmJnRoaXMuX3JldGFpblBhcmVudCh0LGUsaSxuKSl9LF9yZXRhaW5DaGLSDkZHJlbjpmdW5jdGlvbih0LGUsaSxuKXtmb3IodmFyIG89Mip0O288Mip0KzI7bysrKWZvcih2YXIgcz0yKmU7czwyKmUrMjtzKyspe3ZhciByPW5ldyBwKG8scykscj0oci56PWkrMSx0aGlzLl90aWxlQ29vcmRzVG9LZXkocikpLHI9dGhpcy5fdGLSDkZXNbcl07ciYmci5hY3RpdmU/ci5yZXRhaW49ITA6KHImJnIubG9hZGVkJiYoci5yZXRhaW49ITApLGkrMTxuJiZ0aGlzLl9yZXRhaW5DaGLSDkZHJlbihvLHMsaSsxLG4pKX19LF9yZXNldFZpZXc6ZnVuY3Rpb24odCl7dD10JiYodC5waW5jaHx8dC5mbHlUbyk7dGhpcy5fc2V0Vmlldyh0aGlzLl9tYXAuZ2V0Q2VudGVyKCksdGhpcy5fbWFwLmdldFpvb20oKSx0LHQpfSxfYW5pbWF0ZVpvb206ZnVuY3Rpb24odCl7dGhpcy5fc2V0Vmlldyh0LmNlbnRlcix0Lnpvb20sITAsdC5ub1VwZGF0ZSl9LF9jbGFtcFpvb206ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5vcHRpb25zO3JldHVybiB2b2lkIDAhPT1lLm1pbk5hdGl2ZVpvb20mJnQ8ZS5taW5OYXRpdmVab29tP2UubWluTmF0aXZlWm9vbTp2b2lkIDAhPT1lLm1heE5hdGl2ZVpvb20mJmUubWF4TmF0aXZlWm9vbTx0P2UubWF4TmF0aXZlWm9vbTp0fSxfc2V0VmlldzpmdW5jdGlvbih0LGUsaSxuKXt2YXIgbz1NYXRoLnJvdW5kKGUpLG89dm9pZCAwIT09dGhpcy5vcHRpb25zLm1heFpvb20mJm8+dGhpcy5vcHRpb25zLm1heFpvb218fHZvaWQgMCE9PXRoaXMub3B0aW9ucy5taW5ab29tJiZvPHRoaXMub3B0aW9ucy5taW5ab29tP3ZvaWQgMDp0aGlzLl9jbGFtcFpvb20obykscz10aGlzLm9wdGlvbnMudXBkYXRlV2hlblpvb21pbmcmJm8hPT10aGlzLl90aWxlWm9vbTtuJiYhc3x8KHRoaXMuX3RpbGVab29tPW8sdGhpcy5fYWJvcnRMb2FkaW5nJiZ0aGlzLl9hYm9ydExvYWRpbmcoKSx0aGlzLl91cGRhdGVMZXZlbHMoKSx0aGlzLl9yZXNldEdyaWQoKSx2b2lkIDAhPT1vJiZ0aGlzLl91cGRhdGUodCksaXx8dGhpcy5fcHJ1bmVUaWxlcygpLHRoaXMuX25vUHJ1bmU9ISFpKSx0aGlzLl9zZXRab29tVHJhbnNmb3Jtcyh0LGUpfSxfc2V0Wm9vbVRyYW5zZm9ybX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IHU9by5taW4ueDt1PD1vLm1heC54O3UrKyl7dmFyIGMsZD1uZXcgcCh1LGwpO2Quej10aGlzLl90aWxlWm9vbSx0aGlzLl9pc1ZhbGlkVGLSDkZShkKSYmKChjPXRoaXMuX3RpbGVzW3RoaXMuX3RpbGVDb29yZHNUb0tleShkKV0pP2MuY3VycmVudD0hMDpyLnB1c2goZCkpfWlmKHIuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LmRpc3RhbmNlVG8ocyktZS5kaXN0YW5jZVRvKHMpfSksMCE9PXIubGVuZ3RoKXt0aGlzLl9sb2FkaW5nfHwodGhpcy5fbG9hZGluZz0hMCx0aGlzLmZpcmUoXCJsb2FkaW5nXCIpKTtmb3IodmFyIF89ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLHU9MDt1PHIubGVuZ3RoO3UrKyl0aGlzLl9hZGRUaWxlKHJbdV0sXyk7dGhpcy5fbGV2ZWwuZWwuYXBwZW5kQ2hpbGQoXyl9fX19fSxfaXNWYWxpZFRpbGU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbWFwLm9wdGlvbnMuY3JzO2lmKCFlLmluZmluaXRlKXt2YXIgaT10aGlzLl9nbG9iYWxUaWxlUmFuZ2U7aWYoIWUud3JhcExuZyYmKHQueDxpLm1pbi54fHx0Lng+aS5tYXgueCl8fCFlLndyYXBMYXQmJih0Lnk8aS5taW4ueXx8dC55PmkubWF4LnkpKXJldHVybiExfXJldHVybiF0aGlzLm9wdGlvbnMuYm91bmRzfHwoZT10aGlzLl90aWxlQ29vcmRzVG9Cb3VuZHModCksZyh0aGlzLm9wdGlvbnMuYm91bmRzKS5vdmVybGFwcyhlKSl9LF9rZXlUb0JvdW5kczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdGLSDkZUNvb3Jkc1RvQm91bmRzKHRoaXMuX2tleVRvVGLSDkZUNvb3Jkcyh0KSl9LF90aWxlQ29vcmRzVG9Od1NlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX21hcCxpPXRoaXMuZ2V0VGLSDkZVNpemUoKSxuPXQuc2NhbGVCeShpKSxpPW4uYWRkKGkpO3JldHVybltlLnVucHJvamVjdChuLHQueiksZS51bnByb2plY3QoaSx0LnopXX0sX3RpbGVDb29yZHNUb0JvdW5kczpmdW5jdGlvbih0KXt0PXRoaXMuX3RpbGVDb29yZHNUb053U2UodCksdD1uZXcgcyh0WzBdLHRbMV0pO3JldHVybiB0PXRoaXMub3B0aW9ucy5ub1dyYXA/dDp0aGlzLl9tYXAud3JhcExhdExuZ0JvdW5kcyh0KX0sX3RpbGVDb29yZHNUb0tleTpmdW5jdGlvbih0KXtyZXR1cm4gdC54K1wiOlwiK3QueStcIjpcIit0Lnp9LF9rZXlUb1RpbGVDb29yZHM6ZnVuY3Rpb24odCl7dmFyIHQ9dC5zcGxpdChcIjpcIiksZT1uZXcgcCgrdFswXSwrdFsxXSk7cmV0dXJuIGUuej0rdFsyXSxlfSxfcmVtb3ZlVGLSDkZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl90aWxlc1t0XTtlJiYoVChlLmVsKSxkZWxldGUgdGhpcy5fdGLSDkZXNbdF0sdGhpcy5maXJlKFwidGLSDkZXVubG9hZFwiLHt0aWxlOmUuZWwsY29vcmRzOnRoaXMuX2tleVRvVGLSDkZUNvb3Jkcyh0KX0pKX0sX2luaXRUaWxlOmZ1bmN0aW9uKHQpe00odCxcImxlYWZsZXQtdGLSDkZVwiKTt2YXIgZT10aGlzLmdldFRpbGVTaXplKCk7dC5zdHlsZS53aWR0aD1lLngrXCJweFwiLHQuc3R5bGUuaGVpZ2h0PWUueStcInB4XCIsdC5vbnNlbGVjdHN0YXJ0PXUsdC5vbm1vdXNlbW92ZT11LGIuaWVsdDkmJnRoaXMub3B0aW9ucy5vcGFjaXR5PDEmJkModCx0aGlzLm9wdGlvbnMub3BhY2l0eSl9LF9hZGRUaWxlOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5fZ2V0VGLSDkZVBvcyh0KSxuPXRoaXMuX3RpbGVDb29yZHNUb0tleSh0KSxvPXRoaXMuY3JlYXRlVGLSDkZSh0aGlzLl93cmFwQ29vcmRzKHQpLGEodGhpcy5fdGLSDkZVJlYWR5LHRoaXMsdCkpO3RoaXMuX2luaXRUaWxlKG8pLHRoaXMuY3JlYXRlVGLSDkZS5sZW5ndGg8MiYmeChhKHRoaXMuX3RpbGVSZWFkeSx0aGlzLHQsbnVsbCxvKSksWihvLGkpLHRoaXMuX3RpbGVzW25dPXtlbDpvLGNvb3Jkczp0LGN1cnJlbnQ6ITB9LGUuYXBwZW5kQ2hpbGQobyksdGhpcy5maXJlKFwidGLSDkZWxvYWRzdGFydFwiLHt0aWxlOm8sY29vcmRzOnR9KX0sX3RpbGVSZWFkeTpmdW5jdGlvbih0LGUsaSl7ZSYmdGhpcy5maXJlKFwidGLSDkZWVycm9yXCIse2Vycm9yOmUsdGLSDkZTppLGNvb3Jkczp0fSk7dmFyIG49dGhpcy5fdGLSDkZUNvb3Jkc1RvS2V5KHQpOyhpPXRoaXMuX3RpbGVzW25dKSYmKGkubG9hZGVkPStuZXcgRGF0ZSx0aGlzLl9tYXAuX2ZhZGVBbmltYXRlZD8oQyhpLmVsLDApLHIodGhpcy5fZmFkZUZyYW1lKSx0aGlzLl9mYWRlRnJhbWU9eCh0aGlzLl91cGRhdGVPcGFjaXR5LHRoaXMpKTooaS5hY3RpdmU9ITAsdGhpcy5fcHJ1bmVUaWxlcygpKSxlfHwoTShpLmVsLFwibGVhZmxldC10aWxlLWxvYWRlZFwiKSx0aGlzLmZpcmUoXCJ0aWxlbG9hZFwiLHt0aWxlOmkuZWwsY29vcmRzOnR9KSksdGhpcy5fbm9UaWxlc1RvTG9hZCgpJiYodGhpcy5fbG9hZGluZz0hMSx0aGlzLmZpcmUoXCJsb2FkXCIpLGIuaWVsdDl8fCF0aGlzLl9tYXAuX2ZhZGVBbmltYXRlZD94KHRoaXMuX3BydW5lVGLSDkZXMsdGhpcyk6c2V0VGltZW91dChhKHRoaXMuX3BydW5lVGLSDkZXMsdGhpcyksMjUwKSkpfSxfZ2V0VGLSDkZVBvczpmdW5jdGlvbih0KXtyZXR1cm4gdC5zY2FsZUJ5KHRoaXMuZ2V0VGLSDkZVNpemUoKSkuc3VidHJhY3QodGhpcy5fbGV2ZWwub3JpZ2luKX0sX3dyYXBDb29yZHM6ZnVuY3Rpb24odCl7dmFyIGU9bmV3IHAodGhpcy5fd3JhcFg/SCh0LngsdGhpcy5fd3JhcFgpOnQueCx0aGlzLl93cmFwWT9IKHQueSx0aGlzLl93cmFwWSk6dC55KTtyZXR1cm4gZS56PXQueixlfSxfcHhCb3VuZHNUb1RpbGVSYW5nZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmdldFRpbGVTaXplKCk7cmV0dXJuIG5ldyBmKHQubWluLnVuc2NhbGVCeShlKS5mbG9vcigpLHQubWF4LnVuc2NhbGVCeShlKS5jZWlsKCkuc3VidHJhY3QoWzEsMV0pKX0sX25vVGLSDkZXNUb0xvYWQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5fdGLSDkZXMpaWYoIXRoaXMuX3RpbGVzW3RdLmxvYWRlZClyZXR1cm4hMTtyZXR1cm4hMH19KTt2YXIgRGk9TmkuZXh0ZW5kKHtvcHRpb25zOnttaW5ab29tOjAsbWF4Wm9vbToxOCxzdWJkb21haW5zOlwiYWJjXCIsZXJyb3JUaWxlVXJsOlwiXCIsem9vbU9mZnNldDowLHRtczohMSx6b29tUmV2ZXJzZTohMSxkZXRlY3RSZXRpbmE6ITEsY3Jvc3NPcmlnaW46ITEscmVmZXJyZXJQb2xpY3k6ITF9LGluaXRpYWxpemU6ZnVuY3Rpb24odCxlKXt0aGlzLl91cmw9dCwoZT1jKHRoaXMsZSkpLmRldGVjdFJldGluYSYmYi5yZXRpbmEmJjA8ZS5tYXhab29tPyhlLnRpbGVTaXplPU1hdGguZmxvb3IoZS50aWxlU2l6ZS8yKSxlLnpvb21SZXZlcnNlPyhlLnpvb21PZmZzZXQtLSxlLm1pblpvb209TWF0aC5taW4oZS5tYXhab29tLGUubWluWm9vbSsxKSk6KGUuem9vbU9mZnNldCsrLGUubWF4Wm9vbT1NYXRoLm1heChlLm1pblpvb20sZS5tYXhab29tLTEpKSxlLm1pblpvb209TWF0aC5tYXgoMCxlLm1pblpvb20pKTplLnpvb21SZXZlcnNlP2UubWluWm9vbT1NYXRoLm1pbihlLm1heFpvb20sZS5taW5ab29tKTplLm1heFpvb209TWF0aC5tYXgoZS5taW5ab29tLGUubWF4Wm9vbSksXCJzdHJpbmdcIj09dHlwZW9mIGUuc3ViZG9tYWlucyYmKGUuc3ViZG9tYWlucz1lLnN1YmRvbWFpbnMuc3BsaXQoXCJcIikpLHRoaXMub24oXCJ0aWxldW5sb2FkXCIsdGhpcy5fb25UaWxlUmVtb3ZlKX0sc2V0VXJsOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3VybD09PXQmJnZvaWQgMD09PWUmJihlPSEwKSx0aGlzLl91cmw9dCxlfHx0aGlzLnJlZHJhdygpLHRoaXN9LGNyZWF0ZVRpbGU6ZnVuY3Rpb24odCxlKXt2YXIgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW1nXCIpO3JldHVybiBTKGksXCJsb2FkXCIsYSh0aGlzLl90aWxlT25Mb2FkLHRoaXMsZSxpKSksUyhpLFwiZXJyb3JcIixhKHRoaXMuX3RpbGVPbkVycm9yLHRoaXMsZSxpKSksIXRoaXMub3B0aW9ucy5jcm9zc09yaWdpbiYmXCJcIiE9PXRoaXMub3B0aW9ucy5jcm9zc09yaWdpbnx8KGkuY3Jvc3NPcmlnaW49ITA9PT10aGlzLm9wdGlvbnMuY3Jvc3NPcmlnaW4/XCJcIjp0aGlzLm9wdGlvbnMuY3Jvc3NPcmlnaW4pLFwic3RyaW5nXCI9PXR5cGVvZiB0aGlzLm9wdGlvbnMucmVmZXJyZXJQb2xpY3kmJihpLnJlZmVycmVyUG9saWN5PXRoaXMub3B0aW9ucy5yZWZlcnJlclBvbGljeSksaS5hbHQ9XCJcIixpLnNyYz10aGlzLmdldFRpbGVVcmwodCksaX0sZ2V0VGLSDkZVVybDpmdW5jdGlvbih0KXt2YXIgZT17cjpiLnJldGluYT9cIkAyeFwiOlwiXCIsczp0aGlzLl9nZXRTdWJkb21haW4odCkseDp0LngseTp0Lnksejp0aGlzLl9nZXRab29tRm9yVXJsKCl9O3JldHVybiB0aGlzLl9tYXAmJiF0aGlzLl9tYXAub3B0aW9ucy5jcnMuaW5maW5pdGUmJih0PXRoaXMuX2dsb2JhbFRpbGVSYW5nZS5tYXgueS10LnksdGhpcy5vcHRpb25zLnRtcyYmKGUueT10KSxlW1wiLXlcIl09dCkscSh0aGlzLl91cmwsbChlLHRoaXMub3B0aW9ucykpfSxfdGLSDkZU9uTG9hZDpmdW5jdGlvbih0LGUpe2IuaWVsdDk/c2V0VGltZW91dChhKHQsdGhpcyxudWxsLGUpLDApOnQobnVsbCxlKX0sX3RpbGVPbkVycm9yOmZ1bmN0aW9uKHQsZSxpKXt2YXIgbj10aGlzLm9wdGlvbnMuZXJyb3JUaWxlVXJsO24mJmUuZ2V0QXR0cmlidXRlKFwic3JjXCIpIT09biYmKGUuc3JjPW4pLHQoaSxlKX0sX29uVGLSDkZVJlbW92ZTpmdW5jdGlvbih0KXt0LnRpbGUub25sb2FkPW51bGx9LF9nZXRab29tRm9yVXJsOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fdGLSDkZVpvb20sZT10aGlzLm9wdGlvbnMubWF4Wm9vbTtyZXR1cm4odD10aGlzLm9wdGlvbnMuem9vbVJldmVyc2U/ZS10OnQpK3RoaXMub3B0aW9ucy56b29tT2Zmc2V0fSxfZ2V0U3ViZG9tYWluOmZ1bmN0aW9uKHQpe3Q9TWF0aC5hYnModC54K3QueSkldGhpcy5vcHRpb25zLnN1YmRvbWFpbnMubGVuZ3RoO3JldHVybiB0aGlzLm9wdGlvbnMuc3ViZG9tYWluc1t0XX0sX2Fib3J0TG9hZGluZzpmdW5jdGlvbigpe3ZhciB0LGUsaTtmb3IodCBpbiB0aGlzLl90aWxlcyl0aGlzLl90aWxlc1t0XS5jb29yZHMueiE9PXRoaXMuX3RpbGVab29tJiYoKGk9dGhpcy5fdGLSDkZXNbdF0uZWwpLm9ubG9hZD11LGkub25lcnJvcj11LGkuY29tcGxldGV8fChpLnNyYz1LLGU9dGhpcy5fdGLSDkZXNbdF0uY29vcmRzLFQoaSksZGVsZXRlIHRoaXMuX3RpbGVzW3RdLHRoaXMuZmlyZShcInRpbGVhYm9ydFwiLHt0aWxlOmksY29vcmRzOmV9KSkpfSxfcmVtb3ZlVGLSDkZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl90aWxlc1t0XTtpZihlKXJldHVybiBlLmVsLnNldEF0dHJpYnV0ZShcInNyY1wiLEspLE5pLnByb3RvdHlwZS5fcmVtb3ZlVGLSDkZS5jYWxsKHRoaXMsdCl9LF90aWxlUmVhZHk6ZnVuY3Rpb24odCxlLGkpe2lmKHRoaXMuX21hcCYmKCFpfHxpLmdldEF0dHJpYnV0ZShcInNyY1wiKSE9PUspKXJldHVybiBOaS5wcm90b3R5cGUuX3RpbGVSZWFkeS5jYWxsKHRoaXMsdCxlLGkpfX0pO2Z1bmN0aW9uIGppKHQsZSl7cmV0dXJuIG5ldyBEaSh0LGUpfXZhciBIaT1EaS5leHRlbmQoe2RlZmF1bHRXbXNQYXJhbXM6e3NlcnZpY2U6XCJXTVNcIixyZXF1ZXN0OlwiR2V0TWFwXCIsbGF5ZXJzOlwiXCIsc3R5bGVzOlwiXCIsZm9ybWF0OlwiaW1hZ2UvanBlZ1wiLHRyYW5zcGFyZW50OiExLHZlcnNpb246XCIxLjEuMVwifSxvcHRpb25zOntjcnM6bnVsbCx1cHBlcmNhc2U6ITF9LGluaXRpYWxpemU6ZnVuY3Rpb24odCxlKXt0aGlzLl91cmw9dDt2YXIgaSxuPWwoe30sdGhpcy5kZWZhdWx0V21zUGFyYW1zKTtmb3IoaSBpbiBlKWkgaW4gdGhpcy5vcHRpb25zfHwobltpXT1lW2ldKTt2YXIgdD0oZT1jKHRoaXMsZSkpLmRldGVjdFJldGluYSYmYi5yZXRpbmE/MjoxLG89dGhpcy5nZXRUaWxlU2l6ZSgpO24ud2lkdGg9by54KnQsbi5oZWlnaHQ9by55KnQsdGhpcy53bXNQYXJhbXM9bn0sb25BZGQ6ZnVuY3Rpb24odCl7dGhpcy5fY3JzPXRoaXMub3B0aW9ucy5jcnN8fHQub3B0aW9ucy5jcnMsdGhpcy5fd21zVmVyc2lvbj1wYXJzZUZsb2F0KHRoaXMud21zUGFyYW1zLnZlcnNpb24pO3ZhciBlPTEuMzw9dGhpcy5fd21zVmVyc2lvbj9cImNyc1wiOlwic3JzXCI7dGhpcy53bXNQYXJhbXNbZV09dGhpcy5fY3JzLmNvZGUsRGkucHJvdG90eXBlLm9uQWRkLmNhbGwodGhpcyx0KX0sZ2V0VGLSDkZVVybDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl90aWxlQ29vcmRzVG9Od1NlKHQpLGk9dGhpcy5fY3JzLGk9XyhpLnByb2plY3QoZVswXSksaS5wcm9qZWN0KGVbMV0pKSxlPWkubWluLGk9aS5tYXgsZT0oMS4zPD10aGlzLl93bXNWZXJzaW9uJiZ0aGlzLl9jcnM9PT1saT9bZS55LGUueCxpLnksaS54XTpbZS54LGUueSxpLngsaS55XSkuam9pbihcIixcIiksaT1EaS5wcm90b3R5cGUuZ2V0VGLSDkZVVybC5jYWxsKHRoaXMsdCk7cmV0dXJuIGkrVSh0aGlzLndtc1BhcmFtcyxpLHRoaXMub3B0aW9ucy51cHBlcmNhc2UpKyh0aGlzLm9wdGlvbnMudXBwZXJjYXNlP1wiJkJCT1g9XCI6XCImYmJveD1cIikrZX0sc2V0UGFyYW1zOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGwodGhpcy53bXNQYXJhbXMsdCksZXx8dGhpcy5yZWRyYXcoKSx0aGlzfX0pO0RpLldNUz1IaSxqaS53bXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IEhpKHQsZSl9O3ZhciBXaT1vLmV4dGVuZCh7b3B0aW9uczp7cGFkZGluZzouMX0saW5pdGlhbGl6ZTpmdW5jdGlvbih0KXtjKHRoaXMsdCksaCh0aGlzKSx0aGlzLl9sYXllcnM9dGhpcy5fbGF5ZXJzfHx7fX0sb25BZGQ6ZnVuY3Rpb24oKXt0aGlzLl9jb250YWluZXJ8fCh0aGlzLl9pbml0Q29udGFpbmVyKCksTSh0aGlzLl9jb250YWluZXIsXCJsZWFmbGV0LXpvb20tYW5pbWF0ZWRcIikpLHRoaXMuZ2V0UGFuZSgpLmFwcGVuZENoaWxkKHRoaXMuX2NvbnRhaW5lciksdGhpcy5fdXBkYXRlKCksdGhpcy5vbihcInVwZGF0ZVwiLHRoaXMuX3VwZGF0ZVBhdGhzLHRoaXMpfSxvblJlbW92ZTpmdW5jdGlvbigpe3RoaXMub2ZmKFwidXBkYXRlXCIsdGhpcy5fdXBkYXRlUGF0aHMsdGhpcyksdGhpcy5fZGVzdHJveUNvbnRhaW5lcigpfSxnZXRFdmVudHM6ZnVuY3Rpb24oKXt2YXIgdD17dmlld3Jlc2V0OnRoaXMuX3Jlc2V0LHpvb206dGhpcy5fb25ab29tLG1vdmVlbmQ6dGhpcy5fdXBkYXRlLHpvb21lbmQ6dGhpcy5fb25ab29tRW5kfTtyZXR1cm4gdGhpcy5fem9vbUFuaW1hdGVkJiYodC56b29tYW5pbT10aGlzLl9vbkFuaW1ab29tKSx0fSxfb25BbmltWm9vbTpmdW5jdGlvbih0KXt0aGlzLl91cGRhdGVUcmFuc2Zvcm0odC5jZW50ZXIsdC56b29tKX0sX29uWm9vbTpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVRyYW5zZm9ybSh0aGlzLl9tYXAuZ2V0Q2VudGVyKCksdGhpcy5fbWFwLmdldFpvb20oKSl9LF91cGRhdGVUcmFuc2Zvcm06ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLl9tYXAuZ2V0Wm9vbVNjYWxlKGUsdGhpcy5fem9vbSksbj10aGlzLl9tYXAuZ2V0U2l6ZSgpLm11bHRpcGx5QnkoLjUrdGhpcy5vcHRpb25zLnBhZGRpbmcpLG89dGhpcy5fbWFwLnByb2plY3QodGhpcy5fY2VudGVyLGUpLG49bi5tdWx0aXBseUJ5KC1pKS5hZGQobykuc3VidHJhY3QodGhpcy5fbWFwLl9nZXROZXdQaXhlbE9yaWdpbih0LGUpKTtiLmFueTNkP2JlKHRoaXMuX2NvbnRhaW5lcixuLGkpOloodGhpcy5fY29udGFpbmVyLG4pfSxfcmVzZXQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5fdXBkYXRlKCksdGhpcy5fdXBkYXRlVHJhbnNmb3JtKHRoaXMuX2NlbnRlcix0aGlzLl96b29tKSx0aGlzLl9sYXllcnMpdGhpcy5fbGF5ZXJzW3RdLl9yZXNldCgpfSxfb25ab29tRW5kOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuX2xheWVycyl0aGlzLl9sYXllcnNbdF0uX3Byb2plY3QoKX0sX3VwZGF0ZVBhdGhzOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuX2xheWVycyl0aGlzLl9sYXllcnNbdF0uX3VwZGF0ZSgpfSxfdXBkYXRlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zLnBhZGRpbmcsZT10aGlzLl9tYXAuZ2V0U2l6ZSgpLGk9dGhpcy5fbWFwLmNvbnRhaW5lclBvaW50VG9MYXllclBvaW50KGUubXVsdGlwbHlCeSgtdCkpLnJvdW5kKCk7dGhpcy5fYm91bmRzPW5ldyBmKGksaS5hZGQoZS5tdWx0aXBseUJ5KDErMip0KSkucm91bmQoKSksdGhpcy5fY2VudGVyPXRoaXMuX21hcC5nZXRDZW50ZXIoKSx0aGlzLl96b29tPXRoaXMuX21hcC5nZXRab29tKCl9fSksRmk9V2kuZXh0ZW5kKHtvcHRpb25zOnt0b2xlcmFuY2U6MH0sZ2V0RXZlbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9V2kucHJvdG90eXBlLmdldEV2ZW50cy5jYWxsKHRoaXMpO3JldHVybiB0LnZpZXdwcmVyZXNldD10aGlzLl9vblZpZXdQcmVSZXNldCx0fSxfb25WaWV3UHJlUmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9wb3N0cG9uZVVwZGF0ZVBhdGhzPSEwfSxvbkFkZDpmdW5jdGlvbigpe1dpLnByb3RvdHlwZS5vbkFkZC5jYWxsKHRoaXMpLHRoaXMuX2RyYXcoKX0sX2luaXRDb250YWluZXI6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jb250YWluZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtTKHQsXCJtb3VzZW1vdmVcIix0aGlzLl9vbk1vdXNlTW92ZSx0aGlzKSxTKHQsXCJjbGljayBkYmxjbGljayBtb3VzZWRvd24gbW91c2V1cCBjb250ZXh0bWVudVwiLHRoaXMuX29uQ2xpY2ssdGhpcyksUyh0LFwibW91c2VvdXRcIix0aGlzLl9oYW5kbGVNb3VzZU91dCx0aGlzKSx0Ll9sZWFmbGV0X2Rpc2FibGVfZXZlbnRzPSEwLHRoaXMuX2N0eD10LmdldENvbnRleHQoXCIyZFwiKX0sX2Rlc3Ryb3lDb250YWluZXI6ZnVuY3Rpb24oKXtyKHRoaXMuX3JlZHJhd1JlcXVlc3QpLGRlbGV0ZSB0aGlzLl9jdHgsVCh0aGlzLl9jb250YWluZXIpLGsodGhpcy5fY29udGFpbmVyKSxkZWxldGUgdGhpcy5fY29udGFpbmVyfSxfdXBkYXRlUGF0aHM6ZnVuY3Rpb24oKXtpZighdGhpcy5fcG9zdHBvbmVVcGRhdGVQYXRocyl7Zm9yKHZhciB0IGluIHRoaXMuX3JlZHJhd0JvdW5kcz1udWxsLHRoaXMuX2xheWVycyl0aGlzLl9sYXllcnNbdF0uX3VwZGF0ZSgpO3RoaXMuX3JlZHJhdygpfX0sX3VwZGF0ZTpmdW5jdGlvbigpe3ZhciB0LGUsaSxuO3RoaXMuX21hcC5fYW5pbWF0aW5nWm9vbSYmdGhpcy5fYm91bmRzfHwoV2kucHJvdG90eXBlLl91cGRhdGUuY2FsbCh0aGlzKSx0PXRoaXMuX2JvdW5kcyxlPXRoaXMuX2NvbnRhaW5lcixpPXQuZ2V0U2l6ZSgpLG49Yi5yZXRpbmE/MjoxLFooZSx0Lm1pbiksZS53aWR0aD1uKmkueCxlLmhlaWdodD1uKmkueSxlLnN0eWxlLndpZHRoPWkueCtcInB4XCIsZS5zdHlsZS5oZWlnaHQ9aS55K1wicHhcIixiLnJldGluYSYmdGhpcy5fY3R4LnNjYWxlKDIsMiksdGhpcy5fY3R4LnRyYW5zbGF0ZSgtdC5taW4ueCwtdC5taW4ueSksdGhpcy5maXJlKFwidXBkYXRlXCIpKX0sX3Jlc2V0OmZ1bmN0aW9uKCl7V2kucHJvdG90eXBlLl9yZXNldC5jYWxsKHRoaXMpLHRoaXMuX3Bvc3Rwb25lVXBkYXRlUGF0aHMmJih0aGlzLl9wb3N0cG9uZVVwZGF0ZVBhdGhzPSExLHRoaXMuX3VwZGF0ZVBhdGhzKCkpfSxfaW5pdFBhdGg6ZnVuY3Rpb24odCl7dGhpcy5fdXBkYXRlRGFzaEFycmF5KHQpO3Q9KHRoaXMuX2xheWVyc1toKHQpXT10KS5fb3JkZXI9e2xheWVyOnQscHJldjp0aGlzLl9kcmF3TGFzdCxuZXh0Om51bGx9O3RoaXMuX2RyYXdMYXN0JiYodGhpcy5fZHJhd0xhc3QubmV4dD10KSx0aGlzLl9kcmF3TGFzdD10LHRoaXMuX2RyYXdGaXJzdD10aGlzLl9kcmF3Rmlyc3R8fHRoaXMuX2RyYXdMYXN0fSxfYWRkUGF0aDpmdW5jdGlvbih0KXt0aGlzLl9yZXF1ZXN0UmVkcmF3KHQpfSxfcmVtb3ZlUGF0aDpmdW5jdGlvbih0KXt2YXIgZT10Ll9vcmRlcixpPWUubmV4dCxlPWUucHJldjtpP2kucHJldj1lOnRoaXMuX2RyYXdMYXN0PWUsZT9lLm5leHQ9aTp0aGlzLl9kcmF3Rmlyc3Q9aSxkZWxldGUgdC5fb3JkZXIsZGVsZXRlIHRoaXMuX2xheWVyc1toKHQpXSx0aGlzLl9yZXF1ZXN0UmVkcmF3KHQpfSxfdXBkYXRlUGF0aDpmdW5jdGlvbih0KXt0aGlzLl9leHRlbmRSZWRyYXdCb3VuZHModCksdC5fcHJvamVjdCgpLHQuX3VwZGF0ZSgpLHRoaXMuX3JlcXVlc3RSZWRyYXcodCl9LF91cGRhdGVTdHlsZTpmdW5jdGlvbih0KXt0aGlzLl91cGRhdGVEYXNoQXJyYXkodCksdGhpcy5fcmVxdWVzdFJlZHJhdyh0KX0sX3VwZGF0ZURhc2hBcnJheTpmdW5jdGlvbih0KXtpZihcInN0cmluZ1wiPT10eXBlb2YgdC5vcHRpb25zLmRhc2hBcnJheSl7Zm9yKHZhciBlLGk9dC5vcHRpb25zLmRhc2hBcnJheS5zcGxpdCgvWywgXSsvKSxuPVtdLG89MDtvPGkubGVuZ3RoO28rKyl7aWYoZT1OdW1iZXIoaVtvXSksaXNOYU4oZSkpcmV0dXJuO24ucHVzaChlKX10Lm9wdGlvbnMuX2Rhc2hBcnJheT1ufWVsc2UgdC5vcHRpb25zLl9kYXNoQXJyYXk9dC5vcHRpb25zLmRhc2hBcnJheX0sX3JlcXVlc3RSZWRyYXc6ZnVuY3Rpb24odCl7dGhpcy5fbWFwJiYodGhpcy5fZXh0ZW5kUmVkcmF3Qm91bmRzKHQpLHRoaXMuX3JlZHJhd1JlcXVlc3Q9dGhpcy5fcmVkcmF3UmVxdWVzdHx8eCh0aGlzLl9yZWRyYXcsdGhpcykpfSxfZXh0ZW5kUmVkcmF3Qm91bmRzOmZ1bmN0aW9uKHQpe3ZhciBlO3QuX3B4Qm91bmRzJiYoZT0odC5vcHRpb25zLndlaWdodHx8MCkrMSx0aGlzLl9yZWRyYXdCb3VuZHM9dGhpcy5fcmVkcmF3Qm91bmRzfHxuZXcgZix0aGlzLl9yZWRyYXdCb3VuZHMuZXh0ZW5kKHQuX3B4Qm91bmRzLm1pbi5zdWJ0cmFjdChbZSxlXSkpLHRoaXMuX3JlZHJhd0JvdW5kcy5leHRlbmQodC5fcHhCb3VuZHMubWF4LmFkZChbZSxlXSkpKX0sX3JlZHJhdzpmdW5jdGlvbigpe3RoaXMuX3JlZHJhd1JlcXVlc3Q9bnVsbCx0aGlzLl9yZWRyYXdCb3VuZHMmJih0aGlzLl9yZWRyYXdCb3VuZHMubWluLl9mbG9vcigpLHRoaXMuX3JlZHJhd0JvdW5kcy5tYXguX2NlaWwoKSksdGhpcy5fY2xlYXIoKSx0aGlzLl9kcmF3KCksdGhpcy5fcmVkcmF3Qm91bmRzPW51bGx9LF9jbGVhcjpmdW5jdGlvbigpe3ZhciB0LGU9dGhpcy5fcmVkcmF3Qm91bmRzO2U/KHQ9ZS5nZXRTaXplKCksdGhpcy5fY3R4LmNsZWFyUmVjdChlLm1pbi54LGUubWluLnksdC54LHQueSkpOih0aGlzLl9jdHguc2F2ZSgpLHRoaXMuX2N0eC5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLHRoaXMuX2N0eC5jbGVhclJlY3QoMCwwLHRoaXMuX2NvbnRhaW5lci53aWR0aCx0aGlzLl9jb250YWluZXIuaGVpZ2h0KSx0aGlzLl9jdHgucmVzdG9yZSgpKX0sX2RyYXc6ZnVuY3Rpb24oKXt2YXIgdCxlLGk9dGhpcy5fcmVkcmF3Qm91bmRzO3RoaXMuX2N0eC5zYXZlKCksaSYmKGU9aS5nZXRTaXplKCksdGhpcy5fY3R4LmJlZ2luUGF0aCgpLHRoaXMuX2N0eC5yZWN0KGkubWluLngsaS5taW4ueSxlLngsZS55KSx0aGlzLl9jdHguY2xpcCgpKSx0aGlzLl9kcmF3aW5nPSEwO2Zvcih2YXIgbj10aGlzLl9kcmF3Rmlyc3Q7bjtuPW4ubmV4dCl0PW4ubGF5ZXIsKCFpfHx0Ll9weEJvdW5kcyYmdC5fcHhCb3VuZHMuaW50ZXJzZWN0cyhpKSkmJnQuX3VwZGF0ZVBhdGgoKTt0aGlzLl9kcmF3aW5nPSExLHRoaXMuX2N0eC5yZXN0b3JlKCl9LF91cGRhdGVQb2x5OmZ1bmN0aW9uKHQsZSl7aWYodGhpcy5fZHJhd2luZyl7dmFyIGksbixvLHMscj10Ll9wYXJ0cyxhPXIubGVuZ3RoLGg9dGhpcy5fY3R4O2lmKGEpe2ZvcihoLmJlZ2luUGF0aCgpLGk9MDtpPGE7aSsrKXtmb3Iobj0wLG89cltpXS5sZW5ndGg7bjxvO24rKylzPXJbaV1bbl0saFtuP1wibGluZVRvXCI6XCJtb3ZlVG9cIl0ocy54LHMueSk7ZSYmaC5jbG9zZVBhdGgoKX10aGlzLl9maWxsU3Ryb2tlKGgsdCl9fX0sX3VwZGF0ZUNpcmNsZTpmdW5jdGlvbih0KXt2YXIgZSxpLG4sbzt0aGlzLl9kcmF3aW5nJiYhdC5fZW1wdHkoKSYmKGU9dC5fcG9pbnQsaT10aGlzLl9jdHgsbj1NYXRoLm1heChNYXRoLnJvdW5kKHQuX3JhZGl1cyksMSksMSE9KG89KE1hdGgubWF4KE1hdGgucm91bmQodC5fcmFkaXVzWSksMSl8fG4pL24pJiYoaS5zYXZlKCksaS5zY2FsZSgxLG8pKSxpLmJlZ2luUGF0aCgpLGkuYXJjKGUueCxlLnkvbyxuLDAsMipNYXRoLlBJLCExKSwxIT1vJiZpLnJlc3RvcmUoKSx0aGlzLl9maWxsU3Ryb2tlKGksdCkpfSxfZmlsbFN0cm9rZTpmdW5jdGlvbih0LGUpe3ZhciBpPWUub3B0aW9ucztpLmZpbGwmJih0Lmdsb2JhbEFscGhhPWkuZmlsbE9wYWNpdHksdC5maWxsU3R5bGU9aS5maWxsQ29sb3J8fGkuY29sb3IsdC5maWxsKGkuZmlsbFJ1bGV8fFwiZXZlbm9kZFwiKSksaS5zdHJva2UmJjAhPT1pLndlaWdodCYmKHQuc2V0TGluZURhc2gmJnQuc2V0TGluZURhc2goZS5vcHRpb25zJiZlLm9wdGlvbnMuX2Rhc2hBcnJheXx8W10pLHQuZ2xvYmFsQWxwaGE9aS5vcGFjaXR5LHQubGluZVdpZHRoPWkud2VpZ2h0LHQuc3Ryb2tlU3R5bGU9aS5jb2xvcix0LmxpbmVDYXA9aS5saW5lQ2FwLHQubGluZUpvaW49aS5saW5lSm9pbix0LnN0cm9rZSgpKX0sX29uQ2xpY2s6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLGksbj10aGlzLl9tYXAubW91c2VFdmVudFRvTGF5ZXJQb2ludCh0KSxvPXRoaXMuX2RyYXdGaXJzdDtvO289by5uZXh0KShlPW8ubGF5ZXIpLm9wdGlvbnMuaW50ZXJhY3RpdmUmJmUuX2NvbnRhaW5zUG9pbnQobikmJigoXCJjbGlja1wiPT09dC50eXBlfHxcInByZWNsaWNrXCI9PT10LnR5cGUpJiZ0aGlzLl9tYXAuX2RyYWdnYWJsZU1vdmVkKGUpfHwoaT1lKSk7dGhpcy5fZmlyZUV2ZW50KCEhaSYmW2ldLHQpfSxfb25Nb3VzZU1vdmU6ZnVuY3Rpb24odCl7dmFyIGU7IXRoaXMuX21hcHx8dGhpcy5fbWFwLmRyYWdnaW5nLm1vdmluZygpfHx0aGlzLl9tYXAuX2FuaW1hdGluZ1pvb218fChlPXRoaXMuX21hcC5tb3VzZUV2ZW50VG9MYXllclBvaW50KHQpLHRoaXMuX2hhbmRsZU1vdXNlSG92ZXIodCxlKSl9LF9oYW5kbGVNb3VzZU91dDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9ob3ZlcmVkTGF5ZXI7ZSYmKHoodGhpcy5fY29udGFpbmVyLFwibGVhZmxldC1pbnRlcmFjdGl2ZVwiKSx0aGlzLl9maXJlRXZlbnQoW2VdLHQsXCJtb3VzZW91dFwiKSx0aGlzLl9ob3ZlcmVkTGF5ZXI9bnVsbCx0aGlzLl9tb3VzZUhvdmVyVGhyb3R0bGVkPSExKX0sX2hhbmRsZU1vdXNlSG92ZXI6ZnVuY3Rpb24odCxlKXtpZighdGhpcy5fbW91c2VIb3ZlclRocm90dGxlZCl7Zm9yKHZhciBpLG4sbz10aGlzLl9kcmF3Rmlyc3Q7bztvPW8ubmV4dCkoaT1vLmxheWVyKS5vcHRpb25zLmludGVyYWN0aXZlJiZpLl9jb250YWluc1BvaW50KGUpJiYobj1pKTtuIT09dGhpcy5faG92ZXJlZExheWVyJiYodGhpcy5faGFuZGxlTW91c2VPdXQodCksbiYmKE0odGhpcy5fY29udGFpbmVyLFwibGVhZmxldC1pbnRlcmFjdGl2ZVwiKSx0aGlzLl9maXJlRXZlbnQoW25dLHQsXCJtb3VzZW92ZXJcIiksdGhpcy5faG92ZXJlZExheWVyPW4pKSx0aGlzLl9maXJlRXZlbnQoISF0aGlzLl9ob3ZlcmVkTGF5ZXImJlt0aGlzLl9ob3ZlcmVkTGF5ZXJdLHQpLHRoaXMuX21vdXNlSG92ZXJUaHJvdHRsZWQ9ITAsc2V0VGltZW91dChhKGZ1bmN0aW9uKCl7dGhpcy5fbW91c2VIb3ZlclRocm90dGxlZD0hMX0sdGhpcyksMzIpfX0sX2ZpcmVFdmVudDpmdW5jdGlvbih0LGUsaSl7dGhpcy5fbWFwLl9maXJlRE9NRXZlbnQoZSxpfHxlLnR5cGUsdCl9LF9icmluZ1RvRnJvbnQ6ZnVuY3Rpb24odCl7dmFyIGUsaSxuPXQuX29yZGVyO24mJihlPW4ubmV4dCxpPW4ucHJldixlJiYoKGUucHJldj1pKT9pLm5leHQ9ZTplJiYodGhpcy5fZHJhd0ZpcnN0PWUpLG4ucHJldj10aGlzLl9kcmF3TGFzdCwodGhpcy5fZHJhd0xhc3QubmV4dD1uKS5uZXh0PW51bGwsdGhpcy5fZHJhd0xhc3Q9bix0aGlzLl9yZXF1ZXN0UmVkcmF3KHQpKSl9LF9icmluZ1RvQmFjazpmdW5jdGlvbih0KXt2YXIgZSxpLG49dC5fb3JkZXI7biYmKGU9bi5uZXh0LChpPW4ucHJldikmJigoaS5uZXh0PWUpP2UucHJldj1pOmkmJih0aGlzLl9kcmF3TGFzdD1pKSxuLnByZXY9bnVsbCxuLm5leHQ9dGhpcy5fZHJhd0ZpcnN0LHRoaXMuX2RyYXdGaXJzdC5wcmV2PW4sdGhpcy5fZHJhd0ZpcnN0PW4sdGhpcy5fcmVxdWVzdFJlZHJhdyh0KSkpfX0pO2Z1bmN0aW9uIFVpKHQpe3JldHVybiBiLmNhbnZhcz9uZXcgRmkodCk6bnVsbH12YXIgVmk9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIGRvY3VtZW50Lm5hbWVzcGFjZXMuYWRkKFwibHZtbFwiLFwidXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWxcIiksZnVuY3Rpb24odCl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCI8bHZtbDpcIit0KycgY2xhc3M9XCJsdm1sXCI+Jyl9fWNhdGNoKHQpe31yZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCI8XCIrdCsnIHhtbG5zPVwidXJuOnNjaGVtYXMtbWljcm9zb2Z0LmNvbTp2bWxcIiBjbGFzcz1cImx2bWxcIj4nKX19KCksenQ9e19pbml0Q29udGFpbmVyOmZ1bmN0aW9uKCl7dGhpcy5fY29udGFpbmVyPVAoXCJkaXZcIixcImxlYWZsZXQtdm1sLWNvbnRhaW5lclwiKX0sX3VwZGF0ZTpmdW5jdGlvbigpe3RoaXMuX21hcC5fYW5pbWF0aW5nWm9vbXx8KFdpLnByb3RvdHlwZS5fdXBkYXRlLmNhbGwodGhpcyksdGhpcy5maXJlKFwidXBkYXRlXCIpKX0sX2luaXRQYXRoOmZ1bmN0aW9uKHQpe3ZhciBlPXQuX2NvbnRhaW5lcj1WaShcInNoYXBlXCIpO00oZSxcImxlYWZsZXQtdm1sLXNoYXBlIFwiKyh0aGlzLm9wdGlvbnMuY2xhc3NOYW1lfHxcIlwiKSksZS5jb29yZHNpemU9XCIxIDFcIix0Ll9wYXRoPVZpKFwicGF0aFwiKSxlLmFwcGVuZENoaWxkKHQuX3BhdGgpLHRoaXMuX3VwZGF0ZVN0eWxlKHQpLHRoaXMuX2xheWVyc1toKHQpXT10fSxfYWRkUGF0aDpmdW5jdGlvbih0KXt2YXIgZT10Ll9jb250YWluZXI7dGhpcy5fY29udGFpbmVyLmFwcGVuZENoaWxkKGUpLHQub3B0aW9ucy5pbnRlcmFjdGl2ZSYmdC5hZGRJbnRlcmFjdGl2ZVRhcmdldChlKX0sX3JlbW92ZVBhdGg6ZnVuY3Rpb24odCl7dmFyIGU9dC5fY29udGFpbmVyO1QoZSksdC5yZW1vdmVJbnRlcmFjdGl2ZVRhcmdldChlKSxkZWxldGUgdGhpcy5fbGF5ZXJzW2godCldfSxfdXBkYXRlU3R5bGU6ZnVuY3Rpb24odCl7dmFyIGU9dC5fc3Ryb2tlLGk9dC5fZmlsbCxuPXQub3B0aW9ucyxvPXQuX2NvbnRhaW5lcjtvLnN0cm9rZWQ9ISFuLnN0cm9rZSxvLmZpbGxlZD0hIW4uZmlsbCxuLnN0cm9rZT8oZT1lfHwodC5fc3Ryb2tlPVZpKFwic3Ryb2tlXCIpKSxvLmFwcGVuZENoaWxkKGUpLGUud2VpZ2h0PW4ud2VpZ2h0K1wicHhcIixlLmNvbG9yPW4uY29sb3IsZS5vcGFjaXR5PW4ub3BhY2l0eSxuLmRhc2hBcnJheT9lLmRhc2hTdHlsZT1kKG4uZGFzaEFycmF5KT9uLmRhc2hBcnJheS5qb2luKFwiIFwiKTpuLmRhc2hBcnJheS5yZXBsYWNlKC8oICosICopL2csXCIgXCIpOmUuZGFzaFN0eWxlPVwiXCIsZS5lbmRjYXA9bi5saW5lQ2FwLnJlcGxhY2UoXCJidXR0XCIsXCJmbGF0XCIpLGUuam9pbnN0eWxlPW4ubGluZUpvaW4pOmUmJihvLnJlbW92ZUNoaWxkKGUpLHQuX3N0cm9rZT1udWxsKSxuLmZpbGw/KGk9aXx8KHQuX2ZpbGw9VmkoXCJmaWxsXCIpKSxvLmFwcGVuZENoaWxkKGkpLGkuY29sb3I9bi5maWxsQ29sb3J8fG4uY29sb3IsaS5vcGFjaXR5PW4uZmlsbE9wYWNpdHkpOmkmJihvLnJlbW92ZUNoaWxkKGkpLHQuX2ZpbGw9bnVsbCl9LF91cGRhdGVDaXJjbGU6ZnVuY3Rpb24odCl7dmFyIGU9dC5fcG9pbnQucm91bmQoKSxpPU1hdGgucm91bmQodC5fcmFkaXVzKSxuPU1hdGgucm91bmQodC5fcmFkaXVzWXx8aSk7dGhpcy5fc2V0UGF0aCh0LHQuX2VtcHR5KCk/XCJNMCAwXCI6XCJBTCBcIitlLngrXCIsXCIrZS55K1wiIFwiK2krXCIsXCIrbitcIiAwLDIzNTkyNjAwXCIpfSxfc2V0UGF0aDpmdW5jdGlvbih0LGUpe3QuX3BhdGgudj1lfSxfYnJpbmdUb0Zyb250OmZ1bmN0aW9uKHQpe2ZlKHQuX2NvbnRhaW5lcil9LF9icmluZ1RvQmFjazpmdW5jdGlvbih0KXtnZSh0Ll9jb250YWluZXIpfX0scWk9Yi52bWw/Vmk6Y3QsR2k9V2kuZXh0ZW5kKHtfaW5pdENvbnRhaW5lcjpmdW5jdGlvbigpe3RoaXMuX2NvbnRhaW5lcj1xaShcInN2Z1wiKSx0aGlzLl9jb250YWluZXIuc2V0QXR0cmlidXRlKFwicG9pbnRlci1ldmVudHNcIixcIm5vbmVcIiksdGhpcy5fcm9vdEdyb3VwPXFpKFwiZ1wiKSx0aGlzLl9jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fcm9vdEdyb3VwKX0sX2Rlc3Ryb3lDb250YWluZXI6ZnVuY3Rpb24oKXtUKHRoaXMuX2NvbnRhaW5lciksayh0aGlzLl9jb250YWluZXIpLGRlbGV0ZSB0aGlzLl9jb250YWluZXIsZGVsZXRlIHRoaXMuX3Jvb3RHcm91cCxkZWxldGUgdGhpcy5fc3ZnU2l6ZX0sX3VwZGF0ZTpmdW5jdGlvbigpe3ZhciB0LGUsaTt0aGlzLl9tYXAuX2FuaW1hdGluZ1pvb20mJnRoaXMuX2JvdW5kc3x8KFdpLnByb3RvdHlwZS5fdXBkYXRlLmNhbGwodGhpcyksZT0odD10aGlzLl9ib3VuZHMpLmdldFNpemUoKSxpPXRoaXMuX2NvbnRhaW5lcix0aGlzLl9zdmdTaXplJiZ0aGlzLl9zdmdTaXplLmVxdWFscyhlKXx8KHRoaXMuX3N2Z1NpemU9ZSxpLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsZS54KSxpLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLGUueSkpLFooaSx0Lm1pbiksaS5zZXRBdHRyaWJ1dGUoXCJ2aWV3Qm94XCIsW3QubWluLngsdC5taW4ueSxlLngsZS55XS5qb2luKFwiIFwiKSksdGhpcy5maXJlKFwidXBkYXRlXCIpKX0sX2luaXRQYXRoOmZ1bmN0aW9uKHQpe3ZhciBlPXQuX3BhdGg9cWkoXCJwYXRoXCIpO3Qub3B0aW9ucy5jbGFzc05hbWUmJk0oZSx0Lm9wdGlvbnMuY2xhc3NOYW1lKSx0Lm9wdGlvbnMuaW50ZXJhY3RpdmUmJk0oZSxcImxlYWZsZXQtaW50ZXJhY3RpdmVcIiksdGhpcy5fdXBkYXRlU3R5bGUodCksdGhpcy5fbGF5ZXJzW2godCldPXR9LF9hZGRQYXRoOmZ1bmN0aW9uKHQpe3RoaXMuX3Jvb3RHcm91cHx8dGhpcy5faW5pdENvbnRhaW5lcigpLHRoaXMuX3Jvb3RHcm91cC5hcHBlbmRDaGLSDkZCh0Ll9wYXRoKSx0LmFkZEludGVyYWN0aXZlVGFyZ2V0KHQuX3BhdGgpfSxfcmVtb3ZlUGF0aDpmdW5jdGlvbih0KXtUKHQuX3BhdGgpLHQucmVtb3ZlSW50ZXJhY3RpdmVUYXJnZXQodC5fcGF0aCksZGVsZXRlIHRoaXMuX2xheWVyc1toKHQpXX0sX3VwZGF0ZVBhdGg6ZnVuY3Rpb24odCl7dC5fcHJvamVjdCgpLHQuX3VwZGF0ZSgpfSxfdXBkYXRlU3R5bGU6ZnVuY3Rpb24odCl7dmFyIGU9dC5fcGF0aCx0PXQub3B0aW9ucztlJiYodC5zdHJva2U/KGUuc2V0QXR0cmlidXRlKFwic3Ryb2tlXCIsdC5jb2xvciksZS5zZXRBdHRyaWJ1dGUoXCJzdHJva2Utb3BhY2l0eVwiLHQub3BhY2l0eSksZS5zZXRBdHRyaWJ1dGUoXCJzdHJva2Utd2lkdGhcIix0LndlaWdodCksZS5zZXRBdHRyaWJ1dGUoXCJzdHJva2UtbGluZWNhcFwiLHQubGluZUNhcCksZS5zZXRBdHRyaWJ1dGUoXCJzdHJva2UtbGluZWpvaW5cIix0LmxpbmVKb2luKSx0LmRhc2hBcnJheT9lLnNldEF0dHJpYnV0ZShcInN0cm9rZS1kYXNoYXJyYXlcIix0LmRhc2hBcnJheSk6ZS5yZW1vdmVBdHRyaWJ1dGUoXCJzdHJva2UtZGFzaGFycmF5XCIpLHQuZGFzaE9mZnNldD9lLnNldEF0dHJpYnV0ZShcInN0cm9rZS1kYXNob2Zmc2V0XCIsdC5kYXNoT2Zmc2V0KTplLnJlbW92ZUF0dHJpYnV0ZShcInN0cm9rZS1kYXNob2Zmc2V0XCIpKTplLnNldEF0dHJpYnV0ZShcInN0cm9rZVwiLFwibm9uZVwiKSx0LmZpbGw/KGUuc2V0QXR0cmlidXRlKFwiZmlsbFwiLHQuZmlsbENvbG9yfHx0LmNvbG9yKSxlLnNldEF0dHJpYnV0ZShcImZpbGwtb3BhY2l0eVwiLHQuZmlsbE9wYWNpdHkpLGUuc2V0QXR0cmlidXRlKFwiZmlsbC1ydWxlXCIsdC5maWxsUnVsZXx8XCJldmVub2RkXCIpKTplLnNldEF0dHJpYnV0ZShcImZpbGxcIixcIm5vbmVcIikpfSxfdXBkYXRlUG9seTpmdW5jdGlvbih0LGUpe3RoaXMuX3NldFBhdGgodCxkdCh0Ll9wYXJ0cyxlKSl9LF91cGRhdGVDaXJjbGU6ZnVuY3Rpb24odCl7dmFyIGU9dC5fcG9pbnQsaT1NYXRoLm1heChNYXRoLnJvdW5kKHQuX3JhZGl1cyksMSksbj1cImFcIitpK1wiLFwiKyhNYXRoLm1heChNYXRoLnJvdW5kKHQuX3JhZGl1c1kpLDEpfHxpKStcIiAwIDEsMCBcIixlPXQuX2VtcHR5KCk/XCJNMCAwXCI6XCJNXCIrKGUueC1pKStcIixcIitlLnkrbisyKmkrXCIsMCBcIituKzIqLWkrXCIsMCBcIjt0aGlzLl9zZXRQYXRoKHQsZSl9LF9zZXRQYXRoOmZ1bmN0aW9uKHQsZSl7dC5fcGF0aC5zZXRBdHRyaWJ1dGUoXCJkXCIsZSl9LF9icmluZ1RvRnJvbnQ6ZnVuY3Rpb24odCl7ZmUodC5fcGF0aCl9LF9icmluZ1RvQmFjazpmdW5jdGlvbih0KXtnZSh0Ll9wYXRoKX19KTtmdW5jdGlvbiBLaSh0KXtyZXR1cm4gYi5zdmd8fGIudm1sP25ldyBHaSh0KTpudWxsfWIudm1sJiZHaS5pbmNsdWRlKHp0KSxBLmluY2x1ZGUoe2dldFJlbmRlcmVyOmZ1bmN0aW9uKHQpe3Q9KHQ9dC5vcHRpb25zLnJlbmRlcmVyfHx0aGlzLl9nZXRQYW5lUmVuZGVyZXIodC5vcHRpb25zLnBhbmUpfHx0aGlzLm9wdGlvbnMucmVuZGVyZXJ8fHRoaXMuX3JlbmRlcmVyKXx8KHRoaXMuX3JlbmRlcmVyPXRoaXMuX2NyZWF0ZVJlbmRlcmVyKCkpO3JldHVybiB0aGlzLmhhc0xheWVyKHQpfHx0aGlzLmFkZExheWVyKHQpLHR9LF9nZXRQYW5lUmVuZGVyZXI6ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuXCJvdmVybGF5UGFuZVwiIT09dCYmdm9pZCAwIT09dCYmKHZvaWQgMD09PShlPXRoaXMuX3BhbmVSZW5kZXJlcnNbdF0pJiYoZT10aGlzLl9jcmVhdGVSZW5kZXJlcih7cGFuZTp0fSksdGhpcy5fcGFuZVJlbmRlcmVyc1t0XT1lKSxlKX0sX2NyZWF0ZVJlbmRlcmVyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnMucHJlZmVyQ2FudmFzJiZVaSh0KXx8S2kodCl9fSk7dmFyIFlpPXhpLmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbih0LGUpe3hpLnByb3RvdHlwZS5pbml0aWFsaXplLmNhbGwodGhpcyx0aGlzLl9ib3VuZHNUb0xhdExuZ3ModCksZSl9LHNldEJvdW5kczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zZXRMYXRMbmdzKHRoaXMuX2JvdW5kc1RvTGF0TG5ncyh0KSl9LF9ib3VuZHNUb0xhdExuZ3M6ZnVuY3Rpb24odCl7cmV0dXJuWyh0PWcodCkpLmdldFNvdXRoV2VzdCgpLHQuZ2V0Tm9ydGhXZXN0KCksdC5nZXROb3J0aEVhc3QoKSx0LmdldFNvdXRoRWFzdCgpXX19KTtHaS5jcmVhdGU9cWksR2kucG9pbnRzVG9QYXRoPWR0LHdpLmdlb21ldHJ5VG9MYXllcj1iaSx3aS5jb29yZHNUb0xhdExuZz1MaSx3aS5jb29yZHNUb0xhdExuZ3M9VGksd2kubGF0TG5nVG9Db29yZHM9TWksd2kubGF0TG5nc1RvQ29vcmRzPXppLHdpLmdldEZlYXR1cmU9Q2ksd2kuYXNGZWF0dXJlPVppLEEubWVyZ2VPcHRpb25zKHtib3hab29tOiEwfSk7dmFyIF90PW4uZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9uKHQpe3RoaXMuX21hcD10LHRoaXMuX2NvbnRhaW5lcj10Ll9jb250YWluZXIsdGhpcy5fcGFuZT10Ll9wYW5lcy5vdmVybGF5UGFuZSx0aGlzLl9yZXNldFN0YXRlVGltZW91dD0wLHQub24oXCJ1bmxvYWRcIix0aGlzLl9kZXN0cm95LHRoaXMpfSxhZGRIb29rczpmdW5jdGlvbigpe1ModGhpcy5fY29udGFpbmVyLFwibW91c2Vkb3duXCIsdGhpcy5fb25Nb3VzZURvd24sdGhpcyl9LHJlbW92ZUhvb2tzOmZ1bmN0aW9uKCl7ayh0aGlzLl9jb250YWluZXIsXCJtb3VzZWRvd25cIix0aGlzLl9vbk1vdXNlRG93bix0aGlzKX0sbW92ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW92ZWR9LF9kZXN0cm95OmZ1bmN0aW9uKCl7VCh0aGlzLl9wYW5lKSxkZWxldGUgdGhpcy5fcGFuZX0sX3Jlc2V0U3RhdGU6ZnVuY3Rpb24oKXt0aGlzLl9yZXNldFN0YXRlVGltZW91dD0wLHRoaXMuX21vdmVkPSExfSxfY2xlYXJEZWZlcnJlZFJlc2V0U3RhdGU6ZnVuY3Rpb24oKXswIT09dGhpcy5fcmVzZXRTdGF0ZVRpbWVvdXQmJihjbGVhclRpbWVvdXQodGhpcy5fcmVzZXRTdGF0ZVRpbWVvdXQpLHRoaXMuX3Jlc2V0U3RhdGVUaW1lb3V0PTApfSxfb25Nb3VzZURvd246ZnVuY3Rpb24odCl7aWYoIXQuc2hpZnRLZXl8fDEhPT10LndoaWNoJiYxIT09dC5idXR0b24pcmV0dXJuITE7dGhpcy5fY2xlYXJEZWZlcnJlZFJlc2V0U3RhdGUoKSx0aGlzLl9yZXNldFN0YXRlKCkscmUoKSxMZSgpLHRoaXMuX3N0YXJ0UG9pbnQ9dGhpcy5fbWFwLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KHQpLFMoZG9jdW1lbnQse2NvbnRleHRtZW51OlJlLG1vdXNlbW92ZTp0aGlzLl9vbk1vdXNlTW92ZSxtb3VzZXVwOnRoaXMuX29uTW91c2VVcCxrZXlkb3duOnRoaXMuX29uS2V5RG93bn0sdGhpcyl9LF9vbk1vdXNlTW92ZTpmdW5jdGlvbih0KXt0aGlzLl9tb3ZlZHx8KHRoaXMuX21vdmVkPSEwLHRoaXMuX2JveD1QKFwiZGl2XCIsXCJsZWFmbGV0LXpvb20tYm94XCIsdGhpcy5fY29udGFpbmVyKSxNKHRoaXMuX2NvbnRhaW5lcixcImxlYWZsZXQtY3Jvc3NoYWlyXCIpLHRoaXMuX21hcC5maXJlKFwiYm94em9vbXN0YXJ0XCIpKSx0aGlzLl9wb2ludD10aGlzLl9tYXAubW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQodCk7dmFyIHQ9bmV3IGYodGhpcy5fcG9pbnQsdGhpcy5fc3RhcnRQb2ludCksZT10LmdldFNpemUoKTtaKHRoaXMuX2JveCx0Lm1pbiksdGhpcy5fYm94LnN0eWxlLndpZHRoPWUueCtcInB4XCIsdGhpcy5fYm94LnN0eWxlLmhlaWdodD1lLnkrXCJweFwifSxfZmluaXNoOmZ1bmN0aW9uKCl7dGhpcy5fbW92ZWQmJihUKHRoaXMuX2JveCkseih0aGlzLl9jb250YWluZXIsXCJsZWFmbGV0LWNyb3NzaGFpclwiKSksYWUoKSxUZSgpLGsoZG9jdW1lbnQse2NvbnRleHRtZW51OlJlLG1vdXNlbW92ZTp0aGlzLl9vbk1vdXNlTW92ZSxtb3VzZXVwOnRoaXMuX29uTW91c2VVcCxrZXlkb3duOnRoaXMuX29uS2V5RG93bn0sdGhpcyl9LF9vbk1vdXNlVXA6ZnVuY3Rpb24odCl7MSE9PXQud2hpY2gmJjEhPT10LmJ1dHRvbnx8KHRoaXMuX2ZpbmlzaCgpLHRoaXMuX21vdmVkJiYodGhpcy5fY2xlYXJEZWZlcnJlZFJlc2V0U3RhdGUoKSx0aGlzLl9yZXNldFN0YXRlVGltZW91dD1zZXRUaW1lb3V0KGEodGhpcy5fcmVzZXRTdGF0ZSx0aGlzKSwwKSx0PW5ldyBzKHRoaXMuX21hcC5jb250YWluZXJQb2ludFRvTGF0TG5nKHRoaXMuX3N0YXJ0UG9pbnQpLHRoaXMuX21hcC5jb250YWluZXJQb2ludFRvTGF0TG5nKHRoaXMuX3BvaW50KSksdGhpcy5fbWFwLmZpdEJvdW5kcyh0KS5maXJlKFwiYm94em9vbWVuZFwiLHtib3hab29tQm91bmRzOnR9KSkpfSxfb25LZXlEb3duOmZ1bmN0aW9uKHQpezI3PT09dC5rZXlDb2RlJiYodGhpcy5fZmluaXNoKCksdGhpcy5fY2xlYXJEZWZlcnJlZFJlc2V0U3RhdGUoKSx0aGlzLl9yZXNldFN0YXRlKCkpfX0pLEN0PShBLmFkZEluaXRIb29rKFwiYWRkSGFuZGxlclwiLFwiYm94Wm9vbVwiLF90KSxBLm1lcmdlT3B0aW9ucyh7ZG91YmxlQ2xpY2tab29tOiEwfSksbi5leHRlbmQoe2FkZEhvb2tzOmZ1bmN0aW9uKCl7dGhpcy5fbWFwLm9uKFwiZGJsY2xpY2tcIix0aGlzLl9vbkRvdWJsZUNsaWNrLHRoaXMpfSxyZW1vdmVIb29rczpmdW5jdGlvbigpe3RoaXMuX21hcC5vZmYoXCJkYmxjbGlja1wiLHRoaXMuX29uRG91YmxlQ2xpY2ssdGhpcyl9LF9vbkRvdWJsZUNsaWNrOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX21hcCxpPWUuZ2V0Wm9vbSgpLG49ZS5vcHRpb25zLnpvb21EZWx0YSxpPXQub3JpZ2luYWxFdmVudC5zaGlmdEtleT9pLW46aStuO1wiY2VudGVyXCI9PT1lLm9wdGlvbnMuZG91YmxlQ2xpY2tab29tP2Uuc2V0Wm9vbShpKTplLnNldFpvb21Bcm91bmQodC5jb250YWluZXJQb2ludCxpKX19KSksWnQ9KEEuYWRkSW5pdEhvb2soXCJhZGRIYW5kbGVyXCIsXCJkb3VibGVDbGlja1pvb21cIixDdCksQS5tZXJnZU9wdGlvbnMoe2RyYWdnaW5nOiEwLGluZXJ0aWE6ITAsaW5lcnRpYURlY2VsZXJhdGlvbjozNDAwLGluZXJ0aWFNYXhTcGVlZDoxLzAsZWFzZUxpbmVhcml0eTouMix3b3JsZENvcHlKdW1wOiExLG1heEJvdW5kc1Zpc2Nvc2l0eTowfSksbi5leHRlbmQoe2FkZEhvb2tzOmZ1bmN0aW9uKCl7dmFyIHQ7dGhpcy5fZHJhZ2dhYmxlfHwodD10aGlzLl9tYXAsdGhpcy5fZHJhZ2dhYmxlPW5ldyBYZSh0Ll9tYXBQYW5lLHQuX2NvbnRhaW5lciksdGhpcy5fZHJhZ2dhYmxlLm9uKHtkcmFnc3RhcnQ6dGhpcy5fb25EcmFnU3RhcnQsZHJhZzp0aGlzLl9vbkRyYWcsZHJhZ2VuZDp0aGlzLl9vbkRyYWdFbmR9LHRoaXMpLHRoaXMuX2RyYWdnYWJsZS5vbihcInByZWRyYWdcIix0aGlzLl9vblByZURyYWdMaW1pdCx0aGlzKSx0Lm9wdGlvbnMud29ybGRDb3B5SnVtcCYmKHRoaXMuX2RyYWdnYWJsZS5vbihcInByZWRyYWdcIix0aGlzLl9vblByZURyYWdXcmFwLHRoaXMpLHQub24oXCJ6b29tZW5kXCIsdGhpcy5fb25ab29tRW5kLHRoaXMpLHQud2hlblJlYWR5KHRoaXMuX29uWm9vbUVuZCx0aGlzKSkpLE0odGhpcy5fbWFwLl9jb250YWluZXIsXCJsZWFmbGV0LWdyYWIgbGVhZmxldC10b3VjaC1kcmFnXCIpLHRoaXMuX2RyYWdnYWJsZS5lbmFibGUoKSx0aGlzLl9wb3NpdGlvbnM9W10sdGhpcy5fdGltZXM9W119LHJlbW92ZUhvb2tzOmZ1bmN0aW9uKCl7eih0aGlzLl9tYXAuX2NvbnRhaW5lcixcImxlYWZsZXQtZ3JhYlwiKSx6KHRoaXMuX21hcC5fY29udGFpbmVyLFwibGVhZmxldC10b3VjaC1kcmFnXCIpLHRoaXMuX2RyYWdnYWJsZS5kaXNhYmxlKCl9LG1vdmVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RyYWdnYWJsZSYmdGhpcy5fZHJhZ2dhYmxlLl9tb3ZlZH0sbW92aW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RyYWdnYWJsZSYmdGhpcy5fZHJhZ2dhYmxlLl9tb3Zpbmd9LF9vbkRyYWdTdGFydDpmdW5jdGlvbigpe3ZhciB0LGU9dGhpcy5fbWFwO2UuX3N0b3AoKSx0aGlzLl9tYXAub3B0aW9ucy5tYXhCb3VuZHMmJnRoaXMuX21hcC5vcHRpb25zLm1heEJvdW5kc1Zpc2Nvc2l0eT8odD1nKHRoaXMuX21hcC5vcHRpb25zLm1heEJvdW5kcyksdGhpcy5fb2Zmc2V0TGltaXQ9Xyh0aGlzLl9tYXAubGF0TG5nVG9Db250YWluZXJQb2ludCh0LmdldE5vcnRoV2VzdCgpKS5tdWx0aXBseUJ5KC0xKSx0aGlzLl9tYXAubGF0TG5nVG9Db250YWluZXJQb2ludCh0LmdldFNvdXRoRWFzdCgpKS5tdWx0aXBseUJ5KC0xKS5hZGQodGhpcy5fbWFwLmdldFNpemUoKSkpLHRoaXMuX3Zpc2Nvc2l0eT1NYXRoLm1pbigxLE1hdGgubWF4KDAsdGhpcy5fbWFwLm9wdGlvbnMubWF4Qm91bmRzVmlzY29zaXR5KSkpOnRoaXMuX29mZnNldExpbWl0PW51bGwsZS5maXJlKFwibW92ZXN0YXJ0XCIpLmZpcmUoXCJkcmFnc3RhcnRcIiksZS5vcHRpb25zLmluZXJ0aWEmJih0aGlzLl9wb3NpdGlvbnM9W10sdGhpcy5fdGltZXM9W10pfSxfb25EcmFnOmZ1bmN0aW9uKHQpe3ZhciBlLGk7dGhpcy5fbWFwLm9wdGlvbnMuaW5lcnRpYSYmKGU9dGhpcy5fbGFzdFRpbWU9K25ldyBEYXRlLGk9dGhpcy5fbGFzdFBvcz10aGlzLl9kcmFnZ2FibGUuX2Fic1Bvc3x8dGhpcy5fZHJhZ2dhYmxlLl9uZXdQb3MsdGhpcy5fcG9zaXRpb25zLnB1c2goaSksdGhpcy5fdGltZXMucHVzaChlKSx0aGlzLl9wcnVuZVBvc2l0aW9ucyhlKSksdGhpcy5fbWFwLmZpcmUoXCJtb3ZlXCIsdCkuZmlyZShcImRyYWdcIix0KX0sX3BydW5lUG9zaXRpb25zOmZ1bmN0aW9uKHQpe2Zvcig7MTx0aGlzLl9wb3NpdGlvbnMubGVuZ3RoJiY1MDx0LXRoaXMuX3RpbWVzWzBdOyl0aGlzLl9wb3NpdGlvbnMuc2hpZnQoKSx0aGlzLl90aW1lcy5zaGlmdCgpfSxfb25ab29tRW5kOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwLmdldFNpemUoKS5kaXZpZGVCeSgyKSxlPXRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQoWzAsMF0pO3RoaXMuX2luaXRpYWxXb3JsZE9mZnNldD1lLnN1YnRyYWN0KHQpLngsdGhpcy5fd29ybGRXaWR0aD10aGlzLl9tYXAuZ2V0UGl4ZWxXb3JsZEJvdW5kcygpLmdldFNpemUoKS54fSxfdmlzY291c0xpbWl0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtKHQtZSkqdGhpcy5fdmlzY29zaXR5fSxfb25QcmVEcmFnTGltaXQ6ZnVuY3Rpb24oKXt2YXIgdCxlO3RoaXMuX3Zpc2Nvc2l0eSYmdGhpcy5fb2Zmc2V0TGltaXQmJih0PXRoaXMuX2RyYWdnYWJsZS5fbmV3UG9zLnN1YnRyYWN0KHRoaXMuX2RyYWdnYWJsZS5fc3RhcnRQb3MpLGU9dGhpcy5fb2Zmc2V0TGltaXQsdC54PGUubWluLngmJih0Lng9dGhpcy5fdmlzY291c0xpbWl0KHQueCxlLm1pbi54KSksdC55PGUubWluLnkmJih0Lnk9dGhpcy5fdmlzY291c0xpbWl0KHQueSxlLm1pbi55KSksdC54PmUubWF4LngmJih0Lng9dGhpcy5fdmlzY291c0xpbWl0KHQueCxlLm1heC54KSksdC55PmUubWF4LnkmJih0Lnk9dGhpcy5fdmlzY291c0xpbWl0KHQueSxlLm1heC55KSksdGhpcy5fZHJhZ2dhYmxlLl9uZXdQb3M9dGhpcy5fZHJhZ2dhYmxlLl9zdGFydFBvcy5hZGQodCkpfSxfb25QcmVEcmFnV3JhcDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3dvcmxkV2lkdGgsZT1NYXRoLnJvdW5kKHQvMiksaT10aGlzLl9pbml0aWFsV29ybGRPZmZzZXQsbj10aGlzLl9kcmFnZ2FibGUuX25ld1Bvcy54LG89KG4tZStpKSV0K2UtaSxuPShuK2UraSkldC1lLWksdD1NYXRoLmFicyhvK2kpPE1hdGguYWJzKG4raSk/bzpuO3RoaXMuX2RyYWdnYWJsZS5fYWJzUG9zPXRoaXMuX2RyYWdnYWJsZS5fbmV3UG9zLmNsb25lKCksdGhpcy5fZHJhZ2dhYmxlLl9uZXdQb3MueD10fSxfb25EcmFnRW5kOmZ1bmN0aW9uKHQpe3ZhciBlLGksbixvLHM9dGhpcy5fbWFwLHI9cy5vcHRpb25zLGE9IXIuaW5lcnRpYXx8dC5ub0luZXJ0aWF8fHRoaXMuX3RpbWVzLmxlbmd0aDwyO3MuZmlyZShcImRyYWdlbmRcIix0KSwhYSYmKHRoaXMuX3BydW5lUG9zaXRpb25zKCtuZXcgRGF0ZSksdD10aGlzLl9sYXN0UG9zLnN1YnRyYWN0KHRoaXMuX3Bvc2l0aW9uc1swXSksYT0odGhpcy5fbGFzdFRpbWUtdGhpcy5fdGltZXNbMF0pLzFlMyxlPXIuZWFzZUxpbmVhcml0eSxhPSh0PXQubXVsdGlwbHlCeShlL2EpKS5kaXN0YW5jZVRvKFswLDBdKSxpPU1hdGgubWluKHIuaW5lcnRpYU1heFNwZWVkLGEpLHQ9dC5tdWx0aXBseUJ5KGkvYSksbj1pLyhyLmluZXJ0aWFEZWNlbGVyYXRpb24qZSksKG89dC5tdWx0aXBseUJ5KC1uLzIpLnJvdW5kKCkpLnh8fG8ueSk/KG89cy5fbGltaXRPZmZzZXQobyxzLm9wdGlvbnMubWF4Qm91bmRzKSx4KGZ1bmN0aW9uKCl7cy5wYW5CeShvLHtkdXJhdGlvbjpuLGVhc2VMaW5lYXJpdHk6ZSxub01vdmVTdGFydDohMCxhbmltYXRlOiEwfSl9KSk6cy5maXJlKFwibW92ZWVuZFwiKX19KSksU3Q9KEEuYWRkSW5pdEhvb2soXCJhZGRIYW5kbGVyXCIsXCJkcmFnZ2luZ1wiLFp0KSxBLm1lcmdlT3B0aW9ucyh7a2V5Ym9hcmQ6ITAsa2V5Ym9hcmRQYW5EZWx0YTo4MH0pLG4uZXh0ZW5kKHtrZXlDb2Rlczp7bGVmdDpbMzddLHJpZ2h0OlszOV0sZG93bjpbNDBdLHVwOlszOF0sem9vbUluOlsxODcsMTA3LDYxLDE3MV0sem9vbU91dDpbMTg5LDEwOSw1NCwxNzNdfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe3RoaXMuX21hcD10LHRoaXMuX3NldFBhbkRlbHRhKHQub3B0aW9ucy5rZXlib2FyZFBhbkRlbHRhKSx0aGlzLl9zZXRab29tRGVsdGEodC5vcHRpb25zLnpvb21EZWx0YSl9LGFkZEhvb2tzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwLl9jb250YWluZXI7dC50YWJJbmRleDw9MCYmKHQudGFiSW5kZXg9XCIwXCIpLFModCx7Zm9jdXM6dGhpcy5fb25Gb2N1cyxibHVyOnRoaXMuX29uQmx1cixtb3VzZWRvd246dGhpcy5fb25Nb3VzZURvd259LHRoaXMpLHRoaXMuX21hcC5vbih7Zm9jdXM6dGhpcy5fYWRkSG9va3MsYmx1cjp0aGlzLl9yZW1vdmVIb29rc30sdGhpcyl9LHJlbW92ZUhvb2tzOmZ1bmN0aW9uKCl7dGhpcy5fcmVtb3ZlSG9va3MoKSxrKHRoaXMuX21hcC5fY29udGFpbmVyLHtmb2N1czp0aGlzLl9vbkZvY3VzLGJsdXI6dGhpcy5fb25CbHVyLG1vdXNlZG93bjp0aGlzLl9vbk1vdXNlRG93bn0sdGhpcyksdGhpcy5fbWFwLm9mZih7Zm9jdXM6dGhpcy5fYWRkSG9va3MsYmx1cjp0aGlzLl9yZW1vdmVIb29rc30sdGhpcyl9LF9vbk1vdXNlRG93bjpmdW5jdGlvbigpe3ZhciB0LGUsaTt0aGlzLl9mb2N1c2VkfHwoaT1kb2N1bWVudC5ib2R5LHQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGU9aS5zY3JvbGxUb3B8fHQuc2Nyb2xsVG9wLGk9aS5zY3JvbGxMZWZ0fHx0LnNjcm9sbExlZnQsdGhpcy5fbWFwLl9jb250YWluZXIuZm9jdXMoKSx3aW5kb3cuc2Nyb2xsVG8oaSxlKSl9LF9vbkZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5fZm9jdXNlZD0hMCx0aGlzLl9tYXAuZmlyZShcImZvY3VzXCIpfSxfb25CbHVyOmZ1bmN0aW9uKCl7dGhpcy5fZm9jdXNlZD0hMSx0aGlzLl9tYXAuZmlyZShcImJsdXJcIil9LF9zZXRQYW5EZWx0YTpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fcGFuS2V5cz17fSxpPXRoaXMua2V5Q29kZXMsbj0wLG89aS5sZWZ0Lmxlbmd0aDtuPG87bisrKWVbaS5sZWZ0W25dXT1bLTEqdCwwXTtmb3Iobj0wLG89aS5yaWdodC5sZW5ndGg7bjxvO24rKyllW2kucmlnaHRbbl1dPVt0LDBdO2ZvcihuPTAsbz1pLmRvd24ubGVuZ3RoO248bztuKyspZVtpLmRvd25bbl1dPVswLHRdO2ZvcihuPTAsbz1pLnVwLmxlbmd0aDtuPG87bisrKWVbaS51cFtuXV09WzAsLTEqdF19LF9zZXRab29tRGVsdGE6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX3pvb21LZXlzPXt9LGk9dGhpcy5rZXlDb2RlcyxuPTAsbz1pLnpvb21Jbi5sZW5ndGg7bjxvO24rKyllW2kuem9vbUluW25dXT10O2ZvcihuPTAsbz1pLnpvb21PdXQubGVuZ3RoO248bztuKyspZVtpLnpvb21PdXRbbl1dPS10fSxfYWRkSG9va3M6ZnVuY3Rpb24oKXtTKGRvY3VtZW50LFwia2V5ZG93blwiLHRoaXMuX29uS2V5RG93bix0aGlzKX0sX3JlbW92ZUhvb2tzOmZ1bmN0aW9uKCl7ayhkb2N1bWVudCxcImtleWRvd25cIix0aGlzLl9vbktleURvd24sdGhpcyl9LF9vbktleURvd246ZnVuY3Rpb24odCl7aWYoISh0LmFsdEtleXx8dC5jdHJsS2V5fHx0Lm1ldGFLZXkpKXt2YXIgZSxpLG49dC5rZXlDb2RlLG89dGhpcy5fbWFwO2lmKG4gaW4gdGhpcy5fcGFuS2V5cylvLl9wYW5BbmltJiZvLl9wYW5BbmltLl9pblByb2dyZXNzfHwoaT10aGlzLl9wYW5LZXlzW25dLHQuc2hpZnRLZXkmJihpPW0oaSkubXVsdGlwbHlCeSgzKSksby5vcHRpb25zLm1heEJvdW5kcyYmKGk9by5fbGltaXRPZmZzZXQobShpKSxvLm9wdGlvbnMubWF4Qm91bmRzKSksby5vcHRpb25zLndvcmxkQ29weUp1bXA/KGU9by53cmFwTGF0TG5nKG8udW5wcm9qZWN0KG8ucHJvamVjdChvLmdldENlbnRlcigpKS5hZGQoaSkpKSxvLnBhblRvKGUpKTpvLnBhbkJ5KGkpKTtlbHNlIGlmKG4gaW4gdGhpcy5fem9vbUtleXMpby5zZXRab29tKG8uZ2V0Wm9vbSgpKyh0LnNoaWZ0S2V5PzM6MSkqdGhpcy5fem9vbUtleXNbbl0pO2Vsc2V7aWYoMjchPT1ufHwhby5fcG9wdXB8fCFvLl9wb3B1cC5vcHRpb25zLmNsb3NlT25Fc2NhcGVLZXkpcmV0dXJuO28uY2xvc2VQb3B1cCgpfVJlKHQpfX19KSksRXQ9KEEuYWRkSW5pdEhvb2soXCJhZGRIYW5kbGVyXCIsXCJrZXlib2FyZFwiLFN0KSxBLm1lcmdlT3B0aW9ucyh7c2Nyb2xsV2hlZWxab29tOiEwLHdoZWVsRGVib3VuY2VUaW1lOjQwLHdoZWVsUHhQZXJab29tTGV2ZWw6NjB9KSxuLmV4dGVuZCh7YWRkSG9va3M6ZnVuY3Rpb24oKXtTKHRoaXMuX21hcC5fY29udGFpbmVyLFwid2hlZWxcIix0aGlzLl9vbldoZWVsU2Nyb2xsLHRoaXMpLHRoaXMuX2RlbHRhPTB9LHJlbW92ZUhvb2tzOmZ1bmN0aW9uKCl7ayh0aGlzLl9tYXAuX2NvbnRhaW5lcixcIndoZWVsXCIsdGhpcy5fb25XaGVlbFNjcm9sbCx0aGlzKX0sX29uV2hlZWxTY3JvbGw6ZnVuY3Rpb24odCl7dmFyIGU9SGUodCksaT10aGlzLl9tYXAub3B0aW9ucy53aGVlbERlYm91bmNlVGltZSxlPSh0aGlzLl9kZWx0YSs9ZSx0aGlzLl9sYXN0TW91c2VQb3M9dGhpcy5fbWFwLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KHQpLHRoaXMuX3N0YXJ0VGltZXx8KHRoaXMuX3N0YXJ0VGltZT0rbmV3IERhdGUpLE1hdGgubWF4KGktKCtuZXcgRGF0ZS10aGlzLl9zdGFydFRpbWUpLDApKTtjbGVhclRpbWVvdXQodGhpcy5fdGltZXIpLHRoaXMuX3RpbWVyPXNldFRpbWVvdXQoYSh0aGlzLl9wZXJmb3JtWm9vbSx0aGlzKSxlKSxSZSh0KX0sX3BlcmZvcm1ab29tOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwLGU9dC5nZXRab29tKCksaT10aGlzLl9tYXAub3B0aW9ucy56b29tU25hcHx8MCxuPSh0Ll9zdG9wKCksdGhpcy5fZGVsdGEvKDQqdGhpcy5fbWFwLm9wdGlvbnMud2hlZWxQeFBlclpvb21MZXZlbCkpLG49NCpNYXRoLmxvZygyLygxK01hdGguZXhwKC1NYXRoLmFicyhuKSkpKS9NYXRoLkxOMixpPWk/TWF0aC5jZWlsKG4vaSkqaTpuLG49dC5fbGltaXRab29tKGUrKDA8dGhpcy5fZGVsdGE/aTotaSkpLWU7dGhpcy5fZGVsdGE9MCx0aGlzLl9zdGFydFRpbWU9bnVsbCxuJiYoXCJjZW50ZXJcIj09PXQub3B0aW9ucy5zY3JvbGxXaGVlbFpvb20/dC5zZXRab29tKGUrbik6dC5zZXRab29tQXJvdW5kKHRoaXMuX2xhc3RNb3VzZVBvcyxlK24pKX19KSksa3Q9KEEuYWRkSW5pdEhvb2soXCJhZGRIYW5kbGVyXCIsXCJzY3JvbGxXaGVlbFpvb21cIixFdCksQS5tZXJnZU9wdGlvbnMoe3RhcEhvbGQ6Yi50b3VjaE5hdGl2ZSYmYi5zYWZhcmkmJmIubW9iaWxlLHRhcFRvbGVyYW5jZToxNX0pLG4uZXh0ZW5kKHthZGRIb29rczpmdW5jdGlvbigpe1ModGhpcy5fbWFwLl9jb250YWluZXIsXCJ0b3VjaHN0YXJ0XCIsdGhpcy5fb25Eb3duLHRoaXMpfSxyZW1vdmVIb29rczpmdW5jdGlvbigpe2sodGhpcy5fbWFwLl9jb250YWluZXIsXCJ0b3VjaHN0YXJ0XCIsdGhpcy5fb25Eb3duLHRoaXMpfSxfb25Eb3duOmZ1bmN0aW9uKHQpe3ZhciBlO2NsZWFyVGltZW91dCh0aGlzLl9ob2xkVGltZW91dCksMT09PXQudG91Y2hlcy5sZW5ndGgmJihlPXQudG91Y2hlc1swXSx0aGlzLl9zdGFydFBvcz10aGlzLl9uZXdQb3M9bmV3IHAoZS5jbGllbnRYLGUuY2xpZW50WSksdGhpcy5faG9sZFRpbWVvdXQ9c2V0VGltZW91dChhKGZ1bmN0aW9uKCl7dGhpcy5fY2FuY2VsKCksdGhpcy5faXNUYXBWYWxpZCgpJiYoUyhkb2N1bWVudCxcInRvdWNoZW5kXCIsTyksUyhkb2N1bWVudCxcInRvdWNoZW5kIHRvdWNoY2FuY2VsXCIsdGhpcy5fY2FuY2VsQ2xpY2tQcmV2ZW50KSx0aGlzLl9zaW11bGF0ZUV2ZW50KFwiY29udGV4dG1lbnVcIixlKSl9LHRoaXMpLDYwMCksUyhkb2N1bWVudCxcInRvdWNoZW5kIHRvdWNoY2FuY2VsIGNvbnRleHRtZW51XCIsdGhpcy5fY2FuY2VsLHRoaXMpLFMoZG9jdW1lbnQsXCJ0b3VjaG1vdmVcIix0aGlzLl9vbk1vdmUsdGhpcykpfSxfY2FuY2VsQ2xpY2tQcmV2ZW50OmZ1bmN0aW9uIHQoKXtrKGRvY3VtZW50LFwidG91Y2hlbmRcIixPKSxrKGRvY3VtZW50LFwidG91Y2hlbmQgdG91Y2hjYW5jZWxcIix0KX0sX2NhbmNlbDpmdW5jdGlvbigpe2NsZWFyVGltZW91dCh0aGlzLl9ob2xkVGltZW91dCksayhkb2N1bWVudCxcInRvdWNoZW5kIHRvdWNoY2FuY2VsIGNvbnRleHRtZW51XCIsdGhpcy5fY2FuY2VsLHRoaXMpLGsoZG9jdW1lbnQsXCJ0b3VjaG1vdmVcIix0aGlzLl9vbk1vdmUsdGhpcyl9LF9vbk1vdmU6ZnVuY3Rpb24odCl7dD10LnRvdWNoZXNbMF07dGhpcy5fbmV3UG9zPW5ldyBwKHQuY2xpZW50WCx0LmNsaWVudFkpfSxfaXNUYXBWYWxpZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9uZXdQb3MuZGlzdGFuY2VUbyh0aGlzLl9zdGFydFBvcyk8PXRoaXMuX21hcC5vcHRpb25zLnRhcFRvbGVyYW5jZX0sX3NpbXVsYXRlRXZlbnQ6ZnVuY3Rpb24odCxlKXt0PW5ldyBNb3VzZUV2ZW50KHQse2J1YmJsZXM6ITAsY2FuY2VsYWJsZTohMCx2aWV3OndpbmRvdyxzY3JlZW5YOmUuc2NyZWVuWCxzY3JlZW5ZOmUuc2NyZWVuWSxjbGllbnRYOmUuY2xpZW50WCxjbGllbnRZOmUuY2xpZW50WX0pO3QuX3NpbXVsYXRlZD0hMCxlLnRhcmdldC5kaXNwYXRjaEV2ZW50KHQpfX0pKSxPdD0oQS5hZGRJbml0SG9vayhcImFkZEhhbmRsZXJcIixcInRhcEhvbGRcIixrdCksQS5tZXJnZU9wdGlvbnMoe3RvdWNoWm9vbTpiLnRvdWNoLGJvdW5jZUF0Wm9vbUxpbWl0czohMH0pLG4uZXh0ZW5kKHthZGRIb29rczpmdW5jdGlvbigpe00odGhpcy5fbWFwLl9jb250YWluZXIsXCJsZWFmbGV0LXRvdWNoLXpvb21cIiksUyh0aGlzLl9tYXAuX2NvbnRhaW5lcixcInRvdWNoc3RhcnRcIix0aGlzLl9vblRvdWNoU3RhcnQsdGhpcyl9LHJlbW92ZUhvb2tzOmZ1bmN0aW9uKCl7eih0aGlzLl9tYXAuX2NvbnRhaW5lcixcImxlYWZsZXQtdG91Y2gtem9vbVwiKSxrKHRoaXMuX21hcC5fY29udGFpbmVyLFwidG91Y2hzdGFydFwiLHRoaXMuX29uVG91Y2hTdGFydCx0aGlzKX0sX29uVG91Y2hTdGFydDpmdW5jdGlvbih0KXt2YXIgZSxpLG49dGhpcy5fbWFwOyF0LnRvdWNoZXN8fDIhPT10LnRvdWNoZXMubGVuZ3RofHxuLl9hbmltYXRpbmdab29tfHx0aGlzLl96b29taW5nfHwoZT1uLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KHQudG91Y2hlc1swXSksaT1uLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KHQudG91Y2hlc1sxXSksdGhpcy5fY2VudGVyUG9pbnQ9bi5nZXRTaXplKCkuX2RpdmlkZUJ5KDIpLHRoaXMuX3N0YXJ0TGF0TG5nPW4uY29udGFpbmVyUG9pbnRUb0xhdExuZyh0aGlzLl9jZW50ZXJQb2ludCksXCJjZW50ZXJcIiE9PW4ub3B0aW9ucy50b3VjaFpvb20mJih0aGlzLl9waW5jaFN0YXJ0TGF0TG5nPW4uY29udGFpbmVyUG9pbnRUb0xhdExuZyhlLmFkZChpKS5fZGl2aWRlQnkoMikpKSx0aGlzLl9zdGFydERpc3Q9ZS5kaXN0YW5jZVRvKGkpLHRoaXMuX3N0YXJ0Wm9vbT1uLmdldFpvb20oKSx0aGlzLl9tb3ZlZD0hMSx0aGlzLl96b29taW5nPSEwLG4uX3N0b3AoKSxTKGRvY3VtZW50LFwidG91Y2htb3ZlXCIsdGhpcy5fb25Ub3VjaE1vdmUsdGhpcyksUyhkb2N1bWVudCxcInRvdWNoZW5kIHRvdWNoY2FuY2VsXCIsdGhpcy5fb25Ub3VjaEVuZCx0aGlzKSxPKHQpKX0sX29uVG91Y2hNb3ZlOmZ1bmN0aW9uKHQpe2lmKHQudG91Y2hlcyYmMj09PXQudG91Y2hlcy5sZW5ndGgmJnRoaXMuX3pvb21pbmcpe3ZhciBlPXRoaXMuX21hcCxpPWUubW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQodC50b3VjaGVzWzBdKSxuPWUubW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQodC50b3VjaGVzWzFdKSxvPWkuZGlzdGFuY2VUbyhuKS90aGlzLl9zdGFydERpc3Q7aWYodGhpcy5fem9vbT1lLmdldFNjYWxlWm9vbShvLHRoaXMuX3N0YXJ0Wm9vbSksIWUub3B0aW9ucy5ib3VuY2VBdFpvb21MaW1pdHMmJih0aGlzLl96b29tPGUuZ2V0TWluWm9vbSgpJiZvPDF8fHRoaXMuX3pvb20+ZS5nZXRNYXhab29tKCkmJjE8bykmJih0aGlzLl96b29tPWUuX2xpbWl0Wm9vbSh0aGlzLl96b29tKSksXCJjZW50ZXJcIj09PWUub3B0aW9ucy50b3VjaFpvb20pe2lmKHRoaXMuX2NlbnRlcj10aGlzLl9zdGFydExhdExuZywxPT1vKXJldHVybn1lbHNle2k9aS5fYWRkKG4pLl9kaXZpZGVCeSgyKS5fc3VidHJhY3QodGhpcy5fY2VudGVyUG9pbnQpO2lmKDE9PW8mJjA9PT1pLngmJjA9PT1pLnkpcmV0dXJuO3RoaXMuX2NlbnRlcj1lLnVucHJvamVjdChlLnByb2plY3QodGhpcy5fcGluY2hTdGFydExhdExuZyx0aGlzLl96b29tKS5zdWJ0cmFjdChpKSx0aGlzLl96b29tKX10aGlzLl9tb3ZlZHx8KGUuX21vdmVTdGFydCghMCwhMSksdGhpcy5fbW92ZWQ9ITApLHIodGhpcy5fYW5pbVJlcXVlc3QpO249YShlLl9tb3ZlLGUsdGhpcy5fY2VudGVyLHRoaXMuX3pvb20se3BpbmNoOiEwLHJvdW5kOiExfSx2b2lkIDApO3RoaXMuX2FuaW1SZXF1ZXN0PXgobix0aGlzLCEwKSxPKHQpfX0sX29uVG91Y2hFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9tb3ZlZCYmdGhpcy5fem9vbWluZz8odGhpcy5fem9vbWluZz0hMSxyKHRoaXMuX2FuaW1SZXF1ZXN0KSxrKGRvY3VtZW50LFwidG91Y2htb3ZlXCIsdGhpcy5fb25Ub3VjaE1vdmUsdGhpcyksayhkb2N1bWVudCxcInRvdWNoZW5kIHRvdWNoY2FuY2VsXCIsdGhpcy5fb25Ub3VjaEVuZCx0aGlzKSx0aGlzLl9tYXAub3B0aW9ucy56b29tQW5pbWF0aW9uP3RoaXMuX21hcC5fYW5pbWF0ZVpvb20odGhpcy5fY2VudGVyLHRoaXMuX21hcC5fbGltaXRab29tKHRoaXMuX3pvb20pLCEwLHRoaXMuX21hcC5vcHRpb25zLnpvb21TbmFwKTp0aGlzLl9tYXAuX3Jlc2V0Vmlldyh0aGlzLl9jZW50ZXIsdGhpcy5fbWFwLl9saW1pdFpvb20odGhpcy5fem9vbSkpKTp0aGlzLl96b29taW5nPSExfX0pKSxYaT0oQS5hZGRJbml0SG9vayhcImFkZEhhbmRsZXJcIixcInRvdWNoWm9vbVwiLE90KSxBLkJveFpvb209X3QsQS5Eb3VibGVDbGlja1pvb209Q3QsQS5EcmFnPVp0LEEuS2V5Ym9hcmQ9U3QsQS5TY3JvbGxXaGVlbFpvb209RXQsQS5UYXBIb2xkPWt0LEEuVG91Y2hab29tPU90LHQuQm91bmRzPWYsdC5Ccm93c2VyPWIsdC5DUlM9b3QsdC5DYW52YXM9RmksdC5DaXJjbGU9dmksdC5DaXJjbGVNYXJrZXI9Z2ksdC5DbGFzcz1ldCx0LkNvbnRyb2w9Qix0LkRpdkljb249UmksdC5EaXZPdmVybGF5PUFpLHQuRG9tRXZlbnQ9bXQsdC5Eb21VdGLSDkPXB0LHQuRHJhZ2dhYmxlPVhlLHQuRXZlbnRlZD1pdCx0LkZlYXR1cmVHcm91cD1jaSx0Lkdlb0pTT049d2ksdC5HcmlkTGF5ZXI9TmksdC5IYW5kbGVyPW4sdC5JY29uPWRpLHQuSW1hZ2VPdmVybGF5PUVpLHQuTGF0TG5nPXYsdC5MYXRMbmdCb3VuZHM9cyx0LkxheWVyPW8sdC5MYXllckdyb3VwPXVpLHQuTGluZVV0aWw9dnQsdC5NYXA9QSx0Lk1hcmtlcj1taSx0Lk1peGluPWZ0LHQuUGF0aD1maSx0LlBvaW50PXAsdC5Qb2x5VXRpbD1ndCx0LlBvbHlnb249eGksdC5Qb2x5bGluZT15aSx0LlBvcHVwPUJpLHQuUG9zQW5pbWF0aW9uPUZlLHQuUHJvamVjdGlvbj13dCx0LlJlY3RhbmdsZT1ZaSx0LlJlbmRlcmVyPVdpLHQuU1ZHPUdpLHQuU1ZHT3ZlcmxheT1PaSx0LlRpbGVMYXllcj1EaSx0LlRvb2x0aXA9SWksdC5UcmFuc2Zvcm1hdGlvbj1hdCx0LlV0aWw9dHQsdC5WaWRlb092ZXJsYXk9a2ksdC5iaW5kPWEsdC5ib3VuZHM9Xyx0LmNhbnZhcz1VaSx0LmNpcmNsZT1mdW5jdGlvbih0LGUsaSl7cmV0dXJuIG5ldyB2aSh0LGUsaSl9LHQuY2lyY2xlTWFya2VyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBnaSh0LGUpfSx0LmNvbnRyb2w9VWUsdC5kaXZJY29uPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgUmkodCl9LHQuZXh0ZW5kPWwsdC5mZWF0dXJlR3JvdXA9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IGNpKHQsZSl9LHQuZ2VvSlNPTj1TaSx0Lmdlb0pzb249TXQsdC5ncmlkTGF5ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBOaSh0KX0sdC5pY29uPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZGkodCl9LHQuaW1hZ2VPdmVybGF5PWZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gbmV3IEVpKHQsZSxpKX0sdC5sYXRMbmc9dyx0LmxhdExuZ0JvdW5kcz1nLHQubGF5ZXJHcm91cD1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgdWkodCxlKX0sdC5tYXA9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IEEodCxlKX0sdC5tYXJrZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IG1pKHQsZSl9LHQucG9pbnQ9bSx0LnBvbHlnb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IHhpKHQsZSl9LHQucG9seWxpbmU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IHlpKHQsZSl9LHQucG9wdXA9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IEJpKHQsZSl9LHQucmVjdGFuZ2xlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBZaSh0LGUpfSx0LnNldE9wdGlvbnM9Yyx0LnN0YW1wPWgsdC5zdmc9S2ksdC5zdmdPdmVybGF5PWZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gbmV3IE9pKHQsZSxpKX0sdC50aWxlTGF5ZXI9amksdC50b29sdGlwPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBJaSh0LGUpfSx0LnRyYW5zZm9ybWF0aW9uPWh0LHQudmVyc2lvbj1cIjEuOS40XCIsdC52aWRlb092ZXJsYXk9ZnVuY3Rpb24odCxlLGkpe3JldHVybiBuZXcga2kodCxlLGkpfSx3aW5kb3cuTCk7dC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5MPVhpLHRoaXN9LHdpbmRvdy5MPXR9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxlYWZsZXQuanMubWFwIl0sIm5hbWVzIjpbInQiLCJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImRlZmluZSIsImFtZCIsImdsb2JhbFRoaXMiLCJzZWxmIiwibGVhZmxldCIsImwiLCJpIiwibiIsIm8iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJSIiwiT2JqZWN0IiwiY3JlYXRlIiwiTiIsInByb3RvdHlwZSIsImEiLCJBcnJheSIsInNsaWNlIiwiYmluZCIsImFwcGx5IiwiY2FsbCIsImNvbmNhdCIsIkQiLCJoIiwiX2xlYWZsZXRfaWQiLCJqIiwicyIsInIiLCJzZXRUaW1lb3V0IiwiSCIsInUiLCJNYXRoIiwicG93Iiwicm91bmQiLCJXIiwidHJpbSIsInJlcGxhY2UiLCJGIiwic3BsaXQiLCJjIiwiaGFzT3duUHJvcGVydHkiLCJvcHRpb25zIiwiVSIsInB1c2giLCJlbmNvZGVVUklDb21wb25lbnQiLCJ0b1VwcGVyQ2FzZSIsImluZGV4T2YiLCJqb2luIiwiViIsInEiLCJFcnJvciIsImQiLCJpc0FycmF5IiwidG9TdHJpbmciLCJHIiwiSyIsIlkiLCJ3aW5kb3ciLCJYIiwiSiIsIkRhdGUiLCJtYXgiLCIkIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiUSIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwiY2xlYXJUaW1lb3V0IiwieCIsInR0IiwiX19wcm90b19fIiwiZXh0ZW5kIiwibGFzdElkIiwic3RhbXAiLCJ0aHJvdHRsZSIsIndyYXBOdW0iLCJmYWxzZUZuIiwiZm9ybWF0TnVtIiwic3BsaXRXb3JkcyIsInNldE9wdGlvbnMiLCJnZXRQYXJhbVN0cmluZyIsInRlbXBsYXRlIiwiZW1wdHlJbWFnZVVybCIsInJlcXVlc3RGbiIsImNhbmNlbEZuIiwicmVxdWVzdEFuaW1GcmFtZSIsImNhbmNlbEFuaW1GcmFtZSIsImV0IiwiaW5pdGlhbGl6ZSIsImNhbGxJbml0SG9va3MiLCJfX3N1cGVyX18iLCJjb25zdHJ1Y3RvciIsInN0YXRpY3MiLCJpbmNsdWRlcyIsIkwiLCJNaXhpbiIsIkV2ZW50cyIsImNvbnNvbGUiLCJ3YXJuIiwic3RhY2siLCJfaW5pdEhvb2tzIiwiX2luaXRIb29rc0NhbGxlZCIsImluY2x1ZGUiLCJtZXJnZU9wdGlvbnMiLCJhZGRJbml0SG9vayIsIm9uIiwiX29uIiwib2ZmIiwiX29mZiIsIl9ldmVudHMiLCJfbGlzdGVucyIsImZuIiwiY3R4Iiwib25jZSIsIl9maXJpbmdDb3VudCIsInNwbGljZSIsImZpcmUiLCJsaXN0ZW5zIiwidHlwZSIsInRhcmdldCIsInNvdXJjZVRhcmdldCIsIl9wcm9wYWdhdGVFdmVudCIsIl9ldmVudFBhcmVudHMiLCJhZGRFdmVudFBhcmVudCIsInJlbW92ZUV2ZW50UGFyZW50IiwibGF5ZXIiLCJwcm9wYWdhdGVkRnJvbSIsIml0IiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJjbGVhckFsbEV2ZW50TGlzdGVuZXJzIiwiYWRkT25lVGltZUV2ZW50TGlzdGVuZXIiLCJmaXJlRXZlbnQiLCJoYXNFdmVudExpc3RlbmVycyIsInAiLCJ5IiwibnQiLCJ0cnVuYyIsImZsb29yIiwiY2VpbCIsIm0iLCJmIiwiXyIsImciLCJ2IiwiaXNOYU4iLCJsYXQiLCJsbmciLCJhbHQiLCJ3IiwibG9uIiwiY2xvbmUiLCJhZGQiLCJfYWRkIiwic3VidHJhY3QiLCJfc3VidHJhY3QiLCJkaXZpZGVCeSIsIl9kaXZpZGVCeSIsIm11bHRpcGx5QnkiLCJfbXVsdGlwbHlCeSIsInNjYWxlQnkiLCJ1bnNjYWxlQnkiLCJfcm91bmQiLCJfZmxvb3IiLCJfY2VpbCIsIl90cnVuYyIsImRpc3RhbmNlVG8iLCJzcXJ0IiwiZXF1YWxzIiwiY29udGFpbnMiLCJhYnMiLCJtaW4iLCJnZXRDZW50ZXIiLCJnZXRCb3R0b21MZWZ0IiwiZ2V0VG9wUmlnaHQiLCJnZXRUb3BMZWZ0IiwiZ2V0Qm90dG9tUmlnaHQiLCJnZXRTaXplIiwiaW50ZXJzZWN0cyIsIm92ZXJsYXBzIiwiaXNWYWxpZCIsInBhZCIsIl9zb3V0aFdlc3QiLCJfbm9ydGhFYXN0IiwiZ2V0U291dGhXZXN0IiwiZ2V0Tm9ydGhFYXN0IiwiZ2V0Tm9ydGhXZXN0IiwiZ2V0Tm9ydGgiLCJnZXRXZXN0IiwiZ2V0U291dGhFYXN0IiwiZ2V0U291dGgiLCJnZXRFYXN0IiwidG9CQm94U3RyaW5nIiwib3QiLCJsYXRMbmdUb1BvaW50IiwicHJvamVjdGlvbiIsInByb2plY3QiLCJzY2FsZSIsInRyYW5zZm9ybWF0aW9uIiwiX3RyYW5zZm9ybSIsInBvaW50VG9MYXRMbmciLCJ1bnRyYW5zZm9ybSIsInVucHJvamVjdCIsInpvb20iLCJsb2ciLCJMTjIiLCJnZXRQcm9qZWN0ZWRCb3VuZHMiLCJpbmZpbml0ZSIsImJvdW5kcyIsInRyYW5zZm9ybSIsInN0IiwiZGlzdGFuY2UiLCJ3cmFwIiwid3JhcExhdExuZyIsInRvQm91bmRzIiwiY29zIiwiUEkiLCJ3cmFwTG5nIiwid3JhcExhdCIsIndyYXBMYXRMbmdCb3VuZHMiLCJzaW4iLCJhdGFuMiIsInJ0IiwiTUFYX0xBVElUVURFIiwiYXRhbiIsImV4cCIsImF0IiwiX2EiLCJfYiIsIl9jIiwiX2QiLCJodCIsImx0IiwiY29kZSIsInV0IiwiY3QiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnROUyIsImR0IiwiYiIsInN2ZyIsIl90IiwiZG9jdW1lbnRFbGVtZW50Iiwic3R5bGUiLCJwdCIsIm10IiwibmF2aWdhdG9yIiwiZnQiLCJndCIsInZ0IiwieXQiLCJwYXJzZUludCIsImV4ZWMiLCJ1c2VyQWdlbnQiLCJ4dCIsIm9wZXJhIiwid3QiLCJidCIsIlB0IiwiTHQiLCJUdCIsInBsYXRmb3JtIiwiTXQiLCJ6dCIsIldlYktpdENTU01hdHJpeCIsIkN0IiwiTF9ESVNBQkxFXzNEIiwiWnQiLCJvcmllbnRhdGlvbiIsIlN0IiwiRXQiLCJrdCIsIlBvaW50ZXJFdmVudCIsIk1TUG9pbnRlckV2ZW50IiwiT3QiLCJBdCIsIlRvdWNoRXZlbnQiLCJCdCIsIkxfTk9fVE9VQ0giLCJJdCIsIlJ0IiwiTnQiLCJkZXZpY2VQaXhlbFJhdGlvIiwic2NyZWVuIiwiZGV2aWNlWERQSSIsImxvZ2ljYWxYRFBJIiwiRHQiLCJkZWZpbmVQcm9wZXJ0eSIsImdldCIsImp0IiwiY3JlYXRlRWxlbWVudCIsImdldENvbnRleHQiLCJIdCIsImNyZWF0ZVNWR1JlY3QiLCJXdCIsImlubmVySFRNTCIsImZpcnN0Q2hpbGQiLCJuYW1lc3BhY2VVUkkiLCJ0b0xvd2VyQ2FzZSIsImllIiwiaWVsdDkiLCJlZGdlIiwid2Via2l0IiwiYW5kcm9pZCIsImFuZHJvaWQyMyIsImFuZHJvaWRTdG9jayIsImNocm9tZSIsImdlY2tvIiwic2FmYXJpIiwicGhhbnRvbSIsIm9wZXJhMTIiLCJ3aW4iLCJpZTNkIiwid2Via2l0M2QiLCJnZWNrbzNkIiwiYW55M2QiLCJtb2JpbGUiLCJtb2JpbGVXZWJraXQiLCJtb2JpbGVXZWJraXQzZCIsIm1zUG9pbnRlciIsInBvaW50ZXIiLCJ0b3VjaCIsInRvdWNoTmF0aXZlIiwibW9iaWxlT3BlcmEiLCJtb2JpbGVHZWNrbyIsInJldGluYSIsInBhc3NpdmVFdmVudHMiLCJjYW52YXMiLCJ2bWwiLCJiZWhhdmlvciIsImFkaiIsImlubGluZVN2ZyIsIm1hYyIsImxpbnV4IiwiRnQiLCJVdCIsIlZ0IiwicXQiLCJHdCIsInRvdWNoc3RhcnQiLCJ0b3VjaG1vdmUiLCJ0b3VjaGVuZCIsInRvdWNoY2FuY2VsIiwiS3QiLCJNU1BPSU5URVJfVFlQRV9UT1VDSCIsInBvaW50ZXJUeXBlIiwiTyIsImVlIiwiWXQiLCJYdCIsIkp0IiwiJHQiLCJRdCIsInRlIiwicG9pbnRlcklkIiwiTVNQT0lOVEVSX1RZUEVfTU9VU0UiLCJ0b3VjaGVzIiwiY2hhbmdlZFRvdWNoZXMiLCJuZSIsImRldGFpbCIsInNvdXJjZUNhcGFiaWxpdGllcyIsImZpcmVzVG91Y2hFdmVudHMiLCJOZSIsInNvbWUiLCJIVE1MTGFiZWxFbGVtZW50IiwiYXR0cmlidXRlcyIsImZvciIsIkhUTUxJbnB1dEVsZW1lbnQiLCJIVE1MU2VsZWN0RWxlbWVudCIsIm5vdyIsImlzVHJ1c3RlZCIsIl9zaW11bGF0ZWQiLCJkYmxjbGljayIsInNpbURibGNsaWNrIiwib2UiLCJzZSIsInJlIiwiYWUiLCJoZSIsImxlIiwidWUiLCJ3ZSIsImNlIiwiZGUiLCJfZSIsImdldEVsZW1lbnRCeUlkIiwicGUiLCJjdXJyZW50U3R5bGUiLCJkZWZhdWx0VmlldyIsImdldENvbXB1dGVkU3R5bGUiLCJQIiwiY2xhc3NOYW1lIiwiYXBwZW5kQ2hpbGQiLCJUIiwicGFyZW50Tm9kZSIsInJlbW92ZUNoaWxkIiwibWUiLCJmZSIsImxhc3RDaGLSDkZCIsImdlIiwiaW5zZXJ0QmVmb3JlIiwidmUiLCJjbGFzc0xpc3QiLCJ4ZSIsIlJlZ0V4cCIsInRlc3QiLCJNIiwieWUiLCJ6IiwicmVtb3ZlIiwiYmFzZVZhbCIsImNvcnJlc3BvbmRpbmdFbGVtZW50IiwiQyIsIm9wYWNpdHkiLCJmaWx0ZXJzIiwiaXRlbSIsIkVuYWJsZWQiLCJPcGFjaXR5IiwiZmlsdGVyIiwiYmUiLCJaIiwiX2xlYWZsZXRfcG9zIiwibGVmdCIsInRvcCIsIlBlIiwiTGUiLCJTIiwiVGUiLCJrIiwiTWUiLCJ0YWJJbmRleCIsInplIiwib3V0bGluZVN0eWxlIiwiQ2UiLCJvZmZzZXRXaWR0aCIsIm9mZnNldEhlaWdodCIsImJvZHkiLCJaZSIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsIndpZHRoIiwiaGVpZ2h0IiwiYm91bmRpbmdDbGllbnRSZWN0IiwiVFJBTlNGT1JNIiwiVFJBTlNJVElPTiIsIlRSQU5TSVRJT05fRU5EIiwiZ2V0U3R5bGUiLCJlbXB0eSIsInRvRnJvbnQiLCJ0b0JhY2siLCJoYXNDbGFzcyIsImFkZENsYXNzIiwicmVtb3ZlQ2xhc3MiLCJzZXRDbGFzcyIsImdldENsYXNzIiwic2V0T3BhY2l0eSIsInRlc3RQcm9wIiwic2V0VHJhbnNmb3JtIiwic2V0UG9zaXRpb24iLCJnZXRQb3NpdGlvbiIsImRpc2FibGVUZXh0U2VsZWN0aW9uIiwiZW5hYmxlVGV4dFNlbGVjdGlvbiIsImRpc2FibGVJbWFnZURyYWciLCJlbmFibGVJbWFnZURyYWciLCJwcmV2ZW50T3V0bGluZSIsInJlc3RvcmVPdXRsaW5lIiwiZ2V0U2l6ZWRQYXJlbnROb2RlIiwiZ2V0U2NhbGUiLCJrZSIsIkUiLCJTZSIsIk9lIiwiRWUiLCJtb3VzZWVudGVyIiwibW91c2VsZWF2ZSIsIndoZWVsIiwiZXZlbnQiLCJwYXNzaXZlIiwiV2UiLCJhdHRhY2hFdmVudCIsImRldGFjaEV2ZW50IiwiQWUiLCJzdG9wUHJvcGFnYXRpb24iLCJvcmlnaW5hbEV2ZW50IiwiX3N0b3BwZWQiLCJjYW5jZWxCdWJibGUiLCJCZSIsIkllIiwiX2xlYWZsZXRfZGlzYWJsZV9jbGljayIsInByZXZlbnREZWZhdWx0IiwicmV0dXJuVmFsdWUiLCJSZSIsImNvbXBvc2VkUGF0aCIsIkRlIiwiY2xpZW50WCIsImNsaWVudExlZnQiLCJjbGllbnRZIiwiY2xpZW50VG9wIiwiamUiLCJIZSIsIndoZWVsRGVsdGFZIiwiZGVsdGFZIiwiZGVsdGFNb2RlIiwiZGVsdGFYIiwiZGVsdGFaIiwid2hlZWxEZWx0YSIsInJlbGF0ZWRUYXJnZXQiLCJkaXNhYmxlU2Nyb2xsUHJvcGFnYXRpb24iLCJkaXNhYmxlQ2xpY2tQcm9wYWdhdGlvbiIsInN0b3AiLCJnZXRQcm9wYWdhdGlvblBhdGgiLCJnZXRNb3VzZVBvc2l0aW9uIiwiZ2V0V2hlZWxEZWx0YSIsImlzRXh0ZXJuYWxUYXJnZXQiLCJhZGRMaXN0ZW5lciIsInJlbW92ZUxpc3RlbmVyIiwiRmUiLCJydW4iLCJfZWwiLCJfaW5Qcm9ncmVzcyIsIl9kdXJhdGlvbiIsIl9lYXNlT3V0UG93ZXIiLCJfc3RhcnRQb3MiLCJfb2Zmc2V0IiwiX3N0YXJ0VGltZSIsIl9hbmltYXRlIiwiX3N0ZXAiLCJfY29tcGxldGUiLCJfYW5pbUlkIiwiX3J1bkZyYW1lIiwiX2Vhc2VPdXQiLCJBIiwiY3JzIiwiY2VudGVyIiwibWluWm9vbSIsIm1heFpvb20iLCJsYXllcnMiLCJtYXhCb3VuZHMiLCJyZW5kZXJlciIsInpvb21BbmltYXRpb24iLCJ6b29tQW5pbWF0aW9uVGhyZXNob2xkIiwiZmFkZUFuaW1hdGlvbiIsIm1hcmtlclpvb21BbmltYXRpb24iLCJ0cmFuc2Zvcm0zRExpbWl0Iiwiem9vbVNuYXAiLCJ6b29tRGVsdGEiLCJ0cmFja1Jlc2l6ZSIsIl9oYW5kbGVycyIsIl9sYXllcnMiLCJfem9vbUJvdW5kTGF5ZXJzIiwiX3NpemVDaGFuZ2VkIiwiX2luaXRDb250YWluZXIiLCJfaW5pdExheW91dCIsIl9vblJlc2l6ZSIsIl9pbml0RXZlbnRzIiwic2V0TWF4Qm91bmRzIiwiX3pvb20iLCJfbGltaXRab29tIiwic2V0VmlldyIsInJlc2V0IiwiX3pvb21BbmltYXRlZCIsIl9jcmVhdGVBbmltUHJveHkiLCJfcHJveHkiLCJfY2F0Y2hUcmFuc2l0aW9uRW5kIiwiX2FkZExheWVycyIsIl9saW1pdENlbnRlciIsIl9zdG9wIiwiX2xvYWRlZCIsImFuaW1hdGUiLCJwYW4iLCJkdXJhdGlvbiIsIl90cnlBbmltYXRlZFpvb20iLCJfdHJ5QW5pbWF0ZWRQYW4iLCJfc2l6ZVRpbWVyIiwiX3Jlc2V0VmlldyIsIm5vTW92ZVN0YXJ0Iiwic2V0Wm9vbSIsInpvb21JbiIsInpvb21PdXQiLCJzZXRab29tQXJvdW5kIiwiZ2V0Wm9vbVNjYWxlIiwibGF0TG5nVG9Db250YWluZXJQb2ludCIsImNvbnRhaW5lclBvaW50VG9MYXRMbmciLCJfZ2V0Qm91bmRzQ2VudGVyWm9vbSIsImdldEJvdW5kcyIsInBhZGRpbmdUb3BMZWZ0IiwicGFkZGluZyIsInBhZGRpbmdCb3R0b21SaWdodCIsImdldEJvdW5kc1pvb20iLCJmaXRCb3VuZHMiLCJmaXRXb3JsZCIsInBhblRvIiwicGFuQnkiLCJfcGFuQW5pbSIsInN0ZXAiLCJfb25QYW5UcmFuc2l0aW9uU3RlcCIsImVuZCIsIl9vblBhblRyYW5zaXRpb25FbmQiLCJfbWFwUGFuZSIsIl9nZXRNYXBQYW5lUG9zIiwiZWFzZUxpbmVhcml0eSIsIl9yYXdQYW5CeSIsImdldFpvb20iLCJmbHlUbyIsIl9tb3ZlU3RhcnQiLCJfZmx5VG9GcmFtZSIsIl9tb3ZlIiwiZ2V0U2NhbGVab29tIiwiX21vdmVFbmQiLCJmbHlUb0JvdW5kcyIsIl9wYW5JbnNpZGVNYXhCb3VuZHMiLCJzZXRNaW5ab29tIiwic2V0TWF4Wm9vbSIsInBhbkluc2lkZUJvdW5kcyIsIl9lbmZvcmNpbmdCb3VuZHMiLCJwYW5JbnNpZGUiLCJnZXRQaXhlbEJvdW5kcyIsImludmFsaWRhdGVTaXplIiwiX2xhc3RDZW50ZXIiLCJkZWJvdW5jZU1vdmVlbmQiLCJvbGRTaXplIiwibmV3U2l6ZSIsImxvY2F0ZSIsIl9sb2NhdGVPcHRpb25zIiwidGltZW91dCIsIndhdGNoIiwiX2hhbmRsZUdlb2xvY2F0aW9uUmVzcG9uc2UiLCJfaGFuZGxlR2VvbG9jYXRpb25FcnJvciIsIl9sb2NhdGlvbldhdGNoSWQiLCJnZW9sb2NhdGlvbiIsIndhdGNoUG9zaXRpb24iLCJnZXRDdXJyZW50UG9zaXRpb24iLCJtZXNzYWdlIiwic3RvcExvY2F0ZSIsImNsZWFyV2F0Y2giLCJfY29udGFpbmVyIiwiY29vcmRzIiwibGF0aXR1ZGUiLCJsb25naXR1ZGUiLCJhY2N1cmFjeSIsImxhdGxuZyIsInRpbWVzdGFtcCIsImFkZEhhbmRsZXIiLCJlbmFibGUiLCJfY29udGFpbmVySWQiLCJfY2xlYXJDb250cm9sUG9zIiwiX3Jlc2l6ZVJlcXVlc3QiLCJfY2xlYXJIYW5kbGVycyIsIl9wYW5lcyIsIl9yZW5kZXJlciIsImNyZWF0ZVBhbmUiLCJfY2hlY2tJZkxvYWRlZCIsIl9tb3ZlZCIsImxheWVyUG9pbnRUb0xhdExuZyIsIl9nZXRDZW50ZXJMYXllclBvaW50IiwiZ2V0TWluWm9vbSIsIl9sYXllcnNNaW5ab29tIiwiZ2V0TWF4Wm9vbSIsIl9sYXllcnNNYXhab29tIiwiX3NpemUiLCJjbGllbnRXaWR0aCIsImNsaWVudEhlaWdodCIsIl9nZXRUb3BMZWZ0UG9pbnQiLCJnZXRQaXhlbE9yaWdpbiIsIl9waXhlbE9yaWdpbiIsImdldFBpeGVsV29ybGRCb3VuZHMiLCJnZXRQYW5lIiwiZ2V0UGFuZXMiLCJnZXRDb250YWluZXIiLCJsYXRMbmdUb0xheWVyUG9pbnQiLCJjb250YWluZXJQb2ludFRvTGF5ZXJQb2ludCIsImxheWVyUG9pbnRUb0NvbnRhaW5lclBvaW50IiwibW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQiLCJtb3VzZUV2ZW50VG9MYXllclBvaW50IiwibW91c2VFdmVudFRvTGF0TG5nIiwiX29uU2Nyb2xsIiwiX2ZhZGVBbmltYXRlZCIsInBvc2l0aW9uIiwiX2luaXRQYW5lcyIsIl9pbml0Q29udHJvbFBvcyIsIl9wYW5lUmVuZGVyZXJzIiwibWFya2VyUGFuZSIsInNoYWRvd1BhbmUiLCJfZ2V0TmV3UGl4ZWxPcmlnaW4iLCJwaW5jaCIsIl9nZXRab29tU3BhbiIsIl90YXJnZXRzIiwiX2hhbmRsZURPTUV2ZW50IiwiX29uTW92ZUVuZCIsInNjcm9sbFRvcCIsInNjcm9sbExlZnQiLCJfZmluZEV2ZW50VGFyZ2V0cyIsInNyY0VsZW1lbnQiLCJfZHJhZ2dhYmxlTW92ZWQiLCJfaXNDbGlja0Rpc2FibGVkIiwiX2xlYWZsZXRfZGlzYWJsZV9ldmVudHMiLCJfZmlyZURPTUV2ZW50IiwiX21vdXNlRXZlbnRzIiwiZ2V0TGF0TG5nIiwiX3JhZGl1cyIsImNvbnRhaW5lclBvaW50IiwibGF5ZXJQb2ludCIsImJ1YmJsaW5nTW91c2VFdmVudHMiLCJkcmFnZ2luZyIsImVuYWJsZWQiLCJtb3ZlZCIsImJveFpvb20iLCJkaXNhYmxlIiwid2hlblJlYWR5IiwiX2xhdExuZ1RvTmV3TGF5ZXJQb2ludCIsIl9sYXRMbmdCb3VuZHNUb05ld0xheWVyQm91bmRzIiwiX2dldENlbnRlck9mZnNldCIsIl9nZXRCb3VuZHNPZmZzZXQiLCJfbGltaXRPZmZzZXQiLCJfcmVib3VuZCIsIm1hcFBhbmUiLCJfYW5pbWF0aW5nWm9vbSIsIl9vblpvb21UcmFuc2l0aW9uRW5kIiwiX2FuaW1Nb3ZlRW5kIiwiX2Rlc3Ryb3lBbmltUHJveHkiLCJwcm9wZXJ0eU5hbWUiLCJfbm90aGluZ1RvQW5pbWF0ZSIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJfYW5pbWF0ZVpvb20iLCJfYW5pbWF0ZVRvQ2VudGVyIiwiX2FuaW1hdGVUb1pvb20iLCJub1VwZGF0ZSIsIl90ZW1wRmlyZVpvb21FdmVudCIsIlVlIiwiQiIsIl9tYXAiLCJyZW1vdmVDb250cm9sIiwiYWRkQ29udHJvbCIsImFkZFRvIiwib25BZGQiLCJfY29udHJvbENvcm5lcnMiLCJvblJlbW92ZSIsIl9yZWZvY3VzT25NYXAiLCJzY3JlZW5YIiwic2NyZWVuWSIsImZvY3VzIiwiVmUiLCJfY29udHJvbENvbnRhaW5lciIsImNvbGxhcHNlZCIsImF1dG9aSW5kZXgiLCJoaWRlU2luZ2xlQmFzZSIsInNvcnRMYXllcnMiLCJzb3J0RnVuY3Rpb24iLCJfbGF5ZXJDb250cm9sSW5wdXRzIiwiX2xhc3RaSW5kZXgiLCJfaGFuZGxpbmdDbGljayIsIl9wcmV2ZW50Q2xpY2siLCJfYWRkTGF5ZXIiLCJfdXBkYXRlIiwiX2NoZWNrRGlzYWJsZWRMYXllcnMiLCJfb25MYXllckNoYW5nZSIsIl9leHBhbmRJZk5vdENvbGxhcHNlZCIsImFkZEJhc2VMYXllciIsImFkZE92ZXJsYXkiLCJyZW1vdmVMYXllciIsIl9nZXRMYXllciIsImV4cGFuZCIsIl9zZWN0aW9uIiwib2Zmc2V0VG9wIiwiY29sbGFwc2UiLCJzZXRBdHRyaWJ1dGUiLCJfZXhwYW5kU2FmZWx5IiwiX2xheWVyc0xpbmsiLCJocmVmIiwidGl0bGUiLCJrZXlkb3duIiwia2V5Q29kZSIsImNsaWNrIiwiX2Jhc2VMYXllcnNMaXN0IiwiX3NlcGFyYXRvciIsIl9vdmVybGF5c0xpc3QiLCJuYW1lIiwib3ZlcmxheSIsInNvcnQiLCJzZXRaSW5kZXgiLCJfYWRkSXRlbSIsImRpc3BsYXkiLCJfY3JlYXRlUmFkaW9FbGVtZW50IiwiaGFzTGF5ZXIiLCJkZWZhdWx0Q2hlY2tlZCIsImxheWVySWQiLCJfb25JbnB1dENsaWNrIiwiY2hlY2tlZCIsImFkZExheWVyIiwiZGlzYWJsZWQiLCJxZSIsInpvb21JblRleHQiLCJ6b29tSW5UaXRsZSIsInpvb21PdXRUZXh0Iiwiem9vbU91dFRpdGxlIiwiX3pvb21JbkJ1dHRvbiIsIl9jcmVhdGVCdXR0b24iLCJfem9vbUluIiwiX3pvb21PdXRCdXR0b24iLCJfem9vbU91dCIsIl91cGRhdGVEaXNhYmxlZCIsIl9kaXNhYmxlZCIsInNoaWZ0S2V5IiwiR2UiLCJ6b29tQ29udHJvbCIsIm1heFdpZHRoIiwibWV0cmljIiwiaW1wZXJpYWwiLCJfYWRkU2NhbGVzIiwidXBkYXRlV2hlbklkbGUiLCJfbVNjYWxlIiwiX2lTY2FsZSIsIl91cGRhdGVTY2FsZXMiLCJfdXBkYXRlTWV0cmljIiwiX3VwZGF0ZUltcGVyaWFsIiwiX2dldFJvdW5kTnVtIiwiX3VwZGF0ZVNjYWxlIiwiS2UiLCJwcmVmaXgiLCJfYXR0cmlidXRpb25zIiwiYXR0cmlidXRpb25Db250cm9sIiwiZ2V0QXR0cmlidXRpb24iLCJhZGRBdHRyaWJ1dGlvbiIsIl9hZGRBdHRyaWJ1dGlvbiIsInJlbW92ZUF0dHJpYnV0aW9uIiwic2V0UHJlZml4IiwiTGF5ZXJzIiwiWm9vbSIsIlNjYWxlIiwiQXR0cmlidXRpb24iLCJhdHRyaWJ1dGlvbiIsIl9lbmFibGVkIiwiYWRkSG9va3MiLCJyZW1vdmVIb29rcyIsIlllIiwiWGUiLCJjbGlja1RvbGVyYW5jZSIsIl9lbGVtZW50IiwiX2RyYWdTdGFydFRhcmdldCIsIl9wcmV2ZW50T3V0bGluZSIsIl9vbkRvd24iLCJfZHJhZ2dpbmciLCJmaW5pc2hEcmFnIiwid2hpY2giLCJidXR0b24iLCJfbW92aW5nIiwiX3N0YXJ0UG9pbnQiLCJfcGFyZW50U2NhbGUiLCJfb25Nb3ZlIiwiX29uVXAiLCJfbGFzdFRhcmdldCIsIlNWR0VsZW1lbnRJbnN0YW5jZSIsImNvcnJlc3BvbmRpbmdVc2VFbGVtZW50IiwiX25ld1BvcyIsIl9sYXN0RXZlbnQiLCJfdXBkYXRlUG9zaXRpb24iLCJub0luZXJ0aWEiLCJKZSIsIl9jb2RlIiwic2kiLCJvaSIsIiRlIiwiSSIsIlFlIiwidGkiLCJjbGlwUG9seWdvbiIsInBvbHlnb25DZW50ZXIiLCJjZW50cm9pZCIsImVpIiwiVWludDhBcnJheSIsInJpIiwiaWkiLCJuaSIsImFpIiwiaGkiLCJzaW1wbGlmeSIsInBvaW50VG9TZWdtZW50RGlzdGFuY2UiLCJjbG9zZXN0UG9pbnRPblNlZ21lbnQiLCJjbGlwU2VnbWVudCIsIl9nZXRFZGdlSW50ZXJzZWN0aW9uIiwiX2dldEJpdENvZGUiLCJfc3FDbG9zZXN0UG9pbnRPblNlZ21lbnQiLCJpc0ZsYXQiLCJfZmxhdCIsInBvbHlsaW5lQ2VudGVyIiwiUl9NSU5PUiIsInRhbiIsIkxvbkxhdCIsIk1lcmNhdG9yIiwiU3BoZXJpY2FsTWVyY2F0b3IiLCJsaSIsIkVhcnRoIiwiRVBTRzMzOTUiLCJFUFNHMzg1NyIsIkVQU0c5MDA5MTMiLCJFUFNHNDMyNiIsIlNpbXBsZSIsInBhbmUiLCJyZW1vdmVGcm9tIiwiX21hcFRvQWRkIiwiYWRkSW50ZXJhY3RpdmVUYXJnZXQiLCJyZW1vdmVJbnRlcmFjdGl2ZVRhcmdldCIsIl9sYXllckFkZCIsImdldEV2ZW50cyIsInVpIiwiYmVmb3JlQWRkIiwiZWFjaExheWVyIiwiX2FkZFpvb21MaW1pdCIsIl91cGRhdGVab29tTGV2ZWxzIiwiX3JlbW92ZVpvb21MaW1pdCIsImdldExheWVySWQiLCJjbGVhckxheWVycyIsImludm9rZSIsImdldExheWVyIiwiZ2V0TGF5ZXJzIiwiY2kiLCJzZXRTdHlsZSIsImJyaW5nVG9Gcm9udCIsImJyaW5nVG9CYWNrIiwiZGkiLCJwb3B1cEFuY2hvciIsInRvb2x0aXBBbmNob3IiLCJjcm9zc09yaWdpbiIsImNyZWF0ZUljb24iLCJfY3JlYXRlSWNvbiIsImNyZWF0ZVNoYWRvdyIsIl9nZXRJY29uVXJsIiwiX2NyZWF0ZUltZyIsInRhZ05hbWUiLCJfc2V0SWNvblN0eWxlcyIsInNoYWRvd0FuY2hvciIsImljb25BbmNob3IiLCJtYXJnaW5MZWZ0IiwibWFyZ2luVG9wIiwic3JjIiwiX2kiLCJpY29uVXJsIiwiaWNvblJldGluYVVybCIsInNoYWRvd1VybCIsImljb25TaXplIiwic2hhZG93U2l6ZSIsImltYWdlUGF0aCIsIl9kZXRlY3RJY29uUGF0aCIsIl9zdHJpcFVybCIsInF1ZXJ5U2VsZWN0b3IiLCJzdWJzdHJpbmciLCJwaSIsIl9tYXJrZXIiLCJfaWNvbiIsIl9kcmFnZ2FibGUiLCJkcmFnc3RhcnQiLCJfb25EcmFnU3RhcnQiLCJwcmVkcmFnIiwiX29uUHJlRHJhZyIsImRyYWciLCJfb25EcmFnIiwiZHJhZ2VuZCIsIl9vbkRyYWdFbmQiLCJfYWRqdXN0UGFuIiwiYXV0b1BhblNwZWVkIiwiYXV0b1BhblBhZGRpbmciLCJfcGFuUmVxdWVzdCIsIl9vbGRMYXRMbmciLCJjbG9zZVBvcHVwIiwiYXV0b1BhbiIsIl9zaGFkb3ciLCJfbGF0bG5nIiwib2xkTGF0TG5nIiwibWkiLCJpY29uIiwiaW50ZXJhY3RpdmUiLCJrZXlib2FyZCIsInpJbmRleE9mZnNldCIsInJpc2VPbkhvdmVyIiwicmlzZU9mZnNldCIsImF1dG9QYW5PbkZvY3VzIiwiZHJhZ2dhYmxlIiwiX2luaXRJY29uIiwidXBkYXRlIiwiX3JlbW92ZUljb24iLCJfcmVtb3ZlU2hhZG93Iiwidmlld3Jlc2V0Iiwic2V0TGF0TG5nIiwic2V0WkluZGV4T2Zmc2V0IiwiZ2V0SWNvbiIsInNldEljb24iLCJfcG9wdXAiLCJiaW5kUG9wdXAiLCJnZXRFbGVtZW50IiwiX3NldFBvcyIsIm1vdXNlb3ZlciIsIl9icmluZ1RvRnJvbnQiLCJtb3VzZW91dCIsIl9yZXNldFpJbmRleCIsIl9wYW5PbkZvY3VzIiwiX3VwZGF0ZU9wYWNpdHkiLCJfaW5pdEludGVyYWN0aW9uIiwiX3pJbmRleCIsIl91cGRhdGVaSW5kZXgiLCJ6SW5kZXgiLCJfZ2V0UG9wdXBBbmNob3IiLCJfZ2V0VG9vbHRpcEFuY2hvciIsImZpIiwic3Ryb2tlIiwiY29sb3IiLCJ3ZWlnaHQiLCJsaW5lQ2FwIiwibGluZUpvaW4iLCJkYXNoQXJyYXkiLCJkYXNoT2Zmc2V0IiwiZmlsbCIsImZpbGxDb2xvciIsImZpbGxPcGFjaXR5IiwiZmlsbFJ1bGUiLCJnZXRSZW5kZXJlciIsIl9pbml0UGF0aCIsIl9yZXNldCIsIl9hZGRQYXRoIiwiX3JlbW92ZVBhdGgiLCJyZWRyYXciLCJfdXBkYXRlUGF0aCIsIl91cGRhdGVTdHlsZSIsIl91cGRhdGVCb3VuZHMiLCJfYnJpbmdUb0JhY2siLCJfcGF0aCIsIl9wcm9qZWN0IiwiX2NsaWNrVG9sZXJhbmNlIiwidG9sZXJhbmNlIiwiZ2kiLCJyYWRpdXMiLCJzZXRSYWRpdXMiLCJnZXRSYWRpdXMiLCJfcG9pbnQiLCJfcmFkaXVzWSIsIl9weEJvdW5kcyIsIl91cGRhdGVDaXJjbGUiLCJfZW1wdHkiLCJfYm91bmRzIiwiX2NvbnRhaW5zUG9pbnQiLCJ2aSIsIl9tUmFkaXVzIiwiYWNvcyIsInlpIiwic21vb3RoRmFjdG9yIiwibm9DbGlwIiwiX3NldExhdExuZ3MiLCJnZXRMYXRMbmdzIiwiX2xhdGxuZ3MiLCJzZXRMYXRMbmdzIiwiaXNFbXB0eSIsImNsb3Nlc3RMYXllclBvaW50IiwiX3BhcnRzIiwiX2RlZmF1bHRTaGFwZSIsImFkZExhdExuZyIsIl9jb252ZXJ0TGF0TG5ncyIsIl9yaW5ncyIsIl9wcm9qZWN0TGF0bG5ncyIsIl9yYXdQeEJvdW5kcyIsIl9jbGlwUG9pbnRzIiwiX3NpbXBsaWZ5UG9pbnRzIiwiX3VwZGF0ZVBvbHkiLCJ4aSIsInBvcCIsIndpIiwiYWRkRGF0YSIsImZlYXR1cmVzIiwiZ2VvbWV0cmllcyIsImdlb21ldHJ5IiwiY29vcmRpbmF0ZXMiLCJiaSIsImZlYXR1cmUiLCJaaSIsImRlZmF1bHRPcHRpb25zIiwicmVzZXRTdHlsZSIsIm9uRWFjaEZlYXR1cmUiLCJfc2V0TGF5ZXJTdHlsZSIsInBvaW50VG9MYXllciIsImNvb3Jkc1RvTGF0TG5nIiwiTGkiLCJQaSIsIlRpIiwicHJvcGVydGllcyIsIm1hcmtlcnNJbmhlcml0T3B0aW9ucyIsIk1pIiwiemkiLCJDaSIsInRvR2VvSlNPTiIsIlNpIiwidG9NdWx0aVBvaW50IiwiRWkiLCJlcnJvck92ZXJsYXlVcmwiLCJfdXJsIiwiX2ltYWdlIiwiX2luaXRJbWFnZSIsInNldFVybCIsInNldEJvdW5kcyIsInpvb21hbmltIiwib25zZWxlY3RzdGFydCIsIm9ubW91c2Vtb3ZlIiwib25sb2FkIiwib25lcnJvciIsIl9vdmVybGF5T25FcnJvciIsImtpIiwiYXV0b3BsYXkiLCJsb29wIiwia2VlcEFzcGVjdFJhdGlvIiwibXV0ZWQiLCJwbGF5c0lubGluZSIsIm9ubG9hZGVkZGF0YSIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwib2JqZWN0Rml0IiwiT2kiLCJBaSIsIm9mZnNldCIsImNvbnRlbnQiLCJfc291cmNlIiwiX2NvbnRlbnQiLCJvcGVuT24iLCJjbG9zZSIsInRvZ2dsZSIsIl9wcmVwYXJlT3BlbiIsIl9yZW1vdmVUaW1lb3V0IiwiZ2V0Q29udGVudCIsInNldENvbnRlbnQiLCJ2aXNpYmlsaXR5IiwiX3VwZGF0ZUNvbnRlbnQiLCJfdXBkYXRlTGF5b3V0IiwiaXNPcGVuIiwiX2NvbnRlbnROb2RlIiwiaGFzQ2hpbGROb2RlcyIsIl9nZXRBbmNob3IiLCJfY29udGFpbmVyQm90dG9tIiwiX2NvbnRhaW5lckxlZnQiLCJfY29udGFpbmVyV2lkdGgiLCJib3R0b20iLCJCaSIsIl9pbml0T3ZlcmxheSIsIm1pbldpZHRoIiwibWF4SGVpZ2h0IiwiYXV0b1BhblBhZGRpbmdUb3BMZWZ0IiwiYXV0b1BhblBhZGRpbmdCb3R0b21SaWdodCIsImtlZXBJblZpZXciLCJjbG9zZUJ1dHRvbiIsImF1dG9DbG9zZSIsImNsb3NlT25Fc2NhcGVLZXkiLCJwb3B1cCIsImNsb3NlT25DbGljayIsImNsb3NlUG9wdXBPbkNsaWNrIiwicHJlY2xpY2siLCJtb3ZlZW5kIiwiX3dyYXBwZXIiLCJfdGlwQ29udGFpbmVyIiwiX3RpcCIsIl9jbG9zZUJ1dHRvbiIsIndoaXRlU3BhY2UiLCJfYXV0b3Bhbm5pbmciLCJJaSIsIm9wZW5Qb3B1cCIsIl9wb3B1cEhhbmRsZXJzQWRkZWQiLCJfb3BlblBvcHVwIiwia2V5cHJlc3MiLCJfb25LZXlQcmVzcyIsIm1vdmUiLCJfbW92ZVBvcHVwIiwidW5iaW5kUG9wdXAiLCJ0b2dnbGVQb3B1cCIsImlzUG9wdXBPcGVuIiwic2V0UG9wdXBDb250ZW50IiwiZ2V0UG9wdXAiLCJkaXJlY3Rpb24iLCJwZXJtYW5lbnQiLCJzdGlja3kiLCJ0b29sdGlwIiwiX3NldFBvc2l0aW9uIiwiUmkiLCJvcGVuVG9vbHRpcCIsImNsb3NlVG9vbHRpcCIsImJpbmRUb29sdGlwIiwiX3Rvb2x0aXAiLCJpc1Rvb2x0aXBPcGVuIiwidW5iaW5kVG9vbHRpcCIsIl9pbml0VG9vbHRpcEludGVyYWN0aW9ucyIsIl90b29sdGlwSGFuZGxlcnNBZGRlZCIsIl9tb3ZlVG9vbHRpcCIsIl9vcGVuVG9vbHRpcCIsIl9hZGRGb2N1c0xpc3RlbmVycyIsIm1vdXNlbW92ZSIsIl9zZXRBcmlhRGVzY3JpYmVkQnlPbkxheWVyIiwidG9nZ2xlVG9vbHRpcCIsInNldFRvb2x0aXBDb250ZW50IiwiZ2V0VG9vbHRpcCIsIl9hZGRGb2N1c0xpc3RlbmVyc09uTGF5ZXIiLCJpZCIsIm1vdmluZyIsIl9vcGVuT25jZUZsYWciLCJodG1sIiwiYmdQb3MiLCJFbGVtZW50IiwiYmFja2dyb3VuZFBvc2l0aW9uIiwiRGVmYXVsdCIsIk5pIiwidGLSDkZVNpemUiLCJ1cGRhdGVXaGVuWm9vbWluZyIsInVwZGF0ZUludGVydmFsIiwibWF4TmF0aXZlWm9vbSIsIm1pbk5hdGl2ZVpvb20iLCJub1dyYXAiLCJrZWVwQnVmZmVyIiwiX2xldmVscyIsIl90aWxlcyIsIl9yZW1vdmVBbGxUaWxlcyIsIl90aWxlWm9vbSIsIl9zZXRBdXRvWkluZGV4IiwiaXNMb2FkaW5nIiwiX2xvYWRpbmciLCJfY2xhbXBab29tIiwiX3VwZGF0ZUxldmVscyIsInZpZXdwcmVyZXNldCIsIl9pbnZhbGlkYXRlQWxsIiwiY3JlYXRlVGLSDkZSIsImdldFRpbGVTaXplIiwiY2hpbGRyZW4iLCJpc0Zpbml0ZSIsImN1cnJlbnQiLCJsb2FkZWQiLCJlbCIsImFjdGl2ZSIsIl9vbk9wYXF1ZVRpbGUiLCJfbm9QcnVuZSIsIl9wcnVuZVRpbGVzIiwiX2ZhZGVGcmFtZSIsIk51bWJlciIsIl9vblVwZGF0ZUxldmVsIiwiX3JlbW92ZVRpbGVzQXRab29tIiwiX29uUmVtb3ZlTGV2ZWwiLCJvcmlnaW4iLCJfc2V0Wm9vbVRyYW5zZm9ybSIsIl9vbkNyZWF0ZUxldmVsIiwiX2xldmVsIiwicmV0YWluIiwiX3JldGFpblBhcmVudCIsIl9yZXRhaW5DaGLSDkZHJlbiIsIl9yZW1vdmVUaWxlIiwiX3RpbGVDb29yZHNUb0tleSIsIl9zZXRWaWV3IiwiX2Fib3J0TG9hZGluZyIsIl9yZXNldEdyaWQiLCJfc2V0Wm9vbVRyYW5zZm9ybXMiLCJfdGLSDkZVNpemUiLCJfZ2xvYmFsVGLSDkZVJhbmdlIiwiX3B4Qm91bmRzVG9UaWxlUmFuZ2UiLCJfd3JhcFgiLCJfd3JhcFkiLCJfZ2V0VGLSDkZWRQaXhlbEJvdW5kcyIsIl9pc1ZhbGlkVGLSDkZSIsImNyZWF0ZURvY3VtZW50RnJhZ21lbnQiLCJfYWRkVGLSDkZSIsIl90aWxlQ29vcmRzVG9Cb3VuZHMiLCJfa2V5VG9Cb3VuZHMiLCJfa2V5VG9UaWxlQ29vcmRzIiwiX3RpbGVDb29yZHNUb053U2UiLCJ0aWxlIiwiX2luaXRUaWxlIiwiX2dldFRpbGVQb3MiLCJfd3JhcENvb3JkcyIsIl90aWxlUmVhZHkiLCJlcnJvciIsIl9ub1RpbGVzVG9Mb2FkIiwiRGkiLCJzdWJkb21haW5zIiwiZXJyb3JUaWxlVXJsIiwiem9vbU9mZnNldCIsInRtcyIsInpvb21SZXZlcnNlIiwiZGV0ZWN0UmV0aW5hIiwicmVmZXJyZXJQb2xpY3kiLCJfb25UaWxlUmVtb3ZlIiwiX3RpbGVPbkxvYWQiLCJfdGLSDkZU9uRXJyb3IiLCJnZXRUaWxlVXJsIiwiX2dldFN1YmRvbWFpbiIsIl9nZXRab29tRm9yVXJsIiwiZ2V0QXR0cmlidXRlIiwiY29tcGxldGUiLCJqaSIsIkhpIiwiZGVmYXVsdFdtc1BhcmFtcyIsInNlcnZpY2UiLCJyZXF1ZXN0Iiwic3R5bGVzIiwiZm9ybWF0IiwidHJhbnNwYXJlbnQiLCJ2ZXJzaW9uIiwidXBwZXJjYXNlIiwid21zUGFyYW1zIiwiX2NycyIsIl93bXNWZXJzaW9uIiwicGFyc2VGbG9hdCIsInNldFBhcmFtcyIsIldNUyIsIndtcyIsIldpIiwiX3VwZGF0ZVBhdGhzIiwiX2Rlc3Ryb3lDb250YWluZXIiLCJfb25ab29tIiwiem9vbWVuZCIsIl9vblpvb21FbmQiLCJfb25BbmltWm9vbSIsIl91cGRhdGVUcmFuc2Zvcm0iLCJfY2VudGVyIiwiRmkiLCJfb25WaWV3UHJlUmVzZXQiLCJfcG9zdHBvbmVVcGRhdGVQYXRocyIsIl9kcmF3IiwiX29uTW91c2VNb3ZlIiwiX29uQ2xpY2siLCJfaGFuZGxlTW91c2VPdXQiLCJfY3R4IiwiX3JlZHJhd1JlcXVlc3QiLCJfcmVkcmF3Qm91bmRzIiwiX3JlZHJhdyIsInRyYW5zbGF0ZSIsIl91cGRhdGVEYXNoQXJyYXkiLCJfb3JkZXIiLCJwcmV2IiwiX2RyYXdMYXN0IiwibmV4dCIsIl9kcmF3Rmlyc3QiLCJfcmVxdWVzdFJlZHJhdyIsIl9leHRlbmRSZWRyYXdCb3VuZHMiLCJfZGFzaEFycmF5IiwiX2NsZWFyIiwiY2xlYXJSZWN0Iiwic2F2ZSIsInJlc3RvcmUiLCJiZWdpblBhdGgiLCJyZWN0IiwiY2xpcCIsIl9kcmF3aW5nIiwiY2xvc2VQYXRoIiwiX2ZpbGxTdHJva2UiLCJhcmMiLCJnbG9iYWxBbHBoYSIsImZpbGxTdHlsZSIsInNldExpbmVEYXNoIiwibGluZVdpZHRoIiwic3Ryb2tlU3R5bGUiLCJfZmlyZUV2ZW50IiwiX2hhbmRsZU1vdXNlSG92ZXIiLCJfaG92ZXJlZExheWVyIiwiX21vdXNlSG92ZXJUaHJvdHRsZWQiLCJVaSIsIlZpIiwibmFtZXNwYWNlcyIsImNvb3Jkc2l6ZSIsIl9zdHJva2UiLCJfZmlsbCIsInN0cm9rZWQiLCJmaWxsZWQiLCJkYXNoU3R5bGUiLCJlbmRjYXAiLCJqb2luc3R5bGUiLCJfc2V0UGF0aCIsInFpIiwiR2kiLCJfcm9vdEdyb3VwIiwiX3N2Z1NpemUiLCJyZW1vdmVBdHRyaWJ1dGUiLCJLaSIsIl9nZXRQYW5lUmVuZGVyZXIiLCJfY3JlYXRlUmVuZGVyZXIiLCJwcmVmZXJDYW52YXMiLCJZaSIsIl9ib3VuZHNUb0xhdExuZ3MiLCJwb2ludHNUb1BhdGgiLCJnZW9tZXRyeVRvTGF5ZXIiLCJjb29yZHNUb0xhdExuZ3MiLCJsYXRMbmdUb0Nvb3JkcyIsImxhdExuZ3NUb0Nvb3JkcyIsImdldEZlYXR1cmUiLCJhc0ZlYXR1cmUiLCJfcGFuZSIsIm92ZXJsYXlQYW5lIiwiX3Jlc2V0U3RhdGVUaW1lb3V0IiwiX2Rlc3Ryb3kiLCJfb25Nb3VzZURvd24iLCJfcmVzZXRTdGF0ZSIsIl9jbGVhckRlZmVycmVkUmVzZXRTdGF0ZSIsImNvbnRleHRtZW51IiwibW91c2V1cCIsIl9vbk1vdXNlVXAiLCJfb25LZXlEb3duIiwiX2JveCIsIl9maW5pc2giLCJib3hab29tQm91bmRzIiwiZG91YmxlQ2xpY2tab29tIiwiX29uRG91YmxlQ2xpY2siLCJpbmVydGlhIiwiaW5lcnRpYURlY2VsZXJhdGlvbiIsImluZXJ0aWFNYXhTcGVlZCIsIndvcmxkQ29weUp1bXAiLCJtYXhCb3VuZHNWaXNjb3NpdHkiLCJfb25QcmVEcmFnTGltaXQiLCJfb25QcmVEcmFnV3JhcCIsIl9wb3NpdGlvbnMiLCJfdGltZXMiLCJfb2Zmc2V0TGltaXQiLCJfdmlzY29zaXR5IiwiX2xhc3RUaW1lIiwiX2xhc3RQb3MiLCJfYWJzUG9zIiwiX3BydW5lUG9zaXRpb25zIiwic2hpZnQiLCJfaW5pdGlhbFdvcmxkT2Zmc2V0IiwiX3dvcmxkV2lkdGgiLCJfdmlzY291c0xpbWl0Iiwia2V5Ym9hcmRQYW5EZWx0YSIsImtleUNvZGVzIiwicmlnaHQiLCJkb3duIiwidXAiLCJfc2V0UGFuRGVsdGEiLCJfc2V0Wm9vbURlbHRhIiwiX29uRm9jdXMiLCJibHVyIiwiX29uQmx1ciIsIm1vdXNlZG93biIsIl9hZGRIb29rcyIsIl9yZW1vdmVIb29rcyIsIl9mb2N1c2VkIiwic2Nyb2xsVG8iLCJfcGFuS2V5cyIsIl96b29tS2V5cyIsImFsdEtleSIsImN0cmxLZXkiLCJtZXRhS2V5Iiwic2Nyb2xsV2hlZWxab29tIiwid2hlZWxEZWJvdW5jZVRpbWUiLCJ3aGVlbFB4UGVyWm9vbUxldmVsIiwiX29uV2hlZWxTY3JvbGwiLCJfZGVsdGEiLCJfbGFzdE1vdXNlUG9zIiwiX3RpbWVyIiwiX3BlcmZvcm1ab29tIiwidGFwSG9sZCIsInRhcFRvbGVyYW5jZSIsIl9ob2xkVGltZW91dCIsIl9jYW5jZWwiLCJfaXNUYXBWYWxpZCIsIl9jYW5jZWxDbGlja1ByZXZlbnQiLCJfc2ltdWxhdGVFdmVudCIsIk1vdXNlRXZlbnQiLCJidWJibGVzIiwiY2FuY2VsYWJsZSIsInZpZXciLCJkaXNwYXRjaEV2ZW50IiwidG91Y2hab29tIiwiYm91bmNlQXRab29tTGltaXRzIiwiX29uVG91Y2hTdGFydCIsIl96b29taW5nIiwiX2NlbnRlclBvaW50IiwiX3N0YXJ0TGF0TG5nIiwiX3BpbmNoU3RhcnRMYXRMbmciLCJfc3RhcnREaXN0IiwiX3N0YXJ0Wm9vbSIsIl9vblRvdWNoTW92ZSIsIl9vblRvdWNoRW5kIiwiX2FuaW1SZXF1ZXN0IiwiWGkiLCJCb3hab29tIiwiRG91YmxlQ2xpY2tab29tIiwiRHJhZyIsIktleWJvYXJkIiwiU2Nyb2xsV2hlZWxab29tIiwiVGFwSG9sZCIsIlRvdWNoWm9vbSIsIkJvdW5kcyIsIkJyb3dzZXIiLCJDUlMiLCJDYW52YXMiLCJDaXJjbGUiLCJDaXJjbGVNYXJrZXIiLCJDbGFzcyIsIkNvbnRyb2wiLCJEaXZJY29uIiwiRGl2T3ZlcmxheSIsIkRvbUV2ZW50IiwiRG9tVXRpbCIsIkRyYWdnYWJsZSIsIkV2ZW50ZWQiLCJGZWF0dXJlR3JvdXAiLCJHZW9KU09OIiwiR3JpZExheWVyIiwiSGFuZGxlciIsIkljb24iLCJJbWFnZU92ZXJsYXkiLCJMYXRMbmciLCJMYXRMbmdCb3VuZHMiLCJMYXllciIsIkxheWVyR3JvdXAiLCJMaW5lVXRpbCIsIk1hcCIsIk1hcmtlciIsIlBhdGgiLCJQb2ludCIsIlBvbHlVdGLSDkIiwiUG9seWdvbiIsIlBvbHlsaW5lIiwiUG9wdXAiLCJQb3NBbmltYXRpb24iLCJQcm9qZWN0aW9uIiwiUmVjdGFuZ2xlIiwiUmVuZGVyZXIiLCJTVkciLCJTVkdPdmVybGF5IiwiVGLSDkZUxheWVyIiwiVG9vbHRpcCIsIlRyYW5zZm9ybWF0aW9uIiwiVXRpbCIsIlZpZGVvT3ZlcmxheSIsImNpcmNsZSIsImNpcmNsZU1hcmtlciIsImNvbnRyb2wiLCJkaXZJY29uIiwiZmVhdHVyZUdyb3VwIiwiZ2VvSlNPTiIsImdlb0pzb24iLCJncmlkTGF5ZXIiLCJpbWFnZU92ZXJsYXkiLCJsYXRMbmciLCJsYXRMbmdCb3VuZHMiLCJsYXllckdyb3VwIiwibWFwIiwibWFya2VyIiwicG9pbnQiLCJwb2x5Z29uIiwicG9seWxpbmUiLCJyZWN0YW5nbGUiLCJzdmdPdmVybGF5IiwidGLSDkZUxheWVyIiwidmlkZW9PdmVybGF5Iiwibm9Db25mbGljdCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///741\n')},610:(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__)=>{"use strict";eval("\n;// CONCATENATED MODULE: ./js/GLSDk-utils.js\n/** \n * Singleton object we can use for platform independent stuff \n */\nclass GLSDkUtils {\n  constructor(){}\n\n  /** \n   * Inject Script into the page \n   * @param string src \n   */\n  injectExternalScript(src){\n    let s=document.createElement(\"script\");\n    s.setAttribute(\"src\", src);\n    document.body.appendChild(s);\n  }\n\n  /** \n   * Inject a script string \n   */\n  injectScript(contents){\n    let e=document.createElement(\"script\");\n    e.value=contents;\n    document.body.appendChild(e);\n  }\n\n  /** \n   * Removes all not numeric chars from the string \n   *\n   * @param string string - the input string \n   * @return the string without chars that are not numbers \n   */\n  removeNonNumeric(string){\n    return string.replace(/\\D/g, '');\n  }\n\n  /** \n   * Check if the given url exists and is valid\n   * We use this to check if the carrier icon exists given \n   * a url path and the naming convention {carrier_id}.svg \n   * Make sure the correct protocol is appended to the url http!=https \n   * \n   * @return true it the url exists and is valid \n   */\n  isUrlValid(url){\n    var http=new XMLHttpRequest();\n    http.open('HEAD', url, false);\n    http.send();\n    return http.status==200;\n  }\n\n  /** \n   * Open a new window with the provided URL \n   * @string url \n   * @return bool if the window was opened, false if popup blocker enabled \n   */\n  openNewWindow(url, options){\n    let newWin=window.open(url, '_blank', options);\n    let blocked = !newWin||newWin.closed||typeof newWin.closed=='undefined';\n    return !blocked;\n  }\n}\nlet utils=new GLSDkUtils();\n/* harmony default export */ const GLSDk_utils=(utils);\n;// CONCATENATED MODULE: ./js/GLSDk-woo-commerce.js\n\nclass Woocommerce {\n  constructor(ajax_url=\"\"){\n    this.ajax_url=ajax_url;\n  }\n\n  /** \n   * @return true if this is the checkout page \n   */\n  isCheckout(){\n    console.log(\"Checkout\");\n    return jQuery(\"body\").hasClass('woocommerce-checkout');\n  }\n\n  /* \n   * If there is only one method available woo will use a hidden field for the selected carrier \n   *  + Generic Methods do not have an instance id \n   */\n  getShippingMethodId(){\n    let eCheckbox=jQuery(\"input[name='shipping_method[0]']:checked\");\n    let eHidden=jQuery(\"input[name='shipping_method[0]']\");\n\n    // eCheckboxes.addEventListener('change', function(event){\n    //     console.log(\"Caooooo\")\n    // });\n    let shippingMethod=eCheckbox.length > 0 ? eCheckbox.val():eHidden.val();\n    if(shippingMethod.indexOf(':') > 0){\n      var method_parts=shippingMethod.split(':');\n      return GLSDk_utils.removeNonNumeric(method_parts[0]);\n    }else{\n      return shippingMethod;\n    }\n  }\n\n  /** \n   * Wordpress won't send session cookies to wp-admin and the session handling in woocommerce is so poorly documented we are better off \n   * extracting necessary info client side our selves. We're emulating their checkout.js \n   * @return an object containing address parts \n   */\n  getShippingData(){\n    // ##DJDJ Verovatno samo ovde treba da se izmeni i povuku podaci sa pravih idjeva za input text\n    var country=jQuery('#billing_country').val(),\n      state=jQuery('#billing_state').val(),\n      postcode=jQuery('input#billing_postcode').val(),\n      city=jQuery('#billing_city').val(),\n      address=jQuery('input#billing_address_1').val(),\n      address_2=jQuery('input#billing_address_2').val(),\n      s_country=country,\n      s_state=state,\n      s_postcode=postcode,\n      s_city=city,\n      s_address=address,\n      s_address_2=address_2;\n    if(jQuery('#ship-to-different-address').find('input').is(':checked')){\n      s_country=jQuery('#shipping_country').val();\n      s_state=jQuery('#shipping_state').val();\n      s_postcode=jQuery('input#shipping_postcode').val();\n      s_city=jQuery('#shipping_city').val();\n      s_address=jQuery('input#shipping_address_1').val();\n      s_address_2=jQuery('input#shipping_address_2').val();\n    }\n    if(s_country==\"\"){\n      console.log(\"COUNTRY EMPTY\");\n      jQuery('input[aria-label*=\"Country/Region\"]').each(function (){\n        s_country=jQuery(this).val();\n      });\n    }else if(s_country==\"\"){\n      console.log(\"COUNTRY EMPTY AGAIN\");\n      jQuery('#shipping-country option:selected').text();\n    }\n    window.GLSDk_shipping_address={\n      \"Address\": {\n        \"Lat\": \"\",\n        \"Long\": \"\",\n        \"Streetname1\": s_address,\n        \"Streetname2\": s_address_2,\n        \"HouseNumber\": '',\n        \"NumberExtension\": '',\n        \"PostalCode\": s_postcode,\n        \"s_postcode\": s_postcode,\n        \"City\": s_city,\n        \"Country\": s_country,\n        \"State\": s_state\n      },\n      post_data: jQuery('form.checkout').serialize(),\n      \"CarrierId\": jQuery(\"#shipping_carrier_id\").val()\n    };\n    return {\n      \"Address\": {\n        \"Lat\": \"\",\n        \"Long\": \"\",\n        \"Streetname1\": s_address,\n        \"Streetname2\": s_address_2,\n        \"HouseNumber\": '',\n        \"NumberExtension\": '',\n        \"PostalCode\": s_postcode,\n        \"s_postcode\": s_postcode,\n        \"City\": s_city,\n        \"Country\": s_country,\n        \"State\": s_state\n      },\n      post_data: jQuery('form.checkout').serialize(),\n      \"CarrierId\": jQuery(\"#shipping_carrier_id\").val()\n    };\n  }\n\n  /** \n   * We must run this onload \n   * And on method change \n   * because people may never change the carrier or select a pickup point \n   */\n  setCarrier(carrier_id){\n    console.log(\"Set carrier id\");\n    console.log(carrier_id);\n    this.carrier_id=typeof carrier_id!='undefined' ? carrier_id:this.getShippingMethodId();\n    jQuery(\"#shipping_carrier_id\").val(this.carrier_id);\n  }\n\n  /** \n   * @param Pickup pickup \n   */\n  setPickupPoint(pickup){\n    console.log(\"SET PICKUP POINT @#@#\");\n    console.log(pickup);\n    let pickup_label=pickup.Information.Name + \" \" + pickup.Information.Address;\n    let req={\n      'action': 'GLSDk_set_pickup_point',\n      'shipping_pickup_label': pickup_label,\n      'GLSDk_pickup_extended': jQuery('.GLSDk_mapfields' + pickup.PointId).val(),\n      'GLSDk-pickup__description': pickup_label,\n      'shipping_pickup_id': pickup.PointId,\n      'shipping_carrier_id': window.carrier_id\n    };\n    jQuery.getJSON(this.ajax_url, req, data=> {\n      console.log(\"Uspeooooo sam zemo\");\n      console.log(data);\n    }).fail(err=> {\n      console.log(\"Fatal error widget requesting points do we have an API bug?\", err.responseText);\n    });\n\n    // ##DJDJ Ovdeee\n    // jQuery(\"#GLSDk-pickup__description\").html(\"Selecetd pickup\" + \":\" +pickup_label);\n    let displayText=GLSDk_selected ;\n    jQuery(\"#GLSDk-pickup__description\").html(displayText + \":\" + pickup_label);\n    jQuery(\"#shipping_pickup_id\").val(pickup.PointId);\n    jQuery(\"#shipping_pickup_label\").val(pickup_label);\n    jQuery(\"#GLSDkpickup\").val(pickup.PointId);\n\n    // Is there extra info ? \n    if(jQuery('.GLSDk_mapfields' + pickup.PointId).length > 0){\n      jQuery('#shipping_pickup_extended').val(jQuery('.GLSDk_mapfields' + pickup.PointId).val());\n    }\n  }\n}\n// EXTERNAL MODULE: ./js/leaflet-1.4.0.js\nvar leaflet_1_4_0=__webpack_require__(741);\nvar leaflet_1_4_0_default=/*#__PURE__*/__webpack_require__.n(leaflet_1_4_0);\n;// CONCATENATED MODULE: ./js/GLSDk-open-map.js\n\n\nclass GLSDkOpenMap {\n  constructor(options, GLSDk){\n    console.log(\"OPENMAPCONSTRUCT2222\");\n    this.GLSDk=GLSDk;\n    this.options=options;\n    this.map=null;\n    this.host=options.host||'https://my.GLSDk.me';\n    this.icon_folder=typeof GLSDk_icon_folder!=='undefined' ? GLSDk_icon_folder:'';\n    this.mapWrapper=null;\n    this.stylePath=options.stylePath||this.host + '/shopsystems/v2/assets/GLSDkwidget.css';\n    this.markers=[];\n    this.pickupPoints=[];\n    this.carrier_icon_config={\n      30: {\n        extension: 'svg',\n        selectedState: true,\n        iconSize: [32, 32]\n      },\n      68: {\n        extension: 'svg',\n        selectedState: true,\n        iconSize: [57, 92]\n      },\n      71: {\n        extension: 'svg',\n        selectedState: true,\n        iconSize: [57, 92]\n      }\n    };\n    this.selectedPointIdx=null;\n    this.moveListeners=[];\n    this.isMoving=false; /* The map is loading points */\n    this.isUserMoving=false; /* The user is moving the map */\n    this.bounds=null;\n  }\n  setCarrierId(carrier_id){\n    console.log(\"OPENMAPCARRIERID\");\n    this.carrier_id=carrier_id;\n    this.current_icon=this.getCarrierIconOfType(this.carrier_id);\n  }\n  selectPoint(idx){\n    console.log(\"Select point\");\n    console.log(idx);\n    if(this.selectedPointIdx!=null){\n      this.markers[this.selectedPointIdx].setIcon(this.getCarrierIconOfType(this.carrier_id, this.pickupPoints[this.selectedPointIdx].Type, 0));\n    }\n    this.selectedPointIdx=idx;\n    this.markers[idx].setIcon(this.getCarrierIconOfType(this.carrier_id, this.pickupPoints[idx].Type, 1));\n  }\n  /**\n   *\n   * @param string imageUrl - full url to the icon\n   * @return L.icon object\n   */\n  createIcon(imageUrl){\n    let iconSize=typeof this.carrier_icon_config[this.carrier_id]!=\"undefined\" ? this.carrier_icon_config[this.carrier_id].iconSize:50;\n    return leaflet_1_4_0_default().icon({\n      iconUrl: imageUrl,\n      iconSize: [iconSize, iconSize],\n      /* size of the icon */\n      iconAnchor: [iconSize / 2, iconSize],\n      /* point of the icon which will correspond to marker's location */\n      popupAnchor: [-1 * iconSize / 2, -1 * iconSize / 2] /* point from which the popup should open relative to the iconAnchor */\n    });\n  }\n  setZoom=function (zoom){\n    this.map.setZoom(zoom);\n  };\n  isMapMoving(){\n    return this.isMoving||this.isUserMoving;\n  }\n  /**\n   * @param decimal lat\n   * @param decimal lng\n   */\n  centerMap(lat, lng){\n    let latlng=leaflet_1_4_0_default().latLng(lat, lng);\n  }\n\n  /**\n   * if the script has not been loaded , load it.\n   * We use this function because we only want to load the script when the user clicks the button\n   */\n  // ##DJDJ Proveri radi li bez ovoga\n  grantReady(){\n    if(!this.isScriptLoaded){\n      this.loadScript();\n    }\n  }\n\n  // ##DJDJ Bpost stuff\n  geocodeBpost(queryparts, fcallback){\n    console.log(\"BPOSTGEOCODE\");\n    this._geocode(queryparts.address, fcallback);\n  }\n  _geocode(queryparts, fcallback){\n    jQuery.getJSON('https://bpostdev.GLSDk.me/shopsystems/v2/shopify/bpostgeocode?searchText=' + queryparts, {}, function (resp){\n      console.log(resp.response);\n      let results=[];\n      let index=0;\n      if(resp.response&&resp.response.topSuggestions){\n        console.log(1);\n        console.log(resp);\n        let places=resp.response.topSuggestions;\n        for (let i=0; i < places.length; ++i){\n          index++;\n          // ##DJDJ Vrati ovo kako je bilo mozda?\n          if(places[i].address.searchBarString){\n            // if(index==1){\n            console.log(2);\n            results.push({\n              \"display_name\": places[i].address.searchBarString,\n              \"address\": {\n                City: places[i].address.municipalityName,\n                Country: 'be',\n                PostalCode: places[i].address.postalCode,\n                // ##DJDJ Ovo isto\n                Streetname1: places[i].address.searchBarString\n              },\n              \"lat\": places[i].address.latitude,\n              \"lng\": places[i].address.longitude\n            });\n          }\n        }\n      }\n      console.log(\"Rezultati\");\n      console.log(results);\n      fcallback&&fcallback(results);\n    });\n  }\n  // ##DJDJ GLSDk part\n  geocode(queryparts, fcallback){\n    console.log(\"GEOCODE FUNCTION\");\n    console.log(queryparts);\n    let queryval=queryparts.address;\n    let query=\"\";\n    const country=queryparts.country ? queryparts.country.toLowerCase():null;\n    if(queryval.match(/^([0-9\\-]+)$/)){\n      if(queryparts.country=='Portugal'&&typeof missingZipPT!='undefined'){\n        /* Is this a postal code we know is not geocodable in nominatim? */\n        let zip4dig=queryval.substring(0, 4);\n        for (let i=0; i < missingZipPT.length; ++i){\n          if(missingZipPT[i].zipcode==zip4dig){\n            this.queryResults={\n              \"display_name\": missingZipPT[i].display_name,\n              \"lat\": missingZipPT[i].lat,\n              \"lon\": missingZipPT[i].lng\n            };\n            return fcallback([this.queryResults]);\n          }\n        }\n      }\n      query='postalcode=' + queryval + '&country=' + country;\n    }else if(country){\n      query='q=' + queryval;\n    }\n    console.log(query);\n    jQuery(\"#sw-query-results\").html('<div class=\"sw-loader\"><div></div><div></div><div></div></div>');\n    jQuery.getJSON(\"https://nominatim.openstreetmap.org/search?format=json&addressdetails=1&\" + query, res=> {\n      console.log(\"Rezultat\");\n      console.log(res);\n      if(res.length==0&&queryval.match(/^([0-9\\-]+)$/)&&(country.toUpperCase()=='PT'||country.toLowerCase()=='portugal')){\n        jQuery(\"#sw-query\").val(queryval.substring(0, 4));\n        // ##DJDJ This is missing\n        this.geocodeQuery();\n        return;\n      }\n      this.queryResults=[];\n      console.log(\"TESTTESTOVDE\");\n      for (let i=0; i < res.length; ++i){\n        console.log(\"OVAJ RESPONSE\");\n        console.log(res[i]);\n        const wanted=res[i].address.postcode||res[i].address.city||res[i].address.county;\n        if(wanted&&jQuery('#shipping-country option:selected').val()!=\"\"){\n          if(jQuery('#shipping-country option:selected').val().toLowerCase()===res[i].address.country_code.toLowerCase()){\n            console.log(\"Wanted and val not null\");\n            this.pushDisplayedResults(res[i], queryparts);\n          }\n        }else if(wanted&&jQuery('#shipping-country option:selected').val()==\"\"){\n          console.log(\"Wanted and val null\");\n          this.pushDisplayedResults(res[i], queryparts);\n        }\n      }\n      console.log(fcallback);\n      console.log(this.queryResults);\n      fcallback&&fcallback(this.queryResults);\n    });\n  }\n  pushDisplayedResults(res, queryparts){\n    console.log(\"IF WANTED\");\n    let nomAddr=res;\n    const street=typeof nomAddr.address.road!='undefined' ? nomAddr.address.road:nomAddr.display_name;\n    let display_name=(street ? street:'') + ' ' + (nomAddr.address.postcode ? nomAddr.address.postcode:'');\n    if(typeof nomAddr.address.city!=='undefined'){\n      console.log(\"IMA GRAD\");\n      display_name +=' ' + nomAddr.address.city;\n    }\n    if(typeof nomAddr.address.region!=='undefined'){\n      console.log(\"IMA REGION\");\n      display_name +=' ' + nomAddr.address.region;\n    }\n    if(nomAddr.address.county){\n      console.log(\"IMA COUNTY\");\n      display_name +=' ' + nomAddr.address.county;\n    }\n    if(queryparts.country.toLowerCase()!==nomAddr.address.country.toLowerCase()){\n      display_name +=\" \" + nomAddr.address.country_code;\n    }\n    this.queryResults.push({\n      \"display_name\": display_name,\n      \"address\": {\n        City: nomAddr.address.city,\n        Country: nomAddr.address.country_code,\n        PostalCode: nomAddr.address.postcode,\n        Streetname1: street,\n        State: nomAddr.address.region\n      },\n      \"lat\": nomAddr.lat,\n      \"lng\": nomAddr.lon\n    });\n  }\n\n  /**\n   * @param f_callback what function to call when the request resolves\n   * @param city - city name\n   * @param country - country in iso2 uppercase\n   * @param postalcode - the postal code\n   * @param streetname - the streetname\n   */\n  geocodeAddress(f_callback, city, country, postalcode, streetname){\n    var queryString=\"https://nominatim.openstreetmap.org/search?format=json&addressdetails=1\" + \"&city=\" + city + \"&country=\" + country;\n    if(typeof postalcode!=='undefined'){\n      if(country=='PT'||country=='Portugal'){\n        postalcode=postalcode.substr(0, 4);\n      }\n      queryString +=\"&postalcode=\" + postalcode;\n    }\n    if(typeof streetname!=='undefined'){\n      queryString +=\"&street=\" + streetname;\n    }\n    if(typeof btoa!=='undefined'&&typeof this.address_cache[btoa(queryString)]!=='undefined'){\n      f_callback(this.address_cache[btoa(queryString)]);\n    }else{\n      jQuery.getJSON(queryString, {}, response=> {\n        let geocode={\n          'iso2': '',\n          'lat': '',\n          'lng': ''\n        };\n        if(response.length > 0){\n          let location=response[0];\n          geocode.iso2=location.address.country_code;\n          geocode.lat=location.lat;\n          geocode.lng=location.lon;\n        }\n        this.address_cache[btoa(queryString)]=geocode;\n        f_callback(geocode);\n        console.log(response);\n      });\n    }\n  }\n  // ##DJDJ Bpost\n  geocodeAddressPartsBpost(fcallback, city, country, postalcode, streetname){\n    let queryString='';\n    console.log(\"Address parts bpost\");\n    if(typeof streetname!='undefined'){\n      queryString +=encodeURI(streetname);\n    }\n    if(typeof postalcode!='undefined'){\n      queryString +=\",\" + postalcode;\n    }\n    this._geocode(queryString, function (results){\n      let latln={\n        lat: 0,\n        lng: 0\n      };\n      if(results.length > 0){\n        latln={\n          lat: results[0].latitude,\n          lng: results[0].longitude\n        };\n      }\n      fcallback&&fcallback(latln);\n    });\n  }\n  // ##DJDJ GLSDk code\n  geocodeAddressParts(f_callback, city, country, postalcode, streetname){\n    console.log(\"ADDRESSPARTS MICO\");\n    console.log(city);\n    console.log(country);\n    console.log(postalcode);\n    console.log(streetname);\n    var queryString=\"https://nominatim.openstreetmap.org/search?format=json&addressdetails=1\" + \"&city=\" + city + \"&country_code=\" + country;\n    if(typeof postalcode!='undefined'){\n      if(country=='PT'||country=='Portugal'){\n        postalcode=postalcode.substr(0, 4);\n      }\n      queryString +=\"&postalcode=\" + postalcode;\n    }\n    if(typeof streetname!='undefined'){\n      queryString +=\"&street=\" + encodeURI(streetname);\n    }\n    jQuery.getJSON(queryString, {}, function (response){\n      let geocode={\n        'iso2': '',\n        'lat': '',\n        'lng': ''\n      };\n      if(response.length > 0){\n        let location=response[0];\n        geocode.iso2=location.address.country_code;\n        geocode.lat=location.lat;\n        geocode.lng=location.lon;\n      }\n      console.log(\"geocode  \" + response.length + 'results');\n      if(geocode.lan){\n        console.log(\"returning \", geocode);\n      }\n      f_callback(geocode);\n    });\n  }\n  loadScript(){\n    GLSDk_utils.injectExternalScript(GLSDK_PLUGIN_URL + \"views/js/leaflet-1.4.0.js\");\n    this.isScriptLoaded=true;\n    return;\n  }\n\n  /**\n   * Leaflet does not receive a callback so we wait here for the script to be loaded\n   */\n  initMap(){\n    console.log(\"Load map\");\n    // this.mapWrapper=jQuery(this.options.mapParentContainer);\n    this.mapWrapper=jQuery(\"body\");\n    if(this.mapWrapper.hasClass('leaflet-container')){\n      console.log(\"map was already loaded\");\n      return;\n    }\n    this.icon_selected=this.createIcon(this.icon_folder + 'selected.png');\n    this.icon_default=this.createIcon(this.icon_folder + 'default.png');\n    if(!this.current_icon){\n      this.current_icon=this.icon_default;\n    }\n    this.map=new (leaflet_1_4_0_default()).map('sw-map', {\n      \"zoom\": 16,\n      \"center\": [51.505, -0.09]\n    });\n    leaflet_1_4_0_default().tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {\n      \"attribution\": '&copy; <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors'\n    }).addTo(this.map);\n    this.options.onmapready&&this.options.onmapready();\n    this.map.on('click', ()=> {\n      jQuery(\".sw-map-selected-point\").html(\"\");\n    });\n    this.map.on('moveend', ()=> {\n      let center=this.getCenter();\n      if(!this.isInBounds(center.lat, center.lng)){\n        this.moveEnd();\n      }\n    });\n  }\n  async moveEnd(){\n    if(this.isMapMoving()){\n      return;\n    }\n    this.isUserMoving=true;\n    let mapCenter=this.map.getCenter();\n    for (let i=0; this.moveListeners&&i < this.moveListeners.length; ++i){\n      await this.moveListeners[i](mapCenter);\n    }\n    console.log(\"MOVE LISTENERS ENDED\");\n    this.isUserMoving=false;\n  }\n  addMapMoveListener(fcallback){\n    this.moveListeners.push(fcallback);\n  }\n  getCenter(){\n    return this.map.getCenter();\n  }\n  isInBounds(lat, lng){\n    if(!this.bounds){\n      return false;\n    }\n    let inLat=lat > this.bounds.bottomLeft.lat&&lat < this.bounds.topRight.lat;\n    let eastBound=lng < this.bounds.topRight.lng;\n    let westBound=lng > this.bounds.bottomLeft.lng;\n    let inLng;\n    if(this.bounds.topRight.lng < this.bounds.bottomLeft.lng){\n      inLng=eastBound||westBound;\n    }else{\n      inLng=eastBound&&westBound;\n    }\n    return inLng&&inLat;\n  }\n  clearMarkers(){\n    console.log(\"Clear markers\");\n    console.log(this.map);\n    this.bounds=null;\n    this.selectedPointIdx=null;\n    if(this.markers.length > 0){\n      for (let i=0; i < this.markers.length; ++i){\n        this.map.removeLayer(this.markers[i]);\n      }\n    }\n    this.markers=[];\n    if(!this.isMoving){\n      this.map.setMinZoom(0);\n    }\n  }\n\n  /**\n   * Add the markers to map\n   * @param array pickupPoints - an array of pickupPoints\n   * @param function callback\n   */\n  addMarkers(pickupPoints, callback){\n    console.log(\"ADD MARKERS 232323\");\n    this.isMoving=true;\n    this.pickupPoints=pickupPoints;\n    for (let x=0; x < pickupPoints.length; ++x){\n      this.markers[x]=this.getMarker(pickupPoints[x]);\n      /*    we need to do this because the values for lat,lng we have are rounded, so they will not match the ones returned by google */\n      this.pickupPoints[x].marker=this.markers[x];\n      this.markers[x].on('click', function (){\n        if(typeof callback=='function'){\n          callback(x);\n        }\n      });\n    }\n    this.fitBounds();\n    console.log(\"Gotov fit bounds\");\n  }\n  resetMarker(marker){\n    marker.setIcon(this.icon_default);\n  }\n  selectMarker(marker){\n    marker.setIcon(this.icon_selected);\n  }\n\n  /**\n   * Adjust the zoom in the map to display all the markers\n   * There's a fit bounds that receives 2 corners, but calculating them is up to us.\n   * corners: top left, bottom right\n   * then we center the map at the center of the square\n   */\n  fitBounds=function (){\n    jQuery('html,body').scrollTop(0);\n    this.map.invalidateSize();\n\n    /*this function changes the map center*/\n    this.isMoving=true;\n    let bottomLeft=[parseFloat(this.pickupPoints[0].Lat), parseFloat(this.pickupPoints[0].Long)];\n    let topRight=[parseFloat(this.pickupPoints[0].Lat), parseFloat(this.pickupPoints[0].Long)];\n    for (let i=0; i < this.pickupPoints.length; ++i){\n      let lat=parseFloat(this.pickupPoints[i].Lat);\n      let lng=parseFloat(this.pickupPoints[i].Long);\n      if(lat < bottomLeft[0]){\n        bottomLeft[0]=lat;\n      }\n      if(lat > topRight[0]){\n        topRight[0]=lat;\n      }\n      if(lng > topRight[1]){\n        topRight[1]=lng;\n      }\n      if(lng < bottomLeft[1]){\n        bottomLeft[1]=lng;\n      }\n    }\n    let centerX=bottomLeft[0] + (topRight[0] - bottomLeft[0]) / 2;\n    let centerY=bottomLeft[1] + (topRight[1] - bottomLeft[1]) / 2;\n    this.center=[centerX, centerY];\n    this.centerMap(centerX, centerY);\n    this.map.fitBounds([bottomLeft, topRight]);\n    this.bounds={\n      \"bottomLeft\": {\n        lat: bottomLeft[0],\n        lng: bottomLeft[1]\n      },\n      \"topRight\": {\n        lat: topRight[0],\n        lng: topRight[1]\n      }\n    };\n\n    /* Grant changes are applied before we state we're no longer moving the map around via js */\n    setTimeout(()=> {\n      this.isMoving=false;\n      let zoom=10;\n      if(zoom > 16||zoom < 10){\n        zoom=10;\n      }\n      this.map.setMinZoom(zoom);\n      console.log(\"map zoom is \", zoom);\n    }, 1000);\n    return false;\n  };\n  getIcon(pickupPoint){\n    return pickupPoint.Type > 0 ? this.getCarrierIconOfType(this.carrier_id, pickupPoint.Type):this.current_icon;\n  }\n\n  /**\n   * Return a marker for the openLayers\n   * IconAnchor: The coordinates of the \"tip\" of the icon (relative to its top left corner).\n   * The icon will be aligned so that this point is at the marker's geographical location.\n   * Centered by default if size is specified, also can be set in CSS with negative margins.\n   */\n  getMarker(pickupPoint){\n    let marker=leaflet_1_4_0_default().marker([pickupPoint.Lat, pickupPoint.Long], {\n      \"icon\": this.getIcon(pickupPoint),\n      \"title\": pickupPoint.Information.Name + \"\\n\" + pickupPoint.Information.Address\n    });\n    marker.addTo(this.map);\n    return marker;\n  }\n  getCarrierIconOfType(carrier_id, type, selected){\n    var allowedTypes=[1, 2, 4, 16, 990];\n    let carrier_icon_url;\n    let file_extension='.' + (typeof this.carrier_icon_config[carrier_id]!='undefined' ? this.carrier_icon_config[carrier_id].extension:\"png\");\n    let selectedextension=typeof this.carrier_icon_config[carrier_id]!='undefined'&&this.carrier_icon_config[carrier_id].selectedState&&selected ? '_s':'';\n    if(selected&&!selectedextension){\n      return this.icon_selected;\n    }\n    if(type&&allowedTypes.includes(type)){\n      carrier_icon_url=this.icon_folder + '' + carrier_id + '_' + type + selectedextension + file_extension;\n    }else{\n      carrier_icon_url=this.icon_folder + carrier_id + selectedextension + file_extension;\n    }\n    return this.createIcon(carrier_icon_url);\n  }\n  /**\n   * Checks if we have an icon for this carrier.\n   * If yes then change the carrier icon\n   * If not then use the default icon\n   *\n   * @param int carrier_id - the carrier id\n   */\n  setCarrierIcon(carrier_id){\n    console.log(\"SetCarrierIcon\");\n    if(typeof (leaflet_1_4_0_default())==='undefined'){\n      setTimeout(()=> {\n        this.setCarrierIcon(carrier_id);\n      }, 200);\n      return;\n    }\n    this.carrier_id=carrier_id;\n    let carrier_icon_url=this.icon_folder + '' + carrier_id + '.png';\n    if(typeof this.cache_icon_valid[carrier_icon_url]==='undefined'){\n      this.cache_icon_valid[carrier_icon_url]=GLSDk_utils.carrierIconExists(carrier_id, '', this.icon_folder);\n    }\n    this.current_icon=this.cache_icon_valid[carrier_icon_url] ? this.createIcon(carrier_icon_url):this.icon_default;\n  }\n}\n;// CONCATENATED MODULE: ./js/GLSDk-gmaps.js\n\nclass GLSDkGmaps {\n  constructor(options){\n    console.log(\"Entered\");\n    this.isScriptLoaded=false;\n    this.markers=[];\n    this.map=null;\n    this.pickupPoints=[];\n    this.options=options;\n    this.host=options.host;\n    console.log(\"Icon folder\");\n    console.log(GLSDk_icon_folder);\n    this.icon_folder=typeof GLSDk_icon_folder!=='undefined' ? GLSDk_icon_folder:'';\n    this.icon_selected=this.icon_folder + 'selected.png';\n    this.icon_default=this.icon_folder + 'default.png';\n    this.current_icon=this.icon_default;\n    this.moveListeners=[];\n    this.carrier_id=null;\n    this.carrier_icon_config={\n      30: {\n        extension: 'svg',\n        selectedState: true,\n        iconSize: 98\n      }\n    };\n    this.GLSDkWidget=new GLSDk_widget(options);\n  }\n  initMap(carrier_id, f_callback){\n    this.carrier_id=carrier_id;\n    let me=this;\n    this.loadScript(\"https://maps.googleapis.com/maps/api/js?key=\" + this.options.gmapskey + \"&callback=\", ()=> {\n      console.log(\"USAO U IF\");\n      me.isScriptLoaded=true;\n      f_callback&&f_callback();\n      this.loadMap();\n    });\n    console.log(\"Initmap Nije usao u if\");\n  }\n  loadScript(url, callback){\n    var script=document.createElement(\"script\");\n    script.type=\"text/javascript\";\n    if(script.readyState){\n      /*IE */\n      script.onreadystatechange=function (){\n        if(script.readyState=='loaded'||script.readyState=='complete'){\n          script.onreadystatechange=null;\n          calback&&callback();\n        }\n      };\n    }else{\n      script.onload=function (){\n        callback&&callback();\n      };\n    }\n    script.src=url;\n    document.getElementsByTagName(\"head\")[0].appendChild(script);\n  }\n  addMarkers(pickupPoints, callback){\n    this.pickupPoints=pickupPoints;\n    for (let x=0; x < pickupPoints.length; ++x){\n      this.markers[x]=this.getMarker(pickupPoints[x]);\n      pickupPoints[x].marker=this.markers[x];\n      this.markers[x].addListener('click', ()=> {\n        if(typeof callback!='undefined'){\n          callback(x);\n        }\n      });\n    }\n    this.fitBounds();\n  }\n  addMapMoveListener(fcallback){\n    this.moveListeners.push(fcallback);\n  }\n  centerMap(lat, lng){\n    this.map.setCenter(new google.maps.LatLng(lat, lng));\n  }\n  clearMarkers(){\n    if(this.markers.length > 0){\n      for (let i=0; i < this.markers.length; ++i){\n        this.markers[i].setMap(null);\n      }\n      this.markers=[];\n    }\n  }\n  fitBounds(){\n    var bounds=new google.maps.LatLngBounds();\n    for (let x=0; x < this.markers.length; ++x){\n      bounds.extend(this.markers[x].getPosition());\n    }\n    this.map.fitBounds(bounds);\n    this.bounds=this.map.getBounds();\n  }\n  getMarker(pickupPoint){\n    console.log(\"GETMARKER\");\n    let url=this.getCarrierIconUrl(pickupPoint.Type, 0);\n    let options={\n      position: new google.maps.LatLng(pickupPoint.Lat, pickupPoint.Long),\n      map: this.map,\n      icon: {\n        url\n      }\n    };\n    // ##DJDJ Ako nista odradi kao i u open map\n    console.log(\"PRE IF\");\n    if(typeof this.carrier_icon_config[this.carrier_id]!='undefined'){\n      console.log(\"IF GET MARKER\");\n      console.log(this.carrier_icon_config);\n      console.log(this.carrier_icon_config[this.carrier_id].iconSize);\n      options.icon.size=new google.maps.Size(this.carrier_icon_config[this.carrier_id].iconSize, this.carrier_icon_config[this.carrier_id].iconSize);\n    }else{\n      console.log(\"ELSE GET MARKER\");\n      options.icon.scaledSize=new google.maps.Size(50, 50);\n    }\n    console.log(\"POSLE IF\");\n    let marker=new google.maps.Marker(options);\n    return marker;\n  }\n  isMapMoving(){\n    return this.isMoving||this.isUserMoving;\n  }\n  async moveEnd(){\n    if(this.isMapMoving()){\n      return;\n    }\n    this.isUserMoving=true;\n    let mapCenter=this.map.getCenter();\n    for (let i=0; this.moveListeners&&i < this.moveListeners.length; ++i){\n      await this.moveListeners[i]({\n        \"lat\": mapCenter.lat(),\n        \"lng\": mapCenter.lng()\n      });\n    }\n    console.log(\"MOVE LISTENERS ENDED\");\n    this.isUserMoving=false;\n  }\n  loadMap(){\n    console.log(\"LOADMAP\");\n    this.map=new google.maps.Map(document.getElementById(\"sw-map\"), {\n      center: {\n        lat: -34.397,\n        lng: 150.644\n      },\n      zoom: 16,\n      mapTypeControl: false\n    });\n    this.map.addListener('center_changed', ()=> {\n      let center=this.map.getCenter();\n      if(this.bounds&&!this.bounds.contains(center)){\n        this.moveEnd();\n      }\n    });\n  }\n  geocode(queryparts, f_callback){\n    if(typeof google=='undefined'){\n      setTimeout(()=> {\n        this.geocode(shippingData, f_callback);\n      }, 200);\n      return;\n    }\n    this.clearMarkers();\n    let geocoder=new google.maps.Geocoder();\n    let me=this;\n    console.log('geocoding ', queryparts);\n    let query=\"components=country:\" + queryparts.country;\n    if(queryparts.address&&queryparts.address.match(/^([0-9\\-]+)$/)){\n      if(queryparts.country.toUpperCase()=='PT'&&typeof missingZipPT!='undefined'){\n        let zip4dig=queryparts.address.substring(0, 4);\n        for (let i=0; i < missingZipPT.length; ++i){\n          if(missingZipPT[i].zipcode==zip4dig){\n            let queryResults=[{\n              display_name: missingZipPT[i].display_name,\n              lat: missingZipPT[i].lat,\n              lon: missingZipPT[i].lng\n            }];\n            return f_callback(queryResults);\n          }\n        }\n      }\n    }\n    if(queryparts.components){\n      query +='|' + queryparts.components;\n    }else if(queryparts.address.match(/^[0-9]/)){\n      query +='|postal_code:' + queryparts.address;\n    }else{\n      query +='&address=' + queryparts.address;\n    }\n    jQuery.get('https://maps.google.com/maps/api/geocode/json?sensor=false&key=' + this.options.gmapskey + '&' + query, function (response){\n      let results=response.results;\n      let status=response.status;\n      console.log(results);\n      let geocode={\n        iso2: '',\n        lat: '',\n        lng: ''\n      };\n      if(status!='OK'){\n        console.log('Geocode was not successful for the following reason: ' + status, response.error_msg);\n        f_callback(geocode);\n        return;\n      }\n      let places=[];\n      for (let i=0; i < results.length; ++i){\n        geocode=results[i];\n        let display_name='';\n        for (let j=0; geocode.address_components&&j < geocode.address_components.length; ++j){\n          display_name +=(display_name ? ', ':'') + geocode.address_components[j].long_name;\n        }\n        places.push({\n          iso2: me.getCountryCodeFromResult(geocode),\n          display_name,\n          lat: geocode.geometry.location.lat,\n          lng: geocode.geometry.location.lng\n        });\n      }\n      f_callback(places);\n    });\n  }\n  getCountryCodeFromResult(geocode){\n    if(typeof geocode.address_components==\"undefined\"){\n      return \"\";\n    }\n    let components=geocode.address_components;\n    for (let i=0; i < components.length; ++i){\n      let types=components[i].types;\n      for (let j=0; j < types.length; ++j){\n        if(types[j]=='country'){\n          return components[i].short_name;\n        }\n      }\n    }\n  }\n  geocodeAddressParts(f_callback, city, country, postalcode, streetname){\n    if(typeof postalcode!='undefined'){\n      if(country=='PT'||country=='Portugal'){\n        postalcode=postalcode.substr(0, 4);\n      }\n    }\n    let components=\"postal_code:\" + postalcode + \"|locality:\" + city;\n    this.geocode({\n      country,\n      \"components\": components\n    }, places=> {\n      f_callback(places[0]);\n    });\n  }\n  setCarrierId(carrier_id){\n    this.carrier_id=carrier_id;\n  }\n  selectPoint(idx){\n    console.log(\"Selectpoint\");\n    for (let i=0; i < this.markers.length; ++i){\n      let point=this.pickupPoints[i];\n      console.log(point);\n      let icon={\n        url: this.getCarrierIconUrl(point.Type, idx==i)\n      };\n      if(typeof this.carrier_icon_config[this.carrier_id]!=\"undefined\"){\n        icon.size=new google.maps.Size(this.carrier_icon_config[this.carrier_id].iconSize, this.carrier_icon_config[this.carrier_id].iconSize);\n      }else{\n        icon.scaledSize=new google.maps.Size(50, 50);\n      }\n      console.log(\"SetICOD\");\n      console.log(icon);\n      this.markers[i].setIcon(icon);\n    }\n  }\n  setCarrierId(carrier_id){\n    this.carrier_id=carrier_id;\n  }\n  getCarrierIconUrl(type, selected){\n    let carrier_icon_url;\n    let file_extension='.' + (typeof this.carrier_icon_config[this.carrier_id]!='undefined' ? this.carrier_icon_config[this.carrier_id].extension:\"png\");\n    let selectedextension=typeof this.carrier_icon_config[this.carrier_id]!='undefined'&&this.carrier_icon_config[this.carrier_id].selectedState&&selected ? '_s':'';\n    if(selected&&!selectedextension){\n      return this.icon_selected;\n    }\n    if(type&&typeof GLSDk_carrier_imgs!='undefined'&&GLSDk_carrier_imgs.indexOf(this.carrier_id + \"_\" + type + file_extension)){\n      console.log(\"getCarrierIconUrl 1\");\n      carrier_icon_url=this.icon_folder + '' + this.carrier_id + '_' + type + selectedextension + file_extension;\n    }else{\n      console.log(\"getCarrierIconUrl 2\");\n      console.log(this.carrier_id);\n      // ##DJDJ Ne znam zasto je svg, pogledaj da vratis kako je bilo\n      carrier_icon_url=this.icon_folder + this.carrier_id + selectedextension + '.png';\n    }\n    return carrier_icon_url;\n  }\n}\n/* harmony default export */ const GLSDk_gmaps=(GLSDkGmaps);\n;// CONCATENATED MODULE: ./js/GLSDk-widget.js\n// eslint-disable-next-line prop-types\n\n\n\n\nclass GLSDkWidget {\n  constructor(options){\n    this.pickupPoints=[];\n    this.selectedPoint=null;\n    this.options=options;\n    this.markers=[];\n    this.host=options.host||'https://GLSDk.me';\n    this.debug=options.debug||0;\n    this.mapParentContainer=options.mapParentContainer||'body';\n    this.buttonParentContainer=options.buttonParentContainer||'';\n    this.isScriptLoaded=false;\n    this.buttonClass=this.options.button_class||'';\n    this.labels=this.options.labels||{};\n    this.platform=new Woocommerce(options.ajax_url);\n    this.timeoutKeyDown=null;\n    this.searchRunning=false;\n    this.address=this.options.address||null;\n    this.carrier_id=this.options.carrierId||0;\n    this.lang='en';\n    this.weekdaynames=[GLSDk_monday, GLSDk_tuesday, GLSDk_wednesday, GLSDk_thursday, GLSDk_friday, GLSDk_saturday, GLSDk_sunday];\n    this.selectedDisplayOption=0;\n    this.cacheResults={};\n    console.log(\"Jeste checkout ili nije\");\n    jQuery(document).ready(()=> {\n      let hasRunCheckVisibility=false; // Ensure the visibility check only runs once\n      let hasRunPlaceOrderCheck=false;\n\n      // Check visibility for shipping options (run only once)\n      const checkVisibility=setInterval(()=> {\n        const inputElement=jQuery(\".wc-block-components-shipping-rates-control__package\");\n        if(inputElement.is(':visible')&&!hasRunCheckVisibility){\n          hasRunCheckVisibility=true;\n          clearInterval(checkVisibility); // Clear interval after first successful check\n\n          console.log(\"Ovdeeee sam\");\n          window.selectedText=\"\";\n          window.selectedText=jQuery(\"fieldset.wc-block-checkout__shipping-option\").find(\".wc-block-components-radio-control__input:checked\").closest(\"label\").find(\".wc-block-components-radio-control__label\").text();\n          if(window.selectedText===\"\"){\n            console.log(\"Prazan\");\n            jQuery(\"fieldset.wc-block-checkout__shipping-option\").find(\".wc-block-components-radio-control__option-layout\").each(function (){\n              window.selectedText=jQuery(this).find(\".wc-block-components-radio-control__label\").text();\n            });\n          }\n          if(typeof this.isBlockCheckout===\"function\"&&this.isBlockCheckout()){\n            this.getSelectedCarrier();\n            this.getFormChange();\n          }\n          this.getOnClick();\n        }\n      }, 500); // Interval delay in milliseconds\n\n      // Check visibility for \"Place Order\" button (run only once)\n      const placeOrderCheck=setInterval(()=> {\n        const placeOrderButton=jQuery(\"#place_order\");\n        if(placeOrderButton.is(':visible')&&!hasRunPlaceOrderCheck){\n          hasRunPlaceOrderCheck=true;\n          clearInterval(placeOrderCheck); // Clear interval after first successful check\n\n          console.log(\"Ovdeeee sam visible checkout\");\n          placeOrderButton.on('click', function (e){\n            let shipping_pickup_id=jQuery(\"#shipping_pickup_id\").val();\n            console.log(\"Clicked\");\n            console.log(window.carrier_id);\n            console.log(window.mandatoryData);\n            if(window.mandatoryData!==\"\"&&window.mandatoryData.pickupMandatory&&shipping_pickup_id===\"\"){\n              console.log(\"USAO IF\");\n              e.preventDefault(); // Prevent default form submission\n\n              // Modal creation\n              const modal=jQuery('<div>', {\n                id: 'myModal',\n                css: {\n                  'display': 'none',\n                  'position': 'fixed',\n                  'z-index': '1',\n                  'left': '0',\n                  'top': '0',\n                  'width': '100%',\n                  'height': '100%',\n                  'overflow': 'auto',\n                  'background-color': 'rgba(0,0,0,0.4)'\n                }\n              });\n              const modalContent=jQuery('<div>', {\n                css: {\n                  'background-color': '#fefefe',\n                  'margin': '15% auto',\n                  'padding': '20px',\n                  'border': '1px solid #888',\n                  'width': '80%'\n                }\n              });\n              const closeButton=jQuery('<span>', {\n                text: '×',\n                css: {\n                  'color': '#aaa',\n                  'float': 'right',\n                  'font-size': '28px',\n                  'font-weight': 'bold',\n                  'cursor': 'pointer'\n                }\n              });\n              const message=jQuery('<p>', {\n                text: GLSDk_mandatory_point\n              });\n              let button=jQuery(\"<button class='button alt Bpost-pick-location' id='Bpost_pickup_button' type='button' onClick='Bpost.getPickupLocations(event)'>\" + Bpost_choose_pickup_location + \"</button>\");\n\n              // Append the elements\n              modalContent.append(closeButton);\n              modalContent.append(message);\n              modal.append(modalContent);\n              modalContent.append(button);\n              jQuery('body').append(modal);\n\n              // Show the modal\n              modal.show();\n\n              // Close modal handlers\n              closeButton.on('click', function (){\n                modal.hide();\n              });\n              jQuery(window).on('click', function (event){\n                if(jQuery(event.target).is(modal)){\n                  modal.hide();\n                }\n              });\n              return false; // Prevent submission\n            }\n          });\n        }\n      }, 500); // Interval delay in milliseconds\n    });\n    this.getOnSubmitButtonBlockClickNoTheme();\n    this.getThemeShippingMethod(options);\n  }\n  getThemeShippingMethod(options){\n    console.log(\"Options\");\n    console.log(options);\n    if(jQuery('.woocommerce-checkout-payment').length > 0){\n      jQuery(document).ajaxComplete((event, xhr, settings)=> {\n        if(settings.url.includes(\"update_order_review\")){\n          console.log(\"Complete request\");\n          console.log('Request made to wc-ajax=update_order_review');\n          console.log(jQuery('.Bpost-pick-location'));\n          var checkedRadio=jQuery('#shipping_method input[type=\"radio\"]:checked');\n\n          // Get the associated label text of the checked radio button\n          var selectedText=checkedRadio.siblings('label').text().split(':')[0].trim();\n\n          // Log or use the selected shipping method\n          console.log('Selected shipping method: ' + selectedText);\n          if(selectedText==''){\n            // Select the parent element containing the list of shipping methods\n            const shippingMethodsList=document.querySelector('#shipping_method');\n\n            // Check if the list exists\n            if(shippingMethodsList){\n              // Traverse the list items\n              const shippingMethodItems=shippingMethodsList.querySelectorAll('li');\n\n              // Iterate over each list item\n              shippingMethodItems.forEach(item=> {\n                // Find the <label> element inside the <li>\n                const labelElement=item.querySelector('label');\n                if(labelElement){\n                  // Extract the text content before the colon (:) to get the dynamic title\n                  const labelText=labelElement.textContent.trim();\n                  selectedText=labelText.split(':')[0].trim();\n                  console.log('Shipping Method Title:', selectedText);\n                }\n              });\n            }\n          }\n          let req={\n            'action': 'Bpost_selected_carrier',\n            'carrier': selectedText\n          };\n          console.log(\"Dosao si dovde\");\n          console.log(req);\n          jQuery.getJSON(window.location.origin + '/wp-admin/admin-ajax.php?', req, data=> {\n            console.log(\"Caoaooo nasaooo22\");\n            console.log(data.status);\n            if(data.status==1){\n              console.log(\"Caooooo status 123\");\n              if(data.pickupMandatory==true){\n                window.mandatoryData=data;\n              }\n              this.carrier_id=data.carrier_id;\n              window.carrier_id=data.carrier_id;\n              jQuery(document).ready(()=> {\n                var checkVisibility=setInterval(()=> {\n                  var inputElement=jQuery(\".woocommerce-checkout-payment\");\n                  if(inputElement.is(':visible')){\n                    // The input element is visible, you can proceed with your script\n                    clearInterval(checkVisibility); // Stop checking\n                    // Your code here\n                    console.log(\"ITS VISIBLE 222\");\n                    jQuery('#place_order').prop('disabled', true);\n                    if(jQuery(\"#pickupText\").length==0){\n                      jQuery('#place_order').after('<p id=\"pickupText\" style=\"color:red;\">Select pickup point</p>');\n                    }else if(jQuery(\"#pickupText\").length > 0){\n                      jQuery(\"#pickupText\").show();\n                    }\n                    jQuery('.Bpost-pick-location').show();\n                  }\n                }, 100); // Check every 100 milliseconds\n              });\n            }else{\n              console.log(\"Else nema pickup\");\n              jQuery('.Bpost-pick-location').hide();\n              jQuery('#shipping_pickup_id').val('');\n              jQuery('#shipping_pickup_label').val('');\n              jQuery('#shipping_pickup_extended').val('');\n\n              // Hide the span element\n              jQuery('.Bpost-pickup__description').hide();\n              if(jQuery('.Bpost-pickup__description').length > 0){\n                console.log(\"Usao iako nema\");\n                jQuery('.Bpost-pickup__description').hide();\n              }\n              jQuery('#place_order').prop('disabled', false);\n              jQuery('#pickupText').hide();\n            }\n          }).fail(err=> {\n            console.log(\"Fatal error widget requesting points do we have an API bug?\");\n          });\n        }\n      });\n      (function (open){\n        XMLHttpRequest.prototype.open=function (method, url, async, user, pass){\n          // Check if the request URL contains 'wc-ajax=update_order_review'\n          if(url.indexOf('wc-ajax=update_order_review')!==-1){\n            console.log('Request made to wc-ajax=update_order_review');\n            console.log(jQuery('.Bpost-pick-location'));\n            var checkedRadio=jQuery('#shipping_method input[type=\"radio\"]:checked');\n\n            // Get the associated label text of the checked radio button\n            var selectedText=checkedRadio.siblings('label').text().split(':')[0].trim();\n\n            // Log or use the selected shipping method\n            console.log('Selected shipping method: ' + selectedText);\n            let req={\n              'action': 'Bpost_selected_carrier',\n              'carrier': selectedText\n            };\n            console.log(\"Dosao si dovde\");\n            console.log(req);\n            jQuery.getJSON(window.location.origin + '/wp-admin/admin-ajax.php?', req, data=> {\n              console.log(\"Caoaooo nasaooo22\");\n              console.log(data.status);\n              if(data.status==1){\n                console.log(\"Caooooo status 123\");\n                if(data.pickupMandatory==true){\n                  window.mandatoryData=data;\n                }\n                this.carrier_id=data.carrier_id;\n                window.carrier_id=data.carrier_id;\n                jQuery(document).ready(()=> {\n                  var checkVisibility=setInterval(()=> {\n                    var inputElement=jQuery(\".woocommerce-checkout-payment\");\n                    if(inputElement.is(':visible')){\n                      // The input element is visible, you can proceed with your script\n                      clearInterval(checkVisibility); // Stop checking\n                      // Your code here\n                      console.log(\"ITS VISIBLE 222\");\n                      jQuery('#place_order').prop('disabled', true);\n                      if(jQuery(\"#pickupText\").length==0){\n                        jQuery('#place_order').after('<p id=\"pickupText\" style=\"color:red;\">Select pickup point</p>');\n                      }else if(jQuery(\"#pickupText\").length > 0){\n                        jQuery(\"#pickupText\").show();\n                      }\n                      jQuery('.Bpost-pick-location').show();\n                    }\n                  }, 100); // Check every 100 milliseconds\n                });\n              }else{\n                console.log(\"Else nema pickup\");\n                jQuery('.Bpost-pick-location').hide();\n\n                // Remove values from hidden inputs\n                jQuery('#shipping_pickup_id').val('');\n                jQuery('#shipping_pickup_label').val('');\n                jQuery('#shipping_pickup_extended').val('');\n\n                // Hide the span element\n                jQuery('.Bpost-pickup__description').hide();\n                if(jQuery('.Bpost-pickup__description').length > 0){\n                  console.log(\"Usao iako nema\");\n                  jQuery('.Bpost-pickup__description').hide();\n                }\n                jQuery('#place_order').prop('disabled', false);\n                jQuery('#pickupText').hide();\n              }\n            }).fail(err=> {\n              console.log(\"Fatal error widget requesting points do we have an API bug?\");\n            });\n          }\n\n          // Call the original open method\n          open.apply(this, arguments);\n        };\n      })(XMLHttpRequest.prototype.open);\n    }\n  }\n  getFormChange(){\n    jQuery(\".wc-block-checkout__form\").on('change', ()=> {\n      // This function will be triggered when any form field inside the \"checkout\" form is changed\n      console.log(\"Form changed! block block\");\n      if(jQuery('#shipping-loader').length <=0){\n        const loaderText=jQuery('<div id=\"shipping-loader\">Loading shipping method data...</div>').css({\n          'display': 'flex',\n          'align-items': 'center',\n          'font-size': '14px',\n          'color': '#333',\n          'margin-top': '10px'\n        });\n\n        // Append the loader text to the bottom of the #shipping-option element\n        jQuery('#shipping-option').append(loaderText);\n      }\n      this.disableButton();\n      setTimeout(()=> {\n        window.selectedText=jQuery(\"fieldset.wc-block-checkout__shipping-option\").find(\".wc-block-components-radio-control__input:checked\").closest(\"label\").find(\".wc-block-components-radio-control__label\").text();\n        if(window.selectedText===undefined){\n          console.log(\"Prazan\");\n          jQuery(\"fieldset.wc-block-checkout__shipping-option\").find(\".wc-block-components-radio-control__option-layout\").each(function (){\n            window.selectedText=jQuery(this).find(\".wc-block-components-radio-control__label\").text();\n          });\n        }\n\n        // You can perform your desired actions here\n        this.getSelectedCarrier();\n      }, 2000);\n    });\n    this.enableButton();\n  }\n  getOnSubmitButtonBlockClickNoTheme(){\n    console.log(\"Submitted no theme\");\n    var checkVisibility=setInterval(()=> {\n      var inputElement=jQuery('.wc-block-components-checkout-place-order-button');\n      if(inputElement.is(':visible')){\n        // The input element is visible, you can proceed with your script\n        clearInterval(checkVisibility); // Stop checking\n        // Your code here\n\n        inputElement.on('click', function (e){\n          let shipping_pickup_id=jQuery(\"#shipping_pickup_id\").val();\n          console.log(\"Clicked\");\n          console.log(carrier_id);\n          console.log(window.mandatoryData);\n          if(window.mandatoryData!=\"\"&&window.mandatoryData.pickupMandatory&&shipping_pickup_id==\"\"){\n            var modal=jQuery('<div>', {\n              id: 'myModal',\n              css: {\n                'display': 'none',\n                'position': 'fixed',\n                'z-index': '1',\n                'left': '0',\n                'top': '0',\n                'width': '100%',\n                'height': '100%',\n                'overflow': 'auto',\n                'background-color': 'rgba(0,0,0,0.4)'\n              }\n            });\n            var modalContent=jQuery('<div>', {\n              css: {\n                'background-color': '#fefefe',\n                'margin': '15% auto',\n                'padding': '20px',\n                'border': '1px solid #888',\n                'width': '80%'\n              }\n            });\n            var closeButton=jQuery('<span>', {\n              text: '×',\n              css: {\n                'color': '#aaa',\n                'float': 'right',\n                'font-size': '28px',\n                'font-weight': 'bold',\n                'cursor': 'pointer'\n              }\n            });\n            var message=jQuery('<p>', {\n              text: GLSDk_mandatory_point\n            });\n            let button=jQuery(\"<button class='button alt GLSDk-pick-location' id='GLSDk_pickup_button' type='button' onClick='GLSDk.getPickupLocations(event)'>\" + GLSDk_choose_pickup_location + \"</button>\");\n\n            // Append the elements\n            modalContent.append(closeButton);\n            modalContent.append(message);\n            modal.append(modalContent);\n            modalContent.append(button);\n            jQuery('body').append(modal);\n\n            // Show the modal\n            modal.show();\n\n            // Close the modal when the user clicks on <span> (x)\n            closeButton.on('click', function (){\n              modal.hide();\n            });\n\n            // Close the modal when the user clicks anywhere outside of the modal content\n            jQuery(window).on('click', function (event){\n              if(jQuery(event.target).is(modal)){\n                modal.hide();\n              }\n            });\n            return false;\n          }\n        });\n      }\n    }, 100); // Check every 100 milliseconds\n\n    // jQuery('#place_order')\n  }\n  getSelectedCarrier(){\n    console.log(\"selectedCarrier\");\n    if(jQuery('#shipping-loader').length){\n      jQuery('#shipping-loader').remove();\n    }\n    console.log(window.selectedText);\n    window.mandatoryData=\"\";\n    jQuery(\"#GLSDk_pickup_button\").remove();\n    let req={\n      'action': 'GLSDk_selected_carrier',\n      'carrier': window.selectedText\n    };\n    jQuery.getJSON(this.options.ajax_url, req, data=> {\n      console.log(\"Caoaooo nasaooo22\");\n      this.disableButton();\n      jQuery('#GLSDk-pickup__description').hide();\n      console.log(data.status);\n      if(data.status==1){\n        console.log(\"Caooooo status 123\");\n        if(data.pickupMandatory==true){\n          window.mandatoryData=data;\n        }\n        this.carrier_id=data.carrier_id;\n        window.carrier_id=data.carrier_id;\n        jQuery(document).ready(()=> {\n          var checkVisibility=setInterval(()=> {\n            var inputElement=jQuery(\".wc-block-components-shipping-rates-control__package\");\n            if(inputElement.is(':visible')){\n              // The input element is visible, you can proceed with your script\n              clearInterval(checkVisibility); // Stop checking\n              // Your code here\n              console.log(\"ITS VISIBLE 222\");\n              this.getBlockShippingData();\n              console.log(inputElement);\n              if(jQuery('#GLSDk_pickup_button').length <=0){\n                console.log(\"No pickup button on page so we add\");\n                let button=jQuery(\"<button class='button alt GLSDk-pick-location' type='button' id='GLSDk_pickup_button' onClick='GLSDk.getPickupLocations(event)'>\" + GLSDk_choose_pickup_location + \"</button>\");\n                let shipping_pickup_id=jQuery(\"<input type='hidden' name='shipping_pickup_id' id='shipping_pickup_id'/>\");\n                let shipping_pickup_label=jQuery(\"<input type='hidden' name='shipping_pickup_label' id='shipping_pickup_label'/>\");\n                let GLSDk_pickup_extended=jQuery(\"<input type='hidden' name='GLSDk_pickup_extended' id='shipping_pickup_extended'/>\");\n                let GLSDk_pickup_description=jQuery(\"<span className='GLSDk-pickup__description' id='GLSDk-pickup__description'></span>\");\n                let shipping_carrier_id=jQuery(\"<tr style='display: none'><td><input type='hidden' name='shipping_carrier_id' id='shipping_carrier_id'/>\");\n                console.log(button);\n                inputElement[0].append(button[0]);\n                inputElement[0].append(shipping_pickup_id[0]);\n                inputElement[0].append(shipping_pickup_label[0]);\n                inputElement[0].append(GLSDk_pickup_extended[0]);\n                inputElement[0].append(GLSDk_pickup_description[0]);\n                inputElement[0].append(shipping_carrier_id[0]);\n              }\n              this.mapinterface.setCarrierId(this.carrier_id);\n              if(jQuery('#GLSDk_pickup_button').is(':visible')){\n                console.log('Button is visible so we can enable');\n                setTimeout(function (){\n                  // Code to run after 300 milliseconds\n                  console.log('400 milliseconds have passed');\n                  jQuery('.wc-block-components-checkout-place-order-button').prop('disabled', false);\n\n                  // Reset CSS styles for the enabled state\n                  jQuery('.wc-block-components-checkout-place-order-button').css({\n                    'background-color': 'black',\n                    'cursor': 'pointer',\n                    'opacity': '1' // Reset opacity to make it fully visible\n                  });\n                }, 300);\n              }\n            }\n          }, 100); // Check every 100 milliseconds\n        });\n      }else{\n        console.log(\"BUTTON ENABLED GET SELECTED CARRIER\");\n        if(jQuery('#GLSDk-pickup__description').length > 0){\n          jQuery('#GLSDk-pickup__description').hide();\n        }\n        this.enableButton();\n      }\n    }).fail(err=> {\n      console.log(\"Fatal error widget requesting points do we have an API bug?\");\n    });\n  }\n  isBlockCheckout(){\n    if(jQuery(\".wc-block-checkout\").length > 0){\n      return true;\n    }\n    return false;\n  }\n  getOnClick(){\n    jQuery(\"#sw-query-btn\").on('click', ()=> {\n      this.geocodeQuery();\n    });\n    jQuery('form[name=\"checkout\"]').on('change', ()=> {\n      // This function will be triggered when any form field inside the \"checkout\" form is changed\n      console.log(\"Form changed!\");\n      this.getFormShippingData();\n      // You can perform your desired actions here\n    });\n  }\n  getFormShippingData(){\n    var country=jQuery('#billing_country').val(),\n      state=jQuery('#billing_state').val(),\n      postcode=jQuery('input#billing_postcode').val(),\n      city=jQuery('#billing_city').val(),\n      address=jQuery('input#billing_address_1').val(),\n      address_2=jQuery('input#billing_address_2').val(),\n      s_country=country,\n      s_state=state,\n      s_postcode=postcode,\n      s_city=city,\n      s_address=address,\n      s_address_2=address_2;\n    if(jQuery('#ship-to-different-address').find('input').is(':checked')){\n      s_country=jQuery('#shipping_country').val();\n      s_state=jQuery('#shipping_state').val();\n      s_postcode=jQuery('input#shipping_postcode').val();\n      s_city=jQuery('#shipping_city').val();\n      s_address=jQuery('input#shipping_address_1').val();\n      s_address_2=jQuery('input#shipping_address_2').val();\n    }\n    jQuery('input[aria-label*=\"Country/Region\"]').each(function (){\n      var s_country=jQuery(this).val();\n    });\n    window.GLSDk_shipping_address={\n      \"Address\": {\n        \"Lat\": \"\",\n        \"Long\": \"\",\n        \"Streetname1\": s_address,\n        \"Streetname2\": s_address_2,\n        \"HouseNumber\": '',\n        \"NumberExtension\": '',\n        \"PostalCode\": s_postcode,\n        \"s_postcode\": s_postcode,\n        \"City\": s_city,\n        \"Country\": s_country,\n        \"State\": s_state\n      },\n      post_data: jQuery('form.checkout').serialize(),\n      \"CarrierId\": jQuery(\"#shipping_carrier_id\").val()\n    };\n    this.options.address=window.GLSDk_shipping_address.Address;\n  }\n  getGLSDkId(mage_id){\n    var carrier_id=mage_id.match(/([\\d]+)_pickup/);\n    if(carrier_id!=null){\n      return carrier_id[1];\n    }\n    for (let x=0; x < GLSDk_carriers.length; ++x){\n      if(GLSDk_carriers[x].ClassName===mage_id){\n        return typeof GLSDk_carriers[x].Id=='object' ? GLSDk_carriers[x].Id['0']:GLSDk_carriers[x].Id;\n      }\n    }\n    return 0;\n  }\n\n  /*\n  * Adds the map to the page\n  */\n  init(){\n    this.options.address&&this.setAddress(this.options.address);\n    this.loadScripts();\n    !this.options.address&&localStorage.getItem('GLSDkAddress')&&this.setAddress(JSON.parse(localStorage.getItem('GLSDkAddress')));\n  }\n  addPointInfo(p, selected, extra_class, parentContainer){\n    if(typeof extra_class=='undefined'){\n      extra_class='';\n    }\n    let open=typeof p.WorkingHoursRaw!='undefined'&&p.WorkingHoursRaw ? JSON.parse(p.WorkingHoursRaw):[];\n    let openhtml='';\n    let m2f='';\n    let wkd='';\n    let local=p.Information.Address;\n\n    /* ----------------------\n    / To replace when we have an actual format for it  */\n    let openHours=[];\n\n    /* LEGACY code that we are using to transform the raw data into something we can work with  ----------- */\n    let regexFormatDev=new RegExp(/([a-zA-Z0-9]+)\\_([a-zA-Z0-9]+)\\_([a-zA-Z0-9]+)\\_([a-zA-Z0-9]+)\\_([a-zA-Z0-9]+)\\_([a-zA-Z0-9]+)\\_([a-zA-Z0-9]+)/, 'g');\n    let regexFormatLive=new RegExp(/([a-zA-Z0-9]+)\\_([a-zA-Z0-9]+)\\_([a-zA-Z0-9]+)\\_([a-zA-Z0-9]+)/, 'g');\n    let regexFormat=regexFormatLive;\n    let regDay=1; /* Monday, Tuesday ..*/\n    let regOpenIdx=4; /* 1,2,... */\n    let regTypeIdx=2; /* Open | closing */\n\n    if(Object.keys(open).length > 0&&Object.keys(open).shift().match(regexFormatDev)){\n      regexFormat=regexFormatDev;\n      regTypeIdx=3;\n      regOpenIdx=7;\n    }\n    for (let key in open){\n      let value=open[key];\n      if(key.match(regexFormat)){\n        let res=regexFormat.exec(key);\n        let dayname=res[regDay];\n        let openidx=parseInt(res[regOpenIdx]) - 1;\n        let dayidx=this.weekdaynames.indexOf(dayname);\n        if(typeof openHours[dayidx]=='undefined'){\n          openHours[dayidx]=[];\n        }\n        if(typeof openHours[dayidx][openidx]=='undefined'){\n          openHours[dayidx][openidx]={\n            OpenTime: '',\n            CloseTime: ''\n          };\n        }\n        openHours[dayidx][openidx][res[regTypeIdx]=='Closing' ? 'CloseTime':'OpenTime']=value;\n      }\n    }\n\n    /* Make sure it's sorted */\n    for (let i=0; i < openHours.length; ++i){\n      /* Sometimes it's closed on monday meaning there's nothing at idx 0*/\n      if(typeof openHours[i]!=\"undefined\"){\n        let schedule=openHours[i];\n        schedule.sort((a, b)=> {\n          let aopen=parseInt(a.OpenTime.substring(0, 2));\n          let bopen=parseInt(b.OpenTime.substring(0, 2));\n          return aopen - bopen;\n        });\n      }\n    }\n\n    /* Group data set\n    Label can be:\n    First day - last day with same schedule\n    Every day */\n\n    open=typeof p.WorkingHours!='undefined' ? p.WorkingHours:openHours;\n    /** It's a hash, not an array **/\n    let ndaysopen=Object.keys(open).length;\n    let fromday=this.weekdaynames[0];\n    let previousTime='';\n    let hourshtml='';\n    let fromdayidx=0;\n    let toDay='';\n    /*-------*/\n\n    for (let i=0; i < 7; ++i){\n      let day=open[i];\n      let dayhtml='';\n      let today=this.weekdaynames[i];\n      dayhtml +=`<div class=\"sw-point-info-day\">`;\n      hourshtml='';\n      for (let j=0; day&&j < day.length; ++j){\n        let hours=day[j];\n        if(hours.OpenTime==null&&hours.CloseTime=='23:59'){\n          hourshtml +='24h';\n        }else{\n          hourshtml +=(hourshtml ? ' | ':'') + `<span>${hours.OpenTime ? hours.OpenTime:''} - ${hours.CloseTime ? hours.CloseTime:''}</span>`;\n        }\n      }\n\n      /** last day or different time, print last **/\n      if(previousTime&&previousTime!=hourshtml||i==6){\n        /** not a lot of sense in mon-mon*/\n        let isinterval=i - fromdayidx > 2;\n        let islast=i==6;\n        if(previousTime){\n          toDay=islast&&hourshtml==previousTime ? this.weekdaynames[i]:this.weekdaynames[i - 1];\n          dayhtml +=`<label>${(isinterval&&fromday ? fromday + ' - ':'') + toDay}:</label><span>${previousTime}</span></div>`;\n          openhtml +=dayhtml;\n        }\n        if(islast&&hourshtml&&hourshtml!=previousTime){\n          openhtml +=`<div class=\"sw-point-info-day\"><label>${this.weekdaynames[i]}:</label><span>${hourshtml}</span></div></div>`;\n        }\n        fromday=i < ndaysopen - 1 ? this.weekdaynames[i]:'';\n        fromdayidx=i;\n        previousTime=hourshtml;\n      }else{\n        previousTime=hourshtml;\n      }\n    }\n    if(!openhtml&&previousTime){\n      openhtml=`<label>${fromday} - ${this.weekdaynames[ndaysopen - 1]}: </label><span>${previousTime}</span></div>`;\n    }\n\n    /* / END LEGACY code ----------- */\n\n    console.log(\"Point\");\n    console.log(p);\n    let ePointInfo=jQuery(`<div class=\"sw-point-info ${extra_class}\">\n  <h4 class='sw-point-info-name'>${p.Information.Name}</h4>\n  <div class='sw-point-info-addr'>${local}</div>\n  ${p.Distance!==null ? `<div class='sw-point-info-distance'>` + GLSDk_distance + \" \" + ` ${p.Distance} ` + GLSDk_meter + \" \" + `</div>`:''}\n  <div class='sw-point-info-open'>${this.getWorkingDays(p.WorkingHours)}</div>\n</div>`);\n\n    /* Is there aditional information required?  */\n    if(typeof p.MapFieldsSelect!='undefined'){\n      let moreFields=p.MapFieldsSelect;\n      for (let k=0; k < moreFields.length; ++k){\n        ePointInfo.append(`<div class=\"sw-point-info-additional\"><label>${moreFields[k]}</label><input data-id=\"${moreFields[k]}\" class=\"GLSDk_mapfields${p.PointId}\" type=\"text\"  id=\"${moreFields[k]}${p.PointId}\"/></div>`);\n      }\n    }\n    let btn=jQuery(`<button class=\"sw-point-info-btn ${selected ? 'selected':''}\">${selected ? GLSDk_selected:GLSDk_select}</button>`);\n    btn.on('click', ()=> {\n      this.selectPoint(p);\n    });\n    ePointInfo.append(btn);\n    parentContainer.append(ePointInfo);\n  }\n  /**\n   * Append custom style\n   * @param string css - a string with the style to inject\n   */\n  addCustomStyle(css){\n    var style=document.createElement(\"style\");\n    style.type=\"text/css\";\n    if(style.styleSheet){\n      style.styleSheet.cssText=css;\n    }else{\n      style.appendChild(document.createTextNode(css));\n    }\n    document.getElementsByTagName(\"head\")[0].appendChild(style);\n  }\n  addMapHtml(){\n    console.log(\"ADD MAP HTML Options address\");\n    let addresstr='';\n    /* Ireland does not have postal codes */\n    if(this.options.address.Streetname1){\n      addresstr=this.options.address.PostalCode ? this.options.address.PostalCode:this.options.address.Streetname1;\n    }\n    let maphtml=`<div id=\"sw\">\n    <div id=\"sw__overlay\"></div>\n    <div id=\"sw__container\">\n      <div id=\"sw-search\">\n        <div id=\"sw-query-wrapper\">\n          <input type=\"text\" id=\"sw-query\" placeholder=\"${addresstr}\">\n        </div>\n        <div id=\"sw-query-results\"></div>\n        <div id=\"query-options\">\n        </div>\n      </div>\n      <div id=\"sw-display-options\">\n      </div> \n      <div id=\"sw-map-wrapper\" class=\"sw-tab selected\">\n        <div class=\"sw-query-results-description\"></div>\n        <div id=\"sw-map\" class=\"GLSDk-pickup__map\"></div>\n        <div id=\"sw-map-error\"></div> \n        <div id=\"sw-map-selected-point\"></div>\n      </div>  \n      <div class='sw-tab'>\n        <div class=\"sw-query-results-description\"></div>\n        <div id=\"sw-list-points\"></div>\n      </div>\n      <div id=\"sw-map-message\"></div>\n      <div id=\"sw-search-status\">\n        <div class=\"sw-loader\"><div></div><div></div><div></div></div>\n      </div>\n    </div>\n  </div>`;\n    jQuery(this.mapParentContainer).append(maphtml);\n    let displayOptions=jQuery(\"#sw-display-options\");\n    let optMap=jQuery(`<span class='sw-display-option selected'>` + GLSDk_map + `</span>`);\n    let optList=jQuery(`<span class='sw-display-option'\">` + GLSDk_list + `</span>`);\n    optMap.on('click', ()=> {\n      this.selectDisplayOption(0);\n    });\n    optList.on('click', ()=> {\n      this.selectDisplayOption(1);\n    });\n    displayOptions.append(optMap);\n    displayOptions.append(optList);\n    let queryopt=jQuery(\"#sw-query-wrapper\");\n    let searchbtn=jQuery(`<button id=\"sw-query-btn\"\">` + GLSDk_search + `</button>`);\n    queryopt.append(searchbtn);\n    searchbtn.on('click', ()=> {\n      this.geocodeQuery();\n    });\n    let queryinput=jQuery(\"#sw-query\");\n    queryinput.on('keyup', evt=> {\n      if(evt.keyCode==13){\n        this.geocodeQuery();\n      }\n      this.timeoutKeyDown&&clearTimeout(this.timeoutKeyDown);\n      this.timeoutKeyDown=setTimeout(()=> {\n        this.geocodeQuery();\n      }, 300);\n    });\n    jQuery(\"#sw__overlay\").click(()=> {\n      this.closeMap();\n    });\n  }\n  /**\n   * @param decimal lat\n   * @param decimal lng\n   */\n  centerMap(lat, lng){\n    this.mapinterface.centerMap(lat, lng);\n  }\n  /**\n   * Hide the map\n   */\n  closeMap(){\n    jQuery(\"#sw\").removeClass(\"open\");\n    jQuery('html,body').scrollTop(this.userScroll);\n  }\n  displayMessage(msg){\n    console.log(\"Message display\");\n    console.log(msg);\n    jQuery('#sw-map-message').addClass(\"open\");\n    if(msg.Id==99){\n      console.log(\"IF 99\");\n      jQuery('#sw-map-message').html(GLSDk_no_points_found);\n    }else{\n      jQuery('#sw-map-message').html(msg);\n    }\n  }\n  /**\n   * Display the possible option to the user in a list under the search input\n   */\n\n  //\n  // ##DJDJ Bpost stuff\n  displayPlaces(places){\n    console.log(11);\n    jQuery(\".sw-query-results-description\").html('');\n    this.queryResults=places;\n    let resultsContainer=jQuery(\"#sw-query-results\");\n\n    // ##DJDJ Ovde verovatno treba izmena da se odradi\n    console.log(\"Display places\");\n    console.log(places);\n    let html='';\n    for (let i=0; i < places.length; ++i){\n      if(typeof places[i].address.PostalCode!='undefined'){\n        console.log(\"Found place\");\n        html +=`<div class=\"sw-query-result\" data-idx=\"${i}\">${places[i].display_name}</div>`;\n      }\n    }\n    if(!html){\n      console.log(\"No place found\");\n      html=GLSDk_no_results;\n    }\n    console.log(22);\n    resultsContainer.html(html);\n    jQuery(\".sw-query-result\").on('click', evt=> {\n      console.log(33);\n      let idx=jQuery(evt.target).attr(\"data-idx\");\n      if(parseInt(idx)=='isNaN'||idx > this.queryResults.length){\n        console.log(\"invalid idx selected: \", idx);\n        return;\n      }\n      let place=this.queryResults[idx];\n      this.options.address.Lat=place.lat;\n      this.options.address.Long=place.lng;\n      console.log(\"selected \", this.queryResults[idx]);\n      jQuery(\"#sw-query-results\").html('');\n      jQuery(\"#sw-query\").val(place.display_name);\n      if(typeof place.address!='undefined'){\n        for (let prop in place.address){\n          if(place.address[prop]&&place.address[prop].length > 0){\n            this.options.address[prop]=place.address[prop];\n          }\n        }\n      }\n      this.options.address.Streetname1=place.address.Streetname1;\n      console.log(place.address, \"Address is now \", this.options.address);\n      this.fetchPoints(this.options.address);\n    });\n  }\n  hashLatLng(point){\n    let latstr=(point.lat + '').replace('.', '-');\n    let lngstr=(point.lng + '').replace('.', '-');\n    return 'r' + latstr + '_' + lngstr;\n  }\n  displayResults(data){\n    console.log(\"DisplayPoints22322\");\n    console.log(data);\n    this.mapinterface.clearMarkers();\n    jQuery(\"#sw__container\").removeClass('searching');\n    this.pickupPointsLoadStop();\n    jQuery(\".sw-query-results-description\").html(\"<div class='sw-query-results-description'>\" + GLSDk_the + data.Count + GLSDk_closest + \"</div>\");\n\n    // ##DJDJ WP exclusive issue because of this\n    setTimeout(()=> {\n      this.pickupPoints=data.Point;\n      this.mapChanged=Date.now();\n      this.updateList(this.pickupPoints);\n      this.mapinterface.addMarkers(this.pickupPoints, idx=> {\n        console.log(\"Added markers\");\n        let parent=jQuery(\"#sw-map-selected-point\");\n        parent.html(\"\");\n        this.addPointInfo(this.pickupPoints[idx], 0, '', parent);\n        console.log(\"added point info\");\n        this.mapinterface.selectPoint(idx);\n        console.log(\"After select point break\");\n      });\n    }, 100);\n  }\n  /***\n   * Get Points from the API and display them\n   **/\n  fetchPoints(address, fresolve){\n    // ##DJDJ Ako je block ovo ne treba, ako nije onda treba\n    if(!this.isBlockCheckout()){\n      this.carrier_id=jQuery('#shipping_carrier_id').val();\n      this.setCarrierId(jQuery('#shipping_carrier_id').val());\n    }\n    address.Country=jQuery('#shipping-country').val();\n\n    // ##DJDJ Ovo dole u else je visak izgleda\n    // else {\n    //     this.setCarrierId(this.carrier_id);\n    // }\n    console.log(\"FetchPoints232222\");\n    // ##DJDJ Ovde si stao, treba se proslediti carrier id nekako\n    console.log(address);\n    console.log(this.carrier_id);\n    this.selectedPoint=null;\n    jQuery(\"#sw-map-selected-point\").html('');\n    jQuery('#sw-map-message').removeClass('open');\n    jQuery(\".sw-query-results-description\").html('');\n    if(!this.mapinterface.isMapMoving()){\n      jQuery(\"#sw__container\").addClass('searching');\n    }\n    if(typeof this.cacheResults[this.hashLatLng({\n      lat: this.options.address.Lat,\n      lng: this.options.address.Long\n    })]!=\"undefined\"){\n      console.log(\"OVDEEEEE\");\n      this.displayResults(this.cacheResults[this.hashLatLng({\n        lat: this.options.address.Lat,\n        lng: this.options.address.Long\n      })]);\n    }\n    let req={\n      \"Address\": address,\n      \"CarrierId\": this.carrier_id,\n      'action': 'GLSDk_pickup_locations'\n    };\n    jQuery.getJSON(this.options.ajax_url, req, data=> {\n      console.log(\"Caoaooo nasaooo\");\n      console.log(this.options.ajax_url);\n      this.mapinterface.clearMarkers();\n      console.log(data);\n      /* We have the points remove the loader */\n      this.pickupPointsLoadStop();\n      jQuery(\"#sw-map-wrapper\").removeClass('loading');\n      this.searchRunning=false;\n      jQuery(\"#sw__container\").removeClass('searching');\n      this.searchRunning=false;\n      if(data.Error&&data.Error.Id!=0){\n        this.displayMessage(data.Error);\n      }\n      if(data.Point){\n        if(data.Point.length > 0){\n          this.cacheResults[this.hashLatLng({\n            lat: this.options.address.Lat,\n            lng: this.options.address.Long\n          })]=data;\n          this.displayResults(data);\n        }else{\n          this.displayMessage(GLSDk_no_points_found);\n        }\n      }\n      if(typeof fresolve!='undefined'){\n        /* We want to make sure changes are commited to the dom before we declare we're done */\n        setTimeout(()=> {\n          fresolve();\n        }, 300);\n      }\n    }).fail(err=> {\n      this.displayMessage(GLSDk_no_points_found);\n      console.log(\"Fatal error widget requesting points do we have an API bug?\", err.responseText);\n    });\n  }\n  geocodeQuery(){\n    jQuery(\"#sw-query-results\").html('');\n    console.log(\"Geocode query\");\n    let queryval=jQuery(\"#sw-query\").val();\n    console.log(queryval);\n    this.options.address.Lat=null;\n    this.options.address.Long=null;\n    if(queryval.length < 4){\n      return;\n    }\n    console.log(\"OVOTITREBA\");\n    console.log(this.options.address);\n    console.log(this.mapinterface);\n    console.log(\"OVDE COUNTRY\");\n    if(jQuery('#components-form-token-input-0').length){\n      this.options.address.Country=jQuery('#components-form-token-input-0').val();\n    }else if(jQuery(\"#shipping-country option:selected\").length){\n      this.options.address.Country=jQuery(\"#shipping-country option:selected\").text();\n    }else if(jQuery('#shipping-country').length > 0){\n      this.options.address.Country=jQuery('#shipping-country option:selected').text();\n    }else if(jQuery('#select2-billing_country-container').length > 0){\n      this.options.address.Country=jQuery('#select2-billing_country-container').text();\n    }\n    if(GLSDK_PLUGIN_URL.includes('Bpost')&&(this.options.address.Country=='BE'||this.options.address.Country=='be'||this.options.address.Country=='Belgium')){\n      this.mapinterface.geocodeBpost({\n        \"address\": queryval,\n        \"country\": 'BE'\n      }, resp=> {\n        console.log(\"Geocodeeee\");\n        console.log(resp);\n        this.displayPlaces(resp);\n      });\n    }else{\n      this.mapinterface.geocode({\n        \"address\": queryval,\n        \"country\": this.options.address.Country\n      }, resp=> {\n        console.log(\"Geocodeeee\");\n        console.log(resp);\n        this.displayPlaces(resp);\n      });\n    }\n  }\n  /**\n   *\n   * @param shippingData, the address parts\n   * @param f_callback , the function to call when all mighty google returns a result\n   */\n  geocodeAddress(address, f_callback){\n    console.log(address);\n    console.log(\"GEOCODEADDRESS\");\n    if(address.country=='Portugal'&&typeof missingZipPT!='undefined'){\n      /* Is this a postal code we know is not geocodable in nominatim? */\n      let zip4dig=address.postcode.substring(0, 4);\n      for (let i=0; i < missingZipPT.length; ++i){\n        if(missingZipPT[i].zipcode==zip4dig){\n          this.queryResults=[{\n            display_name: missingZipPT[i].display_name,\n            lat: missingZipPT[i].lat,\n            lng: missingZipPT[i].lng,\n            address: {\n              street: \"street\",\n              postcode: address.postcode,\n              city: missingZipPT[i].display_name,\n              country_code: address.country\n            }\n          }];\n          console.log(this.queryResults);\n          f_callback(this.queryResults);\n          return;\n        }\n      }\n    }\n    console.log(\"Nije reseno\");\n    console.log(this.mapinterface);\n    console.log(\"ADRESA\");\n    console.log(address);\n    if(GLSDK_PLUGIN_URL.includes('Bpost')&&(address.Country=='BE'||address.Country=='be'||address.Country=='Belgium')){\n      this.mapinterface.geocodeAddressPartsBpost(geocode=> {\n        if(!geocode.lat){\n          return this.mapinterface.geocodeAddressPartsBpost(geocode=> {\n            f_callback(geocode);\n          }, address.City, address.Country);\n        }\n        f_callback(geocode);\n      }, address.City, address.Country, address.PostalCode, address.Streetname1);\n    }else{\n      this.mapinterface.geocodeAddressParts(geocode=> {\n        if(!geocode.lat){\n          return this.mapinterface.geocodeAddressParts(geocode=> {\n            f_callback(geocode);\n          }, address.City, address.Country);\n        }\n        f_callback(geocode);\n      }, address.City, address.Country, address.PostalCode, address.Streetname1);\n    }\n  }\n  mapMoved(mapcenter){\n    jQuery(\"#sw-point-info\").html(\"\");\n    return new Promise((resolve, reject)=> {\n      this.options.address.Lat=mapcenter.lat;\n      this.options.address.Long=mapcenter.lng;\n      this.fetchPoints(this.options.address, resolve);\n    });\n  }\n  loadLabels(fcallback){\n    jQuery.getJSON(this.options.ajaxLoadLabels, resp=> {\n      this.options.labels=resp;\n      fcallback(resp);\n    }).fail(err=> {\n      console.log(\"error fetching widget labels at \" + this.options.ajaxLoadLabels, err);\n    });\n  }\n  loadScripts(){\n    console.log(\"Load scripts widget\");\n    /* not defined or version < 1.7 compare only subversion for simplicity **/\n    if(typeof jQuery=='undefined'||parseInt(jQuery.fn.jquery.substring(2, 2)) < 7){\n      console.log(\"Load scripts widget if\");\n      var me=this;\n      this.loadScript('https://code.jquery.com/jquery-3.7.0.min.js', function (){\n        me.scriptsLoaded();\n        if(me.options.oninit){\n          me.options.oninit();\n        }\n      });\n    }else{\n      console.log(\"jquery is widget loaded bootstrap\");\n      this.scriptsLoaded();\n      if(this.options.oninit){\n        this.options.oninit();\n      }\n    }\n  }\n  /**\n   * @param String url - the url of the script to load\n   * @param String callback - the name of the function to call after the script is loaded\n   */\n  loadScript(url, callback){\n    console.log(\"Load Script widget singular\");\n    var script=document.createElement(\"script\");\n    script.type=\"text/javascript\";\n    if(script.readyState){\n      /*IE */\n      script.onreadystatechange=()=> {\n        if(script.readyState=='loaded'||script.readyState=='complete'){\n          script.onreadystatechange=null;\n          calback&&callback();\n        }\n      };\n    }else{\n      script.onload=()=> {\n        callback&&callback();\n      };\n    }\n    script.src=url;\n    document.getElementsByTagName(\"head\")[0].appendChild(script);\n  }\n  /**\n   * @param string url\n   */\n  static loadStyle(url){\n    console.log(\"LOADDDDD TESTTTTTTT\");\n    var style=document.createElement('link');\n    style.rel='stylesheet';\n    style.href=url;\n    document.getElementsByTagName('head')[0].appendChild(style);\n  }\n  log(msg, force){\n    if(!force&&!this.options.debug){\n      return;\n    }\n    console.log(msg);\n  }\n  /**\n   * clear any ui elements that result from selection and other state variables\n   */\n  resetMapElements(){\n    this.selectedPoint=null;\n    jQuery(\"#sw-map-selected-point\").html('');\n    jQuery('#sw-map-message').removeClass('open');\n    jQuery(\".sw-query-results-description\").html('');\n  }\n  openMap(){\n    console.log(\"Open map widget23222222666666\");\n    if(!this.isBlockCheckout()){\n      var platform=new Woocommerce();\n      this.options.address=platform.getShippingData().Address;\n    }\n\n    // console.log(this.carrier_id);\n    this.userScroll=jQuery('html,body').scrollTop();\n    jQuery('html,body').scrollTop(0);\n    jQuery(\"#sw\").addClass(\"open\");\n    jQuery(\"#sw-map-wrapper\").addClass('loading');\n    console.log(\"Ovdeee 1\");\n    jQuery(\"#sw-query\").val(this.options.address.Streetname1);\n    this.selectDisplayOption(0);\n    console.log(\"Ovdeee 3\");\n    console.log(this.options.address);\n    if(this.options.address.Streetname1){\n      console.log(\"Ima ulicu\");\n      if(!this.options.address.lat){\n        console.log(\"Nema lat\");\n        this.geocodeAddress(this.options.address, geo=> {\n          console.log(\"GEOOOOOOOO\");\n          console.log(geo);\n          geo.length&&(geo=geo[0]);\n          this.options.address.Lat=geo.lat;\n          this.options.address.Long=geo.lng;\n          console.log(\"GEOCODE222\");\n          console.log(this.options.address);\n          this.fetchPoints(this.options.address);\n        });\n      }else{\n        console.log(\"Nema ulicu i ide u fetch\");\n        this.fetchPoints(this.options.address);\n      }\n    }\n  }\n  getShippingData(){\n    let shippingData=[];\n    this.getBlockShippingData();\n    shippingData[\"Address\"]=this.options.address;\n    // shippingData[\"CarrierId\"]=this.carrier_id;\n    return shippingData;\n  }\n  getBlockShippingData(){\n    var address=jQuery('#shipping-address_1').val();\n    var apartment=jQuery('#shipping-address_2').val();\n    var city=jQuery('#shipping-city').val();\n    var postalCode=jQuery('#shipping-postcode').val();\n\n    // Extracting Country\n    var country=jQuery('#components-form-token-input-0').val();\n    if(country==\"\"){\n      console.log(\"COUNTRY EMPTY\");\n      jQuery('input[aria-label*=\"Country/Region\"]').each(function (){\n        country=jQuery(this).val();\n      });\n    }else if(country==\"\"){\n      country=jQuery('#shipping-country option:selected').text();\n    }\n    console.log(\"BLOCK SHIPPING DATA ON GET BLOCK SHIPPING DATA\");\n    console.log(country);\n    window.GLSDk_shipping_address={\n      \"Address\": {\n        \"Lat\": \"\",\n        \"Long\": \"\",\n        \"Streetname1\": address,\n        \"Streetname2\": '',\n        \"HouseNumber\": apartment,\n        \"NumberExtension\": '',\n        \"PostalCode\": postalCode,\n        \"s_postcode\": postalCode,\n        \"City\": city,\n        \"Country\": country,\n        \"State\": ''\n      }\n    };\n    this.options.address=window.GLSDk_shipping_address.Address;\n  }\n  pickupPointsLoadStop(){\n    jQuery(\"#sw-map-wrapper\").removeClass('loading');\n    this.searchRunning=false;\n  }\n  /**\n   *  Resets the selected point to null\n   **/\n  resetSelection(){\n    this.selectedPoint=null;\n  }\n  selectPoint(pickup){\n    console.log(\"Select POINT\");\n    console.log(pickup);\n    this.selectedPoint=pickup;\n    if(jQuery('#GLSDk-pickup__description').length&&jQuery('#GLSDk-pickup__description').is(':hidden')){\n      jQuery('#GLSDk-pickup__description').show();\n    }\n    if(jQuery('.GLSDk-pickup__description').length&&jQuery('.GLSDk-pickup__description').is(':hidden')){\n      jQuery('.GLSDk-pickup__description').show();\n    }\n    localStorage.setItem('GLSDkPointId', pickup.PointId);\n    localStorage.setItem('GLSDkPointLabel', pickup.Information.Name);\n\n    /** What view are we on ? **/\n    let eFieldInfo=jQuery(\"#sw-map-selected-point\");\n    if(this.selectedDisplayOption==1){\n      eFieldInfo=jQuery(\"#sw-list-points\");\n    }\n    /* Validate if this point requires aditional info that's not present fail here */\n    if(typeof pickup.MapFieldsSelect!='undefined'&&pickup.MapFieldsSelect.length > 0){\n      let extrasValid=true;\n      eFieldInfo.find('.GLSDk_mapfields' + pickup.PointId).each((idx, elem)=> {\n        let eExtra=jQuery(elem);\n        if(!eExtra.val()){\n          alert(jQuery(jQuery('.GLSDk_mapfieldslabel' + pickup.PointId).get(idx)).text() + ': ' + this.options.labels.mapfieldmandatory);\n          extrasValid=false;\n        }\n      });\n      if(!extrasValid){\n        console.log(\"point selection widget is not valid, ignoring\");\n        return false;\n      }\n    }\n    console.log(jQuery(\".GLSDk-pickup__description\"));\n    jQuery(\".GLSDk-pickup__description\").html(pickup.Information.Name + \" \" + pickup.Information.Address);\n    const pickupPoint={\n      id_carrier: this.carrier_id,\n      pickup_id: this.selectedPoint.PointId,\n      pickup_label: (this.selectedPoint.Information.Name ? this.selectedPoint.Information.Name + '<br/>':'') + this.selectedPoint.Information.Address,\n      action: 'GLSDk_save_pickup'\n    };\n\n    /*Is there extra info we want to append? */\n    eFieldInfo.find(\".GLSDk_mapfields\" + this.selectedPoint.PointId).each(function (idx, elem){\n      let fieldid=jQuery(elem).attr('data-id');\n      let fieldvalue=jQuery(elem).val();\n      pickupPoint['OptionFields'].push({\n        Id: fieldid,\n        Value: fieldvalue\n      });\n      localStorage.setItem(fieldid + 'val', fieldvalue);\n    });\n    if(typeof this.options.ajax_url=='undefined'){\n      console.log(\"Ovdeeee\");\n      this.options.onPointSelected(pickup, '');\n    }else{\n      this.platform.setPickupPoint(pickup);\n    }\n    this.closeMap();\n    jQuery(\"#myModal\").hide();\n    jQuery('#place_order').prop('disabled', false);\n    jQuery('#pickupText').hide();\n    return true;\n  }\n  /**\n   *  A Point was selected\n   *  @param idx - integer the selected index\n   **/\n  selectPointFromList(idx){\n    if(idx > this.pickupPoints.length||idx < 0){\n      console.log(\"pointSelected invalid widget index \" + idx, 1);\n      return;\n    }\n    this.selectPoint(this.pickupPoints[idx]);\n  }\n  /***\n   * Select the display option\n   * @param idx - int -  0: map, 1: list\n   */\n  selectDisplayOption(idx){\n    console.log(\"SELECTDISPOPTION\");\n    console.log(idx);\n    let eoptions=jQuery(\".sw-display-option, .sw-tab\");\n    this.selectedDisplayOption=idx;\n    eoptions.removeClass('selected');\n    jQuery(eoptions.get(idx)).addClass('selected');\n    jQuery(jQuery(\".sw-tab\").get(idx)).addClass('selected');\n    if(idx==0&&typeof this.mapinterface!='undefined'&&this.mapinterface.pickupPoints.length > 0){\n      this.mapinterface.fitBounds();\n    }\n  }\n  /**\n   * Reset the labels initially sent with options\n   */\n  setLabels(labels){\n    this.options.labels=labels;\n  }\n  setWeekdayNames(weekdaynames){\n    this.weekdaynames=weekdaynames;\n  }\n  setCarrierId(carrier_id){\n    console.log(\"Setcarrierid\");\n    console.log(carrier_id);\n    this.carrier_id=carrier_id;\n    console.log(this.mapinterface);\n    this.mapinterface.setCarrierId(carrier_id);\n  }\n  /**\n   * @param address - object in the same format as we send to the API\n   *\n   **/\n  setAddress(address){\n    if(!address.Streetname1||!address.Name){\n      console.log(\"invalid address widget \");\n      return;\n    }\n    this.options.address=address;\n    localStorage.setItem('GLSDkAddress', JSON.stringify(address));\n  }\n  /**\n   * Called when load scripts ends we must grant that jquery exists\n   */\n  scriptsLoaded(){\n    this.eSearchStatus=jQuery(\"#search-status\");\n    this.addMapHtml();\n    if(this.options.gmapskey){\n      this.mapinterface=new GLSDk_gmaps(this.options, this);\n    }else{\n      this.mapinterface=new GLSDkOpenMap(this.options, this);\n    }\n    this.mapinterface.initMap();\n    this.mapinterface.addMapMoveListener(mapcenter=> {\n      return this.mapMoved(mapcenter);\n    });\n  }\n  updateList(points){\n    jQuery(\"#sw-list-points\").html('');\n    let parent=jQuery(\"#sw-list-points\");\n    for (let i=0; i < points.length; ++i){\n      this.addPointInfo(points[i], 0, '', parent);\n    }\n  }\n  disableButton(){\n    jQuery('.wc-block-components-checkout-place-order-button').prop('disabled', true);\n\n    // Add CSS styles for the disabled state\n    jQuery('.wc-block-components-checkout-place-order-button').css({\n      'background-color': 'grey',\n      'cursor': 'not-allowed',\n      'opacity': '0.5' // Optional: to give it a more disabled look\n    });\n  }\n  enableButton(){\n    jQuery('.wc-block-components-checkout-place-order-button').prop('disabled', false);\n\n    // Reset CSS styles for the enabled state\n    jQuery('.wc-block-components-checkout-place-order-button').css({\n      'background-color': 'black',\n      'cursor': 'pointer',\n      'opacity': '1' // Reset opacity to make it fully visible\n    });\n  }\n  getShippingMethodChenge(){\n    jQuery(document).ready(()=> {\n      jQuery(\"#GLSDk_pickup_button\").remove();\n      var checkVisibility=setInterval(()=> {\n        var inputElement=jQuery(\"input[name='radio-control-0']\");\n        if(inputElement.is(':visible')){\n          // The input element is visible, you can proceed with your script\n          clearInterval(checkVisibility); //\n          inputElement.on('change', ()=> {\n            console.log(\"Shipping method changed222222222222222\");\n            let aria=jQuery(\"input[name='radio-control-0']:checked\").attr('aria-describedby');\n            let regex=/shipping_GLSDk_[0-9]+:[0-9]+/;\n\n            // Find the match using the regular expression\n            let match=aria.match(regex);\n            if(match==null){\n              return;\n            }\n            let req={\n              'action': 'GLSDk_selected_carrier_from_list',\n              'selected_carrier_code': match[0]\n            };\n            jQuery.getJSON(this.options.ajax_url, req, data=> {\n              console.log(\"Vrati ga kralju\");\n              console.log(data);\n              this.carrier_id=data.carrier_id;\n              window.carrier_id=data.carrier_id;\n              console.log(123);\n              jQuery(\"#GLSDk_pickup_button\").remove();\n\n              // If not visible, add the button back\n              let inputElement=jQuery(\".wc-block-components-shipping-rates-control__package\");\n\n              // ##DJDJ Ovdeee isto trazi po variabli GLSDk_choose_pickup_location ako se pokvari nesto. Proveriti sutra;\n              let button=jQuery(\"<button class='button alt GLSDk-pick-location' type='button' id='GLSDk_pickup_button' onClick='GLSDk.getPickupLocations(event)'>\" + GLSDk_choose_pickup_location + \"</button>\");\n              inputElement[0].append(button[0]); // Adjust the target container if necessary\n            });\n          });\n        }\n      });\n    });\n  }\n  getNotBlockFormChange(){\n    jQuery('form[name=\"checkout\"] input').change(function (){\n      // var fieldName=jQuery(this).attr('name');\n      var platform=new Woocommerce();\n      this.options.address=platform.getShippingData();\n      console.log(this.options.address);\n      console.log(\"Form changed\");\n    });\n  }\n  getWorkingDays(workingHours){\n    if(!workingHours){\n      return '';\n    }\n    const dayGroups=[];\n    let htmlHours='';\n    for (let day=0; day < 7; day++){\n      if(workingHours[day]){\n        const hourString=this.formatWorkingHours(workingHours[day]);\n        const lastGroup=dayGroups[dayGroups.length - 1];\n        if(lastGroup&&lastGroup.hours===hourString&&lastGroup.end + 1===day){\n          lastGroup.end=day;\n        }else{\n          dayGroups.push({\n            start: day,\n            end: day,\n            hours: hourString\n          });\n        }\n      }\n    }\n    dayGroups.forEach(group=> {\n      /** Valid hour intervals must contain at least one number **/\n      if(group.hours.match(/\\d+/)!==null){\n        const dayRange=group.start===group.end ? this.getDayName(group.start):`${this.getDayName(group.start)} - ${this.getDayName(group.end)}`;\n        htmlHours +=`<div class=\"sw-point-info-day\" style=\"margin-bottom: -10px\"><label>${dayRange}</label>: ${group.hours}</div>`;\n      }\n    });\n    return htmlHours;\n  }\n  formatWorkingHours(hourIntervals){\n    return hourIntervals.map(hour=> {\n      return hour.OpenTime&&hour.CloseTime ? `${hour.OpenTime} - ${hour.CloseTime}`:'';\n    }).filter(Boolean).join(\" | \");\n  }\n  getDayName(day){\n    return this.weekdaynames[day];\n  }\n}\n/* harmony default export */ const GLSDk_widget=(GLSDkWidget);\n;// CONCATENATED MODULE: ./shiptmize.js\n\n\n\n\n/** \n * Class GLSDk depends on jQuery. \n * Check if we are meant to append a map \n * \n * Platform dependent functions marked with   * @platformDependent \n */\nclass GLSDk {\n  constructor(ajax_url){\n    console.log(\"GLSDkCONSTRUCT\");\n    this.markers=[]; //pickup {lat, lng} \n    this.isMapLoaded=false;\n    this.gmaps_key=typeof GLSDk_maps_key=='undefined' ? '':GLSDk_maps_key;\n    this.openMapMarkerIcons={};\n    this.ajax_url=ajax_url; // platform dependent \n\n    this.platform=new Woocommerce(this.ajax_url);\n    this.platform.isCheckout();\n    this.init();\n  }\n  init(){\n    console.log(\"Entered init\");\n    this.GLSDkWidget=new GLSDk_widget({\n      \"host\": 'https://GLSDk.me',\n      \"address\": this.platform.getShippingData().Address,\n      \"labels\": {},\n      \"mapParentContainer\": 'body',\n      \"buttonParentContainer\": 'body',\n      \"buttonClass\": '',\n      \"ajax_url\": this.ajax_url,\n      \"carrierId\": this.platform.getShippingData().CarrierId,\n      \"onPointSelected\": ()=> {},\n      \"gmapskey\": typeof GLSDk_maps_key=='undefined' ? '':GLSDk_maps_key\n    });\n    this.GLSDkWidget.init();\n    console.log(\"Finished init\");\n  }\n  getPickupLocations(evt){\n    this.GLSDkWidget.openMap();\n  }\n}\njQuery(function (){\n  if(typeof woocommerce_params!='undefined'){\n    window.GLSDk=new GLSDk(woocommerce_params.ajax_url);\n  }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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RUFBQyxNQUFNO01BQzlCLGFBQWEsRUFBRSxFQUFFO01BQ2pCLFVBQVUsRUFBRSxJQUFJLENBQUMxQyxRQUFRO01BQ3pCLFdBQVcsRUFBRSxJQUFJLENBQUNzUSxRQUFRLENBQUN2UCxlQUFlLENBQUMsQ0FBQyxDQUFDMmdCLFNBQVM7TUFDdEQsaUJBQWlCLEVBQUVuQyxDQUFBLEtBQU0sQ0FBQyxDQUFDO01BQzNCLFVBQVUsRUFBRSxPQUFPaUMsbUJBQW9CLElBQUksV0FBVyxHQUFJLEVBQUUsR0FBR0E7SUFDbkUsQ0FBQyxDQUFDO0lBQ0YsSUFBSSxDQUFDdlUsZ0JBQWdCLENBQUNrSixJQUFJLENBQUMsQ0FBQztJQUM1QmpXLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLGVBQWUsQ0FBQztFQUNoQztFQUVBd2hCLGtCQUFrQkEsQ0FBQ3RHLEdBQUcsRUFBRTtJQUNwQixJQUFJLENBQUNwTyxnQkFBZ0IsQ0FBQ3FSLE9BQU8sQ0FBQyxDQUFDO0VBQ25DO0FBRUo7QUFFQWxlLE1BQU0sQ0FBQyxZQUFXO0VBQ2QsSUFBRyxPQUFPd2hCLGtCQUFtQixJQUFJLFdBQVcsRUFBQztJQUN6Q2xpQixNQUFNLENBQUM0RCxVQUFVLEdBQUcsSUFBSStkLFVBQVUsQ0FBQ08sa0JBQWtCLENBQUM1aEIsUUFBUSxDQUFDO0VBQ25FO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc2hpcHRpbWl6ZS8uL2pzL3NoaXB0aW1pemUtdXRpbHMuanM/MDBkNCIsIndlYnBhY2s6Ly9zaGlwdGltaXplLy4vanMvc2hpcHRpbWl6ZS13b28tY29tbWVyY2UuanM/MmNmOSIsIndlYnBhY2s6Ly9zaGlwdGltaXplLy4vanMvc2hpcHRpbWl6ZS1vcGVuLW1hcC5qcz84OWMxIiwid2VicGFjazovL3NoaXB0aW1pemUvLi9qcy9zaGlwdGltaXplLWdtYXBzLmpzPzBiZjEiLCJ3ZWJwYWNrOi8vc2hpcHRpbWl6ZS8uL2pzL3NoaXB0aW1pemUtd2lkZ2V0LmpzP2RkOWEiLCJ3ZWJwYWNrOi8vc2hpcHRpbWl6ZS8uL3NoaXB0bWl6ZS5qcz82OWM3Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBcbiAqIFNpbmdsZXRvbiBvYmplY3Qgd2UgY2FuIHVzZSBmb3IgcGxhdGZvcm0gaW5kZXBlbmRlbnQgc3R1ZmYgXG4gKi9cbmNsYXNzIFNoaXB0aW1pemVVdGLSDkcyB7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcblxuICAgIH1cblxuXG4gICAgLyoqIFxuICAgICAqIEluamVjdCBTY3JpcHQgaW50byB0aGUgcGFnZSBcbiAgICAgKiBAcGFyYW0gc3RyaW5nIHNyYyBcbiAgICAgKi9cbiAgICBpbmplY3RFeHRlcm5hbFNjcmlwdChzcmMpIHtcbiAgICAgICAgbGV0IHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuICAgICAgICBzLnNldEF0dHJpYnV0ZShcInNyY1wiLCBzcmMpO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHMpO1xuICAgIH1cblxuXG4gICAgLyoqIFxuICAgICAqIEluamVjdCBhIHNjcmlwdCBzdHJpbmcgXG4gICAgICovXG4gICAgaW5qZWN0U2NyaXB0KGNvbnRlbnRzKSB7XG4gICAgICAgIGxldCBlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgICAgICAgZS52YWx1ZSA9IGNvbnRlbnRzO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGUpO1xuICAgIH1cblxuICAgIC8qKiBcbiAgICAgKiBSZW1vdmVzIGFsbCBub3QgbnVtZXJpYyBjaGFycyBmcm9tIHRoZSBzdHJpbmcgXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3RyaW5nIHN0cmluZyAtIHRoZSBpbnB1dCBzdHJpbmcgXG4gICAgICogQHJldHVybiB0aGUgc3RyaW5nIHdpdGhvdXQgY2hhcnMgdGhhdCBhcmUgbm90IG51bWJlcnMgXG4gICAgICovXG4gICAgcmVtb3ZlTm9uTnVtZXJpYyhzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXEQvZywgJycpO1xuICAgIH1cblxuICAgIC8qKiBcbiAgICAgKiBDaGVjayBpZiB0aGUgZ2l2ZW4gdXJsIGV4aXN0cyBhbmQgaXMgdmFsaWRcbiAgICAgKiBXZSB1c2UgdGhpcyB0byBjaGVjayBpZiB0aGUgY2FycmllciBpY29uIGV4aXN0cyBnaXZlbiBcbiAgICAgKiBhIHVybCBwYXRoIGFuZCB0aGUgbmFtaW5nIGNvbnZlbnRpb24ge2NhcnJpZXJfaWR9LnN2ZyBcbiAgICAgKiBNYWtlIHN1cmUgdGhlIGNvcnJlY3QgcHJvdG9jb2wgaXMgYXBwZW5kZWQgdG8gdGhlIHVybCBodHRwICE9IGh0dHBzIFxuICAgICAqIFxuICAgICAqIEByZXR1cm4gdHJ1ZSBpdCB0aGUgdXJsIGV4aXN0cyBhbmQgaXMgdmFsaWQgXG4gICAgICovIFxuICAgIGlzVXJsVmFsaWQodXJsKSB7XG4gICAgICAgIHZhciBodHRwID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgIGh0dHAub3BlbignSEVBRCcsIHVybCwgZmFsc2UpO1xuICAgICAgICBodHRwLnNlbmQoKTtcbiAgICAgICAgcmV0dXJuIGh0dHAuc3RhdHVzID09IDIwMDtcbiAgICB9XG5cbiAgICAvKiogXG4gICAgICogT3BlbiBhIG5ldyB3aW5kb3cgd2l0aCB0aGUgcHJvdmlkZWQgVVJMIFxuICAgICAqIEBzdHJpbmcgdXJsIFxuICAgICAqIEByZXR1cm4gYm9vbCBpZiB0aGUgd2luZG93IHdhcyBvcGVuZWQsIGZhbHNlIGlmIHBvcHVwIGJsb2NrZXIgZW5hYmxlZCBcbiAgICAgKi8gIFxuICAgIG9wZW5OZXdXaW5kb3codXJsLCBvcHRpb25zKXtcbiAgICAgICAgbGV0IG5ld1dpbiA9IHdpbmRvdy5vcGVuKHVybCwgJ19ibGFuaycsIG9wdGlvbnMpOyBcbiAgICAgICAgbGV0IGJsb2NrZWQgPSAhbmV3V2luIHx8IG5ld1dpbi5jbG9zZWQgfHwgdHlwZW9mIG5ld1dpbi5jbG9zZWQ9PSd1bmRlZmluZWQnOyBcblxuICAgICAgICByZXR1cm4gIWJsb2NrZWQ7IFxuICAgIH1cbn1cblxuXG5sZXQgdXRpbHMgPSBuZXcgU2hpcHRpbWl6ZVV0aWxzKCk7XG5leHBvcnQgZGVmYXVsdCB1dGLSDkczsiLCJpbXBvcnQgVXRpbHMgZnJvbSAnLi9zaGlwdGltaXplLXV0aWxzLmpzJzsgXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdvb2NvbW1lcmNlIHtcblxuICAgIGNvbnN0cnVjdG9yKGFqYXhfdXJsID0gXCJcIikge1xuICAgICAgICB0aGlzLmFqYXhfdXJsID0gYWpheF91cmw7XG4gICAgfVxuXG4gICAgLyoqIFxuICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGlzIGlzIHRoZSBjaGVja291dCBwYWdlIFxuICAgICAqL1xuICAgIGlzQ2hlY2tvdXQoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiQ2hlY2tvdXRcIik7XG4gICAgICAgIHJldHVybiBqUXVlcnkoXCJib2R5XCIpLmhhc0NsYXNzKCd3b29jb21tZXJjZS1jaGVja291dCcpO1xuICAgIH1cblxuICAgIC8qIFxuICAgICAqIElmIHRoZXJlIGlzIG9ubHkgb25lIG1ldGhvZCBhdmFpbGFibGUgd29vIHdpbGwgdXNlIGEgaGlkZGVuIGZpZWxkIGZvciB0aGUgc2VsZWN0ZWQgY2FycmllciBcbiAgICAgKiAgKyBHZW5lcmljIE1ldGhvZHMgZG8gbm90IGhhdmUgYW4gaW5zdGFuY2UgaWQgXG4gICAgICovIFxuICAgIGdldFNoaXBwaW5nTWV0aG9kSWQoKXtcblxuICAgICAgICBsZXQgZUNoZWNrYm94ID0galF1ZXJ5KFwiaW5wdXRbbmFtZT0nc2hpcHBpbmdfbWV0aG9kWzBdJ106Y2hlY2tlZFwiKTtcbiAgICAgICAgbGV0IGVIaWRkZW4gPSBqUXVlcnkoXCJpbnB1dFtuYW1lPSdzaGlwcGluZ19tZXRob2RbMF0nXVwiKTtcblxuICAgICAgIC8vIGVDaGVja2JveGVzLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgLy8gICAgIGNvbnNvbGUubG9nKFwiQ2Fvb29vb1wiKVxuICAgICAgIC8vIH0pO1xuICAgICAgICBsZXQgc2hpcHBpbmdNZXRob2QgPSAgZUNoZWNrYm94Lmxlbmd0aCA+IDAgPyBlQ2hlY2tib3gudmFsKCkgOiBlSGlkZGVuLnZhbCgpIDtcblxuXG4gICAgICAgIGlmICggc2hpcHBpbmdNZXRob2QuaW5kZXhPZignOicpID4gMCApe1xuICAgICAgICAgICAgdmFyIG1ldGhvZF9wYXJ0cyA9IHNoaXBwaW5nTWV0aG9kLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgICByZXR1cm4gVXRpbHMucmVtb3ZlTm9uTnVtZXJpYyhtZXRob2RfcGFydHNbMF0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBzaGlwcGluZ01ldGhvZDtcbiAgICAgICAgfSBcbiAgICB9XG5cbiAgICAvKiogXG4gICAgICogV29yZHByZXNzIHdvbid0IHNlbmQgc2Vzc2lvbiBjb29raWVzIHRvIHdwLWFkbWluIGFuZCB0aGUgc2Vzc2lvbiBoYW5kbGluZyBpbiB3b29jb21tZXJjZSBpcyBzbyBwb29ybHkgZG9jdW1lbnRlZCB3ZSBhcmUgYmV0dGVyIG9mZiBcbiAgICAgKiBleHRyYWN0aW5nIG5lY2Vzc2FyeSBpbmZvIGNsaWVudCBzaWRlIG91ciBzZWx2ZXMuIFdlJ3JlIGVtdWxhdGluZyB0aGVpciBjaGVja291dC5qcyBcbiAgICAgKiBAcmV0dXJuIGFuIG9iamVjdCBjb250YWluaW5nIGFkZHJlc3MgcGFydHMgXG4gICAgICovXG4gICAgZ2V0U2hpcHBpbmdEYXRhKCkge1xuXG4gICAgICAgIC8vICMjREpESiBWZXJvdmF0bm8gc2FtbyBvdmRlIHRyZWJhIGRhIHNlIGl6bWVuaSBpIHBvdnVrdSBwb2RhY2kgc2EgcHJhdmloIGlkamV2YSB6YSBpbnB1dCB0ZXh0XG4gICAgICAgIHZhciBjb3VudHJ5ID0galF1ZXJ5KCcjYmlsbGluZ19jb3VudHJ5JykudmFsKCksXG4gICAgICAgICAgICBzdGF0ZSA9IGpRdWVyeSgnI2JpbGxpbmdfc3RhdGUnKS52YWwoKSxcbiAgICAgICAgICAgIHBvc3Rjb2RlID0galF1ZXJ5KCdpbnB1dCNiaWxsaW5nX3Bvc3Rjb2RlJykudmFsKCksXG4gICAgICAgICAgICBjaXR5ID0galF1ZXJ5KCcjYmlsbGluZ19jaXR5JykudmFsKCksXG4gICAgICAgICAgICBhZGRyZXNzID0galF1ZXJ5KCdpbnB1dCNiaWxsaW5nX2FkZHJlc3NfMScpLnZhbCgpLFxuICAgICAgICAgICAgYWRkcmVzc18yID0galF1ZXJ5KCdpbnB1dCNiaWxsaW5nX2FkZHJlc3NfMicpLnZhbCgpLFxuICAgICAgICAgICAgc19jb3VudHJ5ID0gY291bnRyeSxcbiAgICAgICAgICAgIHNfc3RhdGUgPSBzdGF0ZSxcbiAgICAgICAgICAgIHNfcG9zdGNvZGUgPSBwb3N0Y29kZSxcbiAgICAgICAgICAgIHNfY2l0eSA9IGNpdHksXG4gICAgICAgICAgICBzX2FkZHJlc3MgPSBhZGRyZXNzLFxuICAgICAgICAgICAgc19hZGRyZXNzXzIgPSBhZGRyZXNzXzI7XG5cblxuICAgICAgICBpZiAoalF1ZXJ5KCcjc2hpcC10by1kaWZmZXJlbnQtYWRkcmVzcycpLmZpbmQoJ2lucHV0JykuaXMoJzpjaGVja2VkJykpIHtcbiAgICAgICAgICAgIHNfY291bnRyeSA9IGpRdWVyeSgnI3NoaXBwaW5nX2NvdW50cnknKS52YWwoKTtcbiAgICAgICAgICAgIHNfc3RhdGUgPSBqUXVlcnkoJyNzaGlwcGluZ19zdGF0ZScpLnZhbCgpO1xuICAgICAgICAgICAgc19wb3N0Y29kZSA9IGpRdWVyeSgnaW5wdXQjc2hpcHBpbmdfcG9zdGNvZGUnKS52YWwoKTtcbiAgICAgICAgICAgIHNfY2l0eSA9IGpRdWVyeSgnI3NoaXBwaW5nX2NpdHknKS52YWwoKTtcbiAgICAgICAgICAgIHNfYWRkcmVzcyA9IGpRdWVyeSgnaW5wdXQjc2hpcHBpbmdfYWRkcmVzc18xJykudmFsKCk7XG4gICAgICAgICAgICBzX2FkZHJlc3NfMiA9IGpRdWVyeSgnaW5wdXQjc2hpcHBpbmdfYWRkcmVzc18yJykudmFsKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc19jb3VudHJ5ID09IFwiXCIpe1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJDT1VOVFJZIEVNUFRZXCIpO1xuICAgICAgICAgICAgalF1ZXJ5KCdpbnB1dFthcmlhLWxhYmVsKj1cIkNvdW50cnkvUmVnaW9uXCJdJykuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBzX2NvdW50cnkgPSBqUXVlcnkodGhpcykudmFsKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVsc2UgaWYgKHNfY291bnRyeSA9PSBcIlwiKXtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ09VTlRSWSBFTVBUWSBBR0FJTlwiKTtcbiAgICAgICAgICAgIGpRdWVyeSgnI3NoaXBwaW5nLWNvdW50cnkgb3B0aW9uOnNlbGVjdGVkJykudGV4dCgpXG4gICAgICAgIH1cblxuXG5cbiAgICAgICAgd2luZG93LnNoaXB0aW1pemVfc2hpcHBpbmdfYWRkcmVzcyA9IHtcbiAgICAgICAgICAgIFwiQWRkcmVzc1wiOntcbiAgICAgICAgICAgICAgICBcIkxhdFwiOiBcIlwiLFxuICAgICAgICAgICAgICAgIFwiTG9uZ1wiOiBcIlwiLFxuICAgICAgICAgICAgICAgIFwiU3RyZWV0bmFtZTFcIjogc19hZGRyZXNzLFxuICAgICAgICAgICAgICAgIFwiU3RyZWV0bmFtZTJcIjogc19hZGRyZXNzXzIsXG4gICAgICAgICAgICAgICAgXCJIb3VzZU51bWJlclwiOiAnJyxcbiAgICAgICAgICAgICAgICBcIk51bWJlckV4dGVuc2lvblwiOiAnJyxcbiAgICAgICAgICAgICAgICBcIlBvc3RhbENvZGVcIjogc19wb3N0Y29kZSxcbiAgICAgICAgICAgICAgICBcInNfcG9zdGNvZGVcIjogc19wb3N0Y29kZSxcbiAgICAgICAgICAgICAgICBcIkNpdHlcIjogc19jaXR5LFxuICAgICAgICAgICAgICAgIFwiQ291bnRyeVwiOiBzX2NvdW50cnksXG4gICAgICAgICAgICAgICAgXCJTdGF0ZVwiOiBzX3N0YXRlLFxuXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcG9zdF9kYXRhOiBqUXVlcnkoJ2Zvcm0uY2hlY2tvdXQnKS5zZXJpYWxpemUoKSxcbiAgICAgICAgICAgIFwiQ2FycmllcklkXCI6IGpRdWVyeShcIiNzaGlwcGluZ19jYXJyaWVyX2lkXCIpLnZhbCgpXG4gICAgICAgIH07XG5cbiBcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFwiQWRkcmVzc1wiOntcbiAgICAgICAgICAgICAgICBcIkxhdFwiOiBcIlwiLFxuICAgICAgICAgICAgICAgIFwiTG9uZ1wiOiBcIlwiLFxuICAgICAgICAgICAgICAgIFwiU3RyZWV0bmFtZTFcIjogc19hZGRyZXNzLFxuICAgICAgICAgICAgICAgIFwiU3RyZWV0bmFtZTJcIjogc19hZGRyZXNzXzIsXG4gICAgICAgICAgICAgICAgXCJIb3VzZU51bWJlclwiOiAnJyxcbiAgICAgICAgICAgICAgICBcIk51bWJlckV4dGVuc2lvblwiOiAnJyxcbiAgICAgICAgICAgICAgICBcIlBvc3RhbENvZGVcIjogc19wb3N0Y29kZSxcbiAgICAgICAgICAgICAgICBcInNfcG9zdGNvZGVcIjogc19wb3N0Y29kZSxcbiAgICAgICAgICAgICAgICBcIkNpdHlcIjogc19jaXR5LFxuICAgICAgICAgICAgICAgIFwiQ291bnRyeVwiOiBzX2NvdW50cnksXG4gICAgICAgICAgICAgICAgXCJTdGF0ZVwiOiBzX3N0YXRlLFxuXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcG9zdF9kYXRhOiBqUXVlcnkoJ2Zvcm0uY2hlY2tvdXQnKS5zZXJpYWxpemUoKSxcbiAgICAgICAgICAgIFwiQ2FycmllcklkXCI6IGpRdWVyeShcIiNzaGlwcGluZ19jYXJyaWVyX2lkXCIpLnZhbCgpXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqIFxuICAgICAqIFdlIG11c3QgcnVuIHRoaXMgb25sb2FkIFxuICAgICAqIEFuZCBvbiBtZXRob2QgY2hhbmdlIFxuICAgICAqIGJlY2F1c2UgcGVvcGxlIG1heSBuZXZlciBjaGFuZ2UgdGhlIGNhcnJpZXIgb3Igc2VsZWN0IGEgcGlja3VwIHBvaW50IFxuICAgICAqLyBcbiAgICBzZXRDYXJyaWVyKGNhcnJpZXJfaWQpe1xuICAgICAgICBjb25zb2xlLmxvZyhcIlNldCBjYXJyaWVyIGlkXCIpO1xuICAgICAgICBjb25zb2xlLmxvZyhjYXJyaWVyX2lkKTtcbiAgICAgICAgdGhpcy5jYXJyaWVyX2lkID0gdHlwZW9mKGNhcnJpZXJfaWQpICE9ICd1bmRlZmluZWQnID8gY2Fycmllcl9pZCA6IHRoaXMuZ2V0U2hpcHBpbmdNZXRob2RJZCgpOyAgXG4gICAgICAgIGpRdWVyeShcIiNzaGlwcGluZ19jYXJyaWVyX2lkXCIpLnZhbCh0aGlzLmNhcnJpZXJfaWQpO1xuICAgIH1cblxuICAgIC8qKiBcbiAgICAgKiBAcGFyYW0gUGlja3VwIHBpY2t1cCBcbiAgICAgKi9cbiAgICBzZXRQaWNrdXBQb2ludChwaWNrdXApIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJTRVQgUElDS1VQIFBPSU5UIEAjQCNcIilcbiAgICAgICAgY29uc29sZS5sb2cocGlja3VwKTtcbiAgICAgICAgbGV0IHBpY2t1cF9sYWJlbCA9ICBwaWNrdXAuSW5mb3JtYXRpb24uTmFtZSArIFwiIFwiICsgcGlja3VwLkluZm9ybWF0aW9uLkFkZHJlc3M7XG5cbiAgICAgICAgbGV0IHJlcSA9IHtcbiAgICAgICAgICAgICdhY3Rpb24nOiAnc2hpcHRpbWl6ZV9zZXRfcGlja3VwX3BvaW50JyxcbiAgICAgICAgICAgICdzaGlwcGluZ19waWNrdXBfbGFiZWwnOnBpY2t1cF9sYWJlbCxcbiAgICAgICAgICAgICdzaGlwdGltaXplX3BpY2t1cF9leHRlbmRlZCc6IGpRdWVyeSgnLnNoaXB0aW1pemVfbWFwZmllbGRzJyArIHBpY2t1cC5Qb2ludElkKS52YWwoKSxcbiAgICAgICAgICAgICdzaGlwdGltaXplLXBpY2t1cF9fZGVzY3JpcHRpb24nOiBwaWNrdXBfbGFiZWwsXG4gICAgICAgICAgICAnc2hpcHBpbmdfcGlja3VwX2lkJyA6IHBpY2t1cC5Qb2ludElkLFxuICAgICAgICAgICAgJ3NoaXBwaW5nX2NhcnJpZXJfaWQnIDogd2luZG93LmNhcnJpZXJfaWRcbiAgICAgICAgfTtcblxuICAgICAgICBqUXVlcnkuZ2V0SlNPTih0aGlzLmFqYXhfdXJsLCByZXEgLCAgKGRhdGEpICA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIlVzcGVvb29vbyBzYW0gemVtb1wiKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xuICAgICAgICB9KS5mYWlsKChlcnIpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRmF0YWwgZXJyb3Igd2lkZ2V0IHJlcXVlc3RpbmcgcG9pbnRzIGRvIHdlIGhhdmUgYW4gQVBJIGJ1Zz9cIixlcnIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gIyNESkRKIE92ZGVlZVxuICAgICAgICAvLyBqUXVlcnkoXCIjc2hpcHRpbWl6ZS1waWNrdXBfX2Rlc2NyaXB0aW9uXCIpLmh0bWwoXCJTZWxlY2V0ZCBwaWNrdXBcIiArIFwiIDogXCIgK3BpY2t1cF9sYWJlbCk7XG4gICAgICAgIGpRdWVyeShcIiNzaGlwdGltaXplLXBpY2t1cF9fZGVzY3JpcHRpb25cIikuaHRtbChzaGlwdGltaXplX3NlbGVjdCArIFwiIDogXCIgK3BpY2t1cF9sYWJlbCk7XG4gICAgICAgIGpRdWVyeShcIiNzaGlwcGluZ19waWNrdXBfaWRcIikudmFsKHBpY2t1cC5Qb2ludElkKTtcbiAgICAgICAgalF1ZXJ5KFwiI3NoaXBwaW5nX3BpY2t1cF9sYWJlbFwiKS52YWwocGlja3VwX2xhYmVsKTsgXG5cbiAgICAgICAgalF1ZXJ5KFwiI3NoaXB0aW1pemVwaWNrdXBcIikudmFsKHBpY2t1cC5Qb2ludElkKTsgXG5cbiAgICAgICAgLy8gSXMgdGhlcmUgZXh0cmEgaW5mbyA/IFxuICAgICAgICBpZiAoIGpRdWVyeSgnLnNoaXB0aW1pemVfbWFwZmllbGRzJyArIHBpY2t1cC5Qb2ludElkKS5sZW5ndGggPiAwICkgIHtcbiAgICAgICAgICAgIGpRdWVyeSgnI3NoaXBwaW5nX3BpY2t1cF9leHRlbmRlZCcpLnZhbChqUXVlcnkoJy5zaGlwdGltaXplX21hcGZpZWxkcycgKyBwaWNrdXAuUG9pbnRJZCkudmFsKCkpOyBcbiAgICAgICAgfSBcbiAgICB9XG59IiwiaW1wb3J0IFV0aWxzIGZyb20gJy4vc2hpcHRpbWl6ZS11dGLSDkcy5qcyc7XG5pbXBvcnQgTCBmcm9tICcuL2xlYWZsZXQtMS40LjAnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaGlwdGltaXplT3Blbk1hcCB7XG5cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zLCBzaGlwdGltaXplKSB7XG5cbiAgICAgICAgY29uc29sZS5sb2coXCJPUEVOTUFQQ09OU1RSVUNUMjIyMlwiKTtcblxuICAgICAgICB0aGlzLnNoaXB0aW1pemUgPSBzaGlwdGltaXplO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICB0aGlzLm1hcCA9IG51bGw7XG4gICAgICAgIHRoaXMuaG9zdCA9IG9wdGlvbnMuaG9zdCB8fCAnaHR0cHM6Ly9teS5zaGlwdGltaXplLm1lJztcbiAgICAgICAgdGhpcy5pY29uX2ZvbGRlciA9IHR5cGVvZiAoc2hpcHRpbWl6ZV9pY29uX2ZvbGRlcikgIT09ICd1bmRlZmluZWQnID8gc2hpcHRpbWl6ZV9pY29uX2ZvbGRlciA6ICcnO1xuICAgICAgICB0aGlzLm1hcFdyYXBwZXIgPSBudWxsO1xuICAgICAgICB0aGlzLnN0eWxlUGF0aCA9IG9wdGlvbnMuc3R5bGVQYXRoIHx8IHRoaXMuaG9zdCArICcvc2hvcHN5c3RlbXMvdjIvYXNzZXRzL3NoaXB0aW1pemV3aWRnZXQuY3NzJztcbiAgICAgICAgdGhpcy5tYXJrZXJzID0gW107XG4gICAgICAgIHRoaXMucGlja3VwUG9pbnRzID0gW107XG4gICAgICAgIHRoaXMuY2Fycmllcl9pY29uX2NvbmZpZyA9IHtcbiAgICAgICAgICAgIDMwIDoge1xuICAgICAgICAgICAgICAgIGV4dGVuc2lvbjonc3ZnJyxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFN0YXRlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGljb25TaXplOiBbMzIsMzJdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgNjggOiB7XG4gICAgICAgICAgICAgICAgZXh0ZW5zaW9uOidzdmcnLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkU3RhdGU6IHRydWUsXG4gICAgICAgICAgICAgICAgaWNvblNpemU6IFs1Nyw5Ml1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICA3MToge1xuICAgICAgICAgICAgICAgIGV4dGVuc2lvbjonc3ZnJyxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFN0YXRlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGljb25TaXplOiBbNTcsOTJdXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQb2ludElkeCA9IG51bGw7XG4gICAgICAgIHRoaXMubW92ZUxpc3RlbmVycyA9IFtdO1xuICAgICAgICB0aGlzLmlzTW92aW5nID0gZmFsc2U7IC8qIFRoZSBtYXAgaXMgbG9hZGluZyBwb2ludHMgKi9cbiAgICAgICAgdGhpcy5pc1VzZXJNb3ZpbmcgPSBmYWxzZTsgLyogVGhlIHVzZXIgaXMgbW92aW5nIHRoZSBtYXAgKi9cbiAgICAgICAgdGhpcy5ib3VuZHMgPSBudWxsO1xuXG4gICAgfVxuXG4gICAgc2V0Q2FycmllcklkKGNhcnJpZXJfaWQpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJPUEVOTUFQQ0FSUklFUklEXCIpXG4gICAgICAgIHRoaXMuY2Fycmllcl9pZCA9IGNhcnJpZXJfaWQ7XG4gICAgICAgIHRoaXMuY3VycmVudF9pY29uID0gdGhpcy5nZXRDYXJyaWVySWNvbk9mVHlwZSh0aGlzLmNhcnJpZXJfaWQpXG4gICAgfTtcblxuICAgIHNlbGVjdFBvaW50KGlkeCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIlNlbGVjdCBwb2ludFwiKVxuICAgICAgICBjb25zb2xlLmxvZyhpZHgpO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFBvaW50SWR4ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMubWFya2Vyc1t0aGlzLnNlbGVjdGVkUG9pbnRJZHhdLnNldEljb24odGhpcy5nZXRDYXJyaWVySWNvbk9mVHlwZSh0aGlzLmNhcnJpZXJfaWQsIHRoaXMucGlja3VwUG9pbnRzW3RoaXMuc2VsZWN0ZWRQb2ludElkeF0uVHlwZSwwKSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlbGVjdGVkUG9pbnRJZHggPSBpZHg7XG4gICAgICAgIHRoaXMubWFya2Vyc1tpZHhdLnNldEljb24odGhpcy5nZXRDYXJyaWVySWNvbk9mVHlwZSh0aGlzLmNhcnJpZXJfaWQsIHRoaXMucGlja3VwUG9pbnRzW2lkeF0uVHlwZSwxKSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIHN0cmluZyBpbWFnZVVybCAtIGZ1bGwgdXJsIHRvIHRoZSBpY29uXG4gICAgICogQHJldHVybiBMLmljb24gb2JqZWN0XG4gICAgICovXG4gICAgY3JlYXRlSWNvbihpbWFnZVVybCkge1xuXG4gICAgICAgIGxldCBpY29uU2l6ZSA9IHR5cGVvZih0aGlzLmNhcnJpZXJfaWNvbl9jb25maWdbdGhpcy5jYXJyaWVyX2lkXSkgIT0gXCJ1bmRlZmluZWRcIiA/IHRoaXMuY2Fycmllcl9pY29uX2NvbmZpZ1t0aGlzLmNhcnJpZXJfaWRdLmljb25TaXplIDogNTA7XG4gICAgICAgIHJldHVybiBMLmljb24oe1xuICAgICAgICAgICAgaWNvblVybDogaW1hZ2VVcmwsXG4gICAgICAgICAgICBpY29uU2l6ZTogW2ljb25TaXplLCBpY29uU2l6ZV0sIC8qIHNpemUgb2YgdGhlIGljb24gKi9cbiAgICAgICAgICAgIGljb25BbmNob3I6IFtpY29uU2l6ZSAvIDIsIGljb25TaXplXSwgLyogcG9pbnQgb2YgdGhlIGljb24gd2hpY2ggd2lsbCBjb3JyZXNwb25kIHRvIG1hcmtlcidzIGxvY2F0aW9uICovXG4gICAgICAgICAgICBwb3B1cEFuY2hvcjogWy0xICogaWNvblNpemUgLyAyLCAtMSAqIGljb25TaXplIC8gMl0gLyogcG9pbnQgZnJvbSB3aGljaCB0aGUgcG9wdXAgc2hvdWxkIG9wZW4gcmVsYXRpdmUgdG8gdGhlIGljb25BbmNob3IgKi9cbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICBzZXRab29tID0gZnVuY3Rpb24gKHpvb20pIHtcbiAgICAgICAgdGhpcy5tYXAuc2V0Wm9vbSh6b29tKTtcbiAgICB9XG5cbiAgICBpc01hcE1vdmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNNb3ZpbmcgfHwgdGhpcy5pc1VzZXJNb3Zpbmc7XG4gICAgfTtcblxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIGRlY2ltYWwgbGF0XG4gICAgICogQHBhcmFtIGRlY2ltYWwgbG5nXG4gICAgICovXG4gICAgY2VudGVyTWFwKGxhdCwgbG5nKSB7XG5cbiAgICAgICAgbGV0IGxhdGxuZyA9IEwubGF0TG5nKGxhdCwgbG5nKTtcblxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGlmIHRoZSBzY3JpcHQgaGFzIG5vdCBiZWVuIGxvYWRlZCAsIGxvYWQgaXQuXG4gICAgICogV2UgdXNlIHRoaXMgZnVuY3Rpb24gYmVjYXVzZSB3ZSBvbmx5IHdhbnQgdG8gbG9hZCB0aGUgc2NyaXB0IHdoZW4gdGhlIHVzZXIgY2xpY2tzIHRoZSBidXR0b25cbiAgICAgKi9cbiAgICAvLyAjI0RKREogUHJvdmVyaSByYWRpIGxpIGJleiBvdm9nYVxuICAgIGdyYW50UmVhZHkoKSB7XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzU2NyaXB0TG9hZGVkKSB7XG5cbiAgICAgICAgICAgIHRoaXMubG9hZFNjcmlwdCgpO1xuXG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIC8vICMjREpESiBCcG9zdCBzdHVmZlxuICAgIGdlb2NvZGVCcG9zdCAocXVlcnlwYXJ0cywgZmNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiQlBPU1RHRU9DT0RFXCIpO1xuICAgICAgICB0aGlzLl9nZW9jb2RlKHF1ZXJ5cGFydHMuYWRkcmVzcywgZmNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgX2dlb2NvZGUgKHF1ZXJ5cGFydHMsIGZjYWxsYmFjaykge1xuXG4gICAgICAgIGpRdWVyeS5nZXRKU09OKCdodHRwczovL2Jwb3N0ZGV2LnNoaXB0aW1pemUubWUvc2hvcHN5c3RlbXMvdjIvc2hvcGlmeS9icG9zdGdlb2NvZGU/c2VhcmNoVGV4dD0nICsgcXVlcnlwYXJ0cywge30sIGZ1bmN0aW9uKHJlc3ApIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3AucmVzcG9uc2UpO1xuICAgICAgICAgICAgbGV0IHJlc3VsdHMgPSBbXTtcbiAgICAgICAgICAgIGxldCBpbmRleCA9IDA7XG5cbiAgICAgICAgICAgIGlmIChyZXNwLnJlc3BvbnNlICYmIHJlc3AucmVzcG9uc2UudG9wU3VnZ2VzdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygxKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyZXNwKTtcbiAgICAgICAgICAgICAgICBsZXQgcGxhY2VzID0gcmVzcC5yZXNwb25zZS50b3BTdWdnZXN0aW9ucztcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBsYWNlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICAvLyAjI0RKREogVnJhdGkgb3ZvIGtha28gamUgYmlsbyBtb3pkYT9cbiAgICAgICAgICAgICAgICAgICAgaWYgKHBsYWNlc1tpXS5hZGRyZXNzLnNlYXJjaEJhclN0cmluZykge1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiAoaW5kZXggPT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coMik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGlzcGxheV9uYW1lXCI6IHBsYWNlc1tpXS5hZGRyZXNzLnNlYXJjaEJhclN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFkZHJlc3NcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaXR5OiBwbGFjZXNbaV0uYWRkcmVzcy5tdW5pY2lwYWxpdHlOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3VudHJ5OiAnYmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3N0YWxDb2RlOiBwbGFjZXNbaV0uYWRkcmVzcy5wb3N0YWxDb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAjI0RKREogT3ZvIGlzdG9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyZWV0bmFtZTE6IHBsYWNlc1tpXS5hZGRyZXNzLnNlYXJjaEJhclN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGF0XCI6IHBsYWNlc1tpXS5hZGRyZXNzLmxhdGl0dWRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibG5nXCI6IHBsYWNlc1tpXS5hZGRyZXNzLmxvbmdpdHVkZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiUmV6dWx0YXRpXCIpO1xuICAgICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG5cbiAgICAgICAgICAgIGZjYWxsYmFjayAmJiBmY2FsbGJhY2socmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cblxuICAgIC8vICMjREpESiBTaGlwdGltaXplIHBhcnRcbiAgICBnZW9jb2RlIChxdWVyeXBhcnRzLCBmY2FsbGJhY2spIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJHRU9DT0RFIEZVTkNUSU9OXCIpO1xuICAgICAgICBjb25zb2xlLmxvZyhxdWVyeXBhcnRzKTtcbiAgICAgICAgbGV0IHF1ZXJ5dmFsID0gcXVlcnlwYXJ0cy5hZGRyZXNzO1xuICAgICAgICBsZXQgcXVlcnkgPSBcIlwiO1xuXG4gICAgICAgIGNvbnN0IGNvdW50cnkgID0gcXVlcnlwYXJ0cy5jb3VudHJ5ID8gcXVlcnlwYXJ0cy5jb3VudHJ5LnRvTG93ZXJDYXNlKCkgOiBudWxsO1xuXG4gICAgICAgIGlmKHF1ZXJ5dmFsLm1hdGNoKC9eKFswLTlcXC1dKykkLykpIHtcbiAgICAgICAgICAgIGlmIChxdWVyeXBhcnRzLmNvdW50cnkgPT0gJ1BvcnR1Z2FsJyAmJiB0eXBlb2YobWlzc2luZ1ppcFBUKSAhPSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIC8qIElzIHRoaXMgYSBwb3N0YWwgY29kZSB3ZSBrbm93IGlzIG5vdCBnZW9jb2RhYmxlIGluIG5vbWluYXRpbT8gKi9cbiAgICAgICAgICAgICAgICBsZXQgemlwNGRpZyA9IHF1ZXJ5dmFsLnN1YnN0cmluZygwLDQpO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGk9MDsgaTxtaXNzaW5nWmlwUFQubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYobWlzc2luZ1ppcFBUW2ldLnppcGNvZGUgPT0gemlwNGRpZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWVyeVJlc3VsdHMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXNwbGF5X25hbWVcIjogbWlzc2luZ1ppcFBUW2ldLmRpc3BsYXlfbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxhdFwiOiBtaXNzaW5nWmlwUFRbaV0ubGF0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibG9uXCI6IG1pc3NpbmdaaXBQVFtpXS5sbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmNhbGxiYWNrKFt0aGlzLnF1ZXJ5UmVzdWx0c10pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcXVlcnkgPSAncG9zdGFsY29kZT0nICsgcXVlcnl2YWwgKyAnJmNvdW50cnk9JyArIGNvdW50cnk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY291bnRyeSkge1xuICAgICAgICAgICAgcXVlcnkgPSAncT0nICsgcXVlcnl2YWw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5sb2cocXVlcnkpO1xuXG4gICAgICAgIGpRdWVyeShcIiNzdy1xdWVyeS1yZXN1bHRzXCIpLmh0bWwoJzxkaXYgY2xhc3M9XCJzdy1sb2FkZXJcIj48ZGl2PjwvZGl2PjxkaXY+PC9kaXY+PGRpdj48L2Rpdj48L2Rpdj4nKTtcbiAgICAgICAgalF1ZXJ5LmdldEpTT04oXCJodHRwczovL25vbWluYXRpbS5vcGVuc3RyZWV0bWFwLm9yZy9zZWFyY2g/Zm9ybWF0PWpzb24mYWRkcmVzc2RldGFpbHM9MSZcIiArIHF1ZXJ5LCAocmVzKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIlJlenVsdGF0XCIpO1xuICAgICAgICAgICAgY29uc29sZS5sb2cocmVzKTtcbiAgICAgICAgICAgIGlmIChyZXMubGVuZ3RoID09IDAgJiYgIHF1ZXJ5dmFsLm1hdGNoKC9eKFswLTlcXC1dKykkLykgJiYgKGNvdW50cnkudG9VcHBlckNhc2UoKSA9PSAnUFQnIHx8IGNvdW50cnkudG9Mb3dlckNhc2UoKSA9PSAncG9ydHVnYWwnKSkge1xuICAgICAgICAgICAgICAgIGpRdWVyeShcIiNzdy1xdWVyeVwiKS52YWwocXVlcnl2YWwuc3Vic3RyaW5nKDAsNCkpO1xuICAgICAgICAgICAgICAgLy8gIyNESkRKIFRoaXMgaXMgbWlzc2luZ1xuICAgICAgICAgICAgICAgIHRoaXMuZ2VvY29kZVF1ZXJ5KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnF1ZXJ5UmVzdWx0cyA9IFtdO1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJURVNUVEVTVE9WREVcIik7XG4gICAgICAgICAgICBmb3IgKGxldCBpPTA7IGkgPCByZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIk9WQUogUkVTUE9OU0VcIik7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2cocmVzW2ldKTtcbiAgICAgICAgICAgICAgICBjb25zdCB3YW50ZWQgPSByZXNbaV0uYWRkcmVzcy5wb3N0Y29kZSB8fCByZXNbaV0uYWRkcmVzcy5jaXR5IHx8IHJlc1tpXS5hZGRyZXNzLmNvdW50eTtcblxuICAgICAgICAgICAgICAgIGlmICh3YW50ZWQgJiYgalF1ZXJ5KCcjc2hpcHBpbmctY291bnRyeSBvcHRpb246c2VsZWN0ZWQnKS52YWwoKSAhPSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChqUXVlcnkoJyNzaGlwcGluZy1jb3VudHJ5IG9wdGlvbjpzZWxlY3RlZCcpLnZhbCgpLnRvTG93ZXJDYXNlKCkgPT09IHJlc1tpXS5hZGRyZXNzLmNvdW50cnlfY29kZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIldhbnRlZCBhbmQgdmFsIG5vdCBudWxsXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wdXNoRGlzcGxheWVkUmVzdWx0cyhyZXNbaV0scXVlcnlwYXJ0cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZih3YW50ZWQgJiYgalF1ZXJ5KCcjc2hpcHBpbmctY291bnRyeSBvcHRpb246c2VsZWN0ZWQnKS52YWwoKSA9PSBcIlwiKXtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJXYW50ZWQgYW5kIHZhbCBudWxsXCIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnB1c2hEaXNwbGF5ZWRSZXN1bHRzKHJlc1tpXSxxdWVyeXBhcnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGZjYWxsYmFjayk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnF1ZXJ5UmVzdWx0cyk7XG5cbiAgICAgICAgICAgIGZjYWxsYmFjayAmJiBmY2FsbGJhY2sodGhpcy5xdWVyeVJlc3VsdHMpO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgcHVzaERpc3BsYXllZFJlc3VsdHMocmVzLHF1ZXJ5cGFydHMpe1xuICAgICAgICBjb25zb2xlLmxvZyhcIklGIFdBTlRFRFwiKTtcbiAgICAgICAgbGV0IG5vbUFkZHIgPSAgcmVzO1xuICAgICAgICBjb25zdCBzdHJlZXQgPSB0eXBlb2Yobm9tQWRkci5hZGRyZXNzLnJvYWQpICE9ICd1bmRlZmluZWQnID8gbm9tQWRkci5hZGRyZXNzLnJvYWQgOiBub21BZGRyLmRpc3BsYXlfbmFtZTtcblxuICAgICAgICBsZXQgZGlzcGxheV9uYW1lID0gKHN0cmVldD8gc3RyZWV0IDogJycpICsgJyAnICsgKG5vbUFkZHIuYWRkcmVzcy5wb3N0Y29kZSA/IG5vbUFkZHIuYWRkcmVzcy5wb3N0Y29kZSA6ICcnKTtcblxuICAgICAgICBpZiAodHlwZW9mKG5vbUFkZHIuYWRkcmVzcy5jaXR5KSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiSU1BIEdSQURcIilcbiAgICAgICAgICAgIGRpc3BsYXlfbmFtZSArPSAgJyAnICsgbm9tQWRkci5hZGRyZXNzLmNpdHk7XG4gICAgICAgIH1cblxuICAgICAgICBpZih0eXBlb2Yobm9tQWRkci5hZGRyZXNzLnJlZ2lvbikgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIklNQSBSRUdJT05cIilcbiAgICAgICAgICAgIGRpc3BsYXlfbmFtZSArPSAnICcgKyBub21BZGRyLmFkZHJlc3MucmVnaW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5vbUFkZHIuYWRkcmVzcy5jb3VudHkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiSU1BIENPVU5UWVwiKVxuICAgICAgICAgICAgZGlzcGxheV9uYW1lICs9ICcgJyArIG5vbUFkZHIuYWRkcmVzcy5jb3VudHk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocXVlcnlwYXJ0cy5jb3VudHJ5LnRvTG93ZXJDYXNlKCkgIT09IG5vbUFkZHIuYWRkcmVzcy5jb3VudHJ5LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGRpc3BsYXlfbmFtZSArPSBcIiBcIiArIG5vbUFkZHIuYWRkcmVzcy5jb3VudHJ5X2NvZGU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnF1ZXJ5UmVzdWx0cy5wdXNoKHtcbiAgICAgICAgICAgIFwiZGlzcGxheV9uYW1lXCI6IGRpc3BsYXlfbmFtZSxcbiAgICAgICAgICAgIFwiYWRkcmVzc1wiOiB7XG4gICAgICAgICAgICAgICAgQ2l0eTogbm9tQWRkci5hZGRyZXNzLmNpdHksXG4gICAgICAgICAgICAgICAgQ291bnRyeTogbm9tQWRkci5hZGRyZXNzLmNvdW50cnlfY29kZSxcbiAgICAgICAgICAgICAgICBQb3N0YWxDb2RlOiBub21BZGRyLmFkZHJlc3MucG9zdGNvZGUsXG4gICAgICAgICAgICAgICAgU3RyZWV0bmFtZTE6IHN0cmVldCxcbiAgICAgICAgICAgICAgICBTdGF0ZTogbm9tQWRkci5hZGRyZXNzLnJlZ2lvblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwibGF0XCI6IG5vbUFkZHIubGF0LFxuICAgICAgICAgICAgXCJsbmdcIjpub21BZGRyLmxvblxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gZl9jYWxsYmFjayB3aGF0IGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgcmVxdWVzdCByZXNvbHZlc1xuICAgICAqIEBwYXJhbSBjaXR5IC0gY2l0eSBuYW1lXG4gICAgICogQHBhcmFtIGNvdW50cnkGLSDkBjb3VudHJ5IGluIGlzbzIgdXBwZXJjYXNlXG4gICAgICogQHBhcmFtIHBvc3RhbGNvZGUGLSDkB0aGUgcG9zdGFsIGNvZGVcbiAgICAgKiBAcGFyYW0gc3RyZWV0bmFtZSAtIHRoZSBzdHJlZXRuYW1lXG4gICAgICovXG4gICAgZ2VvY29kZUFkZHJlc3MoZl9jYWxsYmFjaywgY2l0eSwgY291bnRyeSwgcG9zdGFsY29kZSwgc3RyZWV0bmFtZSkge1xuXG4gICAgICAgIHZhciBxdWVyeVN0cmluZyA9IFwiaHR0cHM6Ly9ub21pbmF0aW0ub3BlbnN0cmVldG1hcC5vcmcvc2VhcmNoP2Zvcm1hdD1qc29uJmFkZHJlc3NkZXRhaWxzPTFcIiArXG4gICAgICAgICAgICBcIiZjaXR5PVwiICsgY2l0eSArXG4gICAgICAgICAgICBcIiZjb3VudHJ5PVwiICsgY291bnRyeTtcblxuICAgICAgICBpZiAodHlwZW9mIChwb3N0YWxjb2RlKSAhPT0gJ3VuZGVmaW5lZCcpIHtcblxuICAgICAgICAgICAgaWYgKGNvdW50cnkgPT0gJ1BUJyB8fCBjb3VudHJ5ID09ICdQb3J0dWdhbCcpIHtcblxuICAgICAgICAgICAgICAgIHBvc3RhbGNvZGUgPSBwb3N0YWxjb2RlLnN1YnN0cigwLCA0KTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcXVlcnlTdHJpbmcgKz0gXCImcG9zdGFsY29kZT1cIiArIHBvc3RhbGNvZGU7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgKHN0cmVldG5hbWUpICE9PSAndW5kZWZpbmVkJykge1xuXG4gICAgICAgICAgICBxdWVyeVN0cmluZyArPSBcIiZzdHJlZXQ9XCIgKyBzdHJlZXRuYW1lO1xuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mKGJ0b2EpICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YodGhpcy5hZGRyZXNzX2NhY2hlW2J0b2EocXVlcnlTdHJpbmcpXSkgIT09ICd1bmRlZmluZWQnKSB7XG5cbiAgICAgICAgICAgIGZfY2FsbGJhY2sodGhpcy5hZGRyZXNzX2NhY2hlW2J0b2EocXVlcnlTdHJpbmcpXSk7XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcblxuICAgICAgICAgICAgalF1ZXJ5LmdldEpTT04ocXVlcnlTdHJpbmcsIHt9LCAocmVzcG9uc2UpID0+ICB7XG5cbiAgICAgICAgICAgICAgICBsZXQgZ2VvY29kZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgJ2lzbzInOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgJ2xhdCc6ICcnLFxuICAgICAgICAgICAgICAgICAgICAnbG5nJzogJydcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmxlbmd0aCA+IDApIHtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgbG9jYXRpb24gPSByZXNwb25zZVswXTtcblxuICAgICAgICAgICAgICAgICAgICBnZW9jb2RlLmlzbzIgPSBsb2NhdGlvbi5hZGRyZXNzLmNvdW50cnlfY29kZTtcblxuICAgICAgICAgICAgICAgICAgICBnZW9jb2RlLmxhdCA9IGxvY2F0aW9uLmxhdDtcbiAgICAgICAgICAgICAgICAgICAgZ2VvY29kZS5sbmcgPSBsb2NhdGlvbi5sb247XG5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmFkZHJlc3NfY2FjaGVbYnRvYShxdWVyeVN0cmluZyldID0gZ2VvY29kZTtcbiAgICAgICAgICAgICAgICBmX2NhbGxiYWNrKGdlb2NvZGUpO1xuXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9XG5cbiAgICB9O1xuXG4gICAgLy8gIyNESkRKIEJwb3N0XG4gICAgZ2VvY29kZUFkZHJlc3NQYXJ0c0Jwb3N0IChmY2FsbGJhY2ssIGNpdHksIGNvdW50cnksIHBvc3RhbGNvZGUsIHN0cmVldG5hbWUpIHtcbiAgICAgICAgbGV0IHF1ZXJ5U3RyaW5nID0gJyc7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiQWRkcmVzcyBwYXJ0cyBicG9zdFwiKTtcblxuICAgICAgICBpZiAodHlwZW9mKHN0cmVldG5hbWUpICE9ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBxdWVyeVN0cmluZyArPSBlbmNvZGVVUkkoc3RyZWV0bmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mKHBvc3RhbGNvZGUpICE9ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBxdWVyeVN0cmluZyArPSBcIixcIiArIHBvc3RhbGNvZGU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9nZW9jb2RlKHF1ZXJ5U3RyaW5nLCBmdW5jdGlvbihyZXN1bHRzKSB7XG4gICAgICAgICAgICBsZXQgbGF0bG4gPSB7IGxhdDowLCBsbmc6MH07XG4gICAgICAgICAgICBpZiAocmVzdWx0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgbGF0bG4gPSB7bGF0OiByZXN1bHRzWzBdLmxhdGl0dWRlLCBsbmc6IHJlc3VsdHNbMF0ubG9uZ2l0dWRlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmY2FsbGJhY2sgJiYgZmNhbGxiYWNrKGxhdGxuKTtcbiAgICAgICAgfSk7XG5cbiAgICB9O1xuXG4gICAgLy8gIyNESkRKIFNoaXB0aW1pemUgY29kZVxuICAgIGdlb2NvZGVBZGRyZXNzUGFydHMgKGZfY2FsbGJhY2ssIGNpdHksIGNvdW50cnksIHBvc3RhbGNvZGUsIHN0cmVldG5hbWUpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJBRERSRVNTUEFSVFMgTUlDT1wiKTtcbiAgICAgICAgY29uc29sZS5sb2coY2l0eSk7XG4gICAgICAgIGNvbnNvbGUubG9nKGNvdW50cnkpO1xuICAgICAgICBjb25zb2xlLmxvZyhwb3N0YWxjb2RlKTtcbiAgICAgICAgY29uc29sZS5sb2coc3RyZWV0bmFtZSk7XG4gICAgICAgIHZhciBxdWVyeVN0cmluZyA9IFwiaHR0cHM6Ly9ub21pbmF0aW0ub3BlbnN0cmVldG1hcC5vcmcvc2VhcmNoP2Zvcm1hdD1qc29uJmFkZHJlc3NkZXRhaWxzPTFcIiArXG4gICAgICAgICAgICBcIiZjaXR5PVwiICsgY2l0eSArXG4gICAgICAgICAgICBcIiZjb3VudHJ5X2NvZGU9XCIgKyBjb3VudHJ5O1xuXG4gICAgICAgIGlmICh0eXBlb2YgKHBvc3RhbGNvZGUpICE9ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBpZiAoY291bnRyeSA9PSAnUFQnIHx8IGNvdW50cnkgPT0gJ1BvcnR1Z2FsJykge1xuICAgICAgICAgICAgICAgIHBvc3RhbGNvZGUgPSBwb3N0YWxjb2RlLnN1YnN0cigwLCA0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9IFwiJnBvc3RhbGNvZGU9XCIgKyBwb3N0YWxjb2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiAoc3RyZWV0bmFtZSkgIT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9IFwiJnN0cmVldD1cIiArIGVuY29kZVVSSShzdHJlZXRuYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGpRdWVyeS5nZXRKU09OKHF1ZXJ5U3RyaW5nLCB7fSwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICBsZXQgZ2VvY29kZSA9IHtcbiAgICAgICAgICAgICAgICAnaXNvMic6ICcnLFxuICAgICAgICAgICAgICAgICdsYXQnOiAnJyxcbiAgICAgICAgICAgICAgICAnbG5nJzogJydcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgbGV0IGxvY2F0aW9uID0gcmVzcG9uc2VbMF07XG5cbiAgICAgICAgICAgICAgICBnZW9jb2RlLmlzbzIgPSBsb2NhdGlvbi5hZGRyZXNzLmNvdW50cnlfY29kZTtcblxuICAgICAgICAgICAgICAgIGdlb2NvZGUubGF0ID0gbG9jYXRpb24ubGF0O1xuICAgICAgICAgICAgICAgIGdlb2NvZGUubG5nID0gbG9jYXRpb24ubG9uO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcImdlb2NvZGUgIFwiICsgIHJlc3BvbnNlLmxlbmd0aCAgKyAncmVzdWx0cycpO1xuICAgICAgICAgICAgaWYoZ2VvY29kZS5sYW4pIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcInJldHVybmluZyBcIiAsIGdlb2NvZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZl9jYWxsYmFjayhnZW9jb2RlKTtcblxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgbG9hZFNjcmlwdCgpIHtcblxuICAgICAgICBVdGLSDkcy5pbmplY3RFeHRlcm5hbFNjcmlwdChTSElQVElNSVpFX1BMVUdJTl9VUkwgKyBcInZpZXdzL2pzL2xlYWZsZXQtMS40LjAuanNcIik7XG4gICAgICAgIHRoaXMuaXNTY3JpcHRMb2FkZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm47XG5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMZWFmbGV0IGRvZXMgbm90IHJlY2VpdmUgYSBjYWxsYmFjayBzbyB3ZSB3YWl0IGhlcmUgZm9yIHRoZSBzY3JpcHQgdG8gYmUgbG9hZGVkXG4gICAgICovXG4gICAgaW5pdE1hcCgpe1xuICAgICAgICBjb25zb2xlLmxvZyhcIkxvYWQgbWFwXCIpO1xuICAgICAgICAvLyB0aGlzLm1hcFdyYXBwZXIgPSBqUXVlcnkodGhpcy5vcHRpb25zLm1hcFBhcmVudENvbnRhaW5lcik7XG4gICAgICAgIHRoaXMubWFwV3JhcHBlciA9IGpRdWVyeShcImJvZHlcIik7XG5cbiAgICAgICAgaWYgKHRoaXMubWFwV3JhcHBlci5oYXNDbGFzcygnbGVhZmxldC1jb250YWluZXInKSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJtYXAgd2FzIGFscmVhZHkgbG9hZGVkXCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cblxuICAgICAgICB0aGlzLmljb25fc2VsZWN0ZWQgPSB0aGlzLmNyZWF0ZUljb24odGhpcy5pY29uX2ZvbGRlciArICdzZWxlY3RlZC5wbmcnKTtcbiAgICAgICAgdGhpcy5pY29uX2RlZmF1bHQgPSB0aGlzLmNyZWF0ZUljb24odGhpcy5pY29uX2ZvbGRlciArICdkZWZhdWx0LnBuZycpO1xuXG4gICAgICAgIGlmICghdGhpcy5jdXJyZW50X2ljb24pIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudF9pY29uID0gdGhpcy5pY29uX2RlZmF1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm1hcCA9IG5ldyBMLm1hcCgnc3ctbWFwJywge1xuICAgICAgICAgICAgXCJ6b29tXCI6IDE2LFxuICAgICAgICAgICAgXCJjZW50ZXJcIjogWzUxLjUwNSwgLTAuMDldLFxuICAgICAgICB9KTtcblxuICAgICAgICBMLnRpbGVMYXllcignaHR0cHM6Ly97c30udGLSDkZS5vcGVuc3RyZWV0bWFwLm9yZy97en0ve3h9L3t5fS5wbmcnLCB7XG4gICAgICAgICAgICBcImF0dHJpYnV0aW9uXCI6ICcmY29weTsgPGEgaHJlZj1cImh0dHBzOi8vd3d3Lm9wZW5zdHJlZXRtYXAub3JnL2NvcHlyaWdodFwiPk9wZW5TdHJlZXRNYXA8L2E+IGNvbnRyaWJ1dG9ycydcbiAgICAgICAgfSlcbiAgICAgICAgLmFkZFRvKHRoaXMubWFwKTtcblxuICAgICAgICB0aGlzLm9wdGlvbnMub25tYXByZWFkeSAmJiB0aGlzLm9wdGlvbnMub25tYXByZWFkeSgpO1xuXG4gICAgICAgIHRoaXMubWFwLm9uKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgICAgIGpRdWVyeShcIi5zdy1tYXAtc2VsZWN0ZWQtcG9pbnRcIikuaHRtbChcIlwiKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5tYXAub24oJ21vdmVlbmQnLCAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgY2VudGVyID0gdGhpcy5nZXRDZW50ZXIoKTtcbiAgICAgICAgICAgIGlmKCF0aGlzLmlzSW5Cb3VuZHMoY2VudGVyLmxhdCwgY2VudGVyLmxuZykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vdmVFbmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMgbW92ZUVuZCgpIHtcbiAgICAgICAgaWYgKCB0aGlzLmlzTWFwTW92aW5nKCkgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmlzVXNlck1vdmluZyA9IHRydWU7XG4gICAgICAgIGxldCBtYXBDZW50ZXIgPSB0aGlzLm1hcC5nZXRDZW50ZXIoKTtcblxuICAgICAgICBmb3IobGV0IGk9MDsgdGhpcy5tb3ZlTGlzdGVuZXJzICYmIGkgPCB0aGlzLm1vdmVMaXN0ZW5lcnMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMubW92ZUxpc3RlbmVyc1tpXShtYXBDZW50ZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5sb2coXCJNT1ZFIExJU1RFTkVSUyBFTkRFRFwiKTtcbiAgICAgICAgdGhpcy5pc1VzZXJNb3ZpbmcgPSBmYWxzZTtcbiAgICB9O1xuXG4gICAgYWRkTWFwTW92ZUxpc3RlbmVyKGZjYWxsYmFjaykge1xuICAgICAgICB0aGlzLm1vdmVMaXN0ZW5lcnMucHVzaChmY2FsbGJhY2spO1xuICAgIH1cblxuICAgIGdldENlbnRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwLmdldENlbnRlcigpO1xuICAgIH07XG5cbiAgICBpc0luQm91bmRzIChsYXQsIGxuZykge1xuICAgICAgICBpZiAoIXRoaXMuYm91bmRzKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgaW5MYXQgPSBsYXQgPiB0aGlzLmJvdW5kcy5ib3R0b21MZWZ0LmxhdCAmJiBsYXQgPCB0aGlzLmJvdW5kcy50b3BSaWdodC5sYXQ7XG4gICAgICAgIGxldCBlYXN0Qm91bmQgPSBsbmcgPCB0aGlzLmJvdW5kcy50b3BSaWdodC5sbmc7XG4gICAgICAgIGxldCB3ZXN0Qm91bmQgPSBsbmcgPiB0aGlzLmJvdW5kcy5ib3R0b21MZWZ0LmxuZztcbiAgICAgICAgbGV0IGluTG5nO1xuXG4gICAgICAgIGlmICh0aGlzLmJvdW5kcy50b3BSaWdodC5sbmcgPCB0aGlzLmJvdW5kcy5ib3R0b21MZWZ0LmxuZykge1xuICAgICAgICAgICAgaW5MbmcgPSBlYXN0Qm91bmQgfHwgd2VzdEJvdW5kO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaW5MbmcgPSBlYXN0Qm91bmQgJiYgd2VzdEJvdW5kO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGluTG5nICYmIGluTGF0O1xuICAgIH07XG4gICAgY2xlYXJNYXJrZXJzKCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIkNsZWFyIG1hcmtlcnNcIik7XG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMubWFwKTtcblxuICAgICAgICB0aGlzLmJvdW5kcyA9IG51bGw7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQb2ludElkeCA9IG51bGw7XG5cbiAgICAgICAgaWYgKHRoaXMubWFya2Vycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubWFya2Vycy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgIHRoaXMubWFwLnJlbW92ZUxheWVyKHRoaXMubWFya2Vyc1tpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tYXJrZXJzID0gW107XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzTW92aW5nKSB7XG4gICAgICAgICAgICB0aGlzLm1hcC5zZXRNaW5ab29tKDApO1xuICAgICAgICB9XG5cbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIEFkZCB0aGUgbWFya2VycyB0byBtYXBcbiAgICAgKiBAcGFyYW0gYXJyYXkgcGlja3VwUG9pbnRzIC0gYW4gYXJyYXkgb2YgcGlja3VwUG9pbnRzXG4gICAgICogQHBhcmFtIGZ1bmN0aW9uIGNhbGxiYWNrXG4gICAgICovXG4gICAgYWRkTWFya2VycyhwaWNrdXBQb2ludHMsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiQUREIE1BUktFUlMgMjMyMzIzXCIpO1xuICAgICAgICB0aGlzLmlzTW92aW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5waWNrdXBQb2ludHMgPSBwaWNrdXBQb2ludHM7XG5cbiAgICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCBwaWNrdXBQb2ludHMubGVuZ3RoOyArK3gpIHtcbiAgICAgICAgICAgIHRoaXMubWFya2Vyc1t4XSA9IHRoaXMuZ2V0TWFya2VyKHBpY2t1cFBvaW50c1t4XSk7XG4gICAgICAgICAgICAvKiAgICB3ZSBuZWVkIHRvIGRvIHRoaXMgYmVjYXVzZSB0aGUgdmFsdWVzIGZvciBsYXQsbG5nIHdlIGhhdmUgYXJlIHJvdW5kZWQsIHNvIHRoZXkgd2lsbCBub3QgbWF0Y2ggdGhlIG9uZXMgcmV0dXJuZWQgYnkgZ29vZ2xlICovXG4gICAgICAgICAgICB0aGlzLnBpY2t1cFBvaW50c1t4XS5tYXJrZXIgPSB0aGlzLm1hcmtlcnNbeF07XG5cbiAgICAgICAgICAgIHRoaXMubWFya2Vyc1t4XS5vbignY2xpY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoY2FsbGJhY2spID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soeCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZpdEJvdW5kcygpO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKFwiR290b3YgZml0IGJvdW5kc1wiKTtcbiAgICB9XG5cbiAgICByZXNldE1hcmtlcihtYXJrZXIpIHtcblxuICAgICAgICBtYXJrZXIuc2V0SWNvbih0aGlzLmljb25fZGVmYXVsdCk7XG5cbiAgICB9XG5cbiAgICBzZWxlY3RNYXJrZXIobWFya2VyKSB7XG5cbiAgICAgICAgbWFya2VyLnNldEljb24odGhpcy5pY29uX3NlbGVjdGVkKTtcblxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkanVzdCB0aGUgem9vbSBpbiB0aGUgbWFwIHRvIGRpc3BsYXkgYWxsIHRoZSBtYXJrZXJzXG4gICAgICogVGhlcmUncyBhIGZpdCBib3VuZHMgdGhhdCByZWNlaXZlcyAyIGNvcm5lcnMsIGJ1dCBjYWxjdWxhdGluZyB0aGVtIGlzIHVwIHRvIHVzLlxuICAgICAqIGNvcm5lcnM6IHRvcCBsZWZ0LCBib3R0b20gcmlnaHRcbiAgICAgKiB0aGVuIHdlIGNlbnRlciB0aGUgbWFwIGF0IHRoZSBjZW50ZXIgb2YgdGhlIHNxdWFyZVxuICAgICAqL1xuICAgIGZpdEJvdW5kcyA9IGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBqUXVlcnkoJ2h0bWwsYm9keScpXG4gICAgICAgICAgICAuc2Nyb2xsVG9wKDApO1xuICAgICAgICB0aGlzLm1hcC5pbnZhbGlkYXRlU2l6ZSgpO1xuXG4gICAgICAgIC8qdGhpcyBmdW5jdGlvbiBjaGFuZ2VzIHRoZSBtYXAgY2VudGVyKi9cbiAgICAgICAgdGhpcy5pc01vdmluZyA9IHRydWU7XG4gICAgICAgIGxldCBib3R0b21MZWZ0ID0gW3BhcnNlRmxvYXQodGhpcy5waWNrdXBQb2ludHNbMF0uTGF0KSwgcGFyc2VGbG9hdCh0aGlzLnBpY2t1cFBvaW50c1swXS5Mb25nKV07XG4gICAgICAgIGxldCB0b3BSaWdodCA9IFtwYXJzZUZsb2F0KHRoaXMucGlja3VwUG9pbnRzWzBdLkxhdCksIHBhcnNlRmxvYXQodGhpcy5waWNrdXBQb2ludHNbMF0uTG9uZyldO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5waWNrdXBQb2ludHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGxldCBsYXQgPSBwYXJzZUZsb2F0KHRoaXMucGlja3VwUG9pbnRzW2ldLkxhdCk7XG4gICAgICAgICAgICBsZXQgbG5nID0gcGFyc2VGbG9hdCh0aGlzLnBpY2t1cFBvaW50c1tpXS5Mb25nKTtcblxuICAgICAgICAgICAgaWYgKGxhdCA8IGJvdHRvbUxlZnRbMF0pIHtcbiAgICAgICAgICAgICAgICBib3R0b21MZWZ0WzBdID0gbGF0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobGF0ID4gdG9wUmlnaHRbMF0pIHtcbiAgICAgICAgICAgICAgICB0b3BSaWdodFswXSA9IGxhdDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGxuZyA+IHRvcFJpZ2h0WzFdKSB7XG4gICAgICAgICAgICAgICAgdG9wUmlnaHRbMV0gPSBsbmc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChsbmcgPCBib3R0b21MZWZ0WzFdKSB7XG4gICAgICAgICAgICAgICAgYm90dG9tTGVmdFsxXSA9IGxuZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG5cbiAgICAgICAgbGV0IGNlbnRlclggPSBib3R0b21MZWZ0WzBdICsgKHRvcFJpZ2h0WzBdIC0gYm90dG9tTGVmdFswXSkgLyAyO1xuICAgICAgICBsZXQgY2VudGVyWSA9IGJvdHRvbUxlZnRbMV0gKyAodG9wUmlnaHRbMV0GLSDkBib3R0b21MZWZ0WzFdKSAvIDI7XG4gICAgICAgIHRoaXMuY2VudGVyID0gW2NlbnRlclgsIGNlbnRlclldO1xuXG4gICAgICAgIHRoaXMuY2VudGVyTWFwKGNlbnRlclgsY2VudGVyWSk7XG5cbiAgICAgICAgdGhpcy5tYXAuZml0Qm91bmRzKFtcbiAgICAgICAgICAgIGJvdHRvbUxlZnQsXG4gICAgICAgICAgICB0b3BSaWdodFxuICAgICAgICBdKTtcblxuICAgICAgICB0aGlzLmJvdW5kcyA9IHtcbiAgICAgICAgICAgIFwiYm90dG9tTGVmdFwiOiB7IGxhdDogYm90dG9tTGVmdFswXSwgbG5nOiBib3R0b21MZWZ0WzFdIH0sXG4gICAgICAgICAgICBcInRvcFJpZ2h0XCI6IHsgbGF0OiB0b3BSaWdodFswXSwgbG5nOiB0b3BSaWdodFsxXSB9XG4gICAgICAgIH07XG5cbiAgICAgICAgLyogR3JhbnQgY2hhbmdlcyBhcmUgYXBwbGllZCBiZWZvcmUgd2Ugc3RhdGUgd2UncmUgbm8gbG9uZ2VyIG1vdmluZyB0aGUgbWFwIGFyb3VuZCB2aWEganMgKi9cbiAgICAgICAgc2V0VGltZW91dCggKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc01vdmluZyA9IGZhbHNlO1xuXG5cbiAgICAgICAgICAgIGxldCB6b29tID0gMTA7XG4gICAgICAgICAgICBpZih6b29tICA+IDE2IHx8IHpvb20gPCAxMCkge1xuICAgICAgICAgICAgICAgIHpvb20gPSAgMTA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm1hcC5zZXRNaW5ab29tKHpvb20pO1xuXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIm1hcCB6b29tIGlzIFwiICwgem9vbSk7XG5cbiAgICAgICAgfSwxMDAwKTtcblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcblxuXG4gICAgZ2V0SWNvbihwaWNrdXBQb2ludCkge1xuICAgICAgICByZXR1cm4gcGlja3VwUG9pbnQuVHlwZSA+IDAgPyB0aGlzLmdldENhcnJpZXJJY29uT2ZUeXBlKHRoaXMuY2Fycmllcl9pZCwgcGlja3VwUG9pbnQuVHlwZSkgOiB0aGlzLmN1cnJlbnRfaWNvbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYSBtYXJrZXIgZm9yIHRoZSBvcGVuTGF5ZXJzXG4gICAgICogSWNvbkFuY2hvcjogVGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBcInRpcFwiIG9mIHRoZSBpY29uIChyZWxhdGl2ZSB0byBpdHMgdG9wIGxlZnQgY29ybmVyKS5cbiAgICAgKiBUaGUgaWNvbiB3aWxsIGJlIGFsaWduZWQgc28gdGhhdCB0aGlzIHBvaW50IGlzIGF0IHRoZSBtYXJrZXIncyBnZW9ncmFwaGljYWwgbG9jYXRpb24uXG4gICAgICogQ2VudGVyZWQgYnkgZGVmYXVsdCBpZiBzaXplIGlzIHNwZWNpZmllZCwgYWxzbyBjYW4gYmUgc2V0IGluIENTUyB3aXRoIG5lZ2F0aXZlIG1hcmdpbnMuXG4gICAgICovXG4gICAgZ2V0TWFya2VyKHBpY2t1cFBvaW50KSB7XG5cbiAgICAgICAgbGV0IG1hcmtlciA9IEwubWFya2VyKFtwaWNrdXBQb2ludC5MYXQsIHBpY2t1cFBvaW50LkxvbmddLCB7XG4gICAgICAgICAgICBcImljb25cIjogdGhpcy5nZXRJY29uKHBpY2t1cFBvaW50KSxcbiAgICAgICAgICAgIFwidGl0bGVcIjogcGlja3VwUG9pbnQuSW5mb3JtYXRpb24uTmFtZSArIFwiXFxuXCIgKyBwaWNrdXBQb2ludC5JbmZvcm1hdGlvbi5BZGRyZXNzXG4gICAgICAgIH0pO1xuICAgICAgICBtYXJrZXIuYWRkVG8odGhpcy5tYXApO1xuICAgICAgICByZXR1cm4gbWFya2VyO1xuICAgIH1cblxuXG4gICAgZ2V0Q2Fycmllckljb25PZlR5cGUoY2Fycmllcl9pZCx0eXBlLHNlbGVjdGVkKXtcbiAgICAgICAgdmFyIGFsbG93ZWRUeXBlcyA9IFsxLDIsNCwxNiw5OTBdO1xuICAgICAgICBsZXQgY2Fycmllcl9pY29uX3VybDtcblxuICAgICAgICBsZXQgZmlsZV9leHRlbnNpb24gPSAnLicgKyAoIHR5cGVvZih0aGlzLmNhcnJpZXJfaWNvbl9jb25maWdbY2Fycmllcl9pZF0pICE9ICd1bmRlZmluZWQnID8gdGhpcy5jYXJyaWVyX2ljb25fY29uZmlnW2NhcnJpZXJfaWRdLmV4dGVuc2lvbiA6IFwicG5nXCIgKTtcbiAgICAgICAgbGV0IHNlbGVjdGVkZXh0ZW5zaW9uID0gdHlwZW9mKHRoaXMuY2Fycmllcl9pY29uX2NvbmZpZ1tjYXJyaWVyX2lkXSkgIT0gJ3VuZGVmaW5lZCcgICYmIHRoaXMuY2Fycmllcl9pY29uX2NvbmZpZ1tjYXJyaWVyX2lkXS5zZWxlY3RlZFN0YXRlICAmJiBzZWxlY3RlZD8gJ19zJyA6ICcnO1xuICAgICAgICBpZiAoc2VsZWN0ZWQgJiYgIXNlbGVjdGVkZXh0ZW5zaW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pY29uX3NlbGVjdGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGUgICYmIGFsbG93ZWRUeXBlcy5pbmNsdWRlcyh0eXBlKSkge1xuICAgICAgICAgICAgY2Fycmllcl9pY29uX3VybCA9IHRoaXMuaWNvbl9mb2xkZXIgKyAnJyArIGNhcnJpZXJfaWQgKyAnXycgKyB0eXBlICsgc2VsZWN0ZWRleHRlbnNpb24gKyBmaWxlX2V4dGVuc2lvbjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNhcnJpZXJfaWNvbl91cmwgPSB0aGlzLmljb25fZm9sZGVyICsgY2Fycmllcl9pZCArICBzZWxlY3RlZGV4dGVuc2lvbiArIGZpbGVfZXh0ZW5zaW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlSWNvbihjYXJyaWVyX2ljb25fdXJsKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIHdlIGhhdmUgYW4gaWNvbiBmb3IgdGhpcyBjYXJyaWVyLlxuICAgICAqIElmIHllcyB0aGVuIGNoYW5nZSB0aGUgY2FycmllciBpY29uXG4gICAgICogSWYgbm90IHRoZW4gdXNlIHRoZSBkZWZhdWx0IGljb25cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpbnQgY2Fycmllcl9pZCAtIHRoZSBjYXJyaWVyIGlkXG4gICAgICovXG4gICAgc2V0Q2Fycmllckljb24oY2Fycmllcl9pZCkge1xuXG4gICAgICAgIGNvbnNvbGUubG9nKFwiU2V0Q2Fycmllckljb25cIilcblxuICAgICAgICBpZiAodHlwZW9mIChMKSA9PT0gJ3VuZGVmaW5lZCcpIHtcblxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnNldENhcnJpZXJJY29uKGNhcnJpZXJfaWQpO1xuXG4gICAgICAgICAgICB9LCAyMDApO1xuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jYXJyaWVyX2lkID0gY2Fycmllcl9pZDtcbiAgICAgICAgbGV0IGNhcnJpZXJfaWNvbl91cmwgPSB0aGlzLmljb25fZm9sZGVyICsgJycgKyBjYXJyaWVyX2lkICsgJy5wbmcnO1xuICAgICAgICBpZih0eXBlb2YodGhpcy5jYWNoZV9pY29uX3ZhbGlkW2NhcnJpZXJfaWNvbl91cmxdKSA9PT0gJ3VuZGVmaW5lZCcpIHtcblxuICAgICAgICAgICAgdGhpcy5jYWNoZV9pY29uX3ZhbGlkW2NhcnJpZXJfaWNvbl91cmxdID0gVXRpbHMuY2Fycmllckljb25FeGlzdHMoY2Fycmllcl9pZCwgJycsIHRoaXMuaWNvbl9mb2xkZXIpO1xuXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50X2ljb24gPSB0aGlzLmNhY2hlX2ljb25fdmFsaWRbY2Fycmllcl9pY29uX3VybF0gPyB0aGlzLmNyZWF0ZUljb24oY2Fycmllcl9pY29uX3VybCkgOiB0aGlzLmljb25fZGVmYXVsdDtcblxuICAgIH1cblxuXG5cbn0iLCJpbXBvcnQgU2hpcHRpbWl6ZVdpZGdldCBmcm9tIFwiLi9zaGlwdGltaXplLXdpZGdldFwiO1xuY2xhc3MgU2hpcHRpbWl6ZUdtYXBzIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiRW50ZXJlZFwiKTtcbiAgICAgICAgdGhpcy5pc1NjcmlwdExvYWRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLm1hcmtlcnMgPSBbXTtcbiAgICAgICAgdGhpcy5tYXAgPSBudWxsO1xuICAgICAgICB0aGlzLnBpY2t1cFBvaW50cyA9IFtdO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICB0aGlzLmhvc3QgPSBvcHRpb25zLmhvc3Q7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiSWNvbiBmb2xkZXJcIilcbiAgICAgICAgY29uc29sZS5sb2coc2hpcHRpbWl6ZV9pY29uX2ZvbGRlcik7XG4gICAgICAgIHRoaXMuaWNvbl9mb2xkZXIgPSB0eXBlb2YgKHNoaXB0aW1pemVfaWNvbl9mb2xkZXIpICE9PSAndW5kZWZpbmVkJyA/IHNoaXB0aW1pemVfaWNvbl9mb2xkZXIgOiAnJztcbiAgICAgICAgdGhpcy5pY29uX3NlbGVjdGVkID0gdGhpcy5pY29uX2ZvbGRlciArICdzZWxlY3RlZC5wbmcnO1xuICAgICAgICB0aGlzLmljb25fZGVmYXVsdCA9IHRoaXMuaWNvbl9mb2xkZXIgKyAnZGVmYXVsdC5wbmcnO1xuICAgICAgICB0aGlzLmN1cnJlbnRfaWNvbiA9IHRoaXMuaWNvbl9kZWZhdWx0O1xuICAgICAgICB0aGlzLm1vdmVMaXN0ZW5lcnMgPSBbXTtcbiAgICAgICAgdGhpcy5jYXJyaWVyX2lkID0gbnVsbDtcbiAgICAgICAgdGhpcy5jYXJyaWVyX2ljb25fY29uZmlnID0ge1xuICAgICAgICAgICAgMzA6IHtcbiAgICAgICAgICAgICAgICBleHRlbnNpb246ICdzdmcnLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkU3RhdGU6IHRydWUsXG4gICAgICAgICAgICAgICAgaWNvblNpemU6IDk4XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5zaGlwdGltaXplV2lkZ2V0ID0gbmV3IFNoaXB0aW1pemVXaWRnZXQob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaW5pdE1hcChjYXJyaWVyX2lkLCBmX2NhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuY2Fycmllcl9pZCA9IGNhcnJpZXJfaWQ7XG4gICAgICAgIGxldCBtZSA9IHRoaXM7XG5cbiAgICAgICAgdGhpcy5sb2FkU2NyaXB0KFwiaHR0cHM6Ly9tYXBzLmdvb2dsZWFwaXMuY29tL21hcHMvYXBpL2pzP2tleT1cIiArIHRoaXMub3B0aW9ucy5nbWFwc2tleSArIFwiJmNhbGxiYWNrPVwiLCAgKCkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJVU0FPIFUgSUZcIik7XG4gICAgICAgICAgICBtZS5pc1NjcmlwdExvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICBmX2NhbGxiYWNrICYmIGZfY2FsbGJhY2soKTtcbiAgICAgICAgICAgIHRoaXMubG9hZE1hcCgpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zb2xlLmxvZyhcIkluaXRtYXAgTmlqZSB1c2FvIHUgaWZcIik7XG5cbiAgICB9O1xuXG4gICAgbG9hZFNjcmlwdCh1cmwsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuICAgICAgICBzY3JpcHQudHlwZSA9IFwidGV4dC9qYXZhc2NyaXB0XCI7XG5cbiAgICAgICAgaWYgKHNjcmlwdC5yZWFkeVN0YXRlKSB7IC8qSUUgKi9cbiAgICAgICAgICAgIHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNjcmlwdC5yZWFkeVN0YXRlID09ICdsb2FkZWQnIHx8IHNjcmlwdC5yZWFkeVN0YXRlID09ICdjb21wbGV0ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGNhbGJhY2sgJiYgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2NyaXB0Lm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNjcmlwdC5zcmMgPSB1cmw7XG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXS5hcHBlbmRDaGLSDkZChzY3JpcHQpO1xuICAgIH07XG5cbiAgICBhZGRNYXJrZXJzKHBpY2t1cFBvaW50cywgY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5waWNrdXBQb2ludHMgPSBwaWNrdXBQb2ludHM7XG5cbiAgICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCBwaWNrdXBQb2ludHMubGVuZ3RoOyArK3gpIHtcbiAgICAgICAgICAgIHRoaXMubWFya2Vyc1t4XSA9IHRoaXMuZ2V0TWFya2VyKHBpY2t1cFBvaW50c1t4XSk7XG4gICAgICAgICAgICBwaWNrdXBQb2ludHNbeF0ubWFya2VyID0gdGhpcy5tYXJrZXJzW3hdO1xuXG4gICAgICAgICAgICB0aGlzLm1hcmtlcnNbeF0uYWRkTGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKGNhbGxiYWNrKSAhPSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayh4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZml0Qm91bmRzKCk7XG4gICAgfTtcblxuICAgIGFkZE1hcE1vdmVMaXN0ZW5lcihmY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5tb3ZlTGlzdGVuZXJzLnB1c2goZmNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgY2VudGVyTWFwKGxhdCwgbG5nKSB7XG4gICAgICAgIHRoaXMubWFwLnNldENlbnRlcihuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nKGxhdCwgbG5nKSk7XG4gICAgfTtcblxuICAgIGNsZWFyTWFya2VycygpIHtcbiAgICAgICAgaWYgKHRoaXMubWFya2Vycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubWFya2Vycy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgIHRoaXMubWFya2Vyc1tpXS5zZXRNYXAobnVsbCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMubWFya2VycyA9IFtdO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGZpdEJvdW5kcygpIHtcbiAgICAgICAgdmFyIGJvdW5kcyA9IG5ldyBnb29nbGUubWFwcy5MYXRMbmdCb3VuZHMoKTtcbiAgICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCB0aGlzLm1hcmtlcnMubGVuZ3RoOyArK3gpIHtcbiAgICAgICAgICAgIGJvdW5kcy5leHRlbmQodGhpcy5tYXJrZXJzW3hdLmdldFBvc2l0aW9uKCkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWFwLmZpdEJvdW5kcyhib3VuZHMpO1xuICAgICAgICB0aGlzLmJvdW5kcyA9IHRoaXMubWFwLmdldEJvdW5kcygpO1xuICAgIH07XG5cbiAgICBnZXRNYXJrZXIocGlja3VwUG9pbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJHRVRNQVJLRVJcIilcbiAgICAgICAgbGV0IHVybCA9IHRoaXMuZ2V0Q2Fycmllckljb25VcmwocGlja3VwUG9pbnQuVHlwZSwgMCk7XG4gICAgICAgIGxldCBvcHRpb25zID0ge1xuICAgICAgICAgICAgcG9zaXRpb246IG5ldyBnb29nbGUubWFwcy5MYXRMbmcocGlja3VwUG9pbnQuTGF0LCBwaWNrdXBQb2ludC5Mb25nKSxcbiAgICAgICAgICAgIG1hcDogdGhpcy5tYXAsXG4gICAgICAgICAgICBpY29uOiB7XG4gICAgICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIC8vICMjREpESiBBa28gbmlzdGEgb2RyYWRpIGthbyBpIHUgb3BlbiBtYXBcbiAgICAgICAgY29uc29sZS5sb2coXCJQUkUgSUZcIik7XG4gICAgICAgIGlmICh0eXBlb2YgKHRoaXMuY2Fycmllcl9pY29uX2NvbmZpZ1t0aGlzLmNhcnJpZXJfaWRdKSAhPSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJJRiBHRVQgTUFSS0VSXCIpO1xuICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy5jYXJyaWVyX2ljb25fY29uZmlnKVxuICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy5jYXJyaWVyX2ljb25fY29uZmlnW3RoaXMuY2Fycmllcl9pZF0uaWNvblNpemUpXG4gICAgICAgICAgICBvcHRpb25zLmljb24uc2l6ZSA9IG5ldyBnb29nbGUubWFwcy5TaXplKHRoaXMuY2Fycmllcl9pY29uX2NvbmZpZ1t0aGlzLmNhcnJpZXJfaWRdLmljb25TaXplLCB0aGlzLmNhcnJpZXJfaWNvbl9jb25maWdbdGhpcy5jYXJyaWVyX2lkXS5pY29uU2l6ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkVMU0UgR0VUIE1BUktFUlwiKTtcbiAgICAgICAgICAgIG9wdGlvbnMuaWNvbi5zY2FsZWRTaXplID0gbmV3IGdvb2dsZS5tYXBzLlNpemUoNTAsIDUwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUubG9nKFwiUE9TTEUgSUZcIik7XG4gICAgICAgIGxldCBtYXJrZXIgPSBuZXcgZ29vZ2xlLm1hcHMuTWFya2VyKG9wdGlvbnMpO1xuXG4gICAgICAgIHJldHVybiBtYXJrZXI7XG4gICAgfTtcblxuICAgIGlzTWFwTW92aW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc01vdmluZyB8fCB0aGlzLmlzVXNlck1vdmluZztcbiAgICB9O1xuXG4gICAgYXN5bmMgbW92ZUVuZCgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNNYXBNb3ZpbmcoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pc1VzZXJNb3ZpbmcgPSB0cnVlO1xuICAgICAgICBsZXQgbWFwQ2VudGVyID0gdGhpcy5tYXAuZ2V0Q2VudGVyKCk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IHRoaXMubW92ZUxpc3RlbmVycyAmJiBpIDwgdGhpcy5tb3ZlTGlzdGVuZXJzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLm1vdmVMaXN0ZW5lcnNbaV0oeyBcImxhdFwiOiBtYXBDZW50ZXIubGF0KCksIFwibG5nXCI6IG1hcENlbnRlci5sbmcoKSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUubG9nKFwiTU9WRSBMSVNURU5FUlMgRU5ERURcIik7XG4gICAgICAgIHRoaXMuaXNVc2VyTW92aW5nID0gZmFsc2U7XG4gICAgfTtcblxuICAgIGxvYWRNYXAoKSB7XG5cbiAgICAgICAgY29uc29sZS5sb2coXCJMT0FETUFQXCIpO1xuICAgICAgICB0aGlzLm1hcCA9IG5ldyBnb29nbGUubWFwcy5NYXAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdy1tYXBcIiksIHtcbiAgICAgICAgICAgIGNlbnRlcjogeyBsYXQ6IC0zNC4zOTcsIGxuZzogMTUwLjY0NCB9LFxuICAgICAgICAgICAgem9vbTogMTYsXG4gICAgICAgICAgICBtYXBUeXBlQ29udHJvbDogZmFsc2VcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5tYXAuYWRkTGlzdGVuZXIoJ2NlbnRlcl9jaGFuZ2VkJywgKCkgPT4ge1xuICAgICAgICAgICAgbGV0IGNlbnRlciA9IHRoaXMubWFwLmdldENlbnRlcigpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5ib3VuZHMgJiYgIXRoaXMuYm91bmRzLmNvbnRhaW5zKGNlbnRlcikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vdmVFbmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGdlb2NvZGUocXVlcnlwYXJ0cywgZl9jYWxsYmFjaykge1xuICAgICAgICBpZiAodHlwZW9mIChnb29nbGUpID09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgdGhpcy5nZW9jb2RlKHNoaXBwaW5nRGF0YSwgZl9jYWxsYmFjayk7IH0sIDIwMCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNsZWFyTWFya2VycygpO1xuICAgICAgICBsZXQgZ2VvY29kZXIgPSBuZXcgZ29vZ2xlLm1hcHMuR2VvY29kZXIoKTtcbiAgICAgICAgbGV0IG1lID0gdGhpcztcblxuICAgICAgICBjb25zb2xlLmxvZygnZ2VvY29kaW5nICcsIHF1ZXJ5cGFydHMpO1xuXG4gICAgICAgIGxldCBxdWVyeSA9IFwiY29tcG9uZW50cz1jb3VudHJ5OlwiICsgcXVlcnlwYXJ0cy5jb3VudHJ5O1xuICAgICAgICBpZiAocXVlcnlwYXJ0cy5hZGRyZXNzICYmIHF1ZXJ5cGFydHMuYWRkcmVzcy5tYXRjaCgvXihbMC05XFwtXSspJC8pKSB7XG4gICAgICAgICAgICBpZiAocXVlcnlwYXJ0cy5jb3VudHJ5LnRvVXBwZXJDYXNlKCkgPT0gJ1BUJyAmJiB0eXBlb2YgKG1pc3NpbmdaaXBQVCkgIT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBsZXQgemlwNGRpZyA9IHF1ZXJ5cGFydHMuYWRkcmVzcy5zdWJzdHJpbmcoMCwgNCk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtaXNzaW5nWmlwUFQubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1pc3NpbmdaaXBQVFtpXS56aXBjb2RlID09IHppcDRkaWcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBxdWVyeVJlc3VsdHMgPSBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlfbmFtZTogbWlzc2luZ1ppcFBUW2ldLmRpc3BsYXlfbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXQ6IG1pc3NpbmdaaXBQVFtpXS5sYXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uOiBtaXNzaW5nWmlwUFRbaV0ubG5nXG4gICAgICAgICAgICAgICAgICAgICAgICB9XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmX2NhbGxiYWNrKHF1ZXJ5UmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocXVlcnlwYXJ0cy5jb21wb25lbnRzKSB7XG4gICAgICAgICAgICBxdWVyeSArPSAnfCcgKyBxdWVyeXBhcnRzLmNvbXBvbmVudHM7XG4gICAgICAgIH0gZWxzZSBpZiAocXVlcnlwYXJ0cy5hZGRyZXNzLm1hdGNoKC9eWzAtOV0vKSkge1xuICAgICAgICAgICAgcXVlcnkgKz0gJ3xwb3N0YWxfY29kZTonICsgcXVlcnlwYXJ0cy5hZGRyZXNzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcXVlcnkgKz0gJyZhZGRyZXNzPScgKyBxdWVyeXBhcnRzLmFkZHJlc3M7XG4gICAgICAgIH1cblxuICAgICAgICBqUXVlcnkuZ2V0KCdodHRwczovL21hcHMuZ29vZ2xlLmNvbS9tYXBzL2FwaS9nZW9jb2RlL2pzb24/c2Vuc29yPWZhbHNlJmtleT0nICsgdGhpcy5vcHRpb25zLmdtYXBza2V5ICsgJyYnICsgcXVlcnksIGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgbGV0IHJlc3VsdHMgPSByZXNwb25zZS5yZXN1bHRzO1xuICAgICAgICAgICAgbGV0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcblxuICAgICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICAgICAgICBsZXQgZ2VvY29kZSA9IHsgaXNvMjogJycsIGxhdDogJycsIGxuZzogJycgfTtcblxuICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSAnT0snKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0dlb2NvZGUgd2FzIG5vdCBzdWNjZXNzZnVsIGZvciB0aGUgZm9sbG93aW5nIHJlYXNvbjogJyArIHN0YXR1cywgcmVzcG9uc2UuZXJyb3JfbXNnKTtcbiAgICAgICAgICAgICAgICBmX2NhbGxiYWNrKGdlb2NvZGUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHBsYWNlcyA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXN1bHRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgZ2VvY29kZSA9IHJlc3VsdHNbaV07XG4gICAgICAgICAgICAgICAgbGV0IGRpc3BsYXlfbmFtZSA9ICcnO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBnZW9jb2RlLmFkZHJlc3NfY29tcG9uZW50cyAmJiBqIDwgZ2VvY29kZS5hZGRyZXNzX2NvbXBvbmVudHMubGVuZ3RoOyArK2opIHtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheV9uYW1lICs9IChkaXNwbGF5X25hbWUgPyAnLCAnIDogJycpICsgZ2VvY29kZS5hZGRyZXNzX2NvbXBvbmVudHNbal0ubG9uZ19uYW1lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwbGFjZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGlzbzI6IG1lLmdldENvdW50cnlDb2RlRnJvbVJlc3VsdChnZW9jb2RlKSxcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheV9uYW1lLFxuICAgICAgICAgICAgICAgICAgICBsYXQ6IGdlb2NvZGUuZ2VvbWV0cnkubG9jYXRpb24ubGF0LFxuICAgICAgICAgICAgICAgICAgICBsbmc6IGdlb2NvZGUuZ2VvbWV0cnkubG9jYXRpb24ubG5nXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZfY2FsbGJhY2socGxhY2VzKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGdldENvdW50cnlDb2RlRnJvbVJlc3VsdChnZW9jb2RlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgKGdlb2NvZGUuYWRkcmVzc19jb21wb25lbnRzKSA9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjb21wb25lbnRzID0gZ2VvY29kZS5hZGRyZXNzX2NvbXBvbmVudHM7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29tcG9uZW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgbGV0IHR5cGVzID0gY29tcG9uZW50c1tpXS50eXBlcztcblxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0eXBlcy5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlc1tqXSA9PSAnY291bnRyeScpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudHNbaV0uc2hvcnRfbmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBnZW9jb2RlQWRkcmVzc1BhcnRzKGZfY2FsbGJhY2ssIGNpdHksIGNvdW50cnksIHBvc3RhbGNvZGUsIHN0cmVldG5hbWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiAocG9zdGFsY29kZSkgIT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGlmIChjb3VudHJ5ID09ICdQVCcgfHwgY291bnRyeSA9PSAnUG9ydHVnYWwnKSB7XG4gICAgICAgICAgICAgICAgcG9zdGFsY29kZSA9IHBvc3RhbGNvZGUuc3Vic3RyKDAsIDQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGNvbXBvbmVudHMgPSBcInBvc3RhbF9jb2RlOlwiICsgcG9zdGFsY29kZSArIFwifGxvY2FsaXR5OlwiICsgY2l0eTtcblxuICAgICAgICB0aGlzLmdlb2NvZGUoeyBjb3VudHJ5LCBcImNvbXBvbmVudHNcIjogY29tcG9uZW50cyB9LCAocGxhY2VzKSA9PiB7XG4gICAgICAgICAgICBmX2NhbGxiYWNrKHBsYWNlc1swXSk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBzZXRDYXJyaWVySWQoY2Fycmllcl9pZCkge1xuICAgICAgICB0aGlzLmNhcnJpZXJfaWQgPSBjYXJyaWVyX2lkO1xuICAgIH07XG5cbiAgICBzZWxlY3RQb2ludChpZHgpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJTZWxlY3Rwb2ludFwiKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm1hcmtlcnMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGxldCBwb2ludCA9IHRoaXMucGlja3VwUG9pbnRzW2ldO1xuICAgICAgICAgICAgY29uc29sZS5sb2cocG9pbnQpO1xuICAgICAgICAgICAgbGV0IGljb24gPSB7XG4gICAgICAgICAgICAgICAgdXJsOiB0aGlzLmdldENhcnJpZXJJY29uVXJsKHBvaW50LlR5cGUsIGlkeCA9PSBpKVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiAodGhpcy5jYXJyaWVyX2ljb25fY29uZmlnW3RoaXMuY2Fycmllcl9pZF0pICE9IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICBpY29uLnNpemUgPSBuZXcgZ29vZ2xlLm1hcHMuU2l6ZSh0aGlzLmNhcnJpZXJfaWNvbl9jb25maWdbdGhpcy5jYXJyaWVyX2lkXS5pY29uU2l6ZSwgdGhpcy5jYXJyaWVyX2ljb25fY29uZmlnW3RoaXMuY2Fycmllcl9pZF0uaWNvblNpemUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpY29uLnNjYWxlZFNpemUgPSBuZXcgZ29vZ2xlLm1hcHMuU2l6ZSg1MCwgNTApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJTZXRJQ09EXCIpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coaWNvbik7XG4gICAgICAgICAgICB0aGlzLm1hcmtlcnNbaV0uc2V0SWNvbihpY29uKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBzZXRDYXJyaWVySWQoY2Fycmllcl9pZCkge1xuICAgICAgICB0aGlzLmNhcnJpZXJfaWQgPSBjYXJyaWVyX2lkO1xuICAgIH07XG5cbiAgICBnZXRDYXJyaWVySWNvblVybCh0eXBlLCBzZWxlY3RlZCkge1xuICAgICAgICBsZXQgY2Fycmllcl9pY29uX3VybDtcblxuICAgICAgICBsZXQgZmlsZV9leHRlbnNpb24gPSAnLicgKyAodHlwZW9mICh0aGlzLmNhcnJpZXJfaWNvbl9jb25maWdbdGhpcy5jYXJyaWVyX2lkXSkgIT0gJ3VuZGVmaW5lZCcgPyB0aGlzLmNhcnJpZXJfaWNvbl9jb25maWdbdGhpcy5jYXJyaWVyX2lkXS5leHRlbnNpb24gOiBcInBuZ1wiKTtcbiAgICAgICAgbGV0IHNlbGVjdGVkZXh0ZW5zaW9uID0gdHlwZW9mICh0aGlzLmNhcnJpZXJfaWNvbl9jb25maWdbdGhpcy5jYXJyaWVyX2lkXSkgIT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5jYXJyaWVyX2ljb25fY29uZmlnW3RoaXMuY2Fycmllcl9pZF0uc2VsZWN0ZWRTdGF0ZSAmJiBzZWxlY3RlZFxuICAgICAgICAgICAgPyAnX3MnIDogJyc7XG5cbiAgICAgICAgaWYgKHNlbGVjdGVkICYmICFzZWxlY3RlZGV4dGVuc2lvbikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaWNvbl9zZWxlY3RlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlICYmIHR5cGVvZiAoc2hpcHRpbWl6ZV9jYXJyaWVyX2ltZ3MpICE9ICd1bmRlZmluZWQnICYmIHNoaXB0aW1pemVfY2Fycmllcl9pbWdzLmluZGV4T2YodGhpcy5jYXJyaWVyX2lkICsgXCJfXCIgKyB0eXBlICsgZmlsZV9leHRlbnNpb24pKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcImdldENhcnJpZXJJY29uVXJsIDFcIilcbiAgICAgICAgICAgIGNhcnJpZXJfaWNvbl91cmwgPSB0aGlzLmljb25fZm9sZGVyICsgJycgKyB0aGlzLmNhcnJpZXJfaWQgKyAnXycgKyB0eXBlICsgc2VsZWN0ZWRleHRlbnNpb24gKyBmaWxlX2V4dGVuc2lvbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZ2V0Q2Fycmllckljb25VcmwgMlwiKVxuICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy5jYXJyaWVyX2lkKTtcbiAgICAgICAgICAgIC8vICMjREpESiBOZSB6bmFtIHphc3RvIGplIHN2ZywgcG9nbGVkYWogZGEgdnJhdGlzIGtha28gamUgYmlsb1xuICAgICAgICAgICAgY2Fycmllcl9pY29uX3VybCA9IHRoaXMuaWNvbl9mb2xkZXIgKyB0aGlzLmNhcnJpZXJfaWQgKyBzZWxlY3RlZGV4dGVuc2lvbiArICcucG5nJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjYXJyaWVyX2ljb25fdXJsO1xuICAgIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNoaXB0aW1pemVHbWFwcztcbiIsIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcm9wLXR5cGVzXG5cbmltcG9ydCBTaGlwdGltaXplT3Blbk1hcDIgZnJvbSBcIi4vc2hpcHRpbWl6ZS1vcGVuLW1hcFwiO1xuaW1wb3J0IFNoaXB0aW1pemVHbWFwcyBmcm9tIFwiLi9zaGlwdGltaXplLWdtYXBzXCI7XG5pbXBvcnQgV29vY29tbWVyY2UgZnJvbSAnLi9zaGlwdGltaXplLXdvby1jb21tZXJjZS5qcydcblxuY2xhc3MgU2hpcHRpbWl6ZVdpZGdldCB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICB0aGlzLnBpY2t1cFBvaW50cyA9IFtdO1xuICAgICAgICB0aGlzLnNlbGVjdGVkUG9pbnQgPSBudWxsO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgICAgIHRoaXMubWFya2VycyA9IFtdO1xuICAgICAgICB0aGlzLmhvc3QgPSBvcHRpb25zLmhvc3QgfHwgJ2h0dHBzOi8vc2hpcHRpbWl6ZS5tZSc7XG4gICAgICAgIHRoaXMuZGVidWcgPSBvcHRpb25zLmRlYnVnIHx8IDA7XG5cbiAgICAgICAgdGhpcy5tYXBQYXJlbnRDb250YWluZXIgPSBvcHRpb25zLm1hcFBhcmVudENvbnRhaW5lciB8fCAnYm9keSc7XG4gICAgICAgIHRoaXMuYnV0dG9uUGFyZW50Q29udGFpbmVyID0gb3B0aW9ucy5idXR0b25QYXJlbnRDb250YWluZXIgfHwgJyc7XG4gICAgICAgIHRoaXMuaXNTY3JpcHRMb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5idXR0b25DbGFzcyA9IHRoaXMub3B0aW9ucy5idXR0b25fY2xhc3MgfHwgJyc7XG4gICAgICAgIHRoaXMubGFiZWxzID0gdGhpcy5vcHRpb25zLmxhYmVscyB8fCB7fTtcblxuICAgICAgICB0aGlzLnBsYXRmb3JtID0gbmV3IFdvb2NvbW1lcmNlKG9wdGlvbnMuYWpheF91cmwpO1xuICAgICAgICB0aGlzLnRpbWVvdXRLZXlEb3duID0gbnVsbDtcbiAgICAgICAgdGhpcy5zZWFyY2hSdW5uaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYWRkcmVzcyA9IHRoaXMub3B0aW9ucy5hZGRyZXNzIHx8IG51bGw7XG4gICAgICAgIHRoaXMuY2Fycmllcl9pZCA9IHRoaXMub3B0aW9ucy5jYXJyaWVySWQgfHwgMDtcbiAgICAgICAgdGhpcy5sYW5nID0gJ2VuJztcbiAgICAgICAgdGhpcy53ZWVrZGF5bmFtZXMgPSBbc2hpcHRpbWl6ZV9tb25kYXksc2hpcHRpbWl6ZV90dWVzZGF5LCBzaGlwdGltaXplX3dlZG5lc2RheSwgc2hpcHRpbWl6ZV90aHVyc2RheSwgc2hpcHRpbWl6ZV9mcmlkYXksIHNoaXB0aW1pemVfc2F0dXJkYXksIHNoaXB0aW1pemVfc3VuZGF5XTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZERpc3BsYXlPcHRpb24gPSAwO1xuICAgICAgICB0aGlzLmNhY2hlUmVzdWx0cyA9IHt9O1xuXG4gICAgICAgIGNvbnNvbGUubG9nKFwiSmVzdGUgY2hlY2tvdXQgaWxpIG5pamVcIik7XG5cblxuXG5cblxuXG4gICAgICAgIGpRdWVyeShkb2N1bWVudCkucmVhZHkoKCkgPT4ge1xuICAgICAgICAgICAgbGV0IGhhc1J1bkNoZWNrVmlzaWJpbGl0eSA9IGZhbHNlOyAgLy8gRW5zdXJlIHRoZSB2aXNpYmlsaXR5IGNoZWNrIG9ubHkgcnVucyBvbmNlXG4gICAgICAgICAgICBsZXQgaGFzUnVuUGxhY2VPcmRlckNoZWNrID0gZmFsc2U7XG5cbiAgICAgICAgICAgIC8vIENoZWNrIHZpc2liaWxpdHkgZm9yIHNoaXBwaW5nIG9wdGlvbnMgKHJ1biBvbmx5IG9uY2UpXG4gICAgICAgICAgICBjb25zdCBjaGVja1Zpc2liaWxpdHkgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5wdXRFbGVtZW50ID0galF1ZXJ5KFwiLndjLWJsb2NrLWNvbXBvbmVudHMtc2hpcHBpbmctcmF0ZXMtY29udHJvbF9fcGFja2FnZVwiKTtcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXRFbGVtZW50LmlzKCc6dmlzaWJsZScpICYmICFoYXNSdW5DaGVja1Zpc2liaWxpdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgaGFzUnVuQ2hlY2tWaXNpYmlsaXR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChjaGVja1Zpc2liaWxpdHkpOyAgLy8gQ2xlYXIgaW50ZXJ2YWwgYWZ0ZXIgZmlyc3Qgc3VjY2Vzc2Z1bCBjaGVja1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiT3ZkZWVlZSBzYW1cIik7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zZWxlY3RlZFRleHQgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2VsZWN0ZWRUZXh0ID0galF1ZXJ5KFwiZmllbGRzZXQud2MtYmxvY2stY2hlY2tvdXRfX3NoaXBwaW5nLW9wdGlvblwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmZpbmQoXCIud2MtYmxvY2stY29tcG9uZW50cy1yYWRpby1jb250cm9sX19pbnB1dDpjaGVja2VkXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAuY2xvc2VzdChcImxhYmVsXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmluZChcIi53Yy1ibG9jay1jb21wb25lbnRzLXJhZGlvLWNvbnRyb2xfX2xhYmVsXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAudGV4dCgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuc2VsZWN0ZWRUZXh0ID09PSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlByYXphblwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeShcImZpZWxkc2V0LndjLWJsb2NrLWNoZWNrb3V0X19zaGlwcGluZy1vcHRpb25cIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmluZChcIi53Yy1ibG9jay1jb21wb25lbnRzLXJhZGlvLWNvbnRyb2xfX29wdGlvbi1sYXlvdXRcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zZWxlY3RlZFRleHQgPSBqUXVlcnkodGhpcykuZmluZChcIi53Yy1ibG9jay1jb21wb25lbnRzLXJhZGlvLWNvbnRyb2xfX2xhYmVsXCIpLnRleHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5pc0Jsb2NrQ2hlY2tvdXQgPT09IFwiZnVuY3Rpb25cIiAmJiB0aGlzLmlzQmxvY2tDaGVja291dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFNlbGVjdGVkQ2FycmllcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRGb3JtQ2hhbmdlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldE9uQ2xpY2soKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCA1MDApOyAgLy8gSW50ZXJ2YWwgZGVsYXkgaW4gbWlsbGlzZWNvbmRzXG5cbiAgICAgICAgICAgIC8vIENoZWNrIHZpc2liaWxpdHkgZm9yIFwiUGxhY2UgT3JkZXJcIiBidXR0b24gKHJ1biBvbmx5IG9uY2UpXG4gICAgICAgICAgICBjb25zdCBwbGFjZU9yZGVyQ2hlY2sgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGxhY2VPcmRlckJ1dHRvbiA9IGpRdWVyeShcIiNwbGFjZV9vcmRlclwiKTtcbiAgICAgICAgICAgICAgICBpZiAocGxhY2VPcmRlckJ1dHRvbi5pcygnOnZpc2libGUnKSAmJiAhaGFzUnVuUGxhY2VPcmRlckNoZWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIGhhc1J1blBsYWNlT3JkZXJDaGVjayA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwocGxhY2VPcmRlckNoZWNrKTsgIC8vIENsZWFyIGludGVydmFsIGFmdGVyIGZpcnN0IHN1Y2Nlc3NmdWwgY2hlY2tcblxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIk92ZGVlZWUgc2FtIHZpc2libGUgY2hlY2tvdXRcIik7XG5cbiAgICAgICAgICAgICAgICAgICAgcGxhY2VPcmRlckJ1dHRvbi5vbignY2xpY2snLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNoaXBwaW5nX3BpY2t1cF9pZCA9IGpRdWVyeShcIiNzaGlwcGluZ19waWNrdXBfaWRcIikudmFsKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkNsaWNrZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh3aW5kb3cuY2Fycmllcl9pZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh3aW5kb3cubWFuZGF0b3J5RGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAod2luZG93Lm1hbmRhdG9yeURhdGEgIT09IFwiXCIgJiYgd2luZG93Lm1hbmRhdG9yeURhdGEucGlja3VwTWFuZGF0b3J5ICYmIHNoaXBwaW5nX3BpY2t1cF9pZCA9PT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiVVNBTyBJRlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7ICAvLyBQcmV2ZW50IGRlZmF1bHQgZm9ybSBzdWJtaXNzaW9uXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNb2RhbCBjcmVhdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1vZGFsID0galF1ZXJ5KCc8ZGl2PicsIHsgaWQ6ICdteU1vZGFsJywgY3NzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGlzcGxheSc6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwb3NpdGlvbic6ICdmaXhlZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnei1pbmRleCc6ICcxJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsZWZ0JzogJzAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RvcCc6ICcwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aWR0aCc6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoZWlnaHQnOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3ZlcmZsb3cnOiAnYXV0bycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZC1jb2xvcic6ICdyZ2JhKDAsMCwwLDAuNCknXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1vZGFsQ29udGVudCA9IGpRdWVyeSgnPGRpdj4nLCB7IGNzczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQtY29sb3InOiAnI2ZlZmVmZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luJzogJzE1JSBhdXRvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nJzogJzIwcHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JvcmRlcic6ICcxcHggc29saWQgIzg4OCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2lkdGgnOiAnODAlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjbG9zZUJ1dHRvbiA9IGpRdWVyeSgnPHNwYW4+JywgeyB0ZXh0OiAnw5cnLCBjc3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2xvcic6ICcjYWFhJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmbG9hdCc6ICdyaWdodCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9udC1zaXplJzogJzI4cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZvbnQtd2VpZ2h0JzogJ2JvbGQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2N1cnNvcic6ICdwb2ludGVyJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0galF1ZXJ5KCc8cD4nLCB7IHRleHQ6IHNoaXB0aW1pemVfbWFuZGF0b3J5X3BvaW50IH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGJ1dHRvbiA9IGpRdWVyeShcIjxidXR0b24gY2xhc3M9J2J1dHRvbiBhbHQgQnBvc3QtcGljay1sb2NhdGlvbicgaWQ9J0Jwb3N0X3BpY2t1cF9idXR0b24nIHR5cGU9J2J1dHRvbicgb25DbGljaz0nQnBvc3QuZ2V0UGlja3VwTG9jYXRpb25zKGV2ZW50KSc+XCIgKyBCcG9zdF9jaG9vc2VfcGlja3VwX2xvY2F0aW9uICsgXCI8L2J1dHRvbj5cIik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBcHBlbmQgdGhlIGVsZW1lbnRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kYWxDb250ZW50LmFwcGVuZChjbG9zZUJ1dHRvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kYWxDb250ZW50LmFwcGVuZChtZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RhbC5hcHBlbmQobW9kYWxDb250ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RhbENvbnRlbnQuYXBwZW5kKGJ1dHRvbik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoJ2JvZHknKS5hcHBlbmQobW9kYWwpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2hvdyB0aGUgbW9kYWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RhbC5zaG93KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDbG9zZSBtb2RhbCBoYW5kbGVyc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlQnV0dG9uLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RhbC5oaWRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkod2luZG93KS5vbignY2xpY2snLCBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoalF1ZXJ5KGV2ZW50LnRhcmdldCkuaXMobW9kYWwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RhbC5oaWRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgIC8vIFByZXZlbnQgc3VibWlzc2lvblxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCA1MDApOyAgLy8gSW50ZXJ2YWwgZGVsYXkgaW4gbWlsbGlzZWNvbmRzXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZ2V0T25TdWJtaXRCdXR0b25CbG9ja0NsaWNrTm9UaGVtZSgpO1xuICAgICAgICB0aGlzLmdldFRoZW1lU2hpcHBpbmdNZXRob2Qob3B0aW9ucyk7XG5cblxuXG5cbiAgICB9XG5cblxuICAgIGdldFRoZW1lU2hpcHBpbmdNZXRob2Qob3B0aW9ucyl7XG5cbiAgICAgICAgY29uc29sZS5sb2coXCJPcHRpb25zXCIpO1xuICAgICAgICBjb25zb2xlLmxvZyhvcHRpb25zKTtcblxuICAgICAgICBpZiAoalF1ZXJ5KCcud29vY29tbWVyY2UtY2hlY2tvdXQtcGF5bWVudCcpLmxlbmd0aCA+IDApIHtcblxuICAgICAgICAgICAgalF1ZXJ5KGRvY3VtZW50KS5hamF4Q29tcGxldGUoKGV2ZW50LCB4aHIsIHNldHRpbmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHNldHRpbmdzLnVybC5pbmNsdWRlcyhcInVwZGF0ZV9vcmRlcl9yZXZpZXdcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJDb21wbGV0ZSByZXF1ZXN0XCIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnUmVxdWVzdCBtYWRlIHRvIHdjLWFqYXg9dXBkYXRlX29yZGVyX3JldmlldycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coalF1ZXJ5KCcuQnBvc3QtcGljay1sb2NhdGlvbicpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoZWNrZWRSYWRpbyA9IGpRdWVyeSgnI3NoaXBwaW5nX21ldGhvZCBpbnB1dFt0eXBlPVwicmFkaW9cIl06Y2hlY2tlZCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGFzc29jaWF0ZWQgbGFiZWwgdGV4dCBvZiB0aGUgY2hlY2tlZCByYWRpbyBidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWxlY3RlZFRleHQgPSBjaGVja2VkUmFkaW8uc2libGluZ3MoJ2xhYmVsJykudGV4dCgpLnNwbGl0KCc6JylbMF0udHJpbSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBMb2cgb3IgdXNlIHRoZSBzZWxlY3RlZCBzaGlwcGluZyBtZXRob2RcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdTZWxlY3RlZCBzaGlwcGluZyBtZXRob2Q6ICcgKyBzZWxlY3RlZFRleHQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRUZXh0ID09ICcnKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZWxlY3QgdGhlIHBhcmVudCBlbGVtZW50IGNvbnRhaW5pbmcgdGhlIGxpc3Qgb2Ygc2hpcHBpbmcgbWV0aG9kc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNoaXBwaW5nTWV0aG9kc0xpc3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc2hpcHBpbmdfbWV0aG9kJyk7XG5cbi8vIENoZWNrIGlmIHRoZSBsaXN0IGV4aXN0c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaGlwcGluZ01ldGhvZHNMaXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyYXZlcnNlIHRoZSBsaXN0IGl0ZW1zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNoaXBwaW5nTWV0aG9kSXRlbXMgPSBzaGlwcGluZ01ldGhvZHNMaXN0LnF1ZXJ5U2VsZWN0b3JBbGwoJ2xpJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIGVhY2ggbGlzdCBpdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaXBwaW5nTWV0aG9kSXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmluZCB0aGUgPGxhYmVsPiBlbGVtZW50IGluc2lkZSB0aGUgPGxpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFiZWxFbGVtZW50ID0gaXRlbS5xdWVyeVNlbGVjdG9yKCdsYWJlbCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGFiZWxFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXh0cmFjdCB0aGUgdGV4dCBjb250ZW50IGJlZm9yZSB0aGUgY29sb24gKDopIHRvIGdldCB0aGUgZHluYW1pYyB0aXRsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsVGV4dCA9IGxhYmVsRWxlbWVudC50ZXh0Q29udGVudC50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRUZXh0ID0gbGFiZWxUZXh0LnNwbGl0KCc6JylbMF0udHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdTaGlwcGluZyBNZXRob2QgVGl0bGU6Jywgc2VsZWN0ZWRUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXEgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FjdGlvbic6ICdCcG9zdF9zZWxlY3RlZF9jYXJyaWVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2Fycmllcic6IHNlbGVjdGVkVGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJEb3NhbyBzaSBkb3ZkZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlcSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5nZXRKU09OKHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4gKyAnL3dwLWFkbWluL2FkbWluLWFqYXgucGhwPycsIHJlcSAsICAoZGF0YSkgID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkNhb2Fvb28gbmFzYW9vbzIyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEuc3RhdHVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5zdGF0dXMgPT0gMSApe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkNhb29vb28gc3RhdHVzIDEyM1wiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEucGlja3VwTWFuZGF0b3J5ID09IHRydWUpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93Lm1hbmRhdG9yeURhdGEgPSBkYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2Fycmllcl9pZCA9IGRhdGEuY2Fycmllcl9pZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmNhcnJpZXJfaWQgPSBkYXRhLmNhcnJpZXJfaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeShkb2N1bWVudCkucmVhZHkoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoZWNrVmlzaWJpbGl0eSA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5wdXRFbGVtZW50ID0galF1ZXJ5KFwiLndvb2NvbW1lcmNlLWNoZWNrb3V0LXBheW1lbnRcIik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRFbGVtZW50LmlzKCc6dmlzaWJsZScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBpbnB1dCBlbGVtZW50IGlzIHZpc2libGUsIHlvdSBjYW4gcHJvY2VlZCB3aXRoIHlvdXIgc2NyaXB0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoY2hlY2tWaXNpYmlsaXR5KTsgLy8gU3RvcCBjaGVja2luZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBZb3VyIGNvZGUgaGVyZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIklUUyBWSVNJQkxFIDIyMlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCcjcGxhY2Vfb3JkZXInKS5wcm9wKCdkaXNhYmxlZCcsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoalF1ZXJ5KFwiI3BpY2t1cFRleHRcIikubGVuZ3RoID09IDApe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCcjcGxhY2Vfb3JkZXInKS5hZnRlcignPHAgaWQ9XCJwaWNrdXBUZXh0XCIgc3R5bGU9XCJjb2xvcjpyZWQ7XCI+U2VsZWN0IHBpY2t1cCBwb2ludDwvcD4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChqUXVlcnkoXCIjcGlja3VwVGV4dFwiKS5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeShcIiNwaWNrdXBUZXh0XCIpLnNob3coKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSgnLkJwb3N0LXBpY2stbG9jYXRpb24nKS5zaG93KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTsgLy8gQ2hlY2sgZXZlcnkgMTAwIG1pbGxpc2Vjb25kc1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJFbHNlIG5lbWEgcGlja3VwXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoJy5CcG9zdC1waWNrLWxvY2F0aW9uJykuaGlkZSgpO1xuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCcjc2hpcHBpbmdfcGlja3VwX2lkJykudmFsKCcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCcjc2hpcHBpbmdfcGlja3VwX2xhYmVsJykudmFsKCcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCcjc2hpcHBpbmdfcGlja3VwX2V4dGVuZGVkJykudmFsKCcnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBIaWRlIHRoZSBzcGFuIGVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCcuQnBvc3QtcGlja3VwX19kZXNjcmlwdGlvbicpLmhpZGUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoalF1ZXJ5KCcuQnBvc3QtcGlja3VwX19kZXNjcmlwdGlvbicpLmxlbmd0aCA+IDApe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJVc2FvIGlha28gbmVtYVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSgnLkJwb3N0LXBpY2t1cF9fZGVzY3JpcHRpb24nKS5oaWRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSgnI3BsYWNlX29yZGVyJykucHJvcCgnZGlzYWJsZWQnLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSgnI3BpY2t1cFRleHQnKS5oaWRlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLmZhaWwoKGVycikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRmF0YWwgZXJyb3Igd2lkZ2V0IHJlcXVlc3RpbmcgcG9pbnRzIGRvIHdlIGhhdmUgYW4gQVBJIGJ1Zz9cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIChmdW5jdGlvbihvcGVuKSB7XG4gICAgICAgICAgICAgICAgWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbihtZXRob2QsIHVybCwgYXN5bmMsIHVzZXIsIHBhc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHJlcXVlc3QgVVJMIGNvbnRhaW5zICd3Yy1hamF4PXVwZGF0ZV9vcmRlcl9yZXZpZXcnXG4gICAgICAgICAgICAgICAgICAgIGlmICh1cmwuaW5kZXhPZignd2MtYWpheD11cGRhdGVfb3JkZXJfcmV2aWV3JykgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnUmVxdWVzdCBtYWRlIHRvIHdjLWFqYXg9dXBkYXRlX29yZGVyX3JldmlldycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coalF1ZXJ5KCcuQnBvc3QtcGljay1sb2NhdGlvbicpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoZWNrZWRSYWRpbyA9IGpRdWVyeSgnI3NoaXBwaW5nX21ldGhvZCBpbnB1dFt0eXBlPVwicmFkaW9cIl06Y2hlY2tlZCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGFzc29jaWF0ZWQgbGFiZWwgdGV4dCBvZiB0aGUgY2hlY2tlZCByYWRpbyBidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWxlY3RlZFRleHQgPSBjaGVja2VkUmFkaW8uc2libGluZ3MoJ2xhYmVsJykudGV4dCgpLnNwbGl0KCc6JylbMF0udHJpbSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBMb2cgb3IgdXNlIHRoZSBzZWxlY3RlZCBzaGlwcGluZyBtZXRob2RcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdTZWxlY3RlZCBzaGlwcGluZyBtZXRob2Q6ICcgKyBzZWxlY3RlZFRleHQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVxID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhY3Rpb24nOiAnQnBvc3Rfc2VsZWN0ZWRfY2FycmllcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NhcnJpZXInOiBzZWxlY3RlZFRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRG9zYW8gc2kgZG92ZGVcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyZXEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZ2V0SlNPTih3aW5kb3cubG9jYXRpb24ub3JpZ2luICsgJy93cC1hZG1pbi9hZG1pbi1hamF4LnBocD8nLCByZXEgLCAgKGRhdGEpICA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJDYW9hb29vIG5hc2Fvb28yMlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhLnN0YXR1cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuc3RhdHVzID09IDEgKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJDYW9vb29vIHN0YXR1cyAxMjNcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLnBpY2t1cE1hbmRhdG9yeSA9PSB0cnVlKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5tYW5kYXRvcnlEYXRhID0gZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhcnJpZXJfaWQgPSBkYXRhLmNhcnJpZXJfaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5jYXJyaWVyX2lkID0gZGF0YS5jYXJyaWVyX2lkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoZG9jdW1lbnQpLnJlYWR5KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGVja1Zpc2liaWxpdHkgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlucHV0RWxlbWVudCA9IGpRdWVyeShcIi53b29jb21tZXJjZS1jaGVja291dC1wYXltZW50XCIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0RWxlbWVudC5pcygnOnZpc2libGUnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgaW5wdXQgZWxlbWVudCBpcyB2aXNpYmxlLCB5b3UgY2FuIHByb2NlZWQgd2l0aCB5b3VyIHNjcmlwdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKGNoZWNrVmlzaWJpbGl0eSk7IC8vIFN0b3AgY2hlY2tpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gWW91ciBjb2RlIGhlcmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJJVFMgVklTSUJMRSAyMjJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSgnI3BsYWNlX29yZGVyJykucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpRdWVyeShcIiNwaWNrdXBUZXh0XCIpLmxlbmd0aCA9PSAwKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSgnI3BsYWNlX29yZGVyJykuYWZ0ZXIoJzxwIGlkPVwicGlja3VwVGV4dFwiIHN0eWxlPVwiY29sb3I6cmVkO1wiPlNlbGVjdCBwaWNrdXAgcG9pbnQ8L3A+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoalF1ZXJ5KFwiI3BpY2t1cFRleHRcIikubGVuZ3RoID4gMCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoXCIjcGlja3VwVGV4dFwiKS5zaG93KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoJy5CcG9zdC1waWNrLWxvY2F0aW9uJykuc2hvdygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7IC8vIENoZWNrIGV2ZXJ5IDEwMCBtaWxsaXNlY29uZHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJFbHNlIG5lbWEgcGlja3VwXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoJy5CcG9zdC1waWNrLWxvY2F0aW9uJykuaGlkZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB2YWx1ZXMgZnJvbSBoaWRkZW4gaW5wdXRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSgnI3NoaXBwaW5nX3BpY2t1cF9pZCcpLnZhbCgnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSgnI3NoaXBwaW5nX3BpY2t1cF9sYWJlbCcpLnZhbCgnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSgnI3NoaXBwaW5nX3BpY2t1cF9leHRlbmRlZCcpLnZhbCgnJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGlkZSB0aGUgc3BhbiBlbGVtZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSgnLkJwb3N0LXBpY2t1cF9fZGVzY3JpcHRpb24nKS5oaWRlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpRdWVyeSgnLkJwb3N0LXBpY2t1cF9fZGVzY3JpcHRpb24nKS5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiVXNhbyBpYWtvIG5lbWFcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoJy5CcG9zdC1waWNrdXBfX2Rlc2NyaXB0aW9uJykuaGlkZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCcjcGxhY2Vfb3JkZXInKS5wcm9wKCdkaXNhYmxlZCcsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCcjcGlja3VwVGV4dCcpLmhpZGUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgfSkuZmFpbCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJGYXRhbCBlcnJvciB3aWRnZXQgcmVxdWVzdGluZyBwb2ludHMgZG8gd2UgaGF2ZSBhbiBBUEkgYnVnP1wiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBDYWxsIHRoZSBvcmlnaW5hbCBvcGVuIG1ldGhvZFxuICAgICAgICAgICAgICAgICAgICBvcGVuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pKFhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZS5vcGVuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldEZvcm1DaGFuZ2UoKXtcbiAgICAgICAgalF1ZXJ5KFwiLndjLWJsb2NrLWNoZWNrb3V0X19mb3JtXCIpLm9uKCdjaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgdHJpZ2dlcmVkIHdoZW4gYW55IGZvcm0gZmllbGQgaW5zaWRlIHRoZSBcImNoZWNrb3V0XCIgZm9ybSBpcyBjaGFuZ2VkXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkZvcm0gY2hhbmdlZCEgYmxvY2sgYmxvY2tcIik7XG4gICAgICAgICAgICBpZiAoalF1ZXJ5KCcjc2hpcHBpbmctbG9hZGVyJykubGVuZ3RoIDw9IDApIHtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGxvYWRlclRleHQgPSBqUXVlcnkoJzxkaXYgaWQ9XCJzaGlwcGluZy1sb2FkZXJcIj5Mb2FkaW5nIHNoaXBwaW5nIG1ldGhvZCBkYXRhLi4uPC9kaXY+JykuY3NzKHtcbiAgICAgICAgICAgICAgICAgICAgJ2Rpc3BsYXknOiAnZmxleCcsXG4gICAgICAgICAgICAgICAgICAgICdhbGlnbi1pdGVtcyc6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAnZm9udC1zaXplJzogJzE0cHgnLFxuICAgICAgICAgICAgICAgICAgICAnY29sb3InOiAnIzMzMycsXG4gICAgICAgICAgICAgICAgICAgICdtYXJnaW4tdG9wJzogJzEwcHgnXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvLyBBcHBlbmQgdGhlIGxvYWRlciB0ZXh0IHRvIHRoZSBib3R0b20gb2YgdGhlICNzaGlwcGluZy1vcHRpb24gZWxlbWVudFxuICAgICAgICAgICAgICAgIGpRdWVyeSgnI3NoaXBwaW5nLW9wdGlvbicpLmFwcGVuZChsb2FkZXJUZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgdGhpcy5kaXNhYmxlQnV0dG9uKCk7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgd2luZG93LnNlbGVjdGVkVGV4dCA9IGpRdWVyeShcImZpZWxkc2V0LndjLWJsb2NrLWNoZWNrb3V0X19zaGlwcGluZy1vcHRpb25cIilcbiAgICAgICAgICAgICAgICAgICAgLmZpbmQoXCIud2MtYmxvY2stY29tcG9uZW50cy1yYWRpby1jb250cm9sX19pbnB1dDpjaGVja2VkXCIpXG4gICAgICAgICAgICAgICAgICAgIC5jbG9zZXN0KFwibGFiZWxcIilcbiAgICAgICAgICAgICAgICAgICAgLmZpbmQoXCIud2MtYmxvY2stY29tcG9uZW50cy1yYWRpby1jb250cm9sX19sYWJlbFwiKVxuICAgICAgICAgICAgICAgICAgICAudGV4dCgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5zZWxlY3RlZFRleHQgPT09IHVuZGVmaW5lZCl7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiUHJhemFuXCIpXG4gICAgICAgICAgICAgICAgICAgIGpRdWVyeShcImZpZWxkc2V0LndjLWJsb2NrLWNoZWNrb3V0X19zaGlwcGluZy1vcHRpb25cIilcbiAgICAgICAgICAgICAgICAgICAgICAgIC5maW5kKFwiLndjLWJsb2NrLWNvbXBvbmVudHMtcmFkaW8tY29udHJvbF9fb3B0aW9uLWxheW91dFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zZWxlY3RlZFRleHQgPSBqUXVlcnkodGhpcykuZmluZChcIi53Yy1ibG9jay1jb21wb25lbnRzLXJhZGlvLWNvbnRyb2xfX2xhYmVsXCIpLnRleHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIFlvdSBjYW4gcGVyZm9ybSB5b3VyIGRlc2lyZWQgYWN0aW9ucyBoZXJlXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRTZWxlY3RlZENhcnJpZXIoKTtcbiAgICAgICAgICAgIH0sIDIwMDApO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmVuYWJsZUJ1dHRvbigpO1xuXG4gICAgfVxuXG4gICAgZ2V0T25TdWJtaXRCdXR0b25CbG9ja0NsaWNrTm9UaGVtZSgpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJTdWJtaXR0ZWQgbm8gdGhlbWVcIik7XG5cbiAgICAgICAgdmFyIGNoZWNrVmlzaWJpbGl0eSA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgIHZhciBpbnB1dEVsZW1lbnQgPSAgalF1ZXJ5KCcud2MtYmxvY2stY29tcG9uZW50cy1jaGVja291dC1wbGFjZS1vcmRlci1idXR0b24nKTtcblxuICAgICAgICAgICAgaWYgKGlucHV0RWxlbWVudC5pcygnOnZpc2libGUnKSkge1xuICAgICAgICAgICAgICAgIC8vIFRoZSBpbnB1dCBlbGVtZW50IGlzIHZpc2libGUsIHlvdSBjYW4gcHJvY2VlZCB3aXRoIHlvdXIgc2NyaXB0XG4gICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChjaGVja1Zpc2liaWxpdHkpOyAvLyBTdG9wIGNoZWNraW5nXG4gICAgICAgICAgICAgICAgLy8gWW91ciBjb2RlIGhlcmVcblxuICAgICAgICAgICAgICAgIGlucHV0RWxlbWVudC5vbignY2xpY2snLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgc2hpcHBpbmdfcGlja3VwX2lkID0galF1ZXJ5KFwiI3NoaXBwaW5nX3BpY2t1cF9pZFwiKS52YWwoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJDbGlja2VkXCIpO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjYXJyaWVyX2lkKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cod2luZG93Lm1hbmRhdG9yeURhdGEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAod2luZG93Lm1hbmRhdG9yeURhdGEgIT0gXCJcIiAmJiB3aW5kb3cubWFuZGF0b3J5RGF0YS5waWNrdXBNYW5kYXRvcnkgJiYgc2hpcHBpbmdfcGlja3VwX2lkID09IFwiXCIpe1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbW9kYWwgPSBqUXVlcnkoJzxkaXY+JywgeyBpZDogJ215TW9kYWwnLCBjc3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rpc3BsYXknOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwb3NpdGlvbic6ICdmaXhlZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd6LWluZGV4JzogJzEnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGVmdCc6ICcwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RvcCc6ICcwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpZHRoJzogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaGVpZ2h0JzogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3ZlcmZsb3cnOiAnYXV0bycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogJ3JnYmEoMCwwLDAsMC40KSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtb2RhbENvbnRlbnQgPSBqUXVlcnkoJzxkaXY+JywgeyBjc3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQtY29sb3InOiAnI2ZlZmVmZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4nOiAnMTUlIGF1dG8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZyc6ICcyMHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JvcmRlcic6ICcxcHggc29saWQgIzg4OCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aWR0aCc6ICc4MCUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2xvc2VCdXR0b24gPSBqUXVlcnkoJzxzcGFuPicsIHsgdGV4dDogJ8OXJywgY3NzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2xvcic6ICcjYWFhJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Zsb2F0JzogJ3JpZ2h0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZvbnQtc2l6ZSc6ICcyOHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZvbnQtd2VpZ2h0JzogJ2JvbGQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY3Vyc29yJzogJ3BvaW50ZXInXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWVzc2FnZSA9IGpRdWVyeSgnPHA+JywgeyB0ZXh0OiBzaGlwdGltaXplX21hbmRhdG9yeV9wb2ludCB9KTtcblxuXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYnV0dG9uID0galF1ZXJ5KFwiPGJ1dHRvbiBjbGFzcz0nYnV0dG9uIGFsdCBzaGlwdGltaXplLXBpY2stbG9jYXRpb24nIGlkPSdzaGlwdGltaXplX3BpY2t1cF9idXR0b24nIHR5cGU9J2J1dHRvbicgb25DbGljaz0nc2hpcHRpbWl6ZS5nZXRQaWNrdXBMb2NhdGlvbnMoZXZlbnQpJz5cIiArIHNoaXB0aW1pemVfY2hvb3NlX3BpY2t1cF9sb2NhdGlvbiArIFwiPC9idXR0b24+XCIpO1xuXG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXBwZW5kIHRoZSBlbGVtZW50c1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9kYWxDb250ZW50LmFwcGVuZChjbG9zZUJ1dHRvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RhbENvbnRlbnQuYXBwZW5kKG1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9kYWwuYXBwZW5kKG1vZGFsQ29udGVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RhbENvbnRlbnQuYXBwZW5kKGJ1dHRvbik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSgnYm9keScpLmFwcGVuZChtb2RhbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNob3cgdGhlIG1vZGFsXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RhbC5zaG93KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENsb3NlIHRoZSBtb2RhbCB3aGVuIHRoZSB1c2VyIGNsaWNrcyBvbiA8c3Bhbj4gKHgpXG4gICAgICAgICAgICAgICAgICAgICAgICBjbG9zZUJ1dHRvbi5vbignY2xpY2snLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RhbC5oaWRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2xvc2UgdGhlIG1vZGFsIHdoZW4gdGhlIHVzZXIgY2xpY2tzIGFueXdoZXJlIG91dHNpZGUgb2YgdGhlIG1vZGFsIGNvbnRlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSh3aW5kb3cpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpRdWVyeShldmVudC50YXJnZXQpLmlzKG1vZGFsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RhbC5oaWRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgfVxuICAgICAgICB9LCAxMDApOyAvLyBDaGVjayBldmVyeSAxMDAgbWlsbGlzZWNvbmRzXG5cblxuICAgICAgICAvLyBqUXVlcnkoJyNwbGFjZV9vcmRlcicpXG5cblxuICAgIH1cblxuICAgIGdldFNlbGVjdGVkQ2Fycmllcigpe1xuXG4gICAgICAgIGNvbnNvbGUubG9nKFwic2VsZWN0ZWRDYXJyaWVyXCIpXG5cbiAgICAgICAgaWYgKGpRdWVyeSgnI3NoaXBwaW5nLWxvYWRlcicpLmxlbmd0aCkge1xuICAgICAgICAgICAgalF1ZXJ5KCcjc2hpcHBpbmctbG9hZGVyJykucmVtb3ZlKCk7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUubG9nKHdpbmRvdy5zZWxlY3RlZFRleHQpO1xuICAgICAgICB3aW5kb3cubWFuZGF0b3J5RGF0YSA9IFwiXCI7XG4gICAgICAgIGpRdWVyeShcIiNzaGlwdGltaXplX3BpY2t1cF9idXR0b25cIikucmVtb3ZlKCk7XG5cbiAgICAgICAgbGV0IHJlcSA9IHtcbiAgICAgICAgICAgICdhY3Rpb24nOiAnc2hpcHRpbWl6ZV9zZWxlY3RlZF9jYXJyaWVyJyxcbiAgICAgICAgICAgICdjYXJyaWVyJzogd2luZG93LnNlbGVjdGVkVGV4dFxuICAgICAgICB9O1xuXG4gICAgICAgIGpRdWVyeS5nZXRKU09OKHRoaXMub3B0aW9ucy5hamF4X3VybCwgcmVxICwgIChkYXRhKSAgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJDYW9hb29vIG5hc2Fvb28yMlwiKTtcblxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlQnV0dG9uKCk7XG5cbiAgICAgICAgICAgIGpRdWVyeSgnI3NoaXB0aW1pemUtcGlja3VwX19kZXNjcmlwdGlvbicpLmhpZGUoKTtcblxuXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhLnN0YXR1cyk7XG4gICAgICAgICAgICBpZiAoZGF0YS5zdGF0dXMgPT0gMSApe1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ2Fvb29vbyBzdGF0dXMgMTIzXCIpO1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLnBpY2t1cE1hbmRhdG9yeSA9PSB0cnVlKXtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93Lm1hbmRhdG9yeURhdGEgPSBkYXRhO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmNhcnJpZXJfaWQgPSBkYXRhLmNhcnJpZXJfaWQ7XG4gICAgICAgICAgICAgICAgd2luZG93LmNhcnJpZXJfaWQgPSBkYXRhLmNhcnJpZXJfaWQ7XG4gICAgICAgICAgICAgICAgalF1ZXJ5KGRvY3VtZW50KS5yZWFkeSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjaGVja1Zpc2liaWxpdHkgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5wdXRFbGVtZW50ID0galF1ZXJ5KFwiLndjLWJsb2NrLWNvbXBvbmVudHMtc2hpcHBpbmctcmF0ZXMtY29udHJvbF9fcGFja2FnZVwiKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0RWxlbWVudC5pcygnOnZpc2libGUnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBpbnB1dCBlbGVtZW50IGlzIHZpc2libGUsIHlvdSBjYW4gcHJvY2VlZCB3aXRoIHlvdXIgc2NyaXB0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChjaGVja1Zpc2liaWxpdHkpOyAvLyBTdG9wIGNoZWNraW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gWW91ciBjb2RlIGhlcmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIklUUyBWSVNJQkxFIDIyMlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldEJsb2NrU2hpcHBpbmdEYXRhKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coaW5wdXRFbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoalF1ZXJ5KCcjc2hpcHRpbWl6ZV9waWNrdXBfYnV0dG9uJykubGVuZ3RoIDw9IDApe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIk5vIHBpY2t1cCBidXR0b24gb24gcGFnZSBzbyB3ZSBhZGRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBidXR0b24gPSBqUXVlcnkoXCI8YnV0dG9uIGNsYXNzPSdidXR0b24gYWx0IHNoaXB0aW1pemUtcGljay1sb2NhdGlvbicgdHlwZT0nYnV0dG9uJyBpZD0nc2hpcHRpbWl6ZV9waWNrdXBfYnV0dG9uJyBvbkNsaWNrPSdzaGlwdGltaXplLmdldFBpY2t1cExvY2F0aW9ucyhldmVudCknPlwiKyBzaGlwdGltaXplX2Nob29zZV9waWNrdXBfbG9jYXRpb24gK1wiPC9idXR0b24+XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc2hpcHBpbmdfcGlja3VwX2lkID0galF1ZXJ5KFwiPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nc2hpcHBpbmdfcGlja3VwX2lkJyBpZD0nc2hpcHBpbmdfcGlja3VwX2lkJy8+XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc2hpcHBpbmdfcGlja3VwX2xhYmVsID0galF1ZXJ5KFwiPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nc2hpcHBpbmdfcGlja3VwX2xhYmVsJyBpZD0nc2hpcHBpbmdfcGlja3VwX2xhYmVsJy8+XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc2hpcHRpbWl6ZV9waWNrdXBfZXh0ZW5kZWQgPSBqUXVlcnkoXCI8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdzaGlwdGltaXplX3BpY2t1cF9leHRlbmRlZCcgaWQ9J3NoaXBwaW5nX3BpY2t1cF9leHRlbmRlZCcvPlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNoaXB0aW1pemVfcGlja3VwX2Rlc2NyaXB0aW9uID0galF1ZXJ5KFwiPHNwYW4gY2xhc3NOYW1lPSdzaGlwdGltaXplLXBpY2t1cF9fZGVzY3JpcHRpb24nIGlkPSdzaGlwdGltaXplLXBpY2t1cF9fZGVzY3JpcHRpb24nPjwvc3Bhbj5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzaGlwcGluZ19jYXJyaWVyX2lkID0galF1ZXJ5KFwiPHRyIHN0eWxlPSdkaXNwbGF5OiBub25lJz48dGQ+PGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nc2hpcHBpbmdfY2Fycmllcl9pZCcgaWQ9J3NoaXBwaW5nX2NhcnJpZXJfaWQnLz5cIik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYnV0dG9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRFbGVtZW50WzBdLmFwcGVuZChidXR0b25bMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dEVsZW1lbnRbMF0uYXBwZW5kKHNoaXBwaW5nX3BpY2t1cF9pZFswXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0RWxlbWVudFswXS5hcHBlbmQoc2hpcHBpbmdfcGlja3VwX2xhYmVsWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRFbGVtZW50WzBdLmFwcGVuZChzaGlwdGltaXplX3BpY2t1cF9leHRlbmRlZFswXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0RWxlbWVudFswXS5hcHBlbmQoc2hpcHRpbWl6ZV9waWNrdXBfZGVzY3JpcHRpb25bMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dEVsZW1lbnRbMF0uYXBwZW5kKHNoaXBwaW5nX2NhcnJpZXJfaWRbMF0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXBpbnRlcmZhY2Uuc2V0Q2FycmllcklkKHRoaXMuY2Fycmllcl9pZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoalF1ZXJ5KCcjc2hpcHRpbWl6ZV9waWNrdXBfYnV0dG9uJykuaXMoJzp2aXNpYmxlJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0J1dHRvbiBpcyB2aXNpYmxlIHNvIHdlIGNhbiBlbmFibGUnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29kZSB0byBydW4gYWZ0ZXIgMzAwIG1pbGxpc2Vjb25kc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJzQwMCBtaWxsaXNlY29uZHMgaGF2ZSBwYXNzZWQnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCcud2MtYmxvY2stY29tcG9uZW50cy1jaGVja291dC1wbGFjZS1vcmRlci1idXR0b24nKS5wcm9wKCdkaXNhYmxlZCcsIGZhbHNlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVzZXQgQ1NTIHN0eWxlcyBmb3IgdGhlIGVuYWJsZWQgc3RhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSgnLndjLWJsb2NrLWNvbXBvbmVudHMtY2hlY2tvdXQtcGxhY2Utb3JkZXItYnV0dG9uJykuY3NzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZC1jb2xvcic6ICdibGFjaycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2N1cnNvcic6ICdwb2ludGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3BhY2l0eSc6ICcxJyAgLy8gUmVzZXQgb3BhY2l0eSB0byBtYWtlIGl0IGZ1bGx5IHZpc2libGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDMwMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LCAxMDApOyAvLyBDaGVjayBldmVyeSAxMDAgbWlsbGlzZWNvbmRzXG4gICAgICAgICAgICAgICAgfSk7XG5cblxuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJCVVRUT04gRU5BQkxFRCBHRVQgU0VMRUNURUQgQ0FSUklFUlwiKTtcblxuICAgICAgICAgICAgICAgIGlmIChqUXVlcnkoJyNzaGlwdGltaXplLXBpY2t1cF9fZGVzY3JpcHRpb24nKS5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCcjc2hpcHRpbWl6ZS1waWNrdXBfX2Rlc2NyaXB0aW9uJykuaGlkZSgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlQnV0dG9uKCk7XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICB9KS5mYWlsKChlcnIpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRmF0YWwgZXJyb3Igd2lkZ2V0IHJlcXVlc3RpbmcgcG9pbnRzIGRvIHdlIGhhdmUgYW4gQVBJIGJ1Zz9cIik7XG4gICAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgaXNCbG9ja0NoZWNrb3V0KCl7XG4gICAgICAgIGlmIChqUXVlcnkoXCIud2MtYmxvY2stY2hlY2tvdXRcIikubGVuZ3RoID4gMCl7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZ2V0T25DbGljaygpe1xuICAgICAgICBqUXVlcnkoXCIjc3ctcXVlcnktYnRuXCIpLm9uKCdjbGljaycgLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmdlb2NvZGVRdWVyeSgpO1xuICAgICAgICB9KVxuXG5cblxuICAgICAgICBqUXVlcnkoJ2Zvcm1bbmFtZT1cImNoZWNrb3V0XCJdJykub24oJ2NoYW5nZScsICgpID0+IHtcbiAgICAgICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSB0cmlnZ2VyZWQgd2hlbiBhbnkgZm9ybSBmaWVsZCBpbnNpZGUgdGhlIFwiY2hlY2tvdXRcIiBmb3JtIGlzIGNoYW5nZWRcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRm9ybSBjaGFuZ2VkIVwiKTtcbiAgICAgICAgICAgIHRoaXMuZ2V0Rm9ybVNoaXBwaW5nRGF0YSgpO1xuICAgICAgICAgICAgLy8gWW91IGNhbiBwZXJmb3JtIHlvdXIgZGVzaXJlZCBhY3Rpb25zIGhlcmVcbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICBnZXRGb3JtU2hpcHBpbmdEYXRhKCkge1xuXG4gICAgICAgIHZhciBjb3VudHJ5ID0galF1ZXJ5KCcjYmlsbGluZ19jb3VudHJ5JykudmFsKCksXG4gICAgICAgICAgICBzdGF0ZSA9IGpRdWVyeSgnI2JpbGxpbmdfc3RhdGUnKS52YWwoKSxcbiAgICAgICAgICAgIHBvc3Rjb2RlID0galF1ZXJ5KCdpbnB1dCNiaWxsaW5nX3Bvc3Rjb2RlJykudmFsKCksXG4gICAgICAgICAgICBjaXR5ID0galF1ZXJ5KCcjYmlsbGluZ19jaXR5JykudmFsKCksXG4gICAgICAgICAgICBhZGRyZXNzID0galF1ZXJ5KCdpbnB1dCNiaWxsaW5nX2FkZHJlc3NfMScpLnZhbCgpLFxuICAgICAgICAgICAgYWRkcmVzc18yID0galF1ZXJ5KCdpbnB1dCNiaWxsaW5nX2FkZHJlc3NfMicpLnZhbCgpLFxuICAgICAgICAgICAgc19jb3VudHJ5ID0gY291bnRyeSxcbiAgICAgICAgICAgIHNfc3RhdGUgPSBzdGF0ZSxcbiAgICAgICAgICAgIHNfcG9zdGNvZGUgPSBwb3N0Y29kZSxcbiAgICAgICAgICAgIHNfY2l0eSA9IGNpdHksXG4gICAgICAgICAgICBzX2FkZHJlc3MgPSBhZGRyZXNzLFxuICAgICAgICAgICAgc19hZGRyZXNzXzIgPSBhZGRyZXNzXzI7XG5cblxuICAgICAgICBpZiAoalF1ZXJ5KCcjc2hpcC10by1kaWZmZXJlbnQtYWRkcmVzcycpLmZpbmQoJ2lucHV0JykuaXMoJzpjaGVja2VkJykpIHtcbiAgICAgICAgICAgIHNfY291bnRyeSA9IGpRdWVyeSgnI3NoaXBwaW5nX2NvdW50cnknKS52YWwoKTtcbiAgICAgICAgICAgIHNfc3RhdGUgPSBqUXVlcnkoJyNzaGlwcGluZ19zdGF0ZScpLnZhbCgpO1xuICAgICAgICAgICAgc19wb3N0Y29kZSA9IGpRdWVyeSgnaW5wdXQjc2hpcHBpbmdfcG9zdGNvZGUnKS52YWwoKTtcbiAgICAgICAgICAgIHNfY2l0eSA9IGpRdWVyeSgnI3NoaXBwaW5nX2NpdHknKS52YWwoKTtcbiAgICAgICAgICAgIHNfYWRkcmVzcyA9IGpRdWVyeSgnaW5wdXQjc2hpcHBpbmdfYWRkcmVzc18xJykudmFsKCk7XG4gICAgICAgICAgICBzX2FkZHJlc3NfMiA9IGpRdWVyeSgnaW5wdXQjc2hpcHBpbmdfYWRkcmVzc18yJykudmFsKCk7XG4gICAgICAgIH1cblxuICAgICAgICBqUXVlcnkoJ2lucHV0W2FyaWEtbGFiZWwqPVwiQ291bnRyeS9SZWdpb25cIl0nKS5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIHNfY291bnRyeSA9IGpRdWVyeSh0aGlzKS52YWwoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgd2luZG93LnNoaXB0aW1pemVfc2hpcHBpbmdfYWRkcmVzcyA9IHtcbiAgICAgICAgICAgIFwiQWRkcmVzc1wiOntcbiAgICAgICAgICAgICAgICBcIkxhdFwiOiBcIlwiLFxuICAgICAgICAgICAgICAgIFwiTG9uZ1wiOiBcIlwiLFxuICAgICAgICAgICAgICAgIFwiU3RyZWV0bmFtZTFcIjogc19hZGRyZXNzLFxuICAgICAgICAgICAgICAgIFwiU3RyZWV0bmFtZTJcIjogc19hZGRyZXNzXzIsXG4gICAgICAgICAgICAgICAgXCJIb3VzZU51bWJlclwiOiAnJyxcbiAgICAgICAgICAgICAgICBcIk51bWJlckV4dGVuc2lvblwiOiAnJyxcbiAgICAgICAgICAgICAgICBcIlBvc3RhbENvZGVcIjogc19wb3N0Y29kZSxcbiAgICAgICAgICAgICAgICBcInNfcG9zdGNvZGVcIjogc19wb3N0Y29kZSxcbiAgICAgICAgICAgICAgICBcIkNpdHlcIjogc19jaXR5LFxuICAgICAgICAgICAgICAgIFwiQ291bnRyeVwiOiBzX2NvdW50cnksXG4gICAgICAgICAgICAgICAgXCJTdGF0ZVwiOiBzX3N0YXRlLFxuXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcG9zdF9kYXRhOiBqUXVlcnkoJ2Zvcm0uY2hlY2tvdXQnKS5zZXJpYWxpemUoKSxcbiAgICAgICAgICAgIFwiQ2FycmllcklkXCI6IGpRdWVyeShcIiNzaGlwcGluZ19jYXJyaWVyX2lkXCIpLnZhbCgpXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMub3B0aW9ucy5hZGRyZXNzID0gd2luZG93LnNoaXB0aW1pemVfc2hpcHBpbmdfYWRkcmVzcy5BZGRyZXNzO1xuICAgIH1cblxuICAgIGdldFNoaXB0aW1pemVJZChtYWdlX2lkKSB7XG4gICAgICAgIHZhciBjYXJyaWVyX2lkID0gbWFnZV9pZC5tYXRjaCgvKFtcXGRdKylfcGlja3VwLyk7XG4gICAgICAgIGlmIChjYXJyaWVyX2lkICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBjYXJyaWVyX2lkWzFdO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCBzaGlwdGltaXplX2NhcnJpZXJzLmxlbmd0aDsgKyt4KSB7XG4gICAgICAgICAgICBpZiAoc2hpcHRpbWl6ZV9jYXJyaWVyc1t4XS5DbGFzc05hbWUgPT09IG1hZ2VfaWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIChzaGlwdGltaXplX2NhcnJpZXJzW3hdLklkKSA9PSAnb2JqZWN0JyA/IHNoaXB0aW1pemVfY2FycmllcnNbeF0uSWRbJzAnXSA6IHNoaXB0aW1pemVfY2FycmllcnNbeF0uSWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICAvKlxuICAgICogQWRkcyB0aGUgbWFwIHRvIHRoZSBwYWdlXG4gICAgKi9cbiAgICBpbml0KCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMuYWRkcmVzcyAmJiB0aGlzLnNldEFkZHJlc3ModGhpcy5vcHRpb25zLmFkZHJlc3MpO1xuICAgICAgICB0aGlzLmxvYWRTY3JpcHRzKCk7XG5cbiAgICAgICAgIXRoaXMub3B0aW9ucy5hZGRyZXNzICYmIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdTaGlwdGltaXplQWRkcmVzcycpICYmIHRoaXMuc2V0QWRkcmVzcyhKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdTaGlwdGltaXplQWRkcmVzcycpKSk7XG4gICAgfTtcblxuXG4gICAgYWRkUG9pbnRJbmZvKHAsIHNlbGVjdGVkLCBleHRyYV9jbGFzcywgcGFyZW50Q29udGFpbmVyKSB7XG4gICAgICAgIGlmICh0eXBlb2YoZXh0cmFfY2xhc3MpID09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBleHRyYV9jbGFzcyA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG9wZW4gPSB0eXBlb2YocC5Xb3JraW5nSG91cnNSYXcpICE9ICd1bmRlZmluZWQnICYmIHAuV29ya2luZ0hvdXJzUmF3ID8gSlNPTi5wYXJzZShwLldvcmtpbmdIb3Vyc1JhdykgOiBbXTtcbiAgICAgICAgbGV0IG9wZW5odG1sID0gJyc7XG4gICAgICAgIGxldCBtMmYgPSAnJztcbiAgICAgICAgbGV0IHdrZCA9ICcnO1xuICAgICAgICBsZXQgbG9jYWwgPSBwLkluZm9ybWF0aW9uLkFkZHJlc3M7XG5cbiAgICAgICAgLyoGLSDk0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAvIFRvIHJlcGxhY2Ugd2hlbiB3ZSBoYXZlIGFuIGFjdHVhbCBmb3JtYXQgZm9yIGl0ICAqL1xuICAgICAgICBsZXQgb3BlbkhvdXJzID0gW107XG5cbiAgICAgICAgLyogTEVHQUNZIGNvZGUgdGhhdCB3ZSBhcmUgdXNpbmcgdG8gdHJhbnNmb3JtIHRoZSByYXcgZGF0YSBpbnRvIHNvbWV0aGluZyB3ZSBjYW4gd29yayB3aXRoICAtLS0tLS0tLS0tLSAqL1xuICAgICAgICBsZXQgcmVnZXhGb3JtYXREZXYgPSBuZXcgUmVnRXhwKC8oW2EtekEtWjAtOV0rKVxcXyhbYS16QS1aMC05XSspXFxfKFthLXpBLVowLTldKylcXF8oW2EtekEtWjAtOV0rKVxcXyhbYS16QS1aMC05XSspXFxfKFthLXpBLVowLTldKylcXF8oW2EtekEtWjAtOV0rKS8sICdnJyk7XG4gICAgICAgIGxldCByZWdleEZvcm1hdExpdmUgPSBuZXcgUmVnRXhwKC8oW2EtekEtWjAtOV0rKVxcXyhbYS16QS1aMC05XSspXFxfKFthLXpBLVowLTldKylcXF8oW2EtekEtWjAtOV0rKS8sICdnJyk7XG4gICAgICAgIGxldCByZWdleEZvcm1hdCA9IHJlZ2V4Rm9ybWF0TGl2ZTtcbiAgICAgICAgbGV0IHJlZ0RheSA9IDE7IC8qIE1vbmRheSwgVHVlc2RheSAuLiovXG4gICAgICAgIGxldCByZWdPcGVuSWR4ID0gNDsgLyogMSwyLC4uLiAqL1xuICAgICAgICBsZXQgcmVnVHlwZUlkeCA9IDI7IC8qIE9wZW4gfCBjbG9zaW5nICovXG5cblxuICAgICAgICBpZiAoT2JqZWN0LmtleXMob3BlbikubGVuZ3RoID4gMCAmJiBPYmplY3Qua2V5cyhvcGVuKS5zaGlmdCgpLm1hdGNoKHJlZ2V4Rm9ybWF0RGV2KSkge1xuICAgICAgICAgICAgcmVnZXhGb3JtYXQgPSByZWdleEZvcm1hdERldjtcbiAgICAgICAgICAgIHJlZ1R5cGVJZHggPSAzO1xuICAgICAgICAgICAgcmVnT3BlbklkeCA9IDc7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gb3Blbikge1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gb3BlbltrZXldO1xuXG4gICAgICAgICAgICBpZiAoa2V5Lm1hdGNoKHJlZ2V4Rm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIGxldCByZXMgPSByZWdleEZvcm1hdC5leGVjKGtleSk7XG4gICAgICAgICAgICAgICAgbGV0IGRheW5hbWUgPSByZXNbcmVnRGF5XTtcbiAgICAgICAgICAgICAgICBsZXQgb3BlbmlkeCA9IHBhcnNlSW50KHJlc1tyZWdPcGVuSWR4XSkGLSDkAxO1xuICAgICAgICAgICAgICAgIGxldCBkYXlpZHggPSB0aGlzLndlZWtkYXluYW1lcy5pbmRleE9mKGRheW5hbWUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZihvcGVuSG91cnNbZGF5aWR4XSkgPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgb3BlbkhvdXJzW2RheWlkeF0gPSBbXTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mKG9wZW5Ib3Vyc1tkYXlpZHhdW29wZW5pZHhdKSA9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBvcGVuSG91cnNbZGF5aWR4XVtvcGVuaWR4XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIE9wZW5UaW1lOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIENsb3NlVGltZTogJydcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBvcGVuSG91cnNbZGF5aWR4XVtvcGVuaWR4XVtyZXNbcmVnVHlwZUlkeF0gPT0gJ0Nsb3NpbmcnID8gJ0Nsb3NlVGltZScgOiAnT3BlblRpbWUnXSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLyogTWFrZSBzdXJlIGl0J3Mgc29ydGVkICovXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3BlbkhvdXJzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAvKiBTb21ldGltZXMgaXQncyBjbG9zZWQgb24gbW9uZGF5IG1lYW5pbmcgdGhlcmUncyBub3RoaW5nIGF0IGlkeCAwKi9cbiAgICAgICAgICAgIGlmICh0eXBlb2Yob3BlbkhvdXJzW2ldKSAhPSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgbGV0IHNjaGVkdWxlID0gb3BlbkhvdXJzW2ldO1xuICAgICAgICAgICAgICAgIHNjaGVkdWxlLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGFvcGVuID0gcGFyc2VJbnQoYS5PcGVuVGltZS5zdWJzdHJpbmcoMCwgMikpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgYm9wZW4gPSBwYXJzZUludChiLk9wZW5UaW1lLnN1YnN0cmluZygwLCAyKSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhb3BlbiAtIGJvcGVuO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLyogR3JvdXAgZGF0YSBzZXRcbiAgICAgICAgTGFiZWwgY2FuIGJlOlxuICAgICAgICBGaXJzdCBkYXkGLSDkBsYXN0IGRheSB3aXRoIHNhbWUgc2NoZWR1bGVcbiAgICAgICAgRXZlcnkgZGF5ICovXG5cbiAgICAgICAgb3BlbiA9ICh0eXBlb2YocC5Xb3JraW5nSG91cnMpICE9ICd1bmRlZmluZWQnKSA/IHAuV29ya2luZ0hvdXJzIDogb3BlbkhvdXJzO1xuICAgICAgICAvKiogSXQncyBhIGhhc2gsIG5vdCBhbiBhcnJheSAqKi9cbiAgICAgICAgbGV0IG5kYXlzb3BlbiA9IE9iamVjdC5rZXlzKG9wZW4pLmxlbmd0aDtcbiAgICAgICAgbGV0IGZyb21kYXkgPSB0aGlzLndlZWtkYXluYW1lc1swXTtcbiAgICAgICAgbGV0IHByZXZpb3VzVGltZSA9ICcnO1xuICAgICAgICBsZXQgaG91cnNodG1sID0gJyc7XG4gICAgICAgIGxldCBmcm9tZGF5aWR4ID0gMDtcbiAgICAgICAgbGV0IHRvRGF5ID0gJyc7XG4gICAgICAgIC8qLS0tLS0tLSovXG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA3OyArK2kpIHtcbiAgICAgICAgICAgIGxldCBkYXkgPSBvcGVuW2ldO1xuICAgICAgICAgICAgbGV0IGRheWh0bWwgPSAnJztcbiAgICAgICAgICAgIGxldCB0b2RheSA9IHRoaXMud2Vla2RheW5hbWVzW2ldO1xuXG4gICAgICAgICAgICBkYXlodG1sICs9IGA8ZGl2IGNsYXNzPVwic3ctcG9pbnQtaW5mby1kYXlcIj5gO1xuICAgICAgICAgICAgaG91cnNodG1sID0gJyc7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBkYXkgJiYgaiA8IGRheS5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgICAgIGxldCBob3VycyA9IGRheVtqXTtcbiAgICAgICAgICAgICAgICBpZiAoaG91cnMuT3BlblRpbWUgPT0gbnVsbCAmJiBob3Vycy5DbG9zZVRpbWUgPT0gJzIzOjU5Jykge1xuICAgICAgICAgICAgICAgICAgICBob3Vyc2h0bWwgKz0gJzI0aCc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaG91cnNodG1sICs9IChob3Vyc2h0bWwgPyAnIHwgJyA6ICcnKSArIGA8c3Bhbj4ke2hvdXJzLk9wZW5UaW1lID8gaG91cnMuT3BlblRpbWUgIDogJyd9IC0gJHtob3Vycy5DbG9zZVRpbWUgPyBob3Vycy5DbG9zZVRpbWUgOiAnJ308L3NwYW4+YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKiBsYXN0IGRheSBvciBkaWZmZXJlbnQgdGltZSwgcHJpbnQgbGFzdCAqKi9cbiAgICAgICAgICAgIGlmICggcHJldmlvdXNUaW1lICYmIChwcmV2aW91c1RpbWUgIT0gaG91cnNodG1sKSB8fCAoaSA9PSA2KSkge1xuICAgICAgICAgICAgICAgIC8qKiBub3QgYSBsb3Qgb2Ygc2Vuc2UgaW4gbW9uLW1vbiovXG4gICAgICAgICAgICAgICAgbGV0IGlzaW50ZXJ2YWwgPSBpIC0gZnJvbWRheWlkeCA+IDI7XG4gICAgICAgICAgICAgICAgbGV0IGlzbGFzdCA9IGk9PTY7XG5cbiAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNUaW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvRGF5ID0gKGlzbGFzdCAmJiAoaG91cnNodG1sID09IHByZXZpb3VzVGltZSkpID8gdGhpcy53ZWVrZGF5bmFtZXNbaV0gOiB0aGlzLndlZWtkYXluYW1lc1tpLTFdO1xuICAgICAgICAgICAgICAgICAgICBkYXlodG1sICs9IGA8bGFiZWw+JHsoIGlzaW50ZXJ2YWwgJiYgZnJvbWRheSA/IGZyb21kYXkgKyAnIC0gJyA6ICcnICkgKyB0b0RheX06PC9sYWJlbD48c3Bhbj4ke3ByZXZpb3VzVGltZX08L3NwYW4+PC9kaXY+YDtcbiAgICAgICAgICAgICAgICAgICAgb3Blbmh0bWwgKz0gZGF5aHRtbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaXNsYXN0ICYmIGhvdXJzaHRtbCAmJiAgKGhvdXJzaHRtbCAhPSBwcmV2aW91c1RpbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wZW5odG1sICs9IGA8ZGl2IGNsYXNzPVwic3ctcG9pbnQtaW5mby1kYXlcIj48bGFiZWw+JHt0aGlzLndlZWtkYXluYW1lc1tpXX06PC9sYWJlbD48c3Bhbj4ke2hvdXJzaHRtbH08L3NwYW4+PC9kaXY+PC9kaXY+YDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmcm9tZGF5ID0gaSA8IG5kYXlzb3BlbiAtIDEgPyB0aGlzLndlZWtkYXluYW1lc1tpXSA6ICcnO1xuICAgICAgICAgICAgICAgIGZyb21kYXlpZHggPSBpO1xuICAgICAgICAgICAgICAgIHByZXZpb3VzVGltZSA9IGhvdXJzaHRtbDtcblxuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHByZXZpb3VzVGltZSA9IGhvdXJzaHRtbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghb3Blbmh0bWwgJiYgcHJldmlvdXNUaW1lKSB7XG4gICAgICAgICAgICBvcGVuaHRtbCA9IGA8bGFiZWw+JHtmcm9tZGF5fSAtICR7dGhpcy53ZWVrZGF5bmFtZXNbbmRheXNvcGVuIC0gMV19OiA8L2xhYmVsPjxzcGFuPiR7cHJldmlvdXNUaW1lfTwvc3Bhbj48L2Rpdj5gO1xuICAgICAgICB9XG5cbiAgICAgICAgLyogLyBFTkQgTEVHQUNZIGNvZGUGLSDk0tLS0tLS0tLS0gKi9cblxuICAgICAgICBjb25zb2xlLmxvZyhcIlBvaW50XCIpO1xuICAgICAgICBjb25zb2xlLmxvZyhwKTtcblxuICAgICAgICBsZXQgZVBvaW50SW5mbyA9IGpRdWVyeShgPGRpdiBjbGFzcz1cInN3LXBvaW50LWluZm8gJHtleHRyYV9jbGFzc31cIj5cbiAgPGg0IGNsYXNzPSdzdy1wb2ludC1pbmZvLW5hbWUnPiR7cC5JbmZvcm1hdGlvbi5OYW1lfTwvaDQ+XG4gIDxkaXYgY2xhc3M9J3N3LXBvaW50LWluZm8tYWRkcic+JHtsb2NhbH08L2Rpdj5cbiAgJHtwLkRpc3RhbmNlICE9PSBudWxsID8gYDxkaXYgY2xhc3M9J3N3LXBvaW50LWluZm8tZGlzdGFuY2UnPmAgKyBzaGlwdGltaXplX2Rpc3RhbmNlICsgXCIgXCIgKyBgICR7cC5EaXN0YW5jZX0gYCArIHNoaXB0aW1pemVfbWV0ZXIgKyBcIiBcIiArIGA8L2Rpdj5gIDogJyd9XG4gIDxkaXYgY2xhc3M9J3N3LXBvaW50LWluZm8tb3Blbic+JHt0aGlzLmdldFdvcmtpbmdEYXlzKHAuV29ya2luZ0hvdXJzKX08L2Rpdj5cbjwvZGl2PmApO1xuXG4gICAgICAgIC8qIElzIHRoZXJlIGFkaXRpb25hbCBpbmZvcm1hdGlvbiByZXF1aXJlZD8gICovXG4gICAgICAgIGlmICh0eXBlb2YocC5NYXBGaWVsZHNTZWxlY3QpICE9ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBsZXQgbW9yZUZpZWxkcyA9IHAuTWFwRmllbGRzU2VsZWN0O1xuICAgICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBtb3JlRmllbGRzLmxlbmd0aDsgKytrKSB7XG4gICAgICAgICAgICAgICAgZVBvaW50SW5mby5hcHBlbmQoYDxkaXYgY2xhc3M9XCJzdy1wb2ludC1pbmZvLWFkZGl0aW9uYWxcIj48bGFiZWw+JHttb3JlRmllbGRzW2tdfTwvbGFiZWw+PGlucHV0IGRhdGEtaWQ9XCIke21vcmVGaWVsZHNba119XCIgY2xhc3M9XCJzaGlwdGltaXplX21hcGZpZWxkcyR7cC5Qb2ludElkfVwiIHR5cGU9XCJ0ZXh0XCIgIGlkPVwiJHttb3JlRmllbGRzW2tdfSR7cC5Qb2ludElkfVwiLz48L2Rpdj5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBidG4gPSBqUXVlcnkoYDxidXR0b24gY2xhc3M9XCJzdy1wb2ludC1pbmZvLWJ0biAke3NlbGVjdGVkID8gJ3NlbGVjdGVkJyA6ICcnfVwiPiR7c2VsZWN0ZWQgPyBzaGlwdGltaXplX3NlbGVjdGVkIDogc2hpcHRpbWl6ZV9zZWxlY3R9PC9idXR0b24+YCk7XG4gICAgICAgIGJ0bi5vbignY2xpY2snLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFBvaW50KHApO1xuICAgICAgICB9KTtcblxuICAgICAgICBlUG9pbnRJbmZvLmFwcGVuZChidG4pO1xuICAgICAgICBwYXJlbnRDb250YWluZXIuYXBwZW5kKGVQb2ludEluZm8pO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBBcHBlbmQgY3VzdG9tIHN0eWxlXG4gICAgICogQHBhcmFtIHN0cmluZyBjc3MGLSDkBhIHN0cmluZyB3aXRoIHRoZSBzdHlsZSB0byBpbmplY3RcbiAgICAgKi9cbiAgICBhZGRDdXN0b21TdHlsZShjc3MpIHtcblxuICAgICAgICB2YXIgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG4gICAgICAgIHN0eWxlLnR5cGUgPSBcInRleHQvY3NzXCI7XG5cbiAgICAgICAgaWYgKHN0eWxlLnN0eWxlU2hlZXQpIHtcbiAgICAgICAgICAgIHN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0eWxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpO1xuICAgICAgICB9XG5cbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgICB9O1xuXG4gICAgYWRkTWFwSHRtbCgpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJBREQgTUFQIEhUTUwgT3B0aW9ucyBhZGRyZXNzXCIpXG5cbiAgICAgICAgbGV0IGFkZHJlc3N0ciA9ICcnO1xuICAgICAgICAvKiBJcmVsYW5kIGRvZXMgbm90IGhhdmUgcG9zdGFsIGNvZGVzICovXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYWRkcmVzcy5TdHJlZXRuYW1lMSkge1xuICAgICAgICAgICAgYWRkcmVzc3RyID0gdGhpcy5vcHRpb25zLmFkZHJlc3MuUG9zdGFsQ29kZSA/IHRoaXMub3B0aW9ucy5hZGRyZXNzLlBvc3RhbENvZGUgOiB0aGlzLm9wdGlvbnMuYWRkcmVzcy5TdHJlZXRuYW1lMTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbWFwaHRtbCA9IGA8ZGl2IGlkPVwic3dcIj5cbiAgICA8ZGl2IGlkPVwic3dfX292ZXJsYXlcIj48L2Rpdj5cbiAgICA8ZGl2IGlkPVwic3dfX2NvbnRhaW5lclwiPlxuICAgICAgPGRpdiBpZD1cInN3LXNlYXJjaFwiPlxuICAgICAgICA8ZGl2IGlkPVwic3ctcXVlcnktd3JhcHBlclwiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwic3ctcXVlcnlcIiBwbGFjZWhvbGRlcj1cIiR7YWRkcmVzc3RyfVwiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBpZD1cInN3LXF1ZXJ5LXJlc3VsdHNcIj48L2Rpdj5cbiAgICAgICAgPGRpdiBpZD1cInF1ZXJ5LW9wdGlvbnNcIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgaWQ9XCJzdy1kaXNwbGF5LW9wdGlvbnNcIj5cbiAgICAgIDwvZGl2PiBcbiAgICAgIDxkaXYgaWQ9XCJzdy1tYXAtd3JhcHBlclwiIGNsYXNzPVwic3ctdGFiIHNlbGVjdGVkXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdy1xdWVyeS1yZXN1bHRzLWRlc2NyaXB0aW9uXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgaWQ9XCJzdy1tYXBcIiBjbGFzcz1cInNoaXB0aW1pemUtcGlja3VwX19tYXBcIj48L2Rpdj5cbiAgICAgICAgPGRpdiBpZD1cInN3LW1hcC1lcnJvclwiPjwvZGl2PiBcbiAgICAgICAgPGRpdiBpZD1cInN3LW1hcC1zZWxlY3RlZC1wb2ludFwiPjwvZGl2PlxuICAgICAgPC9kaXY+ICBcbiAgICAgIDxkaXYgY2xhc3M9J3N3LXRhYic+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdy1xdWVyeS1yZXN1bHRzLWRlc2NyaXB0aW9uXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgaWQ9XCJzdy1saXN0LXBvaW50c1wiPjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGlkPVwic3ctbWFwLW1lc3NhZ2VcIj48L2Rpdj5cbiAgICAgIDxkaXYgaWQ9XCJzdy1zZWFyY2gtc3RhdHVzXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdy1sb2FkZXJcIj48ZGl2PjwvZGl2PjxkaXY+PC9kaXY+PGRpdj48L2Rpdj48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5gO1xuICAgICAgICBqUXVlcnkodGhpcy5tYXBQYXJlbnRDb250YWluZXIpLmFwcGVuZChtYXBodG1sKTtcbiAgICAgICAgbGV0IGRpc3BsYXlPcHRpb25zID0galF1ZXJ5KFwiI3N3LWRpc3BsYXktb3B0aW9uc1wiKTtcbiAgICAgICAgbGV0IG9wdE1hcCA9IGpRdWVyeShgPHNwYW4gY2xhc3M9J3N3LWRpc3BsYXktb3B0aW9uIHNlbGVjdGVkJz5gK3NoaXB0aW1pemVfbWFwK2A8L3NwYW4+YCk7XG4gICAgICAgIGxldCBvcHRMaXN0ID0galF1ZXJ5KGA8c3BhbiBjbGFzcz0nc3ctZGlzcGxheS1vcHRpb24nXCI+YCtzaGlwdGltaXplX2xpc3QrYDwvc3Bhbj5gKTtcblxuICAgICAgICBvcHRNYXAub24oJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3REaXNwbGF5T3B0aW9uKDApO1xuICAgICAgICB9KTtcbiAgICAgICAgb3B0TGlzdC5vbignY2xpY2snLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdERpc3BsYXlPcHRpb24oMSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRpc3BsYXlPcHRpb25zLmFwcGVuZChvcHRNYXApO1xuICAgICAgICBkaXNwbGF5T3B0aW9ucy5hcHBlbmQob3B0TGlzdCk7XG5cbiAgICAgICAgbGV0IHF1ZXJ5b3B0ID0galF1ZXJ5KFwiI3N3LXF1ZXJ5LXdyYXBwZXJcIik7XG4gICAgICAgIGxldCBzZWFyY2hidG4gPSBqUXVlcnkoYDxidXR0b24gaWQ9XCJzdy1xdWVyeS1idG5cIlwiPmArc2hpcHRpbWl6ZV9zZWFyY2grYDwvYnV0dG9uPmApO1xuICAgICAgICBxdWVyeW9wdC5hcHBlbmQoc2VhcmNoYnRuKTtcblxuICAgICAgICBzZWFyY2hidG4ub24oJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5nZW9jb2RlUXVlcnkoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbGV0IHF1ZXJ5aW5wdXQgPSBqUXVlcnkoXCIjc3ctcXVlcnlcIik7XG4gICAgICAgIHF1ZXJ5aW5wdXQub24oJ2tleXVwJywgKGV2dCkgPT4ge1xuICAgICAgICAgICAgaWYgKGV2dC5rZXlDb2RlID09IDEzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZW9jb2RlUXVlcnkoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy50aW1lb3V0S2V5RG93biAmJiBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0S2V5RG93bik7XG4gICAgICAgICAgICB0aGlzLnRpbWVvdXRLZXlEb3duID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZW9jb2RlUXVlcnkoKTtcbiAgICAgICAgICAgIH0sIDMwMCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGpRdWVyeShcIiNzd19fb3ZlcmxheVwiKS5jbGljaygoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlTWFwKCk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBkZWNpbWFsIGxhdFxuICAgICAqIEBwYXJhbSBkZWNpbWFsIGxuZ1xuICAgICAqL1xuICAgIGNlbnRlck1hcChsYXQsIGxuZykge1xuICAgICAgICB0aGlzLm1hcGludGVyZmFjZS5jZW50ZXJNYXAobGF0LCBsbmcpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBIaWRlIHRoZSBtYXBcbiAgICAgKi9cbiAgICBjbG9zZU1hcCgpIHtcbiAgICAgICAgalF1ZXJ5KFwiI3N3XCIpXG4gICAgICAgICAgICAucmVtb3ZlQ2xhc3MoXCJvcGVuXCIpO1xuICAgICAgICBqUXVlcnkoJ2h0bWwsYm9keScpXG4gICAgICAgICAgICAuc2Nyb2xsVG9wKHRoaXMudXNlclNjcm9sbCk7XG4gICAgfTtcblxuICAgIGRpc3BsYXlNZXNzYWdlKG1zZykge1xuICAgICAgICBjb25zb2xlLmxvZyhcIk1lc3NhZ2UgZGlzcGxheVwiKTtcbiAgICAgICAgY29uc29sZS5sb2cobXNnKTtcbiAgICAgICAgalF1ZXJ5KCcjc3ctbWFwLW1lc3NhZ2UnKS5hZGRDbGFzcyhcIm9wZW5cIik7XG5cbiAgICAgICAgaWYgKG1zZy5JZCA9PSA5OSl7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIklGIDk5XCIpO1xuICAgICAgICAgICAgalF1ZXJ5KCcjc3ctbWFwLW1lc3NhZ2UnKS5odG1sKHNoaXB0aW1pemVfbm9fcG9pbnRzX2ZvdW5kKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGpRdWVyeSgnI3N3LW1hcC1tZXNzYWdlJykuaHRtbChtc2cpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIERpc3BsYXkgdGhlIHBvc3NpYmxlIG9wdGlvbiB0byB0aGUgdXNlciBpbiBhIGxpc3QgdW5kZXIgdGhlIHNlYXJjaCBpbnB1dFxuICAgICAqL1xuXG4gICAgLy9cbiAgICAvLyAjI0RKREogQnBvc3Qgc3R1ZmZcbiAgICBkaXNwbGF5UGxhY2VzKHBsYWNlcykge1xuICAgICAgICBjb25zb2xlLmxvZygxMSk7XG4gICAgICAgIGpRdWVyeShcIi5zdy1xdWVyeS1yZXN1bHRzLWRlc2NyaXB0aW9uXCIpLmh0bWwoJycpO1xuXG4gICAgICAgIHRoaXMucXVlcnlSZXN1bHRzID0gcGxhY2VzO1xuICAgICAgICBsZXQgcmVzdWx0c0NvbnRhaW5lciA9IGpRdWVyeShcIiNzdy1xdWVyeS1yZXN1bHRzXCIpO1xuXG4gICAgICAgIC8vICMjREpESiBPdmRlIHZlcm92YXRubyB0cmViYSBpem1lbmEgZGEgc2Ugb2RyYWRpXG4gICAgICAgIGNvbnNvbGUubG9nKFwiRGlzcGxheSBwbGFjZXNcIik7XG4gICAgICAgIGNvbnNvbGUubG9nKHBsYWNlcyk7XG5cbiAgICAgICAgbGV0IGh0bWwgPSAnJztcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwbGFjZXMubGVuZ3RoOyArK2kpIHtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBwbGFjZXNbaV0uYWRkcmVzcy5Qb3N0YWxDb2RlICE9ICd1bmRlZmluZWQnKXtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkZvdW5kIHBsYWNlXCIpXG4gICAgICAgICAgICAgICAgaHRtbCArPSBgPGRpdiBjbGFzcz1cInN3LXF1ZXJ5LXJlc3VsdFwiIGRhdGEtaWR4PVwiJHtpfVwiPiR7cGxhY2VzW2ldLmRpc3BsYXlfbmFtZX08L2Rpdj5gXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWh0bWwpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiTm8gcGxhY2UgZm91bmRcIik7XG4gICAgICAgICAgICBodG1sID0gc2hpcHRpbWl6ZV9ub19yZXN1bHRzO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5sb2coMjIpO1xuXG4gICAgICAgIHJlc3VsdHNDb250YWluZXIuaHRtbChodG1sKTtcbiAgICAgICAgalF1ZXJ5KFwiLnN3LXF1ZXJ5LXJlc3VsdFwiKS5vbignY2xpY2snLCAoZXZ0KSA9PiB7XG5cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKDMzKTtcblxuICAgICAgICAgICAgbGV0IGlkeCA9IGpRdWVyeShldnQudGFyZ2V0KS5hdHRyKFwiZGF0YS1pZHhcIik7XG5cbiAgICAgICAgICAgIGlmIChwYXJzZUludChpZHgpID09ICdpc05hTicgfHwgaWR4ID4gdGhpcy5xdWVyeVJlc3VsdHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJpbnZhbGlkIGlkeCBzZWxlY3RlZDogXCIsIGlkeCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgcGxhY2UgPSB0aGlzLnF1ZXJ5UmVzdWx0c1tpZHhdO1xuXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuYWRkcmVzcy5MYXQgPSBwbGFjZS5sYXQ7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuYWRkcmVzcy5Mb25nID0gcGxhY2UubG5nO1xuXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcInNlbGVjdGVkIFwiLCB0aGlzLnF1ZXJ5UmVzdWx0c1tpZHhdKTtcbiAgICAgICAgICAgIGpRdWVyeShcIiNzdy1xdWVyeS1yZXN1bHRzXCIpLmh0bWwoJycpO1xuICAgICAgICAgICAgalF1ZXJ5KFwiI3N3LXF1ZXJ5XCIpLnZhbChwbGFjZS5kaXNwbGF5X25hbWUpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZihwbGFjZS5hZGRyZXNzKSAhPSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IHByb3AgaW4gcGxhY2UuYWRkcmVzcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAocGxhY2UuYWRkcmVzc1twcm9wXSAmJiAocGxhY2UuYWRkcmVzc1twcm9wXS5sZW5ndGggPiAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmFkZHJlc3NbcHJvcF0gPSBwbGFjZS5hZGRyZXNzW3Byb3BdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmFkZHJlc3MuU3RyZWV0bmFtZTEgPSBwbGFjZS5hZGRyZXNzLlN0cmVldG5hbWUxO1xuICAgICAgICAgICAgY29uc29sZS5sb2cocGxhY2UuYWRkcmVzcywgXCJBZGRyZXNzIGlzIG5vdyBcIiwgdGhpcy5vcHRpb25zLmFkZHJlc3MpO1xuICAgICAgICAgICAgdGhpcy5mZXRjaFBvaW50cyh0aGlzLm9wdGlvbnMuYWRkcmVzcyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBoYXNoTGF0TG5nKHBvaW50KSB7XG4gICAgICAgIGxldCBsYXRzdHIgPSAocG9pbnQubGF0ICsgJycpLnJlcGxhY2UoJy4nLCAnLScpO1xuICAgICAgICBsZXQgbG5nc3RyID0gKHBvaW50LmxuZyArICcnKS5yZXBsYWNlKCcuJywgJy0nKTtcblxuICAgICAgICByZXR1cm4gJ3InICsgbGF0c3RyICsgJ18nICsgbG5nc3RyO1xuICAgIH07XG5cblxuICAgIGRpc3BsYXlSZXN1bHRzKGRhdGEpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJEaXNwbGF5UG9pbnRzMjIzMjJcIik7XG4gICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xuICAgICAgICB0aGlzLm1hcGludGVyZmFjZS5jbGVhck1hcmtlcnMoKTtcbiAgICAgICAgalF1ZXJ5KFwiI3N3X19jb250YWluZXJcIikucmVtb3ZlQ2xhc3MoJ3NlYXJjaGluZycpO1xuICAgICAgICB0aGlzLnBpY2t1cFBvaW50c0xvYWRTdG9wKCk7XG4gICAgICAgIGpRdWVyeShcIi5zdy1xdWVyeS1yZXN1bHRzLWRlc2NyaXB0aW9uXCIpLmh0bWwoXCI8ZGl2IGNsYXNzPSdzdy1xdWVyeS1yZXN1bHRzLWRlc2NyaXB0aW9uJz5cIiArIHNoaXB0aW1pemVfdGhlICsgIGRhdGEuQ291bnQgKyBzaGlwdGltaXplX2Nsb3Nlc3QgKyBcIjwvZGl2PlwiKTtcblxuICAgICAgICAvLyAjI0RKREogV1AgZXhjbHVzaXZlIGlzc3VlIGJlY2F1c2Ugb2YgdGhpc1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcblxuICAgICAgICB0aGlzLnBpY2t1cFBvaW50cyA9IGRhdGEuUG9pbnQ7XG4gICAgICAgIHRoaXMubWFwQ2hhbmdlZCA9IERhdGUubm93KCk7XG5cbiAgICAgICAgdGhpcy51cGRhdGVMaXN0KHRoaXMucGlja3VwUG9pbnRzKTtcbiAgICAgICAgdGhpcy5tYXBpbnRlcmZhY2UuYWRkTWFya2Vycyh0aGlzLnBpY2t1cFBvaW50cywgKGlkeCkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJBZGRlZCBtYXJrZXJzXCIpXG4gICAgICAgICAgICBsZXQgcGFyZW50ID0galF1ZXJ5KFwiI3N3LW1hcC1zZWxlY3RlZC1wb2ludFwiKTtcbiAgICAgICAgICAgIHBhcmVudC5odG1sKFwiXCIpO1xuICAgICAgICAgICAgdGhpcy5hZGRQb2ludEluZm8odGhpcy5waWNrdXBQb2ludHNbaWR4XSwgMCwgJycsIHBhcmVudCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcImFkZGVkIHBvaW50IGluZm9cIilcbiAgICAgICAgICAgIHRoaXMubWFwaW50ZXJmYWNlLnNlbGVjdFBvaW50KGlkeCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkFmdGVyIHNlbGVjdCBwb2ludCBicmVha1wiKVxuICAgICAgICB9KTtcblxuXG4gICAgICAgIH0sIDEwMCk7XG5cbiAgICB9O1xuXG5cbiAgICAvKioqXG4gICAgICogR2V0IFBvaW50cyBmcm9tIHRoZSBBUEkgYW5kIGRpc3BsYXkgdGhlbVxuICAgICAqKi9cbiAgICBmZXRjaFBvaW50cyhhZGRyZXNzLCBmcmVzb2x2ZSkge1xuICAgICAgICAvLyAjI0RKREogQWtvIGplIGJsb2NrIG92byBuZSB0cmViYSwgYWtvIG5pamUgb25kYSB0cmViYVxuICAgICAgICBpZiAoIXRoaXMuaXNCbG9ja0NoZWNrb3V0KCkpe1xuICAgICAgICAgICAgdGhpcy5jYXJyaWVyX2lkID0galF1ZXJ5KCcjc2hpcHBpbmdfY2Fycmllcl9pZCcpLnZhbCgpO1xuICAgICAgICAgICAgdGhpcy5zZXRDYXJyaWVySWQoalF1ZXJ5KCcjc2hpcHBpbmdfY2Fycmllcl9pZCcpLnZhbCgpKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRyZXNzLkNvdW50cnkgPSBqUXVlcnkoJyNzaGlwcGluZy1jb3VudHJ5JykudmFsKCk7XG5cbiAgICAgICAgLy8gIyNESkRKIE92byBkb2xlIHUgZWxzZSBqZSB2aXNhayBpemdsZWRhXG4gICAgICAgIC8vIGVsc2Uge1xuICAgICAgICAvLyAgICAgdGhpcy5zZXRDYXJyaWVySWQodGhpcy5jYXJyaWVyX2lkKTtcbiAgICAgICAgLy8gfVxuICAgICAgICBjb25zb2xlLmxvZyhcIkZldGNoUG9pbnRzMjMyMjIyXCIpO1xuICAgICAgICAvLyAjI0RKREogT3ZkZSBzaSBzdGFvLCB0cmViYSBzZSBwcm9zbGVkaXRpIGNhcnJpZXIgaWQgbmVrYWtvXG4gICAgICAgIGNvbnNvbGUubG9nKGFkZHJlc3MpO1xuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmNhcnJpZXJfaWQpO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQb2ludCA9IG51bGw7XG5cbiAgICAgICAgalF1ZXJ5KFwiI3N3LW1hcC1zZWxlY3RlZC1wb2ludFwiKS5odG1sKCcnKTtcbiAgICAgICAgalF1ZXJ5KCcjc3ctbWFwLW1lc3NhZ2UnKS5yZW1vdmVDbGFzcygnb3BlbicpO1xuICAgICAgICBqUXVlcnkoXCIuc3ctcXVlcnktcmVzdWx0cy1kZXNjcmlwdGlvblwiKS5odG1sKCcnKTtcblxuICAgICAgICBpZiAoIXRoaXMubWFwaW50ZXJmYWNlLmlzTWFwTW92aW5nKCkpIHtcbiAgICAgICAgICAgIGpRdWVyeShcIiNzd19fY29udGFpbmVyXCIpLmFkZENsYXNzKCdzZWFyY2hpbmcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgKHRoaXMuY2FjaGVSZXN1bHRzW3RoaXMuaGFzaExhdExuZyh7XG4gICAgICAgICAgICBsYXQ6IHRoaXMub3B0aW9ucy5hZGRyZXNzLkxhdCxcbiAgICAgICAgICAgIGxuZzogdGhpcy5vcHRpb25zLmFkZHJlc3MuTG9uZ1xuICAgICAgICB9KV0pICE9IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiT1ZERUVFRUVcIik7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlSZXN1bHRzKHRoaXMuY2FjaGVSZXN1bHRzW3RoaXMuaGFzaExhdExuZyh7bGF0OiB0aGlzLm9wdGlvbnMuYWRkcmVzcy5MYXQsIGxuZzogdGhpcy5vcHRpb25zLmFkZHJlc3MuTG9uZ30pXSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVxID0ge1xuICAgICAgICAgICAgXCJBZGRyZXNzXCI6IGFkZHJlc3MsXG4gICAgICAgICAgICBcIkNhcnJpZXJJZFwiOiB0aGlzLmNhcnJpZXJfaWQsXG4gICAgICAgICAgICAnYWN0aW9uJzogJ3NoaXB0aW1pemVfcGlja3VwX2xvY2F0aW9ucydcbiAgICAgICAgfTtcblxuICAgICAgICBqUXVlcnkuZ2V0SlNPTih0aGlzLm9wdGlvbnMuYWpheF91cmwsIHJlcSAsICAoZGF0YSkgID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ2FvYW9vbyBuYXNhb29vXCIpO1xuICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy5vcHRpb25zLmFqYXhfdXJsKTtcbiAgICAgICAgICAgIHRoaXMubWFwaW50ZXJmYWNlLmNsZWFyTWFya2VycygpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XG4gICAgICAgICAgICAvKiBXZSBoYXZlIHRoZSBwb2ludHMgcmVtb3ZlIHRoZSBsb2FkZXIgKi9cbiAgICAgICAgICAgIHRoaXMucGlja3VwUG9pbnRzTG9hZFN0b3AoKTtcblxuICAgICAgICAgICAgalF1ZXJ5KFwiI3N3LW1hcC13cmFwcGVyXCIpLnJlbW92ZUNsYXNzKCdsb2FkaW5nJyk7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaFJ1bm5pbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgalF1ZXJ5KFwiI3N3X19jb250YWluZXJcIikucmVtb3ZlQ2xhc3MoJ3NlYXJjaGluZycpO1xuXG4gICAgICAgICAgICB0aGlzLnNlYXJjaFJ1bm5pbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuRXJyb3IgJiYgZGF0YS5FcnJvci5JZCAhPSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5TWVzc2FnZShkYXRhLkVycm9yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEuUG9pbnQpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5Qb2ludC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVSZXN1bHRzW3RoaXMuaGFzaExhdExuZyh7bGF0OiB0aGlzLm9wdGlvbnMuYWRkcmVzcy5MYXQsIGxuZzogdGhpcy5vcHRpb25zLmFkZHJlc3MuTG9uZ30pXSA9IGRhdGE7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheVJlc3VsdHMoZGF0YSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5TWVzc2FnZShzaGlwdGltaXplX25vX3BvaW50c19mb3VuZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIChmcmVzb2x2ZSkgIT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAvKiBXZSB3YW50IHRvIG1ha2Ugc3VyZSBjaGFuZ2VzIGFyZSBjb21taXRlZCB0byB0aGUgZG9tIGJlZm9yZSB3ZSBkZWNsYXJlIHdlJ3JlIGRvbmUgKi9cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9LCAzMDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KS5mYWlsKChlcnIpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheU1lc3NhZ2Uoc2hpcHRpbWl6ZV9ub19wb2ludHNfZm91bmQpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJGYXRhbCBlcnJvciB3aWRnZXQgcmVxdWVzdGluZyBwb2ludHMgZG8gd2UgaGF2ZSBhbiBBUEkgYnVnP1wiLCBlcnIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGdlb2NvZGVRdWVyeSgpIHtcbiAgICAgICAgalF1ZXJ5KFwiI3N3LXF1ZXJ5LXJlc3VsdHNcIikuaHRtbCgnJyk7XG5cbiAgICAgICAgY29uc29sZS5sb2coXCJHZW9jb2RlIHF1ZXJ5XCIpO1xuXG4gICAgICAgIGxldCBxdWVyeXZhbCA9IGpRdWVyeShcIiNzdy1xdWVyeVwiKS52YWwoKTtcblxuICAgICAgICBjb25zb2xlLmxvZyhxdWVyeXZhbCk7XG5cbiAgICAgICAgdGhpcy5vcHRpb25zLmFkZHJlc3MuTGF0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5vcHRpb25zLmFkZHJlc3MuTG9uZyA9IG51bGw7XG5cbiAgICAgICAgaWYgKHF1ZXJ5dmFsLmxlbmd0aCA8IDQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUubG9nKFwiT1ZPVElUUkVCQVwiKTtcbiAgICAgICAgY29uc29sZS5sb2codGhpcy5vcHRpb25zLmFkZHJlc3MpO1xuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLm1hcGludGVyZmFjZSk7XG5cblxuICAgICAgICBjb25zb2xlLmxvZyhcIk9WREUgQ09VTlRSWVwiKTtcblxuICAgICAgICBpZiAoalF1ZXJ5KCcjY29tcG9uZW50cy1mb3JtLXRva2VuLWlucHV0LTAnKS5sZW5ndGgpe1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmFkZHJlc3MuQ291bnRyeSA9IGpRdWVyeSgnI2NvbXBvbmVudHMtZm9ybS10b2tlbi1pbnB1dC0wJykudmFsKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoalF1ZXJ5KFwiI3NoaXBwaW5nLWNvdW50cnkgb3B0aW9uOnNlbGVjdGVkXCIpLmxlbmd0aCl7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuYWRkcmVzcy5Db3VudHJ5ID0galF1ZXJ5KFwiI3NoaXBwaW5nLWNvdW50cnkgb3B0aW9uOnNlbGVjdGVkXCIpLnRleHQoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKGpRdWVyeSgnI3NoaXBwaW5nLWNvdW50cnknKS5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5hZGRyZXNzLkNvdW50cnkgPSBqUXVlcnkoJyNzaGlwcGluZy1jb3VudHJ5IG9wdGlvbjpzZWxlY3RlZCcpLnRleHQoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKGpRdWVyeSgnI3NlbGVjdDItYmlsbGluZ19jb3VudHJ5LWNvbnRhaW5lcicpLmxlbmd0aCA+IDApe1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmFkZHJlc3MuQ291bnRyeSA9IGpRdWVyeSgnI3NlbGVjdDItYmlsbGluZ19jb3VudHJ5LWNvbnRhaW5lcicpLnRleHQoKTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgaWYgKFNISVBUSU1JWkVfUExVR0lOX1VSTC5pbmNsdWRlcygnQnBvc3QnKSAmJiAodGhpcy5vcHRpb25zLmFkZHJlc3MuQ291bnRyeSA9PSAnQkUnIHx8IHRoaXMub3B0aW9ucy5hZGRyZXNzLkNvdW50cnkgPT0gJ2JlJyB8fCB0aGlzLm9wdGlvbnMuYWRkcmVzcy5Db3VudHJ5ID09ICdCZWxnaXVtJykpe1xuICAgICAgICAgICAgdGhpcy5tYXBpbnRlcmZhY2UuZ2VvY29kZUJwb3N0KHtcbiAgICAgICAgICAgICAgICBcImFkZHJlc3NcIjogcXVlcnl2YWwsXG4gICAgICAgICAgICAgICAgXCJjb3VudHJ5XCI6ICdCRSdcbiAgICAgICAgICAgIH0sIChyZXNwKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJHZW9jb2RlZWVlXCIpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3ApO1xuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheVBsYWNlcyhyZXNwKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9ZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm1hcGludGVyZmFjZS5nZW9jb2RlKHtcbiAgICAgICAgICAgICAgICBcImFkZHJlc3NcIjogcXVlcnl2YWwsXG4gICAgICAgICAgICAgICAgXCJjb3VudHJ5XCI6IHRoaXMub3B0aW9ucy5hZGRyZXNzLkNvdW50cnlcbiAgICAgICAgICAgIH0sIChyZXNwKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJHZW9jb2RlZWVlXCIpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3ApO1xuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheVBsYWNlcyhyZXNwKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIHNoaXBwaW5nRGF0YSwgdGhlIGFkZHJlc3MgcGFydHNcbiAgICAgKiBAcGFyYW0gZl9jYWxsYmFjayAsIHRoZSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gYWxsIG1pZ2h0eSBnb29nbGUgcmV0dXJucyBhIHJlc3VsdFxuICAgICAqL1xuICAgIGdlb2NvZGVBZGRyZXNzKGFkZHJlc3MsIGZfY2FsbGJhY2spIHtcbiAgICAgICAgY29uc29sZS5sb2coYWRkcmVzcyk7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiR0VPQ09ERUFERFJFU1NcIik7XG4gICAgICAgIGlmIChhZGRyZXNzLmNvdW50cnkgPT0gJ1BvcnR1Z2FsJyAmJiB0eXBlb2YgKG1pc3NpbmdaaXBQVCkgIT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIC8qIElzIHRoaXMgYSBwb3N0YWwgY29kZSB3ZSBrbm93IGlzIG5vdCBnZW9jb2RhYmxlIGluIG5vbWluYXRpbT8gKi9cbiAgICAgICAgICAgIGxldCB6aXA0ZGlnID0gYWRkcmVzcy5wb3N0Y29kZS5zdWJzdHJpbmcoMCwgNCk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1pc3NpbmdaaXBQVC5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgIGlmIChtaXNzaW5nWmlwUFRbaV0uemlwY29kZSA9PSB6aXA0ZGlnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucXVlcnlSZXN1bHRzID0gW3tcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlfbmFtZTogbWlzc2luZ1ppcFBUW2ldLmRpc3BsYXlfbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhdDogbWlzc2luZ1ppcFBUW2ldLmxhdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxuZzogbWlzc2luZ1ppcFBUW2ldLmxuZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlZXQ6IFwic3RyZWV0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zdGNvZGU6IGFkZHJlc3MucG9zdGNvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2l0eTogbWlzc2luZ1ppcFBUW2ldLmRpc3BsYXlfbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudHJ5X2NvZGU6IGFkZHJlc3MuY291bnRyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfV07XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMucXVlcnlSZXN1bHRzKTtcbiAgICAgICAgICAgICAgICAgICAgZl9jYWxsYmFjayh0aGlzLnF1ZXJ5UmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zb2xlLmxvZyhcIk5pamUgcmVzZW5vXCIpO1xuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLm1hcGludGVyZmFjZSk7XG5cbiAgICAgICAgY29uc29sZS5sb2coXCJBRFJFU0FcIik7XG4gICAgICAgIGNvbnNvbGUubG9nKGFkZHJlc3MpO1xuXG4gICAgICAgIGlmIChTSElQVElNSVpFX1BMVUdJTl9VUkwuaW5jbHVkZXMoJ0Jwb3N0JykgJiYgKGFkZHJlc3MuQ291bnRyeSA9PSAnQkUnIHx8IGFkZHJlc3MuQ291bnRyeSA9PSAnYmUnIHx8IGFkZHJlc3MuQ291bnRyeSA9PSAnQmVsZ2l1bScpKXtcbiAgICAgICAgICAgIHRoaXMubWFwaW50ZXJmYWNlLmdlb2NvZGVBZGRyZXNzUGFydHNCcG9zdCggKGdlb2NvZGUpICA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFnZW9jb2RlLmxhdCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tYXBpbnRlcmZhY2UuZ2VvY29kZUFkZHJlc3NQYXJ0c0Jwb3N0KCAoZ2VvY29kZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZl9jYWxsYmFjayhnZW9jb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgYWRkcmVzcy5DaXR5LCBhZGRyZXNzLkNvdW50cnkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZfY2FsbGJhY2soZ2VvY29kZSk7XG4gICAgICAgICAgICB9LCBhZGRyZXNzLkNpdHksIGFkZHJlc3MuQ291bnRyeSwgYWRkcmVzcy5Qb3N0YWxDb2RlLCBhZGRyZXNzLlN0cmVldG5hbWUxKTtcbiAgICAgICAgfWVsc2Uge1xuICAgICAgICAgICAgdGhpcy5tYXBpbnRlcmZhY2UuZ2VvY29kZUFkZHJlc3NQYXJ0cyggKGdlb2NvZGUpICA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFnZW9jb2RlLmxhdCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tYXBpbnRlcmZhY2UuZ2VvY29kZUFkZHJlc3NQYXJ0cyggKGdlb2NvZGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZfY2FsbGJhY2soZ2VvY29kZSk7XG4gICAgICAgICAgICAgICAgICAgIH0sIGFkZHJlc3MuQ2l0eSwgYWRkcmVzcy5Db3VudHJ5KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmX2NhbGxiYWNrKGdlb2NvZGUpO1xuICAgICAgICAgICAgfSwgYWRkcmVzcy5DaXR5LCBhZGRyZXNzLkNvdW50cnksIGFkZHJlc3MuUG9zdGFsQ29kZSwgYWRkcmVzcy5TdHJlZXRuYW1lMSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgbWFwTW92ZWQobWFwY2VudGVyKSB7XG4gICAgICAgIGpRdWVyeShcIiNzdy1wb2ludC1pbmZvXCIpLmh0bWwoXCJcIik7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuYWRkcmVzcy5MYXQgPSBtYXBjZW50ZXIubGF0O1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmFkZHJlc3MuTG9uZyA9IG1hcGNlbnRlci5sbmc7XG4gICAgICAgICAgICB0aGlzLmZldGNoUG9pbnRzKHRoaXMub3B0aW9ucy5hZGRyZXNzLCByZXNvbHZlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGxvYWRMYWJlbHMoZmNhbGxiYWNrKSB7XG4gICAgICAgIGpRdWVyeS5nZXRKU09OKHRoaXMub3B0aW9ucy5hamF4TG9hZExhYmVscywgKHJlc3ApID0+IHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5sYWJlbHMgPSByZXNwO1xuICAgICAgICAgICAgZmNhbGxiYWNrKHJlc3ApO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLmZhaWwoKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZXJyb3IgZmV0Y2hpbmcgd2lkZ2V0IGxhYmVscyBhdCBcIiArIHRoaXMub3B0aW9ucy5hamF4TG9hZExhYmVscywgZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBsb2FkU2NyaXB0cygpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJMb2FkIHNjcmlwdHMgd2lkZ2V0XCIpO1xuICAgICAgICAvKiBub3QgZGVmaW5lZCBvciB2ZXJzaW9uIDwgMS43IGNvbXBhcmUgb25seSBzdWJ2ZXJzaW9uIGZvciBzaW1wbGljaXR5ICoqL1xuICAgICAgICBpZiAodHlwZW9mIChqUXVlcnkpID09ICd1bmRlZmluZWQnIHx8IChwYXJzZUludChqUXVlcnkuZm4uanF1ZXJ5LnN1YnN0cmluZygyLCAyKSkgPCA3KSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJMb2FkIHNjcmlwdHMgd2lkZ2V0IGlmXCIpO1xuICAgICAgICAgICAgdmFyIG1lID0gdGhpcztcbiAgICAgICAgICAgIHRoaXMubG9hZFNjcmlwdCgnaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTMuNy4wLm1pbi5qcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBtZS5zY3JpcHRzTG9hZGVkKCk7XG4gICAgICAgICAgICAgICAgaWYgKG1lLm9wdGlvbnMub25pbml0KSB7XG4gICAgICAgICAgICAgICAgICAgIG1lLm9wdGlvbnMub25pbml0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcImpxdWVyeSBpcyB3aWRnZXQgbG9hZGVkIGJvb3RzdHJhcFwiKTtcbiAgICAgICAgICAgIHRoaXMuc2NyaXB0c0xvYWRlZCgpO1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5vbmluaXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMub25pbml0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gU3RyaW5nIHVybCAtIHRoZSB1cmwgb2YgdGhlIHNjcmlwdCB0byBsb2FkXG4gICAgICogQHBhcmFtIFN0cmluZyBjYWxsYmFjayAtIHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiB0byBjYWxsIGFmdGVyIHRoZSBzY3JpcHQgaXMgbG9hZGVkXG4gICAgICovXG4gICAgbG9hZFNjcmlwdCh1cmwsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiTG9hZCBTY3JpcHQgd2lkZ2V0IHNpbmd1bGFyXCIpO1xuICAgICAgICB2YXIgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgICAgICAgc2NyaXB0LnR5cGUgPSBcInRleHQvamF2YXNjcmlwdFwiO1xuXG4gICAgICAgIGlmIChzY3JpcHQucmVhZHlTdGF0ZSkgeyAvKklFICovXG4gICAgICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzY3JpcHQucmVhZHlTdGF0ZSA9PSAnbG9hZGVkJyB8fCBzY3JpcHQucmVhZHlTdGF0ZSA9PSAnY29tcGxldGUnKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBjYWxiYWNrICYmIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNjcmlwdC5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBzY3JpcHQuc3JjID0gdXJsO1xuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImhlYWRcIilbMF0uYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgICB9O1xuXG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gc3RyaW5nIHVybFxuICAgICAqL1xuICAgIHN0YXRpYyBsb2FkU3R5bGUodXJsKSB7XG5cbiAgICAgICAgY29uc29sZS5sb2coXCJMT0FERERERCBURVNUVFRUVFRUXCIpO1xuICAgICAgICB2YXIgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJyk7XG4gICAgICAgIHN0eWxlLnJlbCA9ICdzdHlsZXNoZWV0JztcbiAgICAgICAgc3R5bGUuaHJlZiA9IHVybDtcblxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgICB9O1xuXG4gICAgbG9nKG1zZywgZm9yY2UpIHtcbiAgICAgICAgaWYgKCFmb3JjZSAmJiAhdGhpcy5vcHRpb25zLmRlYnVnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zb2xlLmxvZyhtc2cpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBjbGVhciBhbnkgdWkgZWxlbWVudHMgdGhhdCByZXN1bHQgZnJvbSBzZWxlY3Rpb24gYW5kIG90aGVyIHN0YXRlIHZhcmlhYmxlc1xuICAgICAqL1xuICAgIHJlc2V0TWFwRWxlbWVudHMoKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQb2ludCA9IG51bGw7XG5cbiAgICAgICAgalF1ZXJ5KFwiI3N3LW1hcC1zZWxlY3RlZC1wb2ludFwiKS5odG1sKCcnKTtcbiAgICAgICAgalF1ZXJ5KCcjc3ctbWFwLW1lc3NhZ2UnKS5yZW1vdmVDbGFzcygnb3BlbicpO1xuICAgICAgICBqUXVlcnkoXCIuc3ctcXVlcnktcmVzdWx0cy1kZXNjcmlwdGlvblwiKS5odG1sKCcnKTtcbiAgICB9O1xuXG4gICAgb3Blbk1hcCgpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJPcGVuIG1hcCB3aWRnZXQyMzIyMjIyMjY2NjY2NlwiKTtcblxuICAgICAgICBpZiAoIXRoaXMuaXNCbG9ja0NoZWNrb3V0KCkpe1xuICAgICAgICAgICAgdmFyIHBsYXRmb3JtID0gbmV3IFdvb2NvbW1lcmNlKCk7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuYWRkcmVzcyA9IHBsYXRmb3JtLmdldFNoaXBwaW5nRGF0YSgpLkFkZHJlc3M7XG5cbiAgICAgICAgfVxuXG5cbiAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5jYXJyaWVyX2lkKTtcbiAgICAgICAgdGhpcy51c2VyU2Nyb2xsID0galF1ZXJ5KCdodG1sLGJvZHknKVxuICAgICAgICAgICAgLnNjcm9sbFRvcCgpO1xuXG4gICAgICAgIGpRdWVyeSgnaHRtbCxib2R5JylcbiAgICAgICAgICAgIC5zY3JvbGxUb3AoMCk7XG5cbiAgICAgICAgalF1ZXJ5KFwiI3N3XCIpXG4gICAgICAgICAgICAuYWRkQ2xhc3MoXCJvcGVuXCIpO1xuICAgICAgICBqUXVlcnkoXCIjc3ctbWFwLXdyYXBwZXJcIikuYWRkQ2xhc3MoJ2xvYWRpbmcnKTtcblxuICAgICAgICBjb25zb2xlLmxvZyhcIk92ZGVlZSAxXCIpO1xuXG4gICAgICAgIGpRdWVyeShcIiNzdy1xdWVyeVwiKS52YWwodGhpcy5vcHRpb25zLmFkZHJlc3MuU3RyZWV0bmFtZTEpO1xuICAgICAgICB0aGlzLnNlbGVjdERpc3BsYXlPcHRpb24oMCk7XG5cbiAgICAgICAgY29uc29sZS5sb2coXCJPdmRlZWUgM1wiKTtcbiAgICAgICAgY29uc29sZS5sb2codGhpcy5vcHRpb25zLmFkZHJlc3MpXG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5hZGRyZXNzLlN0cmVldG5hbWUxKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkltYSB1bGljdVwiKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5vcHRpb25zLmFkZHJlc3MubGF0KSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJOZW1hIGxhdFwiKTtcbiAgICAgICAgICAgICAgICB0aGlzLmdlb2NvZGVBZGRyZXNzKHRoaXMub3B0aW9ucy5hZGRyZXNzLCAoZ2VvKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiR0VPT09PT09PT1wiKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZ2VvKTtcbiAgICAgICAgICAgICAgICAgICAgZ2VvLmxlbmd0aCAmJiAoZ2VvID0gZ2VvWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmFkZHJlc3MuTGF0ID0gZ2VvLmxhdDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmFkZHJlc3MuTG9uZyA9IGdlby5sbmc7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiR0VPQ09ERTIyMlwiKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy5vcHRpb25zLmFkZHJlc3MpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZldGNoUG9pbnRzKHRoaXMub3B0aW9ucy5hZGRyZXNzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJOZW1hIHVsaWN1IGkgaWRlIHUgZmV0Y2hcIik7XG4gICAgICAgICAgICAgICAgdGhpcy5mZXRjaFBvaW50cyh0aGlzLm9wdGlvbnMuYWRkcmVzcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZ2V0U2hpcHBpbmdEYXRhKCl7XG4gICAgICAgIGxldCBzaGlwcGluZ0RhdGEgPSBbXTtcbiAgICAgICAgdGhpcy5nZXRCbG9ja1NoaXBwaW5nRGF0YSgpO1xuICAgICAgICBzaGlwcGluZ0RhdGFbXCJBZGRyZXNzXCJdID0gdGhpcy5vcHRpb25zLmFkZHJlc3M7XG4gICAgICAgIC8vIHNoaXBwaW5nRGF0YVtcIkNhcnJpZXJJZFwiXSA9IHRoaXMuY2Fycmllcl9pZDtcbiAgICAgICAgcmV0dXJuIHNoaXBwaW5nRGF0YTtcbiAgICB9XG5cbiAgICBnZXRCbG9ja1NoaXBwaW5nRGF0YSgpe1xuICAgICAgICB2YXIgYWRkcmVzcyA9IGpRdWVyeSgnI3NoaXBwaW5nLWFkZHJlc3NfMScpLnZhbCgpO1xuICAgICAgICB2YXIgYXBhcnRtZW50ID0galF1ZXJ5KCcjc2hpcHBpbmctYWRkcmVzc18yJykudmFsKCk7XG4gICAgICAgIHZhciBjaXR5ID0galF1ZXJ5KCcjc2hpcHBpbmctY2l0eScpLnZhbCgpO1xuICAgICAgICB2YXIgcG9zdGFsQ29kZSA9IGpRdWVyeSgnI3NoaXBwaW5nLXBvc3Rjb2RlJykudmFsKCk7XG5cbiAgICAgICAgLy8gRXh0cmFjdGluZyBDb3VudHJ5XG4gICAgICAgIHZhciBjb3VudHJ5ID0galF1ZXJ5KCcjY29tcG9uZW50cy1mb3JtLXRva2VuLWlucHV0LTAnKS52YWwoKTtcblxuXG4gICAgICAgIGlmIChjb3VudHJ5ID09IFwiXCIpe1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJDT1VOVFJZIEVNUFRZXCIpO1xuICAgICAgICAgICAgalF1ZXJ5KCdpbnB1dFthcmlhLWxhYmVsKj1cIkNvdW50cnkvUmVnaW9uXCJdJykuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBjb3VudHJ5ID0galF1ZXJ5KHRoaXMpLnZhbCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1lbHNlIGlmKGNvdW50cnkgPT0gXCJcIil7XG4gICAgICAgICAgICBjb3VudHJ5ID0galF1ZXJ5KCcjc2hpcHBpbmctY291bnRyeSBvcHRpb246c2VsZWN0ZWQnKS50ZXh0KClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUubG9nKFwiQkxPQ0sgU0hJUFBJTkcgREFUQSBPTiBHRVQgQkxPQ0sgU0hJUFBJTkcgREFUQVwiKTtcbiAgICAgICAgY29uc29sZS5sb2coY291bnRyeSk7XG5cbiAgICAgICAgd2luZG93LnNoaXB0aW1pemVfc2hpcHBpbmdfYWRkcmVzcyA9XG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiQWRkcmVzc1wiOntcbiAgICAgICAgICAgICAgICBcIkxhdFwiOiBcIlwiLFxuICAgICAgICAgICAgICAgIFwiTG9uZ1wiOiBcIlwiLFxuICAgICAgICAgICAgICAgIFwiU3RyZWV0bmFtZTFcIjogYWRkcmVzcyxcbiAgICAgICAgICAgICAgICBcIlN0cmVldG5hbWUyXCI6ICcnLFxuICAgICAgICAgICAgICAgIFwiSG91c2VOdW1iZXJcIjogYXBhcnRtZW50LFxuICAgICAgICAgICAgICAgIFwiTnVtYmVyRXh0ZW5zaW9uXCI6ICcnLFxuICAgICAgICAgICAgICAgIFwiUG9zdGFsQ29kZVwiOiBwb3N0YWxDb2RlLFxuICAgICAgICAgICAgICAgIFwic19wb3N0Y29kZVwiOiBwb3N0YWxDb2RlLFxuICAgICAgICAgICAgICAgIFwiQ2l0eVwiOiBjaXR5LFxuICAgICAgICAgICAgICAgIFwiQ291bnRyeVwiOiBjb3VudHJ5LFxuICAgICAgICAgICAgICAgIFwiU3RhdGVcIjogJycsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLm9wdGlvbnMuYWRkcmVzcyA9IHdpbmRvdy5zaGlwdGltaXplX3NoaXBwaW5nX2FkZHJlc3MuQWRkcmVzcztcblxuICAgIH1cblxuICAgIHBpY2t1cFBvaW50c0xvYWRTdG9wKCkge1xuICAgICAgICBqUXVlcnkoXCIjc3ctbWFwLXdyYXBwZXJcIikucmVtb3ZlQ2xhc3MoJ2xvYWRpbmcnKTtcbiAgICAgICAgdGhpcy5zZWFyY2hSdW5uaW5nID0gZmFsc2U7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqICBSZXNldHMgdGhlIHNlbGVjdGVkIHBvaW50IHRvIG51bGxcbiAgICAgKiovXG4gICAgcmVzZXRTZWxlY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQb2ludCA9IG51bGw7XG4gICAgfTtcblxuICAgIHNlbGVjdFBvaW50KHBpY2t1cCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIlNlbGVjdCBQT0lOVFwiKTtcbiAgICAgICAgY29uc29sZS5sb2cocGlja3VwKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFBvaW50ID0gcGlja3VwO1xuXG4gICAgICAgIGlmIChqUXVlcnkoJyNzaGlwdGltaXplLXBpY2t1cF9fZGVzY3JpcHRpb24nKS5sZW5ndGggJiYgalF1ZXJ5KCcjc2hpcHRpbWl6ZS1waWNrdXBfX2Rlc2NyaXB0aW9uJykuaXMoJzpoaWRkZW4nKSkge1xuICAgICAgICAgICAgalF1ZXJ5KCcjc2hpcHRpbWl6ZS1waWNrdXBfX2Rlc2NyaXB0aW9uJykuc2hvdygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGpRdWVyeSgnLnNoaXB0aW1pemUtcGlja3VwX19kZXNjcmlwdGlvbicpLmxlbmd0aCAmJiBqUXVlcnkoJy5zaGlwdGltaXplLXBpY2t1cF9fZGVzY3JpcHRpb24nKS5pcygnOmhpZGRlbicpKSB7XG4gICAgICAgICAgICBqUXVlcnkoJy5zaGlwdGltaXplLXBpY2t1cF9fZGVzY3JpcHRpb24nKS5zaG93KCk7XG4gICAgICAgIH1cblxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnU2hpcHRpbWl6ZVBvaW50SWQnLCBwaWNrdXAuUG9pbnRJZCk7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdTaGlwdGltaXplUG9pbnRMYWJlbCcsIHBpY2t1cC5JbmZvcm1hdGlvbi5OYW1lKTtcblxuICAgICAgICAvKiogV2hhdCB2aWV3IGFyZSB3ZSBvbiA/ICoqL1xuICAgICAgICBsZXQgZUZpZWxkSW5mbyA9IGpRdWVyeShcIiNzdy1tYXAtc2VsZWN0ZWQtcG9pbnRcIik7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRGlzcGxheU9wdGlvbiA9PSAxKSB7XG4gICAgICAgICAgICBlRmllbGRJbmZvID0galF1ZXJ5KFwiI3N3LWxpc3QtcG9pbnRzXCIpO1xuICAgICAgICB9XG4gICAgICAgIC8qIFZhbGlkYXRlIGlmIHRoaXMgcG9pbnQgcmVxdWlyZXMgYWRpdGlvbmFsIGluZm8gdGhhdCdzIG5vdCBwcmVzZW50IGZhaWwgaGVyZSAqL1xuICAgICAgICBpZiAodHlwZW9mIChwaWNrdXAuTWFwRmllbGRzU2VsZWN0KSAhPSAndW5kZWZpbmVkJyAmJiBwaWNrdXAuTWFwRmllbGRzU2VsZWN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGxldCBleHRyYXNWYWxpZCA9IHRydWU7XG4gICAgICAgICAgICBlRmllbGRJbmZvLmZpbmQoJy5zaGlwdGltaXplX21hcGZpZWxkcycgKyBwaWNrdXAuUG9pbnRJZCkuZWFjaCgoaWR4LCBlbGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGVFeHRyYSA9IGpRdWVyeShlbGVtKTtcblxuICAgICAgICAgICAgICAgIGlmICghZUV4dHJhLnZhbCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFsZXJ0KGpRdWVyeShqUXVlcnkoJy5zaGlwdGltaXplX21hcGZpZWxkc2xhYmVsJyArIHBpY2t1cC5Qb2ludElkKS5nZXQoaWR4KSkudGV4dCgpICsgJzogJyArIHRoaXMub3B0aW9ucy5sYWJlbHMubWFwZmllbGRtYW5kYXRvcnkpO1xuICAgICAgICAgICAgICAgICAgICBleHRyYXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoIWV4dHJhc1ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJwb2ludCBzZWxlY3Rpb24gd2lkZ2V0IGlzIG5vdCB2YWxpZCwgaWdub3JpbmdcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5sb2coIGpRdWVyeShcIi5zaGlwdGltaXplLXBpY2t1cF9fZGVzY3JpcHRpb25cIikpO1xuICAgICAgICBqUXVlcnkoXCIuc2hpcHRpbWl6ZS1waWNrdXBfX2Rlc2NyaXB0aW9uXCIpXG4gICAgICAgICAgICAuaHRtbChwaWNrdXAuSW5mb3JtYXRpb24uTmFtZSArIFwiIFwiICsgcGlja3VwLkluZm9ybWF0aW9uLkFkZHJlc3MpO1xuXG4gICAgICAgIGNvbnN0IHBpY2t1cFBvaW50ID0ge1xuICAgICAgICAgICAgaWRfY2FycmllcjogdGhpcy5jYXJyaWVyX2lkLFxuICAgICAgICAgICAgcGlja3VwX2lkOiB0aGlzLnNlbGVjdGVkUG9pbnQuUG9pbnRJZCxcbiAgICAgICAgICAgIHBpY2t1cF9sYWJlbDogKHRoaXMuc2VsZWN0ZWRQb2ludC5JbmZvcm1hdGlvbi5OYW1lID8gdGhpcy5zZWxlY3RlZFBvaW50LkluZm9ybWF0aW9uLk5hbWUgKyAnPGJyLz4nIDogJycpICtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUG9pbnQuSW5mb3JtYXRpb24uQWRkcmVzcyxcbiAgICAgICAgICAgIGFjdGlvbjogJ3NoaXB0aW1pemVfc2F2ZV9waWNrdXAnXG4gICAgICAgIH07XG5cbiAgICAgICAgLypJcyB0aGVyZSBleHRyYSBpbmZvIHdlIHdhbnQgdG8gYXBwZW5kPyAqL1xuICAgICAgICBlRmllbGRJbmZvLmZpbmQoXCIuc2hpcHRpbWl6ZV9tYXBmaWVsZHNcIiArIHRoaXMuc2VsZWN0ZWRQb2ludC5Qb2ludElkKS5lYWNoKGZ1bmN0aW9uIChpZHgsIGVsZW0pIHtcbiAgICAgICAgICAgIGxldCBmaWVsZGlkID0galF1ZXJ5KGVsZW0pLmF0dHIoJ2RhdGEtaWQnKTtcbiAgICAgICAgICAgIGxldCBmaWVsZHZhbHVlID0galF1ZXJ5KGVsZW0pLnZhbCgpO1xuICAgICAgICAgICAgcGlja3VwUG9pbnRbJ09wdGlvbkZpZWxkcyddLnB1c2goe0lkOiBmaWVsZGlkLCBWYWx1ZTogZmllbGR2YWx1ZX0pO1xuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oZmllbGRpZCArICd2YWwnLCBmaWVsZHZhbHVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiAodGhpcy5vcHRpb25zLmFqYXhfdXJsKSA9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJPdmRlZWVlXCIpO1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLm9uUG9pbnRTZWxlY3RlZChwaWNrdXAsICcnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucGxhdGZvcm0uc2V0UGlja3VwUG9pbnQocGlja3VwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2xvc2VNYXAoKTtcbiAgICAgICAgalF1ZXJ5KFwiI215TW9kYWxcIikuaGlkZSgpO1xuICAgICAgICBqUXVlcnkoJyNwbGFjZV9vcmRlcicpLnByb3AoJ2Rpc2FibGVkJywgZmFsc2UpO1xuICAgICAgICBqUXVlcnkoJyNwaWNrdXBUZXh0JykuaGlkZSgpO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiAgQSBQb2ludCB3YXMgc2VsZWN0ZWRcbiAgICAgKiAgQHBhcmFtIGlkeCAtIGludGVnZXIgdGhlIHNlbGVjdGVkIGluZGV4XG4gICAgICoqL1xuICAgIHNlbGVjdFBvaW50RnJvbUxpc3QoaWR4KSB7XG4gICAgICAgIGlmIChpZHggPiB0aGlzLnBpY2t1cFBvaW50cy5sZW5ndGggfHwgaWR4IDwgMCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJwb2ludFNlbGVjdGVkIGludmFsaWQgd2lkZ2V0IGluZGV4IFwiICsgaWR4LCAxKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2VsZWN0UG9pbnQodGhpcy5waWNrdXBQb2ludHNbaWR4XSk7XG4gICAgfTtcblxuXG4gICAgLyoqKlxuICAgICAqIFNlbGVjdCB0aGUgZGlzcGxheSBvcHRpb25cbiAgICAgKiBAcGFyYW0gaWR4IC0gaW50IC0gIDA6IG1hcCwgMTogbGlzdFxuICAgICAqL1xuICAgIHNlbGVjdERpc3BsYXlPcHRpb24oaWR4KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiU0VMRUNURElTUE9QVElPTlwiKTtcbiAgICAgICAgY29uc29sZS5sb2coaWR4KTtcblxuICAgICAgICBsZXQgZW9wdGlvbnMgPSBqUXVlcnkoXCIuc3ctZGlzcGxheS1vcHRpb24sIC5zdy10YWJcIik7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWREaXNwbGF5T3B0aW9uID0gaWR4O1xuICAgICAgICBlb3B0aW9ucy5yZW1vdmVDbGFzcygnc2VsZWN0ZWQnKTtcbiAgICAgICAgalF1ZXJ5KGVvcHRpb25zLmdldChpZHgpKS5hZGRDbGFzcygnc2VsZWN0ZWQnKTtcbiAgICAgICAgalF1ZXJ5KGpRdWVyeShcIi5zdy10YWJcIikuZ2V0KGlkeCkpLmFkZENsYXNzKCdzZWxlY3RlZCcpO1xuXG4gICAgICAgIGlmIChpZHggPT0gMCAmJiAgdHlwZW9mICh0aGlzLm1hcGludGVyZmFjZSkgIT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5tYXBpbnRlcmZhY2UucGlja3VwUG9pbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMubWFwaW50ZXJmYWNlLmZpdEJvdW5kcygpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFJlc2V0IHRoZSBsYWJlbHMgaW5pdGlhbGx5IHNlbnQgd2l0aCBvcHRpb25zXG4gICAgICovXG4gICAgc2V0TGFiZWxzKGxhYmVscykge1xuICAgICAgICB0aGlzLm9wdGlvbnMubGFiZWxzID0gbGFiZWxzO1xuICAgIH07XG5cbiAgICBzZXRXZWVrZGF5TmFtZXMod2Vla2RheW5hbWVzKSB7XG4gICAgICAgIHRoaXMud2Vla2RheW5hbWVzID0gd2Vla2RheW5hbWVzO1xuICAgIH07XG5cbiAgICBzZXRDYXJyaWVySWQoY2Fycmllcl9pZCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIlNldGNhcnJpZXJpZFwiKTtcbiAgICAgICAgY29uc29sZS5sb2coY2Fycmllcl9pZCk7XG4gICAgICAgIHRoaXMuY2Fycmllcl9pZCA9IGNhcnJpZXJfaWQ7XG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMubWFwaW50ZXJmYWNlKTtcbiAgICAgICAgdGhpcy5tYXBpbnRlcmZhY2Uuc2V0Q2FycmllcklkKGNhcnJpZXJfaWQpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gYWRkcmVzcyAtIG9iamVjdCBpbiB0aGUgc2FtZSBmb3JtYXQgYXMgd2Ugc2VuZCB0byB0aGUgQVBJXG4gICAgICpcbiAgICAgKiovXG4gICAgc2V0QWRkcmVzcyhhZGRyZXNzKSB7XG4gICAgICAgIGlmICghYWRkcmVzcy5TdHJlZXRuYW1lMSB8fCAhYWRkcmVzcy5OYW1lKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcImludmFsaWQgYWRkcmVzcyB3aWRnZXQgXCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub3B0aW9ucy5hZGRyZXNzID0gYWRkcmVzcztcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3NoaXB0aW1pemVBZGRyZXNzJywgSlNPTi5zdHJpbmdpZnkoYWRkcmVzcykpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBDYWxsZWQgd2hlbiBsb2FkIHNjcmlwdHMgZW5kcyB3ZSBtdXN0IGdyYW50IHRoYXQganF1ZXJ5IGV4aXN0c1xuICAgICAqL1xuICAgIHNjcmlwdHNMb2FkZWQoKSB7XG4gICAgICAgIHRoaXMuZVNlYXJjaFN0YXR1cyA9IGpRdWVyeShcIiNzZWFyY2gtc3RhdHVzXCIpO1xuICAgICAgICB0aGlzLmFkZE1hcEh0bWwoKTtcblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmdtYXBza2V5KSB7XG4gICAgICAgICAgICB0aGlzLm1hcGludGVyZmFjZSA9IG5ldyBTaGlwdGltaXplR21hcHModGhpcy5vcHRpb25zLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubWFwaW50ZXJmYWNlID0gbmV3IFNoaXB0aW1pemVPcGVuTWFwMih0aGlzLm9wdGlvbnMsIHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWFwaW50ZXJmYWNlLmluaXRNYXAoKTtcbiAgICAgICAgdGhpcy5tYXBpbnRlcmZhY2UuYWRkTWFwTW92ZUxpc3RlbmVyKChtYXBjZW50ZXIpID0+IHsgcmV0dXJuIHRoaXMubWFwTW92ZWQobWFwY2VudGVyKTsgfSk7XG4gICAgfTtcblxuXG4gICAgdXBkYXRlTGlzdChwb2ludHMpIHtcbiAgICAgICAgalF1ZXJ5KFwiI3N3LWxpc3QtcG9pbnRzXCIpLmh0bWwoJycpO1xuICAgICAgICBsZXQgcGFyZW50ID0galF1ZXJ5KFwiI3N3LWxpc3QtcG9pbnRzXCIpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB0aGlzLmFkZFBvaW50SW5mbyhwb2ludHNbaV0sIDAsICcnLCBwYXJlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGlzYWJsZUJ1dHRvbigpe1xuICAgICAgICBqUXVlcnkoJy53Yy1ibG9jay1jb21wb25lbnRzLWNoZWNrb3V0LXBsYWNlLW9yZGVyLWJ1dHRvbicpLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7XG5cbiAgICAgICAgLy8gQWRkIENTUyBzdHlsZXMgZm9yIHRoZSBkaXNhYmxlZCBzdGF0ZVxuICAgICAgICBqUXVlcnkoJy53Yy1ibG9jay1jb21wb25lbnRzLWNoZWNrb3V0LXBsYWNlLW9yZGVyLWJ1dHRvbicpLmNzcyh7XG4gICAgICAgICAgICAnYmFja2dyb3VuZC1jb2xvcic6ICdncmV5JyxcbiAgICAgICAgICAgICdjdXJzb3InOiAnbm90LWFsbG93ZWQnLFxuICAgICAgICAgICAgJ29wYWNpdHknOiAnMC41JyAgLy8gT3B0aW9uYWw6IHRvIGdpdmUgaXQgYSBtb3JlIGRpc2FibGVkIGxvb2tcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZW5hYmxlQnV0dG9uKCl7XG4gICAgICAgIGpRdWVyeSgnLndjLWJsb2NrLWNvbXBvbmVudHMtY2hlY2tvdXQtcGxhY2Utb3JkZXItYnV0dG9uJykucHJvcCgnZGlzYWJsZWQnLCBmYWxzZSk7XG5cbiAgICAgICAgLy8gUmVzZXQgQ1NTIHN0eWxlcyBmb3IgdGhlIGVuYWJsZWQgc3RhdGVcbiAgICAgICAgalF1ZXJ5KCcud2MtYmxvY2stY29tcG9uZW50cy1jaGVja291dC1wbGFjZS1vcmRlci1idXR0b24nKS5jc3Moe1xuICAgICAgICAgICAgJ2JhY2tncm91bmQtY29sb3InOiAnYmxhY2snLFxuICAgICAgICAgICAgJ2N1cnNvcic6ICdwb2ludGVyJyxcbiAgICAgICAgICAgICdvcGFjaXR5JzogJzEnICAvLyBSZXNldCBvcGFjaXR5IHRvIG1ha2UgaXQgZnVsbHkgdmlzaWJsZVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0U2hpcHBpbmdNZXRob2RDaGVuZ2UoKSB7XG4gICAgICAgIGpRdWVyeShkb2N1bWVudCkucmVhZHkoKCkgPT4ge1xuICAgICAgICAgICAgalF1ZXJ5KFwiI3NoaXB0aW1pemVfcGlja3VwX2J1dHRvblwiKS5yZW1vdmUoKTtcbiAgICAgICAgICAgIHZhciBjaGVja1Zpc2liaWxpdHkgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIGlucHV0RWxlbWVudCA9ICBqUXVlcnkoXCJpbnB1dFtuYW1lPSdyYWRpby1jb250cm9sLTAnXVwiKTtcblxuICAgICAgICAgICAgICAgIGlmIChpbnB1dEVsZW1lbnQuaXMoJzp2aXNpYmxlJykpIHtcblxuICAgICAgICAgICAgICAgICAgICAvLyBUaGUgaW5wdXQgZWxlbWVudCBpcyB2aXNpYmxlLCB5b3UgY2FuIHByb2NlZWQgd2l0aCB5b3VyIHNjcmlwdFxuICAgICAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKGNoZWNrVmlzaWJpbGl0eSk7IC8vXG4gICAgICAgICAgICAgICAgICAgIGlucHV0RWxlbWVudC5vbignY2hhbmdlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJTaGlwcGluZyBtZXRob2QgY2hhbmdlZDIyMjIyMjIyMjIyMjIyMlwiKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFyaWEgPSBqUXVlcnkoXCJpbnB1dFtuYW1lPSdyYWRpby1jb250cm9sLTAnXTpjaGVja2VkXCIpLmF0dHIoJ2FyaWEtZGVzY3JpYmVkYnknKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlZ2V4ID0gL3NoaXBwaW5nX3NoaXB0aW1pemVfWzAtOV0rOlswLTldKy87XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpbmQgdGhlIG1hdGNoIHVzaW5nIHRoZSByZWd1bGFyIGV4cHJlc3Npb25cbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtYXRjaCA9IGFyaWEubWF0Y2gocmVnZXgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPT0gbnVsbCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVxID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhY3Rpb24nOiAnc2hpcHRpbWl6ZV9zZWxlY3RlZF9jYXJyaWVyX2Zyb21fbGlzdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NlbGVjdGVkX2NhcnJpZXJfY29kZSc6IG1hdGNoWzBdXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZ2V0SlNPTih0aGlzLm9wdGlvbnMuYWpheF91cmwsIHJlcSAsICAoZGF0YSkgID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlZyYXRpIGdhIGtyYWxqdVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2Fycmllcl9pZCA9IGRhdGEuY2Fycmllcl9pZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuY2Fycmllcl9pZCA9IGRhdGEuY2Fycmllcl9pZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKDEyMyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KFwiI3NoaXB0aW1pemVfcGlja3VwX2J1dHRvblwiKS5yZW1vdmUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIG5vdCB2aXNpYmxlLCBhZGQgdGhlIGJ1dHRvbiBiYWNrXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGlucHV0RWxlbWVudCA9IGpRdWVyeShcIi53Yy1ibG9jay1jb21wb25lbnRzLXNoaXBwaW5nLXJhdGVzLWNvbnRyb2xfX3BhY2thZ2VcIik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAjI0RKREogT3ZkZWVlIGlzdG8gdHJhemkgcG8gdmFyaWFibGkgc2hpcHRpbWl6ZV9jaG9vc2VfcGlja3VwX2xvY2F0aW9uIGFrbyBzZSBwb2t2YXJpIG5lc3RvLiBQcm92ZXJpdGkgc3V0cmE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGJ1dHRvbiA9IGpRdWVyeShcIjxidXR0b24gY2xhc3M9J2J1dHRvbiBhbHQgc2hpcHRpbWl6ZS1waWNrLWxvY2F0aW9uJyB0eXBlPSdidXR0b24nIGlkPSdzaGlwdGltaXplX3BpY2t1cF9idXR0b24nIG9uQ2xpY2s9J3NoaXB0aW1pemUuZ2V0UGlja3VwTG9jYXRpb25zKGV2ZW50KSc+XCIgKyBzaGlwdGltaXplX2Nob29zZV9waWNrdXBfbG9jYXRpb24gKyBcIjwvYnV0dG9uPlwiKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0RWxlbWVudFswXS5hcHBlbmQoYnV0dG9uWzBdKTsgLy8gQWRqdXN0IHRoZSB0YXJnZXQgY29udGFpbmVyIGlmIG5lY2Vzc2FyeVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBnZXROb3RCbG9ja0Zvcm1DaGFuZ2UoKSB7XG5cbiAgICAgICAgalF1ZXJ5KCdmb3JtW25hbWU9XCJjaGVja291dFwiXSBpbnB1dCcpLmNoYW5nZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIC8vIHZhciBmaWVsZE5hbWUgPSBqUXVlcnkodGhpcykuYXR0cignbmFtZScpO1xuICAgICAgICAgICAgdmFyIHBsYXRmb3JtID0gbmV3IFdvb2NvbW1lcmNlKCk7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuYWRkcmVzcyA9IHBsYXRmb3JtLmdldFNoaXBwaW5nRGF0YSgpO1xuICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy5vcHRpb25zLmFkZHJlc3MpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJGb3JtIGNoYW5nZWRcIik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldFdvcmtpbmdEYXlzKHdvcmtpbmdIb3Vycykge1xuICAgICAgICBpZiAoIXdvcmtpbmdIb3Vycykge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF5R3JvdXBzID0gW107XG4gICAgICAgIGxldCBodG1sSG91cnMgPSAnJztcblxuICAgICAgICBmb3IgKGxldCBkYXkgPSAwOyBkYXkgPCA3OyBkYXkrKykge1xuICAgICAgICAgICAgaWYgKHdvcmtpbmdIb3Vyc1tkYXldKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaG91clN0cmluZyA9IHRoaXMuZm9ybWF0V29ya2luZ0hvdXJzKHdvcmtpbmdIb3Vyc1tkYXldKTtcbiAgICAgICAgICAgICAgICBjb25zdCBsYXN0R3JvdXAgPSBkYXlHcm91cHNbZGF5R3JvdXBzLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgICAgICAgICAgaWYgKGxhc3RHcm91cCAmJiBsYXN0R3JvdXAuaG91cnMgPT09IGhvdXJTdHJpbmcgJiYgbGFzdEdyb3VwLmVuZCArIDEgPT09IGRheSkge1xuICAgICAgICAgICAgICAgICAgICBsYXN0R3JvdXAuZW5kID0gZGF5O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRheUdyb3Vwcy5wdXNoKHsgc3RhcnQ6IGRheSwgZW5kOiBkYXksIGhvdXJzOiBob3VyU3RyaW5nIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGRheUdyb3Vwcy5mb3JFYWNoKGdyb3VwID0+IHtcbiAgICAgICAgICAgIC8qKiBWYWxpZCBob3VyIGludGVydmFscyBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIG51bWJlciAqKi9cbiAgICAgICAgICAgIGlmIChncm91cC5ob3Vycy5tYXRjaCgvXFxkKy8pICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF5UmFuZ2UgPSBncm91cC5zdGFydCA9PT0gZ3JvdXAuZW5kID8gdGhpcy5nZXREYXlOYW1lKGdyb3VwLnN0YXJ0KSA6IGAke3RoaXMuZ2V0RGF5TmFtZShncm91cC5zdGFydCl9IC0gJHt0aGlzLmdldERheU5hbWUoZ3JvdXAuZW5kKX1gO1xuICAgICAgICAgICAgICAgIGh0bWxIb3VycyArPSBgPGRpdiBjbGFzcz1cInN3LXBvaW50LWluZm8tZGF5XCIgc3R5bGU9XCJtYXJnaW4tYm90dG9tOiAtMTBweFwiPjxsYWJlbD4ke2RheVJhbmdlfTwvbGFiZWw+OiAke2dyb3VwLmhvdXJzfTwvZGl2PmA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBodG1sSG91cnM7XG4gICAgfVxuXG4gICAgZm9ybWF0V29ya2luZ0hvdXJzKGhvdXJJbnRlcnZhbHMpIHtcbiAgICAgICAgcmV0dXJuIGhvdXJJbnRlcnZhbHMubWFwKGhvdXIgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGhvdXIuT3BlblRpbWUgJiYgaG91ci5DbG9zZVRpbWUgPyBgJHtob3VyLk9wZW5UaW1lfSAtICR7aG91ci5DbG9zZVRpbWV9YCA6ICcnO1xuICAgICAgICB9KS5maWx0ZXIoQm9vbGVhbikuam9pbihcIiB8IFwiKTsgICAgfVxuXG4gICAgZ2V0RGF5TmFtZShkYXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2Vla2RheW5hbWVzW2RheV07XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTaGlwdGltaXplV2lkZ2V0OyIsImltcG9ydCAnLi9zY3NzL3NoaXB0aW1pemUuc2Nzcyc7XG5pbXBvcnQgJy4vY3NzL2xlYWZsZXQuY3NzJztcblxuaW1wb3J0IFdvb0NvbW1lcmNlIGZyb20gJy4vanMvc2hpcHRpbWl6ZS13b28tY29tbWVyY2UuanMnO1xuXG5pbXBvcnQgU2hpcHRpbWl6ZVdpZGdldCBmcm9tIFwiLi9qcy9zaGlwdGltaXplLXdpZGdldFwiO1xuLyoqIFxuICogQ2xhc3MgU2hpcHRpbWl6ZSBkZXBlbmRzIG9uIGpRdWVyeS4gXG4gKiBDaGVjayBpZiB3ZSBhcmUgbWVhbnQgdG8gYXBwZW5kIGEgbWFwIFxuICogXG4gKiBQbGF0Zm9ybSBkZXBlbmRlbnQgZnVuY3Rpb25zIG1hcmtlZCB3aXRoICAgKiBAcGxhdGZvcm1EZXBlbmRlbnQgXG4gKi9cbmNsYXNzIFNoaXB0aW1pemUge1xuXG4gICAgY29uc3RydWN0b3IoYWpheF91cmwpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJTSElQVElNSVpFQ09OU1RSVUNUXCIpO1xuICAgICAgICB0aGlzLm1hcmtlcnMgPSBbXTsgLy9waWNrdXAge2xhdCwgbG5nfSBcbiAgICAgICAgdGhpcy5pc01hcExvYWRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmdtYXBzX2tleSA9IHR5cGVvZihzaGlwdGltaXplX21hcHNfa2V5KSA9PSAndW5kZWZpbmVkJyA/ICAnJyA6IHNoaXB0aW1pemVfbWFwc19rZXkgO1xuICAgICAgICB0aGlzLm9wZW5NYXBNYXJrZXJJY29ucyA9IHt9O1xuICAgICAgICB0aGlzLmFqYXhfdXJsID0gYWpheF91cmw7IC8vIHBsYXRmb3JtIGRlcGVuZGVudCBcblxuICAgICAgICB0aGlzLnBsYXRmb3JtID0gbmV3IFdvb0NvbW1lcmNlKHRoaXMuYWpheF91cmwpO1xuXG4gICAgICAgIHRoaXMucGxhdGZvcm0uaXNDaGVja291dCgpO1xuICAgICAgICB0aGlzLmluaXQoKTtcbiAgICB9XG5cbiAgICBpbml0KCl7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiRW50ZXJlZCBpbml0XCIpO1xuICAgICAgICB0aGlzLnNoaXB0aW1pemVXaWRnZXQgPSBuZXcgU2hpcHRpbWl6ZVdpZGdldCh7XG4gICAgICAgICAgICBcImhvc3RcIjogJ2h0dHBzOi8vc2hpcHRpbWl6ZS5tZScsXG4gICAgICAgICAgICBcImFkZHJlc3NcIjogdGhpcy5wbGF0Zm9ybS5nZXRTaGlwcGluZ0RhdGEoKS5BZGRyZXNzLFxuICAgICAgICAgICAgXCJsYWJlbHNcIjp7fSxcbiAgICAgICAgICAgIFwibWFwUGFyZW50Q29udGFpbmVyXCI6J2JvZHknLFxuICAgICAgICAgICAgXCJidXR0b25QYXJlbnRDb250YWluZXJcIjonYm9keScsXG4gICAgICAgICAgICBcImJ1dHRvbkNsYXNzXCI6ICcnLFxuICAgICAgICAgICAgXCJhamF4X3VybFwiOiB0aGlzLmFqYXhfdXJsLFxuICAgICAgICAgICAgXCJjYXJyaWVySWRcIjogdGhpcy5wbGF0Zm9ybS5nZXRTaGlwcGluZ0RhdGEoKS5DYXJyaWVySWQsXG4gICAgICAgICAgICBcIm9uUG9pbnRTZWxlY3RlZFwiOiAoKSA9PiB7fSxcbiAgICAgICAgICAgIFwiZ21hcHNrZXlcIjogdHlwZW9mKHNoaXB0aW1pemVfbWFwc19rZXkpID09ICd1bmRlZmluZWQnID8gICcnIDogc2hpcHRpbWl6ZV9tYXBzX2tleVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zaGlwdGltaXplV2lkZ2V0LmluaXQoKTtcbiAgICAgICAgY29uc29sZS5sb2coXCJGaW5pc2hlZCBpbml0XCIpO1xuICAgIH1cblxuICAgIGdldFBpY2t1cExvY2F0aW9ucyhldnQpIHtcbiAgICAgICAgdGhpcy5zaGlwdGltaXplV2lkZ2V0Lm9wZW5NYXAoKTtcbiAgICB9XG5cbn1cblxualF1ZXJ5KGZ1bmN0aW9uKCkge1xuICAgIGlmKHR5cGVvZih3b29jb21tZXJjZV9wYXJhbXMpICE9ICd1bmRlZmluZWQnKXtcbiAgICAgICAgd2luZG93LnNoaXB0aW1pemUgPSBuZXcgU2hpcHRpbWl6ZSh3b29jb21tZXJjZV9wYXJhbXMuYWpheF91cmwpO1xuICAgIH1cbn0pOyJdLCJuYW1lcyI6WyJTaGlwdGltaXplVXRpbHMiLCJjb25zdHJ1Y3RvciIsImluamVjdEV4dGVybmFsU2NyaXB0Iiwic3JjIiwicyIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsInNldEF0dHJpYnV0ZSIsImJvZHkiLCJhcHBlbmRDaGLSDkZCIsImluamVjdFNjcmlwdCIsImNvbnRlbnRzIiwiZSIsInZhbHVlIiwicmVtb3ZlTm9uTnVtZXJpYyIsInN0cmluZyIsInJlcGxhY2UiLCJpc1VybFZhbGlkIiwidXJsIiwiaHR0cCIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsInNlbmQiLCJzdGF0dXMiLCJvcGVuTmV3V2luZG93Iiwib3B0aW9ucyIsIm5ld1dpbiIsIndpbmRvdyIsImJsb2NrZWQiLCJjbG9zZWQiLCJ1dGLSDkcyIsIlV0aWxzIiwiV29vY29tbWVyY2UiLCJhamF4X3VybCIsImlzQ2hlY2tvdXQiLCJjb25zb2xlIiwibG9nIiwialF1ZXJ5IiwiaGFzQ2xhc3MiLCJnZXRTaGlwcGluZ01ldGhvZElkIiwiZUNoZWNrYm94IiwiZUhpZGRlbiIsInNoaXBwaW5nTWV0aG9kIiwibGVuZ3RoIiwidmFsIiwiaW5kZXhPZiIsIm1ldGhvZF9wYXJ0cyIsInNwbGl0IiwiZ2V0U2hpcHBpbmdEYXRhIiwiY291bnRyeSIsInN0YXRlIiwicG9zdGNvZGUiLCJjaXR5IiwiYWRkcmVzcyIsImFkZHJlc3NfMiIsInNfY291bnRyeSIsInNfc3RhdGUiLCJzX3Bvc3Rjb2RlIiwic19jaXR5Iiwic19hZGRyZXNzIiwic19hZGRyZXNzXzIiLCJmaW5kIiwiaXMiLCJlYWNoIiwidGV4dCIsInNoaXB0aW1pemVfc2hpcHBpbmdfYWRkcmVzcyIsInBvc3RfZGF0YSIsInNlcmlhbGl6ZSIsInNldENhcnJpZXIiLCJjYXJyaWVyX2lkIiwic2V0UGlja3VwUG9pbnQiLCJwaWNrdXAiLCJwaWNrdXBfbGFiZWwiLCJJbmZvcm1hdGlvbiIsIk5hbWUiLCJBZGRyZXNzIiwicmVxIiwiUG9pbnRJZCIsImdldEpTT04iLCJkYXRhIiwiZmFpbCIsImVyciIsInJlc3BvbnNlVGV4dCIsImh0bWwiLCJzaGlwdGltaXplX3NlbGVjdCIsIkwiLCJTaGlwdGltaXplT3Blbk1hcCIsInNoaXB0aW1pemUiLCJtYXAiLCJob3N0IiwiaWNvbl9mb2xkZXIiLCJzaGlwdGltaXplX2ljb25fZm9sZGVyIiwibWFwV3JhcHBlciIsInN0eWxlUGF0aCIsIm1hcmtlcnMiLCJwaWNrdXBQb2ludHMiLCJjYXJyaWVyX2ljb25fY29uZmlnIiwiZXh0ZW5zaW9uIiwic2VsZWN0ZWRTdGF0ZSIsImljb25TaXplIiwic2VsZWN0ZWRQb2ludElkeCIsIm1vdmVMaXN0ZW5lcnMiLCJpc01vdmluZyIsImlzVXNlck1vdmluZyIsImJvdW5kcyIsInNldENhcnJpZXJJZCIsImN1cnJlbnRfaWNvbiIsImdldENhcnJpZXJJY29uT2ZUeXBlIiwic2VsZWN0UG9pbnQiLCJpZHgiLCJzZXRJY29uIiwiVHlwZSIsImNyZWF0ZUljb24iLCJpbWFnZVVybCIsImljb24iLCJpY29uVXJsIiwiaWNvbkFuY2hvciIsInBvcHVwQW5jaG9yIiwic2V0Wm9vbSIsInpvb20iLCJpc01hcE1vdmluZyIsImNlbnRlck1hcCIsImxhdCIsImxuZyIsImxhdGxuZyIsImxhdExuZyIsImdyYW50UmVhZHkiLCJpc1NjcmlwdExvYWRlZCIsImxvYWRTY3JpcHQiLCJnZW9jb2RlQnBvc3QiLCJxdWVyeXBhcnRzIiwiZmNhbGxiYWNrIiwiX2dlb2NvZGUiLCJyZXNwIiwicmVzcG9uc2UiLCJyZXN1bHRzIiwiaW5kZXgiLCJ0b3BTdWdnZXN0aW9ucyIsInBsYWNlcyIsImkiLCJzZWFyY2hCYXJTdHJpbmciLCJwdXNoIiwiQ2l0eSIsIm11bmljaXBhbGl0eU5hbWUiLCJDb3VudHJ5IiwiUG9zdGFsQ29kZSIsInBvc3RhbENvZGUiLCJTdHJlZXRuYW1lMSIsImxhdGl0dWRlIiwibG9uZ2l0dWRlIiwiZ2VvY29kZSIsInF1ZXJ5dmFsIiwicXVlcnkiLCJ0b0xvd2VyQ2FzZSIsIm1hdGNoIiwibWlzc2luZ1ppcFBUIiwiemlwNGRpZyIsInN1YnN0cmluZyIsInppcGNvZGUiLCJxdWVyeVJlc3VsdHMiLCJkaXNwbGF5X25hbWUiLCJyZXMiLCJ0b1VwcGVyQ2FzZSIsImdlb2NvZGVRdWVyeSIsIndhbnRlZCIsImNvdW50eSIsImNvdW50cnlfY29kZSIsInB1c2hEaXNwbGF5ZWRSZXN1bHRzIiwibm9tQWRkciIsInN0cmVldCIsInJvYWQiLCJyZWdpb24iLCJTdGF0ZSIsImxvbiIsImdlb2NvZGVBZGRyZXNzIiwiZl9jYWxsYmFjayIsInBvc3RhbGNvZGUiLCJzdHJlZXRuYW1lIiwicXVlcnlTdHJpbmciLCJzdWJzdHIiLCJidG9hIiwiYWRkcmVzc19jYWNoZSIsImxvY2F0aW9uIiwiaXNvMiIsImdlb2NvZGVBZGRyZXNzUGFydHNCcG9zdCIsImVuY29kZVVSSSIsImxhdGxuIiwiZ2VvY29kZUFkZHJlc3NQYXJ0cyIsImxhbiIsIlNISVBUSU1JWkVfUExVR0lOX1VSTCIsImluaXRNYXAiLCJpY29uX3NlbGVjdGVkIiwiaWNvbl9kZWZhdWx0IiwidGLSDkZUxheWVyIiwiYWRkVG8iLCJvbm1hcHJlYWR5Iiwib24iLCJjZW50ZXIiLCJnZXRDZW50ZXIiLCJpc0luQm91bmRzIiwibW92ZUVuZCIsIm1hcENlbnRlciIsImFkZE1hcE1vdmVMaXN0ZW5lciIsImluTGF0IiwiYm90dG9tTGVmdCIsInRvcFJpZ2h0IiwiZWFzdEJvdW5kIiwid2VzdEJvdW5kIiwiaW5MbmciLCJjbGVhck1hcmtlcnMiLCJyZW1vdmVMYXllciIsInNldE1pblpvb20iLCJhZGRNYXJrZXJzIiwiY2FsbGJhY2siLCJ4IiwiZ2V0TWFya2VyIiwibWFya2VyIiwiZml0Qm91bmRzIiwicmVzZXRNYXJrZXIiLCJzZWxlY3RNYXJrZXIiLCJzY3JvbGxUb3AiLCJpbnZhbGlkYXRlU2l6ZSIsInBhcnNlRmxvYXQiLCJMYXQiLCJMb25nIiwiY2VudGVyWCIsImNlbnRlclkiLCJzZXRUaW1lb3V0IiwiZ2V0SWNvbiIsInBpY2t1cFBvaW50IiwidHlwZSIsInNlbGVjdGVkIiwiYWxsb3dlZFR5cGVzIiwiY2Fycmllcl9pY29uX3VybCIsImZpbGVfZXh0ZW5zaW9uIiwic2VsZWN0ZWRleHRlbnNpb24iLCJpbmNsdWRlcyIsInNldENhcnJpZXJJY29uIiwiY2FjaGVfaWNvbl92YWxpZCIsImNhcnJpZXJJY29uRXhpc3RzIiwiU2hpcHRpbWl6ZVdpZGdldCIsIlNoaXB0aW1pemVHbWFwcyIsInNoaXB0aW1pemVXaWRnZXQiLCJtZSIsImdtYXBza2V5IiwibG9hZE1hcCIsInNjcmlwdCIsInJlYWR5U3RhdGUiLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJjYWxiYWNrIiwib25sb2FkIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJhZGRMaXN0ZW5lciIsInNldENlbnRlciIsImdvb2dsZSIsIm1hcHMiLCJMYXRMbmciLCJzZXRNYXAiLCJMYXRMbmdCb3VuZHMiLCJleHRlbmQiLCJnZXRQb3NpdGlvbiIsImdldEJvdW5kcyIsImdldENhcnJpZXJJY29uVXJsIiwicG9zaXRpb24iLCJzaXplIiwiU2l6ZSIsInNjYWxlZFNpemUiLCJNYXJrZXIiLCJNYXAiLCJnZXRFbGVtZW50QnlJZCIsIm1hcFR5cGVDb250cm9sIiwiY29udGFpbnMiLCJzaGlwcGluZ0RhdGEiLCJnZW9jb2RlciIsIkdlb2NvZGVyIiwiY29tcG9uZW50cyIsImdldCIsImVycm9yX21zZyIsImoiLCJhZGRyZXNzX2NvbXBvbmVudHMiLCJsb25nX25hbWUiLCJnZXRDb3VudHJ5Q29kZUZyb21SZXN1bHQiLCJnZW9tZXRyeSIsInR5cGVzIiwic2hvcnRfbmFtZSIsInBvaW50Iiwic2hpcHRpbWl6ZV9jYXJyaWVyX2ltZ3MiLCJTaGlwdGltaXplT3Blbk1hcDIiLCJzZWxlY3RlZFBvaW50IiwiZGVidWciLCJtYXBQYXJlbnRDb250YWluZXIiLCJidXR0b25QYXJlbnRDb250YWluZXIiLCJidXR0b25DbGFzcyIsImJ1dHRvbl9jbGFzcyIsImxhYmVscyIsInBsYXRmb3JtIiwidGltZW91dEtleURvd24iLCJzZWFyY2hSdW5uaW5nIiwiY2FycmllcklkIiwibGFuZyIsIndlZWtkYXluYW1lcyIsInNoaXB0aW1pemVfbW9uZGF5Iiwic2hpcHRpbWl6ZV90dWVzZGF5Iiwic2hpcHRpbWl6ZV93ZWRuZXNkYXkiLCJzaGlwdGltaXplX3RodXJzZGF5Iiwic2hpcHRpbWl6ZV9mcmlkYXkiLCJzaGlwdGltaXplX3NhdHVyZGF5Iiwic2hpcHRpbWl6ZV9zdW5kYXkiLCJzZWxlY3RlZERpc3BsYXlPcHRpb24iLCJjYWNoZVJlc3VsdHMiLCJyZWFkeSIsImhhc1J1bkNoZWNrVmlzaWJpbGl0eSIsImhhc1J1blBsYWNlT3JkZXJDaGVjayIsImNoZWNrVmlzaWJpbGl0eSIsInNldEludGVydmFsIiwiaW5wdXRFbGVtZW50IiwiY2xlYXJJbnRlcnZhbCIsInNlbGVjdGVkVGV4dCIsImNsb3Nlc3QiLCJpc0Jsb2NrQ2hlY2tvdXQiLCJnZXRTZWxlY3RlZENhcnJpZXIiLCJnZXRGb3JtQ2hhbmdlIiwiZ2V0T25DbGljayIsInBsYWNlT3JkZXJDaGVjayIsInBsYWNlT3JkZXJCdXR0b24iLCJzaGlwcGluZ19waWNrdXBfaWQiLCJtYW5kYXRvcnlEYXRhIiwicGlja3VwTWFuZGF0b3J5IiwicHJldmVudERlZmF1bHQiLCJtb2RhbCIsImlkIiwiY3NzIiwibW9kYWxDb250ZW50IiwiY2xvc2VCdXR0b24iLCJtZXNzYWdlIiwic2hpcHRpbWl6ZV9tYW5kYXRvcnlfcG9pbnQiLCJidXR0b24iLCJCcG9zdF9jaG9vc2VfcGlja3VwX2xvY2F0aW9uIiwiYXBwZW5kIiwic2hvdyIsImhpZGUiLCJldmVudCIsInRhcmdldCIsImdldE9uU3VibWl0QnV0dG9uQmxvY2tDbGlja05vVGhlbWUiLCJnZXRUaGVtZVNoaXBwaW5nTWV0aG9kIiwiYWpheENvbXBsZXRlIiwieGhyIiwic2V0dGluZ3MiLCJjaGVja2VkUmFkaW8iLCJzaWJsaW5ncyIsInRyaW0iLCJzaGlwcGluZ01ldGhvZHNMaXN0IiwicXVlcnlTZWxlY3RvciIsInNoaXBwaW5nTWV0aG9kSXRlbXMiLCJxdWVyeVNlbGVjdG9yQWxsIiwiZm9yRWFjaCIsIml0ZW0iLCJsYWJlbEVsZW1lbnQiLCJsYWJlbFRleHQiLCJ0ZXh0Q29udGVudCIsIm9yaWdpbiIsInByb3AiLCJhZnRlciIsInByb3RvdHlwZSIsIm1ldGhvZCIsImFzeW5jIiwidXNlciIsInBhc3MiLCJhcHBseSIsImFyZ3VtZW50cyIsImxvYWRlclRleHQiLCJkaXNhYmxlQnV0dG9uIiwidW5kZWZpbmVkIiwiZW5hYmxlQnV0dG9uIiwic2hpcHRpbWl6ZV9jaG9vc2VfcGlja3VwX2xvY2F0aW9uIiwicmVtb3ZlIiwiZ2V0QmxvY2tTaGlwcGluZ0RhdGEiLCJzaGlwcGluZ19waWNrdXBfbGFiZWwiLCJzaGlwdGltaXplX3BpY2t1cF9leHRlbmRlZCIsInNoaXB0aW1pemVfcGlja3VwX2Rlc2NyaXB0aW9uIiwic2hpcHBpbmdfY2Fycmllcl9pZCIsIm1hcGludGVyZmFjZSIsImdldEZvcm1TaGlwcGluZ0RhdGEiLCJnZXRTaGlwdGltaXplSWQiLCJtYWdlX2lkIiwic2hpcHRpbWl6ZV9jYXJyaWVycyIsIkNsYXNzTmFtZSIsIklkIiwiaW5pdCIsInNldEFkZHJlc3MiLCJsb2FkU2NyaXB0cyIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJKU09OIiwicGFyc2UiLCJhZGRQb2ludEluZm8iLCJwIiwiZXh0cmFfY2xhc3MiLCJwYXJlbnRDb250YWluZXIiLCJXb3JraW5nSG91cnNSYXciLCJvcGVuaHRtbCIsIm0yZiIsIndrZCIsImxvY2FsIiwib3BlbkhvdXJzIiwicmVnZXhGb3JtYXREZXYiLCJSZWdFeHAiLCJyZWdleEZvcm1hdExpdmUiLCJyZWdleEZvcm1hdCIsInJlZ0RheSIsInJlZ09wZW5JZHgiLCJyZWdUeXBlSWR4IiwiT2JqZWN0Iiwia2V5cyIsInNoaWZ0Iiwia2V5IiwiZXhlYyIsImRheW5hbWUiLCJvcGVuaWR4IiwicGFyc2VJbnQiLCJkYXlpZHgiLCJPcGVuVGltZSIsIkNsb3NlVGltZSIsInNjaGVkdWxlIiwic29ydCIsImEiLCJiIiwiYW9wZW4iLCJib3BlbiIsIldvcmtpbmdIb3VycyIsIm5kYXlzb3BlbiIsImZyb21kYXkiLCJwcmV2aW91c1RpbWUiLCJob3Vyc2h0bWwiLCJmcm9tZGF5aWR4IiwidG9EYXkiLCJkYXkiLCJkYXlodG1sIiwidG9kYXkiLCJob3VycyIsImlzaW50ZXJ2YWwiLCJpc2xhc3QiLCJlUG9pbnRJbmZvIiwiRGlzdGFuY2UiLCJzaGlwdGltaXplX2Rpc3RhbmNlIiwic2hpcHRpbWl6ZV9tZXRlciIsImdldFdvcmtpbmdEYXlzIiwiTWFwRmllbGRzU2VsZWN0IiwibW9yZUZpZWxkcyIsImsiLCJidG4iLCJzaGlwdGltaXplX3NlbGVjdGVkIiwiYWRkQ3VzdG9tU3R5bGUiLCJzdHlsZSIsInN0eWxlU2hlZXQiLCJjc3NUZXh0IiwiY3JlYXRlVGV4dE5vZGUiLCJhZGRNYXBIdG1sIiwiYWRkcmVzc3RyIiwibWFwaHRtbCIsImRpc3BsYXlPcHRpb25zIiwib3B0TWFwIiwic2hpcHRpbWl6ZV9tYXAiLCJvcHRMaXN0Iiwic2hpcHRpbWl6ZV9saXN0Iiwic2VsZWN0RGlzcGxheU9wdGlvbiIsInF1ZXJ5b3B0Iiwic2VhcmNoYnRuIiwic2hpcHRpbWl6ZV9zZWFyY2giLCJxdWVyeWlucHV0IiwiZXZ0Iiwia2V5Q29kZSIsImNsZWFyVGltZW91dCIsImNsaWNrIiwiY2xvc2VNYXAiLCJyZW1vdmVDbGFzcyIsInVzZXJTY3JvbGwiLCJkaXNwbGF5TWVzc2FnZSIsIm1zZyIsImFkZENsYXNzIiwic2hpcHRpbWl6ZV9ub19wb2ludHNfZm91bmQiLCJkaXNwbGF5UGxhY2VzIiwicmVzdWx0c0NvbnRhaW5lciIsInNoaXB0aW1pemVfbm9fcmVzdWx0cyIsImF0dHIiLCJwbGFjZSIsImZldGNoUG9pbnRzIiwiaGFzaExhdExuZyIsImxhdHN0ciIsImxuZ3N0ciIsImRpc3BsYXlSZXN1bHRzIiwicGlja3VwUG9pbnRzTG9hZFN0b3AiLCJzaGlwdGltaXplX3RoZSIsIkNvdW50Iiwic2hpcHRpbWl6ZV9jbG9zZXN0IiwiUG9pbnQiLCJtYXBDaGFuZ2VkIiwiRGF0ZSIsIm5vdyIsInVwZGF0ZUxpc3QiLCJwYXJlbnQiLCJmcmVzb2x2ZSIsIkVycm9yIiwibWFwTW92ZWQiLCJtYXBjZW50ZXIiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImxvYWRMYWJlbHMiLCJhamF4TG9hZExhYmVscyIsImZuIiwianF1ZXJ5Iiwic2NyaXB0c0xvYWRlZCIsIm9uaW5pdCIsImxvYWRTdHlsZSIsInJlbCIsImhyZWYiLCJmb3JjZSIsInJlc2V0TWFwRWxlbWVudHMiLCJvcGVuTWFwIiwiZ2VvIiwiYXBhcnRtZW50IiwicmVzZXRTZWxlY3Rpb24iLCJzZXRJdGVtIiwiZUZpZWxkSW5mbyIsImV4dHJhc1ZhbGlkIiwiZWxlbSIsImVFeHRyYSIsImFsZXJ0IiwibWFwZmllbGRtYW5kYXRvcnkiLCJpZF9jYXJyaWVyIiwicGlja3VwX2lkIiwiYWN0aW9uIiwiZmllbGRpZCIsImZpZWxkdmFsdWUiLCJWYWx1ZSIsIm9uUG9pbnRTZWxlY3RlZCIsInNlbGVjdFBvaW50RnJvbUxpc3QiLCJlb3B0aW9ucyIsInNldExhYmVscyIsInNldFdlZWtkYXlOYW1lcyIsInN0cmluZ2lmeSIsImVTZWFyY2hTdGF0dXMiLCJwb2ludHMiLCJnZXRTaGlwcGluZ01ldGhvZENoZW5nZSIsImFyaWEiLCJyZWdleCIsImdldE5vdEJsb2NrRm9ybUNoYW5nZSIsImNoYW5nZSIsIndvcmtpbmdIb3VycyIsImRheUdyb3VwcyIsImh0bWxIb3VycyIsImhvdXJTdHJpbmciLCJmb3JtYXRXb3JraW5nSG91cnMiLCJsYXN0R3JvdXAiLCJlbmQiLCJzdGFydCIsImdyb3VwIiwiZGF5UmFuZ2UiLCJnZXREYXlOYW1lIiwiaG91ckludGVydmFscyIsImhvdXIiLCJmaWx0ZXIiLCJCb29sZWFuIiwiam9pbiIsIldvb0NvbW1lcmNlIiwiU2hpcHRpbWl6ZSIsImlzTWFwTG9hZGVkIiwiZ21hcHNfa2V5Iiwic2hpcHRpbWl6ZV9tYXBzX2tleSIsIm9wZW5NYXBNYXJrZXJJY29ucyIsIkNhcnJpZXJJZCIsImdldFBpY2t1cExvY2F0aW9ucyIsIndvb2NvbW1lcmNlX3BhcmFtcyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///610\n")}},__webpack_module_cache__={};function __webpack_require__(Q){var U=__webpack_module_cache__[Q];if(void 0!==U)return U.exports;var F=__webpack_module_cache__[Q]={exports:{}};return __webpack_modules__[Q].call(F.exports,F,F.exports,__webpack_require__),F.exports}__webpack_require__.n=Q=>{var U=Q&&Q.__esModule?()=>Q.default:()=>Q;return __webpack_require__.d(U,{a:U}),U},__webpack_require__.d=(Q,U)=>{for(var F in U)__webpack_require__.o(U,F)&&!__webpack_require__.o(Q,F)&&Object.defineProperty(Q,F,{enumerable:!0,get:U[F]})},__webpack_require__.o=(Q,U)=>Object.prototype.hasOwnProperty.call(Q,U);var __webpack_exports__=__webpack_require__(610)})();