diff --git a/main/models.py b/main/models.py index 3565a1017bfc739a5c75ec4120c23e35333a4ba3..0da3dbd684b5599b644cd5d2a89f7c8444f73a30 100644 --- a/main/models.py +++ b/main/models.py @@ -1,4 +1,3 @@ -import locale from datetime import timedelta from functools import cached_property @@ -25,7 +24,6 @@ from wagtail.core.models import Page from wagtailmetadata.models import MetadataPageMixin from elections2021.constants import REGION_CHOICES # pozor, import ze sousedního modulu -from shared.const import RICH_TEXT_DEFAULT_FEATURES from shared.forms import SubscribeForm from shared.models import ( # MenuMixin, ArticleMixin, @@ -162,10 +160,19 @@ class MainHomePage( def get_context(self, request, *args, **kwargs): context = super().get_context(request, args, kwargs) - tweet_list = Tweet.objects.order_by("-twitter_id") + + twitter_username_list = [ + username_data["value"] for username_data in self.twitter_usernames.raw_data + ] + tweet_list = Tweet.objects.username_list(twitter_username_list).order_by( + "-twitter_id" + ) + context["tweet_list"] = tweet_list[:4] context["show_next_tweet"] = len(tweet_list) > 4 + context["regions"] = REGION_CHOICES + context["article_data_list"] = MainArticlePage.objects.filter( region__isnull=False ).order_by("-date")[:3] @@ -196,7 +203,14 @@ class MainHomePage( return JsonResponse(data=data, safe=False) def get_twitter_response(self, request): - tweet_paginator = Paginator(Tweet.objects.order_by("-twitter_id"), 4) + twitter_username_list = [ + username_data["value"] for username_data in self.twitter_usernames.raw_data + ] + tweet_qs = Tweet.objects.username_list(twitter_username_list).order_by( + "-twitter_id" + ) + tweet_paginator = Paginator(tweet_qs, 4) + tweet_page = tweet_paginator.get_page(request.GET.get("page", 1)) context = {"tweet_list": tweet_page.object_list} html_content = render( @@ -209,12 +223,13 @@ class MainHomePage( return JsonResponse(data=data, safe=False) def serve(self, request, *args, **kwargs): - if not request.META.get("HTTP_X_REQUESTED_WITH") == "XMLHttpRequest": - return super().serve(request, *args, **kwargs) - if "region" in request.GET: - return self.get_region_response(request) - else: - return self.get_twitter_response(request) + if request.META.get("HTTP_X_REQUESTED_WITH") == "XMLHttpRequest": + if "region" in request.GET: + return self.get_region_response(request) + else: + return self.get_twitter_response(request) + + return super().serve(request, *args, **kwargs) @cached_property def newsletter_subscribe_url(self): @@ -378,12 +393,13 @@ class MainArticlesPage( return JsonResponse(data=data, safe=False) def serve(self, request, *args, **kwargs): - if not request.META.get("HTTP_X_REQUESTED_WITH") == "XMLHttpRequest": - return super().serve(request, *args, **kwargs) - if "months" in request.GET: - return self.get_timeline_articles_response(request) - if "page" in request.GET: - return self.get_articles_response(request) + if request.META.get("HTTP_X_REQUESTED_WITH") == "XMLHttpRequest": + if "months" in request.GET: + return self.get_timeline_articles_response(request) + if "page" in request.GET: + return self.get_articles_response(request) + + return super().serve(request, *args, **kwargs) @staticmethod def get_empty_month_data(date_obj): @@ -612,9 +628,9 @@ class MainPersonPage(ExtendedMetadataPageMixin, SubpageMixin, MetadataPageMixin, context["article_page_list"] = MainArticlePage.objects.filter( author_page=self.id ) - context["tweet_list"] = Tweet.objects.filter( - author_username=self.twitter_username - ) + context["tweet_list"] = Tweet.objects.username(self.twitter_username).order_by( + "-twitter_id" + )[:20] return context ### OTHERS diff --git a/main/static/main/css/styles.css b/main/static/main/css/styles.css index 426eea504041dee8558ddbe935b03e565eeeca68..d89fe73bf9a72e4edafb25195e4847461b8dbbac 100644 --- a/main/static/main/css/styles.css +++ b/main/static/main/css/styles.css @@ -2618,26 +2618,40 @@ p{ border-color: #B3B3B3; } -.twitter-carousel .slick-arrow { +div.twitter-carousel div.slick-track { + display: flex; + } + +div.twitter-carousel div.slick-slide { + display: flex; + height: auto; + margin-right: 1rem; + } + +div.twitter-carousel div.slick-slide > div { + height: 100%; + } + +div.twitter-carousel .slick-arrow { right: 10%; } @media (min-width: 992px) { -.twitter-carousel .slick-arrow { +div.twitter-carousel .slick-arrow { right: 5% } } -.twitter-carousel .slick-arrow:before, .twitter-carousel .slick-arrow:after { +div.twitter-carousel .slick-arrow:before, div.twitter-carousel .slick-arrow:after { border-color: black; } -.twitter-carousel .slick-arrow.slick-disabled:before, .twitter-carousel .slick-arrow.slick-disabled:after { +div.twitter-carousel .slick-arrow.slick-disabled:before, div.twitter-carousel .slick-arrow.slick-disabled:after { border-color: #B3B3B3; } -.twitter-carousel{ +.twitter-carousel { position: relative; } diff --git a/main/static/main/js/main.bundle.js b/main/static/main/js/main.bundle.js index c1188191d1a4d764a0dd1b7b28a4821bfe7ea619..a34d409cdba29d16c7d51ceb0c57a32e0eee66f7 100644 --- a/main/static/main/js/main.bundle.js +++ b/main/static/main/js/main.bundle.js @@ -1 +1,13205 @@ -!function(t){"use strict";t=t&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t;const e=parseInt("992px".replace("px",""),10),n=function(t,e,n){for(var r=0;r<t.length;r++)e.call(n,t[r])};function r(){return Math.max(document.documentElement.clientWidth||0,window.innerWidth||0)>=e}"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;var i=function(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}(function(t,e,n){return function(t,e){var n;"undefined"!=typeof self&&self,n=function(){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)n.d(r,i,function(e){return t[e]}.bind(null,i));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s="fb15")}({"00ee":function(t,e,n){var r={};r[n("b622")("toStringTag")]="z",t.exports="[object z]"===String(r)},"0366":function(t,e,n){var r=n("1c0b");t.exports=function(t,e,n){if(r(t),void 0===e)return t;switch(n){case 0:return function(){return t.call(e)};case 1:return function(n){return t.call(e,n)};case 2:return function(n,r){return t.call(e,n,r)};case 3:return function(n,r,i){return t.call(e,n,r,i)}}return function(){return t.apply(e,arguments)}}},"0497":function(t,e){t.exports=function(t){return t.replace(/[A-Z]/g,(function(t){return"-"+t.toLowerCase()})).toLowerCase()}},"057f":function(t,e,n){var r=n("fc6a"),i=n("241c").f,o={}.toString,a="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];t.exports.f=function(t){return a&&"[object Window]"==o.call(t)?function(t){try{return i(t)}catch(t){return a.slice()}}(t):i(r(t))}},"06cf":function(t,e,n){var r=n("83ab"),i=n("d1e7"),o=n("5c6c"),a=n("fc6a"),s=n("c04e"),c=n("5135"),l=n("0cfb"),u=Object.getOwnPropertyDescriptor;e.f=r?u:function(t,e){if(t=a(t),e=s(e,!0),l)try{return u(t,e)}catch(t){}if(c(t,e))return o(!i.f.call(t,e),t[e])}},"07ac":function(t,e,n){var r=n("23e7"),i=n("6f53").values;r({target:"Object",stat:!0},{values:function(t){return i(t)}})},"0cfb":function(t,e,n){var r=n("83ab"),i=n("d039"),o=n("cc12");t.exports=!r&&!i((function(){return 7!=Object.defineProperty(o("div"),"a",{get:function(){return 7}}).a}))},1276:function(t,e,n){var r=n("d784"),i=n("44e7"),o=n("825a"),a=n("1d80"),s=n("4840"),c=n("8aa5"),l=n("50c4"),u=n("14c3"),d=n("9263"),f=n("d039"),h=[].push,p=Math.min,L=!f((function(){return!RegExp(4294967295,"y")}));r("split",2,(function(t,e,n){var r;return r="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length?function(t,n){var r=String(a(this)),o=void 0===n?4294967295:n>>>0;if(0===o)return[];if(void 0===t)return[r];if(!i(t))return e.call(r,t,o);for(var s,c,l,u=[],f=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),p=0,L=new RegExp(t.source,f+"g");(s=d.call(L,r))&&!((c=L.lastIndex)>p&&(u.push(r.slice(p,s.index)),s.length>1&&s.index<r.length&&h.apply(u,s.slice(1)),l=s[0].length,p=c,u.length>=o));)L.lastIndex===s.index&&L.lastIndex++;return p===r.length?!l&&L.test("")||u.push(""):u.push(r.slice(p)),u.length>o?u.slice(0,o):u}:"0".split(void 0,0).length?function(t,n){return void 0===t&&0===n?[]:e.call(this,t,n)}:e,[function(e,n){var i=a(this),o=null==e?void 0:e[t];return void 0!==o?o.call(e,i,n):r.call(String(i),e,n)},function(t,i){var a=n(r,t,this,i,r!==e);if(a.done)return a.value;var d=o(t),f=String(this),h=s(d,RegExp),v=d.unicode,y=(d.ignoreCase?"i":"")+(d.multiline?"m":"")+(d.unicode?"u":"")+(L?"y":"g"),g=new h(L?d:"^(?:"+d.source+")",y),b=void 0===i?4294967295:i>>>0;if(0===b)return[];if(0===f.length)return null===u(g,f)?[f]:[];for(var m=0,w=0,S=[];w<f.length;){g.lastIndex=L?w:0;var _,k=u(g,L?f:f.slice(w));if(null===k||(_=p(l(g.lastIndex+(L?0:w)),f.length))===m)w=c(f,w,v);else{if(S.push(f.slice(m,w)),S.length===b)return S;for(var x=1;x<=k.length-1;x++)if(S.push(k[x]),S.length===b)return S;w=m=_}}return S.push(f.slice(m)),S}]}),!L)},"13d5":function(t,e,n){var r=n("23e7"),i=n("d58f").left,o=n("a640"),a=n("ae40"),s=o("reduce"),c=a("reduce",{1:0});r({target:"Array",proto:!0,forced:!s||!c},{reduce:function(t){return i(this,t,arguments.length,arguments.length>1?arguments[1]:void 0)}})},"14c3":function(t,e,n){var r=n("c6b6"),i=n("9263");t.exports=function(t,e){var n=t.exec;if("function"==typeof n){var o=n.call(t,e);if("object"!=typeof o)throw TypeError("RegExp exec method returned something other than an Object or null");return o}if("RegExp"!==r(t))throw TypeError("RegExp#exec called on incompatible receiver");return i.call(t,e)}},"159b":function(t,e,n){var r=n("da84"),i=n("fdbc"),o=n("17c2"),a=n("9112");for(var s in i){var c=r[s],l=c&&c.prototype;if(l&&l.forEach!==o)try{a(l,"forEach",o)}catch(t){l.forEach=o}}},"17c2":function(t,e,n){var r=n("b727").forEach,i=n("a640"),o=n("ae40"),a=i("forEach"),s=o("forEach");t.exports=a&&s?[].forEach:function(t){return r(this,t,arguments.length>1?arguments[1]:void 0)}},"1be4":function(t,e,n){var r=n("d066");t.exports=r("document","documentElement")},"1c0b":function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(String(t)+" is not a function");return t}},"1c7e":function(t,e,n){var r=n("b622")("iterator"),i=!1;try{var o=0,a={next:function(){return{done:!!o++}},return:function(){i=!0}};a[r]=function(){return this},Array.from(a,(function(){throw 2}))}catch(t){}t.exports=function(t,e){if(!e&&!i)return!1;var n=!1;try{var o={};o[r]=function(){return{next:function(){return{done:n=!0}}}},t(o)}catch(t){}return n}},"1d80":function(t,e){t.exports=function(t){if(null==t)throw TypeError("Can't call method on "+t);return t}},"1dde":function(t,e,n){var r=n("d039"),i=n("b622"),o=n("2d00"),a=i("species");t.exports=function(t){return o>=51||!r((function(){var e=[];return(e.constructor={})[a]=function(){return{foo:1}},1!==e[t](Boolean).foo}))}},"217d":function(t,e){t.exports={isFunction:function(t){return"function"==typeof t},isArray:function(t){return"[object Array]"===Object.prototype.toString.apply(t)},each:function(t,e){for(var n=0,r=t.length;n<r&&!1!==e(t[n],n);n++);}}},"23cb":function(t,e,n){var r=n("a691"),i=Math.max,o=Math.min;t.exports=function(t,e){var n=r(t);return n<0?i(n+e,0):o(n,e)}},"23e7":function(t,e,n){var r=n("da84"),i=n("06cf").f,o=n("9112"),a=n("6eeb"),s=n("ce4e"),c=n("e893"),l=n("94ca");t.exports=function(t,e){var n,u,d,f,h,p=t.target,L=t.global,v=t.stat;if(n=L?r:v?r[p]||s(p,{}):(r[p]||{}).prototype)for(u in e){if(f=e[u],d=t.noTargetGet?(h=i(n,u))&&h.value:n[u],!l(L?u:p+(v?".":"#")+u,t.forced)&&void 0!==d){if(typeof f==typeof d)continue;c(f,d)}(t.sham||d&&d.sham)&&o(f,"sham",!0),a(n,u,f,t)}}},"241c":function(t,e,n){var r=n("ca84"),i=n("7839").concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return r(t,i)}},"25f0":function(t,e,n){var r=n("6eeb"),i=n("825a"),o=n("d039"),a=n("ad6d"),s=RegExp.prototype,c=s.toString,l=o((function(){return"/a/b"!=c.call({source:"a",flags:"b"})})),u="toString"!=c.name;(l||u)&&r(RegExp.prototype,"toString",(function(){var t=i(this),e=String(t.source),n=t.flags;return"/"+e+"/"+String(void 0===n&&t instanceof RegExp&&!("flags"in s)?a.call(t):n)}),{unsafe:!0})},"2d00":function(t,e,n){var r,i,o=n("da84"),a=n("342f"),s=o.process,c=s&&s.versions,l=c&&c.v8;l?i=(r=l.split("."))[0]+r[1]:a&&(!(r=a.match(/Edge\/(\d+)/))||r[1]>=74)&&(r=a.match(/Chrome\/(\d+)/))&&(i=r[1]),t.exports=i&&+i},"342f":function(t,e,n){var r=n("d066");t.exports=r("navigator","userAgent")||""},"35a1":function(t,e,n){var r=n("f5df"),i=n("3f8c"),o=n("b622")("iterator");t.exports=function(t){if(null!=t)return t[o]||t["@@iterator"]||i[r(t)]}},"37e8":function(t,e,n){var r=n("83ab"),i=n("9bf2"),o=n("825a"),a=n("df75");t.exports=r?Object.defineProperties:function(t,e){o(t);for(var n,r=a(e),s=r.length,c=0;s>c;)i.f(t,n=r[c++],e[n]);return t}},"3b81":function(t,e,n){},"3bbe":function(t,e,n){var r=n("861d");t.exports=function(t){if(!r(t)&&null!==t)throw TypeError("Can't set "+String(t)+" as a prototype");return t}},"3ca3":function(t,e,n){var r=n("6547").charAt,i=n("69f3"),o=n("7dd0"),a=i.set,s=i.getterFor("String Iterator");o(String,"String",(function(t){a(this,{type:"String Iterator",string:String(t),index:0})}),(function(){var t,e=s(this),n=e.string,i=e.index;return i>=n.length?{value:void 0,done:!0}:(t=r(n,i),e.index+=t.length,{value:t,done:!1})}))},"3f8c":function(t,e){t.exports={}},4160:function(t,e,n){var r=n("23e7"),i=n("17c2");r({target:"Array",proto:!0,forced:[].forEach!=i},{forEach:i})},"428f":function(t,e,n){var r=n("da84");t.exports=r},"42a0":function(t,e){var n=/^(?:0|[1-9]\d*)$/;function r(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}var i,o,a=Object.prototype,s=a.hasOwnProperty,c=a.toString,l=a.propertyIsEnumerable,u=(i=Object.keys,o=Object,function(t){return i(o(t))}),d=Math.max,f=!l.call({valueOf:1},"valueOf");function h(t,e,n){var r=t[e];s.call(t,e)&&v(r,n)&&(void 0!==n||e in t)||(t[e]=n)}function p(t,e){return!!(e=null==e?9007199254740991:e)&&("number"==typeof t||n.test(t))&&t>-1&&t%1==0&&t<e}function L(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||a)}function v(t,e){return t===e||t!=t&&e!=e}var y=Array.isArray;function g(t){return null!=t&&function(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991}(t.length)&&!function(t){var e=b(t)?c.call(t):"";return"[object Function]"==e||"[object GeneratorFunction]"==e}(t)}function b(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}var m,w=(m=function(t,e){if(f||L(e)||g(e))!function(t,e,n,r){n||(n={});for(var i=-1,o=e.length;++i<o;){var a=e[i];h(n,a,t[a])}}(e,function(t){return g(t)?function(t,e){var n=y(t)||function(t){return function(t){return function(t){return!!t&&"object"==typeof t}(t)&&g(t)}(t)&&s.call(t,"callee")&&(!l.call(t,"callee")||"[object Arguments]"==c.call(t))}(t)?function(t,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}(t.length,String):[],r=n.length,i=!!r;for(var o in t)!e&&!s.call(t,o)||i&&("length"==o||p(o,r))||n.push(o);return n}(t):function(t){if(!L(t))return u(t);var e=[];for(var n in Object(t))s.call(t,n)&&"constructor"!=n&&e.push(n);return e}(t)}(e),t);else for(var n in e)s.call(e,n)&&h(t,n,e[n])},function(t,e){return e=d(void 0===e?t.length-1:e,0),function(){for(var n=arguments,i=-1,o=d(n.length-e,0),a=Array(o);++i<o;)a[i]=n[e+i];i=-1;for(var s=Array(e+1);++i<e;)s[i]=n[i];return s[e]=a,r(t,this,s)}}((function(t,e){var n=-1,r=e.length,i=r>1?e[r-1]:void 0,o=r>2?e[2]:void 0;for(i=m.length>3&&"function"==typeof i?(r--,i):void 0,o&&function(t,e,n){if(!b(n))return!1;var r=typeof e;return!!("number"==r?g(n)&&p(e,n.length):"string"==r&&e in n)&&v(n[e],t)}(e[0],e[1],o)&&(i=r<3?void 0:i,r=1),t=Object(t);++n<r;){var a=e[n];a&&m(t,a)}return t})));t.exports=w},"44ad":function(t,e,n){var r=n("d039"),i=n("c6b6"),o="".split;t.exports=r((function(){return!Object("z").propertyIsEnumerable(0)}))?function(t){return"String"==i(t)?o.call(t,""):Object(t)}:Object},"44d2":function(t,e,n){var r=n("b622"),i=n("7c73"),o=n("9bf2"),a=r("unscopables"),s=Array.prototype;null==s[a]&&o.f(s,a,{configurable:!0,value:i(null)}),t.exports=function(t){s[a][t]=!0}},"44e7":function(t,e,n){var r=n("861d"),i=n("c6b6"),o=n("b622")("match");t.exports=function(t){var e;return r(t)&&(void 0!==(e=t[o])?!!e:"RegExp"==i(t))}},"466d":function(t,e,n){var r=n("d784"),i=n("825a"),o=n("50c4"),a=n("1d80"),s=n("8aa5"),c=n("14c3");r("match",1,(function(t,e,n){return[function(e){var n=a(this),r=null==e?void 0:e[t];return void 0!==r?r.call(e,n):new RegExp(e)[t](String(n))},function(t){var r=n(e,t,this);if(r.done)return r.value;var a=i(t),l=String(this);if(!a.global)return c(a,l);var u=a.unicode;a.lastIndex=0;for(var d,f=[],h=0;null!==(d=c(a,l));){var p=String(d[0]);f[h]=p,""===p&&(a.lastIndex=s(l,o(a.lastIndex),u)),h++}return 0===h?null:f}]}))},4840:function(t,e,n){var r=n("825a"),i=n("1c0b"),o=n("b622")("species");t.exports=function(t,e){var n,a=r(t).constructor;return void 0===a||null==(n=r(a)[o])?e:i(n)}},4930:function(t,e,n){var r=n("d039");t.exports=!!Object.getOwnPropertySymbols&&!r((function(){return!String(Symbol())}))},"4d64":function(t,e,n){var r=n("fc6a"),i=n("50c4"),o=n("23cb"),a=function(t){return function(e,n,a){var s,c=r(e),l=i(c.length),u=o(a,l);if(t&&n!=n){for(;l>u;)if((s=c[u++])!=s)return!0}else for(;l>u;u++)if((t||u in c)&&c[u]===n)return t||u||0;return!t&&-1}};t.exports={includes:a(!0),indexOf:a(!1)}},"4de4":function(t,e,n){var r=n("23e7"),i=n("b727").filter,o=n("1dde"),a=n("ae40"),s=o("filter"),c=a("filter");r({target:"Array",proto:!0,forced:!s||!c},{filter:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}})},"4df4":function(t,e,n){var r=n("0366"),i=n("7b0b"),o=n("9bdd"),a=n("e95a"),s=n("50c4"),c=n("8418"),l=n("35a1");t.exports=function(t){var e,n,u,d,f,h,p=i(t),L="function"==typeof this?this:Array,v=arguments.length,y=v>1?arguments[1]:void 0,g=void 0!==y,b=l(p),m=0;if(g&&(y=r(y,v>2?arguments[2]:void 0,2)),null==b||L==Array&&a(b))for(n=new L(e=s(p.length));e>m;m++)h=g?y(p[m],m):p[m],c(n,m,h);else for(f=(d=b.call(p)).next,n=new L;!(u=f.call(d)).done;m++)h=g?o(d,y,[u.value,m],!0):u.value,c(n,m,h);return n.length=m,n}},"50c4":function(t,e,n){var r=n("a691"),i=Math.min;t.exports=function(t){return t>0?i(r(t),9007199254740991):0}},5135:function(t,e){var n={}.hasOwnProperty;t.exports=function(t,e){return n.call(t,e)}},5692:function(t,e,n){var r=n("c430"),i=n("c6cd");(t.exports=function(t,e){return i[t]||(i[t]=void 0!==e?e:{})})("versions",[]).push({version:"3.6.4",mode:r?"pure":"global",copyright:"© 2020 Denis Pushkarev (zloirock.ru)"})},"56ef":function(t,e,n){var r=n("d066"),i=n("241c"),o=n("7418"),a=n("825a");t.exports=r("Reflect","ownKeys")||function(t){var e=i.f(a(t)),n=o.f;return n?e.concat(n(t)):e}},5899:function(t,e){t.exports="\t\n\v\f\r \u2028\u2029\ufeff"},"58a8":function(t,e,n){var r=n("1d80"),i="["+n("5899")+"]",o=RegExp("^"+i+i+"*"),a=RegExp(i+i+"*$"),s=function(t){return function(e){var n=String(r(e));return 1&t&&(n=n.replace(o,"")),2&t&&(n=n.replace(a,"")),n}};t.exports={start:s(1),end:s(2),trim:s(3)}},"5c6c":function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},"60da":function(t,e,n){var r=n("83ab"),i=n("d039"),o=n("df75"),a=n("7418"),s=n("d1e7"),c=n("7b0b"),l=n("44ad"),u=Object.assign,d=Object.defineProperty;t.exports=!u||i((function(){if(r&&1!==u({b:1},u(d({},"a",{enumerable:!0,get:function(){d(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var t={},e={},n=Symbol();return t[n]=7,"abcdefghijklmnopqrst".split("").forEach((function(t){e[t]=t})),7!=u({},t)[n]||"abcdefghijklmnopqrst"!=o(u({},e)).join("")}))?function(t,e){for(var n=c(t),i=arguments.length,u=1,d=a.f,f=s.f;i>u;)for(var h,p=l(arguments[u++]),L=d?o(p).concat(d(p)):o(p),v=L.length,y=0;v>y;)h=L[y++],r&&!f.call(p,h)||(n[h]=p[h]);return n}:u},6547:function(t,e,n){var r=n("a691"),i=n("1d80"),o=function(t){return function(e,n){var o,a,s=String(i(e)),c=r(n),l=s.length;return c<0||c>=l?t?"":void 0:(o=s.charCodeAt(c))<55296||o>56319||c+1===l||(a=s.charCodeAt(c+1))<56320||a>57343?t?s.charAt(c):o:t?s.slice(c,c+2):a-56320+(o-55296<<10)+65536}};t.exports={codeAt:o(!1),charAt:o(!0)}},"65f0":function(t,e,n){var r=n("861d"),i=n("e8b5"),o=n("b622")("species");t.exports=function(t,e){var n;return i(t)&&("function"!=typeof(n=t.constructor)||n!==Array&&!i(n.prototype)?r(n)&&null===(n=n[o])&&(n=void 0):n=void 0),new(void 0===n?Array:n)(0===e?0:e)}},"69f3":function(t,e,n){var r,i,o,a=n("7f9a"),s=n("da84"),c=n("861d"),l=n("9112"),u=n("5135"),d=n("f772"),f=n("d012"),h=s.WeakMap;if(a){var p=new h,L=p.get,v=p.has,y=p.set;r=function(t,e){return y.call(p,t,e),e},i=function(t){return L.call(p,t)||{}},o=function(t){return v.call(p,t)}}else{var g=d("state");f[g]=!0,r=function(t,e){return l(t,g,e),e},i=function(t){return u(t,g)?t[g]:{}},o=function(t){return u(t,g)}}t.exports={set:r,get:i,has:o,enforce:function(t){return o(t)?i(t):r(t,{})},getterFor:function(t){return function(e){var n;if(!c(e)||(n=i(e)).type!==t)throw TypeError("Incompatible receiver, "+t+" required");return n}}}},"6dd8":function(t,e,n){(function(t){var n=function(){if("undefined"!=typeof Map)return Map;function t(t,e){var n=-1;return t.some((function(t,r){return t[0]===e&&(n=r,!0)})),n}return function(){function e(){this.__entries__=[]}return Object.defineProperty(e.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),e.prototype.get=function(e){var n=t(this.__entries__,e),r=this.__entries__[n];return r&&r[1]},e.prototype.set=function(e,n){var r=t(this.__entries__,e);~r?this.__entries__[r][1]=n:this.__entries__.push([e,n])},e.prototype.delete=function(e){var n=this.__entries__,r=t(n,e);~r&&n.splice(r,1)},e.prototype.has=function(e){return!!~t(this.__entries__,e)},e.prototype.clear=function(){this.__entries__.splice(0)},e.prototype.forEach=function(t,e){void 0===e&&(e=null);for(var n=0,r=this.__entries__;n<r.length;n++){var i=r[n];t.call(e,i[1],i[0])}},e}()}(),r="undefined"!=typeof window&&"undefined"!=typeof document&&window.document===document,i=void 0!==t&&t.Math===Math?t:"undefined"!=typeof self&&self.Math===Math?self:"undefined"!=typeof window&&window.Math===Math?window:Function("return this")(),o="function"==typeof requestAnimationFrame?requestAnimationFrame.bind(i):function(t){return setTimeout((function(){return t(Date.now())}),1e3/60)},a=["top","right","bottom","left","width","height","size","weight"],s="undefined"!=typeof MutationObserver,c=function(){function t(){this.connected_=!1,this.mutationEventsAdded_=!1,this.mutationsObserver_=null,this.observers_=[],this.onTransitionEnd_=this.onTransitionEnd_.bind(this),this.refresh=function(t,e){var n=!1,r=!1,i=0;function a(){n&&(n=!1,t()),r&&c()}function s(){o(a)}function c(){var t=Date.now();if(n){if(t-i<2)return;r=!0}else n=!0,r=!1,setTimeout(s,20);i=t}return c}(this.refresh.bind(this))}return t.prototype.addObserver=function(t){~this.observers_.indexOf(t)||this.observers_.push(t),this.connected_||this.connect_()},t.prototype.removeObserver=function(t){var e=this.observers_,n=e.indexOf(t);~n&&e.splice(n,1),!e.length&&this.connected_&&this.disconnect_()},t.prototype.refresh=function(){this.updateObservers_()&&this.refresh()},t.prototype.updateObservers_=function(){var t=this.observers_.filter((function(t){return t.gatherActive(),t.hasActive()}));return t.forEach((function(t){return t.broadcastActive()})),t.length>0},t.prototype.connect_=function(){r&&!this.connected_&&(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),s?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},t.prototype.disconnect_=function(){r&&this.connected_&&(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},t.prototype.onTransitionEnd_=function(t){var e=t.propertyName,n=void 0===e?"":e;a.some((function(t){return!!~n.indexOf(t)}))&&this.refresh()},t.getInstance=function(){return this.instance_||(this.instance_=new t),this.instance_},t.instance_=null,t}(),l=function(t,e){for(var n=0,r=Object.keys(e);n<r.length;n++){var i=r[n];Object.defineProperty(t,i,{value:e[i],enumerable:!1,writable:!1,configurable:!0})}return t},u=function(t){return t&&t.ownerDocument&&t.ownerDocument.defaultView||i},d=v(0,0,0,0);function f(t){return parseFloat(t)||0}function h(t){for(var e=[],n=1;n<arguments.length;n++)e[n-1]=arguments[n];return e.reduce((function(e,n){return e+f(t["border-"+n+"-width"])}),0)}var p="undefined"!=typeof SVGGraphicsElement?function(t){return t instanceof u(t).SVGGraphicsElement}:function(t){return t instanceof u(t).SVGElement&&"function"==typeof t.getBBox};function L(t){return r?p(t)?function(t){var e=t.getBBox();return v(0,0,e.width,e.height)}(t):function(t){var e=t.clientWidth,n=t.clientHeight;if(!e&&!n)return d;var r=u(t).getComputedStyle(t),i=function(t){for(var e={},n=0,r=["top","right","bottom","left"];n<r.length;n++){var i=r[n],o=t["padding-"+i];e[i]=f(o)}return e}(r),o=i.left+i.right,a=i.top+i.bottom,s=f(r.width),c=f(r.height);if("border-box"===r.boxSizing&&(Math.round(s+o)!==e&&(s-=h(r,"left","right")+o),Math.round(c+a)!==n&&(c-=h(r,"top","bottom")+a)),!function(t){return t===u(t).document.documentElement}(t)){var l=Math.round(s+o)-e,p=Math.round(c+a)-n;1!==Math.abs(l)&&(s-=l),1!==Math.abs(p)&&(c-=p)}return v(i.left,i.top,s,c)}(t):d}function v(t,e,n,r){return{x:t,y:e,width:n,height:r}}var y=function(){function t(t){this.broadcastWidth=0,this.broadcastHeight=0,this.contentRect_=v(0,0,0,0),this.target=t}return t.prototype.isActive=function(){var t=L(this.target);return this.contentRect_=t,t.width!==this.broadcastWidth||t.height!==this.broadcastHeight},t.prototype.broadcastRect=function(){var t=this.contentRect_;return this.broadcastWidth=t.width,this.broadcastHeight=t.height,t},t}(),g=function(t,e){var n,r,i,o,a,s,c,u=(r=(n=e).x,i=n.y,o=n.width,a=n.height,s="undefined"!=typeof DOMRectReadOnly?DOMRectReadOnly:Object,c=Object.create(s.prototype),l(c,{x:r,y:i,width:o,height:a,top:i,right:r+o,bottom:a+i,left:r}),c);l(this,{target:t,contentRect:u})},b=function(){function t(t,e,r){if(this.activeObservations_=[],this.observations_=new n,"function"!=typeof t)throw new TypeError("The callback provided as parameter 1 is not a function.");this.callback_=t,this.controller_=e,this.callbackCtx_=r}return t.prototype.observe=function(t){if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");if("undefined"!=typeof Element&&Element instanceof Object){if(!(t instanceof u(t).Element))throw new TypeError('parameter 1 is not of type "Element".');var e=this.observations_;e.has(t)||(e.set(t,new y(t)),this.controller_.addObserver(this),this.controller_.refresh())}},t.prototype.unobserve=function(t){if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");if("undefined"!=typeof Element&&Element instanceof Object){if(!(t instanceof u(t).Element))throw new TypeError('parameter 1 is not of type "Element".');var e=this.observations_;e.has(t)&&(e.delete(t),e.size||this.controller_.removeObserver(this))}},t.prototype.disconnect=function(){this.clearActive(),this.observations_.clear(),this.controller_.removeObserver(this)},t.prototype.gatherActive=function(){var t=this;this.clearActive(),this.observations_.forEach((function(e){e.isActive()&&t.activeObservations_.push(e)}))},t.prototype.broadcastActive=function(){if(this.hasActive()){var t=this.callbackCtx_,e=this.activeObservations_.map((function(t){return new g(t.target,t.broadcastRect())}));this.callback_.call(t,e,t),this.clearActive()}},t.prototype.clearActive=function(){this.activeObservations_.splice(0)},t.prototype.hasActive=function(){return this.activeObservations_.length>0},t}(),m="undefined"!=typeof WeakMap?new WeakMap:new n,w=function t(e){if(!(this instanceof t))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var n=c.getInstance(),r=new b(e,n,this);m.set(this,r)};["observe","unobserve","disconnect"].forEach((function(t){w.prototype[t]=function(){var e;return(e=m.get(this))[t].apply(e,arguments)}}));var S=void 0!==i.ResizeObserver?i.ResizeObserver:w;e.a=S}).call(this,n("c8ba"))},"6ea2":function(t,e,n){var r=n("890c");n.n(r).a},"6eeb":function(t,e,n){var r=n("da84"),i=n("9112"),o=n("5135"),a=n("ce4e"),s=n("8925"),c=n("69f3"),l=c.get,u=c.enforce,d=String(String).split("String");(t.exports=function(t,e,n,s){var c=!!s&&!!s.unsafe,l=!!s&&!!s.enumerable,f=!!s&&!!s.noTargetGet;"function"==typeof n&&("string"!=typeof e||o(n,"name")||i(n,"name",e),u(n).source=d.join("string"==typeof e?e:"")),t!==r?(c?!f&&t[e]&&(l=!0):delete t[e],l?t[e]=n:i(t,e,n)):l?t[e]=n:a(e,n)})(Function.prototype,"toString",(function(){return"function"==typeof this&&l(this).source||s(this)}))},"6f53":function(t,e,n){var r=n("83ab"),i=n("df75"),o=n("fc6a"),a=n("d1e7").f,s=function(t){return function(e){for(var n,s=o(e),c=i(s),l=c.length,u=0,d=[];l>u;)n=c[u++],r&&!a.call(s,n)||d.push(t?[n,s[n]]:s[n]);return d}};t.exports={entries:s(!0),values:s(!1)}},7156:function(t,e,n){var r=n("861d"),i=n("d2bb");t.exports=function(t,e,n){var o,a;return i&&"function"==typeof(o=e.constructor)&&o!==n&&r(a=o.prototype)&&a!==n.prototype&&i(t,a),t}},7418:function(t,e){e.f=Object.getOwnPropertySymbols},"746f":function(t,e,n){var r=n("428f"),i=n("5135"),o=n("e538"),a=n("9bf2").f;t.exports=function(t){var e=r.Symbol||(r.Symbol={});i(e,t)||a(e,t,{value:o.f(t)})}},7839:function(t,e){t.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},"7b0b":function(t,e,n){var r=n("1d80");t.exports=function(t){return Object(r(t))}},"7c73":function(t,e,n){var r,i=n("825a"),o=n("37e8"),a=n("7839"),s=n("d012"),c=n("1be4"),l=n("cc12"),u=n("f772")("IE_PROTO"),d=function(){},f=function(t){return"<script>"+t+"<\/script>"},h=function(){try{r=document.domain&&new ActiveXObject("htmlfile")}catch(t){}var t,e;h=r?function(t){t.write(f("")),t.close();var e=t.parentWindow.Object;return t=null,e}(r):((e=l("iframe")).style.display="none",c.appendChild(e),e.src=String("javascript:"),(t=e.contentWindow.document).open(),t.write(f("document.F=Object")),t.close(),t.F);for(var n=a.length;n--;)delete h.prototype[a[n]];return h()};s[u]=!0,t.exports=Object.create||function(t,e){var n;return null!==t?(d.prototype=i(t),n=new d,d.prototype=null,n[u]=t):n=h(),void 0===e?n:o(n,e)}},"7dd0":function(t,e,n){var r=n("23e7"),i=n("9ed3"),o=n("e163"),a=n("d2bb"),s=n("d44e"),c=n("9112"),l=n("6eeb"),u=n("b622"),d=n("c430"),f=n("3f8c"),h=n("ae93"),p=h.IteratorPrototype,L=h.BUGGY_SAFARI_ITERATORS,v=u("iterator"),y=function(){return this};t.exports=function(t,e,n,u,h,g,b){i(n,e,u);var m,w,S,_=function(t){if(t===h&&j)return j;if(!L&&t in T)return T[t];switch(t){case"keys":case"values":case"entries":return function(){return new n(this,t)}}return function(){return new n(this)}},k=e+" Iterator",x=!1,T=t.prototype,O=T[v]||T["@@iterator"]||h&&T[h],j=!L&&O||_(h),M="Array"==e&&T.entries||O;if(M&&(m=o(M.call(new t)),p!==Object.prototype&&m.next&&(d||o(m)===p||(a?a(m,p):"function"!=typeof m[v]&&c(m,v,y)),s(m,k,!0,!0),d&&(f[k]=y))),"values"==h&&O&&"values"!==O.name&&(x=!0,j=function(){return O.call(this)}),d&&!b||T[v]===j||c(T,v,j),f[e]=j,h)if(w={values:_("values"),keys:g?j:_("keys"),entries:_("entries")},b)for(S in w)(L||x||!(S in T))&&l(T,S,w[S]);else r({target:e,proto:!0,forced:L||x},w);return w}},"7f9a":function(t,e,n){var r=n("da84"),i=n("8925"),o=r.WeakMap;t.exports="function"==typeof o&&/native code/.test(i(o))},"825a":function(t,e,n){var r=n("861d");t.exports=function(t){if(!r(t))throw TypeError(String(t)+" is not an object");return t}},"83ab":function(t,e,n){var r=n("d039");t.exports=!r((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},8418:function(t,e,n){var r=n("c04e"),i=n("9bf2"),o=n("5c6c");t.exports=function(t,e,n){var a=r(e);a in t?i.f(t,a,o(0,n)):t[a]=n}},"861d":function(t,e){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},"88bc":function(t,e,n){(function(e){var n="object"==typeof e&&e&&e.Object===Object&&e,r="object"==typeof self&&self&&self.Object===Object&&self,i=n||r||Function("return this")();function o(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}function a(t,e){for(var n=-1,r=e.length,i=t.length;++n<r;)t[i+n]=e[n];return t}var s=Object.prototype,c=s.hasOwnProperty,l=s.toString,u=i.Symbol,d=s.propertyIsEnumerable,f=u?u.isConcatSpreadable:void 0,h=Math.max;function p(t){return v(t)||function(t){return function(t){return y(t)&&function(t){return null!=t&&function(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991}(t.length)&&!function(t){var e=function(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}(t)?l.call(t):"";return"[object Function]"==e||"[object GeneratorFunction]"==e}(t)}(t)}(t)&&c.call(t,"callee")&&(!d.call(t,"callee")||"[object Arguments]"==l.call(t))}(t)||!!(f&&t&&t[f])}function L(t){if("string"==typeof t||function(t){return"symbol"==typeof t||y(t)&&"[object Symbol]"==l.call(t)}(t))return t;var e=t+"";return"0"==e&&1/t==-1/0?"-0":e}var v=Array.isArray;function y(t){return!!t&&"object"==typeof t}var g,b,m=(g=function(t,e){return null==t?{}:function(t,e){return function(t,e,n){for(var r=-1,i=e.length,o={};++r<i;){var a=e[r],s=t[a];n(s,a)&&(o[a]=s)}return o}(t=Object(t),e,(function(e,n){return n in t}))}(t,function(t,e){for(var n=-1,r=t?t.length:0,i=Array(r);++n<r;)i[n]=e(t[n],n,t);return i}(function t(e,n,r,i,o){var s=-1,c=e.length;for(r||(r=p),o||(o=[]);++s<c;){var l=e[s];n>0&&r(l)?n>1?t(l,n-1,r,i,o):a(o,l):i||(o[o.length]=l)}return o}(e,1),L))},b=h(void 0===b?g.length-1:b,0),function(){for(var t=arguments,e=-1,n=h(t.length-b,0),r=Array(n);++e<n;)r[e]=t[b+e];e=-1;for(var i=Array(b+1);++e<b;)i[e]=t[e];return i[b]=r,o(g,this,i)});t.exports=m}).call(this,n("c8ba"))},"890c":function(t,e,n){},8925:function(t,e,n){var r=n("c6cd"),i=Function.toString;"function"!=typeof r.inspectSource&&(r.inspectSource=function(t){return i.call(t)}),t.exports=r.inspectSource},"8aa5":function(t,e,n){var r=n("6547").charAt;t.exports=function(t,e,n){return e+(n?r(t,e).length:1)}},"8e95":function(t,e,n){var r=n("c195");t.exports=new r},9020:function(t,e){function n(t){this.options=t,!t.deferSetup&&this.setup()}n.prototype={constructor:n,setup:function(){this.options.setup&&this.options.setup(),this.initialised=!0},on:function(){!this.initialised&&this.setup(),this.options.match&&this.options.match()},off:function(){this.options.unmatch&&this.options.unmatch()},destroy:function(){this.options.destroy?this.options.destroy():this.off()},equals:function(t){return this.options===t||this.options.match===t}},t.exports=n},"90e3":function(t,e){var n=0,r=Math.random();t.exports=function(t){return"Symbol("+String(void 0===t?"":t)+")_"+(++n+r).toString(36)}},9112:function(t,e,n){var r=n("83ab"),i=n("9bf2"),o=n("5c6c");t.exports=r?function(t,e,n){return i.f(t,e,o(1,n))}:function(t,e,n){return t[e]=n,t}},9263:function(t,e,n){var r,i,o=n("ad6d"),a=n("9f7f"),s=RegExp.prototype.exec,c=String.prototype.replace,l=s,u=(r=/a/,i=/b*/g,s.call(r,"a"),s.call(i,"a"),0!==r.lastIndex||0!==i.lastIndex),d=a.UNSUPPORTED_Y||a.BROKEN_CARET,f=void 0!==/()??/.exec("")[1];(u||f||d)&&(l=function(t){var e,n,r,i,a=this,l=d&&a.sticky,h=o.call(a),p=a.source,L=0,v=t;return l&&(-1===(h=h.replace("y","")).indexOf("g")&&(h+="g"),v=String(t).slice(a.lastIndex),a.lastIndex>0&&(!a.multiline||a.multiline&&"\n"!==t[a.lastIndex-1])&&(p="(?: "+p+")",v=" "+v,L++),n=new RegExp("^(?:"+p+")",h)),f&&(n=new RegExp("^"+p+"$(?!\\s)",h)),u&&(e=a.lastIndex),r=s.call(l?n:a,v),l?r?(r.input=r.input.slice(L),r[0]=r[0].slice(L),r.index=a.lastIndex,a.lastIndex+=r[0].length):a.lastIndex=0:u&&r&&(a.lastIndex=a.global?r.index+r[0].length:e),f&&r&&r.length>1&&c.call(r[0],n,(function(){for(i=1;i<arguments.length-2;i++)void 0===arguments[i]&&(r[i]=void 0)})),r}),t.exports=l},"94ca":function(t,e,n){var r=n("d039"),i=/#|\.prototype\./,o=function(t,e){var n=s[a(t)];return n==l||n!=c&&("function"==typeof e?r(e):!!e)},a=o.normalize=function(t){return String(t).replace(i,".").toLowerCase()},s=o.data={},c=o.NATIVE="N",l=o.POLYFILL="P";t.exports=o},"99af":function(t,e,n){var r=n("23e7"),i=n("d039"),o=n("e8b5"),a=n("861d"),s=n("7b0b"),c=n("50c4"),l=n("8418"),u=n("65f0"),d=n("1dde"),f=n("b622"),h=n("2d00"),p=f("isConcatSpreadable"),L=h>=51||!i((function(){var t=[];return t[p]=!1,t.concat()[0]!==t})),v=d("concat"),y=function(t){if(!a(t))return!1;var e=t[p];return void 0!==e?!!e:o(t)};r({target:"Array",proto:!0,forced:!L||!v},{concat:function(t){var e,n,r,i,o,a=s(this),d=u(a,0),f=0;for(e=-1,r=arguments.length;e<r;e++)if(y(o=-1===e?a:arguments[e])){if(f+(i=c(o.length))>9007199254740991)throw TypeError("Maximum allowed index exceeded");for(n=0;n<i;n++,f++)n in o&&l(d,f,o[n])}else{if(f>=9007199254740991)throw TypeError("Maximum allowed index exceeded");l(d,f++,o)}return d.length=f,d}})},"9bdd":function(t,e,n){var r=n("825a");t.exports=function(t,e,n,i){try{return i?e(r(n)[0],n[1]):e(n)}catch(e){var o=t.return;throw void 0!==o&&r(o.call(t)),e}}},"9bf2":function(t,e,n){var r=n("83ab"),i=n("0cfb"),o=n("825a"),a=n("c04e"),s=Object.defineProperty;e.f=r?s:function(t,e,n){if(o(t),e=a(e,!0),o(n),i)try{return s(t,e,n)}catch(t){}if("get"in n||"set"in n)throw TypeError("Accessors not supported");return"value"in n&&(t[e]=n.value),t}},"9ed3":function(t,e,n){var r=n("ae93").IteratorPrototype,i=n("7c73"),o=n("5c6c"),a=n("d44e"),s=n("3f8c"),c=function(){return this};t.exports=function(t,e,n){var l=e+" Iterator";return t.prototype=i(r,{next:o(1,n)}),a(t,l,!1,!0),s[l]=c,t}},"9f7f":function(t,e,n){var r=n("d039");function i(t,e){return RegExp(t,e)}e.UNSUPPORTED_Y=r((function(){var t=i("a","y");return t.lastIndex=2,null!=t.exec("abcd")})),e.BROKEN_CARET=r((function(){var t=i("^r","gy");return t.lastIndex=2,null!=t.exec("str")}))},a15b:function(t,e,n){var r=n("23e7"),i=n("44ad"),o=n("fc6a"),a=n("a640"),s=[].join,c=i!=Object,l=a("join",",");r({target:"Array",proto:!0,forced:c||!l},{join:function(t){return s.call(o(this),void 0===t?",":t)}})},a48b:function(t,e,n){var r=n("0497"),i=function(t){var e="",n=Object.keys(t);return n.forEach((function(i,o){var a=t[i];(function(t){return/[height|width]$/.test(t)})(i=r(i))&&"number"==typeof a&&(a+="px"),e+=!0===a?i:!1===a?"not "+i:"("+i+": "+a+")",o<n.length-1&&(e+=" and ")})),e};t.exports=function(t){var e="";return"string"==typeof t?t:t instanceof Array?(t.forEach((function(n,r){e+=i(n),r<t.length-1&&(e+=", ")})),e):i(t)}},a4d3:function(t,e,n){var r=n("23e7"),i=n("da84"),o=n("d066"),a=n("c430"),s=n("83ab"),c=n("4930"),l=n("fdbf"),u=n("d039"),d=n("5135"),f=n("e8b5"),h=n("861d"),p=n("825a"),L=n("7b0b"),v=n("fc6a"),y=n("c04e"),g=n("5c6c"),b=n("7c73"),m=n("df75"),w=n("241c"),S=n("057f"),_=n("7418"),k=n("06cf"),x=n("9bf2"),T=n("d1e7"),O=n("9112"),j=n("6eeb"),M=n("5692"),E=n("f772"),C=n("d012"),A=n("90e3"),$=n("b622"),D=n("e538"),I=n("746f"),V=n("d44e"),R=n("69f3"),P=n("b727").forEach,z=E("hidden"),H=$("toPrimitive"),W=R.set,N=R.getterFor("Symbol"),Y=Object.prototype,B=i.Symbol,F=o("JSON","stringify"),Z=k.f,G=x.f,U=S.f,q=T.f,J=M("symbols"),X=M("op-symbols"),K=M("string-to-symbol-registry"),Q=M("symbol-to-string-registry"),tt=M("wks"),et=i.QObject,nt=!et||!et.prototype||!et.prototype.findChild,rt=s&&u((function(){return 7!=b(G({},"a",{get:function(){return G(this,"a",{value:7}).a}})).a}))?function(t,e,n){var r=Z(Y,e);r&&delete Y[e],G(t,e,n),r&&t!==Y&&G(Y,e,r)}:G,it=function(t,e){var n=J[t]=b(B.prototype);return W(n,{type:"Symbol",tag:t,description:e}),s||(n.description=e),n},ot=l?function(t){return"symbol"==typeof t}:function(t){return Object(t)instanceof B},at=function(t,e,n){t===Y&&at(X,e,n),p(t);var r=y(e,!0);return p(n),d(J,r)?(n.enumerable?(d(t,z)&&t[z][r]&&(t[z][r]=!1),n=b(n,{enumerable:g(0,!1)})):(d(t,z)||G(t,z,g(1,{})),t[z][r]=!0),rt(t,r,n)):G(t,r,n)},st=function(t,e){p(t);var n=v(e),r=m(n).concat(dt(n));return P(r,(function(e){s&&!ct.call(n,e)||at(t,e,n[e])})),t},ct=function(t){var e=y(t,!0),n=q.call(this,e);return!(this===Y&&d(J,e)&&!d(X,e))&&(!(n||!d(this,e)||!d(J,e)||d(this,z)&&this[z][e])||n)},lt=function(t,e){var n=v(t),r=y(e,!0);if(n!==Y||!d(J,r)||d(X,r)){var i=Z(n,r);return!i||!d(J,r)||d(n,z)&&n[z][r]||(i.enumerable=!0),i}},ut=function(t){var e=U(v(t)),n=[];return P(e,(function(t){d(J,t)||d(C,t)||n.push(t)})),n},dt=function(t){var e=t===Y,n=U(e?X:v(t)),r=[];return P(n,(function(t){!d(J,t)||e&&!d(Y,t)||r.push(J[t])})),r};c||(j((B=function(){if(this instanceof B)throw TypeError("Symbol is not a constructor");var t=arguments.length&&void 0!==arguments[0]?String(arguments[0]):void 0,e=A(t),n=function(t){this===Y&&n.call(X,t),d(this,z)&&d(this[z],e)&&(this[z][e]=!1),rt(this,e,g(1,t))};return s&&nt&&rt(Y,e,{configurable:!0,set:n}),it(e,t)}).prototype,"toString",(function(){return N(this).tag})),j(B,"withoutSetter",(function(t){return it(A(t),t)})),T.f=ct,x.f=at,k.f=lt,w.f=S.f=ut,_.f=dt,D.f=function(t){return it($(t),t)},s&&(G(B.prototype,"description",{configurable:!0,get:function(){return N(this).description}}),a||j(Y,"propertyIsEnumerable",ct,{unsafe:!0}))),r({global:!0,wrap:!0,forced:!c,sham:!c},{Symbol:B}),P(m(tt),(function(t){I(t)})),r({target:"Symbol",stat:!0,forced:!c},{for:function(t){var e=String(t);if(d(K,e))return K[e];var n=B(e);return K[e]=n,Q[n]=e,n},keyFor:function(t){if(!ot(t))throw TypeError(t+" is not a symbol");if(d(Q,t))return Q[t]},useSetter:function(){nt=!0},useSimple:function(){nt=!1}}),r({target:"Object",stat:!0,forced:!c,sham:!s},{create:function(t,e){return void 0===e?b(t):st(b(t),e)},defineProperty:at,defineProperties:st,getOwnPropertyDescriptor:lt}),r({target:"Object",stat:!0,forced:!c},{getOwnPropertyNames:ut,getOwnPropertySymbols:dt}),r({target:"Object",stat:!0,forced:u((function(){_.f(1)}))},{getOwnPropertySymbols:function(t){return _.f(L(t))}}),F&&r({target:"JSON",stat:!0,forced:!c||u((function(){var t=B();return"[null]"!=F([t])||"{}"!=F({a:t})||"{}"!=F(Object(t))}))},{stringify:function(t,e,n){for(var r,i=[t],o=1;arguments.length>o;)i.push(arguments[o++]);if(r=e,(h(e)||void 0!==t)&&!ot(t))return f(e)||(e=function(t,e){if("function"==typeof r&&(e=r.call(this,t,e)),!ot(e))return e}),i[1]=e,F.apply(null,i)}}),B.prototype[H]||O(B.prototype,H,B.prototype.valueOf),V(B,"Symbol"),C[z]=!0},a623:function(t,e,n){var r=n("23e7"),i=n("b727").every,o=n("a640"),a=n("ae40"),s=o("every"),c=a("every");r({target:"Array",proto:!0,forced:!s||!c},{every:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}})},a630:function(t,e,n){var r=n("23e7"),i=n("4df4");r({target:"Array",stat:!0,forced:!n("1c7e")((function(t){Array.from(t)}))},{from:i})},a640:function(t,e,n){var r=n("d039");t.exports=function(t,e){var n=[][t];return!!n&&r((function(){n.call(null,e||function(){throw 1},1)}))}},a691:function(t,e){var n=Math.ceil,r=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?r:n)(t)}},a9e3:function(t,e,n){var r=n("83ab"),i=n("da84"),o=n("94ca"),a=n("6eeb"),s=n("5135"),c=n("c6b6"),l=n("7156"),u=n("c04e"),d=n("d039"),f=n("7c73"),h=n("241c").f,p=n("06cf").f,L=n("9bf2").f,v=n("58a8").trim,y=i.Number,g=y.prototype,b="Number"==c(f(g)),m=function(t){var e,n,r,i,o,a,s,c,l=u(t,!1);if("string"==typeof l&&l.length>2)if(43===(e=(l=v(l)).charCodeAt(0))||45===e){if(88===(n=l.charCodeAt(2))||120===n)return NaN}else if(48===e){switch(l.charCodeAt(1)){case 66:case 98:r=2,i=49;break;case 79:case 111:r=8,i=55;break;default:return+l}for(a=(o=l.slice(2)).length,s=0;s<a;s++)if((c=o.charCodeAt(s))<48||c>i)return NaN;return parseInt(o,r)}return+l};if(o("Number",!y(" 0o1")||!y("0b1")||y("+0x1"))){for(var w,S=function(t){var e=arguments.length<1?0:t,n=this;return n instanceof S&&(b?d((function(){g.valueOf.call(n)})):"Number"!=c(n))?l(new y(m(e)),n,S):m(e)},_=r?h(y):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),k=0;_.length>k;k++)s(y,w=_[k])&&!s(S,w)&&L(S,w,p(y,w));S.prototype=g,g.constructor=S,a(i,"Number",S)}},ac1f:function(t,e,n){var r=n("23e7"),i=n("9263");r({target:"RegExp",proto:!0,forced:/./.exec!==i},{exec:i})},ad6d:function(t,e,n){var r=n("825a");t.exports=function(){var t=r(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.dotAll&&(e+="s"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}},ae40:function(t,e,n){var r=n("83ab"),i=n("d039"),o=n("5135"),a=Object.defineProperty,s={},c=function(t){throw t};t.exports=function(t,e){if(o(s,t))return s[t];e||(e={});var n=[][t],l=!!o(e,"ACCESSORS")&&e.ACCESSORS,u=o(e,0)?e[0]:c,d=o(e,1)?e[1]:void 0;return s[t]=!!n&&!i((function(){if(l&&!r)return!0;var t={length:-1};l?a(t,1,{enumerable:!0,get:c}):t[1]=1,n.call(t,u,d)}))}},ae93:function(t,e,n){var r,i,o,a=n("e163"),s=n("9112"),c=n("5135"),l=n("b622"),u=n("c430"),d=l("iterator"),f=!1;[].keys&&("next"in(o=[].keys())?(i=a(a(o)))!==Object.prototype&&(r=i):f=!0),null==r&&(r={}),u||c(r,d)||s(r,d,(function(){return this})),t.exports={IteratorPrototype:r,BUGGY_SAFARI_ITERATORS:f}},b041:function(t,e,n){var r=n("00ee"),i=n("f5df");t.exports=r?{}.toString:function(){return"[object "+i(this)+"]"}},b0c0:function(t,e,n){var r=n("83ab"),i=n("9bf2").f,o=Function.prototype,a=o.toString,s=/^\s*function ([^ (]*)/;r&&!("name"in o)&&i(o,"name",{configurable:!0,get:function(){try{return a.call(this).match(s)[1]}catch(t){return""}}})},b622:function(t,e,n){var r=n("da84"),i=n("5692"),o=n("5135"),a=n("90e3"),s=n("4930"),c=n("fdbf"),l=i("wks"),u=r.Symbol,d=c?u:u&&u.withoutSetter||a;t.exports=function(t){return o(l,t)||(s&&o(u,t)?l[t]=u[t]:l[t]=d("Symbol."+t)),l[t]}},b64b:function(t,e,n){var r=n("23e7"),i=n("7b0b"),o=n("df75");r({target:"Object",stat:!0,forced:n("d039")((function(){o(1)}))},{keys:function(t){return o(i(t))}})},b727:function(t,e,n){var r=n("0366"),i=n("44ad"),o=n("7b0b"),a=n("50c4"),s=n("65f0"),c=[].push,l=function(t){var e=1==t,n=2==t,l=3==t,u=4==t,d=6==t,f=5==t||d;return function(h,p,L,v){for(var y,g,b=o(h),m=i(b),w=r(p,L,3),S=a(m.length),_=0,k=v||s,x=e?k(h,S):n?k(h,0):void 0;S>_;_++)if((f||_ in m)&&(g=w(y=m[_],_,b),t))if(e)x[_]=g;else if(g)switch(t){case 3:return!0;case 5:return y;case 6:return _;case 2:c.call(x,y)}else if(u)return!1;return d?-1:l||u?u:x}};t.exports={forEach:l(0),map:l(1),filter:l(2),some:l(3),every:l(4),find:l(5),findIndex:l(6)}},bcf7:function(t,e,n){var r=n("9020"),i=n("217d").each;function o(t,e){this.query=t,this.isUnconditional=e,this.handlers=[],this.mql=window.matchMedia(t);var n=this;this.listener=function(t){n.mql=t.currentTarget||t,n.assess()},this.mql.addListener(this.listener)}o.prototype={constuctor:o,addHandler:function(t){var e=new r(t);this.handlers.push(e),this.matches()&&e.on()},removeHandler:function(t){var e=this.handlers;i(e,(function(n,r){if(n.equals(t))return n.destroy(),!e.splice(r,1)}))},matches:function(){return this.mql.matches||this.isUnconditional},clear:function(){i(this.handlers,(function(t){t.destroy()})),this.mql.removeListener(this.listener),this.handlers.length=0},assess:function(){var t=this.matches()?"on":"off";i(this.handlers,(function(e){e[t]()}))}},t.exports=o},c04e:function(t,e,n){var r=n("861d");t.exports=function(t,e){if(!r(t))return t;var n,i;if(e&&"function"==typeof(n=t.toString)&&!r(i=n.call(t)))return i;if("function"==typeof(n=t.valueOf)&&!r(i=n.call(t)))return i;if(!e&&"function"==typeof(n=t.toString)&&!r(i=n.call(t)))return i;throw TypeError("Can't convert object to primitive value")}},c195:function(t,e,n){var r=n("bcf7"),i=n("217d"),o=i.each,a=i.isFunction,s=i.isArray;function c(){if(!window.matchMedia)throw new Error("matchMedia not present, legacy browsers require a polyfill");this.queries={},this.browserIsIncapable=!window.matchMedia("only all").matches}c.prototype={constructor:c,register:function(t,e,n){var i=this.queries,c=n&&this.browserIsIncapable;return i[t]||(i[t]=new r(t,c)),a(e)&&(e={match:e}),s(e)||(e=[e]),o(e,(function(e){a(e)&&(e={match:e}),i[t].addHandler(e)})),this},unregister:function(t,e){var n=this.queries[t];return n&&(e?n.removeHandler(e):(n.clear(),delete this.queries[t])),this}},t.exports=c},c430:function(t,e){t.exports=!1},c6b6:function(t,e){var n={}.toString;t.exports=function(t){return n.call(t).slice(8,-1)}},c6cd:function(t,e,n){var r=n("da84"),i=n("ce4e"),o=r["__core-js_shared__"]||i("__core-js_shared__",{});t.exports=o},c832:function(t,e,n){(function(e){var n,r=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,i=/^\w*$/,o=/^\./,a=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,s=/\\(\\)?/g,c=/^\[object .+?Constructor\]$/,l="object"==typeof e&&e&&e.Object===Object&&e,u="object"==typeof self&&self&&self.Object===Object&&self,d=l||u||Function("return this")(),f=Array.prototype,h=Function.prototype,p=Object.prototype,L=d["__core-js_shared__"],v=(n=/[^.]+$/.exec(L&&L.keys&&L.keys.IE_PROTO||""))?"Symbol(src)_1."+n:"",y=h.toString,g=p.hasOwnProperty,b=p.toString,m=RegExp("^"+y.call(g).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),w=d.Symbol,S=f.splice,_=$(d,"Map"),k=$(Object,"create"),x=w?w.prototype:void 0,T=x?x.toString:void 0;function O(t){var e=-1,n=t?t.length:0;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function j(t){var e=-1,n=t?t.length:0;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function M(t){var e=-1,n=t?t.length:0;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function E(t,e){for(var n,r,i=t.length;i--;)if((n=t[i][0])===(r=e)||n!=n&&r!=r)return i;return-1}function C(t,e){for(var n,o=0,a=(e=function(t,e){if(R(t))return!1;var n=typeof t;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=t&&!z(t))||i.test(t)||!r.test(t)||null!=e&&t in Object(e)}(e,t)?[e]:R(n=e)?n:D(n)).length;null!=t&&o<a;)t=t[I(e[o++])];return o&&o==a?t:void 0}function A(t,e){var n,r,i=t.__data__;return("string"==(r=typeof(n=e))||"number"==r||"symbol"==r||"boolean"==r?"__proto__"!==n:null===n)?i["string"==typeof e?"string":"hash"]:i.map}function $(t,e){var n=function(t,e){return null==t?void 0:t[e]}(t,e);return function(t){return!(!P(t)||(e=t,v&&v in e))&&(function(t){var e=P(t)?b.call(t):"";return"[object Function]"==e||"[object GeneratorFunction]"==e}(t)||function(t){var e=!1;if(null!=t&&"function"!=typeof t.toString)try{e=!!(t+"")}catch(t){}return e}(t)?m:c).test(function(t){if(null!=t){try{return y.call(t)}catch(t){}try{return t+""}catch(t){}}return""}(t));var e}(n)?n:void 0}O.prototype.clear=function(){this.__data__=k?k(null):{}},O.prototype.delete=function(t){return this.has(t)&&delete this.__data__[t]},O.prototype.get=function(t){var e=this.__data__;if(k){var n=e[t];return"__lodash_hash_undefined__"===n?void 0:n}return g.call(e,t)?e[t]:void 0},O.prototype.has=function(t){var e=this.__data__;return k?void 0!==e[t]:g.call(e,t)},O.prototype.set=function(t,e){return this.__data__[t]=k&&void 0===e?"__lodash_hash_undefined__":e,this},j.prototype.clear=function(){this.__data__=[]},j.prototype.delete=function(t){var e=this.__data__,n=E(e,t);return!(n<0||(n==e.length-1?e.pop():S.call(e,n,1),0))},j.prototype.get=function(t){var e=this.__data__,n=E(e,t);return n<0?void 0:e[n][1]},j.prototype.has=function(t){return E(this.__data__,t)>-1},j.prototype.set=function(t,e){var n=this.__data__,r=E(n,t);return r<0?n.push([t,e]):n[r][1]=e,this},M.prototype.clear=function(){this.__data__={hash:new O,map:new(_||j),string:new O}},M.prototype.delete=function(t){return A(this,t).delete(t)},M.prototype.get=function(t){return A(this,t).get(t)},M.prototype.has=function(t){return A(this,t).has(t)},M.prototype.set=function(t,e){return A(this,t).set(t,e),this};var D=V((function(t){var e;t=null==(e=t)?"":function(t){if("string"==typeof t)return t;if(z(t))return T?T.call(t):"";var e=t+"";return"0"==e&&1/t==-1/0?"-0":e}(e);var n=[];return o.test(t)&&n.push(""),t.replace(a,(function(t,e,r,i){n.push(r?i.replace(s,"$1"):e||t)})),n}));function I(t){if("string"==typeof t||z(t))return t;var e=t+"";return"0"==e&&1/t==-1/0?"-0":e}function V(t,e){if("function"!=typeof t||e&&"function"!=typeof e)throw new TypeError("Expected a function");var n=function(){var r=arguments,i=e?e.apply(this,r):r[0],o=n.cache;if(o.has(i))return o.get(i);var a=t.apply(this,r);return n.cache=o.set(i,a),a};return n.cache=new(V.Cache||M),n}V.Cache=M;var R=Array.isArray;function P(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function z(t){return"symbol"==typeof t||function(t){return!!t&&"object"==typeof t}(t)&&"[object Symbol]"==b.call(t)}t.exports=function(t,e,n){var r=null==t?void 0:C(t,e);return void 0===r?n:r}}).call(this,n("c8ba"))},c8ba:function(t,e){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(t){"object"==typeof window&&(n=window)}t.exports=n},c975:function(t,e,n){var r=n("23e7"),i=n("4d64").indexOf,o=n("a640"),a=n("ae40"),s=[].indexOf,c=!!s&&1/[1].indexOf(1,-0)<0,l=o("indexOf"),u=a("indexOf",{ACCESSORS:!0,1:0});r({target:"Array",proto:!0,forced:c||!l||!u},{indexOf:function(t){return c?s.apply(this,arguments)||0:i(this,t,arguments.length>1?arguments[1]:void 0)}})},ca84:function(t,e,n){var r=n("5135"),i=n("fc6a"),o=n("4d64").indexOf,a=n("d012");t.exports=function(t,e){var n,s=i(t),c=0,l=[];for(n in s)!r(a,n)&&r(s,n)&&l.push(n);for(;e.length>c;)r(s,n=e[c++])&&(~o(l,n)||l.push(n));return l}},cc12:function(t,e,n){var r=n("da84"),i=n("861d"),o=r.document,a=i(o)&&i(o.createElement);t.exports=function(t){return a?o.createElement(t):{}}},cca6:function(t,e,n){var r=n("23e7"),i=n("60da");r({target:"Object",stat:!0,forced:Object.assign!==i},{assign:i})},ce4e:function(t,e,n){var r=n("da84"),i=n("9112");t.exports=function(t,e){try{i(r,t,e)}catch(n){r[t]=e}return e}},d012:function(t,e){t.exports={}},d039:function(t,e){t.exports=function(t){try{return!!t()}catch(t){return!0}}},d066:function(t,e,n){var r=n("428f"),i=n("da84"),o=function(t){return"function"==typeof t?t:void 0};t.exports=function(t,e){return arguments.length<2?o(r[t])||o(i[t]):r[t]&&r[t][e]||i[t]&&i[t][e]}},d1e7:function(t,e,n){var r={}.propertyIsEnumerable,i=Object.getOwnPropertyDescriptor,o=i&&!r.call({1:2},1);e.f=o?function(t){var e=i(this,t);return!!e&&e.enumerable}:r},d28b:function(t,e,n){n("746f")("iterator")},d2bb:function(t,e,n){var r=n("825a"),i=n("3bbe");t.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var t,e=!1,n={};try{(t=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set).call(n,[]),e=n instanceof Array}catch(t){}return function(n,o){return r(n),i(o),e?t.call(n,o):n.__proto__=o,n}}():void 0)},d3b7:function(t,e,n){var r=n("00ee"),i=n("6eeb"),o=n("b041");r||i(Object.prototype,"toString",o,{unsafe:!0})},d44e:function(t,e,n){var r=n("9bf2").f,i=n("5135"),o=n("b622")("toStringTag");t.exports=function(t,e,n){t&&!i(t=n?t:t.prototype,o)&&r(t,o,{configurable:!0,value:e})}},d58f:function(t,e,n){var r=n("1c0b"),i=n("7b0b"),o=n("44ad"),a=n("50c4"),s=function(t){return function(e,n,s,c){r(n);var l=i(e),u=o(l),d=a(l.length),f=t?d-1:0,h=t?-1:1;if(s<2)for(;;){if(f in u){c=u[f],f+=h;break}if(f+=h,t?f<0:d<=f)throw TypeError("Reduce of empty array with no initial value")}for(;t?f>=0:d>f;f+=h)f in u&&(c=n(c,u[f],f,l));return c}};t.exports={left:s(!1),right:s(!0)}},d784:function(t,e,n){n("ac1f");var r=n("6eeb"),i=n("d039"),o=n("b622"),a=n("9263"),s=n("9112"),c=o("species"),l=!i((function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$<a>")})),u="$0"==="a".replace(/./,"$0"),d=o("replace"),f=!!/./[d]&&""===/./[d]("a","$0"),h=!i((function(){var t=/(?:)/,e=t.exec;t.exec=function(){return e.apply(this,arguments)};var n="ab".split(t);return 2!==n.length||"a"!==n[0]||"b"!==n[1]}));t.exports=function(t,e,n,d){var p=o(t),L=!i((function(){var e={};return e[p]=function(){return 7},7!=""[t](e)})),v=L&&!i((function(){var e=!1,n=/a/;return"split"===t&&((n={}).constructor={},n.constructor[c]=function(){return n},n.flags="",n[p]=/./[p]),n.exec=function(){return e=!0,null},n[p](""),!e}));if(!L||!v||"replace"===t&&(!l||!u||f)||"split"===t&&!h){var y=/./[p],g=n(p,""[t],(function(t,e,n,r,i){return e.exec===a?L&&!i?{done:!0,value:y.call(e,n,r)}:{done:!0,value:t.call(n,e,r)}:{done:!1}}),{REPLACE_KEEPS_$0:u,REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE:f}),b=g[0],m=g[1];r(String.prototype,t,b),r(RegExp.prototype,p,2==e?function(t,e){return m.call(t,this,e)}:function(t){return m.call(t,this)})}d&&s(RegExp.prototype[p],"sham",!0)}},d81d:function(t,e,n){var r=n("23e7"),i=n("b727").map,o=n("1dde"),a=n("ae40"),s=o("map"),c=a("map");r({target:"Array",proto:!0,forced:!s||!c},{map:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}})},da84:function(t,e,n){(function(e){var n=function(t){return t&&t.Math==Math&&t};t.exports=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof e&&e)||Function("return this")()}).call(this,n("c8ba"))},dbb4:function(t,e,n){var r=n("23e7"),i=n("83ab"),o=n("56ef"),a=n("fc6a"),s=n("06cf"),c=n("8418");r({target:"Object",stat:!0,sham:!i},{getOwnPropertyDescriptors:function(t){for(var e,n,r=a(t),i=s.f,l=o(r),u={},d=0;l.length>d;)void 0!==(n=i(r,e=l[d++]))&&c(u,e,n);return u}})},ddb0:function(t,e,n){var r=n("da84"),i=n("fdbc"),o=n("e260"),a=n("9112"),s=n("b622"),c=s("iterator"),l=s("toStringTag"),u=o.values;for(var d in i){var f=r[d],h=f&&f.prototype;if(h){if(h[c]!==u)try{a(h,c,u)}catch(t){h[c]=u}if(h[l]||a(h,l,d),i[d])for(var p in o)if(h[p]!==o[p])try{a(h,p,o[p])}catch(t){h[p]=o[p]}}}},df75:function(t,e,n){var r=n("ca84"),i=n("7839");t.exports=Object.keys||function(t){return r(t,i)}},e01a:function(t,e,n){var r=n("23e7"),i=n("83ab"),o=n("da84"),a=n("5135"),s=n("861d"),c=n("9bf2").f,l=n("e893"),u=o.Symbol;if(i&&"function"==typeof u&&(!("description"in u.prototype)||void 0!==u().description)){var d={},f=function(){var t=arguments.length<1||void 0===arguments[0]?void 0:String(arguments[0]),e=this instanceof f?new u(t):void 0===t?u():u(t);return""===t&&(d[e]=!0),e};l(f,u);var h=f.prototype=u.prototype;h.constructor=f;var p=h.toString,L="Symbol(test)"==String(u("test")),v=/^Symbol\((.*)\)[^)]+$/;c(h,"description",{configurable:!0,get:function(){var t=s(this)?this.valueOf():this,e=p.call(t);if(a(d,t))return"";var n=L?e.slice(7,-1):e.replace(v,"$1");return""===n?void 0:n}}),r({global:!0,forced:!0},{Symbol:f})}},e163:function(t,e,n){var r=n("5135"),i=n("7b0b"),o=n("f772"),a=n("e177"),s=o("IE_PROTO"),c=Object.prototype;t.exports=a?Object.getPrototypeOf:function(t){return t=i(t),r(t,s)?t[s]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?c:null}},e177:function(t,e,n){var r=n("d039");t.exports=!r((function(){function t(){}return t.prototype.constructor=null,Object.getPrototypeOf(new t)!==t.prototype}))},e260:function(t,e,n){var r=n("fc6a"),i=n("44d2"),o=n("3f8c"),a=n("69f3"),s=n("7dd0"),c=a.set,l=a.getterFor("Array Iterator");t.exports=s(Array,"Array",(function(t,e){c(this,{type:"Array Iterator",target:r(t),index:0,kind:e})}),(function(){var t=l(this),e=t.target,n=t.kind,r=t.index++;return!e||r>=e.length?(t.target=void 0,{value:void 0,done:!0}):"keys"==n?{value:r,done:!1}:"values"==n?{value:e[r],done:!1}:{value:[r,e[r]],done:!1}}),"values"),o.Arguments=o.Array,i("keys"),i("values"),i("entries")},e439:function(t,e,n){var r=n("23e7"),i=n("d039"),o=n("fc6a"),a=n("06cf").f,s=n("83ab"),c=i((function(){a(1)}));r({target:"Object",stat:!0,forced:!s||c,sham:!s},{getOwnPropertyDescriptor:function(t,e){return a(o(t),e)}})},e538:function(t,e,n){var r=n("b622");e.f=r},e893:function(t,e,n){var r=n("5135"),i=n("56ef"),o=n("06cf"),a=n("9bf2");t.exports=function(t,e){for(var n=i(e),s=a.f,c=o.f,l=0;l<n.length;l++){var u=n[l];r(t,u)||s(t,u,c(e,u))}}},e8b5:function(t,e,n){var r=n("c6b6");t.exports=Array.isArray||function(t){return"Array"==r(t)}},e95a:function(t,e,n){var r=n("b622"),i=n("3f8c"),o=r("iterator"),a=Array.prototype;t.exports=function(t){return void 0!==t&&(i.Array===t||a[o]===t)}},eaf9:function(t,e,n){var r=n("3b81");n.n(r).a},f013:function(t,e,n){var r=n("fdb2");n.n(r).a},f5df:function(t,e,n){var r=n("00ee"),i=n("c6b6"),o=n("b622")("toStringTag"),a="Arguments"==i(function(){return arguments}());t.exports=r?i:function(t){var e,n,r;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=function(t,e){try{return t[e]}catch(t){}}(e=Object(t),o))?n:a?i(e):"Object"==(r=i(e))&&"function"==typeof e.callee?"Arguments":r}},f6fd:function(t,e){!function(t){var e=t.getElementsByTagName("script");"currentScript"in t||Object.defineProperty(t,"currentScript",{get:function(){try{throw new Error}catch(r){var t,n=(/.*at [^\(]*\((.*):.+:.+\)$/gi.exec(r.stack)||[!1])[1];for(t in e)if(e[t].src==n||"interactive"==e[t].readyState)return e[t];return null}}})}(document)},f772:function(t,e,n){var r=n("5692"),i=n("90e3"),o=r("keys");t.exports=function(t){return o[t]||(o[t]=i(t))}},f7fe:function(t,e,n){(function(e){var n=/^\s+|\s+$/g,r=/^[-+]0x[0-9a-f]+$/i,i=/^0b[01]+$/i,o=/^0o[0-7]+$/i,a=parseInt,s="object"==typeof e&&e&&e.Object===Object&&e,c="object"==typeof self&&self&&self.Object===Object&&self,l=s||c||Function("return this")(),u=Object.prototype.toString,d=Math.max,f=Math.min,h=function(){return l.Date.now()};function p(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function L(t){if("number"==typeof t)return t;if(function(t){return"symbol"==typeof t||function(t){return!!t&&"object"==typeof t}(t)&&"[object Symbol]"==u.call(t)}(t))return NaN;if(p(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=p(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(n,"");var s=i.test(t);return s||o.test(t)?a(t.slice(2),s?2:8):r.test(t)?NaN:+t}t.exports=function(t,e,n){var r,i,o,a,s,c,l=0,u=!1,v=!1,y=!0;if("function"!=typeof t)throw new TypeError("Expected a function");function g(e){var n=r,o=i;return r=i=void 0,l=e,a=t.apply(o,n)}function b(t){return l=t,s=setTimeout(w,e),u?g(t):a}function m(t){var n=t-c;return void 0===c||n>=e||n<0||v&&t-l>=o}function w(){var t=h();if(m(t))return S(t);s=setTimeout(w,function(t){var n=e-(t-c);return v?f(n,o-(t-l)):n}(t))}function S(t){return s=void 0,y&&r?g(t):(r=i=void 0,a)}function _(){var t=h(),n=m(t);if(r=arguments,i=this,c=t,n){if(void 0===s)return b(c);if(v)return s=setTimeout(w,e),g(c)}return void 0===s&&(s=setTimeout(w,e)),a}return e=L(e)||0,p(n)&&(u=!!n.leading,o=(v="maxWait"in n)?d(L(n.maxWait)||0,e):o,y="trailing"in n?!!n.trailing:y),_.cancel=function(){void 0!==s&&clearTimeout(s),l=0,r=c=i=s=void 0},_.flush=function(){return void 0===s?a:S(h())},_}}).call(this,n("c8ba"))},fb15:function(t,e,n){var r;function i(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function o(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function a(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?o(Object(n),!0).forEach((function(e){i(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}n.r(e),"undefined"!=typeof window&&(n("f6fd"),(r=window.document.currentScript)&&(r=r.src.match(/(.+\/)[^/]+\.js(\?.*)?$/))&&(n.p=r[1])),n("4de4"),n("4160"),n("a15b"),n("d81d"),n("fb6a"),n("07ac"),n("159b"),n("a4d3"),n("e439"),n("dbb4"),n("b64b");var s=n("a48b"),c=n.n(s);function l(t,e,n,r,i,o,a,s){var c,l="function"==typeof t?t.options:t;if(e&&(l.render=e,l.staticRenderFns=n,l._compiled=!0),r&&(l.functional=!0),o&&(l._scopeId="data-v-"+o),a?(c=function(t){(t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),i&&i.call(this,t),t&&t._registeredComponents&&t._registeredComponents.add(a)},l._ssrRegister=c):i&&(c=s?function(){i.call(this,this.$root.$options.shadowRoot)}:i),c)if(l.functional){l._injectStyles=c;var u=l.render;l.render=function(t,e){return c.call(e),u(t,e)}}else{var d=l.beforeCreate;l.beforeCreate=d?[].concat(d,c):[c]}return{exports:t,options:l}}var u=l({computed:{isPropsUpdated:function(){var t=this;return Object.keys(this.$props).forEach((function(e){return t[e]})),this.updateSwitch=!this.updateSwitch}},watch:{isPropsUpdated:function(){"function"==typeof this.onPropsUpdated&&this.onPropsUpdated()}}},void 0,void 0,!1,null,null,null).exports,d=n("88bc"),f=n.n(d),h=n("42a0"),p=n.n(h),L=n("c832"),v=n.n(L),y=function(t,e,n){t&&(t.data=t.data||{},t.data[e]=a({},t.data[e],{},n))},g=function(t,e,n){t&&(t.data=t.data||{},t.data[e]=n)},b=["class","staticClass","style","attrs","props","domProps","on","nativeOn","directives","scopesSlots","slot","ref","key"],m=function t(e){var n=e.context&&e.context.$createElement,r=!!e.componentOptions,i=!e.tag,o=r?e.componentOptions.children:e.children;if(i)return e.text;var a=function(t,e){var n=f()(t.data,b);if(e){var r=t.componentOptions;p()(n,{props:r.propsData,on:r.listeners})}return n.key&&(n.key=n.key+"-cloned-cid"),n}(e,r);return n(r?e.componentOptions.Ctor:e.tag,a,o?o.map((function(e){return t(e)})):void 0)},w=function(t,e,n){if(t){var r=t.data||{};return void 0===e?r:v()(r,e,n)}},S=function(t){return a({},w(t,"staticStyle",{}),{},w(t,"style",{}))},_=(n("99af"),n("a623"),n("a630"),n("c975"),n("13d5"),n("a9e3"),n("ac1f"),n("3ca3"),n("466d"),function(){return!("undefined"==typeof window||!window.document||!window.document.createElement)}),k=function(t){return t.unslick||!t.infinite?0:t.variableWidth?t.slideCount:t.slidesToShow+(t.centerMode?1:0)},x=function(t){return t.unslick||!t.infinite?0:t.slideCount},T=function(t){return t.currentSlide-j(t)},O=function(t){return t.currentSlide+M(t)},j=function(t){return t.centerMode?Math.floor(t.slidesToShow/2)+(parseInt(t.centerPadding)>0?1:0):0},M=function(t){return t.centerMode?Math.floor((t.slidesToShow-1)/2)+1+(parseInt(t.centerPadding)>0?1:0):t.slidesToShow},E=function(t){for(var e=[],n=T(t),r=O(t),i=n;i<r;i++)t.lazyLoadedList.indexOf(i)<0&&e.push(i);return e},C=function(t,e){var n,r,i,o,s=t.slidesToScroll,c=t.slidesToShow,l=t.slideCount,u=t.currentSlide,d=t.lazyLoad,f=t.infinite;if(n=l%s!=0?0:(l-u)%s,"previous"===e.message)o=u-(i=0===n?s:c-n),d&&!f&&(o=-1==(r=u-i)?l-1:r);else if("next"===e.message)o=u+(i=0===n?s:n),d&&!f&&(o=(u+s)%l+n);else if("dots"===e.message){if((o=e.index*e.slidesToScroll)===e.currentSlide)return null}else if("children"===e.message){if((o=e.index)===e.currentSlide)return null;if(f){var h=function(t){return t.targetSlide>t.currentSlide?t.targetSlide>t.currentSlide+function(t){var e=t.slidesToShow,n=t.centerMode,r=t.rtl,i=t.centerPadding;if(n){var o=(e-1)/2+1;return parseInt(i)>0&&(o+=1),r&&e%2==0&&(o+=1),o}return r?0:e-1}(t)?"left":"right":t.targetSlide<t.currentSlide-function(t){var e=t.slidesToShow,n=t.centerMode,r=t.rtl,i=t.centerPadding;if(n){var o=(e-1)/2+1;return parseInt(i)>0&&(o+=1),r||e%2!=0||(o+=1),o}return r?e-1:0}(t)?"right":"left"}(a({},t,{targetSlide:o}));o>e.currentSlide&&"left"===h?o-=l:o<e.currentSlide&&"right"===h&&(o+=l)}}else if("index"===e.message&&(o=Number(e.index))===e.currentSlide)return null;return o},A=function(t){return Object.keys(t).filter((function(e){return void 0!==t[e]})).reduce((function(e,n){return e[n]=t[n],e}),{})},$=function(t){return Object.keys(t).filter((function(e){return void 0!==t[e]&&null!==t[e]})).reduce((function(e,n){return e[n]=t[n],e}),{})},D=function(t,e){var n=function(t){for(var e=t.infinite?2*t.slideCount:t.slideCount,n=t.infinite?-1*t.slidesToShow:0,r=t.infinite?-1*t.slidesToShow:0,i=[];n<e;)i.push(n),n=r+t.slidesToScroll,r+=Math.min(t.slidesToScroll,t.slidesToShow);return i}(t),r=0;if(e>n[n.length-1])e=n[n.length-1];else for(var i in n){if(e<n[i]){e=r;break}r=n[i]}return e},I=function(t){var e=t.centerMode?t.slideWidth*Math.floor(t.slidesToShow/2):0;if(t.swipeToSlide){var n,r=t.listRef.querySelectorAll(".slick-slide");if(Array.from(r).every((function(r){if(t.vertical){if(r.offsetTop+W(r)/2>-1*t.swipeLeft)return n=r,!1}else if(r.offsetLeft-e+H(r)/2>-1*t.swipeLeft)return n=r,!1;return!0})),!n)return 0;var i=!0===t.rtl?t.slideCount-t.currentSlide:t.currentSlide;return Math.abs(n.dataset.index-i)||1}return t.slidesToScroll},V=function(t,e){var n={};return e.forEach((function(e){return n[e]=t[e]})),n},R={TRACK:["fade","cssEase","speed","infinite","centerMode","currentSlide","lazyLoad","lazyLoadedList","rtl","slideWidth","slideHeight","listHeight","vertical","slidesToShow","slidesToScroll","slideCount","trackStyle","variableWidth","unslick","centerPadding"],DOT:["dotsClass","slideCount","slidesToShow","currentSlide","slidesToScroll","children","customPaging","infinite"],ARROW:["infinite","centerMode","currentSlide","slideCount","slidesToShow","prevArrow","nextArrow"]},P=function(t){var e=!0;return t.infinite||(t.centerMode&&t.currentSlide>=t.slideCount-1||t.slideCount<=t.slidesToShow||t.currentSlide>=t.slideCount-t.slidesToShow)&&(e=!1),e},z=function(t){var e=t.waitForAnimate,n=t.animating,r=t.fade,i=t.infinite,o=t.index,s=t.slideCount,c=t.lazyLoadedList,l=t.lazyLoad,u=t.currentSlide,d=t.centerMode,f=t.slidesToScroll,h=t.slidesToShow,p=t.useCSS;if(e&&n)return{};var L,v,y,g=o,b={},m={};if(r){if(!i&&(o<0||o>=s))return{};o<0?g=o+s:o>=s&&(g=o-s),l&&c.indexOf(g)<0&&c.push(g),b={animating:!0,currentSlide:g,lazyLoadedList:c},m={animating:!1}}else L=g,g<0?(L=g+s,i?s%f!=0&&(L=s-s%f):L=0):!P(t)&&g>u?g=L=u:d&&g>=s?(g=i?s:s-1,L=i?0:s-1):g>=s&&(L=g-s,i?s%f!=0&&(L=0):L=s-h),v=Y(a({},t,{slideIndex:g})),y=Y(a({},t,{slideIndex:L})),i||(v===y&&(g=L),v=y),l&&c.concat(E(a({},t,{currentSlide:g}))),p?(b={animating:!0,currentSlide:L,trackStyle:Z(a({},t,{left:v})),lazyLoadedList:c},m={animating:!1,currentSlide:L,trackStyle:F(a({},t,{left:y})),swipeLeft:null}):b={currentSlide:L,trackStyle:F(a({},t,{left:y})),lazyLoadedList:c};return{state:b,nextState:m}},H=function(t){return t&&t.offsetWidth||0},W=function(t){return t&&t.offsetHeight||0},N=function(t){var e,n,r,i,o=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return e=t.startX-t.curX,n=t.startY-t.curY,r=Math.atan2(n,e),(i=Math.round(180*r/Math.PI))<0&&(i=360-Math.abs(i)),i<=45&&i>=0||i<=360&&i>=315?"left":i>=135&&i<=225?"right":!0===o?i>=35&&i<=135?"up":"down":"vertical"},Y=function(t){if(t.unslick)return 0;B(t,["slideIndex","trackRef","infinite","centerMode","slideCount","slidesToShow","slidesToScroll","slideWidth","listWidth","variableWidth","slideHeight"]);var e,n,r=t.slideIndex,i=t.trackRef,o=t.infinite,a=t.centerMode,s=t.slideCount,c=t.slidesToShow,l=t.slidesToScroll,u=t.slideWidth,d=t.listWidth,f=t.variableWidth,h=t.slideHeight,p=t.fade,L=t.vertical;if(p||1===t.slideCount)return 0;var v=0;if(o?(v=-k(t),s%l!=0&&r+l>s&&(v=-(r>s?c-(r-s):s%l)),a&&(v+=parseInt(c/2))):(s%l!=0&&r+l>s&&(v=c-s%l),a&&(v=parseInt(c/2))),e=L?r*h*-1+v*h:r*u*-1+v*u,!0===f){var y,g=i.$el;if(y=r+k(t),e=(n=g&&g.childNodes[y])?-1*n.offsetLeft:0,!0===a){y=o?r+k(t):r,n=g&&g.children[y],e=0;for(var b=0;b<y;b++)e-=g&&g.children[b]&&g.children[b].offsetWidth;e-=parseInt(t.centerPadding),e+=n&&(d-n.offsetWidth)/2}}return e},B=function(t,e){return e.reduce((function(e,n){return e&&t.hasOwnProperty(n)}),!0)?null:console.error("Keys Missing:",t)},F=function(t){var e,n;B(t,["left","variableWidth","slideCount","slidesToShow","slideWidth"]);var r=t.slideCount+2*t.slidesToShow;t.vertical?n=r*t.slideHeight:e=function(t){return 1===t.slideCount?1:k(t)+t.slideCount+x(t)}(t)*t.slideWidth;var i={opacity:1,transition:"",WebkitTransition:""};return t.useTransform?i=a({},i,{WebkitTransform:t.vertical?"translate3d(0px, "+t.left+"px, 0px)":"translate3d("+t.left+"px, 0px, 0px)",transform:t.vertical?"translate3d(0px, "+t.left+"px, 0px)":"translate3d("+t.left+"px, 0px, 0px)",msTransform:t.vertical?"translateY("+t.left+"px)":"translateX("+t.left+"px)"}):t.vertical?i.top=t.left:i.left=t.left,t.fade&&(i={opacity:1}),e&&(i.width=e+"px"),n&&(i.height=n+"px"),window&&!window.addEventListener&&window.attachEvent&&(t.vertical?i.marginTop=t.left+"px":i.marginLeft=t.left+"px"),i},Z=function(t){B(t,["left","variableWidth","slideCount","slidesToShow","slideWidth","speed","cssEase"]);var e=F(t);return t.useTransform?(e.WebkitTransition="-webkit-transform "+t.speed+"ms "+t.cssEase,e.transition="transform "+t.speed+"ms "+t.cssEase):t.vertical?e.transition="top "+t.speed+"ms "+t.cssEase:e.transition="left "+t.speed+"ms "+t.cssEase,e},G={accessibility:{type:Boolean,default:!0},adaptiveHeight:{type:Boolean,default:!1},arrows:{type:Boolean,default:!0},asNavFor:{type:Object,default:null},autoplay:{type:Boolean,default:!1},autoplaySpeed:{type:Number,default:3e3},centerMode:{type:Boolean,default:!1},centerPadding:{type:String,default:"50px"},cssEase:{type:String,default:"ease"},dots:{type:Boolean,default:!1},dotsClass:{type:String,default:"slick-dots"},draggable:{type:Boolean,default:!0},edgeFriction:{type:Number,default:.35},fade:{type:Boolean,default:!1},focusOnSelect:{type:Boolean,default:!1},infinite:{type:Boolean,default:!0},initialSlide:{type:Number,default:0},lazyLoad:{type:String,default:null},pauseOnDotsHover:{type:Boolean,default:!1},pauseOnFocus:{type:Boolean,default:!1},pauseOnHover:{type:Boolean,default:!0},responsive:{type:Array,default:null},rows:{type:Number,default:1},rtl:{type:Boolean,default:!1},slidesPerRow:{type:Number,default:1},slidesToScroll:{type:Number,default:1},slidesToShow:{type:Number,default:1},speed:{type:Number,default:500},swipe:{type:Boolean,default:!0},swipeToSlide:{type:Boolean,default:!1},touchMove:{type:Boolean,default:!0},touchThreshold:{type:Number,default:5},useCSS:{type:Boolean,default:!0},useTransform:{type:Boolean,default:!0},variableWidth:{type:Boolean,default:!1},vertical:{type:Boolean,default:!1},waitForAnimate:{type:Boolean,default:!0}},U=Object.keys(G).reduce((function(t,e){return t[e]=G[e].default,t}),{});function q(t,e){if(null==t)return{};var n,r,i=function(t,e){if(null==t)return{};var n,r,i={},o=Object.keys(t);for(r=0;r<o.length;r++)n=o[r],e.indexOf(n)>=0||(i[n]=t[n]);return i}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(r=0;r<o.length;r++)n=o[r],e.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(i[n]=t[n])}return i}function J(t){return(J="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}Object.keys(G).reduce((function(t,e){return t[e]=G[e].type,t}),{}),n("cca6"),n("e01a"),n("d28b"),n("e260"),n("d3b7"),n("ddb0");var X=n("6dd8"),K=n("f7fe"),Q=n.n(K),tt=function(t){var e,n,r,i,o;return r=(o=t.rtl?t.slideCount-1-t.index:t.index)<0||o>=t.slideCount,t.centerMode?(i=Math.floor(t.slidesToShow/2),n=(o-t.currentSlide)%t.slideCount==0,o>t.currentSlide-i-1&&o<=t.currentSlide+i&&(e=!0)):e=t.currentSlide<=o&&o<t.currentSlide+t.slidesToShow,{"slick-slide":!0,"slick-active":e,"slick-center":n,"slick-cloned":r,"slick-current":o===t.currentSlide}},et=function(t,e){return null!=t.key&&String(t.key)||e},nt={name:"SliderTrack",props:R.TRACK,methods:{cloneSlide:function(t,e){var n=this,r=m(t);return r.key=e.key,y(r,"class",e.class),y(r,"attrs",e.attrs),y(r,"style",e.style),y(r,"on",{click:function(r){w(t,"on.click",(function(){}))(r),n.$emit("childClicked",e.childOnClickOptions)}}),r},renderSlides:function(t,e){var n,r=this,i=this.$createElement,o=[],s=[],c=[],l=e.length,u=T(t),d=O(t);return e.forEach((function(e,f){var h,p={message:"children",index:f,slidesToScroll:t.slidesToScroll,currentSlide:t.currentSlide};h=!t.lazyLoad||t.lazyLoad&&t.lazyLoadedList.indexOf(f)>=0?e:i("div");var L=function(t){var e={};return void 0!==t.variableWidth&&!1!==t.variableWidth||(e.width="number"==typeof t.slideWidth?"".concat(t.slideWidth,"px"):t.slideWidth),t.fade&&(e.position="relative",t.vertical?e.top="".concat(-t.index*parseInt(t.slideHeight),"px"):e.left="".concat(-t.index*parseInt(t.slideWidth),"px"),e.opacity=t.currentSlide===t.index?1:0,e.transition="opacity "+t.speed+"ms "+t.cssEase+", visibility "+t.speed+"ms "+t.cssEase),e}(a({},t,{index:f})),v=tt(a({},t,{index:f}));if(o.push(r.cloneSlide(h,{key:"original"+et(h,f),class:v,style:a({outline:"none"},L),attrs:{tabIndex:"-1","data-index":f,"aria-hidden":"".concat(!v["slick-active"])},childOnClickOptions:p})),t.infinite&&!1===t.fade&&l>t.slidesToShow){var y=l-f;y<=k(t)&&l!==t.slidesToShow&&((n=-y)>=u&&(h=e),v=tt(a({},t,{index:n})),s.push(r.cloneSlide(h,{key:"precloned"+et(h,n),class:v,style:L,attrs:{tabIndex:"-1","data-index":n,"aria-hidden":"".concat(!v["slick-active"])},childOnClickOptions:p}))),l!==t.slidesToShow&&((n=l+f)<d&&(h=e),v=tt(a({},t,{index:n})),c.push(r.cloneSlide(h,{key:"postcloned"+et(h,n),class:v,style:L,attrs:{tabIndex:"-1","data-index":n,"aria-hidden":"".concat(!v["slick-active"])},childOnClickOptions:p})))}}),this),t.rtl?s.concat(o,c).reverse():s.concat(o,c)}},render:function(){var t=arguments[0],e=this.renderSlides(this.$props,this.$slots.default);return t("div",{class:{"slick-track":!0,"slick-center":this.$props.centerMode},style:this.trackStyle},[e])}},rt=(n("6ea2"),l(nt,void 0,void 0,!1,null,"e4caeaf8",null).exports);function it(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}n("b0c0"),n("25f0");var ot,at={name:"SliderArrow",props:[].concat((ot=R.ARROW,function(t){if(Array.isArray(t))return it(t)}(ot)||function(t){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(t))return Array.from(t)}(ot)||function(t,e){if(t){if("string"==typeof t)return it(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(n):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?it(t,e):void 0}}(ot)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),["type"]),render:function(){var t,e=this,n=arguments[0],r={"slick-arrow":!0},i=!0,o={currentSlide:this.currentSlide,slideCount:this.slideCount};return"previous"===this.type?(r["slick-prev"]=!0,!this.infinite&&(0===this.currentSlide||this.slideCount<=this.slidesToShow)&&(r["slick-disabled"]=!0,i=!1),o.key="0",t=this.prevArrow?this.prevArrow(o)[0]:n("button",{attrs:{type:"button","data-role":"none"},style:"display: block;"},["Previous"])):(r["slick-next"]=!0,P(this.$props)||(r["slick-disabled"]=!0,i=!1),o.key="1",t=this.nextArrow?this.nextArrow(o)[0]:n("button",{attrs:{type:"button","data-role":"none"},style:"display: block;"},["Next"])),g(t,"key",o.key),y(t,"class",r),y(t,"on",{click:function(){i&&e.$emit("arrowClicked",{message:e.type})}}),t}},st=(n("f013"),l(at,void 0,void 0,!1,null,"21137603",null).exports),ct=(n("1276"),function(t){return t.infinite?Math.ceil(t.slideCount/t.slidesToScroll):Math.ceil((t.slideCount-t.slidesToShow)/t.slidesToScroll)+1}),lt=l({name:"SliderDots",props:R.DOT,render:function(){var t=this,e=arguments[0],n=ct({slideCount:this.slideCount,slidesToScroll:this.slidesToScroll,slidesToShow:this.slidesToShow,infinite:this.infinite}),r=Array.apply(null,Array(n+1).join("0").split("")).map((function(n,r){var i=r*t.slidesToScroll,o=r*t.slidesToScroll+(t.slidesToScroll-1),a={"slick-active":t.currentSlide>=i&&t.currentSlide<=o},s={message:"dots",index:r,slidesToScroll:t.slidesToScroll,currentSlide:t.currentSlide},c=t.customPaging?t.customPaging(r)[0]:e("button",[r+1]);return e("li",{key:r,class:a,on:{click:function(){return t.$emit("dotClicked",s)}}},[c])})),o={display:"block"},a=i({},this.dotsClass,!0);return e("ul",{style:o,class:a},[r])}},void 0,void 0,!1,null,null,null).exports,ut={animating:!1,autoplaying:null,currentDirection:0,currentLeft:null,currentSlide:0,direction:1,dragging:!1,edgeDragged:!1,initialized:!1,lazyLoadedList:[],listHeight:null,listWidth:null,scrolling:!1,slideHeight:null,slideWidth:null,swipeLeft:null,swiped:!1,swiping:!1,touchObject:{startX:0,startY:0,curX:0,curY:0},trackStyle:{},trackWidth:0},dt={name:"InnerSlider",components:{SliderTrack:rt,SliderArrow:st,SliderDots:lt},mixins:[u],inheritAttrs:!1,props:a({},G,{unslick:{type:Boolean,default:!1},prevArrow:Function,nextArrow:Function,customPaging:Function}),data:function(){return a({},ut,{currentSlide:this.initialSlide})},computed:{slideCount:function(){return this.$slots.default.length},spec:function(){return a({},this.$props,{},this.$data,{slideCount:this.slideCount})}},created:function(){if(this.callbackTimers=[],this.clickable=!0,this.debouncedResize=null,this.ssrInit(),this.$parent.$emit("init"),this.lazyLoad){var t=E(this.spec);t.length>0&&(this.lazyLoadedList=this.lazyLoadedList.concat(t),this.$parent.$emit("lazyLoad",t))}},mounted:function(){var t=this,e=a({listRef:this.$refs.list,trackRef:this.$refs.track,children:this.$slots.default},this.$props);this.updateState(e,!0),this.adaptHeight(),this.autoPlay&&this.autoPlay("update"),"progressive"===this.lazyLoad&&(this.lazyLoadTimer=setInterval(this.progressiveLazyLoad,1e3)),this.ro=new X.a((function(){t.animating?(t.onWindowResized(!1),t.callbackTimers.push(setTimeout((function(){return t.onWindowResized()}),t.speed))):t.onWindowResized()})),this.ro.observe(this.$refs.list),Array.prototype.forEach.call(this.$refs.list.querySelectorAll(".slick-slide"),(function(e){e.onfocus=t.pauseOnFocus?t.onSlideFocus:null,e.onblur=t.pauseOnFocus?t.onSlideBlur:null})),window.addEventListener?window.addEventListener("resize",this.onWindowResized):window.attachEvent("onresize",this.onWindowResized)},updated:function(){if(this.checkImagesLoad(),this.$parent.$emit("reInit"),this.lazyLoad){var t=E(a({},this.$props,{},this.$data));t.length>0&&(this.lazyLoadedList=this.lazyLoadedList.concat(t),this.$parent.$emit("lazyLoad",t))}this.adaptHeight()},beforeDestroy:function(){this.ro.unobserve(this.$refs.list),this.animationEndCallback&&clearTimeout(this.animationEndCallback),this.lazyLoadTimer&&clearInterval(this.lazyLoadTimer),this.callbackTimers.length&&(this.callbackTimers.forEach((function(t){return clearTimeout(t)})),this.callbackTimers=[]),window.addEventListener?window.removeEventListener("resize",this.onWindowResized):window.detachEvent("onresize",this.onWindowResized),this.autoplayTimer&&clearInterval(this.autoplayTimer)},methods:{onPropsUpdated:function(){for(var t=this.$props,e=a({listRef:this.$refs.list,trackRef:this.$refs.track,children:this.$slots.default},t,{},this.$data),n=!1,r=0,i=Object.keys(this.$props);r<i.length;r++){var o=i[r];if(!t.hasOwnProperty(o)){n=!0;break}if("object"!==J(t[o])&&"function"!=typeof t[o]&&t[o]!==this.$props[o]){n=!0;break}}this.updateState(e,n),this.currentSlide>=this.slideCount&&this.changeSlide({message:"index",index:this.slideCount-t.slidesToShow,currentSlide:this.currentSlide}),t.autoplay?this.autoPlay("update"):this.pause("paused")},updateState:function(t,e){var n=function(t){var e,n=t.children.length,r=Math.ceil(H(t.listRef)),i=Math.ceil(H(t.trackRef));if(t.vertical)e=r;else{var o=t.centerMode&&2*parseInt(t.centerPadding);"string"==typeof t.centerPadding&&"%"===t.centerPadding.slice(-1)&&(o*=r/100),e=Math.ceil((r-o)/t.slidesToShow)}var a=t.listRef&&W(t.listRef.querySelector('[data-index="0"]')),s=a*t.slidesToShow,c=void 0===t.currentSlide?t.initialSlide:t.currentSlide;t.rtl&&void 0===t.currentSlide&&(c=n-1-t.initialSlide);var l=t.lazyLoadedList||[],u=E({currentSlide:c,lazyLoadedList:l});l.concat(u);var d={slideCount:n,slideWidth:e,listWidth:r,trackWidth:i,currentSlide:c,slideHeight:a,listHeight:s,lazyLoadedList:l};return null===t.autoplaying&&t.autoplay&&(d.autoplaying="playing"),d}(t);t=a({},t,{},n,{slideIndex:n.currentSlide}),t=a({},t,{left:Y(t)});var r=F(t);(e||this.slideCount!==t.children.length)&&(n.trackStyle=r),Object.assign(this.$data,n)},adaptHeight:function(){if(this.adaptiveHeight&&this.$refs.list){var t=this.$refs.list.querySelector('[data-index="'.concat(this.currentSlide,'"]'));this.$refs.list.style.height=W(t)+"px"}},ssrInit:function(){var t=k(this.spec),e=x(this.spec);if(this.variableWidth){var n=[],r=[],i=[];this.$slots.default.forEach((function(t){var e=S(t).width;i.push(e),n.push(e)}));for(var o=0;o<t;o++)r.push(i[i.length-1-o]),n.push(i[i.length-1-o]);for(var a=0;a<e;a++)n.push(i[a]);for(var s=0;s<this.currentSlide;s++)r.push(i[s]);n=n.filter((function(t){return t})),r=r.filter((function(t){return t}));var c={width:"calc(".concat(n.join(" + "),")"),left:"calc(".concat(r.map((function(t){return"-".concat(t)})).join(" + "),")")};if(this.centerMode){var l=i[this.currentSlide];c.left="calc(".concat(r.map((function(t){return"-".concat(t)})).join(" + ")," + (100% - ").concat(l,") / 2 )")}this.trackStyle=c}else{var u=t+e+this.slideCount,d=100/this.slidesToShow*u,f=100/u,h=-f*(t+this.currentSlide)*d/100;this.centerMode&&(h+=(100-f*d/100)/2),this.slideWidth=f+"%",this.trackStyle={width:d+"%",left:h+"%"}}},slideHandler:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=this.asNavFor,i=this.speed,o=this.currentSlide,s=z(a({index:t},this.$props,{},this.$data,{trackRef:this.$refs.track,useCSS:this.useCSS&&!n})),c=s.state,l=s.nextState;if(c){this.$parent.$emit("beforeChange",o,c.currentSlide);var u=c.lazyLoadedList.filter((function(t){return e.lazyLoadedList.indexOf(t)<0}));u.length&&this.$parent.$emit("lazyLoad",u),Object.assign(this.$data,c),r&&r.goTo(t),l&&(this.animationEndCallback=setTimeout((function(){var t=l.animating,n=q(l,["animating"]);Object.assign(e.$data,n),e.callbackTimers.push(setTimeout((function(){e.animating=t}),10)),e.$parent.$emit("afterChange",c.currentSlide),e.animationEndCallback=void 0}),i))}},onWindowResized:function(t){var e=this;this.debouncedResize&&this.debouncedResize.cancel(),this.debouncedResize=Q()((function(){return e.resizeWindow(t)}),50),this.debouncedResize()},resizeWindow:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];if(this.$refs.track&&this.$refs.track.$el){var e=a({listRef:this.$refs.list,trackRef:this.$refs.track,children:this.$slots.default},this.$props,{},this.$data);this.updateState(e,t),this.autoplay?this.autoPlay("update"):this.pause("paused"),this.animating=!1,clearTimeout(this.animationEndCallback),this.animationEndCallback=void 0}},checkImagesLoad:function(){var t=this,e=this.$refs.list.querySelectorAll(".slick-slide img"),n=e.length,r=0;Array.prototype.forEach.call(e,(function(e){var i=function(){return++r&&r>=n&&t.onWindowResized()};if(e.onclick){var o=e.onclick;e.onclick=function(){o(),e.parentNode.focus()}}else e.onclick=function(){return e.parentNode.focus()};e.onload||(t.lazyLoad?e.onload=function(){t.adaptHeight(),t.callbackTimers.push(setTimeout(t.onWindowResized,t.speed))}:(e.onload=i,e.onerror=function(){i(),t.$parent.$emit("lazyLoadError")}))}))},progressiveLazyLoad:function(){for(var t=[],e=a({},this.$props,{},this.$data),n=this.currentSlide;n<this.slideCount+x(e);n++)if(this.lazyLoadedList.indexOf(n)<0){t.push(n);break}for(var r=this.currentSlide-1;r>=-k(e);r--)if(this.lazyLoadedList.indexOf(r)<0){t.push(r);break}t.length>0?(this.lazyLoadedList=this.lazyLoadedList.concat(t),this.$parent.$emit("lazyLoad",t)):this.lazyLoadTimer&&(clearInterval(this.lazyLoadTimer),this.lazyLoadTimer=void 0)},clickHandler:function(t){!1===this.clickable&&(t.stopPropagation(),t.preventDefault()),this.clickable=!0},keyHandler:function(t){var e=function(t,e,n){return t.target.tagName.match("TEXTAREA|INPUT|SELECT")||!e?"":37===t.keyCode?n?"next":"previous":39===t.keyCode?n?"previous":"next":""}(t,this.accessibility,this.rtl);""!==e&&this.changeSlide({message:e})},changeSlide:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=a({},this.$props,{},this.$data),r=C(n,t);(0===r||r)&&(!0===e?this.slideHandler(r,e):this.slideHandler(r))},swipeStart:function(t){this.verticalSwiping&&this.disableBodyScroll();var e=function(t,e,n){return!e||!n&&-1!==t.type.indexOf("mouse")?"":{dragging:!0,touchObject:{startX:t.touches?t.touches[0].pageX:t.clientX,startY:t.touches?t.touches[0].pageY:t.clientY,curX:t.touches?t.touches[0].pageX:t.clientX,curY:t.touches?t.touches[0].pageY:t.clientY}}}(t,this.swipe,this.draggable);""!==e&&Object.assign(this.$data,e)},swipeMove:function(t){var e=this,n=function(t,e){var n=e.scrolling,r=e.animating,i=e.vertical,o=e.swipeToSlide,s=e.verticalSwiping,c=e.rtl,l=e.currentSlide,u=e.edgeFriction,d=e.edgeDragged,f=e.onEdge,h=e.swiped,p=e.swiping,L=e.slideCount,v=e.slidesToScroll,y=e.infinite,g=e.touchObject,b=e.swipeEvent,m=e.listHeight,w=e.listWidth;if(!n){if(r)return t.preventDefault();i&&o&&s&&t.preventDefault();var S,_={},k=Y(e);g.curX=t.touches?t.touches[0].pageX:t.clientX,g.curY=t.touches?t.touches[0].pageY:t.clientY,g.swipeLength=Math.round(Math.sqrt(Math.pow(g.curX-g.startX,2)));var x=Math.round(Math.sqrt(Math.pow(g.curY-g.startY,2)));if(!s&&!p&&x>10)return{scrolling:!0};s&&(g.swipeLength=x);var T=(c?-1:1)*(g.curX>g.startX?1:-1);s&&(T=g.curY>g.startY?1:-1);var O=Math.ceil(L/v),j=N(e.touchObject,s),M=g.swipeLength;return y||(0===l&&"right"===j||l+1>=O&&"left"===j||!P(e)&&"left"===j)&&(M=g.swipeLength*u,!1===d&&f&&(f(j),_.edgeDragged=!0)),!h&&b&&(b(j),_.swiped=!0),S=i?k+M*(m/w)*T:c?k-M*T:k+M*T,s&&(S=k+M*T),_=a({},_,{touchObject:g,swipeLeft:S,trackStyle:F(a({},e,{left:S}))}),Math.abs(g.curX-g.startX)<.8*Math.abs(g.curY-g.startY)||g.swipeLength>10&&(_.swiping=!0,t.preventDefault()),_}}(t,a({},this.$props,{},this.$data,{trackRef:this.$refs.track,listRef:this.$refs.list,slideIndex:this.currentSlide,onEdge:function(t){return e.$parent.$emit("edge",t)},swipeEvent:function(t){return e.$parent.$emit("swipe",t)}}));n&&(n.swiping&&(this.clickable=!1),Object.assign(this.$data,n))},swipeEnd:function(t){var e=function(t,e){var n=e.dragging,r=e.swipe,i=e.touchObject,o=e.listWidth,s=e.touchThreshold,c=e.verticalSwiping,l=e.listHeight,u=e.currentSlide,d=e.swipeToSlide,f=e.scrolling,h=e.onSwipe;if(!n)return r&&t.preventDefault(),{};var p=c?l/s:o/s,L=N(i,c),v={dragging:!1,edgeDragged:!1,scrolling:!1,swiping:!1,swiped:!1,swipeLeft:null,touchObject:{}};if(f)return v;if(!i.swipeLength)return v;if(i.swipeLength>p){var y,g;switch(t.preventDefault(),h&&h(L),L){case"left":case"up":g=u+I(e),y=d?D(e,g):g,v.currentDirection=0;break;case"right":case"down":g=u-I(e),y=d?D(e,g):g,v.currentDirection=1;break;default:y=u}v.triggerSlideHandler=y}else{var b=Y(e);v.trackStyle=Z(a({},e,{left:b}))}return v}(t,a({},this.$props,{},this.$data,{trackRef:this.$refs.track,listRef:this.$refs.list,slideIndex:this.currentSlide}));if(e){var n=e.triggerSlideHandler;this.triggerSlideHandler=void 0,Object.assign(this.$data,e),void 0!==n&&(this.slideHandler(n),this.verticalSwiping&&this.enableBodyScroll())}},prev:function(){var t=this;this.callbackTimers.push(setTimeout((function(){return t.changeSlide({message:"previous"})}),0))},next:function(){var t=this;this.callbackTimers.push(setTimeout((function(){return t.changeSlide({message:"next"})}),0))},goTo:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(t=Number(t),isNaN(t))return"";this.callbackTimers.push(setTimeout((function(){return e.changeSlide({message:"index",index:t,currentSlide:e.currentSlide},n)}),0))},play:function(){var t;if(this.rtl)t=this.currentSlide-this.slidesToScroll;else{if(!P(a({},this.$props,{},this.$data)))return!1;t=this.currentSlide+this.slidesToScroll}this.slideHandler(t)},autoPlay:function(t){this.autoplayTimer&&clearInterval(this.autoplayTimer);var e=this.autoplaying;if("update"===t){if("hovered"===e||"focused"===e||"paused"===e)return}else if("leave"===t){if("paused"===e||"focused"===e)return}else if("blur"===t&&("paused"===e||"hovered"===e))return;this.autoplayTimer=setInterval(this.play,this.autoplaySpeed+50),this.autoplaying="playing"},pause:function(t){this.autoplayTimer&&(clearInterval(this.autoplayTimer),this.autoplayTimer=null);var e=this.autoplaying;"paused"===t?this.autoplaying="paused":"focused"===t?"hovered"!==e&&"playing"!==e||(this.autoplaying="focused"):"playing"===e&&(this.autoplaying="hovered")},onDotsOver:function(){this.autoplay&&this.pause("hovered")},onDotsLeave:function(){this.autoplay&&"hovered"===this.autoplaying&&this.autoPlay("leave")},onTrackOver:function(){this.autoplay&&this.pause("hovered")},onTrackLeave:function(){this.autoplay&&"hovered"===this.autoplaying&&this.autoPlay("leave")},onSlideFocus:function(){this.autoplay&&this.pause("focused")},onSlideBlur:function(){this.autoplay&&"focused"===this.autoplaying&&this.autoPlay("blur")},selectHandler:function(t){this.focusOnSelect&&this.changeSlide(t)}},render:function(){var t=arguments[0],e={"slick-slider":!0,"slick-initialized":!0,"slick-vertical":this.vertical},n=V(this.spec,R.TRACK);n=A(a({},n));var r,i,o,s=this.pauseOnHover,c=A({mouseenter:s?this.onTrackOver:void 0,mouseover:s?this.onTrackOver:void 0,mouseleave:s?this.onTrackLeave:void 0});if(!0===this.dots&&this.slideCount>=this.slidesToShow){var l=V(this.spec,R.DOT),u=this.pauseOnDotsHover,d=A({mouseenter:u?this.onDotsLeave:void 0,mouseover:u?this.onDotsOver:void 0,mouseleave:u?this.onDotsLeave:void 0});r=t(lt,{props:a({},l),nativeOn:a({},d),on:{dotClicked:this.changeSlide}})}var f=V(this.spec,R.ARROW);this.arrows&&(i=t(st,{props:a({},a({},f,{type:"previous"})),on:{arrowClicked:this.changeSlide}}),o=t(st,{props:a({},a({},f,{type:"next"})),on:{arrowClicked:this.changeSlide}}));var h={};this.vertical&&(h={height:"".concat(this.listHeight,"px")});var p={};!1===this.vertical?!0===this.centerMode&&(p={padding:"0px "+this.centerPadding}):!0===this.centerMode&&(p={padding:this.centerPadding+" 0px"});var L=a({},this.$parent.$vnode.data.style);this.unslick||(L=a({},L,{},$(h),{},p));var v=this.accessibility,y=this.dragging,g=this.touchMove,b=A({click:this.clickHandler,mousedown:g?this.swipeStart:void 0,mousemove:y&&g?this.swipeMove:void 0,mouseup:g?this.swipeEnd:void 0,mouseleave:y&&g?this.swipeEnd:void 0,touchstart:g?this.swipeStart:void 0,touchmove:y&&g?this.swipeMove:void 0,touchend:g?this.swipeEnd:void 0,touchcancel:y&&g?this.swipeEnd:void 0,keydown:v?this.keyHandler:void 0});return t("div",{class:e,attrs:{dir:!this.unslick&&"ltr"}},[this.unslick?"":i,t("div",{ref:"list",class:"slick-list",on:a({},b),style:L},[t(rt,{ref:"track",props:a({},n),nativeOn:a({},c),on:{childClicked:this.selectHandler}},[this.$slots.default])]),this.unslick?"":o,this.unslick?"":r])}},ft=(n("eaf9"),l(dt,void 0,void 0,!1,null,"3d1a4f76",null).exports),ht=_()&&n("8e95"),pt=l({name:"VueSlickCarousel",components:{InnerSlider:ft},mixins:[u],inheritAttrs:!1,props:G,data:function(){return{breakpoint:null}},computed:{settings:function(){var t,e,n=this,r=A(this.$props);return(t=this.breakpoint?"unslick"===(e=this.responsive.filter((function(t){return t.breakpoint===n.breakpoint})))[0].settings?"unslick":a({},U,{},r,{},e[0].settings):a({},U,{},r)).centerMode&&(t.slidesToScroll,t.slidesToScroll=1),t.fade&&(t.slidesToShow,t.slidesToScroll,t.slidesToShow=1,t.slidesToScroll=1),t.variableWidth&&(t.rows>1||t.slidesPerRow>1)&&(console.warn("variableWidth is not supported in case of rows > 1 or slidesPerRow > 1"),t.variableWidth=!1),t}},created:function(){this.makeBreakpoints()},beforeDestroy:function(){this.clearBreakpoints()},methods:{prev:function(){this.$refs.innerSlider.prev()},next:function(){this.$refs.innerSlider.next()},goTo:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.$refs.innerSlider.goTo(t,e)},pause:function(){this.$refs.innerSlider.pause("paused")},play:function(){this.$refs.innerSlider.autoPlay("play")},onPropsUpdated:function(){this.clearBreakpoints(),this.makeBreakpoints()},clearBreakpoints:function(){this.responsiveMediaHandlers.forEach((function(t){return ht.unregister(t.query,t.handler)})),this.responsiveMediaHandlers=[]},media:function(t,e){_()&&(ht.register(t,e),this.responsiveMediaHandlers.push({query:t,handler:e}))},makeBreakpoints:function(){var t=this;if(this.breakpoint=null,this.responsiveMediaHandlers=[],this.responsive){var e=this.responsive.map((function(t){return t.breakpoint}));e.sort((function(t,e){return t-e})),e.forEach((function(n,r){var i=c()({minWidth:0===r?0:e[r-1]+1,maxWidth:n});t.media(i,(function(){t.breakpoint=n}))}));var n=c()({minWidth:e.slice(-1)[0]});this.media(n,(function(){t.breakpoint=null}))}}},render:function(){var t=arguments[0],e=this.settings,n=this.$slots.default||[];if("unslick"===e)return t("div",{class:"regular slider"},[n]);e.prevArrow=this.$scopedSlots.prevArrow,e.nextArrow=this.$scopedSlots.nextArrow,e.customPaging=this.$scopedSlots.customPaging,n=n.filter((function(t){return!!t.tag}));for(var r=[],i=null,o=0;o<n.length;o+=e.rows*e.slidesPerRow){for(var s=[],c=o;c<o+e.rows*e.slidesPerRow;c+=e.slidesPerRow){for(var l=[],u=c;u<c+e.slidesPerRow&&(e.variableWidth&&S(n[u])&&(i=S(n[u]).width),!(u>=n.length));u+=1){var d=m(n[u]);g(d,"key",100*o+10*c+u),y(d,"attrs",{tabIndex:-1}),y(d,"style",{width:"".concat(100/e.slidesPerRow,"%"),display:"inline-block"}),l.push(d)}s.push(t("div",{key:10*o+c},[l]))}e.variableWidth?r.push(t("div",{key:o,style:{width:i}},[s])):r.push(t("div",{key:o},[s]))}return r.length<=e.slidesToShow&&(e.unslick=!0),t(ft,{ref:"innerSlider",props:a({},e),key:Object.values(e).join("")},[r])}},void 0,void 0,!1,null,null,null).exports;e.default=pt},fb6a:function(t,e,n){var r=n("23e7"),i=n("861d"),o=n("e8b5"),a=n("23cb"),s=n("50c4"),c=n("fc6a"),l=n("8418"),u=n("b622"),d=n("1dde"),f=n("ae40"),h=d("slice"),p=f("slice",{ACCESSORS:!0,0:0,1:2}),L=u("species"),v=[].slice,y=Math.max;r({target:"Array",proto:!0,forced:!h||!p},{slice:function(t,e){var n,r,u,d=c(this),f=s(d.length),h=a(t,f),p=a(void 0===e?f:e,f);if(o(d)&&("function"!=typeof(n=d.constructor)||n!==Array&&!o(n.prototype)?i(n)&&null===(n=n[L])&&(n=void 0):n=void 0,n===Array||void 0===n))return v.call(d,h,p);for(r=new(void 0===n?Array:n)(y(p-h,0)),u=0;h<p;h++,u++)h in d&&l(r,u,d[h]);return r.length=u,r}})},fc6a:function(t,e,n){var r=n("44ad"),i=n("1d80");t.exports=function(t){return r(i(t))}},fdb2:function(t,e,n){},fdbc:function(t,e){t.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},fdbf:function(t,e,n){var r=n("4930");t.exports=r&&!Symbol.sham&&"symbol"==typeof Symbol.iterator}}).default},t.exports=n()}(n={path:void 0,exports:{},require:function(t,e){return function(){throw new Error("Dynamic requires are not currently supported by @rollup/plugin-commonjs")}(null==e&&n.path)}},n.exports),n.exports}());function o(t,e,n,r,i,o,a,s,c,l){"boolean"!=typeof a&&(c=s,s=a,a=!1);const u="function"==typeof n?n.options:n;let d;if(t&&t.render&&(u.render=t.render,u.staticRenderFns=t.staticRenderFns,u._compiled=!0,i&&(u.functional=!0)),r&&(u._scopeId=r),o?(d=function(t){(t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),e&&e.call(this,c(t)),t&&t._registeredComponents&&t._registeredComponents.add(o)},u._ssrRegister=d):e&&(d=a?function(t){e.call(this,l(t,this.$root.$options.shadowRoot))}:function(t){e.call(this,s(t))}),d)if(u.functional){const t=u.render;u.render=function(e,n){return d.call(n),t(e,n)}}else{const t=u.beforeCreate;u.beforeCreate=t?[].concat(t,d):[d]}return n}const a=o({render:function(){var t=this.$createElement;return(this._self._c||t)("vue-slick-carousel",this._b({staticClass:"article-carousel"},"vue-slick-carousel",this.settings,!1),[this._t("default")],2)},staticRenderFns:[]},void 0,{components:{VueSlickCarousel:i},name:"ArticleCarousel",data:()=>({settings:{dots:!1,infinite:!1,slidesToShow:3,slidesToScroll:1,responsive:[{breakpoint:1200,settings:{slidesToShow:1}}]}})},void 0,!1,void 0,!1,void 0,void 0,void 0),s=o({render:function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"header-carousel mb-8 xl:mb-32"},[e("vue-slick-carousel",this._b({},"vue-slick-carousel",this.settings,!1),[this._t("default")],2)],1)},staticRenderFns:[]},void 0,{components:{VueSlickCarousel:i},name:"HeaderCarousel",data:()=>({settings:{fade:!0,dots:!0}})},void 0,!1,void 0,!1,void 0,void 0,void 0),c=o({render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"calendar grid grid-cols-4"},[t.showBanner?n("div",{staticClass:"col-span-4 xl:col-span-1"},[n("aside",{staticClass:"banner bg-orange-300 text-white h-full"},[n("i",{staticClass:"ico--calendar banner__icon"}),t._v(" "),n("div",{staticClass:"banner__body"},[n("h1",{staticClass:"head-alt-md banner__cta"},[t._v(t._s(t.name))]),t._v(" "),t.onShowMore&&t.hasMore?n("button",{staticClass:"btn btn--white btn--fullwidth sm:btn--autowidth mt-8",on:{click:function(e){return t.onShowMore()}}},[n("div",{staticClass:"btn__body"},[t._v("Zobrazit další")])]):t._e()])])]):t._e(),t._v(" "),n("div",{class:{"col-span-4 xl:col-span-3":t.showBanner,"col-span-4":!t.showBanner}},t._l(t.events,(function(e){return n("div",{key:e.id,staticClass:"grid grid-cols-12 items-center calendar-table-row",class:{"calendar-table-row--standalone":!t.showBanner}},[n("div",{staticClass:"col-span-2 text-orange-300 head-alt-md calendar-table-row__col"},[n("span",[t._v(t._s(t._f("dateDay")(e.startTimestamp)))])]),t._v(" "),n("div",{staticClass:"col-span-8 grid grid-cols-3 col-gap-4 calendar-table-row__col",class:{"calendar-table-row__col--norborder":!e.mapLink}},[n("div",{staticClass:"col-span-3 md:col-span-1"},[n("strong",{staticClass:"block"},[t._v(t._s(e.startDateVerbose))]),t._v(" "),n("p",{staticClass:"font-light text-sm mt-1"},[t._v(t._s(e.allDay?"Celý den":e.startTimeVerbose))])]),t._v(" "),n("div",{staticClass:"col-span-3 md:col-span-2 mt-4 md:mt-0"},[e.link?n("a",{staticClass:"font-bold block",attrs:{href:e.link,target:"_blank",rel:"noreferrer noopener"}},[t._v(t._s(e.title))]):t._e(),t._v(" "),e.link?t._e():n("strong",{staticClass:"block"},[t._v(t._s(e.title))]),t._v(" "),e.description?n("p",{staticClass:"font-light text-sm mt-1"},[t._v(t._s(e.description))]):t._e()])]),t._v(" "),n("div",{staticClass:"col-span-2 text-center font-light calendar-table-row__col"},[e.mapLink?n("a",{staticClass:"icon-link",attrs:{href:e.mapLink}},[n("i",{staticClass:"ico--location text-violet-300 mr-1",attrs:{"aria-hidden":"true"}}),t._v(" "),n("span",[t._v("Mapa")])]):t._e()])])})),0)])},staticRenderFns:[]},void 0,{props:{name:{type:String,default:"Kalendář"},events:{type:Array,required:!0},onShowMore:{type:Function,required:!1},hasMore:{type:Boolean,default:!0},showBanner:{type:Boolean,default:!0}},filters:{dateDay:t=>new Date(t).getDate()+"."}},void 0,!1,void 0,!1,void 0,void 0,void 0),l=[{id:2,start:"2020-07-08T10:00:00.000Z",startTimestamp:new Date("2020-07-08T10:00:00.000Z").getTime(),startDateVerbose:"středa 8. července 2020",startTimeVerbose:"12:00",allDay:!1,end:"2020-07-08T11:00:00.000Z",title:"Pirátský oběd - Chrudim",description:"Pravidelné setkání pirátů při středečním obědě. Nejen o politice a s chutí.",link:"https://www.google.com/calendar/event?eid=Mmw1Y2RwMTByYm80Y204cWxsaW1maWJmcTJfMjAyMDA3MDhUMTAwMDAwWiA3cjY3M3JsaDI1NW9mb3JodjNvZWIybDBnMEBn"},{id:15,start:"2020-07-13T19:00:00.000Z",startTimestamp:new Date("2020-07-13T19:00:00.000Z").getTime(),startDateVerbose:"pondělí 13. července 2020",startTimeVerbose:"21:00",allDay:!1,end:"2020-07-13T19:30:00.000Z",title:"Mumble - předsednictvo",link:"https://www.google.com/calendar/event?eid=YzVpM2FvaGc2MHAzY2I5aGM1aW1jYjlrNjBvbThiYjE2dGk2NGI5ajY4cjY0ZGhrNzVnamdjOWdjb18yMDIwMDcxM1QxOTAwMDBaIDdyNjczcmxoMjU1b2Zvcmh2M29lYjJsMGcwQGc"},{id:3,start:"2020-07-15T10:00:00.000Z",startTimestamp:new Date("2020-07-15T10:00:00.000Z").getTime(),startDateVerbose:"středa 15. července 2020",startTimeVerbose:"12:00",allDay:!1,end:"2020-07-15T11:00:00.000Z",title:"Pirátský oběd - Chrudim",description:"Pravidelné setkání pirátů při středečním obědě. Nejen o politice a s chutí.",link:"https://www.google.com/calendar/event?eid=Mmw1Y2RwMTByYm80Y204cWxsaW1maWJmcTJfMjAyMDA3MTVUMTAwMDAwWiA3cjY3M3JsaDI1NW9mb3JodjNvZWIybDBnMEBn",mapLink:"https://maps.google.com"},{id:16,start:"2020-07-20T19:00:00.000Z",startTimestamp:new Date("2020-07-20T19:00:00.000Z").getTime(),startDateVerbose:"pondělí 20. července 2020",startTimeVerbose:"21:00",allDay:!1,end:"2020-07-20T19:30:00.000Z",title:"Mumble - předsednictvo",link:"https://www.google.com/calendar/event?eid=YzVpM2FvaGc2MHAzY2I5aGM1aW1jYjlrNjBvbThiYjE2dGk2NGI5ajY4cjY0ZGhrNzVnamdjOWdjb18yMDIwMDcyMFQxOTAwMDBaIDdyNjczcmxoMjU1b2Zvcmh2M29lYjJsMGcwQGc"},{id:4,start:"2020-07-22T10:00:00.000Z",startTimestamp:new Date("2020-07-22T10:00:00.000Z").getTime(),startDateVerbose:"středa 22. července 2020",startTimeVerbose:"12:00",allDay:!1,end:"2020-07-22T11:00:00.000Z",title:"Pirátský oběd - Chrudim",description:"Pravidelné setkání pirátů při středečním obědě. Nejen o politice a s chutí.",link:"https://www.google.com/calendar/event?eid=Mmw1Y2RwMTByYm80Y204cWxsaW1maWJmcTJfMjAyMDA3MjJUMTAwMDAwWiA3cjY3M3JsaDI1NW9mb3JodjNvZWIybDBnMEBn"},{id:17,start:"2020-07-27T19:00:00.000Z",startTimestamp:new Date("2020-07-27T19:00:00.000Z").getTime(),startDateVerbose:"pondělí 27. července 2020",startTimeVerbose:"21:00",allDay:!1,end:"2020-07-27T19:30:00.000Z",title:"Mumble - předsednictvo",link:"https://www.google.com/calendar/event?eid=YzVpM2FvaGc2MHAzY2I5aGM1aW1jYjlrNjBvbThiYjE2dGk2NGI5ajY4cjY0ZGhrNzVnamdjOWdjb18yMDIwMDcyN1QxOTAwMDBaIDdyNjczcmxoMjU1b2Zvcmh2M29lYjJsMGcwQGc"},{id:5,start:"2020-07-29T10:00:00.000Z",startTimestamp:new Date("2020-07-29T10:00:00.000Z").getTime(),startDateVerbose:"středa 29. července 2020",startTimeVerbose:"12:00",allDay:!1,end:"2020-07-29T11:00:00.000Z",title:"Pirátský oběd - Chrudim",description:"Pravidelné setkání pirátů při středečním obědě. Nejen o politice a s chutí.",link:"https://www.google.com/calendar/event?eid=Mmw1Y2RwMTByYm80Y204cWxsaW1maWJmcTJfMjAyMDA3MjlUMTAwMDAwWiA3cjY3M3JsaDI1NW9mb3JodjNvZWIybDBnMEBn"},{id:18,start:"2020-08-03T19:00:00.000Z",startTimestamp:new Date("2020-08-03T19:00:00.000Z").getTime(),startDateVerbose:"pondělí 3. srpna 2020",startTimeVerbose:"21:00",allDay:!1,end:"2020-08-03T19:30:00.000Z",title:"Mumble - předsednictvo",link:"https://www.google.com/calendar/event?eid=YzVpM2FvaGc2MHAzY2I5aGM1aW1jYjlrNjBvbThiYjE2dGk2NGI5ajY4cjY0ZGhrNzVnamdjOWdjb18yMDIwMDgwM1QxOTAwMDBaIDdyNjczcmxoMjU1b2Zvcmh2M29lYjJsMGcwQGc"},{id:6,start:"2020-08-05T10:00:00.000Z",startTimestamp:new Date("2020-08-05T10:00:00.000Z").getTime(),startDateVerbose:"středa 5. srpna 2020",startTimeVerbose:"12:00",allDay:!1,end:"2020-08-05T11:00:00.000Z",title:"Pirátský oběd - Chrudim",description:"Pravidelné setkání pirátů při středečním obědě. Nejen o politice a s chutí.",link:"https://www.google.com/calendar/event?eid=Mmw1Y2RwMTByYm80Y204cWxsaW1maWJmcTJfMjAyMDA4MDVUMTAwMDAwWiA3cjY3M3JsaDI1NW9mb3JodjNvZWIybDBnMEBn"}],u=[{id:19,start:"2020-08-10T19:00:00.000Z",startTimestamp:new Date("2020-08-10T19:00:00.000Z").getTime(),startDateVerbose:"pondělí 10. srpna 2020",startTimeVerbose:"21:00",allDay:!1,end:"2020-08-10T19:30:00.000Z",title:"Mumble - předsednictvo",link:"https://www.google.com/calendar/event?eid=YzVpM2FvaGc2MHAzY2I5aGM1aW1jYjlrNjBvbThiYjE2dGk2NGI5ajY4cjY0ZGhrNzVnamdjOWdjb18yMDIwMDgxMFQxOTAwMDBaIDdyNjczcmxoMjU1b2Zvcmh2M29lYjJsMGcwQGc"},{id:7,start:"2020-08-12T10:00:00.000Z",startTimestamp:new Date("2020-08-12T10:00:00.000Z").getTime(),startDateVerbose:"středa 12. srpna 2020",startTimeVerbose:"12:00",allDay:!1,end:"2020-08-12T11:00:00.000Z",title:"Pirátský oběd - Chrudim",description:"Pravidelné setkání pirátů při středečním obědě. Nejen o politice a s chutí.",link:"https://www.google.com/calendar/event?eid=Mmw1Y2RwMTByYm80Y204cWxsaW1maWJmcTJfMjAyMDA4MTJUMTAwMDAwWiA3cjY3M3JsaDI1NW9mb3JodjNvZWIybDBnMEBn"}],d=o({},void 0,{data:()=>({events:l,hasMore:!0}),methods:{onShowMore(){this.$data.events=[...l,...u],this.$data.hasMore=!1}},render(){return this.$scopedSlots.default({events:this.events,hasMore:this.hasMore,onShowMore:this.onShowMore})}},void 0,void 0,void 0,!1,void 0,void 0,void 0),f=o({},void 0,{props:{calendarId:{type:String,required:!0},apiKey:{type:String,required:!0}},data:()=>({events:[],toShow:7}),computed:{displayedEvents(){return this.events.slice(0,this.toShow)},hasMore(){return this.toShow<this.events.length}},methods:{onShowMore(){this.toShow+=10},loadEventsFromStorage(){if(window.sessionStorage&&window.sessionStorage["__pircal_"+this.calendarId])return JSON.parse(window.sessionStorage["__pircal_"+this.calendarId])},storeEventsToStorage(){window.sessionStorage&&(window.sessionStorage["__pircal_"+this.calendarId]=JSON.stringify(this.events))}},mounted(){const t=this.loadEventsFromStorage();if(t)this.events=t;else{const t=new Date,e=t.toISOString(),n=new Date(+t+7776e6).toISOString(),r=`https://www.googleapis.com/calendar/v3/calendars/${this.calendarId}/events?key=${encodeURIComponent(this.apiKey)}&maxResults=150&timeMin=${encodeURIComponent(e)}&timeMax=${encodeURIComponent(n)}&sanitizeHtml=true&singleEvents=true&maxAtendees=1`;let i=0;fetch(r).then(t=>{if(!t.ok)throw new Error("Problem loading events from google");return t.json()}).then(t=>{this.events=t.items.map(t=>{const e=new Date(t.start.dateTime||t.start.date),n=new Date(t.end.dateTime||t.end.date),r=e.toLocaleDateString("cs-CZ",{weekday:"long",year:"numeric",month:"long",day:"numeric"}),o=e.getHours()+":"+e.getMinutes().toString().padStart(2,"0"),a=!t.start.dateTime;return{id:i++,start:e,startTimestamp:e.getTime(),startDateVerbose:r,startTimeVerbose:o,allDay:a,end:n,title:t.summary,description:t.description,link:t.htmlLink}}).sort((t,e)=>t.start<e.start?-1:1),this.storeEventsToStorage()})}},render(){return this.$scopedSlots.default({events:this.displayedEvents,hasMore:this.hasMore,onShowMore:this.onShowMore})}},void 0,void 0,void 0,!1,void 0,void 0,void 0),h=o({render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"region-map flex justify-center items-center"},[n("div",{staticClass:"w-full max-w-xl block"},[n("svg",{attrs:{"xmlns:xlink":"http://www.w3.org/1999/xlink",xmlns:"http://www.w3.org/2000/svg",id:"svgmapy",version:"1.1",viewBox:"0 75 800 500"}},[n("g",t._l(t.regions,(function(e){return n("a",{key:e.id,attrs:{"xlink:href":"#"},on:{mouseover:function(n){t.current=e},mouseout:function(e){t.current=null},click:function(n){return t.selectRegion(e)}}},[n("path",{staticClass:"map-polygon",class:{"region-map__region":!0,"region-map__region--current":t.current===e},attrs:{d:e.polygon}})])})),0)])])])},staticRenderFns:[]},void 0,{props:{links:{type:Object,default:function(){return{praha:"https://praha.pirati.cz",stredocesky:"https://stredocesky.pirati.cz",jihocesky:"https://jihocesky.pirati.cz",plzensky:"https://plzensky.pirati.cz",karlovarsky:"https://karlovarsky.pirati.cz",ustecky:"https://ustecky.pirati.cz",liberecky:"https://liberecky.pirati.cz",kralovehradecky:"https://kralovehradecky.pirati.cz",moravskoslezsky:"https://moravskoslezsky.pirati.cz",pardubicky:"https://pardubicky.pirati.cz",vysocina:"https://vysocina.pirati.cz",jihomoravsky:"https://jihomoravsky.pirati.cz",olomoucky:"https://olomoucky.pirati.cz",zlinsky:"https://zlinsky.pirati.cz"}}}},methods:{selectRegion(t){const e=this.$props.links[t.id];window.open(e,"_blank")}},data:()=>({current:null,regions:[{id:"jihocesky",name:"Jihočeský kraj",polygon:"M173.5,445.61L179.5,447.36L185.61599999999999,452.692L184.61599999999999,455.789L188.963,462.31L196.57,463.669L198.743,470.46099999999996L203.905,477.25299999999993L206.079,483.50199999999995L211.78400000000002,483.77299999999997L221.56500000000003,493.01L226.72700000000003,494.911L232.43300000000002,501.704L228.35800000000003,506.051L237.32400000000004,515.0169999999999H247.64800000000005L257.97200000000004,516.9179999999999L266.39400000000006,521.8089999999999L278.34800000000007,511.75599999999986L280.79300000000006,505.50799999999987L287.0420000000001,510.9419999999999L293.83400000000006,512.2999999999998L299.2680000000001,510.94199999999984L308.2340000000001,516.9189999999999L311.7660000000001,511.2139999999999L310.68000000000006,505.77999999999986L311.76700000000005,496.54299999999984L319.3740000000001,490.29499999999985L322.09100000000007,482.4159999999998L329.1550000000001,482.68699999999984L338.9360000000001,485.67499999999984L340.5660000000001,482.68699999999984L338.1210000000001,478.33999999999986L339.4790000000001,472.36199999999985L341.9240000000001,465.02599999999984L341.1090000000001,455.5169999999998L340.5660000000001,445.4639999999998L343.5540000000001,439.75899999999984L352.5200000000001,442.74699999999984L360.1270000000001,444.3779999999998L362.5720000000001,452.5279999999998L374.2550000000001,449.8109999999998L377.5150000000001,445.4629999999998L385.3940000000001,445.7349999999998L397.3490000000001,451.9829999999998L401.4240000000001,453.88499999999976L405.5010000000001,459.85699999999974L408.7510000000001,452.85699999999974L404.7510000000001,446.60699999999974L400.2510000000001,442.60699999999974L405.7510000000001,436.85699999999974L406.7510000000001,430.60699999999974L412.0010000000001,429.60699999999974L412.7510000000001,425.10699999999974L405.5010000000001,419.35699999999974L398.5010000000001,420.85699999999974L390.0010000000001,420.60699999999974L383.5010000000001,414.10699999999974L384.5010000000001,408.60699999999974L381.2510000000001,404.10699999999974L374.0010000000001,405.35699999999974L366.0010000000001,402.35699999999974L361.0010000000001,405.10699999999974L355.5010000000001,400.10699999999974L352.7510000000001,395.10699999999974L346.5010000000001,391.60699999999974L341.7510000000001,394.35699999999974L336.2510000000001,389.85699999999974L333.5010000000001,384.85699999999974L334.7510000000001,380.35699999999974L332.0010000000001,374.60699999999974V366.85699999999974L335.0010000000001,363.10699999999974L335.2510000000001,356.10699999999974L333.5010000000001,349.60699999999974L330.2510000000001,344.85699999999974L328.0010000000001,339.35699999999974L323.7510000000001,339.85699999999974L316.0010000000001,333.35699999999974L310.7510000000001,337.10699999999974L312.2510000000001,344.85699999999974L305.7510000000001,348.35699999999974L302.2510000000001,352.35699999999974L295.0010000000001,349.35699999999974L287.0010000000001,347.35699999999974L282.5010000000001,348.10699999999974L276.0010000000001,345.10699999999974L269.7510000000001,348.85699999999974C269.7510000000001,348.85699999999974,266.10300000000007,348.62199999999973,265.5010000000001,348.60699999999974S261.5010000000001,343.60699999999974,261.5010000000001,343.60699999999974H255.5010000000001L252.5010000000001,347.35699999999974L239.0010000000001,348.85699999999974L235.2510000000001,344.85699999999974H230.5010000000001L227.7510000000001,349.60699999999974L220.7510000000001,353.10699999999974L216.2510000000001,350.85699999999974L202.5010000000001,350.35699999999974L199.7510000000001,354.35699999999974L201.2510000000001,359.85699999999974V364.35699999999974L200.5010000000001,372.10699999999974L204.0010000000001,377.85699999999974L199.5010000000001,384.85699999999974L196.0010000000001,387.60699999999974V391.35699999999974L193.0010000000001,394.10699999999974L196.7510000000001,398.35699999999974L192.0010000000001,400.85699999999974L195.0010000000001,406.85699999999974L192.5010000000001,412.85699999999974L186.5010000000001,415.10699999999974L185.0010000000001,417.85699999999974L180.5010000000001,416.35699999999974L179.2510000000001,426.10699999999974L181.7510000000001,430.10699999999974L180.5010000000001,433.60699999999974L175.2510000000001,435.85699999999974L173.57600000000008,441.83199999999977L173.5,445.61Z"},{id:"plzensky",name:"Plzeňský kraj",polygon:"M151.027,246.771L147.637,255.059L141.986,256.566V265.042L134.452,259.39099999999996L126.541,258.44899999999996L111.472,268.24299999999994V273.89399999999995L107.61099999999999,277.75499999999994L101.30099999999999,274.6479999999999L98.09899999999999,276.1549999999999L91.883,272.38699999999994L84.34899999999999,275.58899999999994L78.981,280.95699999999994L73.99,276.5299999999999L69.469,280.2979999999999L62.355999999999995,280.0069999999999L54.477,291.9609999999999L54,299.11L45.784,306.63300000000004L52.033,313.696L59.64,318.858L59.097,326.737L64.259,332.71500000000003L63.987,340.05L72.138,345.75600000000003L71.32300000000001,354.721L72.68100000000001,360.969L79.20200000000001,364.501L84.90800000000002,370.479L89.25500000000001,377.81399999999996L97.13400000000001,379.98799999999994L99.85100000000001,378.08699999999993L106.91400000000002,379.44499999999994L115.88000000000001,385.96599999999995L116.96700000000001,393.30099999999993L124.84600000000002,401.17999999999995V404.9839999999999L132.181,410.68999999999994L133.53900000000002,416.3949999999999L138.43,419.9269999999999H145.222L151.743,426.4479999999999L157.72,435.1409999999999L158.535,444.6509999999999L169.674,451.9859999999999L173.501,445.6109999999999L173.576,441.8359999999999L175.251,435.8609999999999L180.501,433.6109999999999L181.751,430.1109999999999L179.251,426.1109999999999L180.501,416.3609999999999L185.001,417.8609999999999L186.501,415.1109999999999L192.501,412.8609999999999L195.001,406.8609999999999L192.001,400.8609999999999L196.751,398.3609999999999L193.001,394.1109999999999L196.001,391.3609999999999V387.6109999999999L199.501,384.8609999999999L204.001,377.8609999999999L200.501,372.1109999999999L201.251,364.3609999999999V359.8609999999999L199.751,354.3609999999999L202.501,350.3609999999999L199.251,344.8609999999999L199.501,338.8609999999999L200.751,334.3609999999999L197.501,331.8609999999999L194.001,327.3609999999999L195.751,322.3609999999999L191.751,318.1109999999999L197.001,314.3609999999999H202.501L207.251,308.6109999999999L205.001,304.1109999999999L207.501,299.8609999999999L205.251,293.8609999999999L210.001,289.1109999999999L208.751,285.3609999999999L209.251,278.8609999999999L205.001,276.1109999999999L200.001,275.1109999999999L199.751,271.1109999999999L194.751,272.1109999999999C194.751,272.1109999999999,189.695,265.40499999999986,189.501,265.3609999999999S185.001,267.1109999999999,185.001,267.1109999999999L180.501,264.8609999999999L176.501,262.6109999999999L175.751,258.3609999999999L169.001,257.8609999999999L165.001,260.3609999999999L161.501,257.1109999999999L164.251,253.61099999999988L161.95600000000002,250.7269999999999L155.175,246.7709999999999L151.027,246.771Z"},{id:"karlovarsky",name:"Karlovarský kraj",polygon:"M69.47,280.299L62.357,280.008V274.846L57.195,272.401L57.466,266.42400000000004L42.251,256.1L32.742,251.21000000000004L28.665999999999997,243.87400000000002L24.590999999999998,239.25500000000002L26.493,230.83300000000003L20.244,221.324L15.761,216.841L18.886,210.728L16.169999999999998,203.936H24.863999999999997L27.037,206.11V212.08700000000002H31.656L34.237,214.668L32.742000000000004,218.87900000000002L35.459,221.59600000000003V228.38800000000003L39.535000000000004,232.46400000000003L41.437000000000005,222.68300000000002C41.437000000000005,222.68300000000002,40.07900000000001,219.42200000000003,41.437000000000005,218.06400000000002S46.871,212.63000000000002,46.871,212.63000000000002L49.316,204.479L59.912000000000006,198.774V194.97L63.30800000000001,191.574L71.051,190.351L80.83200000000001,188.721L84.09200000000001,191.981L89.52600000000001,185.189L99.57900000000001,182.47199999999998L110.17500000000001,190.35099999999997L115.019,195.19499999999996H125.036L129.933,197.04499999999996C129.933,197.04499999999996,129.676,201.25999999999996,129.933,201.75399999999996S140.66899999999998,200.62399999999997,140.66899999999998,200.62399999999997L145.378,205.33299999999997L140.76299999999998,209.94799999999998L143.30599999999998,214.75099999999998L141.611,220.96599999999998L145.755,225.10999999999999L144.06,228.689L148.768,235.093L144.059,239.801L151.028,246.771L147.638,255.059L141.987,256.566V265.042L134.453,259.39099999999996L126.542,258.44899999999996L111.473,268.24299999999994V273.89399999999995L107.612,277.75499999999994L101.30199999999999,274.6479999999999L98.1,276.1549999999999L91.884,272.38699999999994L84.35,275.58899999999994L78.982,280.95699999999994L73.991,276.5299999999999L69.47,280.299Z"},{id:"jihomoravsky",name:"Jihomoravský kraj",polygon:"M546.667,336.777L540.5,330.61H522L518.333,336.61H506L502.75,339.86L501.5,344.61L506.75,348.11L505.25,351.11L500.25,354.11L503,360.61L500.75,365.36L502.75,370.36L503.25,379.36L493.5,383.86L491.75,387.86L487.25,390.86L491,395.61L487,398.86L485.75,403.36L491,408.61L485.25,412.11L486.75,417.11C486.75,417.11,491.12,419.697,491.25,420.36S489.5,423.61,489.5,423.61L485.75,424.61L483.5,430.11L478.75,428.86L475.75,433.61L470.25,436.36L464.5,434.61L460.25,437.11L454,432.86L447,435.86L444.75,441.11H438.75L435.5,445.61L432,446.61L429,452.36L423.25,448.11L417.75,453.86L413.25,450.61L408.75,452.86L405.5,459.86L409.03,460.409L416.09299999999996,461.223L424.24299999999994,467.201L432.39399999999995,468.016L434.29499999999996,464.755L442.44499999999994,465.57L454.3999999999999,473.992L455.7579999999999,478.34000000000003L471.51499999999993,487.033L490.26199999999994,486.762L504.66099999999994,489.479L510.09499999999997,483.22999999999996L513.083,475.08L523.136,474.537L527.483,479.155L537.536,480.78499999999997L538.8939999999999,487.578L544.0559999999999,485.947L553.0219999999999,491.382L561.1719999999999,489.208L566.6059999999999,492.74L569.3229999999999,506.324L573.6709999999998,505.781L576.9309999999998,494.37L579.1049999999998,486.491L588.0709999999998,475.351L590.2439999999998,467.74399999999997L593.5049999999998,466.38599999999997L598.3949999999998,461.496H603.5569999999998L613.6099999999998,465.84299999999996L622.3039999999997,471.00499999999994L630.9969999999997,465.29999999999995L638.3329999999997,470.18999999999994L644.8539999999997,468.55999999999995L651.6459999999997,462.3109999999999L649.4999999999998,459.61099999999993L645.7499999999998,454.11099999999993L639.4999999999998,452.61099999999993L639.2499999999998,448.61099999999993L633.4999999999998,445.11099999999993L626.9999999999998,447.61099999999993L621.4999999999998,442.61099999999993L616.2499999999998,442.86099999999993L616.4999999999998,437.11099999999993L608.2499999999998,436.11099999999993L601.9999999999998,432.61099999999993L602.7499999999998,426.86099999999993L599.7499999999998,423.61099999999993L591.4999999999998,426.86099999999993L587.7499999999998,422.11099999999993L592.7499999999998,416.86099999999993L597.2499999999998,413.86099999999993L597.9999999999998,408.86099999999993L591.2499999999998,408.11099999999993L592.7499999999998,402.86099999999993L589.7499999999998,397.61099999999993L593.3749999999998,392.73599999999993L589.4999999999998,386.11099999999993V382.36099999999993L586.3749999999998,379.23599999999993H579.5L578.5,373.86099999999993V368.86099999999993L572.5,365.11099999999993V360.61099999999993L568.625,356.73599999999993L566.25,351.61099999999993H560.75L557,355.86099999999993L561,359.86099999999993L565.125,363.98599999999993L560.75,370.36099999999993L557.75,373.36099999999993L550.25,367.86099999999993L553.75,364.36099999999993L549.25,358.36099999999993V351.86099999999993L554.25,346.61099999999993L548.5,344.86099999999993L543.75,344.61099999999993L546.667,336.777Z"},{id:"zlinsky",name:"Zlínský kraj",polygon:"M737.5,365.046L731.75,362.36L730.5,356.61L723.5,352.11L723,347.61L717.5,349.86H712.25L706.25,345.61L698.25,343.86L690.25,347.11L685.25,342.86H679.5L675.375,346.985L671.25,345.61L664.5,350.11V357.11C664.5,357.11,660.164,361.736,659.125,362.485S653.25,355.86,653.25,355.86L645.5,358.61L647.75,365.36L641,367.36L636,365.86L631.875,369.985L629,375.11L625.125,371.235L618.5,371.61L616.5,366.86L612.5,370.36L614.75,378.11L611,381.86L608.75,385.36L599.25,386.86L593.375,392.735L589.75,397.61L592.75,402.86L591.25,408.11L598,408.86L597.25,413.86L592.75,416.86L587.75,422.11L591.5,426.86L599.75,423.61L602.75,426.86L602,432.61L608.25,436.11L616.5,437.11L616.25,442.86L621.5,442.61L627,447.61L633.5,445.11L639.25,448.61L639.5,452.61L645.75,454.11L649.5,459.61L651.646,462.31H656.5369999999999L663.6009999999999,457.963L668.4909999999999,449.54L678.5439999999999,448.997L680.3099999999998,435.548L684.2489999999998,431.609L697.2899999999998,430.522L704.0829999999999,420.742V409.06L707.6139999999998,399.007V391.944L713.0479999999998,383.522L720.3839999999998,381.62L727.1759999999998,378.088L733.1539999999998,375.915L737.5,365.046Z"},{id:"vysocina",name:"Kraj Vysočina",polygon:"M502.75,339.86L495.5,332.61L489.667,332.44300000000004L482.5,323.94300000000004L468.5,320.77700000000004L466,314.94300000000004L459.333,315.11V311.44300000000004L452.5,315.77700000000004C452.5,315.77700000000004,452.729,321.25500000000005,452.5,321.44300000000004S444.833,318.77700000000004,444.833,318.77700000000004L441,316.77700000000004V311.77700000000004L435.833,309.11000000000007L431.833,308.27700000000004L427.66700000000003,303.94300000000004L420.66700000000003,299.44300000000004L411,299.61L402,292.61L396,293.11L392,296.36L392.5,302.36L386.75,302.11L384.75,306.36H379L375.75,309.36L371.75,308.36L368.75,310.11L368,314.11L364.25,317.61L364,323.36L371.75,327.11C371.75,327.11,372.032,331.726,372,332.36S367.25,335.61,367.25,335.61L363.5,333.86L361.25,337.86L356.75,337.11L350.25,337.36L342,336.11L336.5,341.61L336.25,346.86L333.5,349.61L335.25,356.11L335,363.11L332,366.86V374.61L334.75,380.36L333.5,384.86L336.25,389.86L341.75,394.36L346.5,391.61L352.75,395.11L355.5,400.11L361,405.11L366,402.36L374,405.36L381.25,404.11L384.5,408.61L383.5,414.11L390,420.61L398.5,420.86L405.5,419.36L412.75,425.11L412,429.61L406.75,430.61L405.75,436.86L400.25,442.61L404.75,446.61L408.75,452.86L413.25,450.61L417.75,453.86L423.25,448.11L429,452.36L432,446.61L435.5,445.61L438.75,441.11H444.75L447,435.86L454,432.86L460.25,437.11L464.5,434.61L470.25,436.36L475.75,433.61L478.75,428.86L483.5,430.11L485.75,424.61L489.5,423.61L491.25,420.36L486.75,417.11L485.25,412.11L491,408.61L485.75,403.36L487,398.86L491,395.61L487.25,390.86L491.75,387.86L493.5,383.86L503.25,379.36L502.75,370.36L500.75,365.36L503,360.61L500.25,354.11L505.25,351.11L506.75,348.11L501.5,344.61L502.75,339.86Z"},{id:"stredocesky",name:"Středočeský kraj",polygon:"M404.167,273.11L397.33399999999995,269.777L397.167,265.11L391.667,263.277L386,259.944L386.833,255.27700000000002L390.24800000000005,250.347L392.32000000000005,243.566L384.22100000000006,239.234L388.1770000000001,232.26500000000001L386.1050000000001,227.74400000000003L387.23500000000007,222.09400000000002L385.9170000000001,216.06600000000003L382.9030000000001,213.05200000000002L377.4410000000001,216.63100000000003L368.5880000000001,215.50100000000003V210.22700000000003L363.7850000000001,205.42400000000004L357.4750000000001,204.20000000000005L356.1570000000001,199.49100000000004L360.9600000000001,194.68800000000005L358.0410000000001,186.68300000000005L359.7360000000001,181.97400000000005L356.9110000000001,177.45300000000006L359.35700000000014,173.68500000000006L354.27200000000016,171.42500000000007V167.65800000000007L347.1610000000002,164.03200000000007L343.91200000000015,160.78300000000007H338.35500000000013L334.11700000000013,156.54500000000007L329.9730000000001,163.70200000000008L323.3800000000001,171.0480000000001L321.1200000000001,168.7880000000001L315.47000000000014,169.7290000000001V174.4380000000001L307.55900000000014,180.8420000000001L298.14100000000013,183.1020000000001L295.88100000000014,176.32100000000008L284.95300000000015,176.88600000000008L282.69300000000015,179.90100000000007L283.63500000000016,187.05900000000005H278.92600000000016L277.41900000000015,191.58000000000004H272.52200000000016L274.21700000000016,200.05600000000004L270.63800000000015,203.63500000000005L262.53900000000016,202.88200000000006L258.20600000000013,207.21500000000006H241.81900000000013L233.90800000000013,203.63600000000005L227.50400000000013,207.02600000000004V211.54700000000003L222.32400000000013,216.72700000000003H216.39100000000013L214.36600000000013,218.75100000000003L214.50800000000012,222.66000000000003L208.8570000000001,219.26900000000003L202.6420000000001,225.48400000000004L193.97700000000012,225.29600000000005L185.6890000000001,230.38200000000006L178.3430000000001,230.75800000000007L172.6920000000001,236.03200000000007L171.5620000000001,242.62400000000008L165.3460000000001,245.26100000000008L161.9560000000001,250.72300000000007L164.2510000000001,253.60700000000006L161.5010000000001,257.1070000000001L165.0010000000001,260.3570000000001L169.0010000000001,257.8570000000001L175.7510000000001,258.3570000000001L176.5010000000001,262.6070000000001L180.5010000000001,264.8570000000001L185.0010000000001,267.1070000000001L189.5010000000001,265.3570000000001L194.7510000000001,272.1070000000001L199.7510000000001,271.1070000000001L200.0010000000001,275.1070000000001L205.0010000000001,276.1070000000001L209.2510000000001,278.8570000000001L208.7510000000001,285.3570000000001L210.0010000000001,289.1070000000001L205.2510000000001,293.8570000000001L207.5010000000001,299.8570000000001L205.0010000000001,304.1070000000001L207.2510000000001,308.6070000000001L202.5010000000001,314.3570000000001H197L191.75,318.1070000000001L195.75,322.3570000000001L194,327.3570000000001L197.5,331.8570000000001L200.75,334.3570000000001L199.5,338.8570000000001L199.25,344.8570000000001L202.5,350.3570000000001L216.25,350.8570000000001L220.75,353.1070000000001L227.75,349.6070000000001L230.5,344.8570000000001H235.25L239,348.8570000000001L252.5,347.3570000000001L255.5,343.6070000000001H261.5L265.5,348.6070000000001L269.75,348.8570000000001L276,345.1070000000001L282.5,348.1070000000001L287,347.3570000000001L295,349.3570000000001L302.25,352.3570000000001L305.75,348.3570000000001L312.25,344.8570000000001L310.75,337.1070000000001L316,333.3570000000001L323.75,339.8570000000001L328,339.3570000000001L330.25,344.8570000000001L333.5,349.6070000000001L336.25,346.8570000000001L336.5,341.6070000000001L342,336.1070000000001L350.25,337.3570000000001L356.75,337.1070000000001L361.25,337.8570000000001L363.5,333.8570000000001L367.25,335.6070000000001L372,332.3570000000001L371.75,327.1070000000001L364,323.3570000000001L364.25,317.6070000000001L368,314.1070000000001L368.75,310.1070000000001L371.75,308.3570000000001L375.75,309.3570000000001L379,306.3570000000001H384.75L386.75,302.1070000000001L392.5,302.3570000000001L392,296.3570000000001L396,293.1070000000001L402,292.6070000000001L400,284.4410000000001L403.667,280.7740000000001L404.167,273.11ZM310,254.11L305.167,254.61L301.83399999999995,256.94300000000004L304.167,258.94300000000004L304.667,264.11L301.167,267.277L297.167,264.61L292,263.944L289.5,266.444L284.833,267.611L282.16600000000005,271.444L278.4990000000001,271.611L274.9990000000001,273.27799999999996L273.9990000000001,275.94499999999994L269.4990000000001,276.94499999999994L266.16600000000005,273.27799999999996L267.833,267.94499999999994L263.16600000000005,265.6119999999999L264.4990000000001,262.6119999999999L260.66600000000005,260.1119999999999L257.66600000000005,255.7789999999999L259.9990000000001,252.2789999999999L256.16600000000005,247.6119999999999L263.16600000000005,244.1119999999999L265.833,245.6119999999999L270.5,245.9449999999999L269.333,241.6119999999999L272.333,239.7789999999999L276.5,240.6119999999999L281.167,238.1119999999999L283.667,234.7789999999999L289.167,234.9459999999999L290.5,237.2789999999999L293.667,238.2789999999999L294.667,239.7789999999999L298.33399999999995,238.9459999999999L297.33399999999995,242.61299999999991L302.167,243.77999999999992L304.33399999999995,247.27999999999992H307.5009999999999L310.5009999999999,251.11299999999991L310,254.11Z"},{id:"praha",name:"Hlavní město Praha",polygon:"M256.167,247.61L263.167,244.11L265.83399999999995,245.61C265.83399999999995,245.61,270.00299999999993,246.41500000000002,270.5009999999999,245.943S269.33399999999995,241.61,269.33399999999995,241.61L272.33399999999995,239.77700000000002L276.5009999999999,240.61L281.1679999999999,238.11L283.6679999999999,234.77700000000002L289.1679999999999,234.94400000000002L290.5009999999999,237.27700000000002L293.6679999999999,238.27700000000002L294.6679999999999,239.77700000000002L298.33499999999987,238.94400000000002L297.33499999999987,242.61100000000002L302.1679999999999,243.77800000000002L304.33499999999987,247.27800000000002H307.50199999999984L310.50199999999984,251.11100000000002L310.00199999999984,254.11100000000002L305.1689999999998,254.61100000000002L301.8359999999998,256.944L304.1689999999998,258.944L304.6689999999998,264.111L301.1689999999998,267.27799999999996L297.1689999999998,264.611L292,263.944L289.5,266.444L284.833,267.611L282.16600000000005,271.444L278.4990000000001,271.611L274.9990000000001,273.27799999999996L273.9990000000001,275.94499999999994L269.4990000000001,276.94499999999994L266.16600000000005,273.27799999999996L267.833,267.94499999999994L263.16600000000005,265.6119999999999L264.4990000000001,262.6119999999999L260.66600000000005,260.1119999999999L257.66600000000005,255.7789999999999L259.9990000000001,252.2789999999999L256.167,247.61Z"},{id:"ustecky",name:"Ústecký kraj",polygon:"M110.174,190.351L119.683,185.189L119.412,177.85399999999998L122.67200000000001,174.593L132.453,172.963L140.604,174.04999999999998L143.864,168.07299999999998V163.72599999999997L146.58100000000002,158.83599999999998H149.841L151.471,163.72599999999997L155.546,162.36799999999997V156.39099999999996L158.128,153.80899999999997L159.62199999999999,149.86999999999998H163.42499999999998L165.05499999999998,155.03199999999998L169.402,157.749L177.82399999999998,151.772L178.367,141.72L182.30599999999998,137.781L186.789,140.09L192.22299999999998,135.20000000000002L195.755,138.73200000000003L202.27599999999998,135.20000000000002L209.611,134.38500000000002L211.24099999999999,138.18900000000002H214.23L219.11999999999998,133.29900000000004V125.69200000000004L225.36899999999997,124.60500000000003L229.71599999999998,120.25800000000004L235.421,123.79000000000003L244.11499999999998,119.17100000000003L247.647,115.63900000000004L254.982,116.18200000000004L258.514,109.11900000000004H263.404L265.306,111.29200000000004L275.087,107.76000000000005L276.174,100.96800000000005L268.02299999999997,98.25100000000005V93.08900000000004L259.873,91.45900000000005L262.861,86.02500000000005L265.578,78.96100000000004L273.729,82.76500000000004L275.631,84.66700000000004H280.52099999999996L288.128,81.95000000000005L293.018,86.84000000000005L297.909,91.45900000000005L298.18,97.43600000000005L294.105,104.22800000000005L303.34200000000004,102.59800000000006L301.71200000000005,112.10700000000006V116.45400000000005L295.31000000000006,118.69000000000005L294.36800000000005,126.03600000000006L287.96400000000006,123.58700000000006L280.8070000000001,122.64500000000007L282.3140000000001,128.67200000000005L277.5110000000001,133.47500000000005V137.33600000000004L273.3200000000001,141.52700000000004C273.3200000000001,141.52700000000004,269.2500000000001,147.21300000000005,269.3180000000001,148.26100000000005S272.7080000000001,153.72300000000004,272.7080000000001,153.72300000000004V158.80900000000005L279.8670000000001,170.67200000000005L284.9510000000001,176.88900000000007L282.6910000000001,179.90400000000005L283.6330000000001,187.06200000000004H278.9240000000001L277.4170000000001,191.58300000000003H272.5200000000001L274.2150000000001,200.05900000000003L270.6360000000001,203.63800000000003L262.5370000000001,202.88500000000005L258.20400000000006,207.21800000000005H241.81700000000006L233.90600000000006,203.63900000000004L227.50200000000007,207.02900000000002V211.55L222.32200000000006,216.73000000000002H216.38900000000007L214.36400000000006,218.75400000000002L214.50600000000006,222.663L208.85500000000005,219.27200000000002L202.64000000000004,225.48700000000002L193.97500000000005,225.29900000000004L185.68700000000004,230.38500000000005L178.34100000000004,230.76100000000005L172.69000000000003,236.03500000000005L171.56000000000003,242.62700000000007L165.34400000000002,245.26400000000007L161.95400000000004,250.72600000000006L155.17300000000003,246.77000000000007L151.02600000000004,246.77100000000007L144.05700000000004,239.80100000000007L148.76600000000005,235.09300000000007L144.05800000000005,228.68900000000008L145.75300000000004,225.11000000000007L141.60900000000004,220.96600000000007L143.30400000000003,214.75100000000006L140.76100000000002,209.94800000000006L145.37600000000003,205.33300000000006L140.66700000000003,200.62400000000005L129.93100000000004,201.75400000000005V197.04500000000004L125.03400000000003,195.19500000000005H115.01700000000004L110.174,190.351Z"},{id:"pardubicky",name:"Pardubický kraj",polygon:"M555.742,226.757L554,234.944L549.333,243.944L547.833,252.611L550.333,256.77799999999996L540.333,264.94499999999994V270.6119999999999L542.833,276.44499999999994L543.833,283.77899999999994L546.25,286.1959999999999L540.667,289.94499999999994L544.8330000000001,298.1119999999999L549.3330000000001,306.94499999999994V311.44499999999994L555.0000000000001,313.94499999999994V321.44499999999994L549.8330000000001,326.6119999999999V332.2789999999999L546.667,336.7789999999999L540.5,330.6119999999999H522L518.333,336.6119999999999H506L502.75,339.8619999999999L495.5,332.6119999999999L489.667,332.44499999999994L482.5,323.94499999999994L468.5,320.77899999999994L466,314.94499999999994L459.333,315.1119999999999V311.44499999999994L452.5,315.77899999999994V321.44499999999994L444.833,318.77899999999994L441,316.77899999999994V311.77899999999994L435.833,309.11199999999997L431.833,308.27899999999994L427.66700000000003,303.94499999999994L420.66700000000003,299.44499999999994L411,299.61L402,292.61L400,284.444L403.667,280.77700000000004L404.167,273.11000000000007L397.33399999999995,269.77700000000004L397.167,265.11000000000007L391.667,263.27700000000004L386,259.944L386.833,255.27700000000002L390.24800000000005,250.347L398.95900000000006,248.40300000000002L408.89500000000004,239.79900000000004L414.16900000000004,242.81300000000005C414.16900000000004,242.81300000000005,423.29800000000006,243.14300000000006,423.77400000000006,242.81300000000005S428.86000000000007,235.84400000000005,428.86000000000007,235.84400000000005H433.75700000000006V241.49500000000006L437.24100000000004,242.72000000000006L440.53700000000003,239.42400000000006L446.94100000000003,236.22200000000007L454.66400000000004,236.41000000000005L458.05500000000006,239.80000000000004V246.39300000000003H462.5760000000001L466.7200000000001,250.53700000000003L473.9720000000001,254.77500000000003L478.2100000000001,259.01300000000003L484.8020000000001,257.13000000000005H494.2200000000001L495.9150000000001,249.97300000000004L501.1890000000001,244.69900000000004L511.17100000000005,241.87400000000005V236.41200000000006H515.1260000000001L523.5210000000001,240.17100000000005L535.9080000000001,247.13600000000005L542.9710000000001,240.07300000000006L546.6390000000001,236.40500000000006L546.5030000000002,230.02000000000007L555.742,226.757Z"},{id:"kralovehradecky",name:"Královéhradecký kraj",polygon:"M401.151,127.863L409.302,128.406L418.267,132.481L420.984,135.198L427.233,136.285L434.025,132.481L436.74199999999996,138.458L440.54599999999994,146.88H445.43699999999995L452.49999999999994,144.16299999999998L456.84799999999996,152.313L456.304,157.475L463.097,152.585L467.715,147.966L475.86499999999995,153.67100000000002L479.941,153.943L481.299,147.966H492.438L506.294,161.55L501.67499999999995,165.626L500.58799999999997,173.505L491.895,176.765L479.397,186.546L480.484,191.98L487.54699999999997,200.13L493.525,197.142L496.921,200.53799999999998V204.749L500.792,208.62099999999998L505.75,208.01L511.456,218.063L519.335,224.31199999999998L520.693,234.36499999999998L523.521,240.16899999999998L515.126,236.41H511.171V241.87199999999999L501.18899999999996,244.69699999999997L495.91499999999996,249.97099999999998L494.21999999999997,257.128H484.80199999999996L478.21,259.01099999999997L473.972,254.77299999999997L466.71999999999997,250.53499999999997L462.57599999999996,246.39099999999996H458.05499999999995V239.8L454.66399999999993,236.41000000000003L446.9409999999999,236.22200000000004L440.5369999999999,239.42400000000004L437.24099999999993,242.72000000000003C437.24099999999993,242.72000000000003,434.0929999999999,241.62100000000004,433.75699999999995,241.49500000000003S433.75699999999995,235.84400000000002,433.75699999999995,235.84400000000002H428.85999999999996L423.77399999999994,242.81300000000002H414.1689999999999L408.8949999999999,239.799L398.95899999999995,248.40300000000002L390.24799999999993,250.347L392.31999999999994,243.566L384.22099999999995,239.234L388.17699999999996,232.26500000000001L386.10499999999996,227.74400000000003L387.23499999999996,222.09400000000002L385.917,216.06600000000003L382.90299999999996,213.05200000000002L377.441,216.63100000000003L368.58799999999997,215.50100000000003V210.22700000000003L363.78499999999997,205.42400000000004L357.47499999999997,204.20000000000005L356.157,199.49100000000004L360.96,194.68800000000005L358.041,186.68300000000005L359.736,181.97400000000005L356.911,177.45300000000006L359.357,173.68500000000006L367.26800000000003,178.77100000000007L374.425,174.06200000000007L385.35,177.82900000000006L388.552,182.72600000000006L393.449,179.90100000000007V174.81600000000006L399.288,171.04900000000006L403.809,175.57000000000005C403.809,175.57000000000005,413.317,173.60500000000005,413.415,173.49800000000005S413.415,169.91900000000004,413.415,169.91900000000004L407.764,164.26800000000003L410.778,158.24100000000004L407.011,154.47400000000005L408.517,150.33000000000004L405.316,142.60700000000003L407.19899999999996,134.69600000000003L401.151,127.863Z"},{id:"liberecky",name:"Liberecký kraj",polygon:"M401.151,127.863L407.197,134.697L405.314,142.608L408.51500000000004,150.33100000000002L407.00900000000007,154.47500000000002L410.77600000000007,158.24200000000002L407.76200000000006,164.269L413.41300000000007,169.92000000000002V173.49900000000002L403.8070000000001,175.57100000000003L399.28600000000006,171.05000000000004L393.44700000000006,174.81700000000004V179.90200000000004L388.55000000000007,182.72700000000003L385.34800000000007,177.83000000000004L374.42300000000006,174.06300000000005L367.2660000000001,178.77200000000005L359.3550000000001,173.68600000000004L354.2700000000001,171.42600000000004V167.65900000000005L347.1590000000001,164.03300000000004L343.9100000000001,160.78400000000005H338.35300000000007L334.11500000000007,156.54600000000005L329.97100000000006,163.70300000000006L323.37800000000004,171.04900000000006L321.11800000000005,168.78900000000007L315.4680000000001,169.73000000000008V174.43900000000008L307.5570000000001,180.84300000000007L298.13900000000007,183.10300000000007L295.8790000000001,176.32200000000006L284.9510000000001,176.88700000000006L279.8670000000001,170.67000000000004L272.7080000000001,158.80700000000004V153.72100000000003L269.3180000000001,148.25900000000004L273.3200000000001,141.52500000000003L277.5110000000001,137.33400000000003V133.47300000000004L282.3140000000001,128.67000000000004L280.8070000000001,122.64300000000004L287.96400000000006,123.58500000000004L294.36800000000005,126.03400000000003L295.31000000000006,118.68800000000003L301.71200000000005,116.45200000000003L318.557,121.61400000000003L323.99100000000004,113.73500000000003L334.04300000000006,113.19200000000002C334.04300000000006,113.19200000000002,340.65700000000004,114.42000000000002,341.1070000000001,114.00700000000002S342.7370000000001,104.49800000000002,342.7370000000001,104.49800000000002L344.9100000000001,95.80400000000002L340.29100000000005,91.18500000000002L344.63800000000003,86.83800000000002H351.973L355.777,90.37000000000002L361.75399999999996,87.11000000000001L365.01399999999995,92.81600000000002L369.90399999999994,90.64300000000001L375.33799999999997,97.16400000000002L372.893,102.59800000000001L375.60999999999996,111.02000000000001L380.364,115.77400000000002L384.847,120.25700000000002L385.39,128.13600000000002L387.156,129.90200000000002L393.269,124.33200000000002L401.151,127.863Z"},{id:"olomoucky",name:"Olomoucký kraj",polygon:"M617.687,214.259V224.60999999999999H612.75L608.25,229.10999999999999L598.25,235.60999999999999V242.60999999999999L594.75,246.10999999999999L597.5,251.10999999999999L591.5,259.61L589.75,267.36L593.875,271.485L590,277.86L588.75,285.36L592.375,288.985H597V294.36H603.25L607.25,298.36L614.5,296.36L620.5,305.11H625.5L629.75,307.36L634.75,303.86L639,308.11L644.5,305.11L652,309.11L650.25,317.61H658L660.75,325.11L666.75,327.11L671.875,332.235L671.25,337.36H676.75L679.5,342.86L675.375,346.985L671.25,345.61L664.5,350.11V357.11L659.125,362.485L653.25,355.86L645.5,358.61L647.75,365.36L641,367.36L636,365.86L631.875,369.985L629,375.11L625.125,371.235L618.5,371.61L616.5,366.86L612.5,370.36L614.75,378.11L611,381.86L608.75,385.36L599.25,386.86L593.375,392.735L589.5,386.11V382.36L586.375,379.235H579.5L578.5,373.86V368.86L572.5,365.11V360.61L568.625,356.735L566.25,351.61H560.75L557,355.86L561,359.86L565.125,363.985L560.75,370.36L557.75,373.36L550.25,367.86L553.75,364.36L549.25,358.36V351.86L554.25,346.61L548.5,344.86L543.75,344.61L546.667,336.777L549.8330000000001,332.277V326.61L555.0000000000001,321.44300000000004V313.94300000000004L549.3330000000001,311.44300000000004V306.94300000000004L544.8330000000001,298.11L540.667,289.94300000000004L546.25,286.194L543.833,283.77700000000004L542.833,276.44300000000004L540.333,270.61V264.94300000000004C540.333,264.94300000000004,550.221,257.03200000000004,550.333,256.77600000000007S547.833,252.60900000000007,547.833,252.60900000000007L549.333,243.94200000000006L554,234.94200000000006L555.742,226.75500000000005L564.435,222.67900000000006H571.228L571.4989999999999,214.25700000000006L567.016,209.77400000000006L562.534,208.00800000000007L559.273,196.32500000000007L552.21,192.52100000000007L556.014,185.18600000000006L564.436,187.35900000000007L570.6850000000001,188.71700000000007L581.009,191.70600000000007L585.22,195.9170000000001L592.4200000000001,193.60700000000008L593.5070000000001,200.67100000000008L599.2120000000001,205.0180000000001H607.9060000000001L610.0790000000001,212.62500000000009L617.687,214.259Z"},{id:"moravskoslezsky",name:"Moravskoslezský kraj",polygon:"M617.687,214.259V224.60999999999999H612.75L608.25,229.10999999999999L598.25,235.60999999999999V242.60999999999999L594.75,246.10999999999999L597.5,251.10999999999999L591.5,259.61L589.75,267.36L593.875,271.485L590,277.86L588.75,285.36L592.375,288.985H597V294.36H603.25L607.25,298.36L614.5,296.36L620.5,305.11H625.5L629.75,307.36L634.75,303.86L639,308.11L644.5,305.11L652,309.11L650.25,317.61H658L660.75,325.11L666.75,327.11L671.875,332.235L671.25,337.36H676.75L679.5,342.86H685.25L690.25,347.11L698.25,343.86L706.25,345.61L712.25,349.86H717.5L723,347.61L723.5,352.11L730.5,356.61L731.75,362.36L737.5,365.046L742.119,363.416L750.813,352.005L750.269,345.484L756.247,342.767L761.1379999999999,345.212L769.2879999999999,343.582L776.0799999999999,345.755L784.7739999999999,341.68L786.1319999999998,335.159L781.2409999999999,321.847L778.2529999999998,312.60999999999996H771.1889999999999L768.2009999999998,309.078L759.2349999999998,306.361L757.8769999999998,299.84L751.8989999999999,286.799L755.1599999999999,279.736L752.4429999999999,278.649L749.7259999999999,271.042L744.2919999999999,275.11699999999996L733.6959999999999,269.14L724.4579999999999,267.782L721.1979999999999,273.488L716.3069999999999,265.338L710.0579999999999,262.34900000000005L707.0699999999998,258.5450000000001L701.6359999999999,262.07700000000006L696.2019999999999,259.63200000000006L696.6089999999999,252.97500000000005L692.127,248.49300000000005L685.606,249.58000000000004L682.345,258.00200000000007C682.345,258.00200000000007,676.811,263.9390000000001,676.096,264.2510000000001S670.255,264.11500000000007,670.255,264.11500000000007L664.686,258.54600000000005L658.98,256.64400000000006L655.992,247.67900000000006L650.8299999999999,240.34300000000005L644.9879999999999,241.02300000000005L639.419,235.45300000000006V230.83400000000006L649.1999999999999,227.84500000000006L656.943,224.04100000000005V219.55800000000005L651.917,214.53200000000004L653.004,209.09800000000004L647.57,203.66400000000004L644.8520000000001,209.09800000000004L640.777,213.17300000000003L627.1930000000001,212.08600000000004L617.687,214.259Z"}]})},void 0,!1,void 0,!1,void 0,void 0,void 0),p=o({render:function(){var t=this.$createElement;return(this._self._c||t)("vue-slick-carousel",this._b({staticClass:"twitter-carousel"},"vue-slick-carousel",this.settings,!1),[this._t("default")],2)},staticRenderFns:[]},void 0,{components:{VueSlickCarousel:i},name:"TwitterCarousel",data:()=>({settings:{dots:!1,infinite:!1,slidesToShow:4,slidesToScroll:1,responsive:[{breakpoint:1600,settings:{slidesToShow:3}},{breakpoint:1200,settings:{slidesToShow:3}},{breakpoint:900,settings:{slidesToShow:2}},{breakpoint:500,settings:{slidesToShow:1}}]}})},void 0,!1,void 0,!1,void 0,void 0,void 0),L=o({render:function(){var t=this.$createElement;return(this._self._c||t)("div",[this._t("default",null,{views:this.views,isCurrentView:this.isCurrentView,toggleView:this.toggleView,showView:this.showView,setView:this.setView})],2)},staticRenderFns:[]},void 0,{props:{initial:{default:()=>{}},syncLocation:{type:Boolean,default:!1},locationParam:{type:String,default:"view"}},data(){return{views:this.$props.initial,queryParams:null,keyListener:t=>{27===t.keyCode&&this.hideAllViews()}}},watch:{routeView(){new URLSearchParams(window.location.search)}},methods:{setView(t,e,n=!1){if(n&&Object.keys(this.$data.views).forEach(e=>{e!==t&&this.setView(e,!1)}),this.$data.views[t]=e,e&&this.$props.syncLocation){const e=new URLSearchParams(window.location.search);e.set(this.$props.locationParam,t),history.pushState(null,null,"?"+e.toString())}},setViews(t){this.$data.views=Object.assign({},this.data.views,t)},toggleView(t){!this.isCurrentView(t)&&this.setView(t,!this.isCurrentView(t),!0)},showView(t){this.setView(t,!0,!0)},isCurrentView(t){return this.$data.views[t]},hideAllViews(){Object.keys(this.$data.views).forEach(t=>{this.setView(t,!1)})}},mounted(){if(window.addEventListener("keydown",this.$data.keyListener),this.$props.syncLocation){const t=new URLSearchParams(window.location.search).get(this.$props.locationParam);t&&-1!==Object.keys(this.$data.views).indexOf(t)&&this.showView(t)}},destroyed(){window.removeEventListener("keydown",this.$data.keyListener)}},void 0,!1,void 0,!1,void 0,void 0,void 0),v=o({},void 0,{components:{UiNavbarSubitem:o({render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{on:{mouseenter:t.onMouseEnter,mouseleave:t.onMouseLeave}},[t.href?t._e():n("span",{staticClass:"navbar-menu__link navbar-menu__submenu-toggle",class:{"navbar-menu__submenu-toggle--open":t.show},on:{click:t.handleClick}},[t._v(t._s(t.label))]),t._v(" "),t.href?n("a",{staticClass:"navbar-menu__link navbar-menu__submenu-toggle",class:{"navbar-menu__submenu-toggle--open":t.show},attrs:{href:t.href},on:{click:function(e){return e.preventDefault(),t.handleClick(e)}}},[t._v(t._s(t.label))]):t._e(),t._v(" "),n("div",{staticClass:"navbar-menu__submenu-wrap",class:{"navbar-menu__submenu-wrap--show":t.show}},[t._t("default")],2)])},staticRenderFns:[]},void 0,{data:()=>({show:!1}),props:{href:{type:String},label:{type:String}},methods:{onMouseEnter(){r()&&(this.$data.show=!0)},onMouseLeave(){r()&&(this.$data.show=!1)},handleClick(t){(r()||this.$data.show)&&this.$props.href&&(window.location=this.$props.href),this.$data.show=!this.$data.show}}},void 0,!1,void 0,!1,void 0,void 0,void 0),UiNavbarSubitemReplacing:o({render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{on:{mouseenter:t.onMouseEnter,mouseleave:t.onMouseLeave}},[t.href?t._e():n("span",{staticClass:"navbar-menu__link navbar-menu__submenu-toggle",class:{"navbar-menu__submenu-toggle--open":t.show},on:{click:t.handleClick}},[t._v(t._s(t.label))]),t._v(" "),t.href?n("a",{staticClass:"navbar-menu__link navbar-menu__submenu-toggle",class:{"navbar-menu__submenu-toggle--open":t.show},attrs:{href:t.href},on:{click:function(e){return e.preventDefault(),t.handleClick(e)}}},[t._v(t._s(t.label))]):t._e(),t._v(" "),n("div",{staticClass:"navbar-menu__submenu-wrap",class:{"navbar-menu__submenu-wrap--show":t.show}},[n("ul",{staticClass:"navbar-menu__submenu"},t._l(t.parsedItems,(function(e,r){return n("li",{key:r},[n("a",{staticClass:"navbar-menu__link",attrs:{href:e[1]}},[t._v(t._s(e[0]))])])})),0)])])},staticRenderFns:[]},void 0,{data(){return{show:!1,parsedItems:JSON.parse(this.items)}},props:{href:{type:String},label:{type:String},items:{type:String}},methods:{onMouseEnter(){r()&&(this.$data.show=!0)},onMouseLeave(){r()&&(this.$data.show=!1)},handleClick(t){(r()||this.$data.show)&&this.$props.href&&(window.location=this.$props.href),this.$data.show=!this.$data.show}}},void 0,!1,void 0,!1,void 0,void 0,void 0)},data(){return{isLgScreenSize:r(),show:!1,resizeHandler:()=>{this.$data.isLgScreenSize=r()}}},mounted(){this.$nextTick(()=>{window.addEventListener("resize",this.$data.resizeHandler)})},beforeDestroy(){window.removeEventListener("resize",this.$data.resizeHandler)}},void 0,void 0,void 0,!1,void 0,void 0,void 0),y=o({render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{class:[t.wrapperclass,"footer-collapsible"]},[n("span",{staticClass:"text-xl font-alt uppercase tracking-wide text-white footer-collapsible__toggle",class:[t.labelclass,t.show?"footer-collapsible__toggle--open":""],on:{click:t.handleClick}},[t._v(t._s(t.label))]),t._v(" "),n("div",{directives:[{name:"show",rawName:"v-show",value:t.show||t.isLgScreenSize,expression:"show || isLgScreenSize"}],class:[t.slotwrapperclass]},[t._t("default")],2)])},staticRenderFns:[]},void 0,{data(){return{isLgScreenSize:r(),show:!1,resizeHandler:()=>{this.$data.isLgScreenSize=r()}}},props:{href:{type:String},label:{type:String},labelclass:{type:String},wrapperclass:{type:String,default:""},slotwrapperclass:{type:String,default:""}},methods:{handleClick(){this.$props.href&&(window.location=this.$props.href),this.$data.show=!this.$data.show}},mounted(){this.$nextTick(()=>{window.addEventListener("resize",this.$data.resizeHandler)})},beforeDestroy(){window.removeEventListener("resize",this.$data.resizeHandler)}},void 0,!1,void 0,!1,void 0,void 0,void 0),g=o({render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"flip-clock"},[t._l(t.timeData,(function(e){return[n("span",{directives:[{name:"show",rawName:"v-show",value:e.show,expression:"data.show"}],key:e.label,staticClass:"flip-clock__piece",attrs:{id:e.elementId}},[n("span",{class:["flip-clock__card","flip-card",t.clockClasses]},[n("b",{staticClass:"flip-card__top"},[t._v(t._s(t._f("twoDigits")(e.current)))]),t._v(" "),n("b",{staticClass:"flip-card__bottom",attrs:{"data-value":t._f("twoDigits")(e.current)}}),t._v(" "),n("b",{staticClass:"flip-card__back",attrs:{"data-value":t._f("twoDigits")(e.previous)}}),t._v(" "),n("b",{staticClass:"flip-card__back-bottom",attrs:{"data-value":t._f("twoDigits")(e.previous)}})]),t._v(" "),n("span",{class:["flip-clock__slot","font-alt",t.slotClasses]},[t._v(t._s(e.label))])])]}))],2)},staticRenderFns:[]},void 0,{name:"flipCountdown",props:{deadline:{type:String},stop:{type:Boolean},units:{type:String,default:"days,hours,minutes,seconds"},clockClasses:{type:String,default:"text-6xl"},slotClasses:{type:String,default:"text-3xl"}},data(){const t=Math.floor(100*Math.random());return{now:Math.trunc((new Date).getTime()/1e3),date:null,interval:null,diff:0,show:!1,timeData:[{current:0,previous:0,label:"Dní",elementId:"flip-card-days-"+t,show:-1!==this.units.indexOf("days")},{current:0,previous:0,label:"Hod",elementId:"flip-card-hours-"+t,show:-1!==this.units.indexOf("hours")},{current:0,previous:0,label:"Min",elementId:"flip-card-minutes-"+t,show:-1!==this.units.indexOf("minutes")},{current:0,previous:0,label:"Sek",elementId:"flip-card-seconds-"+t,show:-1!==this.units.indexOf("seconds")}]}},created(){if(!this.deadline)throw new Error("Missing props 'deadline'");const t=this.deadline;if(this.date=Math.trunc(Date.parse(t.replace(/-/g,"/"))/1e3),!this.date)throw new Error("Invalid props value, correct the 'deadline'");this.interval=setInterval(()=>{this.now=Math.trunc((new Date).getTime()/1e3)},1e3)},mounted(){0!==this.diff&&(this.show=!0)},watch:{deadline(t,e){const n=this.deadline;if(this.date=Math.trunc(Date.parse(n.replace(/-/g,"/"))/1e3),!this.date)throw new Error("Invalid props value, correct the 'deadline'")},now(t){this.diff=this.date-t,this.diff<=0||this.stop?(this.diff=0,this.updateTime(3,0)):(this.updateTime(0,Math.trunc(this.diff/60/60/24)),this.updateTime(1,Math.trunc(this.diff/60/60)%24),this.updateTime(2,Math.trunc(this.diff/60)%60),this.updateTime(3,Math.trunc(this.diff)%60))}},filters:{twoDigits:t=>t.toString().length<=1?"0"+t.toString():t.toString()},methods:{updateTime(t,e){if(t>=this.timeData.length||void 0===e)return;const r=()=>{const r=this.timeData[t],i=e<0?0:e,o=document.querySelector("#"+r.elementId);if(i!==r.current&&(r.previous=r.current,r.current=i,o&&(o.classList.remove("flip"),o.offsetWidth,o.classList.add("flip")),0===t)){const t=o.querySelectorAll("span b");t&&n(t,t=>{const n=t.classList[0];if(e/1e3>=1){if(!n.includes("-4digits")){const e=n+"-4digits";t.classList.add(e),t.classList.remove(n)}}else if(n.includes("-4digits")){const e=n.replace("-4digits","");t.classList.add(e),t.classList.remove(n)}})}};window.requestAnimationFrame?this.frame=requestAnimationFrame(r):r()}},beforeDestroy(){window.cancelAnimationFrame&&cancelAnimationFrame(this.frame)},destroyed(){clearInterval(interval)}},void 0,!1,void 0,!1,void 0,void 0,void 0),b=o({render:function(){var t=this.$createElement;return(this._self._c||t)("div",{ref:"slider",staticClass:"horizontal-scrolling draggable no-scrollbars",class:{active:this.isDown},on:{mousedown:this.mousedown,mouseleave:this.mouseleave,mouseup:this.mouseup,mousemove:this.mousemove}},[this._t("default")],2)},staticRenderFns:[]},void 0,{data:()=>({isDown:!1,startX:null,scrollLeft:null}),methods:{mousemove:function(t){if(!this.isDown)return;t.preventDefault();const e=null|this.$refs.slider.getBoundingClientRect().left,n=t.pageX-e-this.startX;this.$refs.slider.scrollLeft=this.scrollLeft-n},mouseleave:function(){this.isDown=!1},mouseup:function(){this.isDown=!1},mousedown:function(t){this.isDown=!0;const e=null|this.$refs.slider.getBoundingClientRect().left;this.startX=t.pageX-e,this.scrollLeft=this.$refs.slider.scrollLeft}}},void 0,!1,void 0,!1,void 0,void 0,void 0),m=o({},void 0,{mounted(){console.log("Mounted generic Vue app in ",this.$el)}},void 0,void 0,void 0,!1,void 0,void 0,void 0);function w(e){return Object.assign({},e.dataset),((e,n)=>{new t({el:e,components:{UiApp:m}})})(e)}t.component("ui-article-carousel",a),t.component("ui-header-carousel",s),t.component("ui-calendar-renderer",c),t.component("ui-calendar-dummy-provider",d),t.component("ui-calendar-google-provider",f),t.component("ui-region-map",h),t.component("ui-twitter-carousel",p),t.component("ui-view-provider",L),t.component("ui-navbar",v),t.component("ui-footer-collapsible",y),t.component("ui-flip-clock",g),t.component("ui-horizontal-scrollable",b),document.addEventListener("DOMContentLoaded",(function(t){n(document.querySelectorAll(".__js-root"),w)}))}(Vue); +(function (Vue) { + 'use strict'; + + Vue = Vue && Object.prototype.hasOwnProperty.call(Vue, 'default') ? Vue['default'] : Vue; + + var screens = { + 'sm': '576px', + 'md': '768px', + 'lg': '992px', + 'xl': '1200px', + '2xl': '1366px', + }; + + const lgScreenSize = parseInt(screens.lg.replace("px", ""), 10); + + const forEachNode = function (array, callback, scope) { + for (var i = 0; i < array.length; i++) { + callback.call(scope, array[i]); // passes back stuff we need + } + }; + + function getWindowWidth() { + return Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0); + } + + function isLgScreenSize() { + return getWindowWidth() >= lgScreenSize; + } + + var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; + + function unwrapExports (x) { + return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x; + } + + function createCommonjsModule(fn, basedir, module) { + return module = { + path: basedir, + exports: {}, + require: function (path, base) { + return commonjsRequire(path, (base === undefined || base === null) ? module.path : base); + } + }, fn(module, module.exports), module.exports; + } + + function commonjsRequire () { + throw new Error('Dynamic requires are not currently supported by @rollup/plugin-commonjs'); + } + + var vueSlickCarousel_umd = createCommonjsModule(function (module, exports) { + (function webpackUniversalModuleDefinition(root, factory) { + module.exports = factory(); + })((typeof self !== 'undefined' ? self : commonjsGlobal), function() { + return /******/ (function(modules) { // webpackBootstrap + /******/ // The module cache + /******/ var installedModules = {}; + /******/ + /******/ // The require function + /******/ function __webpack_require__(moduleId) { + /******/ + /******/ // Check if module is in cache + /******/ if(installedModules[moduleId]) { + /******/ return installedModules[moduleId].exports; + /******/ } + /******/ // Create a new module (and put it into the cache) + /******/ var module = installedModules[moduleId] = { + /******/ i: moduleId, + /******/ l: false, + /******/ exports: {} + /******/ }; + /******/ + /******/ // Execute the module function + /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); + /******/ + /******/ // Flag the module as loaded + /******/ module.l = true; + /******/ + /******/ // Return the exports of the module + /******/ return module.exports; + /******/ } + /******/ + /******/ + /******/ // expose the modules object (__webpack_modules__) + /******/ __webpack_require__.m = modules; + /******/ + /******/ // expose the module cache + /******/ __webpack_require__.c = installedModules; + /******/ + /******/ // define getter function for harmony exports + /******/ __webpack_require__.d = function(exports, name, getter) { + /******/ if(!__webpack_require__.o(exports, name)) { + /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); + /******/ } + /******/ }; + /******/ + /******/ // define __esModule on exports + /******/ __webpack_require__.r = function(exports) { + /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { + /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); + /******/ } + /******/ Object.defineProperty(exports, '__esModule', { value: true }); + /******/ }; + /******/ + /******/ // create a fake namespace object + /******/ // mode & 1: value is a module id, require it + /******/ // mode & 2: merge all properties of value into the ns + /******/ // mode & 4: return value when already ns object + /******/ // mode & 8|1: behave like require + /******/ __webpack_require__.t = function(value, mode) { + /******/ if(mode & 1) value = __webpack_require__(value); + /******/ if(mode & 8) return value; + /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; + /******/ var ns = Object.create(null); + /******/ __webpack_require__.r(ns); + /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); + /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); + /******/ return ns; + /******/ }; + /******/ + /******/ // getDefaultExport function for compatibility with non-harmony modules + /******/ __webpack_require__.n = function(module) { + /******/ var getter = module && module.__esModule ? + /******/ function getDefault() { return module['default']; } : + /******/ function getModuleExports() { return module; }; + /******/ __webpack_require__.d(getter, 'a', getter); + /******/ return getter; + /******/ }; + /******/ + /******/ // Object.prototype.hasOwnProperty.call + /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; + /******/ + /******/ // __webpack_public_path__ + /******/ __webpack_require__.p = ""; + /******/ + /******/ + /******/ // Load entry module and return exports + /******/ return __webpack_require__(__webpack_require__.s = "fb15"); + /******/ }) + /************************************************************************/ + /******/ ({ + + /***/ "00ee": + /***/ (function(module, exports, __webpack_require__) { + + var wellKnownSymbol = __webpack_require__("b622"); + + var TO_STRING_TAG = wellKnownSymbol('toStringTag'); + var test = {}; + + test[TO_STRING_TAG] = 'z'; + + module.exports = String(test) === '[object z]'; + + + /***/ }), + + /***/ "0366": + /***/ (function(module, exports, __webpack_require__) { + + var aFunction = __webpack_require__("1c0b"); + + // optional / simple context binding + module.exports = function (fn, that, length) { + aFunction(fn); + if (that === undefined) return fn; + switch (length) { + case 0: return function () { + return fn.call(that); + }; + case 1: return function (a) { + return fn.call(that, a); + }; + case 2: return function (a, b) { + return fn.call(that, a, b); + }; + case 3: return function (a, b, c) { + return fn.call(that, a, b, c); + }; + } + return function (/* ...args */) { + return fn.apply(that, arguments); + }; + }; + + + /***/ }), + + /***/ "0497": + /***/ (function(module, exports) { + + var camel2hyphen = function (str) { + return str + .replace(/[A-Z]/g, function (match) { + return '-' + match.toLowerCase(); + }) + .toLowerCase(); + }; + + module.exports = camel2hyphen; + + /***/ }), + + /***/ "057f": + /***/ (function(module, exports, __webpack_require__) { + + var toIndexedObject = __webpack_require__("fc6a"); + var nativeGetOwnPropertyNames = __webpack_require__("241c").f; + + var toString = {}.toString; + + var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames + ? Object.getOwnPropertyNames(window) : []; + + var getWindowNames = function (it) { + try { + return nativeGetOwnPropertyNames(it); + } catch (error) { + return windowNames.slice(); + } + }; + + // fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window + module.exports.f = function getOwnPropertyNames(it) { + return windowNames && toString.call(it) == '[object Window]' + ? getWindowNames(it) + : nativeGetOwnPropertyNames(toIndexedObject(it)); + }; + + + /***/ }), + + /***/ "06cf": + /***/ (function(module, exports, __webpack_require__) { + + var DESCRIPTORS = __webpack_require__("83ab"); + var propertyIsEnumerableModule = __webpack_require__("d1e7"); + var createPropertyDescriptor = __webpack_require__("5c6c"); + var toIndexedObject = __webpack_require__("fc6a"); + var toPrimitive = __webpack_require__("c04e"); + var has = __webpack_require__("5135"); + var IE8_DOM_DEFINE = __webpack_require__("0cfb"); + + var nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + + // `Object.getOwnPropertyDescriptor` method + // https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor + exports.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) { + O = toIndexedObject(O); + P = toPrimitive(P, true); + if (IE8_DOM_DEFINE) try { + return nativeGetOwnPropertyDescriptor(O, P); + } catch (error) { /* empty */ } + if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]); + }; + + + /***/ }), + + /***/ "07ac": + /***/ (function(module, exports, __webpack_require__) { + + var $ = __webpack_require__("23e7"); + var $values = __webpack_require__("6f53").values; + + // `Object.values` method + // https://tc39.github.io/ecma262/#sec-object.values + $({ target: 'Object', stat: true }, { + values: function values(O) { + return $values(O); + } + }); + + + /***/ }), + + /***/ "0cfb": + /***/ (function(module, exports, __webpack_require__) { + + var DESCRIPTORS = __webpack_require__("83ab"); + var fails = __webpack_require__("d039"); + var createElement = __webpack_require__("cc12"); + + // Thank's IE8 for his funny defineProperty + module.exports = !DESCRIPTORS && !fails(function () { + return Object.defineProperty(createElement('div'), 'a', { + get: function () { return 7; } + }).a != 7; + }); + + + /***/ }), + + /***/ "1276": + /***/ (function(module, exports, __webpack_require__) { + + var fixRegExpWellKnownSymbolLogic = __webpack_require__("d784"); + var isRegExp = __webpack_require__("44e7"); + var anObject = __webpack_require__("825a"); + var requireObjectCoercible = __webpack_require__("1d80"); + var speciesConstructor = __webpack_require__("4840"); + var advanceStringIndex = __webpack_require__("8aa5"); + var toLength = __webpack_require__("50c4"); + var callRegExpExec = __webpack_require__("14c3"); + var regexpExec = __webpack_require__("9263"); + var fails = __webpack_require__("d039"); + + var arrayPush = [].push; + var min = Math.min; + var MAX_UINT32 = 0xFFFFFFFF; + + // babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError + var SUPPORTS_Y = !fails(function () { return !RegExp(MAX_UINT32, 'y'); }); + + // @@split logic + fixRegExpWellKnownSymbolLogic('split', 2, function (SPLIT, nativeSplit, maybeCallNative) { + var internalSplit; + if ( + 'abbc'.split(/(b)*/)[1] == 'c' || + 'test'.split(/(?:)/, -1).length != 4 || + 'ab'.split(/(?:ab)*/).length != 2 || + '.'.split(/(.?)(.?)/).length != 4 || + '.'.split(/()()/).length > 1 || + ''.split(/.?/).length + ) { + // based on es5-shim implementation, need to rework it + internalSplit = function (separator, limit) { + var string = String(requireObjectCoercible(this)); + var lim = limit === undefined ? MAX_UINT32 : limit >>> 0; + if (lim === 0) return []; + if (separator === undefined) return [string]; + // If `separator` is not a regex, use native split + if (!isRegExp(separator)) { + return nativeSplit.call(string, separator, lim); + } + var output = []; + var flags = (separator.ignoreCase ? 'i' : '') + + (separator.multiline ? 'm' : '') + + (separator.unicode ? 'u' : '') + + (separator.sticky ? 'y' : ''); + var lastLastIndex = 0; + // Make `global` and avoid `lastIndex` issues by working with a copy + var separatorCopy = new RegExp(separator.source, flags + 'g'); + var match, lastIndex, lastLength; + while (match = regexpExec.call(separatorCopy, string)) { + lastIndex = separatorCopy.lastIndex; + if (lastIndex > lastLastIndex) { + output.push(string.slice(lastLastIndex, match.index)); + if (match.length > 1 && match.index < string.length) arrayPush.apply(output, match.slice(1)); + lastLength = match[0].length; + lastLastIndex = lastIndex; + if (output.length >= lim) break; + } + if (separatorCopy.lastIndex === match.index) separatorCopy.lastIndex++; // Avoid an infinite loop + } + if (lastLastIndex === string.length) { + if (lastLength || !separatorCopy.test('')) output.push(''); + } else output.push(string.slice(lastLastIndex)); + return output.length > lim ? output.slice(0, lim) : output; + }; + // Chakra, V8 + } else if ('0'.split(undefined, 0).length) { + internalSplit = function (separator, limit) { + return separator === undefined && limit === 0 ? [] : nativeSplit.call(this, separator, limit); + }; + } else internalSplit = nativeSplit; + + return [ + // `String.prototype.split` method + // https://tc39.github.io/ecma262/#sec-string.prototype.split + function split(separator, limit) { + var O = requireObjectCoercible(this); + var splitter = separator == undefined ? undefined : separator[SPLIT]; + return splitter !== undefined + ? splitter.call(separator, O, limit) + : internalSplit.call(String(O), separator, limit); + }, + // `RegExp.prototype[@@split]` method + // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split + // + // NOTE: This cannot be properly polyfilled in engines that don't support + // the 'y' flag. + function (regexp, limit) { + var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== nativeSplit); + if (res.done) return res.value; + + var rx = anObject(regexp); + var S = String(this); + var C = speciesConstructor(rx, RegExp); + + var unicodeMatching = rx.unicode; + var flags = (rx.ignoreCase ? 'i' : '') + + (rx.multiline ? 'm' : '') + + (rx.unicode ? 'u' : '') + + (SUPPORTS_Y ? 'y' : 'g'); + + // ^(? + rx + ) is needed, in combination with some S slicing, to + // simulate the 'y' flag. + var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags); + var lim = limit === undefined ? MAX_UINT32 : limit >>> 0; + if (lim === 0) return []; + if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : []; + var p = 0; + var q = 0; + var A = []; + while (q < S.length) { + splitter.lastIndex = SUPPORTS_Y ? q : 0; + var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q)); + var e; + if ( + z === null || + (e = min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p + ) { + q = advanceStringIndex(S, q, unicodeMatching); + } else { + A.push(S.slice(p, q)); + if (A.length === lim) return A; + for (var i = 1; i <= z.length - 1; i++) { + A.push(z[i]); + if (A.length === lim) return A; + } + q = p = e; + } + } + A.push(S.slice(p)); + return A; + } + ]; + }, !SUPPORTS_Y); + + + /***/ }), + + /***/ "13d5": + /***/ (function(module, exports, __webpack_require__) { + + var $ = __webpack_require__("23e7"); + var $reduce = __webpack_require__("d58f").left; + var arrayMethodIsStrict = __webpack_require__("a640"); + var arrayMethodUsesToLength = __webpack_require__("ae40"); + + var STRICT_METHOD = arrayMethodIsStrict('reduce'); + var USES_TO_LENGTH = arrayMethodUsesToLength('reduce', { 1: 0 }); + + // `Array.prototype.reduce` method + // https://tc39.github.io/ecma262/#sec-array.prototype.reduce + $({ target: 'Array', proto: true, forced: !STRICT_METHOD || !USES_TO_LENGTH }, { + reduce: function reduce(callbackfn /* , initialValue */) { + return $reduce(this, callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined); + } + }); + + + /***/ }), + + /***/ "14c3": + /***/ (function(module, exports, __webpack_require__) { + + var classof = __webpack_require__("c6b6"); + var regexpExec = __webpack_require__("9263"); + + // `RegExpExec` abstract operation + // https://tc39.github.io/ecma262/#sec-regexpexec + module.exports = function (R, S) { + var exec = R.exec; + if (typeof exec === 'function') { + var result = exec.call(R, S); + if (typeof result !== 'object') { + throw TypeError('RegExp exec method returned something other than an Object or null'); + } + return result; + } + + if (classof(R) !== 'RegExp') { + throw TypeError('RegExp#exec called on incompatible receiver'); + } + + return regexpExec.call(R, S); + }; + + + + /***/ }), + + /***/ "159b": + /***/ (function(module, exports, __webpack_require__) { + + var global = __webpack_require__("da84"); + var DOMIterables = __webpack_require__("fdbc"); + var forEach = __webpack_require__("17c2"); + var createNonEnumerableProperty = __webpack_require__("9112"); + + for (var COLLECTION_NAME in DOMIterables) { + var Collection = global[COLLECTION_NAME]; + var CollectionPrototype = Collection && Collection.prototype; + // some Chrome versions have non-configurable methods on DOMTokenList + if (CollectionPrototype && CollectionPrototype.forEach !== forEach) try { + createNonEnumerableProperty(CollectionPrototype, 'forEach', forEach); + } catch (error) { + CollectionPrototype.forEach = forEach; + } + } + + + /***/ }), + + /***/ "17c2": + /***/ (function(module, exports, __webpack_require__) { + + var $forEach = __webpack_require__("b727").forEach; + var arrayMethodIsStrict = __webpack_require__("a640"); + var arrayMethodUsesToLength = __webpack_require__("ae40"); + + var STRICT_METHOD = arrayMethodIsStrict('forEach'); + var USES_TO_LENGTH = arrayMethodUsesToLength('forEach'); + + // `Array.prototype.forEach` method implementation + // https://tc39.github.io/ecma262/#sec-array.prototype.foreach + module.exports = (!STRICT_METHOD || !USES_TO_LENGTH) ? function forEach(callbackfn /* , thisArg */) { + return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } : [].forEach; + + + /***/ }), + + /***/ "1be4": + /***/ (function(module, exports, __webpack_require__) { + + var getBuiltIn = __webpack_require__("d066"); + + module.exports = getBuiltIn('document', 'documentElement'); + + + /***/ }), + + /***/ "1c0b": + /***/ (function(module, exports) { + + module.exports = function (it) { + if (typeof it != 'function') { + throw TypeError(String(it) + ' is not a function'); + } return it; + }; + + + /***/ }), + + /***/ "1c7e": + /***/ (function(module, exports, __webpack_require__) { + + var wellKnownSymbol = __webpack_require__("b622"); + + var ITERATOR = wellKnownSymbol('iterator'); + var SAFE_CLOSING = false; + + try { + var called = 0; + var iteratorWithReturn = { + next: function () { + return { done: !!called++ }; + }, + 'return': function () { + SAFE_CLOSING = true; + } + }; + iteratorWithReturn[ITERATOR] = function () { + return this; + }; + // eslint-disable-next-line no-throw-literal + Array.from(iteratorWithReturn, function () { throw 2; }); + } catch (error) { /* empty */ } + + module.exports = function (exec, SKIP_CLOSING) { + if (!SKIP_CLOSING && !SAFE_CLOSING) return false; + var ITERATION_SUPPORT = false; + try { + var object = {}; + object[ITERATOR] = function () { + return { + next: function () { + return { done: ITERATION_SUPPORT = true }; + } + }; + }; + exec(object); + } catch (error) { /* empty */ } + return ITERATION_SUPPORT; + }; + + + /***/ }), + + /***/ "1d80": + /***/ (function(module, exports) { + + // `RequireObjectCoercible` abstract operation + // https://tc39.github.io/ecma262/#sec-requireobjectcoercible + module.exports = function (it) { + if (it == undefined) throw TypeError("Can't call method on " + it); + return it; + }; + + + /***/ }), + + /***/ "1dde": + /***/ (function(module, exports, __webpack_require__) { + + var fails = __webpack_require__("d039"); + var wellKnownSymbol = __webpack_require__("b622"); + var V8_VERSION = __webpack_require__("2d00"); + + var SPECIES = wellKnownSymbol('species'); + + module.exports = function (METHOD_NAME) { + // We can't use this feature detection in V8 since it causes + // deoptimization and serious performance degradation + // https://github.com/zloirock/core-js/issues/677 + return V8_VERSION >= 51 || !fails(function () { + var array = []; + var constructor = array.constructor = {}; + constructor[SPECIES] = function () { + return { foo: 1 }; + }; + return array[METHOD_NAME](Boolean).foo !== 1; + }); + }; + + + /***/ }), + + /***/ "217d": + /***/ (function(module, exports) { + + /** + * Helper function for iterating over a collection + * + * @param collection + * @param fn + */ + function each(collection, fn) { + var i = 0, + length = collection.length, + cont; + + for(i; i < length; i++) { + cont = fn(collection[i], i); + if(cont === false) { + break; //allow early exit + } + } + } + + /** + * Helper function for determining whether target object is an array + * + * @param target the object under test + * @return {Boolean} true if array, false otherwise + */ + function isArray(target) { + return Object.prototype.toString.apply(target) === '[object Array]'; + } + + /** + * Helper function for determining whether target object is a function + * + * @param target the object under test + * @return {Boolean} true if function, false otherwise + */ + function isFunction(target) { + return typeof target === 'function'; + } + + module.exports = { + isFunction : isFunction, + isArray : isArray, + each : each + }; + + + /***/ }), + + /***/ "23cb": + /***/ (function(module, exports, __webpack_require__) { + + var toInteger = __webpack_require__("a691"); + + var max = Math.max; + var min = Math.min; + + // Helper for a popular repeating case of the spec: + // Let integer be ? ToInteger(index). + // If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length). + module.exports = function (index, length) { + var integer = toInteger(index); + return integer < 0 ? max(integer + length, 0) : min(integer, length); + }; + + + /***/ }), + + /***/ "23e7": + /***/ (function(module, exports, __webpack_require__) { + + var global = __webpack_require__("da84"); + var getOwnPropertyDescriptor = __webpack_require__("06cf").f; + var createNonEnumerableProperty = __webpack_require__("9112"); + var redefine = __webpack_require__("6eeb"); + var setGlobal = __webpack_require__("ce4e"); + var copyConstructorProperties = __webpack_require__("e893"); + var isForced = __webpack_require__("94ca"); + + /* + options.target - name of the target object + options.global - target is the global object + options.stat - export as static methods of target + options.proto - export as prototype methods of target + options.real - real prototype method for the `pure` version + options.forced - export even if the native feature is available + options.bind - bind methods to the target, required for the `pure` version + options.wrap - wrap constructors to preventing global pollution, required for the `pure` version + options.unsafe - use the simple assignment of property instead of delete + defineProperty + options.sham - add a flag to not completely full polyfills + options.enumerable - export as enumerable property + options.noTargetGet - prevent calling a getter on target + */ + module.exports = function (options, source) { + var TARGET = options.target; + var GLOBAL = options.global; + var STATIC = options.stat; + var FORCED, target, key, targetProperty, sourceProperty, descriptor; + if (GLOBAL) { + target = global; + } else if (STATIC) { + target = global[TARGET] || setGlobal(TARGET, {}); + } else { + target = (global[TARGET] || {}).prototype; + } + if (target) for (key in source) { + sourceProperty = source[key]; + if (options.noTargetGet) { + descriptor = getOwnPropertyDescriptor(target, key); + targetProperty = descriptor && descriptor.value; + } else targetProperty = target[key]; + FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced); + // contained in target + if (!FORCED && targetProperty !== undefined) { + if (typeof sourceProperty === typeof targetProperty) continue; + copyConstructorProperties(sourceProperty, targetProperty); + } + // add a flag to not completely full polyfills + if (options.sham || (targetProperty && targetProperty.sham)) { + createNonEnumerableProperty(sourceProperty, 'sham', true); + } + // extend global + redefine(target, key, sourceProperty, options); + } + }; + + + /***/ }), + + /***/ "241c": + /***/ (function(module, exports, __webpack_require__) { + + var internalObjectKeys = __webpack_require__("ca84"); + var enumBugKeys = __webpack_require__("7839"); + + var hiddenKeys = enumBugKeys.concat('length', 'prototype'); + + // `Object.getOwnPropertyNames` method + // https://tc39.github.io/ecma262/#sec-object.getownpropertynames + exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { + return internalObjectKeys(O, hiddenKeys); + }; + + + /***/ }), + + /***/ "25f0": + /***/ (function(module, exports, __webpack_require__) { + + var redefine = __webpack_require__("6eeb"); + var anObject = __webpack_require__("825a"); + var fails = __webpack_require__("d039"); + var flags = __webpack_require__("ad6d"); + + var TO_STRING = 'toString'; + var RegExpPrototype = RegExp.prototype; + var nativeToString = RegExpPrototype[TO_STRING]; + + var NOT_GENERIC = fails(function () { return nativeToString.call({ source: 'a', flags: 'b' }) != '/a/b'; }); + // FF44- RegExp#toString has a wrong name + var INCORRECT_NAME = nativeToString.name != TO_STRING; + + // `RegExp.prototype.toString` method + // https://tc39.github.io/ecma262/#sec-regexp.prototype.tostring + if (NOT_GENERIC || INCORRECT_NAME) { + redefine(RegExp.prototype, TO_STRING, function toString() { + var R = anObject(this); + var p = String(R.source); + var rf = R.flags; + var f = String(rf === undefined && R instanceof RegExp && !('flags' in RegExpPrototype) ? flags.call(R) : rf); + return '/' + p + '/' + f; + }, { unsafe: true }); + } + + + /***/ }), + + /***/ "2d00": + /***/ (function(module, exports, __webpack_require__) { + + var global = __webpack_require__("da84"); + var userAgent = __webpack_require__("342f"); + + var process = global.process; + var versions = process && process.versions; + var v8 = versions && versions.v8; + var match, version; + + if (v8) { + match = v8.split('.'); + version = match[0] + match[1]; + } else if (userAgent) { + match = userAgent.match(/Edge\/(\d+)/); + if (!match || match[1] >= 74) { + match = userAgent.match(/Chrome\/(\d+)/); + if (match) version = match[1]; + } + } + + module.exports = version && +version; + + + /***/ }), + + /***/ "342f": + /***/ (function(module, exports, __webpack_require__) { + + var getBuiltIn = __webpack_require__("d066"); + + module.exports = getBuiltIn('navigator', 'userAgent') || ''; + + + /***/ }), + + /***/ "35a1": + /***/ (function(module, exports, __webpack_require__) { + + var classof = __webpack_require__("f5df"); + var Iterators = __webpack_require__("3f8c"); + var wellKnownSymbol = __webpack_require__("b622"); + + var ITERATOR = wellKnownSymbol('iterator'); + + module.exports = function (it) { + if (it != undefined) return it[ITERATOR] + || it['@@iterator'] + || Iterators[classof(it)]; + }; + + + /***/ }), + + /***/ "37e8": + /***/ (function(module, exports, __webpack_require__) { + + var DESCRIPTORS = __webpack_require__("83ab"); + var definePropertyModule = __webpack_require__("9bf2"); + var anObject = __webpack_require__("825a"); + var objectKeys = __webpack_require__("df75"); + + // `Object.defineProperties` method + // https://tc39.github.io/ecma262/#sec-object.defineproperties + module.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) { + anObject(O); + var keys = objectKeys(Properties); + var length = keys.length; + var index = 0; + var key; + while (length > index) definePropertyModule.f(O, key = keys[index++], Properties[key]); + return O; + }; + + + /***/ }), + + /***/ "3b81": + /***/ (function(module, exports, __webpack_require__) { + + // extracted by mini-css-extract-plugin + + /***/ }), + + /***/ "3bbe": + /***/ (function(module, exports, __webpack_require__) { + + var isObject = __webpack_require__("861d"); + + module.exports = function (it) { + if (!isObject(it) && it !== null) { + throw TypeError("Can't set " + String(it) + ' as a prototype'); + } return it; + }; + + + /***/ }), + + /***/ "3ca3": + /***/ (function(module, exports, __webpack_require__) { + + var charAt = __webpack_require__("6547").charAt; + var InternalStateModule = __webpack_require__("69f3"); + var defineIterator = __webpack_require__("7dd0"); + + var STRING_ITERATOR = 'String Iterator'; + var setInternalState = InternalStateModule.set; + var getInternalState = InternalStateModule.getterFor(STRING_ITERATOR); + + // `String.prototype[@@iterator]` method + // https://tc39.github.io/ecma262/#sec-string.prototype-@@iterator + defineIterator(String, 'String', function (iterated) { + setInternalState(this, { + type: STRING_ITERATOR, + string: String(iterated), + index: 0 + }); + // `%StringIteratorPrototype%.next` method + // https://tc39.github.io/ecma262/#sec-%stringiteratorprototype%.next + }, function next() { + var state = getInternalState(this); + var string = state.string; + var index = state.index; + var point; + if (index >= string.length) return { value: undefined, done: true }; + point = charAt(string, index); + state.index += point.length; + return { value: point, done: false }; + }); + + + /***/ }), + + /***/ "3f8c": + /***/ (function(module, exports) { + + module.exports = {}; + + + /***/ }), + + /***/ "4160": + /***/ (function(module, exports, __webpack_require__) { + + var $ = __webpack_require__("23e7"); + var forEach = __webpack_require__("17c2"); + + // `Array.prototype.forEach` method + // https://tc39.github.io/ecma262/#sec-array.prototype.foreach + $({ target: 'Array', proto: true, forced: [].forEach != forEach }, { + forEach: forEach + }); + + + /***/ }), + + /***/ "428f": + /***/ (function(module, exports, __webpack_require__) { + + var global = __webpack_require__("da84"); + + module.exports = global; + + + /***/ }), + + /***/ "42a0": + /***/ (function(module, exports) { + + /** + * lodash (Custom Build) <https://lodash.com/> + * Build: `lodash modularize exports="npm" -o ./` + * Copyright jQuery Foundation and other contributors <https://jquery.org/> + * Released under MIT license <https://lodash.com/license> + * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE> + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ + + /** Used as references for various `Number` constants. */ + var MAX_SAFE_INTEGER = 9007199254740991; + + /** `Object#toString` result references. */ + var argsTag = '[object Arguments]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]'; + + /** Used to detect unsigned integer values. */ + var reIsUint = /^(?:0|[1-9]\d*)$/; + + /** + * A faster alternative to `Function#apply`, this function invokes `func` + * with the `this` binding of `thisArg` and the arguments of `args`. + * + * @private + * @param {Function} func The function to invoke. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} args The arguments to invoke `func` with. + * @returns {*} Returns the result of `func`. + */ + function apply(func, thisArg, args) { + switch (args.length) { + case 0: return func.call(thisArg); + case 1: return func.call(thisArg, args[0]); + case 2: return func.call(thisArg, args[0], args[1]); + case 3: return func.call(thisArg, args[0], args[1], args[2]); + } + return func.apply(thisArg, args); + } + + /** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ + function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; + } + + /** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ + function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; + } + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var objectToString = objectProto.toString; + + /** Built-in value references. */ + var propertyIsEnumerable = objectProto.propertyIsEnumerable; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeKeys = overArg(Object.keys, Object), + nativeMax = Math.max; + + /** Detect if properties shadowing those on `Object.prototype` are non-enumerable. */ + var nonEnumShadows = !propertyIsEnumerable.call({ 'valueOf': 1 }, 'valueOf'); + + /** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ + function arrayLikeKeys(value, inherited) { + // Safari 8.1 makes `arguments.callee` enumerable in strict mode. + // Safari 9 makes `arguments.length` enumerable in strict mode. + var result = (isArray(value) || isArguments(value)) + ? baseTimes(value.length, String) + : []; + + var length = result.length, + skipIndexes = !!length; + + for (var key in value) { + if ((inherited || hasOwnProperty.call(value, key)) && + !(skipIndexes && (key == 'length' || isIndex(key, length)))) { + result.push(key); + } + } + return result; + } + + /** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || + (value === undefined && !(key in object))) { + object[key] = value; + } + } + + /** + * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function baseKeys(object) { + if (!isPrototype(object)) { + return nativeKeys(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty.call(object, key) && key != 'constructor') { + result.push(key); + } + } + return result; + } + + /** + * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + */ + function baseRest(func, start) { + start = nativeMax(start === undefined ? (func.length - 1) : start, 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + array = Array(length); + + while (++index < length) { + array[index] = args[start + index]; + } + index = -1; + var otherArgs = Array(start + 1); + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = array; + return apply(func, this, otherArgs); + }; + } + + /** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property identifiers to copy. + * @param {Object} [object={}] The object to copy properties to. + * @param {Function} [customizer] The function to customize copied values. + * @returns {Object} Returns `object`. + */ + function copyObject(source, props, object, customizer) { + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + + var newValue = customizer + ? customizer(object[key], source[key], key, object, source) + : undefined; + + assignValue(object, key, newValue === undefined ? source[key] : newValue); + } + return object; + } + + /** + * Creates a function like `_.assign`. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ + function createAssigner(assigner) { + return baseRest(function(object, sources) { + var index = -1, + length = sources.length, + customizer = length > 1 ? sources[length - 1] : undefined, + guard = length > 2 ? sources[2] : undefined; + + customizer = (assigner.length > 3 && typeof customizer == 'function') + ? (length--, customizer) + : undefined; + + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + customizer = length < 3 ? undefined : customizer; + length = 1; + } + object = Object(object); + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, index, customizer); + } + } + return object; + }); + } + + /** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ + function isIndex(value, length) { + length = length == null ? MAX_SAFE_INTEGER : length; + return !!length && + (typeof value == 'number' || reIsUint.test(value)) && + (value > -1 && value % 1 == 0 && value < length); + } + + /** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, + * else `false`. + */ + function isIterateeCall(value, index, object) { + if (!isObject(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? (isArrayLike(object) && isIndex(index, object.length)) + : (type == 'string' && index in object) + ) { + return eq(object[index], value); + } + return false; + } + + /** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ + function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; + + return value === proto; + } + + /** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ + function eq(value, other) { + return value === other || (value !== value && other !== other); + } + + /** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ + function isArguments(value) { + // Safari 8.1 makes `arguments.callee` enumerable in strict mode. + return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') && + (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag); + } + + /** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ + var isArray = Array.isArray; + + /** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ + function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); + } + + /** + * This method is like `_.isArrayLike` except that it also checks if `value` + * is an object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array-like object, + * else `false`. + * @example + * + * _.isArrayLikeObject([1, 2, 3]); + * // => true + * + * _.isArrayLikeObject(document.body.children); + * // => true + * + * _.isArrayLikeObject('abc'); + * // => false + * + * _.isArrayLikeObject(_.noop); + * // => false + */ + function isArrayLikeObject(value) { + return isObjectLike(value) && isArrayLike(value); + } + + /** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ + function isFunction(value) { + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 8-9 which returns 'object' for typed array and other constructors. + var tag = isObject(value) ? objectToString.call(value) : ''; + return tag == funcTag || tag == genTag; + } + + /** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ + function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; + } + + /** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ + function isObject(value) { + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); + } + + /** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ + function isObjectLike(value) { + return !!value && typeof value == 'object'; + } + + /** + * Assigns own enumerable string keyed properties of source objects to the + * destination object. Source objects are applied from left to right. + * Subsequent sources overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object` and is loosely based on + * [`Object.assign`](https://mdn.io/Object/assign). + * + * @static + * @memberOf _ + * @since 0.10.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assignIn + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assign({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'c': 3 } + */ + var assign = createAssigner(function(object, source) { + if (nonEnumShadows || isPrototype(source) || isArrayLike(source)) { + copyObject(source, keys(source), object); + return; + } + for (var key in source) { + if (hasOwnProperty.call(source, key)) { + assignValue(object, key, source[key]); + } + } + }); + + /** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ + function keys(object) { + return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); + } + + module.exports = assign; + + + /***/ }), + + /***/ "44ad": + /***/ (function(module, exports, __webpack_require__) { + + var fails = __webpack_require__("d039"); + var classof = __webpack_require__("c6b6"); + + var split = ''.split; + + // fallback for non-array-like ES3 and non-enumerable old V8 strings + module.exports = fails(function () { + // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346 + // eslint-disable-next-line no-prototype-builtins + return !Object('z').propertyIsEnumerable(0); + }) ? function (it) { + return classof(it) == 'String' ? split.call(it, '') : Object(it); + } : Object; + + + /***/ }), + + /***/ "44d2": + /***/ (function(module, exports, __webpack_require__) { + + var wellKnownSymbol = __webpack_require__("b622"); + var create = __webpack_require__("7c73"); + var definePropertyModule = __webpack_require__("9bf2"); + + var UNSCOPABLES = wellKnownSymbol('unscopables'); + var ArrayPrototype = Array.prototype; + + // Array.prototype[@@unscopables] + // https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables + if (ArrayPrototype[UNSCOPABLES] == undefined) { + definePropertyModule.f(ArrayPrototype, UNSCOPABLES, { + configurable: true, + value: create(null) + }); + } + + // add a key to Array.prototype[@@unscopables] + module.exports = function (key) { + ArrayPrototype[UNSCOPABLES][key] = true; + }; + + + /***/ }), + + /***/ "44e7": + /***/ (function(module, exports, __webpack_require__) { + + var isObject = __webpack_require__("861d"); + var classof = __webpack_require__("c6b6"); + var wellKnownSymbol = __webpack_require__("b622"); + + var MATCH = wellKnownSymbol('match'); + + // `IsRegExp` abstract operation + // https://tc39.github.io/ecma262/#sec-isregexp + module.exports = function (it) { + var isRegExp; + return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) == 'RegExp'); + }; + + + /***/ }), + + /***/ "466d": + /***/ (function(module, exports, __webpack_require__) { + + var fixRegExpWellKnownSymbolLogic = __webpack_require__("d784"); + var anObject = __webpack_require__("825a"); + var toLength = __webpack_require__("50c4"); + var requireObjectCoercible = __webpack_require__("1d80"); + var advanceStringIndex = __webpack_require__("8aa5"); + var regExpExec = __webpack_require__("14c3"); + + // @@match logic + fixRegExpWellKnownSymbolLogic('match', 1, function (MATCH, nativeMatch, maybeCallNative) { + return [ + // `String.prototype.match` method + // https://tc39.github.io/ecma262/#sec-string.prototype.match + function match(regexp) { + var O = requireObjectCoercible(this); + var matcher = regexp == undefined ? undefined : regexp[MATCH]; + return matcher !== undefined ? matcher.call(regexp, O) : new RegExp(regexp)[MATCH](String(O)); + }, + // `RegExp.prototype[@@match]` method + // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@match + function (regexp) { + var res = maybeCallNative(nativeMatch, regexp, this); + if (res.done) return res.value; + + var rx = anObject(regexp); + var S = String(this); + + if (!rx.global) return regExpExec(rx, S); + + var fullUnicode = rx.unicode; + rx.lastIndex = 0; + var A = []; + var n = 0; + var result; + while ((result = regExpExec(rx, S)) !== null) { + var matchStr = String(result[0]); + A[n] = matchStr; + if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode); + n++; + } + return n === 0 ? null : A; + } + ]; + }); + + + /***/ }), + + /***/ "4840": + /***/ (function(module, exports, __webpack_require__) { + + var anObject = __webpack_require__("825a"); + var aFunction = __webpack_require__("1c0b"); + var wellKnownSymbol = __webpack_require__("b622"); + + var SPECIES = wellKnownSymbol('species'); + + // `SpeciesConstructor` abstract operation + // https://tc39.github.io/ecma262/#sec-speciesconstructor + module.exports = function (O, defaultConstructor) { + var C = anObject(O).constructor; + var S; + return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aFunction(S); + }; + + + /***/ }), + + /***/ "4930": + /***/ (function(module, exports, __webpack_require__) { + + var fails = __webpack_require__("d039"); + + module.exports = !!Object.getOwnPropertySymbols && !fails(function () { + // Chrome 38 Symbol has incorrect toString conversion + // eslint-disable-next-line no-undef + return !String(Symbol()); + }); + + + /***/ }), + + /***/ "4d64": + /***/ (function(module, exports, __webpack_require__) { + + var toIndexedObject = __webpack_require__("fc6a"); + var toLength = __webpack_require__("50c4"); + var toAbsoluteIndex = __webpack_require__("23cb"); + + // `Array.prototype.{ indexOf, includes }` methods implementation + var createMethod = function (IS_INCLUDES) { + return function ($this, el, fromIndex) { + var O = toIndexedObject($this); + var length = toLength(O.length); + var index = toAbsoluteIndex(fromIndex, length); + var value; + // Array#includes uses SameValueZero equality algorithm + // eslint-disable-next-line no-self-compare + if (IS_INCLUDES && el != el) while (length > index) { + value = O[index++]; + // eslint-disable-next-line no-self-compare + if (value != value) return true; + // Array#indexOf ignores holes, Array#includes - not + } else for (;length > index; index++) { + if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0; + } return !IS_INCLUDES && -1; + }; + }; + + module.exports = { + // `Array.prototype.includes` method + // https://tc39.github.io/ecma262/#sec-array.prototype.includes + includes: createMethod(true), + // `Array.prototype.indexOf` method + // https://tc39.github.io/ecma262/#sec-array.prototype.indexof + indexOf: createMethod(false) + }; + + + /***/ }), + + /***/ "4de4": + /***/ (function(module, exports, __webpack_require__) { + + var $ = __webpack_require__("23e7"); + var $filter = __webpack_require__("b727").filter; + var arrayMethodHasSpeciesSupport = __webpack_require__("1dde"); + var arrayMethodUsesToLength = __webpack_require__("ae40"); + + var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter'); + // Edge 14- issue + var USES_TO_LENGTH = arrayMethodUsesToLength('filter'); + + // `Array.prototype.filter` method + // https://tc39.github.io/ecma262/#sec-array.prototype.filter + // with adding support of @@species + $({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH }, { + filter: function filter(callbackfn /* , thisArg */) { + return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } + }); + + + /***/ }), + + /***/ "4df4": + /***/ (function(module, exports, __webpack_require__) { + + var bind = __webpack_require__("0366"); + var toObject = __webpack_require__("7b0b"); + var callWithSafeIterationClosing = __webpack_require__("9bdd"); + var isArrayIteratorMethod = __webpack_require__("e95a"); + var toLength = __webpack_require__("50c4"); + var createProperty = __webpack_require__("8418"); + var getIteratorMethod = __webpack_require__("35a1"); + + // `Array.from` method implementation + // https://tc39.github.io/ecma262/#sec-array.from + module.exports = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) { + var O = toObject(arrayLike); + var C = typeof this == 'function' ? this : Array; + var argumentsLength = arguments.length; + var mapfn = argumentsLength > 1 ? arguments[1] : undefined; + var mapping = mapfn !== undefined; + var iteratorMethod = getIteratorMethod(O); + var index = 0; + var length, result, step, iterator, next, value; + if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined, 2); + // if the target is not iterable or it's an array with the default iterator - use a simple case + if (iteratorMethod != undefined && !(C == Array && isArrayIteratorMethod(iteratorMethod))) { + iterator = iteratorMethod.call(O); + next = iterator.next; + result = new C(); + for (;!(step = next.call(iterator)).done; index++) { + value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value; + createProperty(result, index, value); + } + } else { + length = toLength(O.length); + result = new C(length); + for (;length > index; index++) { + value = mapping ? mapfn(O[index], index) : O[index]; + createProperty(result, index, value); + } + } + result.length = index; + return result; + }; + + + /***/ }), + + /***/ "50c4": + /***/ (function(module, exports, __webpack_require__) { + + var toInteger = __webpack_require__("a691"); + + var min = Math.min; + + // `ToLength` abstract operation + // https://tc39.github.io/ecma262/#sec-tolength + module.exports = function (argument) { + return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991 + }; + + + /***/ }), + + /***/ "5135": + /***/ (function(module, exports) { + + var hasOwnProperty = {}.hasOwnProperty; + + module.exports = function (it, key) { + return hasOwnProperty.call(it, key); + }; + + + /***/ }), + + /***/ "5692": + /***/ (function(module, exports, __webpack_require__) { + + var IS_PURE = __webpack_require__("c430"); + var store = __webpack_require__("c6cd"); + + (module.exports = function (key, value) { + return store[key] || (store[key] = value !== undefined ? value : {}); + })('versions', []).push({ + version: '3.6.4', + mode: IS_PURE ? 'pure' : 'global', + copyright: '© 2020 Denis Pushkarev (zloirock.ru)' + }); + + + /***/ }), + + /***/ "56ef": + /***/ (function(module, exports, __webpack_require__) { + + var getBuiltIn = __webpack_require__("d066"); + var getOwnPropertyNamesModule = __webpack_require__("241c"); + var getOwnPropertySymbolsModule = __webpack_require__("7418"); + var anObject = __webpack_require__("825a"); + + // all object keys, includes non-enumerable and symbols + module.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) { + var keys = getOwnPropertyNamesModule.f(anObject(it)); + var getOwnPropertySymbols = getOwnPropertySymbolsModule.f; + return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys; + }; + + + /***/ }), + + /***/ "5899": + /***/ (function(module, exports) { + + // a string of all valid unicode whitespaces + // eslint-disable-next-line max-len + module.exports = '\u0009\u000A\u000B\u000C\u000D\u0020\u00A0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF'; + + + /***/ }), + + /***/ "58a8": + /***/ (function(module, exports, __webpack_require__) { + + var requireObjectCoercible = __webpack_require__("1d80"); + var whitespaces = __webpack_require__("5899"); + + var whitespace = '[' + whitespaces + ']'; + var ltrim = RegExp('^' + whitespace + whitespace + '*'); + var rtrim = RegExp(whitespace + whitespace + '*$'); + + // `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation + var createMethod = function (TYPE) { + return function ($this) { + var string = String(requireObjectCoercible($this)); + if (TYPE & 1) string = string.replace(ltrim, ''); + if (TYPE & 2) string = string.replace(rtrim, ''); + return string; + }; + }; + + module.exports = { + // `String.prototype.{ trimLeft, trimStart }` methods + // https://tc39.github.io/ecma262/#sec-string.prototype.trimstart + start: createMethod(1), + // `String.prototype.{ trimRight, trimEnd }` methods + // https://tc39.github.io/ecma262/#sec-string.prototype.trimend + end: createMethod(2), + // `String.prototype.trim` method + // https://tc39.github.io/ecma262/#sec-string.prototype.trim + trim: createMethod(3) + }; + + + /***/ }), + + /***/ "5c6c": + /***/ (function(module, exports) { + + module.exports = function (bitmap, value) { + return { + enumerable: !(bitmap & 1), + configurable: !(bitmap & 2), + writable: !(bitmap & 4), + value: value + }; + }; + + + /***/ }), + + /***/ "60da": + /***/ (function(module, exports, __webpack_require__) { + + var DESCRIPTORS = __webpack_require__("83ab"); + var fails = __webpack_require__("d039"); + var objectKeys = __webpack_require__("df75"); + var getOwnPropertySymbolsModule = __webpack_require__("7418"); + var propertyIsEnumerableModule = __webpack_require__("d1e7"); + var toObject = __webpack_require__("7b0b"); + var IndexedObject = __webpack_require__("44ad"); + + var nativeAssign = Object.assign; + var defineProperty = Object.defineProperty; + + // `Object.assign` method + // https://tc39.github.io/ecma262/#sec-object.assign + module.exports = !nativeAssign || fails(function () { + // should have correct order of operations (Edge bug) + if (DESCRIPTORS && nativeAssign({ b: 1 }, nativeAssign(defineProperty({}, 'a', { + enumerable: true, + get: function () { + defineProperty(this, 'b', { + value: 3, + enumerable: false + }); + } + }), { b: 2 })).b !== 1) return true; + // should work with symbols and should have deterministic property order (V8 bug) + var A = {}; + var B = {}; + // eslint-disable-next-line no-undef + var symbol = Symbol(); + var alphabet = 'abcdefghijklmnopqrst'; + A[symbol] = 7; + alphabet.split('').forEach(function (chr) { B[chr] = chr; }); + return nativeAssign({}, A)[symbol] != 7 || objectKeys(nativeAssign({}, B)).join('') != alphabet; + }) ? function assign(target, source) { // eslint-disable-line no-unused-vars + var T = toObject(target); + var argumentsLength = arguments.length; + var index = 1; + var getOwnPropertySymbols = getOwnPropertySymbolsModule.f; + var propertyIsEnumerable = propertyIsEnumerableModule.f; + while (argumentsLength > index) { + var S = IndexedObject(arguments[index++]); + var keys = getOwnPropertySymbols ? objectKeys(S).concat(getOwnPropertySymbols(S)) : objectKeys(S); + var length = keys.length; + var j = 0; + var key; + while (length > j) { + key = keys[j++]; + if (!DESCRIPTORS || propertyIsEnumerable.call(S, key)) T[key] = S[key]; + } + } return T; + } : nativeAssign; + + + /***/ }), + + /***/ "6547": + /***/ (function(module, exports, __webpack_require__) { + + var toInteger = __webpack_require__("a691"); + var requireObjectCoercible = __webpack_require__("1d80"); + + // `String.prototype.{ codePointAt, at }` methods implementation + var createMethod = function (CONVERT_TO_STRING) { + return function ($this, pos) { + var S = String(requireObjectCoercible($this)); + var position = toInteger(pos); + var size = S.length; + var first, second; + if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined; + first = S.charCodeAt(position); + return first < 0xD800 || first > 0xDBFF || position + 1 === size + || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF + ? CONVERT_TO_STRING ? S.charAt(position) : first + : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000; + }; + }; + + module.exports = { + // `String.prototype.codePointAt` method + // https://tc39.github.io/ecma262/#sec-string.prototype.codepointat + codeAt: createMethod(false), + // `String.prototype.at` method + // https://github.com/mathiasbynens/String.prototype.at + charAt: createMethod(true) + }; + + + /***/ }), + + /***/ "65f0": + /***/ (function(module, exports, __webpack_require__) { + + var isObject = __webpack_require__("861d"); + var isArray = __webpack_require__("e8b5"); + var wellKnownSymbol = __webpack_require__("b622"); + + var SPECIES = wellKnownSymbol('species'); + + // `ArraySpeciesCreate` abstract operation + // https://tc39.github.io/ecma262/#sec-arrayspeciescreate + module.exports = function (originalArray, length) { + var C; + if (isArray(originalArray)) { + C = originalArray.constructor; + // cross-realm fallback + if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined; + else if (isObject(C)) { + C = C[SPECIES]; + if (C === null) C = undefined; + } + } return new (C === undefined ? Array : C)(length === 0 ? 0 : length); + }; + + + /***/ }), + + /***/ "69f3": + /***/ (function(module, exports, __webpack_require__) { + + var NATIVE_WEAK_MAP = __webpack_require__("7f9a"); + var global = __webpack_require__("da84"); + var isObject = __webpack_require__("861d"); + var createNonEnumerableProperty = __webpack_require__("9112"); + var objectHas = __webpack_require__("5135"); + var sharedKey = __webpack_require__("f772"); + var hiddenKeys = __webpack_require__("d012"); + + var WeakMap = global.WeakMap; + var set, get, has; + + var enforce = function (it) { + return has(it) ? get(it) : set(it, {}); + }; + + var getterFor = function (TYPE) { + return function (it) { + var state; + if (!isObject(it) || (state = get(it)).type !== TYPE) { + throw TypeError('Incompatible receiver, ' + TYPE + ' required'); + } return state; + }; + }; + + if (NATIVE_WEAK_MAP) { + var store = new WeakMap(); + var wmget = store.get; + var wmhas = store.has; + var wmset = store.set; + set = function (it, metadata) { + wmset.call(store, it, metadata); + return metadata; + }; + get = function (it) { + return wmget.call(store, it) || {}; + }; + has = function (it) { + return wmhas.call(store, it); + }; + } else { + var STATE = sharedKey('state'); + hiddenKeys[STATE] = true; + set = function (it, metadata) { + createNonEnumerableProperty(it, STATE, metadata); + return metadata; + }; + get = function (it) { + return objectHas(it, STATE) ? it[STATE] : {}; + }; + has = function (it) { + return objectHas(it, STATE); + }; + } + + module.exports = { + set: set, + get: get, + has: has, + enforce: enforce, + getterFor: getterFor + }; + + + /***/ }), + + /***/ "6dd8": + /***/ (function(module, __webpack_exports__, __webpack_require__) { + /* WEBPACK VAR INJECTION */(function(global) {/** + * A collection of shims that provide minimal functionality of the ES6 collections. + * + * These implementations are not meant to be used outside of the ResizeObserver + * modules as they cover only a limited range of use cases. + */ + /* eslint-disable require-jsdoc, valid-jsdoc */ + var MapShim = (function () { + if (typeof Map !== 'undefined') { + return Map; + } + /** + * Returns index in provided array that matches the specified key. + * + * @param {Array<Array>} arr + * @param {*} key + * @returns {number} + */ + function getIndex(arr, key) { + var result = -1; + arr.some(function (entry, index) { + if (entry[0] === key) { + result = index; + return true; + } + return false; + }); + return result; + } + return /** @class */ (function () { + function class_1() { + this.__entries__ = []; + } + Object.defineProperty(class_1.prototype, "size", { + /** + * @returns {boolean} + */ + get: function () { + return this.__entries__.length; + }, + enumerable: true, + configurable: true + }); + /** + * @param {*} key + * @returns {*} + */ + class_1.prototype.get = function (key) { + var index = getIndex(this.__entries__, key); + var entry = this.__entries__[index]; + return entry && entry[1]; + }; + /** + * @param {*} key + * @param {*} value + * @returns {void} + */ + class_1.prototype.set = function (key, value) { + var index = getIndex(this.__entries__, key); + if (~index) { + this.__entries__[index][1] = value; + } + else { + this.__entries__.push([key, value]); + } + }; + /** + * @param {*} key + * @returns {void} + */ + class_1.prototype.delete = function (key) { + var entries = this.__entries__; + var index = getIndex(entries, key); + if (~index) { + entries.splice(index, 1); + } + }; + /** + * @param {*} key + * @returns {void} + */ + class_1.prototype.has = function (key) { + return !!~getIndex(this.__entries__, key); + }; + /** + * @returns {void} + */ + class_1.prototype.clear = function () { + this.__entries__.splice(0); + }; + /** + * @param {Function} callback + * @param {*} [ctx=null] + * @returns {void} + */ + class_1.prototype.forEach = function (callback, ctx) { + if (ctx === void 0) { ctx = null; } + for (var _i = 0, _a = this.__entries__; _i < _a.length; _i++) { + var entry = _a[_i]; + callback.call(ctx, entry[1], entry[0]); + } + }; + return class_1; + }()); + })(); + + /** + * Detects whether window and document objects are available in current environment. + */ + var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && window.document === document; + + // Returns global object of a current environment. + var global$1 = (function () { + if (typeof global !== 'undefined' && global.Math === Math) { + return global; + } + if (typeof self !== 'undefined' && self.Math === Math) { + return self; + } + if (typeof window !== 'undefined' && window.Math === Math) { + return window; + } + // eslint-disable-next-line no-new-func + return Function('return this')(); + })(); + + /** + * A shim for the requestAnimationFrame which falls back to the setTimeout if + * first one is not supported. + * + * @returns {number} Requests' identifier. + */ + var requestAnimationFrame$1 = (function () { + if (typeof requestAnimationFrame === 'function') { + // It's required to use a bounded function because IE sometimes throws + // an "Invalid calling object" error if rAF is invoked without the global + // object on the left hand side. + return requestAnimationFrame.bind(global$1); + } + return function (callback) { return setTimeout(function () { return callback(Date.now()); }, 1000 / 60); }; + })(); + + // Defines minimum timeout before adding a trailing call. + var trailingTimeout = 2; + /** + * Creates a wrapper function which ensures that provided callback will be + * invoked only once during the specified delay period. + * + * @param {Function} callback - Function to be invoked after the delay period. + * @param {number} delay - Delay after which to invoke callback. + * @returns {Function} + */ + function throttle (callback, delay) { + var leadingCall = false, trailingCall = false, lastCallTime = 0; + /** + * Invokes the original callback function and schedules new invocation if + * the "proxy" was called during current request. + * + * @returns {void} + */ + function resolvePending() { + if (leadingCall) { + leadingCall = false; + callback(); + } + if (trailingCall) { + proxy(); + } + } + /** + * Callback invoked after the specified delay. It will further postpone + * invocation of the original function delegating it to the + * requestAnimationFrame. + * + * @returns {void} + */ + function timeoutCallback() { + requestAnimationFrame$1(resolvePending); + } + /** + * Schedules invocation of the original function. + * + * @returns {void} + */ + function proxy() { + var timeStamp = Date.now(); + if (leadingCall) { + // Reject immediately following calls. + if (timeStamp - lastCallTime < trailingTimeout) { + return; + } + // Schedule new call to be in invoked when the pending one is resolved. + // This is important for "transitions" which never actually start + // immediately so there is a chance that we might miss one if change + // happens amids the pending invocation. + trailingCall = true; + } + else { + leadingCall = true; + trailingCall = false; + setTimeout(timeoutCallback, delay); + } + lastCallTime = timeStamp; + } + return proxy; + } + + // Minimum delay before invoking the update of observers. + var REFRESH_DELAY = 20; + // A list of substrings of CSS properties used to find transition events that + // might affect dimensions of observed elements. + var transitionKeys = ['top', 'right', 'bottom', 'left', 'width', 'height', 'size', 'weight']; + // Check if MutationObserver is available. + var mutationObserverSupported = typeof MutationObserver !== 'undefined'; + /** + * Singleton controller class which handles updates of ResizeObserver instances. + */ + var ResizeObserverController = /** @class */ (function () { + /** + * Creates a new instance of ResizeObserverController. + * + * @private + */ + function ResizeObserverController() { + /** + * Indicates whether DOM listeners have been added. + * + * @private {boolean} + */ + this.connected_ = false; + /** + * Tells that controller has subscribed for Mutation Events. + * + * @private {boolean} + */ + this.mutationEventsAdded_ = false; + /** + * Keeps reference to the instance of MutationObserver. + * + * @private {MutationObserver} + */ + this.mutationsObserver_ = null; + /** + * A list of connected observers. + * + * @private {Array<ResizeObserverSPI>} + */ + this.observers_ = []; + this.onTransitionEnd_ = this.onTransitionEnd_.bind(this); + this.refresh = throttle(this.refresh.bind(this), REFRESH_DELAY); + } + /** + * Adds observer to observers list. + * + * @param {ResizeObserverSPI} observer - Observer to be added. + * @returns {void} + */ + ResizeObserverController.prototype.addObserver = function (observer) { + if (!~this.observers_.indexOf(observer)) { + this.observers_.push(observer); + } + // Add listeners if they haven't been added yet. + if (!this.connected_) { + this.connect_(); + } + }; + /** + * Removes observer from observers list. + * + * @param {ResizeObserverSPI} observer - Observer to be removed. + * @returns {void} + */ + ResizeObserverController.prototype.removeObserver = function (observer) { + var observers = this.observers_; + var index = observers.indexOf(observer); + // Remove observer if it's present in registry. + if (~index) { + observers.splice(index, 1); + } + // Remove listeners if controller has no connected observers. + if (!observers.length && this.connected_) { + this.disconnect_(); + } + }; + /** + * Invokes the update of observers. It will continue running updates insofar + * it detects changes. + * + * @returns {void} + */ + ResizeObserverController.prototype.refresh = function () { + var changesDetected = this.updateObservers_(); + // Continue running updates if changes have been detected as there might + // be future ones caused by CSS transitions. + if (changesDetected) { + this.refresh(); + } + }; + /** + * Updates every observer from observers list and notifies them of queued + * entries. + * + * @private + * @returns {boolean} Returns "true" if any observer has detected changes in + * dimensions of it's elements. + */ + ResizeObserverController.prototype.updateObservers_ = function () { + // Collect observers that have active observations. + var activeObservers = this.observers_.filter(function (observer) { + return observer.gatherActive(), observer.hasActive(); + }); + // Deliver notifications in a separate cycle in order to avoid any + // collisions between observers, e.g. when multiple instances of + // ResizeObserver are tracking the same element and the callback of one + // of them changes content dimensions of the observed target. Sometimes + // this may result in notifications being blocked for the rest of observers. + activeObservers.forEach(function (observer) { return observer.broadcastActive(); }); + return activeObservers.length > 0; + }; + /** + * Initializes DOM listeners. + * + * @private + * @returns {void} + */ + ResizeObserverController.prototype.connect_ = function () { + // Do nothing if running in a non-browser environment or if listeners + // have been already added. + if (!isBrowser || this.connected_) { + return; + } + // Subscription to the "Transitionend" event is used as a workaround for + // delayed transitions. This way it's possible to capture at least the + // final state of an element. + document.addEventListener('transitionend', this.onTransitionEnd_); + window.addEventListener('resize', this.refresh); + if (mutationObserverSupported) { + this.mutationsObserver_ = new MutationObserver(this.refresh); + this.mutationsObserver_.observe(document, { + attributes: true, + childList: true, + characterData: true, + subtree: true + }); + } + else { + document.addEventListener('DOMSubtreeModified', this.refresh); + this.mutationEventsAdded_ = true; + } + this.connected_ = true; + }; + /** + * Removes DOM listeners. + * + * @private + * @returns {void} + */ + ResizeObserverController.prototype.disconnect_ = function () { + // Do nothing if running in a non-browser environment or if listeners + // have been already removed. + if (!isBrowser || !this.connected_) { + return; + } + document.removeEventListener('transitionend', this.onTransitionEnd_); + window.removeEventListener('resize', this.refresh); + if (this.mutationsObserver_) { + this.mutationsObserver_.disconnect(); + } + if (this.mutationEventsAdded_) { + document.removeEventListener('DOMSubtreeModified', this.refresh); + } + this.mutationsObserver_ = null; + this.mutationEventsAdded_ = false; + this.connected_ = false; + }; + /** + * "Transitionend" event handler. + * + * @private + * @param {TransitionEvent} event + * @returns {void} + */ + ResizeObserverController.prototype.onTransitionEnd_ = function (_a) { + var _b = _a.propertyName, propertyName = _b === void 0 ? '' : _b; + // Detect whether transition may affect dimensions of an element. + var isReflowProperty = transitionKeys.some(function (key) { + return !!~propertyName.indexOf(key); + }); + if (isReflowProperty) { + this.refresh(); + } + }; + /** + * Returns instance of the ResizeObserverController. + * + * @returns {ResizeObserverController} + */ + ResizeObserverController.getInstance = function () { + if (!this.instance_) { + this.instance_ = new ResizeObserverController(); + } + return this.instance_; + }; + /** + * Holds reference to the controller's instance. + * + * @private {ResizeObserverController} + */ + ResizeObserverController.instance_ = null; + return ResizeObserverController; + }()); + + /** + * Defines non-writable/enumerable properties of the provided target object. + * + * @param {Object} target - Object for which to define properties. + * @param {Object} props - Properties to be defined. + * @returns {Object} Target object. + */ + var defineConfigurable = (function (target, props) { + for (var _i = 0, _a = Object.keys(props); _i < _a.length; _i++) { + var key = _a[_i]; + Object.defineProperty(target, key, { + value: props[key], + enumerable: false, + writable: false, + configurable: true + }); + } + return target; + }); + + /** + * Returns the global object associated with provided element. + * + * @param {Object} target + * @returns {Object} + */ + var getWindowOf = (function (target) { + // Assume that the element is an instance of Node, which means that it + // has the "ownerDocument" property from which we can retrieve a + // corresponding global object. + var ownerGlobal = target && target.ownerDocument && target.ownerDocument.defaultView; + // Return the local global object if it's not possible extract one from + // provided element. + return ownerGlobal || global$1; + }); + + // Placeholder of an empty content rectangle. + var emptyRect = createRectInit(0, 0, 0, 0); + /** + * Converts provided string to a number. + * + * @param {number|string} value + * @returns {number} + */ + function toFloat(value) { + return parseFloat(value) || 0; + } + /** + * Extracts borders size from provided styles. + * + * @param {CSSStyleDeclaration} styles + * @param {...string} positions - Borders positions (top, right, ...) + * @returns {number} + */ + function getBordersSize(styles) { + var positions = []; + for (var _i = 1; _i < arguments.length; _i++) { + positions[_i - 1] = arguments[_i]; + } + return positions.reduce(function (size, position) { + var value = styles['border-' + position + '-width']; + return size + toFloat(value); + }, 0); + } + /** + * Extracts paddings sizes from provided styles. + * + * @param {CSSStyleDeclaration} styles + * @returns {Object} Paddings box. + */ + function getPaddings(styles) { + var positions = ['top', 'right', 'bottom', 'left']; + var paddings = {}; + for (var _i = 0, positions_1 = positions; _i < positions_1.length; _i++) { + var position = positions_1[_i]; + var value = styles['padding-' + position]; + paddings[position] = toFloat(value); + } + return paddings; + } + /** + * Calculates content rectangle of provided SVG element. + * + * @param {SVGGraphicsElement} target - Element content rectangle of which needs + * to be calculated. + * @returns {DOMRectInit} + */ + function getSVGContentRect(target) { + var bbox = target.getBBox(); + return createRectInit(0, 0, bbox.width, bbox.height); + } + /** + * Calculates content rectangle of provided HTMLElement. + * + * @param {HTMLElement} target - Element for which to calculate the content rectangle. + * @returns {DOMRectInit} + */ + function getHTMLElementContentRect(target) { + // Client width & height properties can't be + // used exclusively as they provide rounded values. + var clientWidth = target.clientWidth, clientHeight = target.clientHeight; + // By this condition we can catch all non-replaced inline, hidden and + // detached elements. Though elements with width & height properties less + // than 0.5 will be discarded as well. + // + // Without it we would need to implement separate methods for each of + // those cases and it's not possible to perform a precise and performance + // effective test for hidden elements. E.g. even jQuery's ':visible' filter + // gives wrong results for elements with width & height less than 0.5. + if (!clientWidth && !clientHeight) { + return emptyRect; + } + var styles = getWindowOf(target).getComputedStyle(target); + var paddings = getPaddings(styles); + var horizPad = paddings.left + paddings.right; + var vertPad = paddings.top + paddings.bottom; + // Computed styles of width & height are being used because they are the + // only dimensions available to JS that contain non-rounded values. It could + // be possible to utilize the getBoundingClientRect if only it's data wasn't + // affected by CSS transformations let alone paddings, borders and scroll bars. + var width = toFloat(styles.width), height = toFloat(styles.height); + // Width & height include paddings and borders when the 'border-box' box + // model is applied (except for IE). + if (styles.boxSizing === 'border-box') { + // Following conditions are required to handle Internet Explorer which + // doesn't include paddings and borders to computed CSS dimensions. + // + // We can say that if CSS dimensions + paddings are equal to the "client" + // properties then it's either IE, and thus we don't need to subtract + // anything, or an element merely doesn't have paddings/borders styles. + if (Math.round(width + horizPad) !== clientWidth) { + width -= getBordersSize(styles, 'left', 'right') + horizPad; + } + if (Math.round(height + vertPad) !== clientHeight) { + height -= getBordersSize(styles, 'top', 'bottom') + vertPad; + } + } + // Following steps can't be applied to the document's root element as its + // client[Width/Height] properties represent viewport area of the window. + // Besides, it's as well not necessary as the <html> itself neither has + // rendered scroll bars nor it can be clipped. + if (!isDocumentElement(target)) { + // In some browsers (only in Firefox, actually) CSS width & height + // include scroll bars size which can be removed at this step as scroll + // bars are the only difference between rounded dimensions + paddings + // and "client" properties, though that is not always true in Chrome. + var vertScrollbar = Math.round(width + horizPad) - clientWidth; + var horizScrollbar = Math.round(height + vertPad) - clientHeight; + // Chrome has a rather weird rounding of "client" properties. + // E.g. for an element with content width of 314.2px it sometimes gives + // the client width of 315px and for the width of 314.7px it may give + // 314px. And it doesn't happen all the time. So just ignore this delta + // as a non-relevant. + if (Math.abs(vertScrollbar) !== 1) { + width -= vertScrollbar; + } + if (Math.abs(horizScrollbar) !== 1) { + height -= horizScrollbar; + } + } + return createRectInit(paddings.left, paddings.top, width, height); + } + /** + * Checks whether provided element is an instance of the SVGGraphicsElement. + * + * @param {Element} target - Element to be checked. + * @returns {boolean} + */ + var isSVGGraphicsElement = (function () { + // Some browsers, namely IE and Edge, don't have the SVGGraphicsElement + // interface. + if (typeof SVGGraphicsElement !== 'undefined') { + return function (target) { return target instanceof getWindowOf(target).SVGGraphicsElement; }; + } + // If it's so, then check that element is at least an instance of the + // SVGElement and that it has the "getBBox" method. + // eslint-disable-next-line no-extra-parens + return function (target) { return (target instanceof getWindowOf(target).SVGElement && + typeof target.getBBox === 'function'); }; + })(); + /** + * Checks whether provided element is a document element (<html>). + * + * @param {Element} target - Element to be checked. + * @returns {boolean} + */ + function isDocumentElement(target) { + return target === getWindowOf(target).document.documentElement; + } + /** + * Calculates an appropriate content rectangle for provided html or svg element. + * + * @param {Element} target - Element content rectangle of which needs to be calculated. + * @returns {DOMRectInit} + */ + function getContentRect(target) { + if (!isBrowser) { + return emptyRect; + } + if (isSVGGraphicsElement(target)) { + return getSVGContentRect(target); + } + return getHTMLElementContentRect(target); + } + /** + * Creates rectangle with an interface of the DOMRectReadOnly. + * Spec: https://drafts.fxtf.org/geometry/#domrectreadonly + * + * @param {DOMRectInit} rectInit - Object with rectangle's x/y coordinates and dimensions. + * @returns {DOMRectReadOnly} + */ + function createReadOnlyRect(_a) { + var x = _a.x, y = _a.y, width = _a.width, height = _a.height; + // If DOMRectReadOnly is available use it as a prototype for the rectangle. + var Constr = typeof DOMRectReadOnly !== 'undefined' ? DOMRectReadOnly : Object; + var rect = Object.create(Constr.prototype); + // Rectangle's properties are not writable and non-enumerable. + defineConfigurable(rect, { + x: x, y: y, width: width, height: height, + top: y, + right: x + width, + bottom: height + y, + left: x + }); + return rect; + } + /** + * Creates DOMRectInit object based on the provided dimensions and the x/y coordinates. + * Spec: https://drafts.fxtf.org/geometry/#dictdef-domrectinit + * + * @param {number} x - X coordinate. + * @param {number} y - Y coordinate. + * @param {number} width - Rectangle's width. + * @param {number} height - Rectangle's height. + * @returns {DOMRectInit} + */ + function createRectInit(x, y, width, height) { + return { x: x, y: y, width: width, height: height }; + } + + /** + * Class that is responsible for computations of the content rectangle of + * provided DOM element and for keeping track of it's changes. + */ + var ResizeObservation = /** @class */ (function () { + /** + * Creates an instance of ResizeObservation. + * + * @param {Element} target - Element to be observed. + */ + function ResizeObservation(target) { + /** + * Broadcasted width of content rectangle. + * + * @type {number} + */ + this.broadcastWidth = 0; + /** + * Broadcasted height of content rectangle. + * + * @type {number} + */ + this.broadcastHeight = 0; + /** + * Reference to the last observed content rectangle. + * + * @private {DOMRectInit} + */ + this.contentRect_ = createRectInit(0, 0, 0, 0); + this.target = target; + } + /** + * Updates content rectangle and tells whether it's width or height properties + * have changed since the last broadcast. + * + * @returns {boolean} + */ + ResizeObservation.prototype.isActive = function () { + var rect = getContentRect(this.target); + this.contentRect_ = rect; + return (rect.width !== this.broadcastWidth || + rect.height !== this.broadcastHeight); + }; + /** + * Updates 'broadcastWidth' and 'broadcastHeight' properties with a data + * from the corresponding properties of the last observed content rectangle. + * + * @returns {DOMRectInit} Last observed content rectangle. + */ + ResizeObservation.prototype.broadcastRect = function () { + var rect = this.contentRect_; + this.broadcastWidth = rect.width; + this.broadcastHeight = rect.height; + return rect; + }; + return ResizeObservation; + }()); + + var ResizeObserverEntry = /** @class */ (function () { + /** + * Creates an instance of ResizeObserverEntry. + * + * @param {Element} target - Element that is being observed. + * @param {DOMRectInit} rectInit - Data of the element's content rectangle. + */ + function ResizeObserverEntry(target, rectInit) { + var contentRect = createReadOnlyRect(rectInit); + // According to the specification following properties are not writable + // and are also not enumerable in the native implementation. + // + // Property accessors are not being used as they'd require to define a + // private WeakMap storage which may cause memory leaks in browsers that + // don't support this type of collections. + defineConfigurable(this, { target: target, contentRect: contentRect }); + } + return ResizeObserverEntry; + }()); + + var ResizeObserverSPI = /** @class */ (function () { + /** + * Creates a new instance of ResizeObserver. + * + * @param {ResizeObserverCallback} callback - Callback function that is invoked + * when one of the observed elements changes it's content dimensions. + * @param {ResizeObserverController} controller - Controller instance which + * is responsible for the updates of observer. + * @param {ResizeObserver} callbackCtx - Reference to the public + * ResizeObserver instance which will be passed to callback function. + */ + function ResizeObserverSPI(callback, controller, callbackCtx) { + /** + * Collection of resize observations that have detected changes in dimensions + * of elements. + * + * @private {Array<ResizeObservation>} + */ + this.activeObservations_ = []; + /** + * Registry of the ResizeObservation instances. + * + * @private {Map<Element, ResizeObservation>} + */ + this.observations_ = new MapShim(); + if (typeof callback !== 'function') { + throw new TypeError('The callback provided as parameter 1 is not a function.'); + } + this.callback_ = callback; + this.controller_ = controller; + this.callbackCtx_ = callbackCtx; + } + /** + * Starts observing provided element. + * + * @param {Element} target - Element to be observed. + * @returns {void} + */ + ResizeObserverSPI.prototype.observe = function (target) { + if (!arguments.length) { + throw new TypeError('1 argument required, but only 0 present.'); + } + // Do nothing if current environment doesn't have the Element interface. + if (typeof Element === 'undefined' || !(Element instanceof Object)) { + return; + } + if (!(target instanceof getWindowOf(target).Element)) { + throw new TypeError('parameter 1 is not of type "Element".'); + } + var observations = this.observations_; + // Do nothing if element is already being observed. + if (observations.has(target)) { + return; + } + observations.set(target, new ResizeObservation(target)); + this.controller_.addObserver(this); + // Force the update of observations. + this.controller_.refresh(); + }; + /** + * Stops observing provided element. + * + * @param {Element} target - Element to stop observing. + * @returns {void} + */ + ResizeObserverSPI.prototype.unobserve = function (target) { + if (!arguments.length) { + throw new TypeError('1 argument required, but only 0 present.'); + } + // Do nothing if current environment doesn't have the Element interface. + if (typeof Element === 'undefined' || !(Element instanceof Object)) { + return; + } + if (!(target instanceof getWindowOf(target).Element)) { + throw new TypeError('parameter 1 is not of type "Element".'); + } + var observations = this.observations_; + // Do nothing if element is not being observed. + if (!observations.has(target)) { + return; + } + observations.delete(target); + if (!observations.size) { + this.controller_.removeObserver(this); + } + }; + /** + * Stops observing all elements. + * + * @returns {void} + */ + ResizeObserverSPI.prototype.disconnect = function () { + this.clearActive(); + this.observations_.clear(); + this.controller_.removeObserver(this); + }; + /** + * Collects observation instances the associated element of which has changed + * it's content rectangle. + * + * @returns {void} + */ + ResizeObserverSPI.prototype.gatherActive = function () { + var _this = this; + this.clearActive(); + this.observations_.forEach(function (observation) { + if (observation.isActive()) { + _this.activeObservations_.push(observation); + } + }); + }; + /** + * Invokes initial callback function with a list of ResizeObserverEntry + * instances collected from active resize observations. + * + * @returns {void} + */ + ResizeObserverSPI.prototype.broadcastActive = function () { + // Do nothing if observer doesn't have active observations. + if (!this.hasActive()) { + return; + } + var ctx = this.callbackCtx_; + // Create ResizeObserverEntry instance for every active observation. + var entries = this.activeObservations_.map(function (observation) { + return new ResizeObserverEntry(observation.target, observation.broadcastRect()); + }); + this.callback_.call(ctx, entries, ctx); + this.clearActive(); + }; + /** + * Clears the collection of active observations. + * + * @returns {void} + */ + ResizeObserverSPI.prototype.clearActive = function () { + this.activeObservations_.splice(0); + }; + /** + * Tells whether observer has active observations. + * + * @returns {boolean} + */ + ResizeObserverSPI.prototype.hasActive = function () { + return this.activeObservations_.length > 0; + }; + return ResizeObserverSPI; + }()); + + // Registry of internal observers. If WeakMap is not available use current shim + // for the Map collection as it has all required methods and because WeakMap + // can't be fully polyfilled anyway. + var observers = typeof WeakMap !== 'undefined' ? new WeakMap() : new MapShim(); + /** + * ResizeObserver API. Encapsulates the ResizeObserver SPI implementation + * exposing only those methods and properties that are defined in the spec. + */ + var ResizeObserver = /** @class */ (function () { + /** + * Creates a new instance of ResizeObserver. + * + * @param {ResizeObserverCallback} callback - Callback that is invoked when + * dimensions of the observed elements change. + */ + function ResizeObserver(callback) { + if (!(this instanceof ResizeObserver)) { + throw new TypeError('Cannot call a class as a function.'); + } + if (!arguments.length) { + throw new TypeError('1 argument required, but only 0 present.'); + } + var controller = ResizeObserverController.getInstance(); + var observer = new ResizeObserverSPI(callback, controller, this); + observers.set(this, observer); + } + return ResizeObserver; + }()); + // Expose public methods of ResizeObserver. + [ + 'observe', + 'unobserve', + 'disconnect' + ].forEach(function (method) { + ResizeObserver.prototype[method] = function () { + var _a; + return (_a = observers.get(this))[method].apply(_a, arguments); + }; + }); + + var index = (function () { + // Export existing implementation if available. + if (typeof global$1.ResizeObserver !== 'undefined') { + return global$1.ResizeObserver; + } + return ResizeObserver; + })(); + + /* harmony default export */ __webpack_exports__["a"] = (index); + + /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__("c8ba"))); + + /***/ }), + + /***/ "6ea2": + /***/ (function(module, __webpack_exports__, __webpack_require__) { + /* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_vuetify_loader_lib_loader_js_ref_19_0_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_SliderTrack_vue_vue_type_style_index_0_id_e4caeaf8_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("890c"); + /* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_vuetify_loader_lib_loader_js_ref_19_0_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_SliderTrack_vue_vue_type_style_index_0_id_e4caeaf8_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_vuetify_loader_lib_loader_js_ref_19_0_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_SliderTrack_vue_vue_type_style_index_0_id_e4caeaf8_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__); + /* unused harmony reexport * */ + /* unused harmony default export */ var _unused_webpack_default_export = (_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_vuetify_loader_lib_loader_js_ref_19_0_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_SliderTrack_vue_vue_type_style_index_0_id_e4caeaf8_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default.a); + + /***/ }), + + /***/ "6eeb": + /***/ (function(module, exports, __webpack_require__) { + + var global = __webpack_require__("da84"); + var createNonEnumerableProperty = __webpack_require__("9112"); + var has = __webpack_require__("5135"); + var setGlobal = __webpack_require__("ce4e"); + var inspectSource = __webpack_require__("8925"); + var InternalStateModule = __webpack_require__("69f3"); + + var getInternalState = InternalStateModule.get; + var enforceInternalState = InternalStateModule.enforce; + var TEMPLATE = String(String).split('String'); + + (module.exports = function (O, key, value, options) { + var unsafe = options ? !!options.unsafe : false; + var simple = options ? !!options.enumerable : false; + var noTargetGet = options ? !!options.noTargetGet : false; + if (typeof value == 'function') { + if (typeof key == 'string' && !has(value, 'name')) createNonEnumerableProperty(value, 'name', key); + enforceInternalState(value).source = TEMPLATE.join(typeof key == 'string' ? key : ''); + } + if (O === global) { + if (simple) O[key] = value; + else setGlobal(key, value); + return; + } else if (!unsafe) { + delete O[key]; + } else if (!noTargetGet && O[key]) { + simple = true; + } + if (simple) O[key] = value; + else createNonEnumerableProperty(O, key, value); + // add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative + })(Function.prototype, 'toString', function toString() { + return typeof this == 'function' && getInternalState(this).source || inspectSource(this); + }); + + + /***/ }), + + /***/ "6f53": + /***/ (function(module, exports, __webpack_require__) { + + var DESCRIPTORS = __webpack_require__("83ab"); + var objectKeys = __webpack_require__("df75"); + var toIndexedObject = __webpack_require__("fc6a"); + var propertyIsEnumerable = __webpack_require__("d1e7").f; + + // `Object.{ entries, values }` methods implementation + var createMethod = function (TO_ENTRIES) { + return function (it) { + var O = toIndexedObject(it); + var keys = objectKeys(O); + var length = keys.length; + var i = 0; + var result = []; + var key; + while (length > i) { + key = keys[i++]; + if (!DESCRIPTORS || propertyIsEnumerable.call(O, key)) { + result.push(TO_ENTRIES ? [key, O[key]] : O[key]); + } + } + return result; + }; + }; + + module.exports = { + // `Object.entries` method + // https://tc39.github.io/ecma262/#sec-object.entries + entries: createMethod(true), + // `Object.values` method + // https://tc39.github.io/ecma262/#sec-object.values + values: createMethod(false) + }; + + + /***/ }), + + /***/ "7156": + /***/ (function(module, exports, __webpack_require__) { + + var isObject = __webpack_require__("861d"); + var setPrototypeOf = __webpack_require__("d2bb"); + + // makes subclassing work correct for wrapped built-ins + module.exports = function ($this, dummy, Wrapper) { + var NewTarget, NewTargetPrototype; + if ( + // it can work only with native `setPrototypeOf` + setPrototypeOf && + // we haven't completely correct pre-ES6 way for getting `new.target`, so use this + typeof (NewTarget = dummy.constructor) == 'function' && + NewTarget !== Wrapper && + isObject(NewTargetPrototype = NewTarget.prototype) && + NewTargetPrototype !== Wrapper.prototype + ) setPrototypeOf($this, NewTargetPrototype); + return $this; + }; + + + /***/ }), + + /***/ "7418": + /***/ (function(module, exports) { + + exports.f = Object.getOwnPropertySymbols; + + + /***/ }), + + /***/ "746f": + /***/ (function(module, exports, __webpack_require__) { + + var path = __webpack_require__("428f"); + var has = __webpack_require__("5135"); + var wrappedWellKnownSymbolModule = __webpack_require__("e538"); + var defineProperty = __webpack_require__("9bf2").f; + + module.exports = function (NAME) { + var Symbol = path.Symbol || (path.Symbol = {}); + if (!has(Symbol, NAME)) defineProperty(Symbol, NAME, { + value: wrappedWellKnownSymbolModule.f(NAME) + }); + }; + + + /***/ }), + + /***/ "7839": + /***/ (function(module, exports) { + + // IE8- don't enum bug keys + module.exports = [ + 'constructor', + 'hasOwnProperty', + 'isPrototypeOf', + 'propertyIsEnumerable', + 'toLocaleString', + 'toString', + 'valueOf' + ]; + + + /***/ }), + + /***/ "7b0b": + /***/ (function(module, exports, __webpack_require__) { + + var requireObjectCoercible = __webpack_require__("1d80"); + + // `ToObject` abstract operation + // https://tc39.github.io/ecma262/#sec-toobject + module.exports = function (argument) { + return Object(requireObjectCoercible(argument)); + }; + + + /***/ }), + + /***/ "7c73": + /***/ (function(module, exports, __webpack_require__) { + + var anObject = __webpack_require__("825a"); + var defineProperties = __webpack_require__("37e8"); + var enumBugKeys = __webpack_require__("7839"); + var hiddenKeys = __webpack_require__("d012"); + var html = __webpack_require__("1be4"); + var documentCreateElement = __webpack_require__("cc12"); + var sharedKey = __webpack_require__("f772"); + + var GT = '>'; + var LT = '<'; + var PROTOTYPE = 'prototype'; + var SCRIPT = 'script'; + var IE_PROTO = sharedKey('IE_PROTO'); + + var EmptyConstructor = function () { /* empty */ }; + + var scriptTag = function (content) { + return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT; + }; + + // Create object with fake `null` prototype: use ActiveX Object with cleared prototype + var NullProtoObjectViaActiveX = function (activeXDocument) { + activeXDocument.write(scriptTag('')); + activeXDocument.close(); + var temp = activeXDocument.parentWindow.Object; + activeXDocument = null; // avoid memory leak + return temp; + }; + + // Create object with fake `null` prototype: use iframe Object with cleared prototype + var NullProtoObjectViaIFrame = function () { + // Thrash, waste and sodomy: IE GC bug + var iframe = documentCreateElement('iframe'); + var JS = 'java' + SCRIPT + ':'; + var iframeDocument; + iframe.style.display = 'none'; + html.appendChild(iframe); + // https://github.com/zloirock/core-js/issues/475 + iframe.src = String(JS); + iframeDocument = iframe.contentWindow.document; + iframeDocument.open(); + iframeDocument.write(scriptTag('document.F=Object')); + iframeDocument.close(); + return iframeDocument.F; + }; + + // Check for document.domain and active x support + // No need to use active x approach when document.domain is not set + // see https://github.com/es-shims/es5-shim/issues/150 + // variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346 + // avoid IE GC bug + var activeXDocument; + var NullProtoObject = function () { + try { + /* global ActiveXObject */ + activeXDocument = document.domain && new ActiveXObject('htmlfile'); + } catch (error) { /* ignore */ } + NullProtoObject = activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame(); + var length = enumBugKeys.length; + while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]]; + return NullProtoObject(); + }; + + hiddenKeys[IE_PROTO] = true; + + // `Object.create` method + // https://tc39.github.io/ecma262/#sec-object.create + module.exports = Object.create || function create(O, Properties) { + var result; + if (O !== null) { + EmptyConstructor[PROTOTYPE] = anObject(O); + result = new EmptyConstructor(); + EmptyConstructor[PROTOTYPE] = null; + // add "__proto__" for Object.getPrototypeOf polyfill + result[IE_PROTO] = O; + } else result = NullProtoObject(); + return Properties === undefined ? result : defineProperties(result, Properties); + }; + + + /***/ }), + + /***/ "7dd0": + /***/ (function(module, exports, __webpack_require__) { + + var $ = __webpack_require__("23e7"); + var createIteratorConstructor = __webpack_require__("9ed3"); + var getPrototypeOf = __webpack_require__("e163"); + var setPrototypeOf = __webpack_require__("d2bb"); + var setToStringTag = __webpack_require__("d44e"); + var createNonEnumerableProperty = __webpack_require__("9112"); + var redefine = __webpack_require__("6eeb"); + var wellKnownSymbol = __webpack_require__("b622"); + var IS_PURE = __webpack_require__("c430"); + var Iterators = __webpack_require__("3f8c"); + var IteratorsCore = __webpack_require__("ae93"); + + var IteratorPrototype = IteratorsCore.IteratorPrototype; + var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS; + var ITERATOR = wellKnownSymbol('iterator'); + var KEYS = 'keys'; + var VALUES = 'values'; + var ENTRIES = 'entries'; + + var returnThis = function () { return this; }; + + module.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) { + createIteratorConstructor(IteratorConstructor, NAME, next); + + var getIterationMethod = function (KIND) { + if (KIND === DEFAULT && defaultIterator) return defaultIterator; + if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND]; + switch (KIND) { + case KEYS: return function keys() { return new IteratorConstructor(this, KIND); }; + case VALUES: return function values() { return new IteratorConstructor(this, KIND); }; + case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); }; + } return function () { return new IteratorConstructor(this); }; + }; + + var TO_STRING_TAG = NAME + ' Iterator'; + var INCORRECT_VALUES_NAME = false; + var IterablePrototype = Iterable.prototype; + var nativeIterator = IterablePrototype[ITERATOR] + || IterablePrototype['@@iterator'] + || DEFAULT && IterablePrototype[DEFAULT]; + var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT); + var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator; + var CurrentIteratorPrototype, methods, KEY; + + // fix native + if (anyNativeIterator) { + CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable())); + if (IteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) { + if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) { + if (setPrototypeOf) { + setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype); + } else if (typeof CurrentIteratorPrototype[ITERATOR] != 'function') { + createNonEnumerableProperty(CurrentIteratorPrototype, ITERATOR, returnThis); + } + } + // Set @@toStringTag to native iterators + setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true); + if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis; + } + } + + // fix Array#{values, @@iterator}.name in V8 / FF + if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) { + INCORRECT_VALUES_NAME = true; + defaultIterator = function values() { return nativeIterator.call(this); }; + } + + // define iterator + if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) { + createNonEnumerableProperty(IterablePrototype, ITERATOR, defaultIterator); + } + Iterators[NAME] = defaultIterator; + + // export additional methods + if (DEFAULT) { + methods = { + values: getIterationMethod(VALUES), + keys: IS_SET ? defaultIterator : getIterationMethod(KEYS), + entries: getIterationMethod(ENTRIES) + }; + if (FORCED) for (KEY in methods) { + if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) { + redefine(IterablePrototype, KEY, methods[KEY]); + } + } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods); + } + + return methods; + }; + + + /***/ }), + + /***/ "7f9a": + /***/ (function(module, exports, __webpack_require__) { + + var global = __webpack_require__("da84"); + var inspectSource = __webpack_require__("8925"); + + var WeakMap = global.WeakMap; + + module.exports = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap)); + + + /***/ }), + + /***/ "825a": + /***/ (function(module, exports, __webpack_require__) { + + var isObject = __webpack_require__("861d"); + + module.exports = function (it) { + if (!isObject(it)) { + throw TypeError(String(it) + ' is not an object'); + } return it; + }; + + + /***/ }), + + /***/ "83ab": + /***/ (function(module, exports, __webpack_require__) { + + var fails = __webpack_require__("d039"); + + // Thank's IE8 for his funny defineProperty + module.exports = !fails(function () { + return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7; + }); + + + /***/ }), + + /***/ "8418": + /***/ (function(module, exports, __webpack_require__) { + + var toPrimitive = __webpack_require__("c04e"); + var definePropertyModule = __webpack_require__("9bf2"); + var createPropertyDescriptor = __webpack_require__("5c6c"); + + module.exports = function (object, key, value) { + var propertyKey = toPrimitive(key); + if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value)); + else object[propertyKey] = value; + }; + + + /***/ }), + + /***/ "861d": + /***/ (function(module, exports) { + + module.exports = function (it) { + return typeof it === 'object' ? it !== null : typeof it === 'function'; + }; + + + /***/ }), + + /***/ "88bc": + /***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(global) {/** + * lodash (Custom Build) <https://lodash.com/> + * Build: `lodash modularize exports="npm" -o ./` + * Copyright jQuery Foundation and other contributors <https://jquery.org/> + * Released under MIT license <https://lodash.com/license> + * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE> + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0, + MAX_SAFE_INTEGER = 9007199254740991; + + /** `Object#toString` result references. */ + var argsTag = '[object Arguments]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + symbolTag = '[object Symbol]'; + + /** Detect free variable `global` from Node.js. */ + var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + + /** Detect free variable `self`. */ + var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + + /** Used as a reference to the global object. */ + var root = freeGlobal || freeSelf || Function('return this')(); + + /** + * A faster alternative to `Function#apply`, this function invokes `func` + * with the `this` binding of `thisArg` and the arguments of `args`. + * + * @private + * @param {Function} func The function to invoke. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} args The arguments to invoke `func` with. + * @returns {*} Returns the result of `func`. + */ + function apply(func, thisArg, args) { + switch (args.length) { + case 0: return func.call(thisArg); + case 1: return func.call(thisArg, args[0]); + case 2: return func.call(thisArg, args[0], args[1]); + case 3: return func.call(thisArg, args[0], args[1], args[2]); + } + return func.apply(thisArg, args); + } + + /** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function arrayMap(array, iteratee) { + var index = -1, + length = array ? array.length : 0, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; + } + + /** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ + function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; + } + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var objectToString = objectProto.toString; + + /** Built-in value references. */ + var Symbol = root.Symbol, + propertyIsEnumerable = objectProto.propertyIsEnumerable, + spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeMax = Math.max; + + /** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ + function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + arrayPush(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; + } + + /** + * The base implementation of `_.pick` without support for individual + * property identifiers. + * + * @private + * @param {Object} object The source object. + * @param {string[]} props The property identifiers to pick. + * @returns {Object} Returns the new object. + */ + function basePick(object, props) { + object = Object(object); + return basePickBy(object, props, function(value, key) { + return key in object; + }); + } + + /** + * The base implementation of `_.pickBy` without support for iteratee shorthands. + * + * @private + * @param {Object} object The source object. + * @param {string[]} props The property identifiers to pick from. + * @param {Function} predicate The function invoked per property. + * @returns {Object} Returns the new object. + */ + function basePickBy(object, props, predicate) { + var index = -1, + length = props.length, + result = {}; + + while (++index < length) { + var key = props[index], + value = object[key]; + + if (predicate(value, key)) { + result[key] = value; + } + } + return result; + } + + /** + * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + */ + function baseRest(func, start) { + start = nativeMax(start === undefined ? (func.length - 1) : start, 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + array = Array(length); + + while (++index < length) { + array[index] = args[start + index]; + } + index = -1; + var otherArgs = Array(start + 1); + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = array; + return apply(func, this, otherArgs); + }; + } + + /** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ + function isFlattenable(value) { + return isArray(value) || isArguments(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); + } + + /** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ + function toKey(value) { + if (typeof value == 'string' || isSymbol(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; + } + + /** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ + function isArguments(value) { + // Safari 8.1 makes `arguments.callee` enumerable in strict mode. + return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') && + (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag); + } + + /** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ + var isArray = Array.isArray; + + /** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ + function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); + } + + /** + * This method is like `_.isArrayLike` except that it also checks if `value` + * is an object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array-like object, + * else `false`. + * @example + * + * _.isArrayLikeObject([1, 2, 3]); + * // => true + * + * _.isArrayLikeObject(document.body.children); + * // => true + * + * _.isArrayLikeObject('abc'); + * // => false + * + * _.isArrayLikeObject(_.noop); + * // => false + */ + function isArrayLikeObject(value) { + return isObjectLike(value) && isArrayLike(value); + } + + /** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ + function isFunction(value) { + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 8-9 which returns 'object' for typed array and other constructors. + var tag = isObject(value) ? objectToString.call(value) : ''; + return tag == funcTag || tag == genTag; + } + + /** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ + function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; + } + + /** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ + function isObject(value) { + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); + } + + /** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ + function isObjectLike(value) { + return !!value && typeof value == 'object'; + } + + /** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ + function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && objectToString.call(value) == symbolTag); + } + + /** + * Creates an object composed of the picked `object` properties. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [props] The property identifiers to pick. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ + var pick = baseRest(function(object, props) { + return object == null ? {} : basePick(object, arrayMap(baseFlatten(props, 1), toKey)); + }); + + module.exports = pick; + + /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__("c8ba"))); + + /***/ }), + + /***/ "890c": + /***/ (function(module, exports, __webpack_require__) { + + // extracted by mini-css-extract-plugin + + /***/ }), + + /***/ "8925": + /***/ (function(module, exports, __webpack_require__) { + + var store = __webpack_require__("c6cd"); + + var functionToString = Function.toString; + + // this helper broken in `3.4.1-3.4.4`, so we can't use `shared` helper + if (typeof store.inspectSource != 'function') { + store.inspectSource = function (it) { + return functionToString.call(it); + }; + } + + module.exports = store.inspectSource; + + + /***/ }), + + /***/ "8aa5": + /***/ (function(module, exports, __webpack_require__) { + + var charAt = __webpack_require__("6547").charAt; + + // `AdvanceStringIndex` abstract operation + // https://tc39.github.io/ecma262/#sec-advancestringindex + module.exports = function (S, index, unicode) { + return index + (unicode ? charAt(S, index).length : 1); + }; + + + /***/ }), + + /***/ "8e95": + /***/ (function(module, exports, __webpack_require__) { + + var MediaQueryDispatch = __webpack_require__("c195"); + module.exports = new MediaQueryDispatch(); + + + /***/ }), + + /***/ "9020": + /***/ (function(module, exports) { + + /** + * Delegate to handle a media query being matched and unmatched. + * + * @param {object} options + * @param {function} options.match callback for when the media query is matched + * @param {function} [options.unmatch] callback for when the media query is unmatched + * @param {function} [options.setup] one-time callback triggered the first time a query is matched + * @param {boolean} [options.deferSetup=false] should the setup callback be run immediately, rather than first time query is matched? + * @constructor + */ + function QueryHandler(options) { + this.options = options; + !options.deferSetup && this.setup(); + } + + QueryHandler.prototype = { + + constructor : QueryHandler, + + /** + * coordinates setup of the handler + * + * @function + */ + setup : function() { + if(this.options.setup) { + this.options.setup(); + } + this.initialised = true; + }, + + /** + * coordinates setup and triggering of the handler + * + * @function + */ + on : function() { + !this.initialised && this.setup(); + this.options.match && this.options.match(); + }, + + /** + * coordinates the unmatch event for the handler + * + * @function + */ + off : function() { + this.options.unmatch && this.options.unmatch(); + }, + + /** + * called when a handler is to be destroyed. + * delegates to the destroy or unmatch callbacks, depending on availability. + * + * @function + */ + destroy : function() { + this.options.destroy ? this.options.destroy() : this.off(); + }, + + /** + * determines equality by reference. + * if object is supplied compare options, if function, compare match callback + * + * @function + * @param {object || function} [target] the target for comparison + */ + equals : function(target) { + return this.options === target || this.options.match === target; + } + + }; + + module.exports = QueryHandler; + + + /***/ }), + + /***/ "90e3": + /***/ (function(module, exports) { + + var id = 0; + var postfix = Math.random(); + + module.exports = function (key) { + return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36); + }; + + + /***/ }), + + /***/ "9112": + /***/ (function(module, exports, __webpack_require__) { + + var DESCRIPTORS = __webpack_require__("83ab"); + var definePropertyModule = __webpack_require__("9bf2"); + var createPropertyDescriptor = __webpack_require__("5c6c"); + + module.exports = DESCRIPTORS ? function (object, key, value) { + return definePropertyModule.f(object, key, createPropertyDescriptor(1, value)); + } : function (object, key, value) { + object[key] = value; + return object; + }; + + + /***/ }), + + /***/ "9263": + /***/ (function(module, exports, __webpack_require__) { + + var regexpFlags = __webpack_require__("ad6d"); + var stickyHelpers = __webpack_require__("9f7f"); + + var nativeExec = RegExp.prototype.exec; + // This always refers to the native implementation, because the + // String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js, + // which loads this file before patching the method. + var nativeReplace = String.prototype.replace; + + var patchedExec = nativeExec; + + var UPDATES_LAST_INDEX_WRONG = (function () { + var re1 = /a/; + var re2 = /b*/g; + nativeExec.call(re1, 'a'); + nativeExec.call(re2, 'a'); + return re1.lastIndex !== 0 || re2.lastIndex !== 0; + })(); + + var UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y || stickyHelpers.BROKEN_CARET; + + // nonparticipating capturing group, copied from es5-shim's String#split patch. + var NPCG_INCLUDED = /()??/.exec('')[1] !== undefined; + + var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y; + + if (PATCH) { + patchedExec = function exec(str) { + var re = this; + var lastIndex, reCopy, match, i; + var sticky = UNSUPPORTED_Y && re.sticky; + var flags = regexpFlags.call(re); + var source = re.source; + var charsAdded = 0; + var strCopy = str; + + if (sticky) { + flags = flags.replace('y', ''); + if (flags.indexOf('g') === -1) { + flags += 'g'; + } + + strCopy = String(str).slice(re.lastIndex); + // Support anchored sticky behavior. + if (re.lastIndex > 0 && (!re.multiline || re.multiline && str[re.lastIndex - 1] !== '\n')) { + source = '(?: ' + source + ')'; + strCopy = ' ' + strCopy; + charsAdded++; + } + // ^(? + rx + ) is needed, in combination with some str slicing, to + // simulate the 'y' flag. + reCopy = new RegExp('^(?:' + source + ')', flags); + } + + if (NPCG_INCLUDED) { + reCopy = new RegExp('^' + source + '$(?!\\s)', flags); + } + if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex; + + match = nativeExec.call(sticky ? reCopy : re, strCopy); + + if (sticky) { + if (match) { + match.input = match.input.slice(charsAdded); + match[0] = match[0].slice(charsAdded); + match.index = re.lastIndex; + re.lastIndex += match[0].length; + } else re.lastIndex = 0; + } else if (UPDATES_LAST_INDEX_WRONG && match) { + re.lastIndex = re.global ? match.index + match[0].length : lastIndex; + } + if (NPCG_INCLUDED && match && match.length > 1) { + // Fix browsers whose `exec` methods don't consistently return `undefined` + // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/ + nativeReplace.call(match[0], reCopy, function () { + for (i = 1; i < arguments.length - 2; i++) { + if (arguments[i] === undefined) match[i] = undefined; + } + }); + } + + return match; + }; + } + + module.exports = patchedExec; + + + /***/ }), + + /***/ "94ca": + /***/ (function(module, exports, __webpack_require__) { + + var fails = __webpack_require__("d039"); + + var replacement = /#|\.prototype\./; + + var isForced = function (feature, detection) { + var value = data[normalize(feature)]; + return value == POLYFILL ? true + : value == NATIVE ? false + : typeof detection == 'function' ? fails(detection) + : !!detection; + }; + + var normalize = isForced.normalize = function (string) { + return String(string).replace(replacement, '.').toLowerCase(); + }; + + var data = isForced.data = {}; + var NATIVE = isForced.NATIVE = 'N'; + var POLYFILL = isForced.POLYFILL = 'P'; + + module.exports = isForced; + + + /***/ }), + + /***/ "99af": + /***/ (function(module, exports, __webpack_require__) { + + var $ = __webpack_require__("23e7"); + var fails = __webpack_require__("d039"); + var isArray = __webpack_require__("e8b5"); + var isObject = __webpack_require__("861d"); + var toObject = __webpack_require__("7b0b"); + var toLength = __webpack_require__("50c4"); + var createProperty = __webpack_require__("8418"); + var arraySpeciesCreate = __webpack_require__("65f0"); + var arrayMethodHasSpeciesSupport = __webpack_require__("1dde"); + var wellKnownSymbol = __webpack_require__("b622"); + var V8_VERSION = __webpack_require__("2d00"); + + var IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable'); + var MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF; + var MAXIMUM_ALLOWED_INDEX_EXCEEDED = 'Maximum allowed index exceeded'; + + // We can't use this feature detection in V8 since it causes + // deoptimization and serious performance degradation + // https://github.com/zloirock/core-js/issues/679 + var IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails(function () { + var array = []; + array[IS_CONCAT_SPREADABLE] = false; + return array.concat()[0] !== array; + }); + + var SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('concat'); + + var isConcatSpreadable = function (O) { + if (!isObject(O)) return false; + var spreadable = O[IS_CONCAT_SPREADABLE]; + return spreadable !== undefined ? !!spreadable : isArray(O); + }; + + var FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT; + + // `Array.prototype.concat` method + // https://tc39.github.io/ecma262/#sec-array.prototype.concat + // with adding support of @@isConcatSpreadable and @@species + $({ target: 'Array', proto: true, forced: FORCED }, { + concat: function concat(arg) { // eslint-disable-line no-unused-vars + var O = toObject(this); + var A = arraySpeciesCreate(O, 0); + var n = 0; + var i, k, length, len, E; + for (i = -1, length = arguments.length; i < length; i++) { + E = i === -1 ? O : arguments[i]; + if (isConcatSpreadable(E)) { + len = toLength(E.length); + if (n + len > MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED); + for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]); + } else { + if (n >= MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED); + createProperty(A, n++, E); + } + } + A.length = n; + return A; + } + }); + + + /***/ }), + + /***/ "9bdd": + /***/ (function(module, exports, __webpack_require__) { + + var anObject = __webpack_require__("825a"); + + // call something on iterator step with safe closing on error + module.exports = function (iterator, fn, value, ENTRIES) { + try { + return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value); + // 7.4.6 IteratorClose(iterator, completion) + } catch (error) { + var returnMethod = iterator['return']; + if (returnMethod !== undefined) anObject(returnMethod.call(iterator)); + throw error; + } + }; + + + /***/ }), + + /***/ "9bf2": + /***/ (function(module, exports, __webpack_require__) { + + var DESCRIPTORS = __webpack_require__("83ab"); + var IE8_DOM_DEFINE = __webpack_require__("0cfb"); + var anObject = __webpack_require__("825a"); + var toPrimitive = __webpack_require__("c04e"); + + var nativeDefineProperty = Object.defineProperty; + + // `Object.defineProperty` method + // https://tc39.github.io/ecma262/#sec-object.defineproperty + exports.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, Attributes) { + anObject(O); + P = toPrimitive(P, true); + anObject(Attributes); + if (IE8_DOM_DEFINE) try { + return nativeDefineProperty(O, P, Attributes); + } catch (error) { /* empty */ } + if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported'); + if ('value' in Attributes) O[P] = Attributes.value; + return O; + }; + + + /***/ }), + + /***/ "9ed3": + /***/ (function(module, exports, __webpack_require__) { + + var IteratorPrototype = __webpack_require__("ae93").IteratorPrototype; + var create = __webpack_require__("7c73"); + var createPropertyDescriptor = __webpack_require__("5c6c"); + var setToStringTag = __webpack_require__("d44e"); + var Iterators = __webpack_require__("3f8c"); + + var returnThis = function () { return this; }; + + module.exports = function (IteratorConstructor, NAME, next) { + var TO_STRING_TAG = NAME + ' Iterator'; + IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, next) }); + setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true); + Iterators[TO_STRING_TAG] = returnThis; + return IteratorConstructor; + }; + + + /***/ }), + + /***/ "9f7f": + /***/ (function(module, exports, __webpack_require__) { + + + var fails = __webpack_require__("d039"); + + // babel-minify transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError, + // so we use an intermediate function. + function RE(s, f) { + return RegExp(s, f); + } + + exports.UNSUPPORTED_Y = fails(function () { + // babel-minify transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError + var re = RE('a', 'y'); + re.lastIndex = 2; + return re.exec('abcd') != null; + }); + + exports.BROKEN_CARET = fails(function () { + // https://bugzilla.mozilla.org/show_bug.cgi?id=773687 + var re = RE('^r', 'gy'); + re.lastIndex = 2; + return re.exec('str') != null; + }); + + + /***/ }), + + /***/ "a15b": + /***/ (function(module, exports, __webpack_require__) { + + var $ = __webpack_require__("23e7"); + var IndexedObject = __webpack_require__("44ad"); + var toIndexedObject = __webpack_require__("fc6a"); + var arrayMethodIsStrict = __webpack_require__("a640"); + + var nativeJoin = [].join; + + var ES3_STRINGS = IndexedObject != Object; + var STRICT_METHOD = arrayMethodIsStrict('join', ','); + + // `Array.prototype.join` method + // https://tc39.github.io/ecma262/#sec-array.prototype.join + $({ target: 'Array', proto: true, forced: ES3_STRINGS || !STRICT_METHOD }, { + join: function join(separator) { + return nativeJoin.call(toIndexedObject(this), separator === undefined ? ',' : separator); + } + }); + + + /***/ }), + + /***/ "a48b": + /***/ (function(module, exports, __webpack_require__) { + + var camel2hyphen = __webpack_require__("0497"); + + var isDimension = function (feature) { + var re = /[height|width]$/; + return re.test(feature); + }; + + var obj2mq = function (obj) { + var mq = ''; + var features = Object.keys(obj); + features.forEach(function (feature, index) { + var value = obj[feature]; + feature = camel2hyphen(feature); + // Add px to dimension features + if (isDimension(feature) && typeof value === 'number') { + value = value + 'px'; + } + if (value === true) { + mq += feature; + } else if (value === false) { + mq += 'not ' + feature; + } else { + mq += '(' + feature + ': ' + value + ')'; + } + if (index < features.length-1) { + mq += ' and '; + } + }); + return mq; + }; + + var json2mq = function (query) { + var mq = ''; + if (typeof query === 'string') { + return query; + } + // Handling array of media queries + if (query instanceof Array) { + query.forEach(function (q, index) { + mq += obj2mq(q); + if (index < query.length-1) { + mq += ', '; + } + }); + return mq; + } + // Handling single media query + return obj2mq(query); + }; + + module.exports = json2mq; + + /***/ }), + + /***/ "a4d3": + /***/ (function(module, exports, __webpack_require__) { + + var $ = __webpack_require__("23e7"); + var global = __webpack_require__("da84"); + var getBuiltIn = __webpack_require__("d066"); + var IS_PURE = __webpack_require__("c430"); + var DESCRIPTORS = __webpack_require__("83ab"); + var NATIVE_SYMBOL = __webpack_require__("4930"); + var USE_SYMBOL_AS_UID = __webpack_require__("fdbf"); + var fails = __webpack_require__("d039"); + var has = __webpack_require__("5135"); + var isArray = __webpack_require__("e8b5"); + var isObject = __webpack_require__("861d"); + var anObject = __webpack_require__("825a"); + var toObject = __webpack_require__("7b0b"); + var toIndexedObject = __webpack_require__("fc6a"); + var toPrimitive = __webpack_require__("c04e"); + var createPropertyDescriptor = __webpack_require__("5c6c"); + var nativeObjectCreate = __webpack_require__("7c73"); + var objectKeys = __webpack_require__("df75"); + var getOwnPropertyNamesModule = __webpack_require__("241c"); + var getOwnPropertyNamesExternal = __webpack_require__("057f"); + var getOwnPropertySymbolsModule = __webpack_require__("7418"); + var getOwnPropertyDescriptorModule = __webpack_require__("06cf"); + var definePropertyModule = __webpack_require__("9bf2"); + var propertyIsEnumerableModule = __webpack_require__("d1e7"); + var createNonEnumerableProperty = __webpack_require__("9112"); + var redefine = __webpack_require__("6eeb"); + var shared = __webpack_require__("5692"); + var sharedKey = __webpack_require__("f772"); + var hiddenKeys = __webpack_require__("d012"); + var uid = __webpack_require__("90e3"); + var wellKnownSymbol = __webpack_require__("b622"); + var wrappedWellKnownSymbolModule = __webpack_require__("e538"); + var defineWellKnownSymbol = __webpack_require__("746f"); + var setToStringTag = __webpack_require__("d44e"); + var InternalStateModule = __webpack_require__("69f3"); + var $forEach = __webpack_require__("b727").forEach; + + var HIDDEN = sharedKey('hidden'); + var SYMBOL = 'Symbol'; + var PROTOTYPE = 'prototype'; + var TO_PRIMITIVE = wellKnownSymbol('toPrimitive'); + var setInternalState = InternalStateModule.set; + var getInternalState = InternalStateModule.getterFor(SYMBOL); + var ObjectPrototype = Object[PROTOTYPE]; + var $Symbol = global.Symbol; + var $stringify = getBuiltIn('JSON', 'stringify'); + var nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; + var nativeDefineProperty = definePropertyModule.f; + var nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f; + var nativePropertyIsEnumerable = propertyIsEnumerableModule.f; + var AllSymbols = shared('symbols'); + var ObjectPrototypeSymbols = shared('op-symbols'); + var StringToSymbolRegistry = shared('string-to-symbol-registry'); + var SymbolToStringRegistry = shared('symbol-to-string-registry'); + var WellKnownSymbolsStore = shared('wks'); + var QObject = global.QObject; + // Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173 + var USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild; + + // fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687 + var setSymbolDescriptor = DESCRIPTORS && fails(function () { + return nativeObjectCreate(nativeDefineProperty({}, 'a', { + get: function () { return nativeDefineProperty(this, 'a', { value: 7 }).a; } + })).a != 7; + }) ? function (O, P, Attributes) { + var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P); + if (ObjectPrototypeDescriptor) delete ObjectPrototype[P]; + nativeDefineProperty(O, P, Attributes); + if (ObjectPrototypeDescriptor && O !== ObjectPrototype) { + nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor); + } + } : nativeDefineProperty; + + var wrap = function (tag, description) { + var symbol = AllSymbols[tag] = nativeObjectCreate($Symbol[PROTOTYPE]); + setInternalState(symbol, { + type: SYMBOL, + tag: tag, + description: description + }); + if (!DESCRIPTORS) symbol.description = description; + return symbol; + }; + + var isSymbol = USE_SYMBOL_AS_UID ? function (it) { + return typeof it == 'symbol'; + } : function (it) { + return Object(it) instanceof $Symbol; + }; + + var $defineProperty = function defineProperty(O, P, Attributes) { + if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes); + anObject(O); + var key = toPrimitive(P, true); + anObject(Attributes); + if (has(AllSymbols, key)) { + if (!Attributes.enumerable) { + if (!has(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, {})); + O[HIDDEN][key] = true; + } else { + if (has(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false; + Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) }); + } return setSymbolDescriptor(O, key, Attributes); + } return nativeDefineProperty(O, key, Attributes); + }; + + var $defineProperties = function defineProperties(O, Properties) { + anObject(O); + var properties = toIndexedObject(Properties); + var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties)); + $forEach(keys, function (key) { + if (!DESCRIPTORS || $propertyIsEnumerable.call(properties, key)) $defineProperty(O, key, properties[key]); + }); + return O; + }; + + var $create = function create(O, Properties) { + return Properties === undefined ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties); + }; + + var $propertyIsEnumerable = function propertyIsEnumerable(V) { + var P = toPrimitive(V, true); + var enumerable = nativePropertyIsEnumerable.call(this, P); + if (this === ObjectPrototype && has(AllSymbols, P) && !has(ObjectPrototypeSymbols, P)) return false; + return enumerable || !has(this, P) || !has(AllSymbols, P) || has(this, HIDDEN) && this[HIDDEN][P] ? enumerable : true; + }; + + var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) { + var it = toIndexedObject(O); + var key = toPrimitive(P, true); + if (it === ObjectPrototype && has(AllSymbols, key) && !has(ObjectPrototypeSymbols, key)) return; + var descriptor = nativeGetOwnPropertyDescriptor(it, key); + if (descriptor && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) { + descriptor.enumerable = true; + } + return descriptor; + }; + + var $getOwnPropertyNames = function getOwnPropertyNames(O) { + var names = nativeGetOwnPropertyNames(toIndexedObject(O)); + var result = []; + $forEach(names, function (key) { + if (!has(AllSymbols, key) && !has(hiddenKeys, key)) result.push(key); + }); + return result; + }; + + var $getOwnPropertySymbols = function getOwnPropertySymbols(O) { + var IS_OBJECT_PROTOTYPE = O === ObjectPrototype; + var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O)); + var result = []; + $forEach(names, function (key) { + if (has(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || has(ObjectPrototype, key))) { + result.push(AllSymbols[key]); + } + }); + return result; + }; + + // `Symbol` constructor + // https://tc39.github.io/ecma262/#sec-symbol-constructor + if (!NATIVE_SYMBOL) { + $Symbol = function Symbol() { + if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor'); + var description = !arguments.length || arguments[0] === undefined ? undefined : String(arguments[0]); + var tag = uid(description); + var setter = function (value) { + if (this === ObjectPrototype) setter.call(ObjectPrototypeSymbols, value); + if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false; + setSymbolDescriptor(this, tag, createPropertyDescriptor(1, value)); + }; + if (DESCRIPTORS && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter }); + return wrap(tag, description); + }; + + redefine($Symbol[PROTOTYPE], 'toString', function toString() { + return getInternalState(this).tag; + }); + + redefine($Symbol, 'withoutSetter', function (description) { + return wrap(uid(description), description); + }); + + propertyIsEnumerableModule.f = $propertyIsEnumerable; + definePropertyModule.f = $defineProperty; + getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor; + getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames; + getOwnPropertySymbolsModule.f = $getOwnPropertySymbols; + + wrappedWellKnownSymbolModule.f = function (name) { + return wrap(wellKnownSymbol(name), name); + }; + + if (DESCRIPTORS) { + // https://github.com/tc39/proposal-Symbol-description + nativeDefineProperty($Symbol[PROTOTYPE], 'description', { + configurable: true, + get: function description() { + return getInternalState(this).description; + } + }); + if (!IS_PURE) { + redefine(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable, { unsafe: true }); + } + } + } + + $({ global: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, { + Symbol: $Symbol + }); + + $forEach(objectKeys(WellKnownSymbolsStore), function (name) { + defineWellKnownSymbol(name); + }); + + $({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, { + // `Symbol.for` method + // https://tc39.github.io/ecma262/#sec-symbol.for + 'for': function (key) { + var string = String(key); + if (has(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string]; + var symbol = $Symbol(string); + StringToSymbolRegistry[string] = symbol; + SymbolToStringRegistry[symbol] = string; + return symbol; + }, + // `Symbol.keyFor` method + // https://tc39.github.io/ecma262/#sec-symbol.keyfor + keyFor: function keyFor(sym) { + if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol'); + if (has(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym]; + }, + useSetter: function () { USE_SETTER = true; }, + useSimple: function () { USE_SETTER = false; } + }); + + $({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, { + // `Object.create` method + // https://tc39.github.io/ecma262/#sec-object.create + create: $create, + // `Object.defineProperty` method + // https://tc39.github.io/ecma262/#sec-object.defineproperty + defineProperty: $defineProperty, + // `Object.defineProperties` method + // https://tc39.github.io/ecma262/#sec-object.defineproperties + defineProperties: $defineProperties, + // `Object.getOwnPropertyDescriptor` method + // https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptors + getOwnPropertyDescriptor: $getOwnPropertyDescriptor + }); + + $({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL }, { + // `Object.getOwnPropertyNames` method + // https://tc39.github.io/ecma262/#sec-object.getownpropertynames + getOwnPropertyNames: $getOwnPropertyNames, + // `Object.getOwnPropertySymbols` method + // https://tc39.github.io/ecma262/#sec-object.getownpropertysymbols + getOwnPropertySymbols: $getOwnPropertySymbols + }); + + // Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives + // https://bugs.chromium.org/p/v8/issues/detail?id=3443 + $({ target: 'Object', stat: true, forced: fails(function () { getOwnPropertySymbolsModule.f(1); }) }, { + getOwnPropertySymbols: function getOwnPropertySymbols(it) { + return getOwnPropertySymbolsModule.f(toObject(it)); + } + }); + + // `JSON.stringify` method behavior with symbols + // https://tc39.github.io/ecma262/#sec-json.stringify + if ($stringify) { + var FORCED_JSON_STRINGIFY = !NATIVE_SYMBOL || fails(function () { + var symbol = $Symbol(); + // MS Edge converts symbol values to JSON as {} + return $stringify([symbol]) != '[null]' + // WebKit converts symbol values to JSON as null + || $stringify({ a: symbol }) != '{}' + // V8 throws on boxed symbols + || $stringify(Object(symbol)) != '{}'; + }); + + $({ target: 'JSON', stat: true, forced: FORCED_JSON_STRINGIFY }, { + // eslint-disable-next-line no-unused-vars + stringify: function stringify(it, replacer, space) { + var args = [it]; + var index = 1; + var $replacer; + while (arguments.length > index) args.push(arguments[index++]); + $replacer = replacer; + if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined + if (!isArray(replacer)) replacer = function (key, value) { + if (typeof $replacer == 'function') value = $replacer.call(this, key, value); + if (!isSymbol(value)) return value; + }; + args[1] = replacer; + return $stringify.apply(null, args); + } + }); + } + + // `Symbol.prototype[@@toPrimitive]` method + // https://tc39.github.io/ecma262/#sec-symbol.prototype-@@toprimitive + if (!$Symbol[PROTOTYPE][TO_PRIMITIVE]) { + createNonEnumerableProperty($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf); + } + // `Symbol.prototype[@@toStringTag]` property + // https://tc39.github.io/ecma262/#sec-symbol.prototype-@@tostringtag + setToStringTag($Symbol, SYMBOL); + + hiddenKeys[HIDDEN] = true; + + + /***/ }), + + /***/ "a623": + /***/ (function(module, exports, __webpack_require__) { + + var $ = __webpack_require__("23e7"); + var $every = __webpack_require__("b727").every; + var arrayMethodIsStrict = __webpack_require__("a640"); + var arrayMethodUsesToLength = __webpack_require__("ae40"); + + var STRICT_METHOD = arrayMethodIsStrict('every'); + var USES_TO_LENGTH = arrayMethodUsesToLength('every'); + + // `Array.prototype.every` method + // https://tc39.github.io/ecma262/#sec-array.prototype.every + $({ target: 'Array', proto: true, forced: !STRICT_METHOD || !USES_TO_LENGTH }, { + every: function every(callbackfn /* , thisArg */) { + return $every(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } + }); + + + /***/ }), + + /***/ "a630": + /***/ (function(module, exports, __webpack_require__) { + + var $ = __webpack_require__("23e7"); + var from = __webpack_require__("4df4"); + var checkCorrectnessOfIteration = __webpack_require__("1c7e"); + + var INCORRECT_ITERATION = !checkCorrectnessOfIteration(function (iterable) { + Array.from(iterable); + }); + + // `Array.from` method + // https://tc39.github.io/ecma262/#sec-array.from + $({ target: 'Array', stat: true, forced: INCORRECT_ITERATION }, { + from: from + }); + + + /***/ }), + + /***/ "a640": + /***/ (function(module, exports, __webpack_require__) { + + var fails = __webpack_require__("d039"); + + module.exports = function (METHOD_NAME, argument) { + var method = [][METHOD_NAME]; + return !!method && fails(function () { + // eslint-disable-next-line no-useless-call,no-throw-literal + method.call(null, argument || function () { throw 1; }, 1); + }); + }; + + + /***/ }), + + /***/ "a691": + /***/ (function(module, exports) { + + var ceil = Math.ceil; + var floor = Math.floor; + + // `ToInteger` abstract operation + // https://tc39.github.io/ecma262/#sec-tointeger + module.exports = function (argument) { + return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument); + }; + + + /***/ }), + + /***/ "a9e3": + /***/ (function(module, exports, __webpack_require__) { + + var DESCRIPTORS = __webpack_require__("83ab"); + var global = __webpack_require__("da84"); + var isForced = __webpack_require__("94ca"); + var redefine = __webpack_require__("6eeb"); + var has = __webpack_require__("5135"); + var classof = __webpack_require__("c6b6"); + var inheritIfRequired = __webpack_require__("7156"); + var toPrimitive = __webpack_require__("c04e"); + var fails = __webpack_require__("d039"); + var create = __webpack_require__("7c73"); + var getOwnPropertyNames = __webpack_require__("241c").f; + var getOwnPropertyDescriptor = __webpack_require__("06cf").f; + var defineProperty = __webpack_require__("9bf2").f; + var trim = __webpack_require__("58a8").trim; + + var NUMBER = 'Number'; + var NativeNumber = global[NUMBER]; + var NumberPrototype = NativeNumber.prototype; + + // Opera ~12 has broken Object#toString + var BROKEN_CLASSOF = classof(create(NumberPrototype)) == NUMBER; + + // `ToNumber` abstract operation + // https://tc39.github.io/ecma262/#sec-tonumber + var toNumber = function (argument) { + var it = toPrimitive(argument, false); + var first, third, radix, maxCode, digits, length, index, code; + if (typeof it == 'string' && it.length > 2) { + it = trim(it); + first = it.charCodeAt(0); + if (first === 43 || first === 45) { + third = it.charCodeAt(2); + if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix + } else if (first === 48) { + switch (it.charCodeAt(1)) { + case 66: case 98: radix = 2; maxCode = 49; break; // fast equal of /^0b[01]+$/i + case 79: case 111: radix = 8; maxCode = 55; break; // fast equal of /^0o[0-7]+$/i + default: return +it; + } + digits = it.slice(2); + length = digits.length; + for (index = 0; index < length; index++) { + code = digits.charCodeAt(index); + // parseInt parses a string to a first unavailable symbol + // but ToNumber should return NaN if a string contains unavailable symbols + if (code < 48 || code > maxCode) return NaN; + } return parseInt(digits, radix); + } + } return +it; + }; + + // `Number` constructor + // https://tc39.github.io/ecma262/#sec-number-constructor + if (isForced(NUMBER, !NativeNumber(' 0o1') || !NativeNumber('0b1') || NativeNumber('+0x1'))) { + var NumberWrapper = function Number(value) { + var it = arguments.length < 1 ? 0 : value; + var dummy = this; + return dummy instanceof NumberWrapper + // check on 1..constructor(foo) case + && (BROKEN_CLASSOF ? fails(function () { NumberPrototype.valueOf.call(dummy); }) : classof(dummy) != NUMBER) + ? inheritIfRequired(new NativeNumber(toNumber(it)), dummy, NumberWrapper) : toNumber(it); + }; + for (var keys = DESCRIPTORS ? getOwnPropertyNames(NativeNumber) : ( + // ES3: + 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' + + // ES2015 (in case, if modules with ES2015 Number statics required before): + 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' + + 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger' + ).split(','), j = 0, key; keys.length > j; j++) { + if (has(NativeNumber, key = keys[j]) && !has(NumberWrapper, key)) { + defineProperty(NumberWrapper, key, getOwnPropertyDescriptor(NativeNumber, key)); + } + } + NumberWrapper.prototype = NumberPrototype; + NumberPrototype.constructor = NumberWrapper; + redefine(global, NUMBER, NumberWrapper); + } + + + /***/ }), + + /***/ "ac1f": + /***/ (function(module, exports, __webpack_require__) { + + var $ = __webpack_require__("23e7"); + var exec = __webpack_require__("9263"); + + $({ target: 'RegExp', proto: true, forced: /./.exec !== exec }, { + exec: exec + }); + + + /***/ }), + + /***/ "ad6d": + /***/ (function(module, exports, __webpack_require__) { + + var anObject = __webpack_require__("825a"); + + // `RegExp.prototype.flags` getter implementation + // https://tc39.github.io/ecma262/#sec-get-regexp.prototype.flags + module.exports = function () { + var that = anObject(this); + var result = ''; + if (that.global) result += 'g'; + if (that.ignoreCase) result += 'i'; + if (that.multiline) result += 'm'; + if (that.dotAll) result += 's'; + if (that.unicode) result += 'u'; + if (that.sticky) result += 'y'; + return result; + }; + + + /***/ }), + + /***/ "ae40": + /***/ (function(module, exports, __webpack_require__) { + + var DESCRIPTORS = __webpack_require__("83ab"); + var fails = __webpack_require__("d039"); + var has = __webpack_require__("5135"); + + var defineProperty = Object.defineProperty; + var cache = {}; + + var thrower = function (it) { throw it; }; + + module.exports = function (METHOD_NAME, options) { + if (has(cache, METHOD_NAME)) return cache[METHOD_NAME]; + if (!options) options = {}; + var method = [][METHOD_NAME]; + var ACCESSORS = has(options, 'ACCESSORS') ? options.ACCESSORS : false; + var argument0 = has(options, 0) ? options[0] : thrower; + var argument1 = has(options, 1) ? options[1] : undefined; + + return cache[METHOD_NAME] = !!method && !fails(function () { + if (ACCESSORS && !DESCRIPTORS) return true; + var O = { length: -1 }; + + if (ACCESSORS) defineProperty(O, 1, { enumerable: true, get: thrower }); + else O[1] = 1; + + method.call(O, argument0, argument1); + }); + }; + + + /***/ }), + + /***/ "ae93": + /***/ (function(module, exports, __webpack_require__) { + + var getPrototypeOf = __webpack_require__("e163"); + var createNonEnumerableProperty = __webpack_require__("9112"); + var has = __webpack_require__("5135"); + var wellKnownSymbol = __webpack_require__("b622"); + var IS_PURE = __webpack_require__("c430"); + + var ITERATOR = wellKnownSymbol('iterator'); + var BUGGY_SAFARI_ITERATORS = false; + + var returnThis = function () { return this; }; + + // `%IteratorPrototype%` object + // https://tc39.github.io/ecma262/#sec-%iteratorprototype%-object + var IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator; + + if ([].keys) { + arrayIterator = [].keys(); + // Safari 8 has buggy iterators w/o `next` + if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true; + else { + PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator)); + if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype; + } + } + + if (IteratorPrototype == undefined) IteratorPrototype = {}; + + // 25.1.2.1.1 %IteratorPrototype%[@@iterator]() + if (!IS_PURE && !has(IteratorPrototype, ITERATOR)) { + createNonEnumerableProperty(IteratorPrototype, ITERATOR, returnThis); + } + + module.exports = { + IteratorPrototype: IteratorPrototype, + BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS + }; + + + /***/ }), + + /***/ "b041": + /***/ (function(module, exports, __webpack_require__) { + + var TO_STRING_TAG_SUPPORT = __webpack_require__("00ee"); + var classof = __webpack_require__("f5df"); + + // `Object.prototype.toString` method implementation + // https://tc39.github.io/ecma262/#sec-object.prototype.tostring + module.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() { + return '[object ' + classof(this) + ']'; + }; + + + /***/ }), + + /***/ "b0c0": + /***/ (function(module, exports, __webpack_require__) { + + var DESCRIPTORS = __webpack_require__("83ab"); + var defineProperty = __webpack_require__("9bf2").f; + + var FunctionPrototype = Function.prototype; + var FunctionPrototypeToString = FunctionPrototype.toString; + var nameRE = /^\s*function ([^ (]*)/; + var NAME = 'name'; + + // Function instances `.name` property + // https://tc39.github.io/ecma262/#sec-function-instances-name + if (DESCRIPTORS && !(NAME in FunctionPrototype)) { + defineProperty(FunctionPrototype, NAME, { + configurable: true, + get: function () { + try { + return FunctionPrototypeToString.call(this).match(nameRE)[1]; + } catch (error) { + return ''; + } + } + }); + } + + + /***/ }), + + /***/ "b622": + /***/ (function(module, exports, __webpack_require__) { + + var global = __webpack_require__("da84"); + var shared = __webpack_require__("5692"); + var has = __webpack_require__("5135"); + var uid = __webpack_require__("90e3"); + var NATIVE_SYMBOL = __webpack_require__("4930"); + var USE_SYMBOL_AS_UID = __webpack_require__("fdbf"); + + var WellKnownSymbolsStore = shared('wks'); + var Symbol = global.Symbol; + var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid; + + module.exports = function (name) { + if (!has(WellKnownSymbolsStore, name)) { + if (NATIVE_SYMBOL && has(Symbol, name)) WellKnownSymbolsStore[name] = Symbol[name]; + else WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name); + } return WellKnownSymbolsStore[name]; + }; + + + /***/ }), + + /***/ "b64b": + /***/ (function(module, exports, __webpack_require__) { + + var $ = __webpack_require__("23e7"); + var toObject = __webpack_require__("7b0b"); + var nativeKeys = __webpack_require__("df75"); + var fails = __webpack_require__("d039"); + + var FAILS_ON_PRIMITIVES = fails(function () { nativeKeys(1); }); + + // `Object.keys` method + // https://tc39.github.io/ecma262/#sec-object.keys + $({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, { + keys: function keys(it) { + return nativeKeys(toObject(it)); + } + }); + + + /***/ }), + + /***/ "b727": + /***/ (function(module, exports, __webpack_require__) { + + var bind = __webpack_require__("0366"); + var IndexedObject = __webpack_require__("44ad"); + var toObject = __webpack_require__("7b0b"); + var toLength = __webpack_require__("50c4"); + var arraySpeciesCreate = __webpack_require__("65f0"); + + var push = [].push; + + // `Array.prototype.{ forEach, map, filter, some, every, find, findIndex }` methods implementation + var createMethod = function (TYPE) { + var IS_MAP = TYPE == 1; + var IS_FILTER = TYPE == 2; + var IS_SOME = TYPE == 3; + var IS_EVERY = TYPE == 4; + var IS_FIND_INDEX = TYPE == 6; + var NO_HOLES = TYPE == 5 || IS_FIND_INDEX; + return function ($this, callbackfn, that, specificCreate) { + var O = toObject($this); + var self = IndexedObject(O); + var boundFunction = bind(callbackfn, that, 3); + var length = toLength(self.length); + var index = 0; + var create = specificCreate || arraySpeciesCreate; + var target = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined; + var value, result; + for (;length > index; index++) if (NO_HOLES || index in self) { + value = self[index]; + result = boundFunction(value, index, O); + if (TYPE) { + if (IS_MAP) target[index] = result; // map + else if (result) switch (TYPE) { + case 3: return true; // some + case 5: return value; // find + case 6: return index; // findIndex + case 2: push.call(target, value); // filter + } else if (IS_EVERY) return false; // every + } + } + return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target; + }; + }; + + module.exports = { + // `Array.prototype.forEach` method + // https://tc39.github.io/ecma262/#sec-array.prototype.foreach + forEach: createMethod(0), + // `Array.prototype.map` method + // https://tc39.github.io/ecma262/#sec-array.prototype.map + map: createMethod(1), + // `Array.prototype.filter` method + // https://tc39.github.io/ecma262/#sec-array.prototype.filter + filter: createMethod(2), + // `Array.prototype.some` method + // https://tc39.github.io/ecma262/#sec-array.prototype.some + some: createMethod(3), + // `Array.prototype.every` method + // https://tc39.github.io/ecma262/#sec-array.prototype.every + every: createMethod(4), + // `Array.prototype.find` method + // https://tc39.github.io/ecma262/#sec-array.prototype.find + find: createMethod(5), + // `Array.prototype.findIndex` method + // https://tc39.github.io/ecma262/#sec-array.prototype.findIndex + findIndex: createMethod(6) + }; + + + /***/ }), + + /***/ "bcf7": + /***/ (function(module, exports, __webpack_require__) { + + var QueryHandler = __webpack_require__("9020"); + var each = __webpack_require__("217d").each; + + /** + * Represents a single media query, manages it's state and registered handlers for this query + * + * @constructor + * @param {string} query the media query string + * @param {boolean} [isUnconditional=false] whether the media query should run regardless of whether the conditions are met. Primarily for helping older browsers deal with mobile-first design + */ + function MediaQuery(query, isUnconditional) { + this.query = query; + this.isUnconditional = isUnconditional; + this.handlers = []; + this.mql = window.matchMedia(query); + + var self = this; + this.listener = function(mql) { + // Chrome passes an MediaQueryListEvent object, while other browsers pass MediaQueryList directly + self.mql = mql.currentTarget || mql; + self.assess(); + }; + this.mql.addListener(this.listener); + } + + MediaQuery.prototype = { + + constuctor : MediaQuery, + + /** + * add a handler for this query, triggering if already active + * + * @param {object} handler + * @param {function} handler.match callback for when query is activated + * @param {function} [handler.unmatch] callback for when query is deactivated + * @param {function} [handler.setup] callback for immediate execution when a query handler is registered + * @param {boolean} [handler.deferSetup=false] should the setup callback be deferred until the first time the handler is matched? + */ + addHandler : function(handler) { + var qh = new QueryHandler(handler); + this.handlers.push(qh); + + this.matches() && qh.on(); + }, + + /** + * removes the given handler from the collection, and calls it's destroy methods + * + * @param {object || function} handler the handler to remove + */ + removeHandler : function(handler) { + var handlers = this.handlers; + each(handlers, function(h, i) { + if(h.equals(handler)) { + h.destroy(); + return !handlers.splice(i,1); //remove from array and exit each early + } + }); + }, + + /** + * Determine whether the media query should be considered a match + * + * @return {Boolean} true if media query can be considered a match, false otherwise + */ + matches : function() { + return this.mql.matches || this.isUnconditional; + }, + + /** + * Clears all handlers and unbinds events + */ + clear : function() { + each(this.handlers, function(handler) { + handler.destroy(); + }); + this.mql.removeListener(this.listener); + this.handlers.length = 0; //clear array + }, + + /* + * Assesses the query, turning on all handlers if it matches, turning them off if it doesn't match + */ + assess : function() { + var action = this.matches() ? 'on' : 'off'; + + each(this.handlers, function(handler) { + handler[action](); + }); + } + }; + + module.exports = MediaQuery; + + + /***/ }), + + /***/ "c04e": + /***/ (function(module, exports, __webpack_require__) { + + var isObject = __webpack_require__("861d"); + + // `ToPrimitive` abstract operation + // https://tc39.github.io/ecma262/#sec-toprimitive + // instead of the ES6 spec version, we didn't implement @@toPrimitive case + // and the second argument - flag - preferred type is a string + module.exports = function (input, PREFERRED_STRING) { + if (!isObject(input)) return input; + var fn, val; + if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val; + if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) return val; + if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val; + throw TypeError("Can't convert object to primitive value"); + }; + + + /***/ }), + + /***/ "c195": + /***/ (function(module, exports, __webpack_require__) { + + var MediaQuery = __webpack_require__("bcf7"); + var Util = __webpack_require__("217d"); + var each = Util.each; + var isFunction = Util.isFunction; + var isArray = Util.isArray; + + /** + * Allows for registration of query handlers. + * Manages the query handler's state and is responsible for wiring up browser events + * + * @constructor + */ + function MediaQueryDispatch () { + if(!window.matchMedia) { + throw new Error('matchMedia not present, legacy browsers require a polyfill'); + } + + this.queries = {}; + this.browserIsIncapable = !window.matchMedia('only all').matches; + } + + MediaQueryDispatch.prototype = { + + constructor : MediaQueryDispatch, + + /** + * Registers a handler for the given media query + * + * @param {string} q the media query + * @param {object || Array || Function} options either a single query handler object, a function, or an array of query handlers + * @param {function} options.match fired when query matched + * @param {function} [options.unmatch] fired when a query is no longer matched + * @param {function} [options.setup] fired when handler first triggered + * @param {boolean} [options.deferSetup=false] whether setup should be run immediately or deferred until query is first matched + * @param {boolean} [shouldDegrade=false] whether this particular media query should always run on incapable browsers + */ + register : function(q, options, shouldDegrade) { + var queries = this.queries, + isUnconditional = shouldDegrade && this.browserIsIncapable; + + if(!queries[q]) { + queries[q] = new MediaQuery(q, isUnconditional); + } + + //normalise to object in an array + if(isFunction(options)) { + options = { match : options }; + } + if(!isArray(options)) { + options = [options]; + } + each(options, function(handler) { + if (isFunction(handler)) { + handler = { match : handler }; + } + queries[q].addHandler(handler); + }); + + return this; + }, + + /** + * unregisters a query and all it's handlers, or a specific handler for a query + * + * @param {string} q the media query to target + * @param {object || function} [handler] specific handler to unregister + */ + unregister : function(q, handler) { + var query = this.queries[q]; + + if(query) { + if(handler) { + query.removeHandler(handler); + } + else { + query.clear(); + delete this.queries[q]; + } + } + + return this; + } + }; + + module.exports = MediaQueryDispatch; + + + /***/ }), + + /***/ "c430": + /***/ (function(module, exports) { + + module.exports = false; + + + /***/ }), + + /***/ "c6b6": + /***/ (function(module, exports) { + + var toString = {}.toString; + + module.exports = function (it) { + return toString.call(it).slice(8, -1); + }; + + + /***/ }), + + /***/ "c6cd": + /***/ (function(module, exports, __webpack_require__) { + + var global = __webpack_require__("da84"); + var setGlobal = __webpack_require__("ce4e"); + + var SHARED = '__core-js_shared__'; + var store = global[SHARED] || setGlobal(SHARED, {}); + + module.exports = store; + + + /***/ }), + + /***/ "c832": + /***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(global) {/** + * lodash (Custom Build) <https://lodash.com/> + * Build: `lodash modularize exports="npm" -o ./` + * Copyright jQuery Foundation and other contributors <https://jquery.org/> + * Released under MIT license <https://lodash.com/license> + * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE> + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ + + /** Used as the `TypeError` message for "Functions" methods. */ + var FUNC_ERROR_TEXT = 'Expected a function'; + + /** Used to stand-in for `undefined` hash values. */ + var HASH_UNDEFINED = '__lodash_hash_undefined__'; + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0; + + /** `Object#toString` result references. */ + var funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + symbolTag = '[object Symbol]'; + + /** Used to match property names within property paths. */ + var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/, + reLeadingDot = /^\./, + rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + + /** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ + var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + + /** Used to match backslashes in property paths. */ + var reEscapeChar = /\\(\\)?/g; + + /** Used to detect host constructors (Safari). */ + var reIsHostCtor = /^\[object .+?Constructor\]$/; + + /** Detect free variable `global` from Node.js. */ + var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + + /** Detect free variable `self`. */ + var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + + /** Used as a reference to the global object. */ + var root = freeGlobal || freeSelf || Function('return this')(); + + /** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ + function getValue(object, key) { + return object == null ? undefined : object[key]; + } + + /** + * Checks if `value` is a host object in IE < 9. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a host object, else `false`. + */ + function isHostObject(value) { + // Many host objects are `Object` objects that can coerce to strings + // despite having improperly defined `toString` methods. + var result = false; + if (value != null && typeof value.toString != 'function') { + try { + result = !!(value + ''); + } catch (e) {} + } + return result; + } + + /** Used for built-in method references. */ + var arrayProto = Array.prototype, + funcProto = Function.prototype, + objectProto = Object.prototype; + + /** Used to detect overreaching core-js shims. */ + var coreJsData = root['__core-js_shared__']; + + /** Used to detect methods masquerading as native. */ + var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; + }()); + + /** Used to resolve the decompiled source of functions. */ + var funcToString = funcProto.toString; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var objectToString = objectProto.toString; + + /** Used to detect if a method is native. */ + var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' + ); + + /** Built-in value references. */ + var Symbol = root.Symbol, + splice = arrayProto.splice; + + /* Built-in method references that are verified to be native. */ + var Map = getNative(root, 'Map'), + nativeCreate = getNative(Object, 'create'); + + /** Used to convert symbols to primitives and strings. */ + var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + + /** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function Hash(entries) { + var index = -1, + length = entries ? entries.length : 0; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + /** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ + function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; + } + + /** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function hashDelete(key) { + return this.has(key) && delete this.__data__[key]; + } + + /** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function hashGet(key) { + var data = this.__data__; + if (nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return hasOwnProperty.call(data, key) ? data[key] : undefined; + } + + /** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function hashHas(key) { + var data = this.__data__; + return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key); + } + + /** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ + function hashSet(key, value) { + var data = this.__data__; + data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; + return this; + } + + // Add methods to `Hash`. + Hash.prototype.clear = hashClear; + Hash.prototype['delete'] = hashDelete; + Hash.prototype.get = hashGet; + Hash.prototype.has = hashHas; + Hash.prototype.set = hashSet; + + /** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function ListCache(entries) { + var index = -1, + length = entries ? entries.length : 0; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + /** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ + function listCacheClear() { + this.__data__ = []; + } + + /** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function listCacheDelete(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + return true; + } + + /** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function listCacheGet(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + return index < 0 ? undefined : data[index][1]; + } + + /** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; + } + + /** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ + function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; + } + + // Add methods to `ListCache`. + ListCache.prototype.clear = listCacheClear; + ListCache.prototype['delete'] = listCacheDelete; + ListCache.prototype.get = listCacheGet; + ListCache.prototype.has = listCacheHas; + ListCache.prototype.set = listCacheSet; + + /** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function MapCache(entries) { + var index = -1, + length = entries ? entries.length : 0; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + /** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ + function mapCacheClear() { + this.__data__ = { + 'hash': new Hash, + 'map': new (Map || ListCache), + 'string': new Hash + }; + } + + /** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function mapCacheDelete(key) { + return getMapData(this, key)['delete'](key); + } + + /** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function mapCacheGet(key) { + return getMapData(this, key).get(key); + } + + /** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function mapCacheHas(key) { + return getMapData(this, key).has(key); + } + + /** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ + function mapCacheSet(key, value) { + getMapData(this, key).set(key, value); + return this; + } + + // Add methods to `MapCache`. + MapCache.prototype.clear = mapCacheClear; + MapCache.prototype['delete'] = mapCacheDelete; + MapCache.prototype.get = mapCacheGet; + MapCache.prototype.has = mapCacheHas; + MapCache.prototype.set = mapCacheSet; + + /** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; + } + + /** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ + function baseGet(object, path) { + path = isKey(path, object) ? [path] : castPath(path); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[toKey(path[index++])]; + } + return (index && index == length) ? object : undefined; + } + + /** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ + function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); + } + + /** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ + function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; + } + + /** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @returns {Array} Returns the cast property path array. + */ + function castPath(value) { + return isArray(value) ? value : stringToPath(value); + } + + /** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ + function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; + } + + /** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ + function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; + } + + /** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ + function isKey(value, object) { + if (isArray(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || isSymbol(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); + } + + /** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ + function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); + } + + /** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ + function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); + } + + /** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ + var stringToPath = memoize(function(string) { + string = toString(string); + + var result = []; + if (reLeadingDot.test(string)) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, string) { + result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; + }); + + /** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ + function toKey(value) { + if (typeof value == 'string' || isSymbol(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; + } + + /** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to process. + * @returns {string} Returns the source code. + */ + function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; + } + + /** + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided, it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is used as the map cache key. The `func` + * is invoked with the `this` binding of the memoized function. + * + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the + * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) + * method interface of `delete`, `get`, `has`, and `set`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoized function. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * var other = { 'c': 3, 'd': 4 }; + * + * var values = _.memoize(_.values); + * values(object); + * // => [1, 2] + * + * values(other); + * // => [3, 4] + * + * object.a = 2; + * values(object); + * // => [1, 2] + * + * // Modify the result cache. + * values.cache.set(object, ['a', 'b']); + * values(object); + * // => ['a', 'b'] + * + * // Replace `_.memoize.Cache`. + * _.memoize.Cache = WeakMap; + */ + function memoize(func, resolver) { + if (typeof func != 'function' || (resolver && typeof resolver != 'function')) { + throw new TypeError(FUNC_ERROR_TEXT); + } + var memoized = function() { + var args = arguments, + key = resolver ? resolver.apply(this, args) : args[0], + cache = memoized.cache; + + if (cache.has(key)) { + return cache.get(key); + } + var result = func.apply(this, args); + memoized.cache = cache.set(key, result); + return result; + }; + memoized.cache = new (memoize.Cache || MapCache); + return memoized; + } + + // Assign cache to `_.memoize`. + memoize.Cache = MapCache; + + /** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ + function eq(value, other) { + return value === other || (value !== value && other !== other); + } + + /** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ + var isArray = Array.isArray; + + /** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ + function isFunction(value) { + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 8-9 which returns 'object' for typed array and other constructors. + var tag = isObject(value) ? objectToString.call(value) : ''; + return tag == funcTag || tag == genTag; + } + + /** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ + function isObject(value) { + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); + } + + /** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ + function isObjectLike(value) { + return !!value && typeof value == 'object'; + } + + /** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ + function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && objectToString.call(value) == symbolTag); + } + + /** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {string} Returns the string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ + function toString(value) { + return value == null ? '' : baseToString(value); + } + + /** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ + function get(object, path, defaultValue) { + var result = object == null ? undefined : baseGet(object, path); + return result === undefined ? defaultValue : result; + } + + module.exports = get; + + /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__("c8ba"))); + + /***/ }), + + /***/ "c8ba": + /***/ (function(module, exports) { + + var g; + + // This works in non-strict mode + g = (function() { + return this; + })(); + + try { + // This works if eval is allowed (see CSP) + g = g || new Function("return this")(); + } catch (e) { + // This works if the window reference is available + if (typeof window === "object") g = window; + } + + // g can still be undefined, but nothing to do about it... + // We return undefined, instead of nothing here, so it's + // easier to handle this case. if(!global) { ...} + + module.exports = g; + + + /***/ }), + + /***/ "c975": + /***/ (function(module, exports, __webpack_require__) { + + var $ = __webpack_require__("23e7"); + var $indexOf = __webpack_require__("4d64").indexOf; + var arrayMethodIsStrict = __webpack_require__("a640"); + var arrayMethodUsesToLength = __webpack_require__("ae40"); + + var nativeIndexOf = [].indexOf; + + var NEGATIVE_ZERO = !!nativeIndexOf && 1 / [1].indexOf(1, -0) < 0; + var STRICT_METHOD = arrayMethodIsStrict('indexOf'); + var USES_TO_LENGTH = arrayMethodUsesToLength('indexOf', { ACCESSORS: true, 1: 0 }); + + // `Array.prototype.indexOf` method + // https://tc39.github.io/ecma262/#sec-array.prototype.indexof + $({ target: 'Array', proto: true, forced: NEGATIVE_ZERO || !STRICT_METHOD || !USES_TO_LENGTH }, { + indexOf: function indexOf(searchElement /* , fromIndex = 0 */) { + return NEGATIVE_ZERO + // convert -0 to +0 + ? nativeIndexOf.apply(this, arguments) || 0 + : $indexOf(this, searchElement, arguments.length > 1 ? arguments[1] : undefined); + } + }); + + + /***/ }), + + /***/ "ca84": + /***/ (function(module, exports, __webpack_require__) { + + var has = __webpack_require__("5135"); + var toIndexedObject = __webpack_require__("fc6a"); + var indexOf = __webpack_require__("4d64").indexOf; + var hiddenKeys = __webpack_require__("d012"); + + module.exports = function (object, names) { + var O = toIndexedObject(object); + var i = 0; + var result = []; + var key; + for (key in O) !has(hiddenKeys, key) && has(O, key) && result.push(key); + // Don't enum bug & hidden keys + while (names.length > i) if (has(O, key = names[i++])) { + ~indexOf(result, key) || result.push(key); + } + return result; + }; + + + /***/ }), + + /***/ "cc12": + /***/ (function(module, exports, __webpack_require__) { + + var global = __webpack_require__("da84"); + var isObject = __webpack_require__("861d"); + + var document = global.document; + // typeof document.createElement is 'object' in old IE + var EXISTS = isObject(document) && isObject(document.createElement); + + module.exports = function (it) { + return EXISTS ? document.createElement(it) : {}; + }; + + + /***/ }), + + /***/ "cca6": + /***/ (function(module, exports, __webpack_require__) { + + var $ = __webpack_require__("23e7"); + var assign = __webpack_require__("60da"); + + // `Object.assign` method + // https://tc39.github.io/ecma262/#sec-object.assign + $({ target: 'Object', stat: true, forced: Object.assign !== assign }, { + assign: assign + }); + + + /***/ }), + + /***/ "ce4e": + /***/ (function(module, exports, __webpack_require__) { + + var global = __webpack_require__("da84"); + var createNonEnumerableProperty = __webpack_require__("9112"); + + module.exports = function (key, value) { + try { + createNonEnumerableProperty(global, key, value); + } catch (error) { + global[key] = value; + } return value; + }; + + + /***/ }), + + /***/ "d012": + /***/ (function(module, exports) { + + module.exports = {}; + + + /***/ }), + + /***/ "d039": + /***/ (function(module, exports) { + + module.exports = function (exec) { + try { + return !!exec(); + } catch (error) { + return true; + } + }; + + + /***/ }), + + /***/ "d066": + /***/ (function(module, exports, __webpack_require__) { + + var path = __webpack_require__("428f"); + var global = __webpack_require__("da84"); + + var aFunction = function (variable) { + return typeof variable == 'function' ? variable : undefined; + }; + + module.exports = function (namespace, method) { + return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global[namespace]) + : path[namespace] && path[namespace][method] || global[namespace] && global[namespace][method]; + }; + + + /***/ }), + + /***/ "d1e7": + /***/ (function(module, exports, __webpack_require__) { + + var nativePropertyIsEnumerable = {}.propertyIsEnumerable; + var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + + // Nashorn ~ JDK8 bug + var NASHORN_BUG = getOwnPropertyDescriptor && !nativePropertyIsEnumerable.call({ 1: 2 }, 1); + + // `Object.prototype.propertyIsEnumerable` method implementation + // https://tc39.github.io/ecma262/#sec-object.prototype.propertyisenumerable + exports.f = NASHORN_BUG ? function propertyIsEnumerable(V) { + var descriptor = getOwnPropertyDescriptor(this, V); + return !!descriptor && descriptor.enumerable; + } : nativePropertyIsEnumerable; + + + /***/ }), + + /***/ "d28b": + /***/ (function(module, exports, __webpack_require__) { + + var defineWellKnownSymbol = __webpack_require__("746f"); + + // `Symbol.iterator` well-known symbol + // https://tc39.github.io/ecma262/#sec-symbol.iterator + defineWellKnownSymbol('iterator'); + + + /***/ }), + + /***/ "d2bb": + /***/ (function(module, exports, __webpack_require__) { + + var anObject = __webpack_require__("825a"); + var aPossiblePrototype = __webpack_require__("3bbe"); + + // `Object.setPrototypeOf` method + // https://tc39.github.io/ecma262/#sec-object.setprototypeof + // Works with __proto__ only. Old v8 can't work with null proto objects. + /* eslint-disable no-proto */ + module.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () { + var CORRECT_SETTER = false; + var test = {}; + var setter; + try { + setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set; + setter.call(test, []); + CORRECT_SETTER = test instanceof Array; + } catch (error) { /* empty */ } + return function setPrototypeOf(O, proto) { + anObject(O); + aPossiblePrototype(proto); + if (CORRECT_SETTER) setter.call(O, proto); + else O.__proto__ = proto; + return O; + }; + }() : undefined); + + + /***/ }), + + /***/ "d3b7": + /***/ (function(module, exports, __webpack_require__) { + + var TO_STRING_TAG_SUPPORT = __webpack_require__("00ee"); + var redefine = __webpack_require__("6eeb"); + var toString = __webpack_require__("b041"); + + // `Object.prototype.toString` method + // https://tc39.github.io/ecma262/#sec-object.prototype.tostring + if (!TO_STRING_TAG_SUPPORT) { + redefine(Object.prototype, 'toString', toString, { unsafe: true }); + } + + + /***/ }), + + /***/ "d44e": + /***/ (function(module, exports, __webpack_require__) { + + var defineProperty = __webpack_require__("9bf2").f; + var has = __webpack_require__("5135"); + var wellKnownSymbol = __webpack_require__("b622"); + + var TO_STRING_TAG = wellKnownSymbol('toStringTag'); + + module.exports = function (it, TAG, STATIC) { + if (it && !has(it = STATIC ? it : it.prototype, TO_STRING_TAG)) { + defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG }); + } + }; + + + /***/ }), + + /***/ "d58f": + /***/ (function(module, exports, __webpack_require__) { + + var aFunction = __webpack_require__("1c0b"); + var toObject = __webpack_require__("7b0b"); + var IndexedObject = __webpack_require__("44ad"); + var toLength = __webpack_require__("50c4"); + + // `Array.prototype.{ reduce, reduceRight }` methods implementation + var createMethod = function (IS_RIGHT) { + return function (that, callbackfn, argumentsLength, memo) { + aFunction(callbackfn); + var O = toObject(that); + var self = IndexedObject(O); + var length = toLength(O.length); + var index = IS_RIGHT ? length - 1 : 0; + var i = IS_RIGHT ? -1 : 1; + if (argumentsLength < 2) while (true) { + if (index in self) { + memo = self[index]; + index += i; + break; + } + index += i; + if (IS_RIGHT ? index < 0 : length <= index) { + throw TypeError('Reduce of empty array with no initial value'); + } + } + for (;IS_RIGHT ? index >= 0 : length > index; index += i) if (index in self) { + memo = callbackfn(memo, self[index], index, O); + } + return memo; + }; + }; + + module.exports = { + // `Array.prototype.reduce` method + // https://tc39.github.io/ecma262/#sec-array.prototype.reduce + left: createMethod(false), + // `Array.prototype.reduceRight` method + // https://tc39.github.io/ecma262/#sec-array.prototype.reduceright + right: createMethod(true) + }; + + + /***/ }), + + /***/ "d784": + /***/ (function(module, exports, __webpack_require__) { + + // TODO: Remove from `core-js@4` since it's moved to entry points + __webpack_require__("ac1f"); + var redefine = __webpack_require__("6eeb"); + var fails = __webpack_require__("d039"); + var wellKnownSymbol = __webpack_require__("b622"); + var regexpExec = __webpack_require__("9263"); + var createNonEnumerableProperty = __webpack_require__("9112"); + + var SPECIES = wellKnownSymbol('species'); + + var REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () { + // #replace needs built-in support for named groups. + // #match works fine because it just return the exec results, even if it has + // a "grops" property. + var re = /./; + re.exec = function () { + var result = []; + result.groups = { a: '7' }; + return result; + }; + return ''.replace(re, '$<a>') !== '7'; + }); + + // IE <= 11 replaces $0 with the whole match, as if it was $& + // https://stackoverflow.com/questions/6024666/getting-ie-to-replace-a-regex-with-the-literal-string-0 + var REPLACE_KEEPS_$0 = (function () { + return 'a'.replace(/./, '$0') === '$0'; + })(); + + var REPLACE = wellKnownSymbol('replace'); + // Safari <= 13.0.3(?) substitutes nth capture where n>m with an empty string + var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = (function () { + if (/./[REPLACE]) { + return /./[REPLACE]('a', '$0') === ''; + } + return false; + })(); + + // Chrome 51 has a buggy "split" implementation when RegExp#exec !== nativeExec + // Weex JS has frozen built-in prototypes, so use try / catch wrapper + var SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails(function () { + var re = /(?:)/; + var originalExec = re.exec; + re.exec = function () { return originalExec.apply(this, arguments); }; + var result = 'ab'.split(re); + return result.length !== 2 || result[0] !== 'a' || result[1] !== 'b'; + }); + + module.exports = function (KEY, length, exec, sham) { + var SYMBOL = wellKnownSymbol(KEY); + + var DELEGATES_TO_SYMBOL = !fails(function () { + // String methods call symbol-named RegEp methods + var O = {}; + O[SYMBOL] = function () { return 7; }; + return ''[KEY](O) != 7; + }); + + var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function () { + // Symbol-named RegExp methods call .exec + var execCalled = false; + var re = /a/; + + if (KEY === 'split') { + // We can't use real regex here since it causes deoptimization + // and serious performance degradation in V8 + // https://github.com/zloirock/core-js/issues/306 + re = {}; + // RegExp[@@split] doesn't call the regex's exec method, but first creates + // a new one. We need to return the patched regex when creating the new one. + re.constructor = {}; + re.constructor[SPECIES] = function () { return re; }; + re.flags = ''; + re[SYMBOL] = /./[SYMBOL]; + } + + re.exec = function () { execCalled = true; return null; }; + + re[SYMBOL](''); + return !execCalled; + }); + + if ( + !DELEGATES_TO_SYMBOL || + !DELEGATES_TO_EXEC || + (KEY === 'replace' && !( + REPLACE_SUPPORTS_NAMED_GROUPS && + REPLACE_KEEPS_$0 && + !REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE + )) || + (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC) + ) { + var nativeRegExpMethod = /./[SYMBOL]; + var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) { + if (regexp.exec === regexpExec) { + if (DELEGATES_TO_SYMBOL && !forceStringMethod) { + // The native String method already delegates to @@method (this + // polyfilled function), leasing to infinite recursion. + // We avoid it by directly calling the native @@method method. + return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) }; + } + return { done: true, value: nativeMethod.call(str, regexp, arg2) }; + } + return { done: false }; + }, { + REPLACE_KEEPS_$0: REPLACE_KEEPS_$0, + REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE: REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE + }); + var stringMethod = methods[0]; + var regexMethod = methods[1]; + + redefine(String.prototype, KEY, stringMethod); + redefine(RegExp.prototype, SYMBOL, length == 2 + // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue) + // 21.2.5.11 RegExp.prototype[@@split](string, limit) + ? function (string, arg) { return regexMethod.call(string, this, arg); } + // 21.2.5.6 RegExp.prototype[@@match](string) + // 21.2.5.9 RegExp.prototype[@@search](string) + : function (string) { return regexMethod.call(string, this); } + ); + } + + if (sham) createNonEnumerableProperty(RegExp.prototype[SYMBOL], 'sham', true); + }; + + + /***/ }), + + /***/ "d81d": + /***/ (function(module, exports, __webpack_require__) { + + var $ = __webpack_require__("23e7"); + var $map = __webpack_require__("b727").map; + var arrayMethodHasSpeciesSupport = __webpack_require__("1dde"); + var arrayMethodUsesToLength = __webpack_require__("ae40"); + + var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('map'); + // FF49- issue + var USES_TO_LENGTH = arrayMethodUsesToLength('map'); + + // `Array.prototype.map` method + // https://tc39.github.io/ecma262/#sec-array.prototype.map + // with adding support of @@species + $({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH }, { + map: function map(callbackfn /* , thisArg */) { + return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } + }); + + + /***/ }), + + /***/ "da84": + /***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(global) {var check = function (it) { + return it && it.Math == Math && it; + }; + + // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 + module.exports = + // eslint-disable-next-line no-undef + check(typeof globalThis == 'object' && globalThis) || + check(typeof window == 'object' && window) || + check(typeof self == 'object' && self) || + check(typeof global == 'object' && global) || + // eslint-disable-next-line no-new-func + Function('return this')(); + + /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__("c8ba"))); + + /***/ }), + + /***/ "dbb4": + /***/ (function(module, exports, __webpack_require__) { + + var $ = __webpack_require__("23e7"); + var DESCRIPTORS = __webpack_require__("83ab"); + var ownKeys = __webpack_require__("56ef"); + var toIndexedObject = __webpack_require__("fc6a"); + var getOwnPropertyDescriptorModule = __webpack_require__("06cf"); + var createProperty = __webpack_require__("8418"); + + // `Object.getOwnPropertyDescriptors` method + // https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptors + $({ target: 'Object', stat: true, sham: !DESCRIPTORS }, { + getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) { + var O = toIndexedObject(object); + var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; + var keys = ownKeys(O); + var result = {}; + var index = 0; + var key, descriptor; + while (keys.length > index) { + descriptor = getOwnPropertyDescriptor(O, key = keys[index++]); + if (descriptor !== undefined) createProperty(result, key, descriptor); + } + return result; + } + }); + + + /***/ }), + + /***/ "ddb0": + /***/ (function(module, exports, __webpack_require__) { + + var global = __webpack_require__("da84"); + var DOMIterables = __webpack_require__("fdbc"); + var ArrayIteratorMethods = __webpack_require__("e260"); + var createNonEnumerableProperty = __webpack_require__("9112"); + var wellKnownSymbol = __webpack_require__("b622"); + + var ITERATOR = wellKnownSymbol('iterator'); + var TO_STRING_TAG = wellKnownSymbol('toStringTag'); + var ArrayValues = ArrayIteratorMethods.values; + + for (var COLLECTION_NAME in DOMIterables) { + var Collection = global[COLLECTION_NAME]; + var CollectionPrototype = Collection && Collection.prototype; + if (CollectionPrototype) { + // some Chrome versions have non-configurable methods on DOMTokenList + if (CollectionPrototype[ITERATOR] !== ArrayValues) try { + createNonEnumerableProperty(CollectionPrototype, ITERATOR, ArrayValues); + } catch (error) { + CollectionPrototype[ITERATOR] = ArrayValues; + } + if (!CollectionPrototype[TO_STRING_TAG]) { + createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME); + } + if (DOMIterables[COLLECTION_NAME]) for (var METHOD_NAME in ArrayIteratorMethods) { + // some Chrome versions have non-configurable methods on DOMTokenList + if (CollectionPrototype[METHOD_NAME] !== ArrayIteratorMethods[METHOD_NAME]) try { + createNonEnumerableProperty(CollectionPrototype, METHOD_NAME, ArrayIteratorMethods[METHOD_NAME]); + } catch (error) { + CollectionPrototype[METHOD_NAME] = ArrayIteratorMethods[METHOD_NAME]; + } + } + } + } + + + /***/ }), + + /***/ "df75": + /***/ (function(module, exports, __webpack_require__) { + + var internalObjectKeys = __webpack_require__("ca84"); + var enumBugKeys = __webpack_require__("7839"); + + // `Object.keys` method + // https://tc39.github.io/ecma262/#sec-object.keys + module.exports = Object.keys || function keys(O) { + return internalObjectKeys(O, enumBugKeys); + }; + + + /***/ }), + + /***/ "e01a": + /***/ (function(module, exports, __webpack_require__) { + // `Symbol.prototype.description` getter + // https://tc39.github.io/ecma262/#sec-symbol.prototype.description + + var $ = __webpack_require__("23e7"); + var DESCRIPTORS = __webpack_require__("83ab"); + var global = __webpack_require__("da84"); + var has = __webpack_require__("5135"); + var isObject = __webpack_require__("861d"); + var defineProperty = __webpack_require__("9bf2").f; + var copyConstructorProperties = __webpack_require__("e893"); + + var NativeSymbol = global.Symbol; + + if (DESCRIPTORS && typeof NativeSymbol == 'function' && (!('description' in NativeSymbol.prototype) || + // Safari 12 bug + NativeSymbol().description !== undefined + )) { + var EmptyStringDescriptionStore = {}; + // wrap Symbol constructor for correct work with undefined description + var SymbolWrapper = function Symbol() { + var description = arguments.length < 1 || arguments[0] === undefined ? undefined : String(arguments[0]); + var result = this instanceof SymbolWrapper + ? new NativeSymbol(description) + // in Edge 13, String(Symbol(undefined)) === 'Symbol(undefined)' + : description === undefined ? NativeSymbol() : NativeSymbol(description); + if (description === '') EmptyStringDescriptionStore[result] = true; + return result; + }; + copyConstructorProperties(SymbolWrapper, NativeSymbol); + var symbolPrototype = SymbolWrapper.prototype = NativeSymbol.prototype; + symbolPrototype.constructor = SymbolWrapper; + + var symbolToString = symbolPrototype.toString; + var native = String(NativeSymbol('test')) == 'Symbol(test)'; + var regexp = /^Symbol\((.*)\)[^)]+$/; + defineProperty(symbolPrototype, 'description', { + configurable: true, + get: function description() { + var symbol = isObject(this) ? this.valueOf() : this; + var string = symbolToString.call(symbol); + if (has(EmptyStringDescriptionStore, symbol)) return ''; + var desc = native ? string.slice(7, -1) : string.replace(regexp, '$1'); + return desc === '' ? undefined : desc; + } + }); + + $({ global: true, forced: true }, { + Symbol: SymbolWrapper + }); + } + + + /***/ }), + + /***/ "e163": + /***/ (function(module, exports, __webpack_require__) { + + var has = __webpack_require__("5135"); + var toObject = __webpack_require__("7b0b"); + var sharedKey = __webpack_require__("f772"); + var CORRECT_PROTOTYPE_GETTER = __webpack_require__("e177"); + + var IE_PROTO = sharedKey('IE_PROTO'); + var ObjectPrototype = Object.prototype; + + // `Object.getPrototypeOf` method + // https://tc39.github.io/ecma262/#sec-object.getprototypeof + module.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) { + O = toObject(O); + if (has(O, IE_PROTO)) return O[IE_PROTO]; + if (typeof O.constructor == 'function' && O instanceof O.constructor) { + return O.constructor.prototype; + } return O instanceof Object ? ObjectPrototype : null; + }; + + + /***/ }), + + /***/ "e177": + /***/ (function(module, exports, __webpack_require__) { + + var fails = __webpack_require__("d039"); + + module.exports = !fails(function () { + function F() { /* empty */ } + F.prototype.constructor = null; + return Object.getPrototypeOf(new F()) !== F.prototype; + }); + + + /***/ }), + + /***/ "e260": + /***/ (function(module, exports, __webpack_require__) { + + var toIndexedObject = __webpack_require__("fc6a"); + var addToUnscopables = __webpack_require__("44d2"); + var Iterators = __webpack_require__("3f8c"); + var InternalStateModule = __webpack_require__("69f3"); + var defineIterator = __webpack_require__("7dd0"); + + var ARRAY_ITERATOR = 'Array Iterator'; + var setInternalState = InternalStateModule.set; + var getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR); + + // `Array.prototype.entries` method + // https://tc39.github.io/ecma262/#sec-array.prototype.entries + // `Array.prototype.keys` method + // https://tc39.github.io/ecma262/#sec-array.prototype.keys + // `Array.prototype.values` method + // https://tc39.github.io/ecma262/#sec-array.prototype.values + // `Array.prototype[@@iterator]` method + // https://tc39.github.io/ecma262/#sec-array.prototype-@@iterator + // `CreateArrayIterator` internal method + // https://tc39.github.io/ecma262/#sec-createarrayiterator + module.exports = defineIterator(Array, 'Array', function (iterated, kind) { + setInternalState(this, { + type: ARRAY_ITERATOR, + target: toIndexedObject(iterated), // target + index: 0, // next index + kind: kind // kind + }); + // `%ArrayIteratorPrototype%.next` method + // https://tc39.github.io/ecma262/#sec-%arrayiteratorprototype%.next + }, function () { + var state = getInternalState(this); + var target = state.target; + var kind = state.kind; + var index = state.index++; + if (!target || index >= target.length) { + state.target = undefined; + return { value: undefined, done: true }; + } + if (kind == 'keys') return { value: index, done: false }; + if (kind == 'values') return { value: target[index], done: false }; + return { value: [index, target[index]], done: false }; + }, 'values'); + + // argumentsList[@@iterator] is %ArrayProto_values% + // https://tc39.github.io/ecma262/#sec-createunmappedargumentsobject + // https://tc39.github.io/ecma262/#sec-createmappedargumentsobject + Iterators.Arguments = Iterators.Array; + + // https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables + addToUnscopables('keys'); + addToUnscopables('values'); + addToUnscopables('entries'); + + + /***/ }), + + /***/ "e439": + /***/ (function(module, exports, __webpack_require__) { + + var $ = __webpack_require__("23e7"); + var fails = __webpack_require__("d039"); + var toIndexedObject = __webpack_require__("fc6a"); + var nativeGetOwnPropertyDescriptor = __webpack_require__("06cf").f; + var DESCRIPTORS = __webpack_require__("83ab"); + + var FAILS_ON_PRIMITIVES = fails(function () { nativeGetOwnPropertyDescriptor(1); }); + var FORCED = !DESCRIPTORS || FAILS_ON_PRIMITIVES; + + // `Object.getOwnPropertyDescriptor` method + // https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor + $({ target: 'Object', stat: true, forced: FORCED, sham: !DESCRIPTORS }, { + getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) { + return nativeGetOwnPropertyDescriptor(toIndexedObject(it), key); + } + }); + + + /***/ }), + + /***/ "e538": + /***/ (function(module, exports, __webpack_require__) { + + var wellKnownSymbol = __webpack_require__("b622"); + + exports.f = wellKnownSymbol; + + + /***/ }), + + /***/ "e893": + /***/ (function(module, exports, __webpack_require__) { + + var has = __webpack_require__("5135"); + var ownKeys = __webpack_require__("56ef"); + var getOwnPropertyDescriptorModule = __webpack_require__("06cf"); + var definePropertyModule = __webpack_require__("9bf2"); + + module.exports = function (target, source) { + var keys = ownKeys(source); + var defineProperty = definePropertyModule.f; + var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + if (!has(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key)); + } + }; + + + /***/ }), + + /***/ "e8b5": + /***/ (function(module, exports, __webpack_require__) { + + var classof = __webpack_require__("c6b6"); + + // `IsArray` abstract operation + // https://tc39.github.io/ecma262/#sec-isarray + module.exports = Array.isArray || function isArray(arg) { + return classof(arg) == 'Array'; + }; + + + /***/ }), + + /***/ "e95a": + /***/ (function(module, exports, __webpack_require__) { + + var wellKnownSymbol = __webpack_require__("b622"); + var Iterators = __webpack_require__("3f8c"); + + var ITERATOR = wellKnownSymbol('iterator'); + var ArrayPrototype = Array.prototype; + + // check on default Array iterator + module.exports = function (it) { + return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it); + }; + + + /***/ }), + + /***/ "eaf9": + /***/ (function(module, __webpack_exports__, __webpack_require__) { + /* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_vuetify_loader_lib_loader_js_ref_19_0_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_InnerSlider_vue_vue_type_style_index_0_id_3d1a4f76_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("3b81"); + /* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_vuetify_loader_lib_loader_js_ref_19_0_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_InnerSlider_vue_vue_type_style_index_0_id_3d1a4f76_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_vuetify_loader_lib_loader_js_ref_19_0_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_InnerSlider_vue_vue_type_style_index_0_id_3d1a4f76_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__); + /* unused harmony reexport * */ + /* unused harmony default export */ var _unused_webpack_default_export = (_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_vuetify_loader_lib_loader_js_ref_19_0_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_InnerSlider_vue_vue_type_style_index_0_id_3d1a4f76_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default.a); + + /***/ }), + + /***/ "f013": + /***/ (function(module, __webpack_exports__, __webpack_require__) { + /* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_vuetify_loader_lib_loader_js_ref_19_0_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_SliderArrow_vue_vue_type_style_index_0_id_21137603_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("fdb2"); + /* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_vuetify_loader_lib_loader_js_ref_19_0_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_SliderArrow_vue_vue_type_style_index_0_id_21137603_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_vuetify_loader_lib_loader_js_ref_19_0_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_SliderArrow_vue_vue_type_style_index_0_id_21137603_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__); + /* unused harmony reexport * */ + /* unused harmony default export */ var _unused_webpack_default_export = (_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_vuetify_loader_lib_loader_js_ref_19_0_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_SliderArrow_vue_vue_type_style_index_0_id_21137603_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default.a); + + /***/ }), + + /***/ "f5df": + /***/ (function(module, exports, __webpack_require__) { + + var TO_STRING_TAG_SUPPORT = __webpack_require__("00ee"); + var classofRaw = __webpack_require__("c6b6"); + var wellKnownSymbol = __webpack_require__("b622"); + + var TO_STRING_TAG = wellKnownSymbol('toStringTag'); + // ES3 wrong here + var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments'; + + // fallback for IE11 Script Access Denied error + var tryGet = function (it, key) { + try { + return it[key]; + } catch (error) { /* empty */ } + }; + + // getting tag from ES6+ `Object.prototype.toString` + module.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) { + var O, tag, result; + return it === undefined ? 'Undefined' : it === null ? 'Null' + // @@toStringTag case + : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag + // builtinTag case + : CORRECT_ARGUMENTS ? classofRaw(O) + // ES3 arguments fallback + : (result = classofRaw(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : result; + }; + + + /***/ }), + + /***/ "f6fd": + /***/ (function(module, exports) { + + // document.currentScript polyfill by Adam Miller + + // MIT license + + (function(document){ + var currentScript = "currentScript", + scripts = document.getElementsByTagName('script'); // Live NodeList collection + + // If browser needs currentScript polyfill, add get currentScript() to the document object + if (!(currentScript in document)) { + Object.defineProperty(document, currentScript, { + get: function(){ + + // IE 6-10 supports script readyState + // IE 10+ support stack trace + try { throw new Error(); } + catch (err) { + + // Find the second match for the "at" string to get file src url from stack. + // Specifically works with the format of stack traces in IE. + var i, res = ((/.*at [^\(]*\((.*):.+:.+\)$/ig).exec(err.stack) || [false])[1]; + + // For all scripts on the page, if src matches or if ready state is interactive, return the script tag + for(i in scripts){ + if(scripts[i].src == res || scripts[i].readyState == "interactive"){ + return scripts[i]; + } + } + + // If no match, return null + return null; + } + } + }); + } + })(document); + + + /***/ }), + + /***/ "f772": + /***/ (function(module, exports, __webpack_require__) { + + var shared = __webpack_require__("5692"); + var uid = __webpack_require__("90e3"); + + var keys = shared('keys'); + + module.exports = function (key) { + return keys[key] || (keys[key] = uid(key)); + }; + + + /***/ }), + + /***/ "f7fe": + /***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(global) {/** + * lodash (Custom Build) <https://lodash.com/> + * Build: `lodash modularize exports="npm" -o ./` + * Copyright jQuery Foundation and other contributors <https://jquery.org/> + * Released under MIT license <https://lodash.com/license> + * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE> + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ + + /** Used as the `TypeError` message for "Functions" methods. */ + var FUNC_ERROR_TEXT = 'Expected a function'; + + /** Used as references for various `Number` constants. */ + var NAN = 0 / 0; + + /** `Object#toString` result references. */ + var symbolTag = '[object Symbol]'; + + /** Used to match leading and trailing whitespace. */ + var reTrim = /^\s+|\s+$/g; + + /** Used to detect bad signed hexadecimal string values. */ + var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + + /** Used to detect binary string values. */ + var reIsBinary = /^0b[01]+$/i; + + /** Used to detect octal string values. */ + var reIsOctal = /^0o[0-7]+$/i; + + /** Built-in method references without a dependency on `root`. */ + var freeParseInt = parseInt; + + /** Detect free variable `global` from Node.js. */ + var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + + /** Detect free variable `self`. */ + var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + + /** Used as a reference to the global object. */ + var root = freeGlobal || freeSelf || Function('return this')(); + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var objectToString = objectProto.toString; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeMax = Math.max, + nativeMin = Math.min; + + /** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ + var now = function() { + return root.Date.now(); + }; + + /** + * Creates a debounced function that delays invoking `func` until after `wait` + * milliseconds have elapsed since the last time the debounced function was + * invoked. The debounced function comes with a `cancel` method to cancel + * delayed `func` invocations and a `flush` method to immediately invoke them. + * Provide `options` to indicate whether `func` should be invoked on the + * leading and/or trailing edge of the `wait` timeout. The `func` is invoked + * with the last arguments provided to the debounced function. Subsequent + * calls to the debounced function return the result of the last `func` + * invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is + * invoked on the trailing edge of the timeout only if the debounced function + * is invoked more than once during the `wait` timeout. + * + * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred + * until to the next tick, similar to `setTimeout` with a timeout of `0`. + * + * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) + * for details over the differences between `_.debounce` and `_.throttle`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to debounce. + * @param {number} [wait=0] The number of milliseconds to delay. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.leading=false] + * Specify invoking on the leading edge of the timeout. + * @param {number} [options.maxWait] + * The maximum time `func` is allowed to be delayed before it's invoked. + * @param {boolean} [options.trailing=true] + * Specify invoking on the trailing edge of the timeout. + * @returns {Function} Returns the new debounced function. + * @example + * + * // Avoid costly calculations while the window size is in flux. + * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); + * + * // Invoke `sendMail` when clicked, debouncing subsequent calls. + * jQuery(element).on('click', _.debounce(sendMail, 300, { + * 'leading': true, + * 'trailing': false + * })); + * + * // Ensure `batchLog` is invoked once after 1 second of debounced calls. + * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); + * var source = new EventSource('/stream'); + * jQuery(source).on('message', debounced); + * + * // Cancel the trailing debounced invocation. + * jQuery(window).on('popstate', debounced.cancel); + */ + function debounce(func, wait, options) { + var lastArgs, + lastThis, + maxWait, + result, + timerId, + lastCallTime, + lastInvokeTime = 0, + leading = false, + maxing = false, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + wait = toNumber(wait) || 0; + if (isObject(options)) { + leading = !!options.leading; + maxing = 'maxWait' in options; + maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + + function invokeFunc(time) { + var args = lastArgs, + thisArg = lastThis; + + lastArgs = lastThis = undefined; + lastInvokeTime = time; + result = func.apply(thisArg, args); + return result; + } + + function leadingEdge(time) { + // Reset any `maxWait` timer. + lastInvokeTime = time; + // Start the timer for the trailing edge. + timerId = setTimeout(timerExpired, wait); + // Invoke the leading edge. + return leading ? invokeFunc(time) : result; + } + + function remainingWait(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime, + result = wait - timeSinceLastCall; + + return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result; + } + + function shouldInvoke(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime; + + // Either this is the first call, activity has stopped and we're at the + // trailing edge, the system time has gone backwards and we're treating + // it as the trailing edge, or we've hit the `maxWait` limit. + return (lastCallTime === undefined || (timeSinceLastCall >= wait) || + (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); + } + + function timerExpired() { + var time = now(); + if (shouldInvoke(time)) { + return trailingEdge(time); + } + // Restart the timer. + timerId = setTimeout(timerExpired, remainingWait(time)); + } + + function trailingEdge(time) { + timerId = undefined; + + // Only invoke if we have `lastArgs` which means `func` has been + // debounced at least once. + if (trailing && lastArgs) { + return invokeFunc(time); + } + lastArgs = lastThis = undefined; + return result; + } + + function cancel() { + if (timerId !== undefined) { + clearTimeout(timerId); + } + lastInvokeTime = 0; + lastArgs = lastCallTime = lastThis = timerId = undefined; + } + + function flush() { + return timerId === undefined ? result : trailingEdge(now()); + } + + function debounced() { + var time = now(), + isInvoking = shouldInvoke(time); + + lastArgs = arguments; + lastThis = this; + lastCallTime = time; + + if (isInvoking) { + if (timerId === undefined) { + return leadingEdge(lastCallTime); + } + if (maxing) { + // Handle invocations in a tight loop. + timerId = setTimeout(timerExpired, wait); + return invokeFunc(lastCallTime); + } + } + if (timerId === undefined) { + timerId = setTimeout(timerExpired, wait); + } + return result; + } + debounced.cancel = cancel; + debounced.flush = flush; + return debounced; + } + + /** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ + function isObject(value) { + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); + } + + /** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ + function isObjectLike(value) { + return !!value && typeof value == 'object'; + } + + /** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ + function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && objectToString.call(value) == symbolTag); + } + + /** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ + function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol(value)) { + return NAN; + } + if (isObject(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = isObject(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = value.replace(reTrim, ''); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); + } + + module.exports = debounce; + + /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__("c8ba"))); + + /***/ }), + + /***/ "fb15": + /***/ (function(module, __webpack_exports__, __webpack_require__) { + // ESM COMPAT FLAG + __webpack_require__.r(__webpack_exports__); + + // CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/setPublicPath.js + // This file is imported into lib/wc client bundles. + + if (typeof window !== 'undefined') { + { + __webpack_require__("f6fd"); + } + + var setPublicPath_i; + if ((setPublicPath_i = window.document.currentScript) && (setPublicPath_i = setPublicPath_i.src.match(/(.+\/)[^/]+\.js(\?.*)?$/))) { + __webpack_require__.p = setPublicPath_i[1]; // eslint-disable-line + } + } + + // EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.filter.js + var es_array_filter = __webpack_require__("4de4"); + + // EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.for-each.js + var es_array_for_each = __webpack_require__("4160"); + + // EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.join.js + var es_array_join = __webpack_require__("a15b"); + + // EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.map.js + var es_array_map = __webpack_require__("d81d"); + + // EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.slice.js + var es_array_slice = __webpack_require__("fb6a"); + + // EXTERNAL MODULE: ./node_modules/core-js/modules/es.object.values.js + var es_object_values = __webpack_require__("07ac"); + + // EXTERNAL MODULE: ./node_modules/core-js/modules/web.dom-collections.for-each.js + var web_dom_collections_for_each = __webpack_require__("159b"); + + // EXTERNAL MODULE: ./node_modules/core-js/modules/es.symbol.js + var es_symbol = __webpack_require__("a4d3"); + + // EXTERNAL MODULE: ./node_modules/core-js/modules/es.object.get-own-property-descriptor.js + var es_object_get_own_property_descriptor = __webpack_require__("e439"); + + // EXTERNAL MODULE: ./node_modules/core-js/modules/es.object.get-own-property-descriptors.js + var es_object_get_own_property_descriptors = __webpack_require__("dbb4"); + + // EXTERNAL MODULE: ./node_modules/core-js/modules/es.object.keys.js + var es_object_keys = __webpack_require__("b64b"); + + // CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/defineProperty.js + function _defineProperty(obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + + return obj; + } + // CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/objectSpread2.js + + + + + + + + + + function ownKeys(object, enumerableOnly) { + var keys = Object.keys(object); + + if (Object.getOwnPropertySymbols) { + var symbols = Object.getOwnPropertySymbols(object); + if (enumerableOnly) symbols = symbols.filter(function (sym) { + return Object.getOwnPropertyDescriptor(object, sym).enumerable; + }); + keys.push.apply(keys, symbols); + } + + return keys; + } + + function _objectSpread2(target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i] != null ? arguments[i] : {}; + + if (i % 2) { + ownKeys(Object(source), true).forEach(function (key) { + _defineProperty(target, key, source[key]); + }); + } else if (Object.getOwnPropertyDescriptors) { + Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); + } else { + ownKeys(Object(source)).forEach(function (key) { + Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); + }); + } + } + + return target; + } + // EXTERNAL MODULE: ./node_modules/json2mq/index.js + var json2mq = __webpack_require__("a48b"); + var json2mq_default = /*#__PURE__*/__webpack_require__.n(json2mq); + + // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/vuetify-loader/lib/loader.js??ref--19-0!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/mixinPropsUpdated.vue?vue&type=script&lang=js& + + + + /* harmony default export */ var mixinPropsUpdatedvue_type_script_lang_js_ = ({ + computed: { + isPropsUpdated: function isPropsUpdated() { + var _this = this; + + // Read props that need to be listened for changes. + Object.keys(this.$props).forEach(function (key) { + return _this[key]; + }); // Return a different value each time. `Date.now()` is not guaranteed to be unique. + // eslint-disable-next-line vue/no-side-effects-in-computed-properties + + return this.updateSwitch = !this.updateSwitch; + } + }, + watch: { + isPropsUpdated: function isPropsUpdated() { + if (typeof this.onPropsUpdated === 'function') { + this.onPropsUpdated(); + } + } + } + }); + // CONCATENATED MODULE: ./src/mixinPropsUpdated.vue?vue&type=script&lang=js& + /* harmony default export */ var src_mixinPropsUpdatedvue_type_script_lang_js_ = (mixinPropsUpdatedvue_type_script_lang_js_); + // CONCATENATED MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js + /* globals __VUE_SSR_CONTEXT__ */ + + // IMPORTANT: Do NOT use ES2015 features in this file (except for modules). + // This module is a runtime utility for cleaner component module output and will + // be included in the final webpack user bundle. + + function normalizeComponent ( + scriptExports, + render, + staticRenderFns, + functionalTemplate, + injectStyles, + scopeId, + moduleIdentifier, /* server only */ + shadowMode /* vue-cli only */ + ) { + // Vue.extend constructor export interop + var options = typeof scriptExports === 'function' + ? scriptExports.options + : scriptExports; + + // render functions + if (render) { + options.render = render; + options.staticRenderFns = staticRenderFns; + options._compiled = true; + } + + // functional template + if (functionalTemplate) { + options.functional = true; + } + + // scopedId + if (scopeId) { + options._scopeId = 'data-v-' + scopeId; + } + + var hook; + if (moduleIdentifier) { // server build + hook = function (context) { + // 2.3 injection + context = + context || // cached call + (this.$vnode && this.$vnode.ssrContext) || // stateful + (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext); // functional + // 2.2 with runInNewContext: true + if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') { + context = __VUE_SSR_CONTEXT__; + } + // inject component styles + if (injectStyles) { + injectStyles.call(this, context); + } + // register component module identifier for async chunk inferrence + if (context && context._registeredComponents) { + context._registeredComponents.add(moduleIdentifier); + } + }; + // used by ssr in case component is cached and beforeCreate + // never gets called + options._ssrRegister = hook; + } else if (injectStyles) { + hook = shadowMode + ? function () { injectStyles.call(this, this.$root.$options.shadowRoot); } + : injectStyles; + } + + if (hook) { + if (options.functional) { + // for template-only hot-reload because in that case the render fn doesn't + // go through the normalizer + options._injectStyles = hook; + // register for functional component in vue file + var originalRender = options.render; + options.render = function renderWithStyleInjection (h, context) { + hook.call(context); + return originalRender(h, context) + }; + } else { + // inject component registration as beforeCreate hook + var existing = options.beforeCreate; + options.beforeCreate = existing + ? [].concat(existing, hook) + : [hook]; + } + } + + return { + exports: scriptExports, + options: options + } + } + + // CONCATENATED MODULE: ./src/mixinPropsUpdated.vue + var mixinPropsUpdated_render, staticRenderFns; + + + + + /* normalize component */ + + var component = normalizeComponent( + src_mixinPropsUpdatedvue_type_script_lang_js_, + mixinPropsUpdated_render, + staticRenderFns, + false, + null, + null, + null + + ); + + /* harmony default export */ var mixinPropsUpdated = (component.exports); + // EXTERNAL MODULE: ./node_modules/lodash.pick/index.js + var lodash_pick = __webpack_require__("88bc"); + var lodash_pick_default = /*#__PURE__*/__webpack_require__.n(lodash_pick); + + // EXTERNAL MODULE: ./node_modules/lodash.assign/index.js + var lodash_assign = __webpack_require__("42a0"); + var lodash_assign_default = /*#__PURE__*/__webpack_require__.n(lodash_assign); + + // EXTERNAL MODULE: ./node_modules/lodash.get/index.js + var lodash_get = __webpack_require__("c832"); + var lodash_get_default = /*#__PURE__*/__webpack_require__.n(lodash_get); + + // CONCATENATED MODULE: ./src/vNodeUtils.js + + + + + + var vNodeUtils_mergeVNodeData = function mergeVNodeData(vnode, name, obj) { + if (!vnode) { + return; + } + + vnode.data = vnode.data || {}; + vnode.data[name] = _objectSpread2({}, vnode.data[name], {}, obj); + }; + var setVNodeData = function setVNodeData(vnode, name, value) { + if (!vnode) { + return; + } + + vnode.data = vnode.data || {}; + vnode.data[name] = value; + }; + var DATA_KEYS = ['class', 'staticClass', 'style', 'attrs', 'props', 'domProps', 'on', 'nativeOn', 'directives', 'scopesSlots', 'slot', 'ref', 'key']; + + function mutateKey(key) { + return '' + key + "-cloned-cid"; + } + + function extractData(vnode, isComp) { + var data = lodash_pick_default()(vnode.data, DATA_KEYS); + + if (isComp) { + var cOpts = vnode.componentOptions; + lodash_assign_default()(data, { + props: cOpts.propsData, + on: cOpts.listeners + }); + } + + if (data.key) { + data.key = mutateKey(data.key); + } + + return data; + } + + var cloneVNode = function cloneVNode(vnode) { + // use the context that the original vnode was created in. + var h = vnode.context && vnode.context.$createElement; + var isComp = !!vnode.componentOptions; + var isText = !vnode.tag; // this will also match comments but those will be dropped, essentially + + var children = isComp ? vnode.componentOptions.children : vnode.children; + if (isText) return vnode.text; + var data = extractData(vnode, isComp); + var tag = isComp ? vnode.componentOptions.Ctor : vnode.tag; + var childNodes = children ? children.map(function (c) { + return cloneVNode(c); + }) : undefined; + return h(tag, data, childNodes); + }; + var vNodeUtils_getData = function getData(vnode, path, defaultValue) { + if (!vnode) { + return; + } + + var data = vnode.data || {}; + return typeof path === 'undefined' ? data : lodash_get_default()(data, path, defaultValue); + }; + var vNodeUtils_getStyle = function getStyle(vnode) { + return _objectSpread2({}, vNodeUtils_getData(vnode, 'staticStyle', {}), {}, vNodeUtils_getData(vnode, 'style', {})); + }; + // EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.concat.js + var es_array_concat = __webpack_require__("99af"); + + // EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.every.js + var es_array_every = __webpack_require__("a623"); + + // EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.from.js + var es_array_from = __webpack_require__("a630"); + + // EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.index-of.js + var es_array_index_of = __webpack_require__("c975"); + + // EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.reduce.js + var es_array_reduce = __webpack_require__("13d5"); + + // EXTERNAL MODULE: ./node_modules/core-js/modules/es.number.constructor.js + var es_number_constructor = __webpack_require__("a9e3"); + + // EXTERNAL MODULE: ./node_modules/core-js/modules/es.regexp.exec.js + var es_regexp_exec = __webpack_require__("ac1f"); + + // EXTERNAL MODULE: ./node_modules/core-js/modules/es.string.iterator.js + var es_string_iterator = __webpack_require__("3ca3"); + + // EXTERNAL MODULE: ./node_modules/core-js/modules/es.string.match.js + var es_string_match = __webpack_require__("466d"); + + // CONCATENATED MODULE: ./src/innerSliderUtils.js + + + + + + + + + + + + + + + + var canUseDOM = function canUseDOM() { + return !!(typeof window !== 'undefined' && window.document && window.document.createElement); + }; + var getPreClones = function getPreClones(spec) { + if (spec.unslick || !spec.infinite) { + return 0; + } + + if (spec.variableWidth) { + return spec.slideCount; + } + + return spec.slidesToShow + (spec.centerMode ? 1 : 0); + }; + var getPostClones = function getPostClones(spec) { + if (spec.unslick || !spec.infinite) { + return 0; + } + + return spec.slideCount; + }; + var innerSliderUtils_keyHandler = function keyHandler(e, accessibility, rtl) { + if (e.target.tagName.match('TEXTAREA|INPUT|SELECT') || !accessibility) return ''; + if (e.keyCode === 37) return rtl ? 'next' : 'previous'; + if (e.keyCode === 39) return rtl ? 'previous' : 'next'; + return ''; + }; + var siblingDirection = function siblingDirection(spec) { + if (spec.targetSlide > spec.currentSlide) { + if (spec.targetSlide > spec.currentSlide + slidesOnRight(spec)) { + return 'left'; + } + + return 'right'; + } else { + if (spec.targetSlide < spec.currentSlide - slidesOnLeft(spec)) { + return 'right'; + } + + return 'left'; + } + }; + var slidesOnRight = function slidesOnRight(_ref) { + var slidesToShow = _ref.slidesToShow, + centerMode = _ref.centerMode, + rtl = _ref.rtl, + centerPadding = _ref.centerPadding; + + // returns no of slides on the right of active slide + if (centerMode) { + var right = (slidesToShow - 1) / 2 + 1; + if (parseInt(centerPadding) > 0) right += 1; + if (rtl && slidesToShow % 2 === 0) right += 1; + return right; + } + + if (rtl) { + return 0; + } + + return slidesToShow - 1; + }; + var slidesOnLeft = function slidesOnLeft(_ref2) { + var slidesToShow = _ref2.slidesToShow, + centerMode = _ref2.centerMode, + rtl = _ref2.rtl, + centerPadding = _ref2.centerPadding; + + // returns no of slides on the left of active slide + if (centerMode) { + var left = (slidesToShow - 1) / 2 + 1; + if (parseInt(centerPadding) > 0) left += 1; + if (!rtl && slidesToShow % 2 === 0) left += 1; + return left; + } + + if (rtl) { + return slidesToShow - 1; + } + + return 0; + }; // startIndex that needs to be present + + var lazyStartIndex = function lazyStartIndex(spec) { + return spec.currentSlide - lazySlidesOnLeft(spec); + }; + var lazyEndIndex = function lazyEndIndex(spec) { + return spec.currentSlide + lazySlidesOnRight(spec); + }; + var lazySlidesOnLeft = function lazySlidesOnLeft(spec) { + return spec.centerMode ? Math.floor(spec.slidesToShow / 2) + (parseInt(spec.centerPadding) > 0 ? 1 : 0) : 0; + }; + var lazySlidesOnRight = function lazySlidesOnRight(spec) { + return spec.centerMode ? Math.floor((spec.slidesToShow - 1) / 2) + 1 + (parseInt(spec.centerPadding) > 0 ? 1 : 0) : spec.slidesToShow; + }; + var getOnDemandLazySlides = function getOnDemandLazySlides(spec) { + var onDemandSlides = []; + var startIndex = lazyStartIndex(spec); + var endIndex = lazyEndIndex(spec); + + for (var slideIndex = startIndex; slideIndex < endIndex; slideIndex++) { + if (spec.lazyLoadedList.indexOf(slideIndex) < 0) { + onDemandSlides.push(slideIndex); + } + } + + return onDemandSlides; + }; + var innerSliderUtils_changeSlide = function changeSlide(spec, options) { + var indexOffset, previousInt, slideOffset, unevenOffset, targetSlide; + var slidesToScroll = spec.slidesToScroll, + slidesToShow = spec.slidesToShow, + slideCount = spec.slideCount, + currentSlide = spec.currentSlide, + lazyLoad = spec.lazyLoad, + infinite = spec.infinite; + unevenOffset = slideCount % slidesToScroll !== 0; + indexOffset = unevenOffset ? 0 : (slideCount - currentSlide) % slidesToScroll; + + if (options.message === 'previous') { + slideOffset = indexOffset === 0 ? slidesToScroll : slidesToShow - indexOffset; + targetSlide = currentSlide - slideOffset; + + if (lazyLoad && !infinite) { + previousInt = currentSlide - slideOffset; + targetSlide = previousInt === -1 ? slideCount - 1 : previousInt; + } + } else if (options.message === 'next') { + slideOffset = indexOffset === 0 ? slidesToScroll : indexOffset; + targetSlide = currentSlide + slideOffset; + + if (lazyLoad && !infinite) { + targetSlide = (currentSlide + slidesToScroll) % slideCount + indexOffset; + } + } else if (options.message === 'dots') { + // Click on dots + targetSlide = options.index * options.slidesToScroll; + + if (targetSlide === options.currentSlide) { + return null; + } + } else if (options.message === 'children') { + // Click on the slides + targetSlide = options.index; + + if (targetSlide === options.currentSlide) { + return null; + } + + if (infinite) { + var direction = siblingDirection(_objectSpread2({}, spec, { + targetSlide: targetSlide + })); + + if (targetSlide > options.currentSlide && direction === 'left') { + targetSlide = targetSlide - slideCount; + } else if (targetSlide < options.currentSlide && direction === 'right') { + targetSlide = targetSlide + slideCount; + } + } + } else if (options.message === 'index') { + targetSlide = Number(options.index); + + if (targetSlide === options.currentSlide) { + return null; + } + } + + return targetSlide; + }; + var filterUndefined = function filterUndefined(props) { + return Object.keys(props).filter(function (key) { + return props[key] !== undefined; + }).reduce(function (obj, key) { + obj[key] = props[key]; + return obj; + }, {}); + }; + var filterUndefinedOrNull = function filterUndefinedOrNull(props) { + return Object.keys(props).filter(function (key) { + return props[key] !== undefined && props[key] !== null; + }).reduce(function (obj, key) { + obj[key] = props[key]; + return obj; + }, {}); + }; + var innerSliderUtils_swipeStart = function swipeStart(e, swipe, draggable) { + if (!swipe || !draggable && e.type.indexOf('mouse') !== -1) return ''; + return { + dragging: true, + touchObject: { + startX: e.touches ? e.touches[0].pageX : e.clientX, + startY: e.touches ? e.touches[0].pageY : e.clientY, + curX: e.touches ? e.touches[0].pageX : e.clientX, + curY: e.touches ? e.touches[0].pageY : e.clientY + } + }; + }; + var innerSliderUtils_swipeMove = function swipeMove(e, spec) { + // spec also contains, trackRef and slideIndex + var scrolling = spec.scrolling, + animating = spec.animating, + vertical = spec.vertical, + swipeToSlide = spec.swipeToSlide, + verticalSwiping = spec.verticalSwiping, + rtl = spec.rtl, + currentSlide = spec.currentSlide, + edgeFriction = spec.edgeFriction, + edgeDragged = spec.edgeDragged, + onEdge = spec.onEdge, + swiped = spec.swiped, + swiping = spec.swiping, + slideCount = spec.slideCount, + slidesToScroll = spec.slidesToScroll, + infinite = spec.infinite, + touchObject = spec.touchObject, + swipeEvent = spec.swipeEvent, + listHeight = spec.listHeight, + listWidth = spec.listWidth; + if (scrolling) return; + if (animating) return e.preventDefault(); + if (vertical && swipeToSlide && verticalSwiping) e.preventDefault(); + var swipeLeft, + state = {}; + var curLeft = getTrackLeft(spec); + touchObject.curX = e.touches ? e.touches[0].pageX : e.clientX; + touchObject.curY = e.touches ? e.touches[0].pageY : e.clientY; + touchObject.swipeLength = Math.round(Math.sqrt(Math.pow(touchObject.curX - touchObject.startX, 2))); + var verticalSwipeLength = Math.round(Math.sqrt(Math.pow(touchObject.curY - touchObject.startY, 2))); + + if (!verticalSwiping && !swiping && verticalSwipeLength > 10) { + return { + scrolling: true + }; + } + + if (verticalSwiping) touchObject.swipeLength = verticalSwipeLength; + var positionOffset = (!rtl ? 1 : -1) * (touchObject.curX > touchObject.startX ? 1 : -1); + if (verticalSwiping) positionOffset = touchObject.curY > touchObject.startY ? 1 : -1; + var dotCount = Math.ceil(slideCount / slidesToScroll); + var swipeDirection = getSwipeDirection(spec.touchObject, verticalSwiping); + var touchSwipeLength = touchObject.swipeLength; + + if (!infinite) { + if (currentSlide === 0 && swipeDirection === 'right' || currentSlide + 1 >= dotCount && swipeDirection === 'left' || !canGoNext(spec) && swipeDirection === 'left') { + touchSwipeLength = touchObject.swipeLength * edgeFriction; + + if (edgeDragged === false && onEdge) { + onEdge(swipeDirection); + state['edgeDragged'] = true; + } + } + } + + if (!swiped && swipeEvent) { + swipeEvent(swipeDirection); + state['swiped'] = true; + } + + if (!vertical) { + if (!rtl) { + swipeLeft = curLeft + touchSwipeLength * positionOffset; + } else { + swipeLeft = curLeft - touchSwipeLength * positionOffset; + } + } else { + swipeLeft = curLeft + touchSwipeLength * (listHeight / listWidth) * positionOffset; + } + + if (verticalSwiping) { + swipeLeft = curLeft + touchSwipeLength * positionOffset; + } + + state = _objectSpread2({}, state, { + touchObject: touchObject, + swipeLeft: swipeLeft, + trackStyle: innerSliderUtils_getTrackCSS(_objectSpread2({}, spec, { + left: swipeLeft + })) + }); + + if (Math.abs(touchObject.curX - touchObject.startX) < Math.abs(touchObject.curY - touchObject.startY) * 0.8) { + return state; + } + + if (touchObject.swipeLength > 10) { + state['swiping'] = true; + e.preventDefault(); + } + + return state; + }; + var innerSliderUtils_swipeEnd = function swipeEnd(e, spec) { + var dragging = spec.dragging, + swipe = spec.swipe, + touchObject = spec.touchObject, + listWidth = spec.listWidth, + touchThreshold = spec.touchThreshold, + verticalSwiping = spec.verticalSwiping, + listHeight = spec.listHeight, + currentSlide = spec.currentSlide, + swipeToSlide = spec.swipeToSlide, + scrolling = spec.scrolling, + onSwipe = spec.onSwipe; + + if (!dragging) { + if (swipe) e.preventDefault(); + return {}; + } + + var minSwipe = verticalSwiping ? listHeight / touchThreshold : listWidth / touchThreshold; + var swipeDirection = getSwipeDirection(touchObject, verticalSwiping); // reset the state of touch related state variables. + + var state = { + dragging: false, + edgeDragged: false, + scrolling: false, + swiping: false, + swiped: false, + swipeLeft: null, + touchObject: {} + }; + + if (scrolling) { + return state; + } + + if (!touchObject.swipeLength) { + return state; + } + + if (touchObject.swipeLength > minSwipe) { + e.preventDefault(); + + if (onSwipe) { + onSwipe(swipeDirection); + } + + var slideCount, newSlide; + + switch (swipeDirection) { + case 'left': + case 'up': + newSlide = currentSlide + getSlideCount(spec); + slideCount = swipeToSlide ? checkNavigable(spec, newSlide) : newSlide; + state['currentDirection'] = 0; + break; + + case 'right': + case 'down': + newSlide = currentSlide - getSlideCount(spec); + slideCount = swipeToSlide ? checkNavigable(spec, newSlide) : newSlide; + state['currentDirection'] = 1; + break; + + default: + slideCount = currentSlide; + } + + state['triggerSlideHandler'] = slideCount; + } else { + // Adjust the track back to it's original position. + var currentLeft = getTrackLeft(spec); + state['trackStyle'] = getTrackAnimateCSS(_objectSpread2({}, spec, { + left: currentLeft + })); + } + + return state; + }; + var getNavigableIndexes = function getNavigableIndexes(spec) { + var max = spec.infinite ? spec.slideCount * 2 : spec.slideCount; + var breakpoint = spec.infinite ? spec.slidesToShow * -1 : 0; + var counter = spec.infinite ? spec.slidesToShow * -1 : 0; + var indexes = []; + + while (breakpoint < max) { + indexes.push(breakpoint); + breakpoint = counter + spec.slidesToScroll; + counter += Math.min(spec.slidesToScroll, spec.slidesToShow); + } + + return indexes; + }; + var checkNavigable = function checkNavigable(spec, index) { + var navigables = getNavigableIndexes(spec); + var prevNavigable = 0; + + if (index > navigables[navigables.length - 1]) { + index = navigables[navigables.length - 1]; + } else { + for (var n in navigables) { + if (index < navigables[n]) { + index = prevNavigable; + break; + } + + prevNavigable = navigables[n]; + } + } + + return index; + }; + var getSlideCount = function getSlideCount(spec) { + var centerOffset = spec.centerMode ? spec.slideWidth * Math.floor(spec.slidesToShow / 2) : 0; + + if (spec.swipeToSlide) { + var swipedSlide; + var slickList = spec.listRef; + var slides = slickList.querySelectorAll('.slick-slide'); + Array.from(slides).every(function (slide) { + if (!spec.vertical) { + if (slide.offsetLeft - centerOffset + getWidth(slide) / 2 > spec.swipeLeft * -1) { + swipedSlide = slide; + return false; + } + } else { + if (slide.offsetTop + getHeight(slide) / 2 > spec.swipeLeft * -1) { + swipedSlide = slide; + return false; + } + } + + return true; + }); + + if (!swipedSlide) { + return 0; + } + + var currentIndex = spec.rtl === true ? spec.slideCount - spec.currentSlide : spec.currentSlide; + var slidesTraversed = Math.abs(swipedSlide.dataset.index - currentIndex) || 1; + return slidesTraversed; + } else { + return spec.slidesToScroll; + } + }; // given an object and a list of keys, return new object with given keys + + var extractObject = function extractObject(spec, keys) { + var newObject = {}; + keys.forEach(function (key) { + return newObject[key] = spec[key]; + }); + return newObject; + }; + var PROP_KEYS = { + TRACK: ['fade', 'cssEase', 'speed', 'infinite', 'centerMode', 'currentSlide', 'lazyLoad', 'lazyLoadedList', 'rtl', 'slideWidth', 'slideHeight', 'listHeight', 'vertical', 'slidesToShow', 'slidesToScroll', 'slideCount', 'trackStyle', 'variableWidth', 'unslick', 'centerPadding'], + DOT: ['dotsClass', 'slideCount', 'slidesToShow', 'currentSlide', 'slidesToScroll', 'children', 'customPaging', 'infinite'], + ARROW: ['infinite', 'centerMode', 'currentSlide', 'slideCount', 'slidesToShow', 'prevArrow', 'nextArrow'] + }; // whether or not we can go next + + var canGoNext = function canGoNext(spec) { + var canGo = true; + + if (!spec.infinite) { + if (spec.centerMode && spec.currentSlide >= spec.slideCount - 1) { + canGo = false; + } else if (spec.slideCount <= spec.slidesToShow || spec.currentSlide >= spec.slideCount - spec.slidesToShow) { + canGo = false; + } + } + + return canGo; + }; + var innerSliderUtils_slideHandler = function slideHandler(spec) { + var waitForAnimate = spec.waitForAnimate, + animating = spec.animating, + fade = spec.fade, + infinite = spec.infinite, + index = spec.index, + slideCount = spec.slideCount, + lazyLoadedList = spec.lazyLoadedList, + lazyLoad = spec.lazyLoad, + currentSlide = spec.currentSlide, + centerMode = spec.centerMode, + slidesToScroll = spec.slidesToScroll, + slidesToShow = spec.slidesToShow, + useCSS = spec.useCSS; + if (waitForAnimate && animating) return {}; + var animationSlide = index, + finalSlide, + animationLeft, + finalLeft; + var state = {}, + nextState = {}; + + if (fade) { + if (!infinite && (index < 0 || index >= slideCount)) return {}; + + if (index < 0) { + animationSlide = index + slideCount; + } else if (index >= slideCount) { + animationSlide = index - slideCount; + } + + if (lazyLoad && lazyLoadedList.indexOf(animationSlide) < 0) { + lazyLoadedList.push(animationSlide); + } + + state = { + animating: true, + currentSlide: animationSlide, + lazyLoadedList: lazyLoadedList + }; + nextState = { + animating: false + }; + } else { + finalSlide = animationSlide; + + if (animationSlide < 0) { + finalSlide = animationSlide + slideCount; + if (!infinite) finalSlide = 0;else if (slideCount % slidesToScroll !== 0) finalSlide = slideCount - slideCount % slidesToScroll; + } else if (!canGoNext(spec) && animationSlide > currentSlide) { + animationSlide = finalSlide = currentSlide; + } else if (centerMode && animationSlide >= slideCount) { + animationSlide = infinite ? slideCount : slideCount - 1; + finalSlide = infinite ? 0 : slideCount - 1; + } else if (animationSlide >= slideCount) { + finalSlide = animationSlide - slideCount; + if (!infinite) finalSlide = slideCount - slidesToShow;else if (slideCount % slidesToScroll !== 0) finalSlide = 0; + } + + animationLeft = getTrackLeft(_objectSpread2({}, spec, { + slideIndex: animationSlide + })); + finalLeft = getTrackLeft(_objectSpread2({}, spec, { + slideIndex: finalSlide + })); + + if (!infinite) { + if (animationLeft === finalLeft) animationSlide = finalSlide; + animationLeft = finalLeft; + } + + lazyLoad && lazyLoadedList.concat(getOnDemandLazySlides(_objectSpread2({}, spec, { + currentSlide: animationSlide + }))); + + if (!useCSS) { + state = { + currentSlide: finalSlide, + trackStyle: innerSliderUtils_getTrackCSS(_objectSpread2({}, spec, { + left: finalLeft + })), + lazyLoadedList: lazyLoadedList + }; + } else { + state = { + animating: true, + currentSlide: finalSlide, + trackStyle: getTrackAnimateCSS(_objectSpread2({}, spec, { + left: animationLeft + })), + lazyLoadedList: lazyLoadedList + }; + nextState = { + animating: false, + currentSlide: finalSlide, + trackStyle: innerSliderUtils_getTrackCSS(_objectSpread2({}, spec, { + left: finalLeft + })), + swipeLeft: null + }; + } + } + + return { + state: state, + nextState: nextState + }; + }; // get width of an element + + var getWidth = function getWidth(elem) { + return elem && elem.offsetWidth || 0; + }; + var getHeight = function getHeight(elem) { + return elem && elem.offsetHeight || 0; + }; + var getSwipeDirection = function getSwipeDirection(touchObject) { + var verticalSwiping = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + var xDist, yDist, r, swipeAngle; + xDist = touchObject.startX - touchObject.curX; + yDist = touchObject.startY - touchObject.curY; + r = Math.atan2(yDist, xDist); + swipeAngle = Math.round(r * 180 / Math.PI); + + if (swipeAngle < 0) { + swipeAngle = 360 - Math.abs(swipeAngle); + } + + if (swipeAngle <= 45 && swipeAngle >= 0 || swipeAngle <= 360 && swipeAngle >= 315) { + return 'left'; + } + + if (swipeAngle >= 135 && swipeAngle <= 225) { + return 'right'; + } + + if (verticalSwiping === true) { + if (swipeAngle >= 35 && swipeAngle <= 135) { + return 'up'; + } else { + return 'down'; + } + } + + return 'vertical'; + }; // get initialized state + + var initializedState = function initializedState(spec) { + // spec also contains listRef, trackRef + var slideCount = spec.children.length; + var listWidth = Math.ceil(getWidth(spec.listRef)); + var trackWidth = Math.ceil(getWidth(spec.trackRef)); + var slideWidth; + + if (!spec.vertical) { + var centerPaddingAdj = spec.centerMode && parseInt(spec.centerPadding) * 2; + + if (typeof spec.centerPadding === 'string' && spec.centerPadding.slice(-1) === '%') { + centerPaddingAdj *= listWidth / 100; + } + + slideWidth = Math.ceil((listWidth - centerPaddingAdj) / spec.slidesToShow); + } else { + slideWidth = listWidth; + } + + var slideHeight = spec.listRef && getHeight(spec.listRef.querySelector('[data-index="0"]')); + var listHeight = slideHeight * spec.slidesToShow; + var currentSlide = spec.currentSlide === undefined ? spec.initialSlide : spec.currentSlide; + + if (spec.rtl && spec.currentSlide === undefined) { + currentSlide = slideCount - 1 - spec.initialSlide; + } + + var lazyLoadedList = spec.lazyLoadedList || []; + var slidesToLoad = getOnDemandLazySlides({ + currentSlide: currentSlide, + lazyLoadedList: lazyLoadedList + }); + lazyLoadedList.concat(slidesToLoad); + var state = { + slideCount: slideCount, + slideWidth: slideWidth, + listWidth: listWidth, + trackWidth: trackWidth, + currentSlide: currentSlide, + slideHeight: slideHeight, + listHeight: listHeight, + lazyLoadedList: lazyLoadedList + }; + + if (spec.autoplaying === null && spec.autoplay) { + state['autoplaying'] = 'playing'; + } + + return state; + }; + var getTrackLeft = function getTrackLeft(spec) { + if (spec.unslick) { + return 0; + } + + checkSpecKeys(spec, ['slideIndex', 'trackRef', 'infinite', 'centerMode', 'slideCount', 'slidesToShow', 'slidesToScroll', 'slideWidth', 'listWidth', 'variableWidth', 'slideHeight']); + var slideIndex = spec.slideIndex, + trackRef = spec.trackRef, + infinite = spec.infinite, + centerMode = spec.centerMode, + slideCount = spec.slideCount, + slidesToShow = spec.slidesToShow, + slidesToScroll = spec.slidesToScroll, + slideWidth = spec.slideWidth, + listWidth = spec.listWidth, + variableWidth = spec.variableWidth, + slideHeight = spec.slideHeight, + fade = spec.fade, + vertical = spec.vertical; + var slideOffset = 0; + var targetLeft; + var targetSlide; + var verticalOffset = 0; + + if (fade || spec.slideCount === 1) { + return 0; + } + + var slidesToOffset = 0; + + if (infinite) { + slidesToOffset = -getPreClones(spec); // bring active slide to the beginning of visual area + // if next scroll doesn't have enough children, just reach till the end of original slides instead of shifting slidesToScroll children + + if (slideCount % slidesToScroll !== 0 && slideIndex + slidesToScroll > slideCount) { + slidesToOffset = -(slideIndex > slideCount ? slidesToShow - (slideIndex - slideCount) : slideCount % slidesToScroll); + } // shift current slide to center of the frame + + + if (centerMode) { + slidesToOffset += parseInt(slidesToShow / 2); + } + } else { + if (slideCount % slidesToScroll !== 0 && slideIndex + slidesToScroll > slideCount) { + slidesToOffset = slidesToShow - slideCount % slidesToScroll; + } + + if (centerMode) { + slidesToOffset = parseInt(slidesToShow / 2); + } + } + + slideOffset = slidesToOffset * slideWidth; + verticalOffset = slidesToOffset * slideHeight; + + if (!vertical) { + targetLeft = slideIndex * slideWidth * -1 + slideOffset; + } else { + targetLeft = slideIndex * slideHeight * -1 + verticalOffset; + } + + if (variableWidth === true) { + var targetSlideIndex; + var trackElem = trackRef.$el; + targetSlideIndex = slideIndex + getPreClones(spec); + targetSlide = trackElem && trackElem.childNodes[targetSlideIndex]; + targetLeft = targetSlide ? targetSlide.offsetLeft * -1 : 0; + + if (centerMode === true) { + targetSlideIndex = infinite ? slideIndex + getPreClones(spec) : slideIndex; + targetSlide = trackElem && trackElem.children[targetSlideIndex]; + targetLeft = 0; + + for (var slide = 0; slide < targetSlideIndex; slide++) { + targetLeft -= trackElem && trackElem.children[slide] && trackElem.children[slide].offsetWidth; + } + + targetLeft -= parseInt(spec.centerPadding); + targetLeft += targetSlide && (listWidth - targetSlide.offsetWidth) / 2; + } + } + + return targetLeft; + }; + var getTotalSlides = function getTotalSlides(spec) { + return spec.slideCount === 1 ? 1 : getPreClones(spec) + spec.slideCount + getPostClones(spec); + }; + var checkSpecKeys = function checkSpecKeys(spec, keysArray) { + return keysArray.reduce(function (value, key) { + return value && spec.hasOwnProperty(key); + }, true) ? null : console.error('Keys Missing:', spec); + }; // eslint-disable-line no-console + + var innerSliderUtils_getTrackCSS = function getTrackCSS(spec) { + checkSpecKeys(spec, ['left', 'variableWidth', 'slideCount', 'slidesToShow', 'slideWidth']); + var trackWidth, trackHeight; + var trackChildren = spec.slideCount + 2 * spec.slidesToShow; + + if (!spec.vertical) { + trackWidth = getTotalSlides(spec) * spec.slideWidth; + } else { + trackHeight = trackChildren * spec.slideHeight; + } + + var style = { + opacity: 1, + transition: '', + WebkitTransition: '' + }; + + if (spec.useTransform) { + var WebkitTransform = !spec.vertical ? 'translate3d(' + spec.left + 'px, 0px, 0px)' : 'translate3d(0px, ' + spec.left + 'px, 0px)'; + var transform = !spec.vertical ? 'translate3d(' + spec.left + 'px, 0px, 0px)' : 'translate3d(0px, ' + spec.left + 'px, 0px)'; + var msTransform = !spec.vertical ? 'translateX(' + spec.left + 'px)' : 'translateY(' + spec.left + 'px)'; + style = _objectSpread2({}, style, { + WebkitTransform: WebkitTransform, + transform: transform, + msTransform: msTransform + }); + } else { + if (spec.vertical) { + style['top'] = spec.left; + } else { + style['left'] = spec.left; + } + } + + if (spec.fade) style = { + opacity: 1 + }; + if (trackWidth) style.width = trackWidth + 'px'; + if (trackHeight) style.height = trackHeight + 'px'; // Fallback for IE8 + + if (window && !window.addEventListener && window.attachEvent) { + if (!spec.vertical) { + style.marginLeft = spec.left + 'px'; + } else { + style.marginTop = spec.left + 'px'; + } + } + + return style; + }; + var getTrackAnimateCSS = function getTrackAnimateCSS(spec) { + checkSpecKeys(spec, ['left', 'variableWidth', 'slideCount', 'slidesToShow', 'slideWidth', 'speed', 'cssEase']); + var style = innerSliderUtils_getTrackCSS(spec); // useCSS is true by default so it can be undefined + + if (spec.useTransform) { + style.WebkitTransition = '-webkit-transform ' + spec.speed + 'ms ' + spec.cssEase; + style.transition = 'transform ' + spec.speed + 'ms ' + spec.cssEase; + } else { + if (spec.vertical) { + style.transition = 'top ' + spec.speed + 'ms ' + spec.cssEase; + } else { + style.transition = 'left ' + spec.speed + 'ms ' + spec.cssEase; + } + } + + return style; + }; + // CONCATENATED MODULE: ./src/defaultProps.js + + + + var defaultProps_props = { + accessibility: { + type: Boolean, + default: true + }, + adaptiveHeight: { + type: Boolean, + default: false + }, + arrows: { + type: Boolean, + default: true + }, + asNavFor: { + type: Object, + default: null + }, + autoplay: { + type: Boolean, + default: false + }, + autoplaySpeed: { + type: Number, + default: 3000 + }, + centerMode: { + type: Boolean, + default: false + }, + centerPadding: { + type: String, + default: '50px' + }, + cssEase: { + type: String, + default: 'ease' + }, + dots: { + type: Boolean, + default: false + }, + dotsClass: { + type: String, + default: 'slick-dots' + }, + draggable: { + type: Boolean, + default: true + }, + edgeFriction: { + type: Number, + default: 0.35 + }, + fade: { + type: Boolean, + default: false + }, + focusOnSelect: { + type: Boolean, + default: false + }, + infinite: { + type: Boolean, + default: true + }, + initialSlide: { + type: Number, + default: 0 + }, + lazyLoad: { + type: String, + default: null + }, + pauseOnDotsHover: { + type: Boolean, + default: false + }, + pauseOnFocus: { + type: Boolean, + default: false + }, + pauseOnHover: { + type: Boolean, + default: true + }, + responsive: { + type: Array, + default: null + }, + rows: { + type: Number, + default: 1 + }, + rtl: { + type: Boolean, + default: false + }, + slidesPerRow: { + type: Number, + default: 1 + }, + slidesToScroll: { + type: Number, + default: 1 + }, + slidesToShow: { + type: Number, + default: 1 + }, + speed: { + type: Number, + default: 500 + }, + swipe: { + type: Boolean, + default: true + }, + swipeToSlide: { + type: Boolean, + default: false + }, + touchMove: { + type: Boolean, + default: true + }, + touchThreshold: { + type: Number, + default: 5 + }, + useCSS: { + type: Boolean, + default: true + }, + useTransform: { + type: Boolean, + default: true + }, + variableWidth: { + type: Boolean, + default: false + }, + vertical: { + type: Boolean, + default: false + }, + waitForAnimate: { + type: Boolean, + default: true + } + }; + var defaultValues = Object.keys(defaultProps_props).reduce(function (acc, key) { + acc[key] = defaultProps_props[key].default; + return acc; + }, {}); + var types = Object.keys(defaultProps_props).reduce(function (acc, key) { + acc[key] = defaultProps_props[key].type; + return acc; + }, {}); + // EXTERNAL MODULE: ./node_modules/core-js/modules/es.object.assign.js + var es_object_assign = __webpack_require__("cca6"); + + // CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js + + + function _objectWithoutPropertiesLoose(source, excluded) { + if (source == null) return {}; + var target = {}; + var sourceKeys = Object.keys(source); + var key, i; + + for (i = 0; i < sourceKeys.length; i++) { + key = sourceKeys[i]; + if (excluded.indexOf(key) >= 0) continue; + target[key] = source[key]; + } + + return target; + } + // CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js + + + + function _objectWithoutProperties(source, excluded) { + if (source == null) return {}; + var target = _objectWithoutPropertiesLoose(source, excluded); + var key, i; + + if (Object.getOwnPropertySymbols) { + var sourceSymbolKeys = Object.getOwnPropertySymbols(source); + + for (i = 0; i < sourceSymbolKeys.length; i++) { + key = sourceSymbolKeys[i]; + if (excluded.indexOf(key) >= 0) continue; + if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; + target[key] = source[key]; + } + } + + return target; + } + // EXTERNAL MODULE: ./node_modules/core-js/modules/es.symbol.description.js + var es_symbol_description = __webpack_require__("e01a"); + + // EXTERNAL MODULE: ./node_modules/core-js/modules/es.symbol.iterator.js + var es_symbol_iterator = __webpack_require__("d28b"); + + // EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.iterator.js + var es_array_iterator = __webpack_require__("e260"); + + // EXTERNAL MODULE: ./node_modules/core-js/modules/es.object.to-string.js + var es_object_to_string = __webpack_require__("d3b7"); + + // EXTERNAL MODULE: ./node_modules/core-js/modules/web.dom-collections.iterator.js + var web_dom_collections_iterator = __webpack_require__("ddb0"); + + // CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/typeof.js + + + + + + + + function _typeof(obj) { + "@babel/helpers - typeof"; + + if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { + _typeof = function _typeof(obj) { + return typeof obj; + }; + } else { + _typeof = function _typeof(obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + } + + return _typeof(obj); + } + // EXTERNAL MODULE: ./node_modules/resize-observer-polyfill/dist/ResizeObserver.es.js + var ResizeObserver_es = __webpack_require__("6dd8"); + + // EXTERNAL MODULE: ./node_modules/lodash.debounce/index.js + var lodash_debounce = __webpack_require__("f7fe"); + var lodash_debounce_default = /*#__PURE__*/__webpack_require__.n(lodash_debounce); + + // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/vuetify-loader/lib/loader.js??ref--19-0!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/SliderTrack.vue?vue&type=script&lang=js& + + + + + + + + + var getSlideClasses = function getSlideClasses(spec) { + var slickActive, slickCenter, slickCloned; + var centerOffset, index; + + if (spec.rtl) { + index = spec.slideCount - 1 - spec.index; + } else { + index = spec.index; + } + + slickCloned = index < 0 || index >= spec.slideCount; + + if (spec.centerMode) { + centerOffset = Math.floor(spec.slidesToShow / 2); + slickCenter = (index - spec.currentSlide) % spec.slideCount === 0; + + if (index > spec.currentSlide - centerOffset - 1 && index <= spec.currentSlide + centerOffset) { + slickActive = true; + } + } else { + slickActive = spec.currentSlide <= index && index < spec.currentSlide + spec.slidesToShow; + } + + var slickCurrent = index === spec.currentSlide; + return { + 'slick-slide': true, + 'slick-active': slickActive, + 'slick-center': slickCenter, + 'slick-cloned': slickCloned, + 'slick-current': slickCurrent // dubious in case of RTL + + }; + }; + + var getSlideStyle = function getSlideStyle(spec) { + var style = {}; + + if (spec.variableWidth === undefined || spec.variableWidth === false) { + style.width = typeof spec.slideWidth === 'number' ? "".concat(spec.slideWidth, "px") : spec.slideWidth; + } + + if (spec.fade) { + style.position = 'relative'; + + if (spec.vertical) { + style.top = "".concat(-spec.index * parseInt(spec.slideHeight), "px"); + } else { + style.left = "".concat(-spec.index * parseInt(spec.slideWidth), "px"); + } + + style.opacity = spec.currentSlide === spec.index ? 1 : 0; + style.transition = 'opacity ' + spec.speed + 'ms ' + spec.cssEase + ', ' + 'visibility ' + spec.speed + 'ms ' + spec.cssEase; + } + + return style; + }; + + var getKey = function getKey(child, fallbackKey) { + return child.key != null && String(child.key) || fallbackKey; + }; + + /* harmony default export */ var SliderTrackvue_type_script_lang_js_ = ({ + name: 'SliderTrack', + props: PROP_KEYS.TRACK, + methods: { + cloneSlide: function cloneSlide(slide, options) { + var _this = this; + + var clone = cloneVNode(slide); + clone.key = options.key; + vNodeUtils_mergeVNodeData(clone, 'class', options.class); + vNodeUtils_mergeVNodeData(clone, 'attrs', options.attrs); + vNodeUtils_mergeVNodeData(clone, 'style', options.style); + vNodeUtils_mergeVNodeData(clone, 'on', { + click: function click(e) { + vNodeUtils_getData(slide, 'on.click', function () {})(e); + + _this.$emit('childClicked', options.childOnClickOptions); + } + }); + return clone; + }, + renderSlides: function renderSlides(spec, children) { + var _this2 = this; + + var h = this.$createElement; + var key; + var slides = []; + var preCloneSlides = []; + var postCloneSlides = []; + var childrenCount = children.length; + var startIndex = lazyStartIndex(spec); + var endIndex = lazyEndIndex(spec); + children.forEach(function (elem, index) { + var child; + var childOnClickOptions = { + message: 'children', + index: index, + slidesToScroll: spec.slidesToScroll, + currentSlide: spec.currentSlide + }; // in case of lazyLoad, whether or not we want to fetch the slide + + if (!spec.lazyLoad || spec.lazyLoad && spec.lazyLoadedList.indexOf(index) >= 0) { + child = elem; + } else { + child = h("div"); + } + + var childStyle = getSlideStyle(_objectSpread2({}, spec, { + index: index + })); + var slideClasses = getSlideClasses(_objectSpread2({}, spec, { + index: index + })); // push a cloned element of the desired slide + + slides.push(_this2.cloneSlide(child, { + key: 'original' + getKey(child, index), + class: slideClasses, + style: _objectSpread2({ + outline: 'none' + }, childStyle), + attrs: { + tabIndex: '-1', + 'data-index': index, + 'aria-hidden': "".concat(!slideClasses['slick-active']) + }, + childOnClickOptions: childOnClickOptions + })); // if slide needs to be precloned or postcloned + + if (spec.infinite && spec.fade === false && childrenCount > spec.slidesToShow) { + var preCloneNo = childrenCount - index; + + if (preCloneNo <= getPreClones(spec) && childrenCount !== spec.slidesToShow) { + key = -preCloneNo; + + if (key >= startIndex) { + child = elem; + } + + slideClasses = getSlideClasses(_objectSpread2({}, spec, { + index: key + })); + preCloneSlides.push(_this2.cloneSlide(child, { + key: 'precloned' + getKey(child, key), + class: slideClasses, + style: childStyle, + attrs: { + tabIndex: '-1', + 'data-index': key, + 'aria-hidden': "".concat(!slideClasses['slick-active']) + }, + childOnClickOptions: childOnClickOptions + })); + } + + if (childrenCount !== spec.slidesToShow) { + key = childrenCount + index; + + if (key < endIndex) { + child = elem; + } + + slideClasses = getSlideClasses(_objectSpread2({}, spec, { + index: key + })); + postCloneSlides.push(_this2.cloneSlide(child, { + key: 'postcloned' + getKey(child, key), + class: slideClasses, + style: childStyle, + attrs: { + tabIndex: '-1', + 'data-index': key, + 'aria-hidden': "".concat(!slideClasses['slick-active']) + }, + childOnClickOptions: childOnClickOptions + })); + } + } + }, this); + + if (spec.rtl) { + return preCloneSlides.concat(slides, postCloneSlides).reverse(); + } else { + return preCloneSlides.concat(slides, postCloneSlides); + } + } + }, + render: function render() { + var h = arguments[0]; + var slides = this.renderSlides(this.$props, this.$slots.default); + return h("div", { + "class": { + 'slick-track': true, + 'slick-center': this.$props.centerMode + }, + "style": this.trackStyle + }, [slides]); + } + }); + // CONCATENATED MODULE: ./src/SliderTrack.vue?vue&type=script&lang=js& + /* harmony default export */ var src_SliderTrackvue_type_script_lang_js_ = (SliderTrackvue_type_script_lang_js_); + // EXTERNAL MODULE: ./src/SliderTrack.vue?vue&type=style&index=0&id=e4caeaf8&scoped=true&lang=css& + var SliderTrackvue_type_style_index_0_id_e4caeaf8_scoped_true_lang_css_ = __webpack_require__("6ea2"); + + // CONCATENATED MODULE: ./src/SliderTrack.vue + var SliderTrack_render, SliderTrack_staticRenderFns; + + + + + + /* normalize component */ + + var SliderTrack_component = normalizeComponent( + src_SliderTrackvue_type_script_lang_js_, + SliderTrack_render, + SliderTrack_staticRenderFns, + false, + null, + "e4caeaf8", + null + + ); + + /* harmony default export */ var SliderTrack = (SliderTrack_component.exports); + // CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js + function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) len = arr.length; + + for (var i = 0, arr2 = new Array(len); i < len; i++) { + arr2[i] = arr[i]; + } + + return arr2; + } + // CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js + + function _arrayWithoutHoles(arr) { + if (Array.isArray(arr)) return _arrayLikeToArray(arr); + } + // CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/iterableToArray.js + + + + + + + + + function _iterableToArray(iter) { + if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); + } + // EXTERNAL MODULE: ./node_modules/core-js/modules/es.function.name.js + var es_function_name = __webpack_require__("b0c0"); + + // EXTERNAL MODULE: ./node_modules/core-js/modules/es.regexp.to-string.js + var es_regexp_to_string = __webpack_require__("25f0"); + + // CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js + + + + + + + + function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if (typeof o === "string") return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) n = o.constructor.name; + if (n === "Map" || n === "Set") return Array.from(n); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); + } + // CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js + function _nonIterableSpread() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + // CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js + + + + + function _toConsumableArray(arr) { + return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); + } + // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/vuetify-loader/lib/loader.js??ref--19-0!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/SliderArrow.vue?vue&type=script&lang=js& + + + + + /* harmony default export */ var SliderArrowvue_type_script_lang_js_ = ({ + name: 'SliderArrow', + props: [].concat(_toConsumableArray(PROP_KEYS.ARROW), ['type']), + render: function render() { + var _this = this; + + var h = arguments[0]; + var classes = { + 'slick-arrow': true + }; + var clickable = true; + var arrow; + var option = { + currentSlide: this.currentSlide, + slideCount: this.slideCount + }; + + if (this.type === 'previous') { + classes['slick-prev'] = true; + + if (!this.infinite && (this.currentSlide === 0 || this.slideCount <= this.slidesToShow)) { + classes['slick-disabled'] = true; + clickable = false; + } + + option.key = '0'; + arrow = this.prevArrow ? this.prevArrow(option)[0] : h("button", { + "attrs": { + "type": "button", + "data-role": "none" + }, + "style": "display: block;" + }, ["Previous"]); + } else { + classes['slick-next'] = true; + + if (!canGoNext(this.$props)) { + classes['slick-disabled'] = true; + clickable = false; + } + + option.key = '1'; + arrow = this.nextArrow ? this.nextArrow(option)[0] : h("button", { + "attrs": { + "type": "button", + "data-role": "none" + }, + "style": "display: block;" + }, ["Next"]); + } + + setVNodeData(arrow, 'key', option.key); + vNodeUtils_mergeVNodeData(arrow, 'class', classes); + vNodeUtils_mergeVNodeData(arrow, 'on', { + click: function click() { + if (clickable) { + _this.$emit('arrowClicked', { + message: _this.type + }); + } + } + }); + return arrow; + } + }); + // CONCATENATED MODULE: ./src/SliderArrow.vue?vue&type=script&lang=js& + /* harmony default export */ var src_SliderArrowvue_type_script_lang_js_ = (SliderArrowvue_type_script_lang_js_); + // EXTERNAL MODULE: ./src/SliderArrow.vue?vue&type=style&index=0&id=21137603&scoped=true&lang=css& + var SliderArrowvue_type_style_index_0_id_21137603_scoped_true_lang_css_ = __webpack_require__("f013"); + + // CONCATENATED MODULE: ./src/SliderArrow.vue + var SliderArrow_render, SliderArrow_staticRenderFns; + + + + + + /* normalize component */ + + var SliderArrow_component = normalizeComponent( + src_SliderArrowvue_type_script_lang_js_, + SliderArrow_render, + SliderArrow_staticRenderFns, + false, + null, + "21137603", + null + + ); + + /* harmony default export */ var SliderArrow = (SliderArrow_component.exports); + // EXTERNAL MODULE: ./node_modules/core-js/modules/es.string.split.js + var es_string_split = __webpack_require__("1276"); + + // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/vuetify-loader/lib/loader.js??ref--19-0!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/SliderDots.vue?vue&type=script&lang=js& + + + + + + + + var getDotCount = function getDotCount(spec) { + var dots; + + if (spec.infinite) { + dots = Math.ceil(spec.slideCount / spec.slidesToScroll); + } else { + dots = Math.ceil((spec.slideCount - spec.slidesToShow) / spec.slidesToScroll) + 1; + } + + return dots; + }; + + /* harmony default export */ var SliderDotsvue_type_script_lang_js_ = ({ + name: 'SliderDots', + props: PROP_KEYS.DOT, + render: function render() { + var _this = this; + + var h = arguments[0]; + var dotCount = getDotCount({ + slideCount: this.slideCount, + slidesToScroll: this.slidesToScroll, + slidesToShow: this.slidesToShow, + infinite: this.infinite + }); // Apply join & split to Array to pre-fill it for IE8 + // + // Credit: http://stackoverflow.com/a/13735425/1849458 + + var dots = Array.apply(null, Array(dotCount + 1).join('0').split('')).map(function (x, i) { + var leftBound = i * _this.slidesToScroll; + var rightBound = i * _this.slidesToScroll + (_this.slidesToScroll - 1); + var className = { + 'slick-active': _this.currentSlide >= leftBound && _this.currentSlide <= rightBound + }; + var dotOptions = { + message: 'dots', + index: i, + slidesToScroll: _this.slidesToScroll, + currentSlide: _this.currentSlide + }; + var customPaging = _this.customPaging ? _this.customPaging(i)[0] : h("button", [i + 1]); + return h("li", { + "key": i, + "class": className, + "on": { + "click": function click() { + return _this.$emit('dotClicked', dotOptions); + } + } + }, [customPaging]); + }); + var wrapperStyle = { + display: 'block' + }; + + var wrapperClass = _defineProperty({}, this.dotsClass, true); + + return h("ul", { + "style": wrapperStyle, + "class": wrapperClass + }, [dots]); + } + }); + // CONCATENATED MODULE: ./src/SliderDots.vue?vue&type=script&lang=js& + /* harmony default export */ var src_SliderDotsvue_type_script_lang_js_ = (SliderDotsvue_type_script_lang_js_); + // CONCATENATED MODULE: ./src/SliderDots.vue + var SliderDots_render, SliderDots_staticRenderFns; + + + + + /* normalize component */ + + var SliderDots_component = normalizeComponent( + src_SliderDotsvue_type_script_lang_js_, + SliderDots_render, + SliderDots_staticRenderFns, + false, + null, + null, + null + + ); + + /* harmony default export */ var SliderDots = (SliderDots_component.exports); + // CONCATENATED MODULE: ./src/initialState.js + /* harmony default export */ var initialState = ({ + animating: false, + autoplaying: null, + currentDirection: 0, + currentLeft: null, + currentSlide: 0, + direction: 1, + dragging: false, + edgeDragged: false, + initialized: false, + lazyLoadedList: [], + listHeight: null, + listWidth: null, + scrolling: false, + slideHeight: null, + slideWidth: null, + swipeLeft: null, + swiped: false, + // used by swipeEvent. differentites between touch and swipe. + swiping: false, + touchObject: { + startX: 0, + startY: 0, + curX: 0, + curY: 0 + }, + trackStyle: {}, + trackWidth: 0 + }); + // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/vuetify-loader/lib/loader.js??ref--19-0!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/InnerSlider.vue?vue&type=script&lang=js& + + + + + + + + + + + + + + + + + + + + + + + + /* harmony default export */ var InnerSlidervue_type_script_lang_js_ = ({ + name: 'InnerSlider', + components: { + SliderTrack: SliderTrack, + SliderArrow: SliderArrow, + SliderDots: SliderDots + }, + mixins: [mixinPropsUpdated], + inheritAttrs: false, + props: _objectSpread2({}, defaultProps_props, { + unslick: { + type: Boolean, + default: false + }, + prevArrow: Function, + nextArrow: Function, + customPaging: Function + }), + data: function data() { + return _objectSpread2({}, initialState, { + currentSlide: this.initialSlide + }); + }, + computed: { + slideCount: function slideCount() { + return this.$slots.default.length; + }, + spec: function spec() { + return _objectSpread2({}, this.$props, {}, this.$data, { + slideCount: this.slideCount + }); + } + }, + created: function created() { + // non-reactive data + this.callbackTimers = []; + this.clickable = true; + this.debouncedResize = null; + this.ssrInit(); + this.$parent.$emit('init'); + + if (this.lazyLoad) { + var slidesToLoad = getOnDemandLazySlides(this.spec); + + if (slidesToLoad.length > 0) { + this.lazyLoadedList = this.lazyLoadedList.concat(slidesToLoad); + this.$parent.$emit('lazyLoad', slidesToLoad); + } + } + }, + mounted: function mounted() { + var _this = this; + + var spec = _objectSpread2({ + listRef: this.$refs.list, + trackRef: this.$refs.track, + children: this.$slots.default + }, this.$props); + + this.updateState(spec, true); + this.adaptHeight(); + + if (this.autoPlay) { + this.autoPlay('update'); + } + + if (this.lazyLoad === 'progressive') { + this.lazyLoadTimer = setInterval(this.progressiveLazyLoad, 1000); + } + + this.ro = new ResizeObserver_es["a" /* default */](function () { + if (_this.animating) { + _this.onWindowResized(false); // don't set trackStyle hence don't break animation + + + _this.callbackTimers.push(setTimeout(function () { + return _this.onWindowResized(); + }, _this.speed)); + } else { + _this.onWindowResized(); + } + }); + this.ro.observe(this.$refs.list); + Array.prototype.forEach.call(this.$refs.list.querySelectorAll('.slick-slide'), function (slide) { + slide.onfocus = _this.pauseOnFocus ? _this.onSlideFocus : null; + slide.onblur = _this.pauseOnFocus ? _this.onSlideBlur : null; + }); + + if (window.addEventListener) { + window.addEventListener('resize', this.onWindowResized); + } else { + window.attachEvent('onresize', this.onWindowResized); + } + }, + updated: function updated() { + this.checkImagesLoad(); + this.$parent.$emit('reInit'); + + if (this.lazyLoad) { + var slidesToLoad = getOnDemandLazySlides(_objectSpread2({}, this.$props, {}, this.$data)); + + if (slidesToLoad.length > 0) { + this.lazyLoadedList = this.lazyLoadedList.concat(slidesToLoad); + this.$parent.$emit('lazyLoad', slidesToLoad); + } + } + + this.adaptHeight(); + }, + beforeDestroy: function beforeDestroy() { + this.ro.unobserve(this.$refs.list); + + if (this.animationEndCallback) { + clearTimeout(this.animationEndCallback); + } + + if (this.lazyLoadTimer) { + clearInterval(this.lazyLoadTimer); + } + + if (this.callbackTimers.length) { + this.callbackTimers.forEach(function (timer) { + return clearTimeout(timer); + }); + this.callbackTimers = []; + } + + if (window.addEventListener) { + window.removeEventListener('resize', this.onWindowResized); + } else { + window.detachEvent('onresize', this.onWindowResized); + } + + if (this.autoplayTimer) { + clearInterval(this.autoplayTimer); + } + }, + methods: { + onPropsUpdated: function onPropsUpdated() { + var nextProps = this.$props; + + var spec = _objectSpread2({ + listRef: this.$refs.list, + trackRef: this.$refs.track, + children: this.$slots.default + }, nextProps, {}, this.$data); + + var setTrackStyle = false; + + for (var _i = 0, _Object$keys = Object.keys(this.$props); _i < _Object$keys.length; _i++) { + var key = _Object$keys[_i]; + + if (!nextProps.hasOwnProperty(key)) { + setTrackStyle = true; + break; + } + + if (_typeof(nextProps[key]) === 'object' || typeof nextProps[key] === 'function') { + continue; + } + + if (nextProps[key] !== this.$props[key]) { + setTrackStyle = true; + break; + } + } + + this.updateState(spec, setTrackStyle); + + if (this.currentSlide >= this.slideCount) { + this.changeSlide({ + message: 'index', + index: this.slideCount - nextProps.slidesToShow, + currentSlide: this.currentSlide + }); + } + + if (nextProps.autoplay) { + this.autoPlay('update'); + } else { + this.pause('paused'); + } + }, + updateState: function updateState(spec, setTrackStyle) { + var updatedState = initializedState(spec); + spec = _objectSpread2({}, spec, {}, updatedState, { + slideIndex: updatedState.currentSlide + }); + var targetLeft = getTrackLeft(spec); + spec = _objectSpread2({}, spec, { + left: targetLeft + }); + var trackStyle = innerSliderUtils_getTrackCSS(spec); + + if (setTrackStyle || this.slideCount !== spec.children.length) { + updatedState['trackStyle'] = trackStyle; + } + + Object.assign(this.$data, updatedState); + }, + adaptHeight: function adaptHeight() { + if (this.adaptiveHeight && this.$refs.list) { + var elem = this.$refs.list.querySelector("[data-index=\"".concat(this.currentSlide, "\"]")); + this.$refs.list.style.height = getHeight(elem) + 'px'; + } + }, + ssrInit: function ssrInit() { + var preClones = getPreClones(this.spec); + var postClones = getPostClones(this.spec); + + if (this.variableWidth) { + var trackWidth = [], + trackLeft = []; + var childrenWidths = []; + this.$slots.default.forEach(function (child) { + var _getStyle = vNodeUtils_getStyle(child), + width = _getStyle.width; + + childrenWidths.push(width); + trackWidth.push(width); + }); + + for (var i = 0; i < preClones; i++) { + trackLeft.push(childrenWidths[childrenWidths.length - 1 - i]); + trackWidth.push(childrenWidths[childrenWidths.length - 1 - i]); + } + + for (var _i2 = 0; _i2 < postClones; _i2++) { + trackWidth.push(childrenWidths[_i2]); + } + + for (var _i3 = 0; _i3 < this.currentSlide; _i3++) { + trackLeft.push(childrenWidths[_i3]); + } // filter undefined + + + trackWidth = trackWidth.filter(function (o) { + return o; + }); + trackLeft = trackLeft.filter(function (o) { + return o; + }); + var trackStyle = { + width: "calc(".concat(trackWidth.join(' + '), ")"), + left: "calc(".concat(trackLeft.map(function (o) { + return "-".concat(o); + }).join(' + '), ")") + }; + + if (this.centerMode) { + var currentWidth = childrenWidths[this.currentSlide]; + trackStyle.left = "calc(".concat(trackLeft.map(function (o) { + return "-".concat(o); + }).join(' + '), " + (100% - ").concat(currentWidth, ") / 2 )"); + } + + this.trackStyle = trackStyle; + } else { + var slideCount = preClones + postClones + this.slideCount; + + var _trackWidth = 100 / this.slidesToShow * slideCount; + + var slideWidth = 100 / slideCount; + + var _trackLeft = -slideWidth * (preClones + this.currentSlide) * _trackWidth / 100; + + if (this.centerMode) { + _trackLeft += (100 - slideWidth * _trackWidth / 100) / 2; + } + + this.slideWidth = slideWidth + '%'; + this.trackStyle = { + width: _trackWidth + '%', + left: _trackLeft + '%' + }; + } + }, + slideHandler: function slideHandler(index) { + var _this2 = this; + + var dontAnimate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + var asNavFor = this.asNavFor, + speed = this.speed; // capture currentslide before state is updated + + var currentSlide = this.currentSlide; + + var _slideHandler2 = innerSliderUtils_slideHandler(_objectSpread2({ + index: index + }, this.$props, {}, this.$data, { + trackRef: this.$refs.track, + useCSS: this.useCSS && !dontAnimate + })), + state = _slideHandler2.state, + nextState = _slideHandler2.nextState; + + if (!state) return; + this.$parent.$emit('beforeChange', currentSlide, state.currentSlide); + var slidesToLoad = state.lazyLoadedList.filter(function (value) { + return _this2.lazyLoadedList.indexOf(value) < 0; + }); + + if (slidesToLoad.length) { + this.$parent.$emit('lazyLoad', slidesToLoad); + } + + Object.assign(this.$data, state); + + if (asNavFor) { + asNavFor.goTo(index); + } + + if (!nextState) return; + this.animationEndCallback = setTimeout(function () { + var animating = nextState.animating, + firstBatch = _objectWithoutProperties(nextState, ["animating"]); + + Object.assign(_this2.$data, firstBatch); + + _this2.callbackTimers.push(setTimeout(function () { + _this2.animating = animating; + }, 10)); + + _this2.$parent.$emit('afterChange', state.currentSlide); // delete this.animationEndCallback + + + _this2.animationEndCallback = undefined; + }, speed); + }, + onWindowResized: function onWindowResized(setTrackStyle) { + var _this3 = this; + + if (this.debouncedResize) this.debouncedResize.cancel(); + this.debouncedResize = lodash_debounce_default()(function () { + return _this3.resizeWindow(setTrackStyle); + }, 50); + this.debouncedResize(); + }, + resizeWindow: function resizeWindow() { + var setTrackStyle = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; + + if (!(this.$refs.track && this.$refs.track.$el)) { + return; + } + + var spec = _objectSpread2({ + listRef: this.$refs.list, + trackRef: this.$refs.track, + children: this.$slots.default + }, this.$props, {}, this.$data); + + this.updateState(spec, setTrackStyle); + + if (this.autoplay) { + this.autoPlay('update'); + } else { + this.pause('paused'); + } // animating state should be cleared while resizing, otherwise autoplay stops working + + + this.animating = false; + clearTimeout(this.animationEndCallback); // delete this.animationEndCallback + + this.animationEndCallback = undefined; + }, + checkImagesLoad: function checkImagesLoad() { + var _this4 = this; + + var images = this.$refs.list.querySelectorAll('.slick-slide img'); + var imagesCount = images.length, + loadedCount = 0; + Array.prototype.forEach.call(images, function (image) { + var handler = function handler() { + return ++loadedCount && loadedCount >= imagesCount && _this4.onWindowResized(); + }; + + if (!image.onclick) { + image.onclick = function () { + return image.parentNode.focus(); + }; + } else { + var prevClickHandler = image.onclick; + + image.onclick = function () { + prevClickHandler(); + image.parentNode.focus(); + }; + } + + if (!image.onload) { + if (_this4.lazyLoad) { + image.onload = function () { + _this4.adaptHeight(); + + _this4.callbackTimers.push(setTimeout(_this4.onWindowResized, _this4.speed)); + }; + } else { + image.onload = handler; + + image.onerror = function () { + handler(); + + _this4.$parent.$emit('lazyLoadError'); + }; + } + } + }); + }, + progressiveLazyLoad: function progressiveLazyLoad() { + var slidesToLoad = []; + + var spec = _objectSpread2({}, this.$props, {}, this.$data); + + for (var index = this.currentSlide; index < this.slideCount + getPostClones(spec); index++) { + if (this.lazyLoadedList.indexOf(index) < 0) { + slidesToLoad.push(index); + break; + } + } + + for (var _index = this.currentSlide - 1; _index >= -getPreClones(spec); _index--) { + if (this.lazyLoadedList.indexOf(_index) < 0) { + slidesToLoad.push(_index); + break; + } + } + + if (slidesToLoad.length > 0) { + this.lazyLoadedList = this.lazyLoadedList.concat(slidesToLoad); + this.$parent.$emit('lazyLoad', slidesToLoad); + } else { + if (this.lazyLoadTimer) { + clearInterval(this.lazyLoadTimer); // delete this.lazyLoadTimer; + + this.lazyLoadTimer = undefined; + } + } + }, + clickHandler: function clickHandler(e) { + if (this.clickable === false) { + e.stopPropagation(); + e.preventDefault(); + } + + this.clickable = true; + }, + keyHandler: function keyHandler(e) { + var dir = innerSliderUtils_keyHandler(e, this.accessibility, this.rtl); + + dir !== '' && this.changeSlide({ + message: dir + }); + }, + changeSlide: function changeSlide(options) { + var dontAnimate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + + var spec = _objectSpread2({}, this.$props, {}, this.$data); + + var targetSlide = innerSliderUtils_changeSlide(spec, options); + + if (targetSlide !== 0 && !targetSlide) return; + + if (dontAnimate === true) { + this.slideHandler(targetSlide, dontAnimate); + } else { + this.slideHandler(targetSlide); + } + }, + swipeStart: function swipeStart(e) { + if (this.verticalSwiping) { + this.disableBodyScroll(); + } + + var state = innerSliderUtils_swipeStart(e, this.swipe, this.draggable); + + if (state !== '') { + Object.assign(this.$data, state); + } + }, + swipeMove: function swipeMove(e) { + var _this5 = this; + + var state = innerSliderUtils_swipeMove(e, _objectSpread2({}, this.$props, {}, this.$data, { + trackRef: this.$refs.track, + listRef: this.$refs.list, + slideIndex: this.currentSlide, + onEdge: function onEdge(e) { + return _this5.$parent.$emit('edge', e); + }, + swipeEvent: function swipeEvent(e) { + return _this5.$parent.$emit('swipe', e); + } + })); + + if (!state) return; + + if (state['swiping']) { + this.clickable = false; + } + + Object.assign(this.$data, state); + }, + swipeEnd: function swipeEnd(e) { + var state = innerSliderUtils_swipeEnd(e, _objectSpread2({}, this.$props, {}, this.$data, { + trackRef: this.$refs.track, + listRef: this.$refs.list, + slideIndex: this.currentSlide + })); + + if (!state) return; + var triggerSlideHandler = state['triggerSlideHandler']; // delete state["triggerSlideHandler"]; + + this.triggerSlideHandler = undefined; + Object.assign(this.$data, state); + if (triggerSlideHandler === undefined) return; + this.slideHandler(triggerSlideHandler); + + if (this.verticalSwiping) { + this.enableBodyScroll(); + } + }, + prev: function prev() { + var _this6 = this; + + // this and fellow methods are wrapped in setTimeout + // to make sure initialize setState has happened before + // any of such methods are called + this.callbackTimers.push(setTimeout(function () { + return _this6.changeSlide({ + message: 'previous' + }); + }, 0)); + }, + next: function next() { + var _this7 = this; + + this.callbackTimers.push(setTimeout(function () { + return _this7.changeSlide({ + message: 'next' + }); + }, 0)); + }, + goTo: function goTo(slide) { + var _this8 = this; + + var dontAnimate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + slide = Number(slide); + if (isNaN(slide)) return ''; + this.callbackTimers.push(setTimeout(function () { + return _this8.changeSlide({ + message: 'index', + index: slide, + currentSlide: _this8.currentSlide + }, dontAnimate); + }, 0)); + }, + play: function play() { + var nextIndex; + + if (this.rtl) { + nextIndex = this.currentSlide - this.slidesToScroll; + } else { + if (canGoNext(_objectSpread2({}, this.$props, {}, this.$data))) { + nextIndex = this.currentSlide + this.slidesToScroll; + } else { + return false; + } + } + + this.slideHandler(nextIndex); + }, + autoPlay: function autoPlay(playType) { + if (this.autoplayTimer) { + clearInterval(this.autoplayTimer); + } + + var autoplaying = this.autoplaying; + + if (playType === 'update') { + if (autoplaying === 'hovered' || autoplaying === 'focused' || autoplaying === 'paused') { + return; + } + } else if (playType === 'leave') { + if (autoplaying === 'paused' || autoplaying === 'focused') { + return; + } + } else if (playType === 'blur') { + if (autoplaying === 'paused' || autoplaying === 'hovered') { + return; + } + } + + this.autoplayTimer = setInterval(this.play, this.autoplaySpeed + 50); + this.autoplaying = 'playing'; + }, + pause: function pause(pauseType) { + if (this.autoplayTimer) { + clearInterval(this.autoplayTimer); + this.autoplayTimer = null; + } + + var autoplaying = this.autoplaying; + + if (pauseType === 'paused') { + this.autoplaying = 'paused'; + } else if (pauseType === 'focused') { + if (autoplaying === 'hovered' || autoplaying === 'playing') { + this.autoplaying = 'focused'; + } + } else { + // pauseType is 'hovered' + if (autoplaying === 'playing') { + this.autoplaying = 'hovered'; + } + } + }, + onDotsOver: function onDotsOver() { + this.autoplay && this.pause('hovered'); + }, + onDotsLeave: function onDotsLeave() { + this.autoplay && this.autoplaying === 'hovered' && this.autoPlay('leave'); + }, + onTrackOver: function onTrackOver() { + this.autoplay && this.pause('hovered'); + }, + onTrackLeave: function onTrackLeave() { + this.autoplay && this.autoplaying === 'hovered' && this.autoPlay('leave'); + }, + onSlideFocus: function onSlideFocus() { + this.autoplay && this.pause('focused'); + }, + onSlideBlur: function onSlideBlur() { + this.autoplay && this.autoplaying === 'focused' && this.autoPlay('blur'); + }, + selectHandler: function selectHandler(options) { + if (this.focusOnSelect) { + this.changeSlide(options); + } + } + }, + render: function render() { + var h = arguments[0]; + var className = { + 'slick-slider': true, + 'slick-initialized': true, + 'slick-vertical': this.vertical + }; + var trackProps = extractObject(this.spec, PROP_KEYS.TRACK); + trackProps = filterUndefined(_objectSpread2({}, trackProps)); + var pauseOnHover = this.pauseOnHover; + var trackNativeOn = filterUndefined({ + mouseenter: pauseOnHover ? this.onTrackOver : undefined, + mouseover: pauseOnHover ? this.onTrackOver : undefined, + mouseleave: pauseOnHover ? this.onTrackLeave : undefined + }); + var dots; + + if (this.dots === true && this.slideCount >= this.slidesToShow) { + var dotProps = extractObject(this.spec, PROP_KEYS.DOT); + var pauseOnDotsHover = this.pauseOnDotsHover; + var dotNativeOn = filterUndefined({ + mouseenter: pauseOnDotsHover ? this.onDotsLeave : undefined, + mouseover: pauseOnDotsHover ? this.onDotsOver : undefined, + mouseleave: pauseOnDotsHover ? this.onDotsLeave : undefined + }); + dots = h(SliderDots, { + "props": _objectSpread2({}, dotProps), + "nativeOn": _objectSpread2({}, dotNativeOn), + "on": { + "dotClicked": this.changeSlide + } + }); + } + + var prevArrow, nextArrow; + var arrowProps = extractObject(this.spec, PROP_KEYS.ARROW); + + if (this.arrows) { + prevArrow = h(SliderArrow, { + "props": _objectSpread2({}, _objectSpread2({}, arrowProps, { + type: 'previous' + })), + "on": { + "arrowClicked": this.changeSlide + } + }); + nextArrow = h(SliderArrow, { + "props": _objectSpread2({}, _objectSpread2({}, arrowProps, { + type: 'next' + })), + "on": { + "arrowClicked": this.changeSlide + } + }); + } + + var verticalHeightStyle = {}; + + if (this.vertical) { + verticalHeightStyle = { + height: "".concat(this.listHeight, "px") + }; + } + + var centerPaddingStyle = {}; + + if (this.vertical === false) { + if (this.centerMode === true) { + centerPaddingStyle = { + padding: '0px ' + this.centerPadding + }; + } + } else { + if (this.centerMode === true) { + centerPaddingStyle = { + padding: this.centerPadding + ' 0px' + }; + } + } + + var listStyle = _objectSpread2({}, this.$parent.$vnode.data.style); + + if (!this.unslick) { + listStyle = _objectSpread2({}, listStyle, {}, filterUndefinedOrNull(verticalHeightStyle), {}, centerPaddingStyle); + } + + var accessibility = this.accessibility, + dragging = this.dragging, + touchMove = this.touchMove; + var listOn = filterUndefined({ + click: this.clickHandler, + mousedown: touchMove ? this.swipeStart : undefined, + mousemove: dragging && touchMove ? this.swipeMove : undefined, + mouseup: touchMove ? this.swipeEnd : undefined, + mouseleave: dragging && touchMove ? this.swipeEnd : undefined, + touchstart: touchMove ? this.swipeStart : undefined, + touchmove: dragging && touchMove ? this.swipeMove : undefined, + touchend: touchMove ? this.swipeEnd : undefined, + touchcancel: dragging && touchMove ? this.swipeEnd : undefined, + keydown: accessibility ? this.keyHandler : undefined + }); + return h("div", { + "class": className, + "attrs": { + "dir": !this.unslick ? 'ltr' : false + } + }, [!this.unslick ? prevArrow : '', h("div", { + "ref": "list", + "class": 'slick-list', + "on": _objectSpread2({}, listOn), + "style": listStyle + }, [h(SliderTrack, { + "ref": "track", + "props": _objectSpread2({}, trackProps), + "nativeOn": _objectSpread2({}, trackNativeOn), + "on": { + "childClicked": this.selectHandler + } + }, [this.$slots.default])]), !this.unslick ? nextArrow : '', !this.unslick ? dots : '']); + } + }); + // CONCATENATED MODULE: ./src/InnerSlider.vue?vue&type=script&lang=js& + /* harmony default export */ var src_InnerSlidervue_type_script_lang_js_ = (InnerSlidervue_type_script_lang_js_); + // EXTERNAL MODULE: ./src/InnerSlider.vue?vue&type=style&index=0&id=3d1a4f76&scoped=true&lang=css& + var InnerSlidervue_type_style_index_0_id_3d1a4f76_scoped_true_lang_css_ = __webpack_require__("eaf9"); + + // CONCATENATED MODULE: ./src/InnerSlider.vue + var InnerSlider_render, InnerSlider_staticRenderFns; + + + + + + /* normalize component */ + + var InnerSlider_component = normalizeComponent( + src_InnerSlidervue_type_script_lang_js_, + InnerSlider_render, + InnerSlider_staticRenderFns, + false, + null, + "3d1a4f76", + null + + ); + + /* harmony default export */ var InnerSlider = (InnerSlider_component.exports); + // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/vuetify-loader/lib/loader.js??ref--19-0!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/VueSlickCarousel.vue?vue&type=script&lang=js& + + + + + + + + + + + + + + + + var enquire = canUseDOM() && __webpack_require__("8e95"); + + /* harmony default export */ var VueSlickCarouselvue_type_script_lang_js_ = ({ + name: 'VueSlickCarousel', + components: { + InnerSlider: InnerSlider + }, + mixins: [mixinPropsUpdated], + inheritAttrs: false, + props: defaultProps_props, + data: function data() { + return { + breakpoint: null + }; + }, + computed: { + settings: function settings() { + var _this = this; + + var props = filterUndefined(this.$props); + var settings; + var newProps; + + if (this.breakpoint) { + newProps = this.responsive.filter(function (resp) { + return resp.breakpoint === _this.breakpoint; + }); + settings = newProps[0].settings === 'unslick' ? 'unslick' : _objectSpread2({}, defaultValues, {}, props, {}, newProps[0].settings); + } else { + settings = _objectSpread2({}, defaultValues, {}, props); + } // force scrolling by one if centerMode is on + + + if (settings.centerMode) { + if (settings.slidesToScroll > 1 && "production" !== 'production') { + // eslint-disable-next-line no-console + console.warn("slidesToScroll should be equal to 1 in centerMode, you are using ".concat(settings.slidesToScroll)); + } + + settings.slidesToScroll = 1; + } // force showing one slide and scrolling by one if the fade mode is on + + + if (settings.fade) { + if (settings.slidesToShow > 1 && "production" !== 'production') { + // eslint-disable-next-line no-console + console.warn("slidesToShow should be equal to 1 when fade is true, you're using ".concat(settings.slidesToShow)); + } + + if (settings.slidesToScroll > 1 && "production" !== 'production') { + // eslint-disable-next-line no-console + console.warn("slidesToScroll should be equal to 1 when fade is true, you're using ".concat(settings.slidesToScroll)); + } + + settings.slidesToShow = 1; + settings.slidesToScroll = 1; + } // rows and slidesPerRow logic is handled here + + + if (settings.variableWidth && (settings.rows > 1 || settings.slidesPerRow > 1)) { + // eslint-disable-next-line no-console + console.warn("variableWidth is not supported in case of rows > 1 or slidesPerRow > 1"); + settings.variableWidth = false; + } + + return settings; + } + }, + created: function created() { + this.makeBreakpoints(); + }, + beforeDestroy: function beforeDestroy() { + this.clearBreakpoints(); + }, + methods: { + prev: function prev() { + this.$refs.innerSlider.prev(); + }, + next: function next() { + this.$refs.innerSlider.next(); + }, + goTo: function goTo(slide) { + var dontAnimate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + this.$refs.innerSlider.goTo(slide, dontAnimate); + }, + pause: function pause() { + this.$refs.innerSlider.pause('paused'); + }, + play: function play() { + this.$refs.innerSlider.autoPlay('play'); + }, + onPropsUpdated: function onPropsUpdated() { + this.clearBreakpoints(); + this.makeBreakpoints(); + }, + clearBreakpoints: function clearBreakpoints() { + this.responsiveMediaHandlers.forEach(function (obj) { + return enquire.unregister(obj.query, obj.handler); + }); + this.responsiveMediaHandlers = []; + }, + media: function media(query, handler) { + // javascript handler for css media query + // when not using server side rendering + if (!canUseDOM()) { + return; + } + + enquire.register(query, handler); + this.responsiveMediaHandlers.push({ + query: query, + handler: handler + }); + }, + makeBreakpoints: function makeBreakpoints() { + var _this2 = this; + + this.breakpoint = null; + this.responsiveMediaHandlers = []; // handles responsive breakpoints + + if (this.responsive) { + var breakpoints = this.responsive.map(function (breakpt) { + return breakpt.breakpoint; + }); // sort them in increasing order of their numerical value + + breakpoints.sort(function (x, y) { + return x - y; + }); + breakpoints.forEach(function (breakpoint, index) { + // media query for each breakpoint + var mediaQuery = json2mq_default()({ + minWidth: index === 0 ? 0 : breakpoints[index - 1] + 1, + maxWidth: breakpoint + }); + + _this2.media(mediaQuery, function () { + _this2.breakpoint = breakpoint; + }); + }); // Register media query for full screen. Need to support resize from small to large + // convert javascript object to media query string + + var query = json2mq_default()({ + minWidth: breakpoints.slice(-1)[0] + }); + this.media(query, function () { + _this2.breakpoint = null; + }); + } + } + }, + render: function render() { + var h = arguments[0]; + var settings = this.settings; + var children = this.$slots.default || []; + + if (settings === 'unslick') { + return h("div", { + "class": "regular slider" + }, [children]); + } + + settings.prevArrow = this.$scopedSlots.prevArrow; + settings.nextArrow = this.$scopedSlots.nextArrow; + settings.customPaging = this.$scopedSlots.customPaging; + children = children.filter(function (child) { + return !!child.tag; + }); + var newChildren = []; + var currentWidth = null; + + for (var i = 0; i < children.length; i += settings.rows * settings.slidesPerRow) { + var newSlide = []; + + for (var j = i; j < i + settings.rows * settings.slidesPerRow; j += settings.slidesPerRow) { + var row = []; + + for (var k = j; k < j + settings.slidesPerRow; k += 1) { + if (settings.variableWidth && vNodeUtils_getStyle(children[k])) { + currentWidth = vNodeUtils_getStyle(children[k]).width; + } + + if (k >= children.length) break; + var clonedVNode = cloneVNode(children[k]); + setVNodeData(clonedVNode, 'key', 100 * i + 10 * j + k); + vNodeUtils_mergeVNodeData(clonedVNode, 'attrs', { + tabIndex: -1 + }); + vNodeUtils_mergeVNodeData(clonedVNode, 'style', { + width: "".concat(100 / settings.slidesPerRow, "%"), + display: 'inline-block' + }); + row.push(clonedVNode); + } + + newSlide.push(h("div", { + "key": 10 * i + j + }, [row])); + } + + if (settings.variableWidth) { + newChildren.push(h("div", { + "key": i, + "style": { + width: currentWidth + } + }, [newSlide])); + } else { + newChildren.push(h("div", { + "key": i + }, [newSlide])); + } + } + + if (newChildren.length <= settings.slidesToShow) { + settings.unslick = true; + } + + return h(InnerSlider, { + "ref": "innerSlider", + "props": _objectSpread2({}, settings), + "key": Object.values(settings).join('') + }, [newChildren]); + } + }); + // CONCATENATED MODULE: ./src/VueSlickCarousel.vue?vue&type=script&lang=js& + /* harmony default export */ var src_VueSlickCarouselvue_type_script_lang_js_ = (VueSlickCarouselvue_type_script_lang_js_); + // CONCATENATED MODULE: ./src/VueSlickCarousel.vue + var VueSlickCarousel_render, VueSlickCarousel_staticRenderFns; + + + + + /* normalize component */ + + var VueSlickCarousel_component = normalizeComponent( + src_VueSlickCarouselvue_type_script_lang_js_, + VueSlickCarousel_render, + VueSlickCarousel_staticRenderFns, + false, + null, + null, + null + + ); + + /* harmony default export */ var VueSlickCarousel = (VueSlickCarousel_component.exports); + // CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/entry-lib.js + + + /* harmony default export */ var entry_lib = __webpack_exports__["default"] = (VueSlickCarousel); + + + + /***/ }), + + /***/ "fb6a": + /***/ (function(module, exports, __webpack_require__) { + + var $ = __webpack_require__("23e7"); + var isObject = __webpack_require__("861d"); + var isArray = __webpack_require__("e8b5"); + var toAbsoluteIndex = __webpack_require__("23cb"); + var toLength = __webpack_require__("50c4"); + var toIndexedObject = __webpack_require__("fc6a"); + var createProperty = __webpack_require__("8418"); + var wellKnownSymbol = __webpack_require__("b622"); + var arrayMethodHasSpeciesSupport = __webpack_require__("1dde"); + var arrayMethodUsesToLength = __webpack_require__("ae40"); + + var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('slice'); + var USES_TO_LENGTH = arrayMethodUsesToLength('slice', { ACCESSORS: true, 0: 0, 1: 2 }); + + var SPECIES = wellKnownSymbol('species'); + var nativeSlice = [].slice; + var max = Math.max; + + // `Array.prototype.slice` method + // https://tc39.github.io/ecma262/#sec-array.prototype.slice + // fallback for not array-like ES3 strings and DOM objects + $({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH }, { + slice: function slice(start, end) { + var O = toIndexedObject(this); + var length = toLength(O.length); + var k = toAbsoluteIndex(start, length); + var fin = toAbsoluteIndex(end === undefined ? length : end, length); + // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible + var Constructor, result, n; + if (isArray(O)) { + Constructor = O.constructor; + // cross-realm fallback + if (typeof Constructor == 'function' && (Constructor === Array || isArray(Constructor.prototype))) { + Constructor = undefined; + } else if (isObject(Constructor)) { + Constructor = Constructor[SPECIES]; + if (Constructor === null) Constructor = undefined; + } + if (Constructor === Array || Constructor === undefined) { + return nativeSlice.call(O, k, fin); + } + } + result = new (Constructor === undefined ? Array : Constructor)(max(fin - k, 0)); + for (n = 0; k < fin; k++, n++) if (k in O) createProperty(result, n, O[k]); + result.length = n; + return result; + } + }); + + + /***/ }), + + /***/ "fc6a": + /***/ (function(module, exports, __webpack_require__) { + + // toObject with fallback for non-array-like ES3 strings + var IndexedObject = __webpack_require__("44ad"); + var requireObjectCoercible = __webpack_require__("1d80"); + + module.exports = function (it) { + return IndexedObject(requireObjectCoercible(it)); + }; + + + /***/ }), + + /***/ "fdb2": + /***/ (function(module, exports, __webpack_require__) { + + // extracted by mini-css-extract-plugin + + /***/ }), + + /***/ "fdbc": + /***/ (function(module, exports) { + + // iterable DOM collections + // flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods + module.exports = { + CSSRuleList: 0, + CSSStyleDeclaration: 0, + CSSValueList: 0, + ClientRectList: 0, + DOMRectList: 0, + DOMStringList: 0, + DOMTokenList: 1, + DataTransferItemList: 0, + FileList: 0, + HTMLAllCollection: 0, + HTMLCollection: 0, + HTMLFormElement: 0, + HTMLSelectElement: 0, + MediaList: 0, + MimeTypeArray: 0, + NamedNodeMap: 0, + NodeList: 1, + PaintRequestList: 0, + Plugin: 0, + PluginArray: 0, + SVGLengthList: 0, + SVGNumberList: 0, + SVGPathSegList: 0, + SVGPointList: 0, + SVGStringList: 0, + SVGTransformList: 0, + SourceBufferList: 0, + StyleSheetList: 0, + TextTrackCueList: 0, + TextTrackList: 0, + TouchList: 0 + }; + + + /***/ }), + + /***/ "fdbf": + /***/ (function(module, exports, __webpack_require__) { + + var NATIVE_SYMBOL = __webpack_require__("4930"); + + module.exports = NATIVE_SYMBOL + // eslint-disable-next-line no-undef + && !Symbol.sham + // eslint-disable-next-line no-undef + && typeof Symbol.iterator == 'symbol'; + + + /***/ }) + + /******/ })["default"]; + }); + + }); + + var VueSlickCarousel = /*@__PURE__*/unwrapExports(vueSlickCarousel_umd); + + // + + var script = { + components: {VueSlickCarousel}, + name: 'ArticleCarousel', + data: () => ({ + settings: { + "dots": false, + "infinite": false, + "slidesToShow": 3, + "slidesToScroll": 1, + "responsive": [ + { + "breakpoint": 1200, + "settings": { + "slidesToShow": 1 + } + } + ] + } + }) + }; + + function normalizeComponent(template, style, script, scopeId, isFunctionalTemplate, moduleIdentifier /* server only */, shadowMode, createInjector, createInjectorSSR, createInjectorShadow) { + if (typeof shadowMode !== 'boolean') { + createInjectorSSR = createInjector; + createInjector = shadowMode; + shadowMode = false; + } + // Vue.extend constructor export interop. + const options = typeof script === 'function' ? script.options : script; + // render functions + if (template && template.render) { + options.render = template.render; + options.staticRenderFns = template.staticRenderFns; + options._compiled = true; + // functional template + if (isFunctionalTemplate) { + options.functional = true; + } + } + // scopedId + if (scopeId) { + options._scopeId = scopeId; + } + let hook; + if (moduleIdentifier) { + // server build + hook = function (context) { + // 2.3 injection + context = + context || // cached call + (this.$vnode && this.$vnode.ssrContext) || // stateful + (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext); // functional + // 2.2 with runInNewContext: true + if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') { + context = __VUE_SSR_CONTEXT__; + } + // inject component styles + if (style) { + style.call(this, createInjectorSSR(context)); + } + // register component module identifier for async chunk inference + if (context && context._registeredComponents) { + context._registeredComponents.add(moduleIdentifier); + } + }; + // used by ssr in case component is cached and beforeCreate + // never gets called + options._ssrRegister = hook; + } + else if (style) { + hook = shadowMode + ? function (context) { + style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot)); + } + : function (context) { + style.call(this, createInjector(context)); + }; + } + if (hook) { + if (options.functional) { + // register for functional component in vue file + const originalRender = options.render; + options.render = function renderWithStyleInjection(h, context) { + hook.call(context); + return originalRender(h, context); + }; + } + else { + // inject component registration as beforeCreate hook + const existing = options.beforeCreate; + options.beforeCreate = existing ? [].concat(existing, hook) : [hook]; + } + } + return script; + } + + /* script */ + const __vue_script__ = script; + + /* template */ + var __vue_render__ = function() { + var _vm = this; + var _h = _vm.$createElement; + var _c = _vm._self._c || _h; + return _c( + "vue-slick-carousel", + _vm._b( + { staticClass: "article-carousel" }, + "vue-slick-carousel", + _vm.settings, + false + ), + [_vm._t("default")], + 2 + ) + }; + var __vue_staticRenderFns__ = []; + __vue_render__._withStripped = true; + + /* style */ + const __vue_inject_styles__ = undefined; + /* scoped */ + const __vue_scope_id__ = undefined; + /* module identifier */ + const __vue_module_identifier__ = undefined; + /* functional template */ + const __vue_is_functional_template__ = false; + /* style inject */ + + /* style inject SSR */ + + /* style inject shadow dom */ + + + + const __vue_component__ = /*#__PURE__*/normalizeComponent( + { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ }, + __vue_inject_styles__, + __vue_script__, + __vue_scope_id__, + __vue_is_functional_template__, + __vue_module_identifier__, + false, + undefined, + undefined, + undefined + ); + + // + + var script$1 = { + components: {VueSlickCarousel}, + name: 'HeaderCarousel', + data: () => ({ + settings: { + "fade": true, + "dots": true, + } + }) + }; + + /* script */ + const __vue_script__$1 = script$1; + + /* template */ + var __vue_render__$1 = function() { + var _vm = this; + var _h = _vm.$createElement; + var _c = _vm._self._c || _h; + return _c( + "div", + { staticClass: "header-carousel mb-8 xl:mb-32" }, + [ + _c( + "vue-slick-carousel", + _vm._b({}, "vue-slick-carousel", _vm.settings, false), + [_vm._t("default")], + 2 + ) + ], + 1 + ) + }; + var __vue_staticRenderFns__$1 = []; + __vue_render__$1._withStripped = true; + + /* style */ + const __vue_inject_styles__$1 = undefined; + /* scoped */ + const __vue_scope_id__$1 = undefined; + /* module identifier */ + const __vue_module_identifier__$1 = undefined; + /* functional template */ + const __vue_is_functional_template__$1 = false; + /* style inject */ + + /* style inject SSR */ + + /* style inject shadow dom */ + + + + const __vue_component__$1 = /*#__PURE__*/normalizeComponent( + { render: __vue_render__$1, staticRenderFns: __vue_staticRenderFns__$1 }, + __vue_inject_styles__$1, + __vue_script__$1, + __vue_scope_id__$1, + __vue_is_functional_template__$1, + __vue_module_identifier__$1, + false, + undefined, + undefined, + undefined + ); + + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + + var script$2 = { + props: { + name: { + type: String, + default: "Kalendář" + }, + events: { + type: Array, + required: true, + }, + onShowMore: { + type: Function, + required: false, + }, + hasMore: { + type: Boolean, + default: true, + }, + showBanner: { + type: Boolean, + default: true, + }, + }, + filters: { + dateDay: (val) => { + return `${new Date(val).getDate()}.`; + } + } + }; + + /* script */ + const __vue_script__$2 = script$2; + + /* template */ + var __vue_render__$2 = function() { + var _vm = this; + var _h = _vm.$createElement; + var _c = _vm._self._c || _h; + return _c("div", { staticClass: "calendar grid grid-cols-4" }, [ + _vm.showBanner + ? _c("div", { staticClass: "col-span-4 xl:col-span-1" }, [ + _c( + "aside", + { staticClass: "banner bg-orange-300 text-white h-full" }, + [ + _c("i", { staticClass: "ico--calendar banner__icon" }), + _vm._v(" "), + _c("div", { staticClass: "banner__body" }, [ + _c("h1", { staticClass: "head-alt-md banner__cta" }, [ + _vm._v(_vm._s(_vm.name)) + ]), + _vm._v(" "), + _vm.onShowMore && _vm.hasMore + ? _c( + "button", + { + staticClass: + "btn btn--white btn--fullwidth sm:btn--autowidth mt-8", + on: { + click: function($event) { + return _vm.onShowMore() + } + } + }, + [ + _c("div", { staticClass: "btn__body" }, [ + _vm._v("Zobrazit další") + ]) + ] + ) + : _vm._e() + ]) + ] + ) + ]) + : _vm._e(), + _vm._v(" "), + _c( + "div", + { + class: { + "col-span-4 xl:col-span-3": _vm.showBanner, + "col-span-4": !_vm.showBanner + } + }, + _vm._l(_vm.events, function(event) { + return _c( + "div", + { + key: event.id, + staticClass: "grid grid-cols-12 items-center calendar-table-row", + class: { "calendar-table-row--standalone": !_vm.showBanner } + }, + [ + _c( + "div", + { + staticClass: + "col-span-2 text-orange-300 head-alt-md calendar-table-row__col" + }, + [ + _c("span", [ + _vm._v(_vm._s(_vm._f("dateDay")(event.startTimestamp))) + ]) + ] + ), + _vm._v(" "), + _c( + "div", + { + staticClass: + "col-span-8 grid grid-cols-3 col-gap-4 calendar-table-row__col", + class: { "calendar-table-row__col--norborder": !event.mapLink } + }, + [ + _c("div", { staticClass: "col-span-3 md:col-span-1" }, [ + _c("strong", { staticClass: "block" }, [ + _vm._v(_vm._s(event.startDateVerbose)) + ]), + _vm._v(" "), + _c("p", { staticClass: "font-light text-sm mt-1" }, [ + _vm._v( + _vm._s(event.allDay ? "Celý den" : event.startTimeVerbose) + ) + ]) + ]), + _vm._v(" "), + _c( + "div", + { staticClass: "col-span-3 md:col-span-2 mt-4 md:mt-0" }, + [ + event.link + ? _c( + "a", + { + staticClass: "font-bold block", + attrs: { + href: event.link, + target: "_blank", + rel: "noreferrer noopener" + } + }, + [_vm._v(_vm._s(event.title))] + ) + : _vm._e(), + _vm._v(" "), + !event.link + ? _c("strong", { staticClass: "block" }, [ + _vm._v(_vm._s(event.title)) + ]) + : _vm._e(), + _vm._v(" "), + event.description + ? _c("p", { staticClass: "font-light text-sm mt-1" }, [ + _vm._v(_vm._s(event.description)) + ]) + : _vm._e() + ] + ) + ] + ), + _vm._v(" "), + _c( + "div", + { + staticClass: + "col-span-2 text-center font-light calendar-table-row__col" + }, + [ + event.mapLink + ? _c( + "a", + { + staticClass: "icon-link", + attrs: { href: event.mapLink } + }, + [ + _c("i", { + staticClass: "ico--location text-violet-300 mr-1", + attrs: { "aria-hidden": "true" } + }), + _vm._v(" "), + _c("span", [_vm._v("Mapa")]) + ] + ) + : _vm._e() + ] + ) + ] + ) + }), + 0 + ) + ]) + }; + var __vue_staticRenderFns__$2 = []; + __vue_render__$2._withStripped = true; + + /* style */ + const __vue_inject_styles__$2 = undefined; + /* scoped */ + const __vue_scope_id__$2 = undefined; + /* module identifier */ + const __vue_module_identifier__$2 = undefined; + /* functional template */ + const __vue_is_functional_template__$2 = false; + /* style inject */ + + /* style inject SSR */ + + /* style inject shadow dom */ + + + + const __vue_component__$2 = /*#__PURE__*/normalizeComponent( + { render: __vue_render__$2, staticRenderFns: __vue_staticRenderFns__$2 }, + __vue_inject_styles__$2, + __vue_script__$2, + __vue_scope_id__$2, + __vue_is_functional_template__$2, + __vue_module_identifier__$2, + false, + undefined, + undefined, + undefined + ); + + const initialEvents = [ + { + id: 2, + start: "2020-07-08T10:00:00.000Z", + startTimestamp: new Date("2020-07-08T10:00:00.000Z").getTime(), + startDateVerbose: "středa 8. července 2020", + startTimeVerbose: "12:00", + allDay: false, + end: "2020-07-08T11:00:00.000Z", + title: "Pirátský oběd - Chrudim", + description: + "Pravidelné setkání pirátů při středečním obědě. Nejen o politice a s chutí.", + link: + "https://www.google.com/calendar/event?eid=Mmw1Y2RwMTByYm80Y204cWxsaW1maWJmcTJfMjAyMDA3MDhUMTAwMDAwWiA3cjY3M3JsaDI1NW9mb3JodjNvZWIybDBnMEBn" + }, + { + id: 15, + start: "2020-07-13T19:00:00.000Z", + startTimestamp: new Date("2020-07-13T19:00:00.000Z").getTime(), + startDateVerbose: "pondělí 13. července 2020", + startTimeVerbose: "21:00", + allDay: false, + end: "2020-07-13T19:30:00.000Z", + title: "Mumble - předsednictvo", + link: + "https://www.google.com/calendar/event?eid=YzVpM2FvaGc2MHAzY2I5aGM1aW1jYjlrNjBvbThiYjE2dGk2NGI5ajY4cjY0ZGhrNzVnamdjOWdjb18yMDIwMDcxM1QxOTAwMDBaIDdyNjczcmxoMjU1b2Zvcmh2M29lYjJsMGcwQGc" + }, + { + id: 3, + start: "2020-07-15T10:00:00.000Z", + startTimestamp: new Date("2020-07-15T10:00:00.000Z").getTime(), + startDateVerbose: "středa 15. července 2020", + startTimeVerbose: "12:00", + allDay: false, + end: "2020-07-15T11:00:00.000Z", + title: "Pirátský oběd - Chrudim", + description: + "Pravidelné setkání pirátů při středečním obědě. Nejen o politice a s chutí.", + link: + "https://www.google.com/calendar/event?eid=Mmw1Y2RwMTByYm80Y204cWxsaW1maWJmcTJfMjAyMDA3MTVUMTAwMDAwWiA3cjY3M3JsaDI1NW9mb3JodjNvZWIybDBnMEBn", + mapLink: "https://maps.google.com" + }, + { + id: 16, + start: "2020-07-20T19:00:00.000Z", + startTimestamp: new Date("2020-07-20T19:00:00.000Z").getTime(), + startDateVerbose: "pondělí 20. července 2020", + startTimeVerbose: "21:00", + allDay: false, + end: "2020-07-20T19:30:00.000Z", + title: "Mumble - předsednictvo", + link: + "https://www.google.com/calendar/event?eid=YzVpM2FvaGc2MHAzY2I5aGM1aW1jYjlrNjBvbThiYjE2dGk2NGI5ajY4cjY0ZGhrNzVnamdjOWdjb18yMDIwMDcyMFQxOTAwMDBaIDdyNjczcmxoMjU1b2Zvcmh2M29lYjJsMGcwQGc" + }, + { + id: 4, + start: "2020-07-22T10:00:00.000Z", + startTimestamp: new Date("2020-07-22T10:00:00.000Z").getTime(), + startDateVerbose: "středa 22. července 2020", + startTimeVerbose: "12:00", + allDay: false, + end: "2020-07-22T11:00:00.000Z", + title: "Pirátský oběd - Chrudim", + description: + "Pravidelné setkání pirátů při středečním obědě. Nejen o politice a s chutí.", + link: + "https://www.google.com/calendar/event?eid=Mmw1Y2RwMTByYm80Y204cWxsaW1maWJmcTJfMjAyMDA3MjJUMTAwMDAwWiA3cjY3M3JsaDI1NW9mb3JodjNvZWIybDBnMEBn" + }, + { + id: 17, + start: "2020-07-27T19:00:00.000Z", + startTimestamp: new Date("2020-07-27T19:00:00.000Z").getTime(), + startDateVerbose: "pondělí 27. července 2020", + startTimeVerbose: "21:00", + allDay: false, + end: "2020-07-27T19:30:00.000Z", + title: "Mumble - předsednictvo", + link: + "https://www.google.com/calendar/event?eid=YzVpM2FvaGc2MHAzY2I5aGM1aW1jYjlrNjBvbThiYjE2dGk2NGI5ajY4cjY0ZGhrNzVnamdjOWdjb18yMDIwMDcyN1QxOTAwMDBaIDdyNjczcmxoMjU1b2Zvcmh2M29lYjJsMGcwQGc" + }, + { + id: 5, + start: "2020-07-29T10:00:00.000Z", + startTimestamp: new Date("2020-07-29T10:00:00.000Z").getTime(), + startDateVerbose: "středa 29. července 2020", + startTimeVerbose: "12:00", + allDay: false, + end: "2020-07-29T11:00:00.000Z", + title: "Pirátský oběd - Chrudim", + description: + "Pravidelné setkání pirátů při středečním obědě. Nejen o politice a s chutí.", + link: + "https://www.google.com/calendar/event?eid=Mmw1Y2RwMTByYm80Y204cWxsaW1maWJmcTJfMjAyMDA3MjlUMTAwMDAwWiA3cjY3M3JsaDI1NW9mb3JodjNvZWIybDBnMEBn" + }, + { + id: 18, + start: "2020-08-03T19:00:00.000Z", + startTimestamp: new Date("2020-08-03T19:00:00.000Z").getTime(), + startDateVerbose: "pondělí 3. srpna 2020", + startTimeVerbose: "21:00", + allDay: false, + end: "2020-08-03T19:30:00.000Z", + title: "Mumble - předsednictvo", + link: + "https://www.google.com/calendar/event?eid=YzVpM2FvaGc2MHAzY2I5aGM1aW1jYjlrNjBvbThiYjE2dGk2NGI5ajY4cjY0ZGhrNzVnamdjOWdjb18yMDIwMDgwM1QxOTAwMDBaIDdyNjczcmxoMjU1b2Zvcmh2M29lYjJsMGcwQGc" + }, + { + id: 6, + start: "2020-08-05T10:00:00.000Z", + startTimestamp: new Date("2020-08-05T10:00:00.000Z").getTime(), + startDateVerbose: "středa 5. srpna 2020", + startTimeVerbose: "12:00", + allDay: false, + end: "2020-08-05T11:00:00.000Z", + title: "Pirátský oběd - Chrudim", + description: + "Pravidelné setkání pirátů při středečním obědě. Nejen o politice a s chutí.", + link: + "https://www.google.com/calendar/event?eid=Mmw1Y2RwMTByYm80Y204cWxsaW1maWJmcTJfMjAyMDA4MDVUMTAwMDAwWiA3cjY3M3JsaDI1NW9mb3JodjNvZWIybDBnMEBn" + } + ]; + + const moreEvents = [ + { + id: 19, + start: "2020-08-10T19:00:00.000Z", + startTimestamp: new Date("2020-08-10T19:00:00.000Z").getTime(), + startDateVerbose: "pondělí 10. srpna 2020", + startTimeVerbose: "21:00", + allDay: false, + end: "2020-08-10T19:30:00.000Z", + title: "Mumble - předsednictvo", + link: + "https://www.google.com/calendar/event?eid=YzVpM2FvaGc2MHAzY2I5aGM1aW1jYjlrNjBvbThiYjE2dGk2NGI5ajY4cjY0ZGhrNzVnamdjOWdjb18yMDIwMDgxMFQxOTAwMDBaIDdyNjczcmxoMjU1b2Zvcmh2M29lYjJsMGcwQGc" + }, + { + id: 7, + start: "2020-08-12T10:00:00.000Z", + startTimestamp: new Date("2020-08-12T10:00:00.000Z").getTime(), + startDateVerbose: "středa 12. srpna 2020", + startTimeVerbose: "12:00", + allDay: false, + end: "2020-08-12T11:00:00.000Z", + title: "Pirátský oběd - Chrudim", + description: + "Pravidelné setkání pirátů při středečním obědě. Nejen o politice a s chutí.", + link: + "https://www.google.com/calendar/event?eid=Mmw1Y2RwMTByYm80Y204cWxsaW1maWJmcTJfMjAyMDA4MTJUMTAwMDAwWiA3cjY3M3JsaDI1NW9mb3JodjNvZWIybDBnMEBn" + } + ]; + + var script$3 = { + data: () => ({ + events: initialEvents, + hasMore: true, + }), + methods: { + onShowMore() { + this.$data.events = [...initialEvents, ...moreEvents]; + this.$data.hasMore = false; + } + }, + render() { + return this.$scopedSlots.default({ + events: this.events, + hasMore: this.hasMore, + onShowMore: this.onShowMore, + }); + } + }; + + /* script */ + const __vue_script__$3 = script$3; + + /* template */ + + /* style */ + const __vue_inject_styles__$3 = undefined; + /* scoped */ + const __vue_scope_id__$3 = undefined; + /* module identifier */ + const __vue_module_identifier__$3 = undefined; + /* functional template */ + const __vue_is_functional_template__$3 = undefined; + /* style inject */ + + /* style inject SSR */ + + /* style inject shadow dom */ + + + + const __vue_component__$3 = /*#__PURE__*/normalizeComponent( + {}, + __vue_inject_styles__$3, + __vue_script__$3, + __vue_scope_id__$3, + __vue_is_functional_template__$3, + __vue_module_identifier__$3, + false, + undefined, + undefined, + undefined + ); + + const pageSize = 10; + + var script$4 = { + props: { + calendarId: { + type: String, + required: true, + }, + apiKey: { + type: String, + required: true, + } + }, + data() { + return { + events: [], + toShow: 7, + }; + }, + computed: { + displayedEvents() { + return this.events.slice(0, this.toShow); + }, + hasMore() { + return this.toShow < this.events.length; + }, + }, + methods: { + onShowMore() { + this.toShow += pageSize; + }, + loadEventsFromStorage() { + if (window.sessionStorage && window.sessionStorage['__pircal_' + this.calendarId]) { + return JSON.parse(window.sessionStorage['__pircal_' + this.calendarId]); + } + }, + + // Store events to sessionStorage if possible to save requests. + storeEventsToStorage() { + if (window.sessionStorage) { + window.sessionStorage['__pircal_' + this.calendarId] = JSON.stringify(this.events); + } + } + }, + mounted() { + const ev = this.loadEventsFromStorage(); + + if (! ev) { + const now = new Date(); + const timeMin = now.toISOString(); + const timeMax = new Date(+now + (1000 * 60 * 60 * 24 * 90)).toISOString(); // 90 days ahead + const reqUrl = `https://www.googleapis.com/calendar/v3/calendars/${this.calendarId}/events?key=${encodeURIComponent(this.apiKey)}&maxResults=150&timeMin=${encodeURIComponent(timeMin)}&timeMax=${encodeURIComponent(timeMax)}&sanitizeHtml=true&singleEvents=true&maxAtendees=1`; + + let counter = 0; + + fetch(reqUrl) + .then(response => { + if (!response.ok) { + throw new Error("Problem loading events from google"); + } + return response.json() + }) + .then(resp => { + this.events = resp.items + .map(e => { + const start = new Date(e.start.dateTime || e.start.date); + const end = new Date(e.end.dateTime || e.end.date); + + const startDateVerbose = start.toLocaleDateString('cs-CZ', {weekday: 'long', year: 'numeric', month: 'long', day: 'numeric'}); + const startTimeVerbose = start.getHours() + ':' + start.getMinutes().toString().padStart(2, '0'); + + const allDay = ! e.start.dateTime; + + return { + id: counter++, + start: start, + startTimestamp: start.getTime(), + startDateVerbose, + startTimeVerbose, + allDay, + end: end, + title: e.summary, + description: e.description, + link: e.htmlLink + }; + }) + .sort((e1, e2) => e1.start < e2.start ? -1 : 1); + + this.storeEventsToStorage(); + }); + } else { + this.events = ev; + } + }, + render() { + return this.$scopedSlots.default({ + events: this.displayedEvents, + hasMore: this.hasMore, + onShowMore: this.onShowMore, + }); + } + }; + + /* script */ + const __vue_script__$4 = script$4; + + /* template */ + + /* style */ + const __vue_inject_styles__$4 = undefined; + /* scoped */ + const __vue_scope_id__$4 = undefined; + /* module identifier */ + const __vue_module_identifier__$4 = undefined; + /* functional template */ + const __vue_is_functional_template__$4 = undefined; + /* style inject */ + + /* style inject SSR */ + + /* style inject shadow dom */ + + + + const __vue_component__$4 = /*#__PURE__*/normalizeComponent( + {}, + __vue_inject_styles__$4, + __vue_script__$4, + __vue_scope_id__$4, + __vue_is_functional_template__$4, + __vue_module_identifier__$4, + false, + undefined, + undefined, + undefined + ); + + // + + var script$5 = { + props: { + links: { + type: Object, + default: function () { + return { + "praha": "https://praha.pirati.cz", + "stredocesky": "https://stredocesky.pirati.cz", + "jihocesky": "https://jihocesky.pirati.cz", + "plzensky": "https://plzensky.pirati.cz", + "karlovarsky": "https://karlovarsky.pirati.cz", + "ustecky": "https://ustecky.pirati.cz", + "liberecky": "https://liberecky.pirati.cz", + "kralovehradecky": "https://kralovehradecky.pirati.cz", + "moravskoslezsky": "https://moravskoslezsky.pirati.cz", + "pardubicky": "https://pardubicky.pirati.cz", + "vysocina": "https://vysocina.pirati.cz", + "jihomoravsky": "https://jihomoravsky.pirati.cz", + "olomoucky": "https://olomoucky.pirati.cz", + "zlinsky": "https://zlinsky.pirati.cz" + }; + } + } + }, + methods: { + selectRegion(region) { + const href = this.$props.links[region.id]; + window.open(href, '_blank'); + } + }, + data() { + return { + current: null, + regions: [ + { + id: "jihocesky", + name: "Jihočeský kraj", + polygon: "M173.5,445.61L179.5,447.36L185.61599999999999,452.692L184.61599999999999,455.789L188.963,462.31L196.57,463.669L198.743,470.46099999999996L203.905,477.25299999999993L206.079,483.50199999999995L211.78400000000002,483.77299999999997L221.56500000000003,493.01L226.72700000000003,494.911L232.43300000000002,501.704L228.35800000000003,506.051L237.32400000000004,515.0169999999999H247.64800000000005L257.97200000000004,516.9179999999999L266.39400000000006,521.8089999999999L278.34800000000007,511.75599999999986L280.79300000000006,505.50799999999987L287.0420000000001,510.9419999999999L293.83400000000006,512.2999999999998L299.2680000000001,510.94199999999984L308.2340000000001,516.9189999999999L311.7660000000001,511.2139999999999L310.68000000000006,505.77999999999986L311.76700000000005,496.54299999999984L319.3740000000001,490.29499999999985L322.09100000000007,482.4159999999998L329.1550000000001,482.68699999999984L338.9360000000001,485.67499999999984L340.5660000000001,482.68699999999984L338.1210000000001,478.33999999999986L339.4790000000001,472.36199999999985L341.9240000000001,465.02599999999984L341.1090000000001,455.5169999999998L340.5660000000001,445.4639999999998L343.5540000000001,439.75899999999984L352.5200000000001,442.74699999999984L360.1270000000001,444.3779999999998L362.5720000000001,452.5279999999998L374.2550000000001,449.8109999999998L377.5150000000001,445.4629999999998L385.3940000000001,445.7349999999998L397.3490000000001,451.9829999999998L401.4240000000001,453.88499999999976L405.5010000000001,459.85699999999974L408.7510000000001,452.85699999999974L404.7510000000001,446.60699999999974L400.2510000000001,442.60699999999974L405.7510000000001,436.85699999999974L406.7510000000001,430.60699999999974L412.0010000000001,429.60699999999974L412.7510000000001,425.10699999999974L405.5010000000001,419.35699999999974L398.5010000000001,420.85699999999974L390.0010000000001,420.60699999999974L383.5010000000001,414.10699999999974L384.5010000000001,408.60699999999974L381.2510000000001,404.10699999999974L374.0010000000001,405.35699999999974L366.0010000000001,402.35699999999974L361.0010000000001,405.10699999999974L355.5010000000001,400.10699999999974L352.7510000000001,395.10699999999974L346.5010000000001,391.60699999999974L341.7510000000001,394.35699999999974L336.2510000000001,389.85699999999974L333.5010000000001,384.85699999999974L334.7510000000001,380.35699999999974L332.0010000000001,374.60699999999974V366.85699999999974L335.0010000000001,363.10699999999974L335.2510000000001,356.10699999999974L333.5010000000001,349.60699999999974L330.2510000000001,344.85699999999974L328.0010000000001,339.35699999999974L323.7510000000001,339.85699999999974L316.0010000000001,333.35699999999974L310.7510000000001,337.10699999999974L312.2510000000001,344.85699999999974L305.7510000000001,348.35699999999974L302.2510000000001,352.35699999999974L295.0010000000001,349.35699999999974L287.0010000000001,347.35699999999974L282.5010000000001,348.10699999999974L276.0010000000001,345.10699999999974L269.7510000000001,348.85699999999974C269.7510000000001,348.85699999999974,266.10300000000007,348.62199999999973,265.5010000000001,348.60699999999974S261.5010000000001,343.60699999999974,261.5010000000001,343.60699999999974H255.5010000000001L252.5010000000001,347.35699999999974L239.0010000000001,348.85699999999974L235.2510000000001,344.85699999999974H230.5010000000001L227.7510000000001,349.60699999999974L220.7510000000001,353.10699999999974L216.2510000000001,350.85699999999974L202.5010000000001,350.35699999999974L199.7510000000001,354.35699999999974L201.2510000000001,359.85699999999974V364.35699999999974L200.5010000000001,372.10699999999974L204.0010000000001,377.85699999999974L199.5010000000001,384.85699999999974L196.0010000000001,387.60699999999974V391.35699999999974L193.0010000000001,394.10699999999974L196.7510000000001,398.35699999999974L192.0010000000001,400.85699999999974L195.0010000000001,406.85699999999974L192.5010000000001,412.85699999999974L186.5010000000001,415.10699999999974L185.0010000000001,417.85699999999974L180.5010000000001,416.35699999999974L179.2510000000001,426.10699999999974L181.7510000000001,430.10699999999974L180.5010000000001,433.60699999999974L175.2510000000001,435.85699999999974L173.57600000000008,441.83199999999977L173.5,445.61Z" + }, + { + id: "plzensky", + name: "Plzeňský kraj", + polygon: "M151.027,246.771L147.637,255.059L141.986,256.566V265.042L134.452,259.39099999999996L126.541,258.44899999999996L111.472,268.24299999999994V273.89399999999995L107.61099999999999,277.75499999999994L101.30099999999999,274.6479999999999L98.09899999999999,276.1549999999999L91.883,272.38699999999994L84.34899999999999,275.58899999999994L78.981,280.95699999999994L73.99,276.5299999999999L69.469,280.2979999999999L62.355999999999995,280.0069999999999L54.477,291.9609999999999L54,299.11L45.784,306.63300000000004L52.033,313.696L59.64,318.858L59.097,326.737L64.259,332.71500000000003L63.987,340.05L72.138,345.75600000000003L71.32300000000001,354.721L72.68100000000001,360.969L79.20200000000001,364.501L84.90800000000002,370.479L89.25500000000001,377.81399999999996L97.13400000000001,379.98799999999994L99.85100000000001,378.08699999999993L106.91400000000002,379.44499999999994L115.88000000000001,385.96599999999995L116.96700000000001,393.30099999999993L124.84600000000002,401.17999999999995V404.9839999999999L132.181,410.68999999999994L133.53900000000002,416.3949999999999L138.43,419.9269999999999H145.222L151.743,426.4479999999999L157.72,435.1409999999999L158.535,444.6509999999999L169.674,451.9859999999999L173.501,445.6109999999999L173.576,441.8359999999999L175.251,435.8609999999999L180.501,433.6109999999999L181.751,430.1109999999999L179.251,426.1109999999999L180.501,416.3609999999999L185.001,417.8609999999999L186.501,415.1109999999999L192.501,412.8609999999999L195.001,406.8609999999999L192.001,400.8609999999999L196.751,398.3609999999999L193.001,394.1109999999999L196.001,391.3609999999999V387.6109999999999L199.501,384.8609999999999L204.001,377.8609999999999L200.501,372.1109999999999L201.251,364.3609999999999V359.8609999999999L199.751,354.3609999999999L202.501,350.3609999999999L199.251,344.8609999999999L199.501,338.8609999999999L200.751,334.3609999999999L197.501,331.8609999999999L194.001,327.3609999999999L195.751,322.3609999999999L191.751,318.1109999999999L197.001,314.3609999999999H202.501L207.251,308.6109999999999L205.001,304.1109999999999L207.501,299.8609999999999L205.251,293.8609999999999L210.001,289.1109999999999L208.751,285.3609999999999L209.251,278.8609999999999L205.001,276.1109999999999L200.001,275.1109999999999L199.751,271.1109999999999L194.751,272.1109999999999C194.751,272.1109999999999,189.695,265.40499999999986,189.501,265.3609999999999S185.001,267.1109999999999,185.001,267.1109999999999L180.501,264.8609999999999L176.501,262.6109999999999L175.751,258.3609999999999L169.001,257.8609999999999L165.001,260.3609999999999L161.501,257.1109999999999L164.251,253.61099999999988L161.95600000000002,250.7269999999999L155.175,246.7709999999999L151.027,246.771Z", + }, + { + id: "karlovarsky", + name: "Karlovarský kraj", + polygon: "M69.47,280.299L62.357,280.008V274.846L57.195,272.401L57.466,266.42400000000004L42.251,256.1L32.742,251.21000000000004L28.665999999999997,243.87400000000002L24.590999999999998,239.25500000000002L26.493,230.83300000000003L20.244,221.324L15.761,216.841L18.886,210.728L16.169999999999998,203.936H24.863999999999997L27.037,206.11V212.08700000000002H31.656L34.237,214.668L32.742000000000004,218.87900000000002L35.459,221.59600000000003V228.38800000000003L39.535000000000004,232.46400000000003L41.437000000000005,222.68300000000002C41.437000000000005,222.68300000000002,40.07900000000001,219.42200000000003,41.437000000000005,218.06400000000002S46.871,212.63000000000002,46.871,212.63000000000002L49.316,204.479L59.912000000000006,198.774V194.97L63.30800000000001,191.574L71.051,190.351L80.83200000000001,188.721L84.09200000000001,191.981L89.52600000000001,185.189L99.57900000000001,182.47199999999998L110.17500000000001,190.35099999999997L115.019,195.19499999999996H125.036L129.933,197.04499999999996C129.933,197.04499999999996,129.676,201.25999999999996,129.933,201.75399999999996S140.66899999999998,200.62399999999997,140.66899999999998,200.62399999999997L145.378,205.33299999999997L140.76299999999998,209.94799999999998L143.30599999999998,214.75099999999998L141.611,220.96599999999998L145.755,225.10999999999999L144.06,228.689L148.768,235.093L144.059,239.801L151.028,246.771L147.638,255.059L141.987,256.566V265.042L134.453,259.39099999999996L126.542,258.44899999999996L111.473,268.24299999999994V273.89399999999995L107.612,277.75499999999994L101.30199999999999,274.6479999999999L98.1,276.1549999999999L91.884,272.38699999999994L84.35,275.58899999999994L78.982,280.95699999999994L73.991,276.5299999999999L69.47,280.299Z", + }, + { + id: "jihomoravsky", + name: "Jihomoravský kraj", + polygon: "M546.667,336.777L540.5,330.61H522L518.333,336.61H506L502.75,339.86L501.5,344.61L506.75,348.11L505.25,351.11L500.25,354.11L503,360.61L500.75,365.36L502.75,370.36L503.25,379.36L493.5,383.86L491.75,387.86L487.25,390.86L491,395.61L487,398.86L485.75,403.36L491,408.61L485.25,412.11L486.75,417.11C486.75,417.11,491.12,419.697,491.25,420.36S489.5,423.61,489.5,423.61L485.75,424.61L483.5,430.11L478.75,428.86L475.75,433.61L470.25,436.36L464.5,434.61L460.25,437.11L454,432.86L447,435.86L444.75,441.11H438.75L435.5,445.61L432,446.61L429,452.36L423.25,448.11L417.75,453.86L413.25,450.61L408.75,452.86L405.5,459.86L409.03,460.409L416.09299999999996,461.223L424.24299999999994,467.201L432.39399999999995,468.016L434.29499999999996,464.755L442.44499999999994,465.57L454.3999999999999,473.992L455.7579999999999,478.34000000000003L471.51499999999993,487.033L490.26199999999994,486.762L504.66099999999994,489.479L510.09499999999997,483.22999999999996L513.083,475.08L523.136,474.537L527.483,479.155L537.536,480.78499999999997L538.8939999999999,487.578L544.0559999999999,485.947L553.0219999999999,491.382L561.1719999999999,489.208L566.6059999999999,492.74L569.3229999999999,506.324L573.6709999999998,505.781L576.9309999999998,494.37L579.1049999999998,486.491L588.0709999999998,475.351L590.2439999999998,467.74399999999997L593.5049999999998,466.38599999999997L598.3949999999998,461.496H603.5569999999998L613.6099999999998,465.84299999999996L622.3039999999997,471.00499999999994L630.9969999999997,465.29999999999995L638.3329999999997,470.18999999999994L644.8539999999997,468.55999999999995L651.6459999999997,462.3109999999999L649.4999999999998,459.61099999999993L645.7499999999998,454.11099999999993L639.4999999999998,452.61099999999993L639.2499999999998,448.61099999999993L633.4999999999998,445.11099999999993L626.9999999999998,447.61099999999993L621.4999999999998,442.61099999999993L616.2499999999998,442.86099999999993L616.4999999999998,437.11099999999993L608.2499999999998,436.11099999999993L601.9999999999998,432.61099999999993L602.7499999999998,426.86099999999993L599.7499999999998,423.61099999999993L591.4999999999998,426.86099999999993L587.7499999999998,422.11099999999993L592.7499999999998,416.86099999999993L597.2499999999998,413.86099999999993L597.9999999999998,408.86099999999993L591.2499999999998,408.11099999999993L592.7499999999998,402.86099999999993L589.7499999999998,397.61099999999993L593.3749999999998,392.73599999999993L589.4999999999998,386.11099999999993V382.36099999999993L586.3749999999998,379.23599999999993H579.5L578.5,373.86099999999993V368.86099999999993L572.5,365.11099999999993V360.61099999999993L568.625,356.73599999999993L566.25,351.61099999999993H560.75L557,355.86099999999993L561,359.86099999999993L565.125,363.98599999999993L560.75,370.36099999999993L557.75,373.36099999999993L550.25,367.86099999999993L553.75,364.36099999999993L549.25,358.36099999999993V351.86099999999993L554.25,346.61099999999993L548.5,344.86099999999993L543.75,344.61099999999993L546.667,336.777Z", + }, + { + id: "zlinsky", + name: "Zlínský kraj", + polygon: "M737.5,365.046L731.75,362.36L730.5,356.61L723.5,352.11L723,347.61L717.5,349.86H712.25L706.25,345.61L698.25,343.86L690.25,347.11L685.25,342.86H679.5L675.375,346.985L671.25,345.61L664.5,350.11V357.11C664.5,357.11,660.164,361.736,659.125,362.485S653.25,355.86,653.25,355.86L645.5,358.61L647.75,365.36L641,367.36L636,365.86L631.875,369.985L629,375.11L625.125,371.235L618.5,371.61L616.5,366.86L612.5,370.36L614.75,378.11L611,381.86L608.75,385.36L599.25,386.86L593.375,392.735L589.75,397.61L592.75,402.86L591.25,408.11L598,408.86L597.25,413.86L592.75,416.86L587.75,422.11L591.5,426.86L599.75,423.61L602.75,426.86L602,432.61L608.25,436.11L616.5,437.11L616.25,442.86L621.5,442.61L627,447.61L633.5,445.11L639.25,448.61L639.5,452.61L645.75,454.11L649.5,459.61L651.646,462.31H656.5369999999999L663.6009999999999,457.963L668.4909999999999,449.54L678.5439999999999,448.997L680.3099999999998,435.548L684.2489999999998,431.609L697.2899999999998,430.522L704.0829999999999,420.742V409.06L707.6139999999998,399.007V391.944L713.0479999999998,383.522L720.3839999999998,381.62L727.1759999999998,378.088L733.1539999999998,375.915L737.5,365.046Z", + }, + { + id: "vysocina", + name: "Kraj Vysočina", + polygon: "M502.75,339.86L495.5,332.61L489.667,332.44300000000004L482.5,323.94300000000004L468.5,320.77700000000004L466,314.94300000000004L459.333,315.11V311.44300000000004L452.5,315.77700000000004C452.5,315.77700000000004,452.729,321.25500000000005,452.5,321.44300000000004S444.833,318.77700000000004,444.833,318.77700000000004L441,316.77700000000004V311.77700000000004L435.833,309.11000000000007L431.833,308.27700000000004L427.66700000000003,303.94300000000004L420.66700000000003,299.44300000000004L411,299.61L402,292.61L396,293.11L392,296.36L392.5,302.36L386.75,302.11L384.75,306.36H379L375.75,309.36L371.75,308.36L368.75,310.11L368,314.11L364.25,317.61L364,323.36L371.75,327.11C371.75,327.11,372.032,331.726,372,332.36S367.25,335.61,367.25,335.61L363.5,333.86L361.25,337.86L356.75,337.11L350.25,337.36L342,336.11L336.5,341.61L336.25,346.86L333.5,349.61L335.25,356.11L335,363.11L332,366.86V374.61L334.75,380.36L333.5,384.86L336.25,389.86L341.75,394.36L346.5,391.61L352.75,395.11L355.5,400.11L361,405.11L366,402.36L374,405.36L381.25,404.11L384.5,408.61L383.5,414.11L390,420.61L398.5,420.86L405.5,419.36L412.75,425.11L412,429.61L406.75,430.61L405.75,436.86L400.25,442.61L404.75,446.61L408.75,452.86L413.25,450.61L417.75,453.86L423.25,448.11L429,452.36L432,446.61L435.5,445.61L438.75,441.11H444.75L447,435.86L454,432.86L460.25,437.11L464.5,434.61L470.25,436.36L475.75,433.61L478.75,428.86L483.5,430.11L485.75,424.61L489.5,423.61L491.25,420.36L486.75,417.11L485.25,412.11L491,408.61L485.75,403.36L487,398.86L491,395.61L487.25,390.86L491.75,387.86L493.5,383.86L503.25,379.36L502.75,370.36L500.75,365.36L503,360.61L500.25,354.11L505.25,351.11L506.75,348.11L501.5,344.61L502.75,339.86Z", + }, + { + id: "stredocesky", + name: "Středočeský kraj", + polygon: "M404.167,273.11L397.33399999999995,269.777L397.167,265.11L391.667,263.277L386,259.944L386.833,255.27700000000002L390.24800000000005,250.347L392.32000000000005,243.566L384.22100000000006,239.234L388.1770000000001,232.26500000000001L386.1050000000001,227.74400000000003L387.23500000000007,222.09400000000002L385.9170000000001,216.06600000000003L382.9030000000001,213.05200000000002L377.4410000000001,216.63100000000003L368.5880000000001,215.50100000000003V210.22700000000003L363.7850000000001,205.42400000000004L357.4750000000001,204.20000000000005L356.1570000000001,199.49100000000004L360.9600000000001,194.68800000000005L358.0410000000001,186.68300000000005L359.7360000000001,181.97400000000005L356.9110000000001,177.45300000000006L359.35700000000014,173.68500000000006L354.27200000000016,171.42500000000007V167.65800000000007L347.1610000000002,164.03200000000007L343.91200000000015,160.78300000000007H338.35500000000013L334.11700000000013,156.54500000000007L329.9730000000001,163.70200000000008L323.3800000000001,171.0480000000001L321.1200000000001,168.7880000000001L315.47000000000014,169.7290000000001V174.4380000000001L307.55900000000014,180.8420000000001L298.14100000000013,183.1020000000001L295.88100000000014,176.32100000000008L284.95300000000015,176.88600000000008L282.69300000000015,179.90100000000007L283.63500000000016,187.05900000000005H278.92600000000016L277.41900000000015,191.58000000000004H272.52200000000016L274.21700000000016,200.05600000000004L270.63800000000015,203.63500000000005L262.53900000000016,202.88200000000006L258.20600000000013,207.21500000000006H241.81900000000013L233.90800000000013,203.63600000000005L227.50400000000013,207.02600000000004V211.54700000000003L222.32400000000013,216.72700000000003H216.39100000000013L214.36600000000013,218.75100000000003L214.50800000000012,222.66000000000003L208.8570000000001,219.26900000000003L202.6420000000001,225.48400000000004L193.97700000000012,225.29600000000005L185.6890000000001,230.38200000000006L178.3430000000001,230.75800000000007L172.6920000000001,236.03200000000007L171.5620000000001,242.62400000000008L165.3460000000001,245.26100000000008L161.9560000000001,250.72300000000007L164.2510000000001,253.60700000000006L161.5010000000001,257.1070000000001L165.0010000000001,260.3570000000001L169.0010000000001,257.8570000000001L175.7510000000001,258.3570000000001L176.5010000000001,262.6070000000001L180.5010000000001,264.8570000000001L185.0010000000001,267.1070000000001L189.5010000000001,265.3570000000001L194.7510000000001,272.1070000000001L199.7510000000001,271.1070000000001L200.0010000000001,275.1070000000001L205.0010000000001,276.1070000000001L209.2510000000001,278.8570000000001L208.7510000000001,285.3570000000001L210.0010000000001,289.1070000000001L205.2510000000001,293.8570000000001L207.5010000000001,299.8570000000001L205.0010000000001,304.1070000000001L207.2510000000001,308.6070000000001L202.5010000000001,314.3570000000001H197L191.75,318.1070000000001L195.75,322.3570000000001L194,327.3570000000001L197.5,331.8570000000001L200.75,334.3570000000001L199.5,338.8570000000001L199.25,344.8570000000001L202.5,350.3570000000001L216.25,350.8570000000001L220.75,353.1070000000001L227.75,349.6070000000001L230.5,344.8570000000001H235.25L239,348.8570000000001L252.5,347.3570000000001L255.5,343.6070000000001H261.5L265.5,348.6070000000001L269.75,348.8570000000001L276,345.1070000000001L282.5,348.1070000000001L287,347.3570000000001L295,349.3570000000001L302.25,352.3570000000001L305.75,348.3570000000001L312.25,344.8570000000001L310.75,337.1070000000001L316,333.3570000000001L323.75,339.8570000000001L328,339.3570000000001L330.25,344.8570000000001L333.5,349.6070000000001L336.25,346.8570000000001L336.5,341.6070000000001L342,336.1070000000001L350.25,337.3570000000001L356.75,337.1070000000001L361.25,337.8570000000001L363.5,333.8570000000001L367.25,335.6070000000001L372,332.3570000000001L371.75,327.1070000000001L364,323.3570000000001L364.25,317.6070000000001L368,314.1070000000001L368.75,310.1070000000001L371.75,308.3570000000001L375.75,309.3570000000001L379,306.3570000000001H384.75L386.75,302.1070000000001L392.5,302.3570000000001L392,296.3570000000001L396,293.1070000000001L402,292.6070000000001L400,284.4410000000001L403.667,280.7740000000001L404.167,273.11ZM310,254.11L305.167,254.61L301.83399999999995,256.94300000000004L304.167,258.94300000000004L304.667,264.11L301.167,267.277L297.167,264.61L292,263.944L289.5,266.444L284.833,267.611L282.16600000000005,271.444L278.4990000000001,271.611L274.9990000000001,273.27799999999996L273.9990000000001,275.94499999999994L269.4990000000001,276.94499999999994L266.16600000000005,273.27799999999996L267.833,267.94499999999994L263.16600000000005,265.6119999999999L264.4990000000001,262.6119999999999L260.66600000000005,260.1119999999999L257.66600000000005,255.7789999999999L259.9990000000001,252.2789999999999L256.16600000000005,247.6119999999999L263.16600000000005,244.1119999999999L265.833,245.6119999999999L270.5,245.9449999999999L269.333,241.6119999999999L272.333,239.7789999999999L276.5,240.6119999999999L281.167,238.1119999999999L283.667,234.7789999999999L289.167,234.9459999999999L290.5,237.2789999999999L293.667,238.2789999999999L294.667,239.7789999999999L298.33399999999995,238.9459999999999L297.33399999999995,242.61299999999991L302.167,243.77999999999992L304.33399999999995,247.27999999999992H307.5009999999999L310.5009999999999,251.11299999999991L310,254.11Z", + }, + { + id: "praha", + name: "Hlavní město Praha", + polygon: "M256.167,247.61L263.167,244.11L265.83399999999995,245.61C265.83399999999995,245.61,270.00299999999993,246.41500000000002,270.5009999999999,245.943S269.33399999999995,241.61,269.33399999999995,241.61L272.33399999999995,239.77700000000002L276.5009999999999,240.61L281.1679999999999,238.11L283.6679999999999,234.77700000000002L289.1679999999999,234.94400000000002L290.5009999999999,237.27700000000002L293.6679999999999,238.27700000000002L294.6679999999999,239.77700000000002L298.33499999999987,238.94400000000002L297.33499999999987,242.61100000000002L302.1679999999999,243.77800000000002L304.33499999999987,247.27800000000002H307.50199999999984L310.50199999999984,251.11100000000002L310.00199999999984,254.11100000000002L305.1689999999998,254.61100000000002L301.8359999999998,256.944L304.1689999999998,258.944L304.6689999999998,264.111L301.1689999999998,267.27799999999996L297.1689999999998,264.611L292,263.944L289.5,266.444L284.833,267.611L282.16600000000005,271.444L278.4990000000001,271.611L274.9990000000001,273.27799999999996L273.9990000000001,275.94499999999994L269.4990000000001,276.94499999999994L266.16600000000005,273.27799999999996L267.833,267.94499999999994L263.16600000000005,265.6119999999999L264.4990000000001,262.6119999999999L260.66600000000005,260.1119999999999L257.66600000000005,255.7789999999999L259.9990000000001,252.2789999999999L256.167,247.61Z", + }, + { + id: "ustecky", + name: "Ústecký kraj", + polygon: "M110.174,190.351L119.683,185.189L119.412,177.85399999999998L122.67200000000001,174.593L132.453,172.963L140.604,174.04999999999998L143.864,168.07299999999998V163.72599999999997L146.58100000000002,158.83599999999998H149.841L151.471,163.72599999999997L155.546,162.36799999999997V156.39099999999996L158.128,153.80899999999997L159.62199999999999,149.86999999999998H163.42499999999998L165.05499999999998,155.03199999999998L169.402,157.749L177.82399999999998,151.772L178.367,141.72L182.30599999999998,137.781L186.789,140.09L192.22299999999998,135.20000000000002L195.755,138.73200000000003L202.27599999999998,135.20000000000002L209.611,134.38500000000002L211.24099999999999,138.18900000000002H214.23L219.11999999999998,133.29900000000004V125.69200000000004L225.36899999999997,124.60500000000003L229.71599999999998,120.25800000000004L235.421,123.79000000000003L244.11499999999998,119.17100000000003L247.647,115.63900000000004L254.982,116.18200000000004L258.514,109.11900000000004H263.404L265.306,111.29200000000004L275.087,107.76000000000005L276.174,100.96800000000005L268.02299999999997,98.25100000000005V93.08900000000004L259.873,91.45900000000005L262.861,86.02500000000005L265.578,78.96100000000004L273.729,82.76500000000004L275.631,84.66700000000004H280.52099999999996L288.128,81.95000000000005L293.018,86.84000000000005L297.909,91.45900000000005L298.18,97.43600000000005L294.105,104.22800000000005L303.34200000000004,102.59800000000006L301.71200000000005,112.10700000000006V116.45400000000005L295.31000000000006,118.69000000000005L294.36800000000005,126.03600000000006L287.96400000000006,123.58700000000006L280.8070000000001,122.64500000000007L282.3140000000001,128.67200000000005L277.5110000000001,133.47500000000005V137.33600000000004L273.3200000000001,141.52700000000004C273.3200000000001,141.52700000000004,269.2500000000001,147.21300000000005,269.3180000000001,148.26100000000005S272.7080000000001,153.72300000000004,272.7080000000001,153.72300000000004V158.80900000000005L279.8670000000001,170.67200000000005L284.9510000000001,176.88900000000007L282.6910000000001,179.90400000000005L283.6330000000001,187.06200000000004H278.9240000000001L277.4170000000001,191.58300000000003H272.5200000000001L274.2150000000001,200.05900000000003L270.6360000000001,203.63800000000003L262.5370000000001,202.88500000000005L258.20400000000006,207.21800000000005H241.81700000000006L233.90600000000006,203.63900000000004L227.50200000000007,207.02900000000002V211.55L222.32200000000006,216.73000000000002H216.38900000000007L214.36400000000006,218.75400000000002L214.50600000000006,222.663L208.85500000000005,219.27200000000002L202.64000000000004,225.48700000000002L193.97500000000005,225.29900000000004L185.68700000000004,230.38500000000005L178.34100000000004,230.76100000000005L172.69000000000003,236.03500000000005L171.56000000000003,242.62700000000007L165.34400000000002,245.26400000000007L161.95400000000004,250.72600000000006L155.17300000000003,246.77000000000007L151.02600000000004,246.77100000000007L144.05700000000004,239.80100000000007L148.76600000000005,235.09300000000007L144.05800000000005,228.68900000000008L145.75300000000004,225.11000000000007L141.60900000000004,220.96600000000007L143.30400000000003,214.75100000000006L140.76100000000002,209.94800000000006L145.37600000000003,205.33300000000006L140.66700000000003,200.62400000000005L129.93100000000004,201.75400000000005V197.04500000000004L125.03400000000003,195.19500000000005H115.01700000000004L110.174,190.351Z", + }, + { + id: "pardubicky", + name: "Pardubický kraj", + polygon: "M555.742,226.757L554,234.944L549.333,243.944L547.833,252.611L550.333,256.77799999999996L540.333,264.94499999999994V270.6119999999999L542.833,276.44499999999994L543.833,283.77899999999994L546.25,286.1959999999999L540.667,289.94499999999994L544.8330000000001,298.1119999999999L549.3330000000001,306.94499999999994V311.44499999999994L555.0000000000001,313.94499999999994V321.44499999999994L549.8330000000001,326.6119999999999V332.2789999999999L546.667,336.7789999999999L540.5,330.6119999999999H522L518.333,336.6119999999999H506L502.75,339.8619999999999L495.5,332.6119999999999L489.667,332.44499999999994L482.5,323.94499999999994L468.5,320.77899999999994L466,314.94499999999994L459.333,315.1119999999999V311.44499999999994L452.5,315.77899999999994V321.44499999999994L444.833,318.77899999999994L441,316.77899999999994V311.77899999999994L435.833,309.11199999999997L431.833,308.27899999999994L427.66700000000003,303.94499999999994L420.66700000000003,299.44499999999994L411,299.61L402,292.61L400,284.444L403.667,280.77700000000004L404.167,273.11000000000007L397.33399999999995,269.77700000000004L397.167,265.11000000000007L391.667,263.27700000000004L386,259.944L386.833,255.27700000000002L390.24800000000005,250.347L398.95900000000006,248.40300000000002L408.89500000000004,239.79900000000004L414.16900000000004,242.81300000000005C414.16900000000004,242.81300000000005,423.29800000000006,243.14300000000006,423.77400000000006,242.81300000000005S428.86000000000007,235.84400000000005,428.86000000000007,235.84400000000005H433.75700000000006V241.49500000000006L437.24100000000004,242.72000000000006L440.53700000000003,239.42400000000006L446.94100000000003,236.22200000000007L454.66400000000004,236.41000000000005L458.05500000000006,239.80000000000004V246.39300000000003H462.5760000000001L466.7200000000001,250.53700000000003L473.9720000000001,254.77500000000003L478.2100000000001,259.01300000000003L484.8020000000001,257.13000000000005H494.2200000000001L495.9150000000001,249.97300000000004L501.1890000000001,244.69900000000004L511.17100000000005,241.87400000000005V236.41200000000006H515.1260000000001L523.5210000000001,240.17100000000005L535.9080000000001,247.13600000000005L542.9710000000001,240.07300000000006L546.6390000000001,236.40500000000006L546.5030000000002,230.02000000000007L555.742,226.757Z", + }, + { + id: "kralovehradecky", + name: "Královéhradecký kraj", + polygon: "M401.151,127.863L409.302,128.406L418.267,132.481L420.984,135.198L427.233,136.285L434.025,132.481L436.74199999999996,138.458L440.54599999999994,146.88H445.43699999999995L452.49999999999994,144.16299999999998L456.84799999999996,152.313L456.304,157.475L463.097,152.585L467.715,147.966L475.86499999999995,153.67100000000002L479.941,153.943L481.299,147.966H492.438L506.294,161.55L501.67499999999995,165.626L500.58799999999997,173.505L491.895,176.765L479.397,186.546L480.484,191.98L487.54699999999997,200.13L493.525,197.142L496.921,200.53799999999998V204.749L500.792,208.62099999999998L505.75,208.01L511.456,218.063L519.335,224.31199999999998L520.693,234.36499999999998L523.521,240.16899999999998L515.126,236.41H511.171V241.87199999999999L501.18899999999996,244.69699999999997L495.91499999999996,249.97099999999998L494.21999999999997,257.128H484.80199999999996L478.21,259.01099999999997L473.972,254.77299999999997L466.71999999999997,250.53499999999997L462.57599999999996,246.39099999999996H458.05499999999995V239.8L454.66399999999993,236.41000000000003L446.9409999999999,236.22200000000004L440.5369999999999,239.42400000000004L437.24099999999993,242.72000000000003C437.24099999999993,242.72000000000003,434.0929999999999,241.62100000000004,433.75699999999995,241.49500000000003S433.75699999999995,235.84400000000002,433.75699999999995,235.84400000000002H428.85999999999996L423.77399999999994,242.81300000000002H414.1689999999999L408.8949999999999,239.799L398.95899999999995,248.40300000000002L390.24799999999993,250.347L392.31999999999994,243.566L384.22099999999995,239.234L388.17699999999996,232.26500000000001L386.10499999999996,227.74400000000003L387.23499999999996,222.09400000000002L385.917,216.06600000000003L382.90299999999996,213.05200000000002L377.441,216.63100000000003L368.58799999999997,215.50100000000003V210.22700000000003L363.78499999999997,205.42400000000004L357.47499999999997,204.20000000000005L356.157,199.49100000000004L360.96,194.68800000000005L358.041,186.68300000000005L359.736,181.97400000000005L356.911,177.45300000000006L359.357,173.68500000000006L367.26800000000003,178.77100000000007L374.425,174.06200000000007L385.35,177.82900000000006L388.552,182.72600000000006L393.449,179.90100000000007V174.81600000000006L399.288,171.04900000000006L403.809,175.57000000000005C403.809,175.57000000000005,413.317,173.60500000000005,413.415,173.49800000000005S413.415,169.91900000000004,413.415,169.91900000000004L407.764,164.26800000000003L410.778,158.24100000000004L407.011,154.47400000000005L408.517,150.33000000000004L405.316,142.60700000000003L407.19899999999996,134.69600000000003L401.151,127.863Z", + }, + { + id: "liberecky", + name: "Liberecký kraj", + polygon: "M401.151,127.863L407.197,134.697L405.314,142.608L408.51500000000004,150.33100000000002L407.00900000000007,154.47500000000002L410.77600000000007,158.24200000000002L407.76200000000006,164.269L413.41300000000007,169.92000000000002V173.49900000000002L403.8070000000001,175.57100000000003L399.28600000000006,171.05000000000004L393.44700000000006,174.81700000000004V179.90200000000004L388.55000000000007,182.72700000000003L385.34800000000007,177.83000000000004L374.42300000000006,174.06300000000005L367.2660000000001,178.77200000000005L359.3550000000001,173.68600000000004L354.2700000000001,171.42600000000004V167.65900000000005L347.1590000000001,164.03300000000004L343.9100000000001,160.78400000000005H338.35300000000007L334.11500000000007,156.54600000000005L329.97100000000006,163.70300000000006L323.37800000000004,171.04900000000006L321.11800000000005,168.78900000000007L315.4680000000001,169.73000000000008V174.43900000000008L307.5570000000001,180.84300000000007L298.13900000000007,183.10300000000007L295.8790000000001,176.32200000000006L284.9510000000001,176.88700000000006L279.8670000000001,170.67000000000004L272.7080000000001,158.80700000000004V153.72100000000003L269.3180000000001,148.25900000000004L273.3200000000001,141.52500000000003L277.5110000000001,137.33400000000003V133.47300000000004L282.3140000000001,128.67000000000004L280.8070000000001,122.64300000000004L287.96400000000006,123.58500000000004L294.36800000000005,126.03400000000003L295.31000000000006,118.68800000000003L301.71200000000005,116.45200000000003L318.557,121.61400000000003L323.99100000000004,113.73500000000003L334.04300000000006,113.19200000000002C334.04300000000006,113.19200000000002,340.65700000000004,114.42000000000002,341.1070000000001,114.00700000000002S342.7370000000001,104.49800000000002,342.7370000000001,104.49800000000002L344.9100000000001,95.80400000000002L340.29100000000005,91.18500000000002L344.63800000000003,86.83800000000002H351.973L355.777,90.37000000000002L361.75399999999996,87.11000000000001L365.01399999999995,92.81600000000002L369.90399999999994,90.64300000000001L375.33799999999997,97.16400000000002L372.893,102.59800000000001L375.60999999999996,111.02000000000001L380.364,115.77400000000002L384.847,120.25700000000002L385.39,128.13600000000002L387.156,129.90200000000002L393.269,124.33200000000002L401.151,127.863Z", + }, + { + id: "olomoucky", + name: "Olomoucký kraj", + polygon: "M617.687,214.259V224.60999999999999H612.75L608.25,229.10999999999999L598.25,235.60999999999999V242.60999999999999L594.75,246.10999999999999L597.5,251.10999999999999L591.5,259.61L589.75,267.36L593.875,271.485L590,277.86L588.75,285.36L592.375,288.985H597V294.36H603.25L607.25,298.36L614.5,296.36L620.5,305.11H625.5L629.75,307.36L634.75,303.86L639,308.11L644.5,305.11L652,309.11L650.25,317.61H658L660.75,325.11L666.75,327.11L671.875,332.235L671.25,337.36H676.75L679.5,342.86L675.375,346.985L671.25,345.61L664.5,350.11V357.11L659.125,362.485L653.25,355.86L645.5,358.61L647.75,365.36L641,367.36L636,365.86L631.875,369.985L629,375.11L625.125,371.235L618.5,371.61L616.5,366.86L612.5,370.36L614.75,378.11L611,381.86L608.75,385.36L599.25,386.86L593.375,392.735L589.5,386.11V382.36L586.375,379.235H579.5L578.5,373.86V368.86L572.5,365.11V360.61L568.625,356.735L566.25,351.61H560.75L557,355.86L561,359.86L565.125,363.985L560.75,370.36L557.75,373.36L550.25,367.86L553.75,364.36L549.25,358.36V351.86L554.25,346.61L548.5,344.86L543.75,344.61L546.667,336.777L549.8330000000001,332.277V326.61L555.0000000000001,321.44300000000004V313.94300000000004L549.3330000000001,311.44300000000004V306.94300000000004L544.8330000000001,298.11L540.667,289.94300000000004L546.25,286.194L543.833,283.77700000000004L542.833,276.44300000000004L540.333,270.61V264.94300000000004C540.333,264.94300000000004,550.221,257.03200000000004,550.333,256.77600000000007S547.833,252.60900000000007,547.833,252.60900000000007L549.333,243.94200000000006L554,234.94200000000006L555.742,226.75500000000005L564.435,222.67900000000006H571.228L571.4989999999999,214.25700000000006L567.016,209.77400000000006L562.534,208.00800000000007L559.273,196.32500000000007L552.21,192.52100000000007L556.014,185.18600000000006L564.436,187.35900000000007L570.6850000000001,188.71700000000007L581.009,191.70600000000007L585.22,195.9170000000001L592.4200000000001,193.60700000000008L593.5070000000001,200.67100000000008L599.2120000000001,205.0180000000001H607.9060000000001L610.0790000000001,212.62500000000009L617.687,214.259Z", + }, + { + id: "moravskoslezsky", + name: "Moravskoslezský kraj", + polygon: "M617.687,214.259V224.60999999999999H612.75L608.25,229.10999999999999L598.25,235.60999999999999V242.60999999999999L594.75,246.10999999999999L597.5,251.10999999999999L591.5,259.61L589.75,267.36L593.875,271.485L590,277.86L588.75,285.36L592.375,288.985H597V294.36H603.25L607.25,298.36L614.5,296.36L620.5,305.11H625.5L629.75,307.36L634.75,303.86L639,308.11L644.5,305.11L652,309.11L650.25,317.61H658L660.75,325.11L666.75,327.11L671.875,332.235L671.25,337.36H676.75L679.5,342.86H685.25L690.25,347.11L698.25,343.86L706.25,345.61L712.25,349.86H717.5L723,347.61L723.5,352.11L730.5,356.61L731.75,362.36L737.5,365.046L742.119,363.416L750.813,352.005L750.269,345.484L756.247,342.767L761.1379999999999,345.212L769.2879999999999,343.582L776.0799999999999,345.755L784.7739999999999,341.68L786.1319999999998,335.159L781.2409999999999,321.847L778.2529999999998,312.60999999999996H771.1889999999999L768.2009999999998,309.078L759.2349999999998,306.361L757.8769999999998,299.84L751.8989999999999,286.799L755.1599999999999,279.736L752.4429999999999,278.649L749.7259999999999,271.042L744.2919999999999,275.11699999999996L733.6959999999999,269.14L724.4579999999999,267.782L721.1979999999999,273.488L716.3069999999999,265.338L710.0579999999999,262.34900000000005L707.0699999999998,258.5450000000001L701.6359999999999,262.07700000000006L696.2019999999999,259.63200000000006L696.6089999999999,252.97500000000005L692.127,248.49300000000005L685.606,249.58000000000004L682.345,258.00200000000007C682.345,258.00200000000007,676.811,263.9390000000001,676.096,264.2510000000001S670.255,264.11500000000007,670.255,264.11500000000007L664.686,258.54600000000005L658.98,256.64400000000006L655.992,247.67900000000006L650.8299999999999,240.34300000000005L644.9879999999999,241.02300000000005L639.419,235.45300000000006V230.83400000000006L649.1999999999999,227.84500000000006L656.943,224.04100000000005V219.55800000000005L651.917,214.53200000000004L653.004,209.09800000000004L647.57,203.66400000000004L644.8520000000001,209.09800000000004L640.777,213.17300000000003L627.1930000000001,212.08600000000004L617.687,214.259Z", + }, + ] + }; + }, + }; + + /* script */ + const __vue_script__$5 = script$5; + + /* template */ + var __vue_render__$3 = function() { + var _vm = this; + var _h = _vm.$createElement; + var _c = _vm._self._c || _h; + return _c( + "div", + { staticClass: "region-map flex justify-center items-center" }, + [ + _c("div", { staticClass: "w-full max-w-xl block" }, [ + _c( + "svg", + { + attrs: { + "xmlns:xlink": "http://www.w3.org/1999/xlink", + xmlns: "http://www.w3.org/2000/svg", + id: "svgmapy", + version: "1.1", + viewBox: "0 75 800 500" + } + }, + [ + _c( + "g", + _vm._l(_vm.regions, function(region) { + return _c( + "a", + { + key: region.id, + attrs: { "xlink:href": "#" }, + on: { + mouseover: function($event) { + _vm.current = region; + }, + mouseout: function($event) { + _vm.current = null; + }, + click: function($event) { + return _vm.selectRegion(region) + } + } + }, + [ + _c("path", { + staticClass: "map-polygon", + class: { + "region-map__region": true, + "region-map__region--current": _vm.current === region + }, + attrs: { d: region.polygon } + }) + ] + ) + }), + 0 + ) + ] + ) + ]) + ] + ) + }; + var __vue_staticRenderFns__$3 = []; + __vue_render__$3._withStripped = true; + + /* style */ + const __vue_inject_styles__$5 = undefined; + /* scoped */ + const __vue_scope_id__$5 = undefined; + /* module identifier */ + const __vue_module_identifier__$5 = undefined; + /* functional template */ + const __vue_is_functional_template__$5 = false; + /* style inject */ + + /* style inject SSR */ + + /* style inject shadow dom */ + + + + const __vue_component__$5 = /*#__PURE__*/normalizeComponent( + { render: __vue_render__$3, staticRenderFns: __vue_staticRenderFns__$3 }, + __vue_inject_styles__$5, + __vue_script__$5, + __vue_scope_id__$5, + __vue_is_functional_template__$5, + __vue_module_identifier__$5, + false, + undefined, + undefined, + undefined + ); + + // + + var script$6 = { + components: {VueSlickCarousel}, + name: 'TwitterCarousel', + data: () => ({ + settings: { + "dots": false, + "infinite": false, + "slidesToShow": 4, + "slidesToScroll": 1, + "responsive": [ + { + "breakpoint": 1600, + "settings": { + "slidesToShow": 3 + } + }, + { + "breakpoint": 1200, + "settings": { + "slidesToShow": 3 + } + }, + { + "breakpoint": 900, + "settings": { + "slidesToShow": 2 + } + }, + { + "breakpoint": 500, + "settings": { + "slidesToShow": 1 + } + } + ] + } + }) + }; + + /* script */ + const __vue_script__$6 = script$6; + + /* template */ + var __vue_render__$4 = function() { + var _vm = this; + var _h = _vm.$createElement; + var _c = _vm._self._c || _h; + return _c( + "vue-slick-carousel", + _vm._b( + { staticClass: "twitter-carousel" }, + "vue-slick-carousel", + _vm.settings, + false + ), + [_vm._t("default")], + 2 + ) + }; + var __vue_staticRenderFns__$4 = []; + __vue_render__$4._withStripped = true; + + /* style */ + const __vue_inject_styles__$6 = undefined; + /* scoped */ + const __vue_scope_id__$6 = undefined; + /* module identifier */ + const __vue_module_identifier__$6 = undefined; + /* functional template */ + const __vue_is_functional_template__$6 = false; + /* style inject */ + + /* style inject SSR */ + + /* style inject shadow dom */ + + + + const __vue_component__$6 = /*#__PURE__*/normalizeComponent( + { render: __vue_render__$4, staticRenderFns: __vue_staticRenderFns__$4 }, + __vue_inject_styles__$6, + __vue_script__$6, + __vue_scope_id__$6, + __vue_is_functional_template__$6, + __vue_module_identifier__$6, + false, + undefined, + undefined, + undefined + ); + + // + // + // + // + // + // + // + // + // + // + // + // + + var script$7 = { + props: { + initial: { + default: () => {} + }, + syncLocation: { + type: Boolean, + default: false, + }, + locationParam: { + type: String, + default: "view", + } + }, + data() { + return { + views: this.$props.initial, + queryParams: null, + keyListener: e => { + // Esc + if (e.keyCode === 27) { + this.hideAllViews(); + } + } + }; + }, + watch: { + routeView() { + const queryParams = new URLSearchParams(window.location.search); + } + }, + methods: { + setView(viewId, show, hideOthers = false) { + if (hideOthers) { + Object.keys(this.$data.views).forEach(key => { + if (key !== viewId) { + this.setView(key, false); + } + }); + } + + this.$data.views[viewId] = show; + + if (show && this.$props.syncLocation) { + const queryParams = new URLSearchParams(window.location.search); + + queryParams.set(this.$props.locationParam, viewId); + history.pushState(null, null, "?" + queryParams.toString()); + } + }, + setViews(updates) { + this.$data.views = Object.assign({}, this.data.views, updates); + }, + toggleView(viewId) { + !this.isCurrentView(viewId) && this.setView(viewId, !this.isCurrentView(viewId), true); + }, + showView(viewId) { + this.setView(viewId, true, true); + }, + isCurrentView(viewId) { + return this.$data.views[viewId]; + }, + hideAllViews() { + Object.keys(this.$data.views).forEach(key => { + this.setView(key, false); + }); + } + }, + mounted() { + window.addEventListener('keydown', this.$data.keyListener); + + if (this.$props.syncLocation) { + const queryParams = new URLSearchParams(window.location.search); + const locationView = queryParams.get(this.$props.locationParam); + + if (locationView && Object.keys(this.$data.views).indexOf(locationView) !== -1) { + this.showView(locationView); + } + } + }, + destroyed() { + window.removeEventListener('keydown', this.$data.keyListener); + } + }; + + /* script */ + const __vue_script__$7 = script$7; + + /* template */ + var __vue_render__$5 = function() { + var _vm = this; + var _h = _vm.$createElement; + var _c = _vm._self._c || _h; + return _c( + "div", + [ + _vm._t("default", null, { + views: _vm.views, + isCurrentView: _vm.isCurrentView, + toggleView: _vm.toggleView, + showView: _vm.showView, + setView: _vm.setView + }) + ], + 2 + ) + }; + var __vue_staticRenderFns__$5 = []; + __vue_render__$5._withStripped = true; + + /* style */ + const __vue_inject_styles__$7 = undefined; + /* scoped */ + const __vue_scope_id__$7 = undefined; + /* module identifier */ + const __vue_module_identifier__$7 = undefined; + /* functional template */ + const __vue_is_functional_template__$7 = false; + /* style inject */ + + /* style inject SSR */ + + /* style inject shadow dom */ + + + + const __vue_component__$7 = /*#__PURE__*/normalizeComponent( + { render: __vue_render__$5, staticRenderFns: __vue_staticRenderFns__$5 }, + __vue_inject_styles__$7, + __vue_script__$7, + __vue_scope_id__$7, + __vue_is_functional_template__$7, + __vue_module_identifier__$7, + false, + undefined, + undefined, + undefined + ); + + // + + var script$8 = { + data() { + return { + show: false + }; + }, + props: { + href: { + type: String, + }, + label: { + type: String, + } + }, + methods: { + onMouseEnter() { + if (isLgScreenSize()) { + this.$data.show = true; + } + }, + onMouseLeave() { + if (isLgScreenSize()) { + this.$data.show = false; + } + }, + handleClick(evt) { + // On mobile screens, first click should just toggle and redir on second one + if (isLgScreenSize() || this.$data.show) { + if (this.$props.href) { + window.location = this.$props.href; + } + } + + this.$data.show = !this.$data.show; + } + } + }; + + /* script */ + const __vue_script__$8 = script$8; + + /* template */ + var __vue_render__$6 = function() { + var _vm = this; + var _h = _vm.$createElement; + var _c = _vm._self._c || _h; + return _c( + "div", + { on: { mouseenter: _vm.onMouseEnter, mouseleave: _vm.onMouseLeave } }, + [ + !_vm.href + ? _c( + "span", + { + staticClass: "navbar-menu__link navbar-menu__submenu-toggle", + class: { "navbar-menu__submenu-toggle--open": _vm.show }, + on: { click: _vm.handleClick } + }, + [_vm._v(_vm._s(_vm.label))] + ) + : _vm._e(), + _vm._v(" "), + _vm.href + ? _c( + "a", + { + staticClass: "navbar-menu__link navbar-menu__submenu-toggle", + class: { "navbar-menu__submenu-toggle--open": _vm.show }, + attrs: { href: _vm.href }, + on: { + click: function($event) { + $event.preventDefault(); + return _vm.handleClick($event) + } + } + }, + [_vm._v(_vm._s(_vm.label))] + ) + : _vm._e(), + _vm._v(" "), + _c( + "div", + { + staticClass: "navbar-menu__submenu-wrap", + class: { "navbar-menu__submenu-wrap--show": _vm.show } + }, + [_vm._t("default")], + 2 + ) + ] + ) + }; + var __vue_staticRenderFns__$6 = []; + __vue_render__$6._withStripped = true; + + /* style */ + const __vue_inject_styles__$8 = undefined; + /* scoped */ + const __vue_scope_id__$8 = undefined; + /* module identifier */ + const __vue_module_identifier__$8 = undefined; + /* functional template */ + const __vue_is_functional_template__$8 = false; + /* style inject */ + + /* style inject SSR */ + + /* style inject shadow dom */ + + + + const __vue_component__$8 = /*#__PURE__*/normalizeComponent( + { render: __vue_render__$6, staticRenderFns: __vue_staticRenderFns__$6 }, + __vue_inject_styles__$8, + __vue_script__$8, + __vue_scope_id__$8, + __vue_is_functional_template__$8, + __vue_module_identifier__$8, + false, + undefined, + undefined, + undefined + ); + + // + + var script$9 = { + data() { + return { + show: false, + parsedItems: JSON.parse(this.items), + }; + }, + props: { + href: { + type: String, + }, + label: { + type: String, + }, + items: { + type: String, + } + }, + methods: { + onMouseEnter() { + if (isLgScreenSize()) { + this.$data.show = true; + } + }, + onMouseLeave() { + if (isLgScreenSize()) { + this.$data.show = false; + } + }, + handleClick(evt) { + // On mobile screens, first click should just toggle and redir on second one + if (isLgScreenSize() || this.$data.show) { + if (this.$props.href) { + window.location = this.$props.href; + } + } + + this.$data.show = !this.$data.show; + } + } + }; + + /* script */ + const __vue_script__$9 = script$9; + + /* template */ + var __vue_render__$7 = function() { + var _vm = this; + var _h = _vm.$createElement; + var _c = _vm._self._c || _h; + return _c( + "div", + { on: { mouseenter: _vm.onMouseEnter, mouseleave: _vm.onMouseLeave } }, + [ + !_vm.href + ? _c( + "span", + { + staticClass: "navbar-menu__link navbar-menu__submenu-toggle", + class: { "navbar-menu__submenu-toggle--open": _vm.show }, + on: { click: _vm.handleClick } + }, + [_vm._v(_vm._s(_vm.label))] + ) + : _vm._e(), + _vm._v(" "), + _vm.href + ? _c( + "a", + { + staticClass: "navbar-menu__link navbar-menu__submenu-toggle", + class: { "navbar-menu__submenu-toggle--open": _vm.show }, + attrs: { href: _vm.href }, + on: { + click: function($event) { + $event.preventDefault(); + return _vm.handleClick($event) + } + } + }, + [_vm._v(_vm._s(_vm.label))] + ) + : _vm._e(), + _vm._v(" "), + _c( + "div", + { + staticClass: "navbar-menu__submenu-wrap", + class: { "navbar-menu__submenu-wrap--show": _vm.show } + }, + [ + _c( + "ul", + { staticClass: "navbar-menu__submenu" }, + _vm._l(_vm.parsedItems, function(item, index) { + return _c("li", { key: index }, [ + _c( + "a", + { + staticClass: "navbar-menu__link", + attrs: { href: item[1] } + }, + [_vm._v(_vm._s(item[0]))] + ) + ]) + }), + 0 + ) + ] + ) + ] + ) + }; + var __vue_staticRenderFns__$7 = []; + __vue_render__$7._withStripped = true; + + /* style */ + const __vue_inject_styles__$9 = undefined; + /* scoped */ + const __vue_scope_id__$9 = undefined; + /* module identifier */ + const __vue_module_identifier__$9 = undefined; + /* functional template */ + const __vue_is_functional_template__$9 = false; + /* style inject */ + + /* style inject SSR */ + + /* style inject shadow dom */ + + + + const __vue_component__$9 = /*#__PURE__*/normalizeComponent( + { render: __vue_render__$7, staticRenderFns: __vue_staticRenderFns__$7 }, + __vue_inject_styles__$9, + __vue_script__$9, + __vue_scope_id__$9, + __vue_is_functional_template__$9, + __vue_module_identifier__$9, + false, + undefined, + undefined, + undefined + ); + + var script$a = { + components: { + UiNavbarSubitem: __vue_component__$8, + UiNavbarSubitemReplacing: __vue_component__$9, + }, + data() { + return { + isLgScreenSize: isLgScreenSize(), + show: false, + resizeHandler: () => { + this.$data.isLgScreenSize = isLgScreenSize(); + }, + }; + }, + mounted() { + this.$nextTick(() => { + window.addEventListener("resize", this.$data.resizeHandler); + }); + }, + beforeDestroy() { + window.removeEventListener("resize", this.$data.resizeHandler); + } + }; + + /* script */ + const __vue_script__$a = script$a; + + /* template */ + + /* style */ + const __vue_inject_styles__$a = undefined; + /* scoped */ + const __vue_scope_id__$a = undefined; + /* module identifier */ + const __vue_module_identifier__$a = undefined; + /* functional template */ + const __vue_is_functional_template__$a = undefined; + /* style inject */ + + /* style inject SSR */ + + /* style inject shadow dom */ + + + + const __vue_component__$a = /*#__PURE__*/normalizeComponent( + {}, + __vue_inject_styles__$a, + __vue_script__$a, + __vue_scope_id__$a, + __vue_is_functional_template__$a, + __vue_module_identifier__$a, + false, + undefined, + undefined, + undefined + ); + + // + + var script$b = { + data() { + return { + isLgScreenSize: isLgScreenSize(), + show: false, + resizeHandler: () => { + this.$data.isLgScreenSize = isLgScreenSize(); + }, + }; + }, + props: { + href: { + type: String, + }, + label: { + type: String, + }, + labelclass: { + type: String, + }, + wrapperclass: { + type: String, + default: "", + }, + slotwrapperclass: { + type: String, + default: "", + } + }, + methods: { + handleClick() { + if (this.$props.href) { + window.location = this.$props.href; + } + + this.$data.show = !this.$data.show; + } + }, + mounted() { + this.$nextTick(() => { + window.addEventListener("resize", this.$data.resizeHandler); + }); + }, + beforeDestroy() { + window.removeEventListener("resize", this.$data.resizeHandler); + } + }; + + /* script */ + const __vue_script__$b = script$b; + + /* template */ + var __vue_render__$8 = function() { + var _vm = this; + var _h = _vm.$createElement; + var _c = _vm._self._c || _h; + return _c("div", { class: [_vm.wrapperclass, "footer-collapsible"] }, [ + _c( + "span", + { + staticClass: + "text-xl font-alt uppercase tracking-wide text-white footer-collapsible__toggle", + class: [ + _vm.labelclass, + _vm.show ? "footer-collapsible__toggle--open" : "" + ], + on: { click: _vm.handleClick } + }, + [_vm._v(_vm._s(_vm.label))] + ), + _vm._v(" "), + _c( + "div", + { + directives: [ + { + name: "show", + rawName: "v-show", + value: _vm.show || _vm.isLgScreenSize, + expression: "show || isLgScreenSize" + } + ], + class: [_vm.slotwrapperclass] + }, + [_vm._t("default")], + 2 + ) + ]) + }; + var __vue_staticRenderFns__$8 = []; + __vue_render__$8._withStripped = true; + + /* style */ + const __vue_inject_styles__$b = undefined; + /* scoped */ + const __vue_scope_id__$b = undefined; + /* module identifier */ + const __vue_module_identifier__$b = undefined; + /* functional template */ + const __vue_is_functional_template__$b = false; + /* style inject */ + + /* style inject SSR */ + + /* style inject shadow dom */ + + + + const __vue_component__$b = /*#__PURE__*/normalizeComponent( + { render: __vue_render__$8, staticRenderFns: __vue_staticRenderFns__$8 }, + __vue_inject_styles__$b, + __vue_script__$b, + __vue_scope_id__$b, + __vue_is_functional_template__$b, + __vue_module_identifier__$b, + false, + undefined, + undefined, + undefined + ); + + // + + var script$c = { + name: 'flipCountdown', + props: { + deadline: { + type: String, + }, + stop: { + type: Boolean, + }, + units: { + type: String, + default: 'days,hours,minutes,seconds' + }, + clockClasses: { + type: String, + default: 'text-6xl' + }, + slotClasses: { + type: String, + default: 'text-3xl' + } + }, + data() { + const uuid = Math.floor(Math.random() * 100); + return { + now: Math.trunc(new Date().getTime() / 1000), + date: null, + interval: null, + diff: 0, + show: false, + timeData: [ + { + current: 0, + previous: 0, + label: "Dní", + elementId: 'flip-card-days-' + uuid, + show: this.units.indexOf("days") !== -1, + }, + { + current: 0, + previous: 0, + label: "Hod", + elementId: 'flip-card-hours-' + uuid, + show: this.units.indexOf("hours") !== -1, + }, + { + current: 0, + previous: 0, + label: "Min", + elementId: 'flip-card-minutes-' + uuid, + show: this.units.indexOf("minutes") !== -1, + }, + { + current: 0, + previous: 0, + label: "Sek", + elementId: 'flip-card-seconds-' + uuid, + show: this.units.indexOf("seconds") !== -1, + }, + ], + }; + }, + created() { + if (!this.deadline) { + throw new Error("Missing props 'deadline'"); + } + + const endTime = this.deadline; + this.date = Math.trunc(Date.parse(endTime.replace(/-/g, '/')) / 1000); + + if (!this.date) { + throw new Error("Invalid props value, correct the 'deadline'"); + } + + this.interval = setInterval(() => { + this.now = Math.trunc(new Date().getTime() / 1000); + }, 1000); + }, + mounted() { + if (this.diff !== 0) { + this.show = true; + } + }, + watch: { + deadline(newVal, oldVal) { + const endTime = this.deadline; + this.date = Math.trunc(Date.parse(endTime.replace(/-/g, '/')) / 1000); + + if (!this.date) { + throw new Error("Invalid props value, correct the 'deadline'"); + } + }, + now(value) { + this.diff = this.date - value; + + if (this.diff <= 0 || this.stop) { + this.diff = 0; + this.updateTime(3, 0); + } else { + this.updateTime(0, Math.trunc(this.diff / 60 / 60 / 24)); + this.updateTime(1, Math.trunc(this.diff / 60 / 60) % 24); + this.updateTime(2, Math.trunc(this.diff / 60) % 60); + this.updateTime(3, Math.trunc(this.diff) % 60); + } + }, + }, + filters: { + twoDigits(value) { + if (value.toString().length <= 1) { + return '0' + value.toString(); + } + return value.toString(); + }, + }, + methods: { + updateTime(idx, newValue) { + if (idx >= this.timeData.length || newValue === undefined) { + return; + } + + const applyUpdate = () => { + const d = this.timeData[idx]; + const val = newValue < 0 ? 0 : newValue; + const el = document.querySelector(`#${d.elementId}`); + if (val !== d.current) { + d.previous = d.current; + d.current = val; + if (el) { + el.classList.remove('flip'); + void el.offsetWidth; + el.classList.add('flip'); + } + if (idx === 0) { + const els = el.querySelectorAll('span b'); + if (els) { + forEachNode(els, e => { + const cls = e.classList[0]; + if (newValue / 1000 >= 1) { + if (!cls.includes('-4digits')) { + const newCls = cls + '-4digits'; + e.classList.add(newCls); + e.classList.remove(cls); + } + } else { + if (cls.includes('-4digits')) { + const newCls = cls.replace('-4digits', ''); + e.classList.add(newCls); + e.classList.remove(cls); + } + } + }); + } + } + } + }; + + if (window['requestAnimationFrame']) { + this.frame = requestAnimationFrame(applyUpdate); + } else { + applyUpdate(); + } + }, + }, + beforeDestroy() { + if (window['cancelAnimationFrame']) { + cancelAnimationFrame(this.frame); + } + }, + destroyed() { + clearInterval(interval); + } + }; + + /* script */ + const __vue_script__$c = script$c; + + /* template */ + var __vue_render__$9 = function() { + var _vm = this; + var _h = _vm.$createElement; + var _c = _vm._self._c || _h; + return _c( + "div", + { staticClass: "flip-clock" }, + [ + _vm._l(_vm.timeData, function(data) { + return [ + _c( + "span", + { + directives: [ + { + name: "show", + rawName: "v-show", + value: data.show, + expression: "data.show" + } + ], + key: data.label, + staticClass: "flip-clock__piece", + attrs: { id: data.elementId } + }, + [ + _c( + "span", + { class: ["flip-clock__card", "flip-card", _vm.clockClasses] }, + [ + _c("b", { staticClass: "flip-card__top" }, [ + _vm._v(_vm._s(_vm._f("twoDigits")(data.current))) + ]), + _vm._v(" "), + _c("b", { + staticClass: "flip-card__bottom", + attrs: { "data-value": _vm._f("twoDigits")(data.current) } + }), + _vm._v(" "), + _c("b", { + staticClass: "flip-card__back", + attrs: { "data-value": _vm._f("twoDigits")(data.previous) } + }), + _vm._v(" "), + _c("b", { + staticClass: "flip-card__back-bottom", + attrs: { "data-value": _vm._f("twoDigits")(data.previous) } + }) + ] + ), + _vm._v(" "), + _c( + "span", + { class: ["flip-clock__slot", "font-alt", _vm.slotClasses] }, + [_vm._v(_vm._s(data.label))] + ) + ] + ) + ] + }) + ], + 2 + ) + }; + var __vue_staticRenderFns__$9 = []; + __vue_render__$9._withStripped = true; + + /* style */ + const __vue_inject_styles__$c = undefined; + /* scoped */ + const __vue_scope_id__$c = undefined; + /* module identifier */ + const __vue_module_identifier__$c = undefined; + /* functional template */ + const __vue_is_functional_template__$c = false; + /* style inject */ + + /* style inject SSR */ + + /* style inject shadow dom */ + + + + const __vue_component__$c = /*#__PURE__*/normalizeComponent( + { render: __vue_render__$9, staticRenderFns: __vue_staticRenderFns__$9 }, + __vue_inject_styles__$c, + __vue_script__$c, + __vue_scope_id__$c, + __vue_is_functional_template__$c, + __vue_module_identifier__$c, + false, + undefined, + undefined, + undefined + ); + + // + // + // + // + // + // + // + // + // + // + // + // + // + + var script$d = { + data: () => ({ + isDown: false, + startX: null, + scrollLeft: null + }), + methods: { + mousemove: function (e){ + if (!this.isDown) { return } + e.preventDefault(); + const distance = this.$refs.slider.getBoundingClientRect().left | null; + const x = e.pageX - distance; + const walk = x - this.startX; + this.$refs.slider.scrollLeft = this.scrollLeft - walk; + }, + mouseleave: function (){ + this.isDown = false; + }, + mouseup: function (){ + this.isDown = false; + }, + mousedown: function (e){ + this.isDown = true; + const distance = this.$refs.slider.getBoundingClientRect().left | null; + this.startX = e.pageX - distance; + this.scrollLeft = this.$refs.slider.scrollLeft; + } + } + }; + + /* script */ + const __vue_script__$d = script$d; + + /* template */ + var __vue_render__$a = function() { + var _vm = this; + var _h = _vm.$createElement; + var _c = _vm._self._c || _h; + return _c( + "div", + { + ref: "slider", + staticClass: "horizontal-scrolling draggable no-scrollbars", + class: { active: _vm.isDown }, + on: { + mousedown: _vm.mousedown, + mouseleave: _vm.mouseleave, + mouseup: _vm.mouseup, + mousemove: _vm.mousemove + } + }, + [_vm._t("default")], + 2 + ) + }; + var __vue_staticRenderFns__$a = []; + __vue_render__$a._withStripped = true; + + /* style */ + const __vue_inject_styles__$d = undefined; + /* scoped */ + const __vue_scope_id__$d = undefined; + /* module identifier */ + const __vue_module_identifier__$d = undefined; + /* functional template */ + const __vue_is_functional_template__$d = false; + /* style inject */ + + /* style inject SSR */ + + /* style inject shadow dom */ + + + + const __vue_component__$d = /*#__PURE__*/normalizeComponent( + { render: __vue_render__$a, staticRenderFns: __vue_staticRenderFns__$a }, + __vue_inject_styles__$d, + __vue_script__$d, + __vue_scope_id__$d, + __vue_is_functional_template__$d, + __vue_module_identifier__$d, + false, + undefined, + undefined, + undefined + ); + + var script$e = { + mounted() { + console.log(`Mounted generic Vue app in ` , this.$el); + } + }; + + /* script */ + const __vue_script__$e = script$e; + + /* template */ + + /* style */ + const __vue_inject_styles__$e = undefined; + /* scoped */ + const __vue_scope_id__$e = undefined; + /* module identifier */ + const __vue_module_identifier__$e = undefined; + /* functional template */ + const __vue_is_functional_template__$e = undefined; + /* style inject */ + + /* style inject SSR */ + + /* style inject shadow dom */ + + + + const __vue_component__$e = /*#__PURE__*/normalizeComponent( + {}, + __vue_inject_styles__$e, + __vue_script__$e, + __vue_scope_id__$e, + __vue_is_functional_template__$e, + __vue_module_identifier__$e, + false, + undefined, + undefined, + undefined + ); + + Vue.component("ui-article-carousel", __vue_component__); + Vue.component("ui-header-carousel", __vue_component__$1); + Vue.component("ui-calendar-renderer", __vue_component__$2); + Vue.component("ui-calendar-dummy-provider", __vue_component__$3); + Vue.component("ui-calendar-google-provider", __vue_component__$4); + Vue.component("ui-region-map", __vue_component__$5); + Vue.component("ui-twitter-carousel", __vue_component__$6); + Vue.component("ui-view-provider", __vue_component__$7); + Vue.component("ui-navbar", __vue_component__$a); + Vue.component("ui-footer-collapsible", __vue_component__$b); + Vue.component("ui-flip-clock", __vue_component__$c); + Vue.component("ui-horizontal-scrollable", __vue_component__$d); + + + const appFactory = (el, attrs) => { + // Bootstrap Vue.js. + new Vue({ + el, + components: { + UiApp: __vue_component__$e + } + }); + }; + + + /** + * Bootstrap Vue.js application at given Element instance. + * + * App properties are passed via data attributes, like: + * + * <div class="__vue-root" data-message="Hello" data-app="SomeApp"></div> + * + * @param {Element} el DOM Element + */ + function renderVueAppElement(el) { + const attrs = Object.assign({}, el.dataset); + return appFactory(el); + } + + + function init(event) { + // Initialize Vue.js apps. + forEachNode(document.querySelectorAll('.__js-root'), renderVueAppElement); + } + + document.addEventListener('DOMContentLoaded', init); + +}(Vue)); + +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsic2NyZWVucy5qcyIsInNvdXJjZS9qcy91dGlscy5qcyIsIm5vZGVfbW9kdWxlcy92dWUtc2xpY2stY2Fyb3VzZWwvZGlzdC92dWUtc2xpY2stY2Fyb3VzZWwudW1kLmpzIiwic291cmNlL2pzL2NvbXBvbmVudHMvYXJ0aWNsZXMvQXJ0aWNsZUNhcm91c2VsLnZ1ZSIsIm5vZGVfbW9kdWxlcy92dWUtcnVudGltZS1oZWxwZXJzL2Rpc3Qvbm9ybWFsaXplLWNvbXBvbmVudC5tanMiLCJzb3VyY2UvanMvY29tcG9uZW50cy9oZWFkZXIvSGVhZGVyQ2Fyb3VzZWwudnVlIiwic291cmNlL2pzL2NvbXBvbmVudHMvY2FsZW5kYXIvUmVuZGVyZXIudnVlIiwic291cmNlL2pzL2NvbXBvbmVudHMvY2FsZW5kYXIvRHVtbXlQcm92aWRlci52dWUiLCJzb3VyY2UvanMvY29tcG9uZW50cy9jYWxlbmRhci9Hb29nbGVQcm92aWRlci52dWUiLCJzb3VyY2UvanMvY29tcG9uZW50cy9SZWdpb25NYXAudnVlIiwic291cmNlL2pzL2NvbXBvbmVudHMvVHdpdHRlckNhcm91c2VsLnZ1ZSIsInNvdXJjZS9qcy9jb21wb25lbnRzL1ZpZXdQcm92aWRlci52dWUiLCJzb3VyY2UvanMvY29tcG9uZW50cy9uYXZiYXIvTmF2YmFyU3ViaXRlbS52dWUiLCJzb3VyY2UvanMvY29tcG9uZW50cy9uYXZiYXIvTmF2YmFyU3ViaXRlbVJlcGxhY2luZy52dWUiLCJzb3VyY2UvanMvY29tcG9uZW50cy9uYXZiYXIvTmF2YmFyLnZ1ZSIsInNvdXJjZS9qcy9jb21wb25lbnRzL2Zvb3Rlci9Gb290ZXJDb2xsYXBzaWJsZS52dWUiLCJzb3VyY2UvanMvY29tcG9uZW50cy9GbGlwQ2xvY2sudnVlIiwic291cmNlL2pzL2NvbXBvbmVudHMvSG9yaXpvbnRhbFNjcm9sbGFibGUudnVlIiwic291cmNlL2pzL2NvbXBvbmVudHMvVWlBcHAudnVlIiwic291cmNlL2pzL21haW4uanMiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSB7XG4gICdzbSc6ICc1NzZweCcsXG4gICdtZCc6ICc3NjhweCcsXG4gICdsZyc6ICc5OTJweCcsXG4gICd4bCc6ICcxMjAwcHgnLFxuICAnMnhsJzogJzEzNjZweCcsXG59O1xuIiwiaW1wb3J0IHNjcmVlbnMgZnJvbSBcIi4uLy4uL3NjcmVlbnNcIjtcblxuY29uc3QgbGdTY3JlZW5TaXplID0gcGFyc2VJbnQoc2NyZWVucy5sZy5yZXBsYWNlKFwicHhcIiwgXCJcIiksIDEwKTtcblxuZXhwb3J0IGNvbnN0IGZvckVhY2hOb2RlID0gZnVuY3Rpb24gKGFycmF5LCBjYWxsYmFjaywgc2NvcGUpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xuICAgIGNhbGxiYWNrLmNhbGwoc2NvcGUsIGFycmF5W2ldKTsgLy8gcGFzc2VzIGJhY2sgc3R1ZmYgd2UgbmVlZFxuICB9XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0V2luZG93V2lkdGgoKSB7XG4gIHJldHVybiBNYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggfHwgMCwgd2luZG93LmlubmVyV2lkdGggfHwgMCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0xnU2NyZWVuU2l6ZSgpIHtcbiAgcmV0dXJuIGdldFdpbmRvd1dpZHRoKCkgPj0gbGdTY3JlZW5TaXplO1xufVxuIiwiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1widnVlLXNsaWNrLWNhcm91c2VsXCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcInZ1ZS1zbGljay1jYXJvdXNlbFwiXSA9IGZhY3RvcnkoKTtcbn0pKCh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgPyBzZWxmIDogdGhpcyksIGZ1bmN0aW9uKCkge1xucmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0aTogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubCA9IHRydWU7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4vKioqKioqLyBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4vKioqKioqLyBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4vKioqKioqLyBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuLyoqKioqKi8gXHRcdHJldHVybiBucztcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuLyoqKioqKi8gXHRcdHJldHVybiBnZXR0ZXI7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCJmYjE1XCIpO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoe1xuXG4vKioqLyBcIjAwZWVcIjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIHdlbGxLbm93blN5bWJvbCA9IF9fd2VicGFja19yZXF1aXJlX18oXCJiNjIyXCIpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbnZhciB0ZXN0ID0ge307XG5cbnRlc3RbVE9fU1RSSU5HX1RBR10gPSAneic7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RyaW5nKHRlc3QpID09PSAnW29iamVjdCB6XSc7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiMDM2NlwiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgYUZ1bmN0aW9uID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjFjMGJcIik7XG5cbi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIHRoYXQsIGxlbmd0aCkge1xuICBhRnVuY3Rpb24oZm4pO1xuICBpZiAodGhhdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZm47XG4gIHN3aXRjaCAobGVuZ3RoKSB7XG4gICAgY2FzZSAwOiByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCk7XG4gICAgfTtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbiAoYSkge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSk7XG4gICAgfTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYik7XG4gICAgfTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYiwgYyk7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiMDQ5N1wiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG52YXIgY2FtZWwyaHlwaGVuID0gZnVuY3Rpb24gKHN0cikge1xuICByZXR1cm4gc3RyXG4gICAgICAgICAgLnJlcGxhY2UoL1tBLVpdL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgcmV0dXJuICctJyArIG1hdGNoLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAudG9Mb3dlckNhc2UoKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY2FtZWwyaHlwaGVuO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIwNTdmXCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciB0b0luZGV4ZWRPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiZmM2YVwiKTtcbnZhciBuYXRpdmVHZXRPd25Qcm9wZXJ0eU5hbWVzID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjI0MWNcIikuZjtcblxudmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbnZhciB3aW5kb3dOYW1lcyA9IHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzXG4gID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KSA6IFtdO1xuXG52YXIgZ2V0V2luZG93TmFtZXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gbmF0aXZlR2V0T3duUHJvcGVydHlOYW1lcyhpdCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHdpbmRvd05hbWVzLnNsaWNlKCk7XG4gIH1cbn07XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIGJ1Z2d5IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHdpdGggaWZyYW1lIGFuZCB3aW5kb3dcbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KSB7XG4gIHJldHVybiB3aW5kb3dOYW1lcyAmJiB0b1N0cmluZy5jYWxsKGl0KSA9PSAnW29iamVjdCBXaW5kb3ddJ1xuICAgID8gZ2V0V2luZG93TmFtZXMoaXQpXG4gICAgOiBuYXRpdmVHZXRPd25Qcm9wZXJ0eU5hbWVzKHRvSW5kZXhlZE9iamVjdChpdCkpO1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIwNmNmXCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBERVNDUklQVE9SUyA9IF9fd2VicGFja19yZXF1aXJlX18oXCI4M2FiXCIpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImQxZTdcIik7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjVjNmNcIik7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImZjNmFcIik7XG52YXIgdG9QcmltaXRpdmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiYzA0ZVwiKTtcbnZhciBoYXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiNTEzNVwiKTtcbnZhciBJRThfRE9NX0RFRklORSA9IF9fd2VicGFja19yZXF1aXJlX18oXCIwY2ZiXCIpO1xuXG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvclxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JbmRleGVkT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXMoTywgUCkpIHJldHVybiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoIXByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmYuY2FsbChPLCBQKSwgT1tQXSk7XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIjA3YWNcIjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyICQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiMjNlN1wiKTtcbnZhciAkdmFsdWVzID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjZmNTNcIikudmFsdWVzO1xuXG4vLyBgT2JqZWN0LnZhbHVlc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3QudmFsdWVzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSB9LCB7XG4gIHZhbHVlczogZnVuY3Rpb24gdmFsdWVzKE8pIHtcbiAgICByZXR1cm4gJHZhbHVlcyhPKTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiMGNmYlwiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgREVTQ1JJUFRPUlMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiODNhYlwiKTtcbnZhciBmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oXCJkMDM5XCIpO1xudmFyIGNyZWF0ZUVsZW1lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiY2MxMlwiKTtcblxuLy8gVGhhbmsncyBJRTggZm9yIGhpcyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjcmVhdGVFbGVtZW50KCdkaXYnKSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9XG4gIH0pLmEgIT0gNztcbn0pO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIjEyNzZcIjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBmaXhSZWdFeHBXZWxsS25vd25TeW1ib2xMb2dpYyA9IF9fd2VicGFja19yZXF1aXJlX18oXCJkNzg0XCIpO1xudmFyIGlzUmVnRXhwID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjQ0ZTdcIik7XG52YXIgYW5PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiODI1YVwiKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjFkODBcIik7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjQ4NDBcIik7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjhhYTVcIik7XG52YXIgdG9MZW5ndGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiNTBjNFwiKTtcbnZhciBjYWxsUmVnRXhwRXhlYyA9IF9fd2VicGFja19yZXF1aXJlX18oXCIxNGMzXCIpO1xudmFyIHJlZ2V4cEV4ZWMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiOTI2M1wiKTtcbnZhciBmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oXCJkMDM5XCIpO1xuXG52YXIgYXJyYXlQdXNoID0gW10ucHVzaDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbnZhciBNQVhfVUlOVDMyID0gMHhGRkZGRkZGRjtcblxuLy8gYmFiZWwtbWluaWZ5IHRyYW5zcGlsZXMgUmVnRXhwKCd4JywgJ3knKSAtPiAveC95IGFuZCBpdCBjYXVzZXMgU3ludGF4RXJyb3JcbnZhciBTVVBQT1JUU19ZID0gIWZhaWxzKGZ1bmN0aW9uICgpIHsgcmV0dXJuICFSZWdFeHAoTUFYX1VJTlQzMiwgJ3knKTsgfSk7XG5cbi8vIEBAc3BsaXQgbG9naWNcbmZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljKCdzcGxpdCcsIDIsIGZ1bmN0aW9uIChTUExJVCwgbmF0aXZlU3BsaXQsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICB2YXIgaW50ZXJuYWxTcGxpdDtcbiAgaWYgKFxuICAgICdhYmJjJy5zcGxpdCgvKGIpKi8pWzFdID09ICdjJyB8fFxuICAgICd0ZXN0Jy5zcGxpdCgvKD86KS8sIC0xKS5sZW5ndGggIT0gNCB8fFxuICAgICdhYicuc3BsaXQoLyg/OmFiKSovKS5sZW5ndGggIT0gMiB8fFxuICAgICcuJy5zcGxpdCgvKC4/KSguPykvKS5sZW5ndGggIT0gNCB8fFxuICAgICcuJy5zcGxpdCgvKCkoKS8pLmxlbmd0aCA+IDEgfHxcbiAgICAnJy5zcGxpdCgvLj8vKS5sZW5ndGhcbiAgKSB7XG4gICAgLy8gYmFzZWQgb24gZXM1LXNoaW0gaW1wbGVtZW50YXRpb24sIG5lZWQgdG8gcmV3b3JrIGl0XG4gICAgaW50ZXJuYWxTcGxpdCA9IGZ1bmN0aW9uIChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICB2YXIgc3RyaW5nID0gU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcykpO1xuICAgICAgdmFyIGxpbSA9IGxpbWl0ID09PSB1bmRlZmluZWQgPyBNQVhfVUlOVDMyIDogbGltaXQgPj4+IDA7XG4gICAgICBpZiAobGltID09PSAwKSByZXR1cm4gW107XG4gICAgICBpZiAoc2VwYXJhdG9yID09PSB1bmRlZmluZWQpIHJldHVybiBbc3RyaW5nXTtcbiAgICAgIC8vIElmIGBzZXBhcmF0b3JgIGlzIG5vdCBhIHJlZ2V4LCB1c2UgbmF0aXZlIHNwbGl0XG4gICAgICBpZiAoIWlzUmVnRXhwKHNlcGFyYXRvcikpIHtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZVNwbGl0LmNhbGwoc3RyaW5nLCBzZXBhcmF0b3IsIGxpbSk7XG4gICAgICB9XG4gICAgICB2YXIgb3V0cHV0ID0gW107XG4gICAgICB2YXIgZmxhZ3MgPSAoc2VwYXJhdG9yLmlnbm9yZUNhc2UgPyAnaScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci5tdWx0aWxpbmUgPyAnbScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci51bmljb2RlID8gJ3UnIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3Iuc3RpY2t5ID8gJ3knIDogJycpO1xuICAgICAgdmFyIGxhc3RMYXN0SW5kZXggPSAwO1xuICAgICAgLy8gTWFrZSBgZ2xvYmFsYCBhbmQgYXZvaWQgYGxhc3RJbmRleGAgaXNzdWVzIGJ5IHdvcmtpbmcgd2l0aCBhIGNvcHlcbiAgICAgIHZhciBzZXBhcmF0b3JDb3B5ID0gbmV3IFJlZ0V4cChzZXBhcmF0b3Iuc291cmNlLCBmbGFncyArICdnJyk7XG4gICAgICB2YXIgbWF0Y2gsIGxhc3RJbmRleCwgbGFzdExlbmd0aDtcbiAgICAgIHdoaWxlIChtYXRjaCA9IHJlZ2V4cEV4ZWMuY2FsbChzZXBhcmF0b3JDb3B5LCBzdHJpbmcpKSB7XG4gICAgICAgIGxhc3RJbmRleCA9IHNlcGFyYXRvckNvcHkubGFzdEluZGV4O1xuICAgICAgICBpZiAobGFzdEluZGV4ID4gbGFzdExhc3RJbmRleCkge1xuICAgICAgICAgIG91dHB1dC5wdXNoKHN0cmluZy5zbGljZShsYXN0TGFzdEluZGV4LCBtYXRjaC5pbmRleCkpO1xuICAgICAgICAgIGlmIChtYXRjaC5sZW5ndGggPiAxICYmIG1hdGNoLmluZGV4IDwgc3RyaW5nLmxlbmd0aCkgYXJyYXlQdXNoLmFwcGx5KG91dHB1dCwgbWF0Y2guc2xpY2UoMSkpO1xuICAgICAgICAgIGxhc3RMZW5ndGggPSBtYXRjaFswXS5sZW5ndGg7XG4gICAgICAgICAgbGFzdExhc3RJbmRleCA9IGxhc3RJbmRleDtcbiAgICAgICAgICBpZiAob3V0cHV0Lmxlbmd0aCA+PSBsaW0pIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZXBhcmF0b3JDb3B5Lmxhc3RJbmRleCA9PT0gbWF0Y2guaW5kZXgpIHNlcGFyYXRvckNvcHkubGFzdEluZGV4Kys7IC8vIEF2b2lkIGFuIGluZmluaXRlIGxvb3BcbiAgICAgIH1cbiAgICAgIGlmIChsYXN0TGFzdEluZGV4ID09PSBzdHJpbmcubGVuZ3RoKSB7XG4gICAgICAgIGlmIChsYXN0TGVuZ3RoIHx8ICFzZXBhcmF0b3JDb3B5LnRlc3QoJycpKSBvdXRwdXQucHVzaCgnJyk7XG4gICAgICB9IGVsc2Ugb3V0cHV0LnB1c2goc3RyaW5nLnNsaWNlKGxhc3RMYXN0SW5kZXgpKTtcbiAgICAgIHJldHVybiBvdXRwdXQubGVuZ3RoID4gbGltID8gb3V0cHV0LnNsaWNlKDAsIGxpbSkgOiBvdXRwdXQ7XG4gICAgfTtcbiAgLy8gQ2hha3JhLCBWOFxuICB9IGVsc2UgaWYgKCcwJy5zcGxpdCh1bmRlZmluZWQsIDApLmxlbmd0aCkge1xuICAgIGludGVybmFsU3BsaXQgPSBmdW5jdGlvbiAoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgcmV0dXJuIHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkICYmIGxpbWl0ID09PSAwID8gW10gOiBuYXRpdmVTcGxpdC5jYWxsKHRoaXMsIHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH07XG4gIH0gZWxzZSBpbnRlcm5hbFNwbGl0ID0gbmF0aXZlU3BsaXQ7XG5cbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5zcGxpdGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5zcGxpdFxuICAgIGZ1bmN0aW9uIHNwbGl0KHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIHZhciBPID0gcmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzKTtcbiAgICAgIHZhciBzcGxpdHRlciA9IHNlcGFyYXRvciA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzZXBhcmF0b3JbU1BMSVRdO1xuICAgICAgcmV0dXJuIHNwbGl0dGVyICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBzcGxpdHRlci5jYWxsKHNlcGFyYXRvciwgTywgbGltaXQpXG4gICAgICAgIDogaW50ZXJuYWxTcGxpdC5jYWxsKFN0cmluZyhPKSwgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQHNwbGl0XWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHNwbGl0XG4gICAgLy9cbiAgICAvLyBOT1RFOiBUaGlzIGNhbm5vdCBiZSBwcm9wZXJseSBwb2x5ZmlsbGVkIGluIGVuZ2luZXMgdGhhdCBkb24ndCBzdXBwb3J0XG4gICAgLy8gdGhlICd5JyBmbGFnLlxuICAgIGZ1bmN0aW9uIChyZWdleHAsIGxpbWl0KSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKGludGVybmFsU3BsaXQsIHJlZ2V4cCwgdGhpcywgbGltaXQsIGludGVybmFsU3BsaXQgIT09IG5hdGl2ZVNwbGl0KTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcblxuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgdmFyIEMgPSBzcGVjaWVzQ29uc3RydWN0b3IocngsIFJlZ0V4cCk7XG5cbiAgICAgIHZhciB1bmljb2RlTWF0Y2hpbmcgPSByeC51bmljb2RlO1xuICAgICAgdmFyIGZsYWdzID0gKHJ4Lmlnbm9yZUNhc2UgPyAnaScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJ4Lm11bHRpbGluZSA/ICdtJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocngudW5pY29kZSA/ICd1JyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoU1VQUE9SVFNfWSA/ICd5JyA6ICdnJyk7XG5cbiAgICAgIC8vIF4oPyArIHJ4ICsgKSBpcyBuZWVkZWQsIGluIGNvbWJpbmF0aW9uIHdpdGggc29tZSBTIHNsaWNpbmcsIHRvXG4gICAgICAvLyBzaW11bGF0ZSB0aGUgJ3knIGZsYWcuXG4gICAgICB2YXIgc3BsaXR0ZXIgPSBuZXcgQyhTVVBQT1JUU19ZID8gcnggOiAnXig/OicgKyByeC5zb3VyY2UgKyAnKScsIGZsYWdzKTtcbiAgICAgIHZhciBsaW0gPSBsaW1pdCA9PT0gdW5kZWZpbmVkID8gTUFYX1VJTlQzMiA6IGxpbWl0ID4+PiAwO1xuICAgICAgaWYgKGxpbSA9PT0gMCkgcmV0dXJuIFtdO1xuICAgICAgaWYgKFMubGVuZ3RoID09PSAwKSByZXR1cm4gY2FsbFJlZ0V4cEV4ZWMoc3BsaXR0ZXIsIFMpID09PSBudWxsID8gW1NdIDogW107XG4gICAgICB2YXIgcCA9IDA7XG4gICAgICB2YXIgcSA9IDA7XG4gICAgICB2YXIgQSA9IFtdO1xuICAgICAgd2hpbGUgKHEgPCBTLmxlbmd0aCkge1xuICAgICAgICBzcGxpdHRlci5sYXN0SW5kZXggPSBTVVBQT1JUU19ZID8gcSA6IDA7XG4gICAgICAgIHZhciB6ID0gY2FsbFJlZ0V4cEV4ZWMoc3BsaXR0ZXIsIFNVUFBPUlRTX1kgPyBTIDogUy5zbGljZShxKSk7XG4gICAgICAgIHZhciBlO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgeiA9PT0gbnVsbCB8fFxuICAgICAgICAgIChlID0gbWluKHRvTGVuZ3RoKHNwbGl0dGVyLmxhc3RJbmRleCArIChTVVBQT1JUU19ZID8gMCA6IHEpKSwgUy5sZW5ndGgpKSA9PT0gcFxuICAgICAgICApIHtcbiAgICAgICAgICBxID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHEsIHVuaWNvZGVNYXRjaGluZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgQS5wdXNoKFMuc2xpY2UocCwgcSkpO1xuICAgICAgICAgIGlmIChBLmxlbmd0aCA9PT0gbGltKSByZXR1cm4gQTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSB6Lmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgQS5wdXNoKHpbaV0pO1xuICAgICAgICAgICAgaWYgKEEubGVuZ3RoID09PSBsaW0pIHJldHVybiBBO1xuICAgICAgICAgIH1cbiAgICAgICAgICBxID0gcCA9IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIEEucHVzaChTLnNsaWNlKHApKTtcbiAgICAgIHJldHVybiBBO1xuICAgIH1cbiAgXTtcbn0sICFTVVBQT1JUU19ZKTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIxM2Q1XCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oXCIyM2U3XCIpO1xudmFyICRyZWR1Y2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiZDU4ZlwiKS5sZWZ0O1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiYTY0MFwiKTtcbnZhciBhcnJheU1ldGhvZFVzZXNUb0xlbmd0aCA9IF9fd2VicGFja19yZXF1aXJlX18oXCJhZTQwXCIpO1xuXG52YXIgU1RSSUNUX01FVEhPRCA9IGFycmF5TWV0aG9kSXNTdHJpY3QoJ3JlZHVjZScpO1xudmFyIFVTRVNfVE9fTEVOR1RIID0gYXJyYXlNZXRob2RVc2VzVG9MZW5ndGgoJ3JlZHVjZScsIHsgMTogMCB9KTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5yZWR1Y2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnJlZHVjZVxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIVNUUklDVF9NRVRIT0QgfHwgIVVTRVNfVE9fTEVOR1RIIH0sIHtcbiAgcmVkdWNlOiBmdW5jdGlvbiByZWR1Y2UoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykge1xuICAgIHJldHVybiAkcmVkdWNlKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiMTRjM1wiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgY2xhc3NvZiA9IF9fd2VicGFja19yZXF1aXJlX18oXCJjNmI2XCIpO1xudmFyIHJlZ2V4cEV4ZWMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiOTI2M1wiKTtcblxuLy8gYFJlZ0V4cEV4ZWNgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwZXhlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUiwgUykge1xuICB2YXIgZXhlYyA9IFIuZXhlYztcbiAgaWYgKHR5cGVvZiBleGVjID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIHJlc3VsdCA9IGV4ZWMuY2FsbChSLCBTKTtcbiAgICBpZiAodHlwZW9mIHJlc3VsdCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IFR5cGVFcnJvcignUmVnRXhwIGV4ZWMgbWV0aG9kIHJldHVybmVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGFuIE9iamVjdCBvciBudWxsJyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBpZiAoY2xhc3NvZihSKSAhPT0gJ1JlZ0V4cCcpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ1JlZ0V4cCNleGVjIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgcmVjZWl2ZXInKTtcbiAgfVxuXG4gIHJldHVybiByZWdleHBFeGVjLmNhbGwoUiwgUyk7XG59O1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiMTU5YlwiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImRhODRcIik7XG52YXIgRE9NSXRlcmFibGVzID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImZkYmNcIik7XG52YXIgZm9yRWFjaCA9IF9fd2VicGFja19yZXF1aXJlX18oXCIxN2MyXCIpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IF9fd2VicGFja19yZXF1aXJlX18oXCI5MTEyXCIpO1xuXG5mb3IgKHZhciBDT0xMRUNUSU9OX05BTUUgaW4gRE9NSXRlcmFibGVzKSB7XG4gIHZhciBDb2xsZWN0aW9uID0gZ2xvYmFsW0NPTExFQ1RJT05fTkFNRV07XG4gIHZhciBDb2xsZWN0aW9uUHJvdG90eXBlID0gQ29sbGVjdGlvbiAmJiBDb2xsZWN0aW9uLnByb3RvdHlwZTtcbiAgLy8gc29tZSBDaHJvbWUgdmVyc2lvbnMgaGF2ZSBub24tY29uZmlndXJhYmxlIG1ldGhvZHMgb24gRE9NVG9rZW5MaXN0XG4gIGlmIChDb2xsZWN0aW9uUHJvdG90eXBlICYmIENvbGxlY3Rpb25Qcm90b3R5cGUuZm9yRWFjaCAhPT0gZm9yRWFjaCkgdHJ5IHtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoQ29sbGVjdGlvblByb3RvdHlwZSwgJ2ZvckVhY2gnLCBmb3JFYWNoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBDb2xsZWN0aW9uUHJvdG90eXBlLmZvckVhY2ggPSBmb3JFYWNoO1xuICB9XG59XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiMTdjMlwiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyICRmb3JFYWNoID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImI3MjdcIikuZm9yRWFjaDtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImE2NDBcIik7XG52YXIgYXJyYXlNZXRob2RVc2VzVG9MZW5ndGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiYWU0MFwiKTtcblxudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdmb3JFYWNoJyk7XG52YXIgVVNFU19UT19MRU5HVEggPSBhcnJheU1ldGhvZFVzZXNUb0xlbmd0aCgnZm9yRWFjaCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZvcmVhY2hcbm1vZHVsZS5leHBvcnRzID0gKCFTVFJJQ1RfTUVUSE9EIHx8ICFVU0VTX1RPX0xFTkdUSCkgPyBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gIHJldHVybiAkZm9yRWFjaCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG59IDogW10uZm9yRWFjaDtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIxYmU0XCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBnZXRCdWlsdEluID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImQwNjZcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignZG9jdW1lbnQnLCAnZG9jdW1lbnRFbGVtZW50Jyk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiMWMwYlwiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAodHlwZW9mIGl0ICE9ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoU3RyaW5nKGl0KSArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIjFjN2VcIjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIHdlbGxLbm93blN5bWJvbCA9IF9fd2VicGFja19yZXF1aXJlX18oXCJiNjIyXCIpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgU0FGRV9DTE9TSU5HID0gZmFsc2U7XG5cbnRyeSB7XG4gIHZhciBjYWxsZWQgPSAwO1xuICB2YXIgaXRlcmF0b3JXaXRoUmV0dXJuID0ge1xuICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7IGRvbmU6ICEhY2FsbGVkKysgfTtcbiAgICB9LFxuICAgICdyZXR1cm4nOiBmdW5jdGlvbiAoKSB7XG4gICAgICBTQUZFX0NMT1NJTkcgPSB0cnVlO1xuICAgIH1cbiAgfTtcbiAgaXRlcmF0b3JXaXRoUmV0dXJuW0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcbiAgQXJyYXkuZnJvbShpdGVyYXRvcldpdGhSZXR1cm4sIGZ1bmN0aW9uICgpIHsgdGhyb3cgMjsgfSk7XG59IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMsIFNLSVBfQ0xPU0lORykge1xuICBpZiAoIVNLSVBfQ0xPU0lORyAmJiAhU0FGRV9DTE9TSU5HKSByZXR1cm4gZmFsc2U7XG4gIHZhciBJVEVSQVRJT05fU1VQUE9SVCA9IGZhbHNlO1xuICB0cnkge1xuICAgIHZhciBvYmplY3QgPSB7fTtcbiAgICBvYmplY3RbSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiB7IGRvbmU6IElURVJBVElPTl9TVVBQT1JUID0gdHJ1ZSB9O1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH07XG4gICAgZXhlYyhvYmplY3QpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBJVEVSQVRJT05fU1VQUE9SVDtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiMWQ4MFwiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG4vLyBgUmVxdWlyZU9iamVjdENvZXJjaWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZXF1aXJlb2JqZWN0Y29lcmNpYmxlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPT0gdW5kZWZpbmVkKSB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIxZGRlXCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oXCJkMDM5XCIpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IF9fd2VicGFja19yZXF1aXJlX18oXCJiNjIyXCIpO1xudmFyIFY4X1ZFUlNJT04gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiMmQwMFwiKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUpIHtcbiAgLy8gV2UgY2FuJ3QgdXNlIHRoaXMgZmVhdHVyZSBkZXRlY3Rpb24gaW4gVjggc2luY2UgaXQgY2F1c2VzXG4gIC8vIGRlb3B0aW1pemF0aW9uIGFuZCBzZXJpb3VzIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NzdcbiAgcmV0dXJuIFY4X1ZFUlNJT04gPj0gNTEgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJyYXkgPSBbXTtcbiAgICB2YXIgY29uc3RydWN0b3IgPSBhcnJheS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgIGNvbnN0cnVjdG9yW1NQRUNJRVNdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHsgZm9vOiAxIH07XG4gICAgfTtcbiAgICByZXR1cm4gYXJyYXlbTUVUSE9EX05BTUVdKEJvb2xlYW4pLmZvbyAhPT0gMTtcbiAgfSk7XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIjIxN2RcIjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gZm9yIGl0ZXJhdGluZyBvdmVyIGEgY29sbGVjdGlvblxuICpcbiAqIEBwYXJhbSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gZm5cbiAqL1xuZnVuY3Rpb24gZWFjaChjb2xsZWN0aW9uLCBmbikge1xuICAgIHZhciBpICAgICAgPSAwLFxuICAgICAgICBsZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0aCxcbiAgICAgICAgY29udDtcblxuICAgIGZvcihpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29udCA9IGZuKGNvbGxlY3Rpb25baV0sIGkpO1xuICAgICAgICBpZihjb250ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgYnJlYWs7IC8vYWxsb3cgZWFybHkgZXhpdFxuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiBmb3IgZGV0ZXJtaW5pbmcgd2hldGhlciB0YXJnZXQgb2JqZWN0IGlzIGFuIGFycmF5XG4gKlxuICogQHBhcmFtIHRhcmdldCB0aGUgb2JqZWN0IHVuZGVyIHRlc3RcbiAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgaWYgYXJyYXksIGZhbHNlIG90aGVyd2lzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5KHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KHRhcmdldCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIGZvciBkZXRlcm1pbmluZyB3aGV0aGVyIHRhcmdldCBvYmplY3QgaXMgYSBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSB0YXJnZXQgdGhlIG9iamVjdCB1bmRlciB0ZXN0XG4gKiBAcmV0dXJuIHtCb29sZWFufSB0cnVlIGlmIGZ1bmN0aW9uLCBmYWxzZSBvdGhlcndpc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih0YXJnZXQpIHtcbiAgICByZXR1cm4gdHlwZW9mIHRhcmdldCA9PT0gJ2Z1bmN0aW9uJztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgaXNGdW5jdGlvbiA6IGlzRnVuY3Rpb24sXG4gICAgaXNBcnJheSA6IGlzQXJyYXksXG4gICAgZWFjaCA6IGVhY2hcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiMjNjYlwiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgdG9JbnRlZ2VyID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImE2OTFcIik7XG5cbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gSGVscGVyIGZvciBhIHBvcHVsYXIgcmVwZWF0aW5nIGNhc2Ugb2YgdGhlIHNwZWM6XG4vLyBMZXQgaW50ZWdlciBiZSA/IFRvSW50ZWdlcihpbmRleCkuXG4vLyBJZiBpbnRlZ2VyIDwgMCwgbGV0IHJlc3VsdCBiZSBtYXgoKGxlbmd0aCArIGludGVnZXIpLCAwKTsgZWxzZSBsZXQgcmVzdWx0IGJlIG1pbihpbnRlZ2VyLCBsZW5ndGgpLlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICB2YXIgaW50ZWdlciA9IHRvSW50ZWdlcihpbmRleCk7XG4gIHJldHVybiBpbnRlZ2VyIDwgMCA/IG1heChpbnRlZ2VyICsgbGVuZ3RoLCAwKSA6IG1pbihpbnRlZ2VyLCBsZW5ndGgpO1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIyM2U3XCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiZGE4NFwiKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiMDZjZlwiKS5mO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IF9fd2VicGFja19yZXF1aXJlX18oXCI5MTEyXCIpO1xudmFyIHJlZGVmaW5lID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjZlZWJcIik7XG52YXIgc2V0R2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImNlNGVcIik7XG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IF9fd2VicGFja19yZXF1aXJlX18oXCJlODkzXCIpO1xudmFyIGlzRm9yY2VkID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjk0Y2FcIik7XG5cbi8qXG4gIG9wdGlvbnMudGFyZ2V0ICAgICAgLSBuYW1lIG9mIHRoZSB0YXJnZXQgb2JqZWN0XG4gIG9wdGlvbnMuZ2xvYmFsICAgICAgLSB0YXJnZXQgaXMgdGhlIGdsb2JhbCBvYmplY3RcbiAgb3B0aW9ucy5zdGF0ICAgICAgICAtIGV4cG9ydCBhcyBzdGF0aWMgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5wcm90byAgICAgICAtIGV4cG9ydCBhcyBwcm90b3R5cGUgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5yZWFsICAgICAgICAtIHJlYWwgcHJvdG90eXBlIG1ldGhvZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMuZm9yY2VkICAgICAgLSBleHBvcnQgZXZlbiBpZiB0aGUgbmF0aXZlIGZlYXR1cmUgaXMgYXZhaWxhYmxlXG4gIG9wdGlvbnMuYmluZCAgICAgICAgLSBiaW5kIG1ldGhvZHMgdG8gdGhlIHRhcmdldCwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLndyYXAgICAgICAgIC0gd3JhcCBjb25zdHJ1Y3RvcnMgdG8gcHJldmVudGluZyBnbG9iYWwgcG9sbHV0aW9uLCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMudW5zYWZlICAgICAgLSB1c2UgdGhlIHNpbXBsZSBhc3NpZ25tZW50IG9mIHByb3BlcnR5IGluc3RlYWQgb2YgZGVsZXRlICsgZGVmaW5lUHJvcGVydHlcbiAgb3B0aW9ucy5zaGFtICAgICAgICAtIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgb3B0aW9ucy5lbnVtZXJhYmxlICAtIGV4cG9ydCBhcyBlbnVtZXJhYmxlIHByb3BlcnR5XG4gIG9wdGlvbnMubm9UYXJnZXRHZXQgLSBwcmV2ZW50IGNhbGxpbmcgYSBnZXR0ZXIgb24gdGFyZ2V0XG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3B0aW9ucywgc291cmNlKSB7XG4gIHZhciBUQVJHRVQgPSBvcHRpb25zLnRhcmdldDtcbiAgdmFyIEdMT0JBTCA9IG9wdGlvbnMuZ2xvYmFsO1xuICB2YXIgU1RBVElDID0gb3B0aW9ucy5zdGF0O1xuICB2YXIgRk9SQ0VELCB0YXJnZXQsIGtleSwgdGFyZ2V0UHJvcGVydHksIHNvdXJjZVByb3BlcnR5LCBkZXNjcmlwdG9yO1xuICBpZiAoR0xPQkFMKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsO1xuICB9IGVsc2UgaWYgKFNUQVRJQykge1xuICAgIHRhcmdldCA9IGdsb2JhbFtUQVJHRVRdIHx8IHNldEdsb2JhbChUQVJHRVQsIHt9KTtcbiAgfSBlbHNlIHtcbiAgICB0YXJnZXQgPSAoZ2xvYmFsW1RBUkdFVF0gfHwge30pLnByb3RvdHlwZTtcbiAgfVxuICBpZiAodGFyZ2V0KSBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICBzb3VyY2VQcm9wZXJ0eSA9IHNvdXJjZVtrZXldO1xuICAgIGlmIChvcHRpb25zLm5vVGFyZ2V0R2V0KSB7XG4gICAgICBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KTtcbiAgICAgIHRhcmdldFByb3BlcnR5ID0gZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIH0gZWxzZSB0YXJnZXRQcm9wZXJ0eSA9IHRhcmdldFtrZXldO1xuICAgIEZPUkNFRCA9IGlzRm9yY2VkKEdMT0JBTCA/IGtleSA6IFRBUkdFVCArIChTVEFUSUMgPyAnLicgOiAnIycpICsga2V5LCBvcHRpb25zLmZvcmNlZCk7XG4gICAgLy8gY29udGFpbmVkIGluIHRhcmdldFxuICAgIGlmICghRk9SQ0VEICYmIHRhcmdldFByb3BlcnR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2Ygc291cmNlUHJvcGVydHkgPT09IHR5cGVvZiB0YXJnZXRQcm9wZXJ0eSkgY29udGludWU7XG4gICAgICBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzKHNvdXJjZVByb3BlcnR5LCB0YXJnZXRQcm9wZXJ0eSk7XG4gICAgfVxuICAgIC8vIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgICBpZiAob3B0aW9ucy5zaGFtIHx8ICh0YXJnZXRQcm9wZXJ0eSAmJiB0YXJnZXRQcm9wZXJ0eS5zaGFtKSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHNvdXJjZVByb3BlcnR5LCAnc2hhbScsIHRydWUpO1xuICAgIH1cbiAgICAvLyBleHRlbmQgZ2xvYmFsXG4gICAgcmVkZWZpbmUodGFyZ2V0LCBrZXksIHNvdXJjZVByb3BlcnR5LCBvcHRpb25zKTtcbiAgfVxufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIyNDFjXCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBpbnRlcm5hbE9iamVjdEtleXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiY2E4NFwiKTtcbnZhciBlbnVtQnVnS2V5cyA9IF9fd2VicGFja19yZXF1aXJlX18oXCI3ODM5XCIpO1xuXG52YXIgaGlkZGVuS2V5cyA9IGVudW1CdWdLZXlzLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGhpZGRlbktleXMpO1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIyNWYwXCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgcmVkZWZpbmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiNmVlYlwiKTtcbnZhciBhbk9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oXCI4MjVhXCIpO1xudmFyIGZhaWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImQwMzlcIik7XG52YXIgZmxhZ3MgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiYWQ2ZFwiKTtcblxudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgUmVnRXhwUHJvdG90eXBlID0gUmVnRXhwLnByb3RvdHlwZTtcbnZhciBuYXRpdmVUb1N0cmluZyA9IFJlZ0V4cFByb3RvdHlwZVtUT19TVFJJTkddO1xuXG52YXIgTk9UX0dFTkVSSUMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IHJldHVybiBuYXRpdmVUb1N0cmluZy5jYWxsKHsgc291cmNlOiAnYScsIGZsYWdzOiAnYicgfSkgIT0gJy9hL2InOyB9KTtcbi8vIEZGNDQtIFJlZ0V4cCN0b1N0cmluZyBoYXMgYSB3cm9uZyBuYW1lXG52YXIgSU5DT1JSRUNUX05BTUUgPSBuYXRpdmVUb1N0cmluZy5uYW1lICE9IFRPX1NUUklORztcblxuLy8gYFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS50b3N0cmluZ1xuaWYgKE5PVF9HRU5FUklDIHx8IElOQ09SUkVDVF9OQU1FKSB7XG4gIHJlZGVmaW5lKFJlZ0V4cC5wcm90b3R5cGUsIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgdmFyIFIgPSBhbk9iamVjdCh0aGlzKTtcbiAgICB2YXIgcCA9IFN0cmluZyhSLnNvdXJjZSk7XG4gICAgdmFyIHJmID0gUi5mbGFncztcbiAgICB2YXIgZiA9IFN0cmluZyhyZiA9PT0gdW5kZWZpbmVkICYmIFIgaW5zdGFuY2VvZiBSZWdFeHAgJiYgISgnZmxhZ3MnIGluIFJlZ0V4cFByb3RvdHlwZSkgPyBmbGFncy5jYWxsKFIpIDogcmYpO1xuICAgIHJldHVybiAnLycgKyBwICsgJy8nICsgZjtcbiAgfSwgeyB1bnNhZmU6IHRydWUgfSk7XG59XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiMmQwMFwiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImRhODRcIik7XG52YXIgdXNlckFnZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjM0MmZcIik7XG5cbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnM7XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52ODtcbnZhciBtYXRjaCwgdmVyc2lvbjtcblxuaWYgKHY4KSB7XG4gIG1hdGNoID0gdjguc3BsaXQoJy4nKTtcbiAgdmVyc2lvbiA9IG1hdGNoWzBdICsgbWF0Y2hbMV07XG59IGVsc2UgaWYgKHVzZXJBZ2VudCkge1xuICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvRWRnZVxcLyhcXGQrKS8pO1xuICBpZiAoIW1hdGNoIHx8IG1hdGNoWzFdID49IDc0KSB7XG4gICAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0Nocm9tZVxcLyhcXGQrKS8pO1xuICAgIGlmIChtYXRjaCkgdmVyc2lvbiA9IG1hdGNoWzFdO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmVyc2lvbiAmJiArdmVyc2lvbjtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIzNDJmXCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBnZXRCdWlsdEluID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImQwNjZcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignbmF2aWdhdG9yJywgJ3VzZXJBZ2VudCcpIHx8ICcnO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIjM1YTFcIjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGNsYXNzb2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiZjVkZlwiKTtcbnZhciBJdGVyYXRvcnMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiM2Y4Y1wiKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiYjYyMlwiKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgIT0gdW5kZWZpbmVkKSByZXR1cm4gaXRbSVRFUkFUT1JdXG4gICAgfHwgaXRbJ0BAaXRlcmF0b3InXVxuICAgIHx8IEl0ZXJhdG9yc1tjbGFzc29mKGl0KV07XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIjM3ZThcIjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIERFU0NSSVBUT1JTID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjgzYWJcIik7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiOWJmMlwiKTtcbnZhciBhbk9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oXCI4MjVhXCIpO1xudmFyIG9iamVjdEtleXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiZGY3NVwiKTtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0aWVzXG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBrZXlzID0gb2JqZWN0S2V5cyhQcm9wZXJ0aWVzKTtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIGRlZmluZVByb3BlcnR5TW9kdWxlLmYoTywga2V5ID0ga2V5c1tpbmRleCsrXSwgUHJvcGVydGllc1trZXldKTtcbiAgcmV0dXJuIE87XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIjNiODFcIjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIjNiYmVcIjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGlzT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjg2MWRcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICghaXNPYmplY3QoaXQpICYmIGl0ICE9PSBudWxsKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3Qgc2V0IFwiICsgU3RyaW5nKGl0KSArICcgYXMgYSBwcm90b3R5cGUnKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIjNjYTNcIjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBjaGFyQXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiNjU0N1wiKS5jaGFyQXQ7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IF9fd2VicGFja19yZXF1aXJlX18oXCI2OWYzXCIpO1xudmFyIGRlZmluZUl0ZXJhdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjdkZDBcIik7XG5cbnZhciBTVFJJTkdfSVRFUkFUT1IgPSAnU3RyaW5nIEl0ZXJhdG9yJztcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKFNUUklOR19JVEVSQVRPUik7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlW0BAaXRlcmF0b3JdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUtQEBpdGVyYXRvclxuZGVmaW5lSXRlcmF0b3IoU3RyaW5nLCAnU3RyaW5nJywgZnVuY3Rpb24gKGl0ZXJhdGVkKSB7XG4gIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgIHR5cGU6IFNUUklOR19JVEVSQVRPUixcbiAgICBzdHJpbmc6IFN0cmluZyhpdGVyYXRlZCksXG4gICAgaW5kZXg6IDBcbiAgfSk7XG4vLyBgJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJS5uZXh0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLSVzdHJpbmdpdGVyYXRvcnByb3RvdHlwZSUubmV4dFxufSwgZnVuY3Rpb24gbmV4dCgpIHtcbiAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgdmFyIHN0cmluZyA9IHN0YXRlLnN0cmluZztcbiAgdmFyIGluZGV4ID0gc3RhdGUuaW5kZXg7XG4gIHZhciBwb2ludDtcbiAgaWYgKGluZGV4ID49IHN0cmluZy5sZW5ndGgpIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgcG9pbnQgPSBjaGFyQXQoc3RyaW5nLCBpbmRleCk7XG4gIHN0YXRlLmluZGV4ICs9IHBvaW50Lmxlbmd0aDtcbiAgcmV0dXJuIHsgdmFsdWU6IHBvaW50LCBkb25lOiBmYWxzZSB9O1xufSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiM2Y4Y1wiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIjQxNjBcIjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciAkID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjIzZTdcIik7XG52YXIgZm9yRWFjaCA9IF9fd2VicGFja19yZXF1aXJlX18oXCIxN2MyXCIpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZvcmVhY2hcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IFtdLmZvckVhY2ggIT0gZm9yRWFjaCB9LCB7XG4gIGZvckVhY2g6IGZvckVhY2hcbn0pO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIjQyOGZcIjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGdsb2JhbCA9IF9fd2VicGFja19yZXF1aXJlX18oXCJkYTg0XCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdsb2JhbDtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCI0MmEwXCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbi8qKlxuICogbG9kYXNoIChDdXN0b20gQnVpbGQpIDxodHRwczovL2xvZGFzaC5jb20vPlxuICogQnVpbGQ6IGBsb2Rhc2ggbW9kdWxhcml6ZSBleHBvcnRzPVwibnBtXCIgLW8gLi9gXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycyA8aHR0cHM6Ly9qcXVlcnkub3JnLz5cbiAqIFJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlIDxodHRwczovL2xvZGFzaC5jb20vbGljZW5zZT5cbiAqIEJhc2VkIG9uIFVuZGVyc2NvcmUuanMgMS44LjMgPGh0dHA6Ly91bmRlcnNjb3JlanMub3JnL0xJQ0VOU0U+XG4gKiBDb3B5cmlnaHQgSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIGFuZCBJbnZlc3RpZ2F0aXZlIFJlcG9ydGVycyAmIEVkaXRvcnNcbiAqL1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgdW5zaWduZWQgaW50ZWdlciB2YWx1ZXMuICovXG52YXIgcmVJc1VpbnQgPSAvXig/OjB8WzEtOV1cXGQqKSQvO1xuXG4vKipcbiAqIEEgZmFzdGVyIGFsdGVybmF0aXZlIHRvIGBGdW5jdGlvbiNhcHBseWAsIHRoaXMgZnVuY3Rpb24gaW52b2tlcyBgZnVuY2BcbiAqIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGB0aGlzQXJnYCBhbmQgdGhlIGFyZ3VtZW50cyBvZiBgYXJnc2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAqIEBwYXJhbSB7Kn0gdGhpc0FyZyBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgYXJndW1lbnRzIHRvIGludm9rZSBgZnVuY2Agd2l0aC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYGZ1bmNgLlxuICovXG5mdW5jdGlvbiBhcHBseShmdW5jLCB0aGlzQXJnLCBhcmdzKSB7XG4gIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZyk7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gIH1cbiAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpc0FyZywgYXJncyk7XG59XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udGltZXNgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kc1xuICogb3IgbWF4IGFycmF5IGxlbmd0aCBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gaW52b2tlIGBpdGVyYXRlZWAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiByZXN1bHRzLlxuICovXG5mdW5jdGlvbiBiYXNlVGltZXMobiwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShuKTtcblxuICB3aGlsZSAoKytpbmRleCA8IG4pIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoaW5kZXgpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHVuYXJ5IGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCBpdHMgYXJndW1lbnQgdHJhbnNmb3JtZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIGFyZ3VtZW50IHRyYW5zZm9ybS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBvdmVyQXJnKGZ1bmMsIHRyYW5zZm9ybSkge1xuICByZXR1cm4gZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIGZ1bmModHJhbnNmb3JtKGFyZykpO1xuICB9O1xufVxuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgb2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUtleXMgPSBvdmVyQXJnKE9iamVjdC5rZXlzLCBPYmplY3QpLFxuICAgIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xuXG4vKiogRGV0ZWN0IGlmIHByb3BlcnRpZXMgc2hhZG93aW5nIHRob3NlIG9uIGBPYmplY3QucHJvdG90eXBlYCBhcmUgbm9uLWVudW1lcmFibGUuICovXG52YXIgbm9uRW51bVNoYWRvd3MgPSAhcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh7ICd2YWx1ZU9mJzogMSB9LCAndmFsdWVPZicpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgdGhlIGFycmF5LWxpa2UgYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluaGVyaXRlZCBTcGVjaWZ5IHJldHVybmluZyBpbmhlcml0ZWQgcHJvcGVydHkgbmFtZXMuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBhcnJheUxpa2VLZXlzKHZhbHVlLCBpbmhlcml0ZWQpIHtcbiAgLy8gU2FmYXJpIDguMSBtYWtlcyBgYXJndW1lbnRzLmNhbGxlZWAgZW51bWVyYWJsZSBpbiBzdHJpY3QgbW9kZS5cbiAgLy8gU2FmYXJpIDkgbWFrZXMgYGFyZ3VtZW50cy5sZW5ndGhgIGVudW1lcmFibGUgaW4gc3RyaWN0IG1vZGUuXG4gIHZhciByZXN1bHQgPSAoaXNBcnJheSh2YWx1ZSkgfHwgaXNBcmd1bWVudHModmFsdWUpKVxuICAgID8gYmFzZVRpbWVzKHZhbHVlLmxlbmd0aCwgU3RyaW5nKVxuICAgIDogW107XG5cbiAgdmFyIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGgsXG4gICAgICBza2lwSW5kZXhlcyA9ICEhbGVuZ3RoO1xuXG4gIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgIGlmICgoaW5oZXJpdGVkIHx8IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGtleSkpICYmXG4gICAgICAgICEoc2tpcEluZGV4ZXMgJiYgKGtleSA9PSAnbGVuZ3RoJyB8fCBpc0luZGV4KGtleSwgbGVuZ3RoKSkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEFzc2lnbnMgYHZhbHVlYCB0byBga2V5YCBvZiBgb2JqZWN0YCBpZiB0aGUgZXhpc3RpbmcgdmFsdWUgaXMgbm90IGVxdWl2YWxlbnRcbiAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldO1xuICBpZiAoIShoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBlcShvYmpWYWx1ZSwgdmFsdWUpKSB8fFxuICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcbiAgICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ua2V5c2Agd2hpY2ggZG9lc24ndCB0cmVhdCBzcGFyc2UgYXJyYXlzIGFzIGRlbnNlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBiYXNlS2V5cyhvYmplY3QpIHtcbiAgaWYgKCFpc1Byb3RvdHlwZShvYmplY3QpKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUtleXMob2JqZWN0KTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gW107XG4gIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBrZXkgIT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5yZXN0YCB3aGljaCBkb2Vzbid0IHZhbGlkYXRlIG9yIGNvZXJjZSBhcmd1bWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVJlc3QoZnVuYywgc3RhcnQpIHtcbiAgc3RhcnQgPSBuYXRpdmVNYXgoc3RhcnQgPT09IHVuZGVmaW5lZCA/IChmdW5jLmxlbmd0aCAtIDEpIDogc3RhcnQsIDApO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IG5hdGl2ZU1heChhcmdzLmxlbmd0aCAtIHN0YXJ0LCAwKSxcbiAgICAgICAgYXJyYXkgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGFycmF5W2luZGV4XSA9IGFyZ3Nbc3RhcnQgKyBpbmRleF07XG4gICAgfVxuICAgIGluZGV4ID0gLTE7XG4gICAgdmFyIG90aGVyQXJncyA9IEFycmF5KHN0YXJ0ICsgMSk7XG4gICAgd2hpbGUgKCsraW5kZXggPCBzdGFydCkge1xuICAgICAgb3RoZXJBcmdzW2luZGV4XSA9IGFyZ3NbaW5kZXhdO1xuICAgIH1cbiAgICBvdGhlckFyZ3Nbc3RhcnRdID0gYXJyYXk7XG4gICAgcmV0dXJuIGFwcGx5KGZ1bmMsIHRoaXMsIG90aGVyQXJncyk7XG4gIH07XG59XG5cbi8qKlxuICogQ29waWVzIHByb3BlcnRpZXMgb2YgYHNvdXJjZWAgdG8gYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbS5cbiAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBpZGVudGlmaWVycyB0byBjb3B5LlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3Q9e31dIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIHRvLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29waWVkIHZhbHVlcy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGNvcHlPYmplY3Qoc291cmNlLCBwcm9wcywgb2JqZWN0LCBjdXN0b21pemVyKSB7XG4gIG9iamVjdCB8fCAob2JqZWN0ID0ge30pO1xuXG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGtleSA9IHByb3BzW2luZGV4XTtcblxuICAgIHZhciBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXJcbiAgICAgID8gY3VzdG9taXplcihvYmplY3Rba2V5XSwgc291cmNlW2tleV0sIGtleSwgb2JqZWN0LCBzb3VyY2UpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkID8gc291cmNlW2tleV0gOiBuZXdWYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIG9iamVjdDtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5hc3NpZ25gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBhc3NpZ25lciBUaGUgZnVuY3Rpb24gdG8gYXNzaWduIHZhbHVlcy5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFzc2lnbmVyIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVBc3NpZ25lcihhc3NpZ25lcikge1xuICByZXR1cm4gYmFzZVJlc3QoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2VzKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IHNvdXJjZXMubGVuZ3RoLFxuICAgICAgICBjdXN0b21pemVyID0gbGVuZ3RoID4gMSA/IHNvdXJjZXNbbGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQsXG4gICAgICAgIGd1YXJkID0gbGVuZ3RoID4gMiA/IHNvdXJjZXNbMl0gOiB1bmRlZmluZWQ7XG5cbiAgICBjdXN0b21pemVyID0gKGFzc2lnbmVyLmxlbmd0aCA+IDMgJiYgdHlwZW9mIGN1c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJylcbiAgICAgID8gKGxlbmd0aC0tLCBjdXN0b21pemVyKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoc291cmNlc1swXSwgc291cmNlc1sxXSwgZ3VhcmQpKSB7XG4gICAgICBjdXN0b21pemVyID0gbGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IGN1c3RvbWl6ZXI7XG4gICAgICBsZW5ndGggPSAxO1xuICAgIH1cbiAgICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgdmFyIHNvdXJjZSA9IHNvdXJjZXNbaW5kZXhdO1xuICAgICAgaWYgKHNvdXJjZSkge1xuICAgICAgICBhc3NpZ25lcihvYmplY3QsIHNvdXJjZSwgaW5kZXgsIGN1c3RvbWl6ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xuICB9KTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgaW5kZXguXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9TUFYX1NBRkVfSU5URUdFUl0gVGhlIHVwcGVyIGJvdW5kcyBvZiBhIHZhbGlkIGluZGV4LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBpbmRleCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0luZGV4KHZhbHVlLCBsZW5ndGgpIHtcbiAgbGVuZ3RoID0gbGVuZ3RoID09IG51bGwgPyBNQVhfU0FGRV9JTlRFR0VSIDogbGVuZ3RoO1xuICByZXR1cm4gISFsZW5ndGggJiZcbiAgICAodHlwZW9mIHZhbHVlID09ICdudW1iZXInIHx8IHJlSXNVaW50LnRlc3QodmFsdWUpKSAmJlxuICAgICh2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDwgbGVuZ3RoKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGdpdmVuIGFyZ3VtZW50cyBhcmUgZnJvbSBhbiBpdGVyYXRlZSBjYWxsLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSBwb3RlbnRpYWwgaXRlcmF0ZWUgdmFsdWUgYXJndW1lbnQuXG4gKiBAcGFyYW0geyp9IGluZGV4IFRoZSBwb3RlbnRpYWwgaXRlcmF0ZWUgaW5kZXggb3Iga2V5IGFyZ3VtZW50LlxuICogQHBhcmFtIHsqfSBvYmplY3QgVGhlIHBvdGVudGlhbCBpdGVyYXRlZSBvYmplY3QgYXJndW1lbnQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGFyZ3VtZW50cyBhcmUgZnJvbSBhbiBpdGVyYXRlZSBjYWxsLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNJdGVyYXRlZUNhbGwodmFsdWUsIGluZGV4LCBvYmplY3QpIHtcbiAgaWYgKCFpc09iamVjdChvYmplY3QpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciB0eXBlID0gdHlwZW9mIGluZGV4O1xuICBpZiAodHlwZSA9PSAnbnVtYmVyJ1xuICAgICAgICA/IChpc0FycmF5TGlrZShvYmplY3QpICYmIGlzSW5kZXgoaW5kZXgsIG9iamVjdC5sZW5ndGgpKVxuICAgICAgICA6ICh0eXBlID09ICdzdHJpbmcnICYmIGluZGV4IGluIG9iamVjdClcbiAgICAgICkge1xuICAgIHJldHVybiBlcShvYmplY3RbaW5kZXhdLCB2YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhIHByb3RvdHlwZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm90b3R5cGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNQcm90b3R5cGUodmFsdWUpIHtcbiAgdmFyIEN0b3IgPSB2YWx1ZSAmJiB2YWx1ZS5jb25zdHJ1Y3RvcixcbiAgICAgIHByb3RvID0gKHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3Rvci5wcm90b3R5cGUpIHx8IG9iamVjdFByb3RvO1xuXG4gIHJldHVybiB2YWx1ZSA9PT0gcHJvdG87XG59XG5cbi8qKlxuICogUGVyZm9ybXMgYVxuICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBlcXVpdmFsZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICogdmFyIG90aGVyID0geyAnYSc6IDEgfTtcbiAqXG4gKiBfLmVxKG9iamVjdCwgb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKG9iamVjdCwgb3RoZXIpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKCdhJywgJ2EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKCdhJywgT2JqZWN0KCdhJykpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKE5hTiwgTmFOKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gZXEodmFsdWUsIG90aGVyKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gb3RoZXIgfHwgKHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXIpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhbiBgYXJndW1lbnRzYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxuICogIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FyZ3VtZW50cyh2YWx1ZSkge1xuICAvLyBTYWZhcmkgOC4xIG1ha2VzIGBhcmd1bWVudHMuY2FsbGVlYCBlbnVtZXJhYmxlIGluIHN0cmljdCBtb2RlLlxuICByZXR1cm4gaXNBcnJheUxpa2VPYmplY3QodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxuICAgICghcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpIHx8IG9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpID09IGFyZ3NUYWcpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYW4gYEFycmF5YCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5KGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLiBBIHZhbHVlIGlzIGNvbnNpZGVyZWQgYXJyYXktbGlrZSBpZiBpdCdzXG4gKiBub3QgYSBmdW5jdGlvbiBhbmQgaGFzIGEgYHZhbHVlLmxlbmd0aGAgdGhhdCdzIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIG9yXG4gKiBlcXVhbCB0byBgMGAgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZSgnYWJjJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUxpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhaXNGdW5jdGlvbih2YWx1ZSk7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5pc0FycmF5TGlrZWAgZXhjZXB0IHRoYXQgaXQgYWxzbyBjaGVja3MgaWYgYHZhbHVlYFxuICogaXMgYW4gb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LWxpa2Ugb2JqZWN0LFxuICogIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGlzQXJyYXlMaWtlKHZhbHVlKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYEZ1bmN0aW9uYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBmdW5jdGlvbiwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oXyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0Z1bmN0aW9uKC9hYmMvKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgLy8gVGhlIHVzZSBvZiBgT2JqZWN0I3RvU3RyaW5nYCBhdm9pZHMgaXNzdWVzIHdpdGggdGhlIGB0eXBlb2ZgIG9wZXJhdG9yXG4gIC8vIGluIFNhZmFyaSA4LTkgd2hpY2ggcmV0dXJucyAnb2JqZWN0JyBmb3IgdHlwZWQgYXJyYXkgYW5kIG90aGVyIGNvbnN0cnVjdG9ycy5cbiAgdmFyIHRhZyA9IGlzT2JqZWN0KHZhbHVlKSA/IG9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpIDogJyc7XG4gIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBsZW5ndGguXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAqIFtgVG9MZW5ndGhgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10b2xlbmd0aCkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBsZW5ndGgsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0xlbmd0aCgzKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTGVuZ3RoKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKEluZmluaXR5KTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aCgnMycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNMZW5ndGgodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJlxuICAgIHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPD0gTUFYX1NBRkVfSU5URUdFUjtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGVcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcbiAqIG9mIGBPYmplY3RgLiAoZS5nLiBhcnJheXMsIGZ1bmN0aW9ucywgb2JqZWN0cywgcmVnZXhlcywgYG5ldyBOdW1iZXIoMClgLCBhbmQgYG5ldyBTdHJpbmcoJycpYClcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdCh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiAhIXZhbHVlICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXG4gKiBhbmQgaGFzIGEgYHR5cGVvZmAgcmVzdWx0IG9mIFwib2JqZWN0XCIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdExpa2Uoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc09iamVjdExpa2UobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgcmV0dXJuICEhdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xufVxuXG4vKipcbiAqIEFzc2lnbnMgb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMgb2Ygc291cmNlIG9iamVjdHMgdG8gdGhlXG4gKiBkZXN0aW5hdGlvbiBvYmplY3QuIFNvdXJjZSBvYmplY3RzIGFyZSBhcHBsaWVkIGZyb20gbGVmdCB0byByaWdodC5cbiAqIFN1YnNlcXVlbnQgc291cmNlcyBvdmVyd3JpdGUgcHJvcGVydHkgYXNzaWdubWVudHMgb2YgcHJldmlvdXMgc291cmNlcy5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YCBhbmQgaXMgbG9vc2VseSBiYXNlZCBvblxuICogW2BPYmplY3QuYXNzaWduYF0oaHR0cHM6Ly9tZG4uaW8vT2JqZWN0L2Fzc2lnbikuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEwLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7Li4uT2JqZWN0fSBbc291cmNlc10gVGhlIHNvdXJjZSBvYmplY3RzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqIEBzZWUgXy5hc3NpZ25JblxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiB9XG4gKlxuICogZnVuY3Rpb24gQmFyKCkge1xuICogICB0aGlzLmMgPSAzO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYiA9IDI7XG4gKiBCYXIucHJvdG90eXBlLmQgPSA0O1xuICpcbiAqIF8uYXNzaWduKHsgJ2EnOiAwIH0sIG5ldyBGb28sIG5ldyBCYXIpO1xuICogLy8gPT4geyAnYSc6IDEsICdjJzogMyB9XG4gKi9cbnZhciBhc3NpZ24gPSBjcmVhdGVBc3NpZ25lcihmdW5jdGlvbihvYmplY3QsIHNvdXJjZSkge1xuICBpZiAobm9uRW51bVNoYWRvd3MgfHwgaXNQcm90b3R5cGUoc291cmNlKSB8fCBpc0FycmF5TGlrZShzb3VyY2UpKSB7XG4gICAgY29weU9iamVjdChzb3VyY2UsIGtleXMoc291cmNlKSwgb2JqZWN0KTtcbiAgICByZXR1cm47XG4gIH1cbiAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHNvdXJjZVtrZXldKTtcbiAgICB9XG4gIH1cbn0pO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLiBTZWUgdGhlXG4gKiBbRVMgc3BlY10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gKiBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8ua2V5cyhuZXcgRm9vKTtcbiAqIC8vID0+IFsnYScsICdiJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqXG4gKiBfLmtleXMoJ2hpJyk7XG4gKiAvLyA9PiBbJzAnLCAnMSddXG4gKi9cbmZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG4gIHJldHVybiBpc0FycmF5TGlrZShvYmplY3QpID8gYXJyYXlMaWtlS2V5cyhvYmplY3QpIDogYmFzZUtleXMob2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc3NpZ247XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiNDRhZFwiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgZmFpbHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiZDAzOVwiKTtcbnZhciBjbGFzc29mID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImM2YjZcIik7XG5cbnZhciBzcGxpdCA9ICcnLnNwbGl0O1xuXG4vLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIHRocm93cyBhbiBlcnJvciBpbiByaGlubywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3JoaW5vL2lzc3Vlcy8zNDZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICByZXR1cm4gIU9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApO1xufSkgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoaXQpID09ICdTdHJpbmcnID8gc3BsaXQuY2FsbChpdCwgJycpIDogT2JqZWN0KGl0KTtcbn0gOiBPYmplY3Q7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiNDRkMlwiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgd2VsbEtub3duU3ltYm9sID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImI2MjJcIik7XG52YXIgY3JlYXRlID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjdjNzNcIik7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiOWJmMlwiKTtcblxudmFyIFVOU0NPUEFCTEVTID0gd2VsbEtub3duU3ltYm9sKCd1bnNjb3BhYmxlcycpO1xudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG4vLyBBcnJheS5wcm90b3R5cGVbQEB1bnNjb3BhYmxlc11cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQHVuc2NvcGFibGVzXG5pZiAoQXJyYXlQcm90b3R5cGVbVU5TQ09QQUJMRVNdID09IHVuZGVmaW5lZCkge1xuICBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKEFycmF5UHJvdG90eXBlLCBVTlNDT1BBQkxFUywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB2YWx1ZTogY3JlYXRlKG51bGwpXG4gIH0pO1xufVxuXG4vLyBhZGQgYSBrZXkgdG8gQXJyYXkucHJvdG90eXBlW0BAdW5zY29wYWJsZXNdXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgQXJyYXlQcm90b3R5cGVbVU5TQ09QQUJMRVNdW2tleV0gPSB0cnVlO1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCI0NGU3XCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oXCI4NjFkXCIpO1xudmFyIGNsYXNzb2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiYzZiNlwiKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiYjYyMlwiKTtcblxudmFyIE1BVENIID0gd2VsbEtub3duU3ltYm9sKCdtYXRjaCcpO1xuXG4vLyBgSXNSZWdFeHBgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtaXNyZWdleHBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBpc1JlZ0V4cDtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiAoKGlzUmVnRXhwID0gaXRbTUFUQ0hdKSAhPT0gdW5kZWZpbmVkID8gISFpc1JlZ0V4cCA6IGNsYXNzb2YoaXQpID09ICdSZWdFeHAnKTtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiNDY2ZFwiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIGZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImQ3ODRcIik7XG52YXIgYW5PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiODI1YVwiKTtcbnZhciB0b0xlbmd0aCA9IF9fd2VicGFja19yZXF1aXJlX18oXCI1MGM0XCIpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiMWQ4MFwiKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiOGFhNVwiKTtcbnZhciByZWdFeHBFeGVjID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjE0YzNcIik7XG5cbi8vIEBAbWF0Y2ggbG9naWNcbmZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljKCdtYXRjaCcsIDEsIGZ1bmN0aW9uIChNQVRDSCwgbmF0aXZlTWF0Y2gsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLm1hdGNoYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLm1hdGNoXG4gICAgZnVuY3Rpb24gbWF0Y2gocmVnZXhwKSB7XG4gICAgICB2YXIgTyA9IHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcyk7XG4gICAgICB2YXIgbWF0Y2hlciA9IHJlZ2V4cCA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiByZWdleHBbTUFUQ0hdO1xuICAgICAgcmV0dXJuIG1hdGNoZXIgIT09IHVuZGVmaW5lZCA/IG1hdGNoZXIuY2FsbChyZWdleHAsIE8pIDogbmV3IFJlZ0V4cChyZWdleHApW01BVENIXShTdHJpbmcoTykpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBtYXRjaF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBtYXRjaFxuICAgIGZ1bmN0aW9uIChyZWdleHApIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUobmF0aXZlTWF0Y2gsIHJlZ2V4cCwgdGhpcyk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcblxuICAgICAgaWYgKCFyeC5nbG9iYWwpIHJldHVybiByZWdFeHBFeGVjKHJ4LCBTKTtcblxuICAgICAgdmFyIGZ1bGxVbmljb2RlID0gcngudW5pY29kZTtcbiAgICAgIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB2YXIgQSA9IFtdO1xuICAgICAgdmFyIG4gPSAwO1xuICAgICAgdmFyIHJlc3VsdDtcbiAgICAgIHdoaWxlICgocmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUykpICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBtYXRjaFN0ciA9IFN0cmluZyhyZXN1bHRbMF0pO1xuICAgICAgICBBW25dID0gbWF0Y2hTdHI7XG4gICAgICAgIGlmIChtYXRjaFN0ciA9PT0gJycpIHJ4Lmxhc3RJbmRleCA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCB0b0xlbmd0aChyeC5sYXN0SW5kZXgpLCBmdWxsVW5pY29kZSk7XG4gICAgICAgIG4rKztcbiAgICAgIH1cbiAgICAgIHJldHVybiBuID09PSAwID8gbnVsbCA6IEE7XG4gICAgfVxuICBdO1xufSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiNDg0MFwiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgYW5PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiODI1YVwiKTtcbnZhciBhRnVuY3Rpb24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiMWMwYlwiKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiYjYyMlwiKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxuLy8gYFNwZWNpZXNDb25zdHJ1Y3RvcmAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zcGVjaWVzY29uc3RydWN0b3Jcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGRlZmF1bHRDb25zdHJ1Y3Rvcikge1xuICB2YXIgQyA9IGFuT2JqZWN0KE8pLmNvbnN0cnVjdG9yO1xuICB2YXIgUztcbiAgcmV0dXJuIEMgPT09IHVuZGVmaW5lZCB8fCAoUyA9IGFuT2JqZWN0KEMpW1NQRUNJRVNdKSA9PSB1bmRlZmluZWQgPyBkZWZhdWx0Q29uc3RydWN0b3IgOiBhRnVuY3Rpb24oUyk7XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIjQ5MzBcIjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGZhaWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImQwMzlcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIENocm9tZSAzOCBTeW1ib2wgaGFzIGluY29ycmVjdCB0b1N0cmluZyBjb252ZXJzaW9uXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICByZXR1cm4gIVN0cmluZyhTeW1ib2woKSk7XG59KTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCI0ZDY0XCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciB0b0luZGV4ZWRPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiZmM2YVwiKTtcbnZhciB0b0xlbmd0aCA9IF9fd2VicGFja19yZXF1aXJlX18oXCI1MGM0XCIpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IF9fd2VicGFja19yZXF1aXJlX18oXCIyM2NiXCIpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgaW5kZXhPZiwgaW5jbHVkZXMgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChJU19JTkNMVURFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBlbCwgZnJvbUluZGV4KSB7XG4gICAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3QoJHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICBpZiAoKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pICYmIE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5jbHVkZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbiAgaW5jbHVkZXM6IGNyZWF0ZU1ldGhvZCh0cnVlKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmRleE9mYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluZGV4b2ZcbiAgaW5kZXhPZjogY3JlYXRlTWV0aG9kKGZhbHNlKVxufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCI0ZGU0XCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oXCIyM2U3XCIpO1xudmFyICRmaWx0ZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiYjcyN1wiKS5maWx0ZXI7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oXCIxZGRlXCIpO1xudmFyIGFycmF5TWV0aG9kVXNlc1RvTGVuZ3RoID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImFlNDBcIik7XG5cbnZhciBIQVNfU1BFQ0lFU19TVVBQT1JUID0gYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnZmlsdGVyJyk7XG4vLyBFZGdlIDE0LSBpc3N1ZVxudmFyIFVTRVNfVE9fTEVOR1RIID0gYXJyYXlNZXRob2RVc2VzVG9MZW5ndGgoJ2ZpbHRlcicpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmlsdGVyXG4vLyB3aXRoIGFkZGluZyBzdXBwb3J0IG9mIEBAc3BlY2llc1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIUhBU19TUEVDSUVTX1NVUFBPUlQgfHwgIVVTRVNfVE9fTEVOR1RIIH0sIHtcbiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZpbHRlcih0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIjRkZjRcIjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBiaW5kID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjAzNjZcIik7XG52YXIgdG9PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiN2IwYlwiKTtcbnZhciBjYWxsV2l0aFNhZmVJdGVyYXRpb25DbG9zaW5nID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjliZGRcIik7XG52YXIgaXNBcnJheUl0ZXJhdG9yTWV0aG9kID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImU5NWFcIik7XG52YXIgdG9MZW5ndGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiNTBjNFwiKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IF9fd2VicGFja19yZXF1aXJlX18oXCI4NDE4XCIpO1xudmFyIGdldEl0ZXJhdG9yTWV0aG9kID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjM1YTFcIik7XG5cbi8vIGBBcnJheS5mcm9tYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LmZyb21cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZnJvbShhcnJheUxpa2UgLyogLCBtYXBmbiA9IHVuZGVmaW5lZCwgdGhpc0FyZyA9IHVuZGVmaW5lZCAqLykge1xuICB2YXIgTyA9IHRvT2JqZWN0KGFycmF5TGlrZSk7XG4gIHZhciBDID0gdHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiBBcnJheTtcbiAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBtYXBmbiA9IGFyZ3VtZW50c0xlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gIHZhciBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZDtcbiAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gZ2V0SXRlcmF0b3JNZXRob2QoTyk7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsZW5ndGgsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3IsIG5leHQsIHZhbHVlO1xuICBpZiAobWFwcGluZykgbWFwZm4gPSBiaW5kKG1hcGZuLCBhcmd1bWVudHNMZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkLCAyKTtcbiAgLy8gaWYgdGhlIHRhcmdldCBpcyBub3QgaXRlcmFibGUgb3IgaXQncyBhbiBhcnJheSB3aXRoIHRoZSBkZWZhdWx0IGl0ZXJhdG9yIC0gdXNlIGEgc2ltcGxlIGNhc2VcbiAgaWYgKGl0ZXJhdG9yTWV0aG9kICE9IHVuZGVmaW5lZCAmJiAhKEMgPT0gQXJyYXkgJiYgaXNBcnJheUl0ZXJhdG9yTWV0aG9kKGl0ZXJhdG9yTWV0aG9kKSkpIHtcbiAgICBpdGVyYXRvciA9IGl0ZXJhdG9yTWV0aG9kLmNhbGwoTyk7XG4gICAgbmV4dCA9IGl0ZXJhdG9yLm5leHQ7XG4gICAgcmVzdWx0ID0gbmV3IEMoKTtcbiAgICBmb3IgKDshKHN0ZXAgPSBuZXh0LmNhbGwoaXRlcmF0b3IpKS5kb25lOyBpbmRleCsrKSB7XG4gICAgICB2YWx1ZSA9IG1hcHBpbmcgPyBjYWxsV2l0aFNhZmVJdGVyYXRpb25DbG9zaW5nKGl0ZXJhdG9yLCBtYXBmbiwgW3N0ZXAudmFsdWUsIGluZGV4XSwgdHJ1ZSkgOiBzdGVwLnZhbHVlO1xuICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgdmFsdWUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgcmVzdWx0ID0gbmV3IEMobGVuZ3RoKTtcbiAgICBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgdmFsdWUgPSBtYXBwaW5nID8gbWFwZm4oT1tpbmRleF0sIGluZGV4KSA6IE9baW5kZXhdO1xuICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgdmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXN1bHQubGVuZ3RoID0gaW5kZXg7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIjUwYzRcIjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIHRvSW50ZWdlciA9IF9fd2VicGFja19yZXF1aXJlX18oXCJhNjkxXCIpO1xuXG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBUb0xlbmd0aGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy10b2xlbmd0aFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGFyZ3VtZW50ID4gMCA/IG1pbih0b0ludGVnZXIoYXJndW1lbnQpLCAweDFGRkZGRkZGRkZGRkZGKSA6IDA7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiNTEzNVwiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiNTY5MlwiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgSVNfUFVSRSA9IF9fd2VicGFja19yZXF1aXJlX18oXCJjNDMwXCIpO1xudmFyIHN0b3JlID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImM2Y2RcIik7XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoge30pO1xufSkoJ3ZlcnNpb25zJywgW10pLnB1c2goe1xuICB2ZXJzaW9uOiAnMy42LjQnLFxuICBtb2RlOiBJU19QVVJFID8gJ3B1cmUnIDogJ2dsb2JhbCcsXG4gIGNvcHlyaWdodDogJ8KpIDIwMjAgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknXG59KTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCI1NmVmXCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBnZXRCdWlsdEluID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImQwNjZcIik7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IF9fd2VicGFja19yZXF1aXJlX18oXCIyNDFjXCIpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IF9fd2VicGFja19yZXF1aXJlX18oXCI3NDE4XCIpO1xudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjgyNWFcIik7XG5cbi8vIGFsbCBvYmplY3Qga2V5cywgaW5jbHVkZXMgbm9uLWVudW1lcmFibGUgYW5kIHN5bWJvbHNcbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdvd25LZXlzJykgfHwgZnVuY3Rpb24gb3duS2V5cyhpdCkge1xuICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZihhbk9iamVjdChpdCkpO1xuICB2YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmY7XG4gIHJldHVybiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyBrZXlzLmNvbmNhdChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpKSA6IGtleXM7XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIjU4OTlcIjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuLy8gYSBzdHJpbmcgb2YgYWxsIHZhbGlkIHVuaWNvZGUgd2hpdGVzcGFjZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG5tb2R1bGUuZXhwb3J0cyA9ICdcXHUwMDA5XFx1MDAwQVxcdTAwMEJcXHUwMDBDXFx1MDAwRFxcdTAwMjBcXHUwMEEwXFx1MTY4MFxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOFxcdTIwMjlcXHVGRUZGJztcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCI1OGE4XCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjFkODBcIik7XG52YXIgd2hpdGVzcGFjZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiNTg5OVwiKTtcblxudmFyIHdoaXRlc3BhY2UgPSAnWycgKyB3aGl0ZXNwYWNlcyArICddJztcbnZhciBsdHJpbSA9IFJlZ0V4cCgnXicgKyB3aGl0ZXNwYWNlICsgd2hpdGVzcGFjZSArICcqJyk7XG52YXIgcnRyaW0gPSBSZWdFeHAod2hpdGVzcGFjZSArIHdoaXRlc3BhY2UgKyAnKiQnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltLCB0cmltU3RhcnQsIHRyaW1FbmQsIHRyaW1MZWZ0LCB0cmltUmlnaHQgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMpIHtcbiAgICB2YXIgc3RyaW5nID0gU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUoJHRoaXMpKTtcbiAgICBpZiAoVFlQRSAmIDEpIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKGx0cmltLCAnJyk7XG4gICAgaWYgKFRZUEUgJiAyKSBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShydHJpbSwgJycpO1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltTGVmdCwgdHJpbVN0YXJ0IH1gIG1ldGhvZHNcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltc3RhcnRcbiAgc3RhcnQ6IGNyZWF0ZU1ldGhvZCgxKSxcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltUmlnaHQsIHRyaW1FbmQgfWAgbWV0aG9kc1xuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1lbmRcbiAgZW5kOiBjcmVhdGVNZXRob2QoMiksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLnRyaW1gIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1cbiAgdHJpbTogY3JlYXRlTWV0aG9kKDMpXG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIjVjNmNcIjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCI2MGRhXCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgREVTQ1JJUFRPUlMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiODNhYlwiKTtcbnZhciBmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oXCJkMDM5XCIpO1xudmFyIG9iamVjdEtleXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiZGY3NVwiKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiNzQxOFwiKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IF9fd2VicGFja19yZXF1aXJlX18oXCJkMWU3XCIpO1xudmFyIHRvT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjdiMGJcIik7XG52YXIgSW5kZXhlZE9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oXCI0NGFkXCIpO1xuXG52YXIgbmF0aXZlQXNzaWduID0gT2JqZWN0LmFzc2lnbjtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxuLy8gYE9iamVjdC5hc3NpZ25gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmFzc2lnblxubW9kdWxlLmV4cG9ydHMgPSAhbmF0aXZlQXNzaWduIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gc2hvdWxkIGhhdmUgY29ycmVjdCBvcmRlciBvZiBvcGVyYXRpb25zIChFZGdlIGJ1ZylcbiAgaWYgKERFU0NSSVBUT1JTICYmIG5hdGl2ZUFzc2lnbih7IGI6IDEgfSwgbmF0aXZlQXNzaWduKGRlZmluZVByb3BlcnR5KHt9LCAnYScsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGhpcywgJ2InLCB7XG4gICAgICAgIHZhbHVlOiAzLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfVxuICB9KSwgeyBiOiAyIH0pKS5iICE9PSAxKSByZXR1cm4gdHJ1ZTtcbiAgLy8gc2hvdWxkIHdvcmsgd2l0aCBzeW1ib2xzIGFuZCBzaG91bGQgaGF2ZSBkZXRlcm1pbmlzdGljIHByb3BlcnR5IG9yZGVyIChWOCBidWcpXG4gIHZhciBBID0ge307XG4gIHZhciBCID0ge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICB2YXIgc3ltYm9sID0gU3ltYm9sKCk7XG4gIHZhciBhbHBoYWJldCA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdCc7XG4gIEFbc3ltYm9sXSA9IDc7XG4gIGFscGhhYmV0LnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChjaHIpIHsgQltjaHJdID0gY2hyOyB9KTtcbiAgcmV0dXJuIG5hdGl2ZUFzc2lnbih7fSwgQSlbc3ltYm9sXSAhPSA3IHx8IG9iamVjdEtleXMobmF0aXZlQXNzaWduKHt9LCBCKSkuam9pbignJykgIT0gYWxwaGFiZXQ7XG59KSA/IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIHNvdXJjZSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gIHZhciBUID0gdG9PYmplY3QodGFyZ2V0KTtcbiAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDE7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgdmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZjtcbiAgd2hpbGUgKGFyZ3VtZW50c0xlbmd0aCA+IGluZGV4KSB7XG4gICAgdmFyIFMgPSBJbmRleGVkT2JqZWN0KGFyZ3VtZW50c1tpbmRleCsrXSk7XG4gICAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyBvYmplY3RLZXlzKFMpLmNvbmNhdChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoUykpIDogb2JqZWN0S2V5cyhTKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGogPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGopIHtcbiAgICAgIGtleSA9IGtleXNbaisrXTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMgfHwgcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChTLCBrZXkpKSBUW2tleV0gPSBTW2tleV07XG4gICAgfVxuICB9IHJldHVybiBUO1xufSA6IG5hdGl2ZUFzc2lnbjtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCI2NTQ3XCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciB0b0ludGVnZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiYTY5MVwiKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjFkODBcIik7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLnsgY29kZVBvaW50QXQsIGF0IH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoQ09OVkVSVF9UT19TVFJJTkcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgcG9zKSB7XG4gICAgdmFyIFMgPSBTdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSgkdGhpcykpO1xuICAgIHZhciBwb3NpdGlvbiA9IHRvSW50ZWdlcihwb3MpO1xuICAgIHZhciBzaXplID0gUy5sZW5ndGg7XG4gICAgdmFyIGZpcnN0LCBzZWNvbmQ7XG4gICAgaWYgKHBvc2l0aW9uIDwgMCB8fCBwb3NpdGlvbiA+PSBzaXplKSByZXR1cm4gQ09OVkVSVF9UT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICBmaXJzdCA9IFMuY2hhckNvZGVBdChwb3NpdGlvbik7XG4gICAgcmV0dXJuIGZpcnN0IDwgMHhEODAwIHx8IGZpcnN0ID4gMHhEQkZGIHx8IHBvc2l0aW9uICsgMSA9PT0gc2l6ZVxuICAgICAgfHwgKHNlY29uZCA9IFMuY2hhckNvZGVBdChwb3NpdGlvbiArIDEpKSA8IDB4REMwMCB8fCBzZWNvbmQgPiAweERGRkZcbiAgICAgICAgPyBDT05WRVJUX1RPX1NUUklORyA/IFMuY2hhckF0KHBvc2l0aW9uKSA6IGZpcnN0XG4gICAgICAgIDogQ09OVkVSVF9UT19TVFJJTkcgPyBTLnNsaWNlKHBvc2l0aW9uLCBwb3NpdGlvbiArIDIpIDogKGZpcnN0IC0gMHhEODAwIDw8IDEwKSArIChzZWNvbmQgLSAweERDMDApICsgMHgxMDAwMDtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgU3RyaW5nLnByb3RvdHlwZS5jb2RlUG9pbnRBdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuY29kZXBvaW50YXRcbiAgY29kZUF0OiBjcmVhdGVNZXRob2QoZmFsc2UpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS5hdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5wcm90b3R5cGUuYXRcbiAgY2hhckF0OiBjcmVhdGVNZXRob2QodHJ1ZSlcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiNjVmMFwiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgaXNPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiODYxZFwiKTtcbnZhciBpc0FycmF5ID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImU4YjVcIik7XG52YXIgd2VsbEtub3duU3ltYm9sID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImI2MjJcIik7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbi8vIGBBcnJheVNwZWNpZXNDcmVhdGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXlzcGVjaWVzY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbEFycmF5LCBsZW5ndGgpIHtcbiAgdmFyIEM7XG4gIGlmIChpc0FycmF5KG9yaWdpbmFsQXJyYXkpKSB7XG4gICAgQyA9IG9yaWdpbmFsQXJyYXkuY29uc3RydWN0b3I7XG4gICAgLy8gY3Jvc3MtcmVhbG0gZmFsbGJhY2tcbiAgICBpZiAodHlwZW9mIEMgPT0gJ2Z1bmN0aW9uJyAmJiAoQyA9PT0gQXJyYXkgfHwgaXNBcnJheShDLnByb3RvdHlwZSkpKSBDID0gdW5kZWZpbmVkO1xuICAgIGVsc2UgaWYgKGlzT2JqZWN0KEMpKSB7XG4gICAgICBDID0gQ1tTUEVDSUVTXTtcbiAgICAgIGlmIChDID09PSBudWxsKSBDID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSByZXR1cm4gbmV3IChDID09PSB1bmRlZmluZWQgPyBBcnJheSA6IEMpKGxlbmd0aCA9PT0gMCA/IDAgOiBsZW5ndGgpO1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCI2OWYzXCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBOQVRJVkVfV0VBS19NQVAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiN2Y5YVwiKTtcbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiZGE4NFwiKTtcbnZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oXCI4NjFkXCIpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IF9fd2VicGFja19yZXF1aXJlX18oXCI5MTEyXCIpO1xudmFyIG9iamVjdEhhcyA9IF9fd2VicGFja19yZXF1aXJlX18oXCI1MTM1XCIpO1xudmFyIHNoYXJlZEtleSA9IF9fd2VicGFja19yZXF1aXJlX18oXCJmNzcyXCIpO1xudmFyIGhpZGRlbktleXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiZDAxMlwiKTtcblxudmFyIFdlYWtNYXAgPSBnbG9iYWwuV2Vha01hcDtcbnZhciBzZXQsIGdldCwgaGFzO1xuXG52YXIgZW5mb3JjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaGFzKGl0KSA/IGdldChpdCkgOiBzZXQoaXQsIHt9KTtcbn07XG5cbnZhciBnZXR0ZXJGb3IgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIHN0YXRlO1xuICAgIGlmICghaXNPYmplY3QoaXQpIHx8IChzdGF0ZSA9IGdldChpdCkpLnR5cGUgIT09IFRZUEUpIHtcbiAgICAgIHRocm93IFR5cGVFcnJvcignSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAnICsgVFlQRSArICcgcmVxdWlyZWQnKTtcbiAgICB9IHJldHVybiBzdGF0ZTtcbiAgfTtcbn07XG5cbmlmIChOQVRJVkVfV0VBS19NQVApIHtcbiAgdmFyIHN0b3JlID0gbmV3IFdlYWtNYXAoKTtcbiAgdmFyIHdtZ2V0ID0gc3RvcmUuZ2V0O1xuICB2YXIgd21oYXMgPSBzdG9yZS5oYXM7XG4gIHZhciB3bXNldCA9IHN0b3JlLnNldDtcbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIHdtc2V0LmNhbGwoc3RvcmUsIGl0LCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gd21nZXQuY2FsbChzdG9yZSwgaXQpIHx8IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gd21oYXMuY2FsbChzdG9yZSwgaXQpO1xuICB9O1xufSBlbHNlIHtcbiAgdmFyIFNUQVRFID0gc2hhcmVkS2V5KCdzdGF0ZScpO1xuICBoaWRkZW5LZXlzW1NUQVRFXSA9IHRydWU7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoaXQsIFNUQVRFLCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gb2JqZWN0SGFzKGl0LCBTVEFURSkgPyBpdFtTVEFURV0gOiB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIG9iamVjdEhhcyhpdCwgU1RBVEUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXQsXG4gIGdldDogZ2V0LFxuICBoYXM6IGhhcyxcbiAgZW5mb3JjZTogZW5mb3JjZSxcbiAgZ2V0dGVyRm9yOiBnZXR0ZXJGb3Jcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiNmRkOFwiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqLyhmdW5jdGlvbihnbG9iYWwpIHsvKipcclxuICogQSBjb2xsZWN0aW9uIG9mIHNoaW1zIHRoYXQgcHJvdmlkZSBtaW5pbWFsIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIEVTNiBjb2xsZWN0aW9ucy5cclxuICpcclxuICogVGhlc2UgaW1wbGVtZW50YXRpb25zIGFyZSBub3QgbWVhbnQgdG8gYmUgdXNlZCBvdXRzaWRlIG9mIHRoZSBSZXNpemVPYnNlcnZlclxyXG4gKiBtb2R1bGVzIGFzIHRoZXkgY292ZXIgb25seSBhIGxpbWl0ZWQgcmFuZ2Ugb2YgdXNlIGNhc2VzLlxyXG4gKi9cclxuLyogZXNsaW50LWRpc2FibGUgcmVxdWlyZS1qc2RvYywgdmFsaWQtanNkb2MgKi9cclxudmFyIE1hcFNoaW0gPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKHR5cGVvZiBNYXAgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgcmV0dXJuIE1hcDtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBpbmRleCBpbiBwcm92aWRlZCBhcnJheSB0aGF0IG1hdGNoZXMgdGhlIHNwZWNpZmllZCBrZXkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtBcnJheTxBcnJheT59IGFyclxyXG4gICAgICogQHBhcmFtIHsqfSBrZXlcclxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIGdldEluZGV4KGFyciwga2V5KSB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IC0xO1xyXG4gICAgICAgIGFyci5zb21lKGZ1bmN0aW9uIChlbnRyeSwgaW5kZXgpIHtcclxuICAgICAgICAgICAgaWYgKGVudHJ5WzBdID09PSBrZXkpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGluZGV4O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIGNsYXNzXzEoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX19lbnRyaWVzX18gPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNsYXNzXzEucHJvdG90eXBlLCBcInNpemVcIiwge1xyXG4gICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9fZW50cmllc19fLmxlbmd0aDtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHBhcmFtIHsqfSBrZXlcclxuICAgICAgICAgKiBAcmV0dXJucyB7Kn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBjbGFzc18xLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgICAgIHZhciBpbmRleCA9IGdldEluZGV4KHRoaXMuX19lbnRyaWVzX18sIGtleSk7XHJcbiAgICAgICAgICAgIHZhciBlbnRyeSA9IHRoaXMuX19lbnRyaWVzX19baW5kZXhdO1xyXG4gICAgICAgICAgICByZXR1cm4gZW50cnkgJiYgZW50cnlbMV07XHJcbiAgICAgICAgfTtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAcGFyYW0geyp9IGtleVxyXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWVcclxuICAgICAgICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBjbGFzc18xLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgICAgICB2YXIgaW5kZXggPSBnZXRJbmRleCh0aGlzLl9fZW50cmllc19fLCBrZXkpO1xyXG4gICAgICAgICAgICBpZiAofmluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9fZW50cmllc19fW2luZGV4XVsxXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fX2VudHJpZXNfXy5wdXNoKFtrZXksIHZhbHVlXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBwYXJhbSB7Kn0ga2V5XHJcbiAgICAgICAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY2xhc3NfMS5wcm90b3R5cGUuZGVsZXRlID0gZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgICAgICB2YXIgZW50cmllcyA9IHRoaXMuX19lbnRyaWVzX187XHJcbiAgICAgICAgICAgIHZhciBpbmRleCA9IGdldEluZGV4KGVudHJpZXMsIGtleSk7XHJcbiAgICAgICAgICAgIGlmICh+aW5kZXgpIHtcclxuICAgICAgICAgICAgICAgIGVudHJpZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHBhcmFtIHsqfSBrZXlcclxuICAgICAgICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBjbGFzc18xLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgICAgIHJldHVybiAhIX5nZXRJbmRleCh0aGlzLl9fZW50cmllc19fLCBrZXkpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY2xhc3NfMS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX19lbnRyaWVzX18uc3BsaWNlKDApO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcclxuICAgICAgICAgKiBAcGFyYW0geyp9IFtjdHg9bnVsbF1cclxuICAgICAgICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBjbGFzc18xLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrLCBjdHgpIHtcclxuICAgICAgICAgICAgaWYgKGN0eCA9PT0gdm9pZCAwKSB7IGN0eCA9IG51bGw7IH1cclxuICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHRoaXMuX19lbnRyaWVzX187IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSBfYVtfaV07XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKGN0eCwgZW50cnlbMV0sIGVudHJ5WzBdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIGNsYXNzXzE7XHJcbiAgICB9KCkpO1xyXG59KSgpO1xuXG4vKipcclxuICogRGV0ZWN0cyB3aGV0aGVyIHdpbmRvdyBhbmQgZG9jdW1lbnQgb2JqZWN0cyBhcmUgYXZhaWxhYmxlIGluIGN1cnJlbnQgZW52aXJvbm1lbnQuXHJcbiAqL1xyXG52YXIgaXNCcm93c2VyID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuZG9jdW1lbnQgPT09IGRvY3VtZW50O1xuXG4vLyBSZXR1cm5zIGdsb2JhbCBvYmplY3Qgb2YgYSBjdXJyZW50IGVudmlyb25tZW50LlxyXG52YXIgZ2xvYmFsJDEgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnICYmIGdsb2JhbC5NYXRoID09PSBNYXRoKSB7XHJcbiAgICAgICAgcmV0dXJuIGdsb2JhbDtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgJiYgc2VsZi5NYXRoID09PSBNYXRoKSB7XHJcbiAgICAgICAgcmV0dXJuIHNlbGY7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lk1hdGggPT09IE1hdGgpIHtcclxuICAgICAgICByZXR1cm4gd2luZG93O1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXHJcbiAgICByZXR1cm4gRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcclxufSkoKTtcblxuLyoqXHJcbiAqIEEgc2hpbSBmb3IgdGhlIHJlcXVlc3RBbmltYXRpb25GcmFtZSB3aGljaCBmYWxscyBiYWNrIHRvIHRoZSBzZXRUaW1lb3V0IGlmXHJcbiAqIGZpcnN0IG9uZSBpcyBub3Qgc3VwcG9ydGVkLlxyXG4gKlxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXF1ZXN0cycgaWRlbnRpZmllci5cclxuICovXHJcbnZhciByZXF1ZXN0QW5pbWF0aW9uRnJhbWUkMSA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAodHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIC8vIEl0J3MgcmVxdWlyZWQgdG8gdXNlIGEgYm91bmRlZCBmdW5jdGlvbiBiZWNhdXNlIElFIHNvbWV0aW1lcyB0aHJvd3NcclxuICAgICAgICAvLyBhbiBcIkludmFsaWQgY2FsbGluZyBvYmplY3RcIiBlcnJvciBpZiByQUYgaXMgaW52b2tlZCB3aXRob3V0IHRoZSBnbG9iYWxcclxuICAgICAgICAvLyBvYmplY3Qgb24gdGhlIGxlZnQgaGFuZCBzaWRlLlxyXG4gICAgICAgIHJldHVybiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZChnbG9iYWwkMSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGNhbGxiYWNrKSB7IHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNhbGxiYWNrKERhdGUubm93KCkpOyB9LCAxMDAwIC8gNjApOyB9O1xyXG59KSgpO1xuXG4vLyBEZWZpbmVzIG1pbmltdW0gdGltZW91dCBiZWZvcmUgYWRkaW5nIGEgdHJhaWxpbmcgY2FsbC5cclxudmFyIHRyYWlsaW5nVGltZW91dCA9IDI7XHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgd3JhcHBlciBmdW5jdGlvbiB3aGljaCBlbnN1cmVzIHRoYXQgcHJvdmlkZWQgY2FsbGJhY2sgd2lsbCBiZVxyXG4gKiBpbnZva2VkIG9ubHkgb25jZSBkdXJpbmcgdGhlIHNwZWNpZmllZCBkZWxheSBwZXJpb2QuXHJcbiAqXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIC0gRnVuY3Rpb24gdG8gYmUgaW52b2tlZCBhZnRlciB0aGUgZGVsYXkgcGVyaW9kLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gZGVsYXkgLSBEZWxheSBhZnRlciB3aGljaCB0byBpbnZva2UgY2FsbGJhY2suXHJcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cclxuICovXHJcbmZ1bmN0aW9uIHRocm90dGxlIChjYWxsYmFjaywgZGVsYXkpIHtcclxuICAgIHZhciBsZWFkaW5nQ2FsbCA9IGZhbHNlLCB0cmFpbGluZ0NhbGwgPSBmYWxzZSwgbGFzdENhbGxUaW1lID0gMDtcclxuICAgIC8qKlxyXG4gICAgICogSW52b2tlcyB0aGUgb3JpZ2luYWwgY2FsbGJhY2sgZnVuY3Rpb24gYW5kIHNjaGVkdWxlcyBuZXcgaW52b2NhdGlvbiBpZlxyXG4gICAgICogdGhlIFwicHJveHlcIiB3YXMgY2FsbGVkIGR1cmluZyBjdXJyZW50IHJlcXVlc3QuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIHJlc29sdmVQZW5kaW5nKCkge1xyXG4gICAgICAgIGlmIChsZWFkaW5nQ2FsbCkge1xyXG4gICAgICAgICAgICBsZWFkaW5nQ2FsbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBjYWxsYmFjaygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHJhaWxpbmdDYWxsKSB7XHJcbiAgICAgICAgICAgIHByb3h5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsYmFjayBpbnZva2VkIGFmdGVyIHRoZSBzcGVjaWZpZWQgZGVsYXkuIEl0IHdpbGwgZnVydGhlciBwb3N0cG9uZVxyXG4gICAgICogaW52b2NhdGlvbiBvZiB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gZGVsZWdhdGluZyBpdCB0byB0aGVcclxuICAgICAqIHJlcXVlc3RBbmltYXRpb25GcmFtZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gdGltZW91dENhbGxiYWNrKCkge1xyXG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSQxKHJlc29sdmVQZW5kaW5nKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogU2NoZWR1bGVzIGludm9jYXRpb24gb2YgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBwcm94eSgpIHtcclxuICAgICAgICB2YXIgdGltZVN0YW1wID0gRGF0ZS5ub3coKTtcclxuICAgICAgICBpZiAobGVhZGluZ0NhbGwpIHtcclxuICAgICAgICAgICAgLy8gUmVqZWN0IGltbWVkaWF0ZWx5IGZvbGxvd2luZyBjYWxscy5cclxuICAgICAgICAgICAgaWYgKHRpbWVTdGFtcCAtIGxhc3RDYWxsVGltZSA8IHRyYWlsaW5nVGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIFNjaGVkdWxlIG5ldyBjYWxsIHRvIGJlIGluIGludm9rZWQgd2hlbiB0aGUgcGVuZGluZyBvbmUgaXMgcmVzb2x2ZWQuXHJcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgaW1wb3J0YW50IGZvciBcInRyYW5zaXRpb25zXCIgd2hpY2ggbmV2ZXIgYWN0dWFsbHkgc3RhcnRcclxuICAgICAgICAgICAgLy8gaW1tZWRpYXRlbHkgc28gdGhlcmUgaXMgYSBjaGFuY2UgdGhhdCB3ZSBtaWdodCBtaXNzIG9uZSBpZiBjaGFuZ2VcclxuICAgICAgICAgICAgLy8gaGFwcGVucyBhbWlkcyB0aGUgcGVuZGluZyBpbnZvY2F0aW9uLlxyXG4gICAgICAgICAgICB0cmFpbGluZ0NhbGwgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbGVhZGluZ0NhbGwgPSB0cnVlO1xyXG4gICAgICAgICAgICB0cmFpbGluZ0NhbGwgPSBmYWxzZTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCh0aW1lb3V0Q2FsbGJhY2ssIGRlbGF5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGFzdENhbGxUaW1lID0gdGltZVN0YW1wO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHByb3h5O1xyXG59XG5cbi8vIE1pbmltdW0gZGVsYXkgYmVmb3JlIGludm9raW5nIHRoZSB1cGRhdGUgb2Ygb2JzZXJ2ZXJzLlxyXG52YXIgUkVGUkVTSF9ERUxBWSA9IDIwO1xyXG4vLyBBIGxpc3Qgb2Ygc3Vic3RyaW5ncyBvZiBDU1MgcHJvcGVydGllcyB1c2VkIHRvIGZpbmQgdHJhbnNpdGlvbiBldmVudHMgdGhhdFxyXG4vLyBtaWdodCBhZmZlY3QgZGltZW5zaW9ucyBvZiBvYnNlcnZlZCBlbGVtZW50cy5cclxudmFyIHRyYW5zaXRpb25LZXlzID0gWyd0b3AnLCAncmlnaHQnLCAnYm90dG9tJywgJ2xlZnQnLCAnd2lkdGgnLCAnaGVpZ2h0JywgJ3NpemUnLCAnd2VpZ2h0J107XHJcbi8vIENoZWNrIGlmIE11dGF0aW9uT2JzZXJ2ZXIgaXMgYXZhaWxhYmxlLlxyXG52YXIgbXV0YXRpb25PYnNlcnZlclN1cHBvcnRlZCA9IHR5cGVvZiBNdXRhdGlvbk9ic2VydmVyICE9PSAndW5kZWZpbmVkJztcclxuLyoqXHJcbiAqIFNpbmdsZXRvbiBjb250cm9sbGVyIGNsYXNzIHdoaWNoIGhhbmRsZXMgdXBkYXRlcyBvZiBSZXNpemVPYnNlcnZlciBpbnN0YW5jZXMuXHJcbiAqL1xyXG52YXIgUmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIFJlc2l6ZU9ic2VydmVyQ29udHJvbGxlci5cclxuICAgICAqXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXIoKSB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW5kaWNhdGVzIHdoZXRoZXIgRE9NIGxpc3RlbmVycyBoYXZlIGJlZW4gYWRkZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAcHJpdmF0ZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNvbm5lY3RlZF8gPSBmYWxzZTtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUZWxscyB0aGF0IGNvbnRyb2xsZXIgaGFzIHN1YnNjcmliZWQgZm9yIE11dGF0aW9uIEV2ZW50cy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBwcml2YXRlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubXV0YXRpb25FdmVudHNBZGRlZF8gPSBmYWxzZTtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBLZWVwcyByZWZlcmVuY2UgdG8gdGhlIGluc3RhbmNlIG9mIE11dGF0aW9uT2JzZXJ2ZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAcHJpdmF0ZSB7TXV0YXRpb25PYnNlcnZlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm11dGF0aW9uc09ic2VydmVyXyA9IG51bGw7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBsaXN0IG9mIGNvbm5lY3RlZCBvYnNlcnZlcnMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAcHJpdmF0ZSB7QXJyYXk8UmVzaXplT2JzZXJ2ZXJTUEk+fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMub2JzZXJ2ZXJzXyA9IFtdO1xyXG4gICAgICAgIHRoaXMub25UcmFuc2l0aW9uRW5kXyA9IHRoaXMub25UcmFuc2l0aW9uRW5kXy5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMucmVmcmVzaCA9IHRocm90dGxlKHRoaXMucmVmcmVzaC5iaW5kKHRoaXMpLCBSRUZSRVNIX0RFTEFZKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyBvYnNlcnZlciB0byBvYnNlcnZlcnMgbGlzdC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1Jlc2l6ZU9ic2VydmVyU1BJfSBvYnNlcnZlciAtIE9ic2VydmVyIHRvIGJlIGFkZGVkLlxyXG4gICAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICAgKi9cclxuICAgIFJlc2l6ZU9ic2VydmVyQ29udHJvbGxlci5wcm90b3R5cGUuYWRkT2JzZXJ2ZXIgPSBmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcclxuICAgICAgICBpZiAoIX50aGlzLm9ic2VydmVyc18uaW5kZXhPZihvYnNlcnZlcikpIHtcclxuICAgICAgICAgICAgdGhpcy5vYnNlcnZlcnNfLnB1c2gob2JzZXJ2ZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBBZGQgbGlzdGVuZXJzIGlmIHRoZXkgaGF2ZW4ndCBiZWVuIGFkZGVkIHlldC5cclxuICAgICAgICBpZiAoIXRoaXMuY29ubmVjdGVkXykge1xyXG4gICAgICAgICAgICB0aGlzLmNvbm5lY3RfKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBvYnNlcnZlciBmcm9tIG9ic2VydmVycyBsaXN0LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UmVzaXplT2JzZXJ2ZXJTUEl9IG9ic2VydmVyIC0gT2JzZXJ2ZXIgdG8gYmUgcmVtb3ZlZC5cclxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAgICovXHJcbiAgICBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXIucHJvdG90eXBlLnJlbW92ZU9ic2VydmVyID0gZnVuY3Rpb24gKG9ic2VydmVyKSB7XHJcbiAgICAgICAgdmFyIG9ic2VydmVycyA9IHRoaXMub2JzZXJ2ZXJzXztcclxuICAgICAgICB2YXIgaW5kZXggPSBvYnNlcnZlcnMuaW5kZXhPZihvYnNlcnZlcik7XHJcbiAgICAgICAgLy8gUmVtb3ZlIG9ic2VydmVyIGlmIGl0J3MgcHJlc2VudCBpbiByZWdpc3RyeS5cclxuICAgICAgICBpZiAofmluZGV4KSB7XHJcbiAgICAgICAgICAgIG9ic2VydmVycy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBSZW1vdmUgbGlzdGVuZXJzIGlmIGNvbnRyb2xsZXIgaGFzIG5vIGNvbm5lY3RlZCBvYnNlcnZlcnMuXHJcbiAgICAgICAgaWYgKCFvYnNlcnZlcnMubGVuZ3RoICYmIHRoaXMuY29ubmVjdGVkXykge1xyXG4gICAgICAgICAgICB0aGlzLmRpc2Nvbm5lY3RfKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogSW52b2tlcyB0aGUgdXBkYXRlIG9mIG9ic2VydmVycy4gSXQgd2lsbCBjb250aW51ZSBydW5uaW5nIHVwZGF0ZXMgaW5zb2ZhclxyXG4gICAgICogaXQgZGV0ZWN0cyBjaGFuZ2VzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAgICovXHJcbiAgICBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXIucHJvdG90eXBlLnJlZnJlc2ggPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGNoYW5nZXNEZXRlY3RlZCA9IHRoaXMudXBkYXRlT2JzZXJ2ZXJzXygpO1xyXG4gICAgICAgIC8vIENvbnRpbnVlIHJ1bm5pbmcgdXBkYXRlcyBpZiBjaGFuZ2VzIGhhdmUgYmVlbiBkZXRlY3RlZCBhcyB0aGVyZSBtaWdodFxyXG4gICAgICAgIC8vIGJlIGZ1dHVyZSBvbmVzIGNhdXNlZCBieSBDU1MgdHJhbnNpdGlvbnMuXHJcbiAgICAgICAgaWYgKGNoYW5nZXNEZXRlY3RlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGVzIGV2ZXJ5IG9ic2VydmVyIGZyb20gb2JzZXJ2ZXJzIGxpc3QgYW5kIG5vdGlmaWVzIHRoZW0gb2YgcXVldWVkXHJcbiAgICAgKiBlbnRyaWVzLlxyXG4gICAgICpcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBcInRydWVcIiBpZiBhbnkgb2JzZXJ2ZXIgaGFzIGRldGVjdGVkIGNoYW5nZXMgaW5cclxuICAgICAqICAgICAgZGltZW5zaW9ucyBvZiBpdCdzIGVsZW1lbnRzLlxyXG4gICAgICovXHJcbiAgICBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXIucHJvdG90eXBlLnVwZGF0ZU9ic2VydmVyc18gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy8gQ29sbGVjdCBvYnNlcnZlcnMgdGhhdCBoYXZlIGFjdGl2ZSBvYnNlcnZhdGlvbnMuXHJcbiAgICAgICAgdmFyIGFjdGl2ZU9ic2VydmVycyA9IHRoaXMub2JzZXJ2ZXJzXy5maWx0ZXIoZnVuY3Rpb24gKG9ic2VydmVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBvYnNlcnZlci5nYXRoZXJBY3RpdmUoKSwgb2JzZXJ2ZXIuaGFzQWN0aXZlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy8gRGVsaXZlciBub3RpZmljYXRpb25zIGluIGEgc2VwYXJhdGUgY3ljbGUgaW4gb3JkZXIgdG8gYXZvaWQgYW55XHJcbiAgICAgICAgLy8gY29sbGlzaW9ucyBiZXR3ZWVuIG9ic2VydmVycywgZS5nLiB3aGVuIG11bHRpcGxlIGluc3RhbmNlcyBvZlxyXG4gICAgICAgIC8vIFJlc2l6ZU9ic2VydmVyIGFyZSB0cmFja2luZyB0aGUgc2FtZSBlbGVtZW50IGFuZCB0aGUgY2FsbGJhY2sgb2Ygb25lXHJcbiAgICAgICAgLy8gb2YgdGhlbSBjaGFuZ2VzIGNvbnRlbnQgZGltZW5zaW9ucyBvZiB0aGUgb2JzZXJ2ZWQgdGFyZ2V0LiBTb21ldGltZXNcclxuICAgICAgICAvLyB0aGlzIG1heSByZXN1bHQgaW4gbm90aWZpY2F0aW9ucyBiZWluZyBibG9ja2VkIGZvciB0aGUgcmVzdCBvZiBvYnNlcnZlcnMuXHJcbiAgICAgICAgYWN0aXZlT2JzZXJ2ZXJzLmZvckVhY2goZnVuY3Rpb24gKG9ic2VydmVyKSB7IHJldHVybiBvYnNlcnZlci5icm9hZGNhc3RBY3RpdmUoKTsgfSk7XHJcbiAgICAgICAgcmV0dXJuIGFjdGl2ZU9ic2VydmVycy5sZW5ndGggPiAwO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogSW5pdGlhbGl6ZXMgRE9NIGxpc3RlbmVycy5cclxuICAgICAqXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICAgKi9cclxuICAgIFJlc2l6ZU9ic2VydmVyQ29udHJvbGxlci5wcm90b3R5cGUuY29ubmVjdF8gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy8gRG8gbm90aGluZyBpZiBydW5uaW5nIGluIGEgbm9uLWJyb3dzZXIgZW52aXJvbm1lbnQgb3IgaWYgbGlzdGVuZXJzXHJcbiAgICAgICAgLy8gaGF2ZSBiZWVuIGFscmVhZHkgYWRkZWQuXHJcbiAgICAgICAgaWYgKCFpc0Jyb3dzZXIgfHwgdGhpcy5jb25uZWN0ZWRfKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gU3Vic2NyaXB0aW9uIHRvIHRoZSBcIlRyYW5zaXRpb25lbmRcIiBldmVudCBpcyB1c2VkIGFzIGEgd29ya2Fyb3VuZCBmb3JcclxuICAgICAgICAvLyBkZWxheWVkIHRyYW5zaXRpb25zLiBUaGlzIHdheSBpdCdzIHBvc3NpYmxlIHRvIGNhcHR1cmUgYXQgbGVhc3QgdGhlXHJcbiAgICAgICAgLy8gZmluYWwgc3RhdGUgb2YgYW4gZWxlbWVudC5cclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgdGhpcy5vblRyYW5zaXRpb25FbmRfKTtcclxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5yZWZyZXNoKTtcclxuICAgICAgICBpZiAobXV0YXRpb25PYnNlcnZlclN1cHBvcnRlZCkge1xyXG4gICAgICAgICAgICB0aGlzLm11dGF0aW9uc09ic2VydmVyXyA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKHRoaXMucmVmcmVzaCk7XHJcbiAgICAgICAgICAgIHRoaXMubXV0YXRpb25zT2JzZXJ2ZXJfLm9ic2VydmUoZG9jdW1lbnQsIHtcclxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBjaGlsZExpc3Q6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBjaGFyYWN0ZXJEYXRhOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgc3VidHJlZTogdHJ1ZVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTVN1YnRyZWVNb2RpZmllZCcsIHRoaXMucmVmcmVzaCk7XHJcbiAgICAgICAgICAgIHRoaXMubXV0YXRpb25FdmVudHNBZGRlZF8gPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNvbm5lY3RlZF8gPSB0cnVlO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBET00gbGlzdGVuZXJzLlxyXG4gICAgICpcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgICAqL1xyXG4gICAgUmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyLnByb3RvdHlwZS5kaXNjb25uZWN0XyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAvLyBEbyBub3RoaW5nIGlmIHJ1bm5pbmcgaW4gYSBub24tYnJvd3NlciBlbnZpcm9ubWVudCBvciBpZiBsaXN0ZW5lcnNcclxuICAgICAgICAvLyBoYXZlIGJlZW4gYWxyZWFkeSByZW1vdmVkLlxyXG4gICAgICAgIGlmICghaXNCcm93c2VyIHx8ICF0aGlzLmNvbm5lY3RlZF8pIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgdGhpcy5vblRyYW5zaXRpb25FbmRfKTtcclxuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5yZWZyZXNoKTtcclxuICAgICAgICBpZiAodGhpcy5tdXRhdGlvbnNPYnNlcnZlcl8pIHtcclxuICAgICAgICAgICAgdGhpcy5tdXRhdGlvbnNPYnNlcnZlcl8uZGlzY29ubmVjdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5tdXRhdGlvbkV2ZW50c0FkZGVkXykge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdET01TdWJ0cmVlTW9kaWZpZWQnLCB0aGlzLnJlZnJlc2gpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm11dGF0aW9uc09ic2VydmVyXyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5tdXRhdGlvbkV2ZW50c0FkZGVkXyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY29ubmVjdGVkXyA9IGZhbHNlO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogXCJUcmFuc2l0aW9uZW5kXCIgZXZlbnQgaGFuZGxlci5cclxuICAgICAqXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHBhcmFtIHtUcmFuc2l0aW9uRXZlbnR9IGV2ZW50XHJcbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgICAqL1xyXG4gICAgUmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyLnByb3RvdHlwZS5vblRyYW5zaXRpb25FbmRfID0gZnVuY3Rpb24gKF9hKSB7XHJcbiAgICAgICAgdmFyIF9iID0gX2EucHJvcGVydHlOYW1lLCBwcm9wZXJ0eU5hbWUgPSBfYiA9PT0gdm9pZCAwID8gJycgOiBfYjtcclxuICAgICAgICAvLyBEZXRlY3Qgd2hldGhlciB0cmFuc2l0aW9uIG1heSBhZmZlY3QgZGltZW5zaW9ucyBvZiBhbiBlbGVtZW50LlxyXG4gICAgICAgIHZhciBpc1JlZmxvd1Byb3BlcnR5ID0gdHJhbnNpdGlvbktleXMuc29tZShmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgICAgIHJldHVybiAhIX5wcm9wZXJ0eU5hbWUuaW5kZXhPZihrZXkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChpc1JlZmxvd1Byb3BlcnR5KSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgaW5zdGFuY2Ugb2YgdGhlIFJlc2l6ZU9ic2VydmVyQ29udHJvbGxlci5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyB7UmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyfVxyXG4gICAgICovXHJcbiAgICBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmluc3RhbmNlXykge1xyXG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlXyA9IG5ldyBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXIoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5zdGFuY2VfO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogSG9sZHMgcmVmZXJlbmNlIHRvIHRoZSBjb250cm9sbGVyJ3MgaW5zdGFuY2UuXHJcbiAgICAgKlxyXG4gICAgICogQHByaXZhdGUge1Jlc2l6ZU9ic2VydmVyQ29udHJvbGxlcn1cclxuICAgICAqL1xyXG4gICAgUmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyLmluc3RhbmNlXyA9IG51bGw7XHJcbiAgICByZXR1cm4gUmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyO1xyXG59KCkpO1xuXG4vKipcclxuICogRGVmaW5lcyBub24td3JpdGFibGUvZW51bWVyYWJsZSBwcm9wZXJ0aWVzIG9mIHRoZSBwcm92aWRlZCB0YXJnZXQgb2JqZWN0LlxyXG4gKlxyXG4gKiBAcGFyYW0ge09iamVjdH0gdGFyZ2V0IC0gT2JqZWN0IGZvciB3aGljaCB0byBkZWZpbmUgcHJvcGVydGllcy5cclxuICogQHBhcmFtIHtPYmplY3R9IHByb3BzIC0gUHJvcGVydGllcyB0byBiZSBkZWZpbmVkLlxyXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUYXJnZXQgb2JqZWN0LlxyXG4gKi9cclxudmFyIGRlZmluZUNvbmZpZ3VyYWJsZSA9IChmdW5jdGlvbiAodGFyZ2V0LCBwcm9wcykge1xyXG4gICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IE9iamVjdC5rZXlzKHByb3BzKTsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICB2YXIga2V5ID0gX2FbX2ldO1xyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwge1xyXG4gICAgICAgICAgICB2YWx1ZTogcHJvcHNba2V5XSxcclxuICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGFyZ2V0O1xyXG59KTtcblxuLyoqXHJcbiAqIFJldHVybnMgdGhlIGdsb2JhbCBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHByb3ZpZGVkIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXRcclxuICogQHJldHVybnMge09iamVjdH1cclxuICovXHJcbnZhciBnZXRXaW5kb3dPZiA9IChmdW5jdGlvbiAodGFyZ2V0KSB7XHJcbiAgICAvLyBBc3N1bWUgdGhhdCB0aGUgZWxlbWVudCBpcyBhbiBpbnN0YW5jZSBvZiBOb2RlLCB3aGljaCBtZWFucyB0aGF0IGl0XHJcbiAgICAvLyBoYXMgdGhlIFwib3duZXJEb2N1bWVudFwiIHByb3BlcnR5IGZyb20gd2hpY2ggd2UgY2FuIHJldHJpZXZlIGFcclxuICAgIC8vIGNvcnJlc3BvbmRpbmcgZ2xvYmFsIG9iamVjdC5cclxuICAgIHZhciBvd25lckdsb2JhbCA9IHRhcmdldCAmJiB0YXJnZXQub3duZXJEb2N1bWVudCAmJiB0YXJnZXQub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztcclxuICAgIC8vIFJldHVybiB0aGUgbG9jYWwgZ2xvYmFsIG9iamVjdCBpZiBpdCdzIG5vdCBwb3NzaWJsZSBleHRyYWN0IG9uZSBmcm9tXHJcbiAgICAvLyBwcm92aWRlZCBlbGVtZW50LlxyXG4gICAgcmV0dXJuIG93bmVyR2xvYmFsIHx8IGdsb2JhbCQxO1xyXG59KTtcblxuLy8gUGxhY2Vob2xkZXIgb2YgYW4gZW1wdHkgY29udGVudCByZWN0YW5nbGUuXHJcbnZhciBlbXB0eVJlY3QgPSBjcmVhdGVSZWN0SW5pdCgwLCAwLCAwLCAwKTtcclxuLyoqXHJcbiAqIENvbnZlcnRzIHByb3ZpZGVkIHN0cmluZyB0byBhIG51bWJlci5cclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSB2YWx1ZVxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxyXG4gKi9cclxuZnVuY3Rpb24gdG9GbG9hdCh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpIHx8IDA7XHJcbn1cclxuLyoqXHJcbiAqIEV4dHJhY3RzIGJvcmRlcnMgc2l6ZSBmcm9tIHByb3ZpZGVkIHN0eWxlcy5cclxuICpcclxuICogQHBhcmFtIHtDU1NTdHlsZURlY2xhcmF0aW9ufSBzdHlsZXNcclxuICogQHBhcmFtIHsuLi5zdHJpbmd9IHBvc2l0aW9ucyAtIEJvcmRlcnMgcG9zaXRpb25zICh0b3AsIHJpZ2h0LCAuLi4pXHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9XHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRCb3JkZXJzU2l6ZShzdHlsZXMpIHtcclxuICAgIHZhciBwb3NpdGlvbnMgPSBbXTtcclxuICAgIGZvciAodmFyIF9pID0gMTsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgcG9zaXRpb25zW19pIC0gMV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBvc2l0aW9ucy5yZWR1Y2UoZnVuY3Rpb24gKHNpemUsIHBvc2l0aW9uKSB7XHJcbiAgICAgICAgdmFyIHZhbHVlID0gc3R5bGVzWydib3JkZXItJyArIHBvc2l0aW9uICsgJy13aWR0aCddO1xyXG4gICAgICAgIHJldHVybiBzaXplICsgdG9GbG9hdCh2YWx1ZSk7XHJcbiAgICB9LCAwKTtcclxufVxyXG4vKipcclxuICogRXh0cmFjdHMgcGFkZGluZ3Mgc2l6ZXMgZnJvbSBwcm92aWRlZCBzdHlsZXMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7Q1NTU3R5bGVEZWNsYXJhdGlvbn0gc3R5bGVzXHJcbiAqIEByZXR1cm5zIHtPYmplY3R9IFBhZGRpbmdzIGJveC5cclxuICovXHJcbmZ1bmN0aW9uIGdldFBhZGRpbmdzKHN0eWxlcykge1xyXG4gICAgdmFyIHBvc2l0aW9ucyA9IFsndG9wJywgJ3JpZ2h0JywgJ2JvdHRvbScsICdsZWZ0J107XHJcbiAgICB2YXIgcGFkZGluZ3MgPSB7fTtcclxuICAgIGZvciAodmFyIF9pID0gMCwgcG9zaXRpb25zXzEgPSBwb3NpdGlvbnM7IF9pIDwgcG9zaXRpb25zXzEubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgdmFyIHBvc2l0aW9uID0gcG9zaXRpb25zXzFbX2ldO1xyXG4gICAgICAgIHZhciB2YWx1ZSA9IHN0eWxlc1sncGFkZGluZy0nICsgcG9zaXRpb25dO1xyXG4gICAgICAgIHBhZGRpbmdzW3Bvc2l0aW9uXSA9IHRvRmxvYXQodmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBhZGRpbmdzO1xyXG59XHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIGNvbnRlbnQgcmVjdGFuZ2xlIG9mIHByb3ZpZGVkIFNWRyBlbGVtZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0ge1NWR0dyYXBoaWNzRWxlbWVudH0gdGFyZ2V0IC0gRWxlbWVudCBjb250ZW50IHJlY3RhbmdsZSBvZiB3aGljaCBuZWVkc1xyXG4gKiAgICAgIHRvIGJlIGNhbGN1bGF0ZWQuXHJcbiAqIEByZXR1cm5zIHtET01SZWN0SW5pdH1cclxuICovXHJcbmZ1bmN0aW9uIGdldFNWR0NvbnRlbnRSZWN0KHRhcmdldCkge1xyXG4gICAgdmFyIGJib3ggPSB0YXJnZXQuZ2V0QkJveCgpO1xyXG4gICAgcmV0dXJuIGNyZWF0ZVJlY3RJbml0KDAsIDAsIGJib3gud2lkdGgsIGJib3guaGVpZ2h0KTtcclxufVxyXG4vKipcclxuICogQ2FsY3VsYXRlcyBjb250ZW50IHJlY3RhbmdsZSBvZiBwcm92aWRlZCBIVE1MRWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gdGFyZ2V0IC0gRWxlbWVudCBmb3Igd2hpY2ggdG8gY2FsY3VsYXRlIHRoZSBjb250ZW50IHJlY3RhbmdsZS5cclxuICogQHJldHVybnMge0RPTVJlY3RJbml0fVxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0SFRNTEVsZW1lbnRDb250ZW50UmVjdCh0YXJnZXQpIHtcclxuICAgIC8vIENsaWVudCB3aWR0aCAmIGhlaWdodCBwcm9wZXJ0aWVzIGNhbid0IGJlXHJcbiAgICAvLyB1c2VkIGV4Y2x1c2l2ZWx5IGFzIHRoZXkgcHJvdmlkZSByb3VuZGVkIHZhbHVlcy5cclxuICAgIHZhciBjbGllbnRXaWR0aCA9IHRhcmdldC5jbGllbnRXaWR0aCwgY2xpZW50SGVpZ2h0ID0gdGFyZ2V0LmNsaWVudEhlaWdodDtcclxuICAgIC8vIEJ5IHRoaXMgY29uZGl0aW9uIHdlIGNhbiBjYXRjaCBhbGwgbm9uLXJlcGxhY2VkIGlubGluZSwgaGlkZGVuIGFuZFxyXG4gICAgLy8gZGV0YWNoZWQgZWxlbWVudHMuIFRob3VnaCBlbGVtZW50cyB3aXRoIHdpZHRoICYgaGVpZ2h0IHByb3BlcnRpZXMgbGVzc1xyXG4gICAgLy8gdGhhbiAwLjUgd2lsbCBiZSBkaXNjYXJkZWQgYXMgd2VsbC5cclxuICAgIC8vXHJcbiAgICAvLyBXaXRob3V0IGl0IHdlIHdvdWxkIG5lZWQgdG8gaW1wbGVtZW50IHNlcGFyYXRlIG1ldGhvZHMgZm9yIGVhY2ggb2ZcclxuICAgIC8vIHRob3NlIGNhc2VzIGFuZCBpdCdzIG5vdCBwb3NzaWJsZSB0byBwZXJmb3JtIGEgcHJlY2lzZSBhbmQgcGVyZm9ybWFuY2VcclxuICAgIC8vIGVmZmVjdGl2ZSB0ZXN0IGZvciBoaWRkZW4gZWxlbWVudHMuIEUuZy4gZXZlbiBqUXVlcnkncyAnOnZpc2libGUnIGZpbHRlclxyXG4gICAgLy8gZ2l2ZXMgd3JvbmcgcmVzdWx0cyBmb3IgZWxlbWVudHMgd2l0aCB3aWR0aCAmIGhlaWdodCBsZXNzIHRoYW4gMC41LlxyXG4gICAgaWYgKCFjbGllbnRXaWR0aCAmJiAhY2xpZW50SGVpZ2h0KSB7XHJcbiAgICAgICAgcmV0dXJuIGVtcHR5UmVjdDtcclxuICAgIH1cclxuICAgIHZhciBzdHlsZXMgPSBnZXRXaW5kb3dPZih0YXJnZXQpLmdldENvbXB1dGVkU3R5bGUodGFyZ2V0KTtcclxuICAgIHZhciBwYWRkaW5ncyA9IGdldFBhZGRpbmdzKHN0eWxlcyk7XHJcbiAgICB2YXIgaG9yaXpQYWQgPSBwYWRkaW5ncy5sZWZ0ICsgcGFkZGluZ3MucmlnaHQ7XHJcbiAgICB2YXIgdmVydFBhZCA9IHBhZGRpbmdzLnRvcCArIHBhZGRpbmdzLmJvdHRvbTtcclxuICAgIC8vIENvbXB1dGVkIHN0eWxlcyBvZiB3aWR0aCAmIGhlaWdodCBhcmUgYmVpbmcgdXNlZCBiZWNhdXNlIHRoZXkgYXJlIHRoZVxyXG4gICAgLy8gb25seSBkaW1lbnNpb25zIGF2YWlsYWJsZSB0byBKUyB0aGF0IGNvbnRhaW4gbm9uLXJvdW5kZWQgdmFsdWVzLiBJdCBjb3VsZFxyXG4gICAgLy8gYmUgcG9zc2libGUgdG8gdXRpbGl6ZSB0aGUgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGlmIG9ubHkgaXQncyBkYXRhIHdhc24ndFxyXG4gICAgLy8gYWZmZWN0ZWQgYnkgQ1NTIHRyYW5zZm9ybWF0aW9ucyBsZXQgYWxvbmUgcGFkZGluZ3MsIGJvcmRlcnMgYW5kIHNjcm9sbCBiYXJzLlxyXG4gICAgdmFyIHdpZHRoID0gdG9GbG9hdChzdHlsZXMud2lkdGgpLCBoZWlnaHQgPSB0b0Zsb2F0KHN0eWxlcy5oZWlnaHQpO1xyXG4gICAgLy8gV2lkdGggJiBoZWlnaHQgaW5jbHVkZSBwYWRkaW5ncyBhbmQgYm9yZGVycyB3aGVuIHRoZSAnYm9yZGVyLWJveCcgYm94XHJcbiAgICAvLyBtb2RlbCBpcyBhcHBsaWVkIChleGNlcHQgZm9yIElFKS5cclxuICAgIGlmIChzdHlsZXMuYm94U2l6aW5nID09PSAnYm9yZGVyLWJveCcpIHtcclxuICAgICAgICAvLyBGb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgcmVxdWlyZWQgdG8gaGFuZGxlIEludGVybmV0IEV4cGxvcmVyIHdoaWNoXHJcbiAgICAgICAgLy8gZG9lc24ndCBpbmNsdWRlIHBhZGRpbmdzIGFuZCBib3JkZXJzIHRvIGNvbXB1dGVkIENTUyBkaW1lbnNpb25zLlxyXG4gICAgICAgIC8vXHJcbiAgICAgICAgLy8gV2UgY2FuIHNheSB0aGF0IGlmIENTUyBkaW1lbnNpb25zICsgcGFkZGluZ3MgYXJlIGVxdWFsIHRvIHRoZSBcImNsaWVudFwiXHJcbiAgICAgICAgLy8gcHJvcGVydGllcyB0aGVuIGl0J3MgZWl0aGVyIElFLCBhbmQgdGh1cyB3ZSBkb24ndCBuZWVkIHRvIHN1YnRyYWN0XHJcbiAgICAgICAgLy8gYW55dGhpbmcsIG9yIGFuIGVsZW1lbnQgbWVyZWx5IGRvZXNuJ3QgaGF2ZSBwYWRkaW5ncy9ib3JkZXJzIHN0eWxlcy5cclxuICAgICAgICBpZiAoTWF0aC5yb3VuZCh3aWR0aCArIGhvcml6UGFkKSAhPT0gY2xpZW50V2lkdGgpIHtcclxuICAgICAgICAgICAgd2lkdGggLT0gZ2V0Qm9yZGVyc1NpemUoc3R5bGVzLCAnbGVmdCcsICdyaWdodCcpICsgaG9yaXpQYWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChNYXRoLnJvdW5kKGhlaWdodCArIHZlcnRQYWQpICE9PSBjbGllbnRIZWlnaHQpIHtcclxuICAgICAgICAgICAgaGVpZ2h0IC09IGdldEJvcmRlcnNTaXplKHN0eWxlcywgJ3RvcCcsICdib3R0b20nKSArIHZlcnRQYWQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gRm9sbG93aW5nIHN0ZXBzIGNhbid0IGJlIGFwcGxpZWQgdG8gdGhlIGRvY3VtZW50J3Mgcm9vdCBlbGVtZW50IGFzIGl0c1xyXG4gICAgLy8gY2xpZW50W1dpZHRoL0hlaWdodF0gcHJvcGVydGllcyByZXByZXNlbnQgdmlld3BvcnQgYXJlYSBvZiB0aGUgd2luZG93LlxyXG4gICAgLy8gQmVzaWRlcywgaXQncyBhcyB3ZWxsIG5vdCBuZWNlc3NhcnkgYXMgdGhlIDxodG1sPiBpdHNlbGYgbmVpdGhlciBoYXNcclxuICAgIC8vIHJlbmRlcmVkIHNjcm9sbCBiYXJzIG5vciBpdCBjYW4gYmUgY2xpcHBlZC5cclxuICAgIGlmICghaXNEb2N1bWVudEVsZW1lbnQodGFyZ2V0KSkge1xyXG4gICAgICAgIC8vIEluIHNvbWUgYnJvd3NlcnMgKG9ubHkgaW4gRmlyZWZveCwgYWN0dWFsbHkpIENTUyB3aWR0aCAmIGhlaWdodFxyXG4gICAgICAgIC8vIGluY2x1ZGUgc2Nyb2xsIGJhcnMgc2l6ZSB3aGljaCBjYW4gYmUgcmVtb3ZlZCBhdCB0aGlzIHN0ZXAgYXMgc2Nyb2xsXHJcbiAgICAgICAgLy8gYmFycyBhcmUgdGhlIG9ubHkgZGlmZmVyZW5jZSBiZXR3ZWVuIHJvdW5kZWQgZGltZW5zaW9ucyArIHBhZGRpbmdzXHJcbiAgICAgICAgLy8gYW5kIFwiY2xpZW50XCIgcHJvcGVydGllcywgdGhvdWdoIHRoYXQgaXMgbm90IGFsd2F5cyB0cnVlIGluIENocm9tZS5cclxuICAgICAgICB2YXIgdmVydFNjcm9sbGJhciA9IE1hdGgucm91bmQod2lkdGggKyBob3JpelBhZCkgLSBjbGllbnRXaWR0aDtcclxuICAgICAgICB2YXIgaG9yaXpTY3JvbGxiYXIgPSBNYXRoLnJvdW5kKGhlaWdodCArIHZlcnRQYWQpIC0gY2xpZW50SGVpZ2h0O1xyXG4gICAgICAgIC8vIENocm9tZSBoYXMgYSByYXRoZXIgd2VpcmQgcm91bmRpbmcgb2YgXCJjbGllbnRcIiBwcm9wZXJ0aWVzLlxyXG4gICAgICAgIC8vIEUuZy4gZm9yIGFuIGVsZW1lbnQgd2l0aCBjb250ZW50IHdpZHRoIG9mIDMxNC4ycHggaXQgc29tZXRpbWVzIGdpdmVzXHJcbiAgICAgICAgLy8gdGhlIGNsaWVudCB3aWR0aCBvZiAzMTVweCBhbmQgZm9yIHRoZSB3aWR0aCBvZiAzMTQuN3B4IGl0IG1heSBnaXZlXHJcbiAgICAgICAgLy8gMzE0cHguIEFuZCBpdCBkb2Vzbid0IGhhcHBlbiBhbGwgdGhlIHRpbWUuIFNvIGp1c3QgaWdub3JlIHRoaXMgZGVsdGFcclxuICAgICAgICAvLyBhcyBhIG5vbi1yZWxldmFudC5cclxuICAgICAgICBpZiAoTWF0aC5hYnModmVydFNjcm9sbGJhcikgIT09IDEpIHtcclxuICAgICAgICAgICAgd2lkdGggLT0gdmVydFNjcm9sbGJhcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKE1hdGguYWJzKGhvcml6U2Nyb2xsYmFyKSAhPT0gMSkge1xyXG4gICAgICAgICAgICBoZWlnaHQgLT0gaG9yaXpTY3JvbGxiYXI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNyZWF0ZVJlY3RJbml0KHBhZGRpbmdzLmxlZnQsIHBhZGRpbmdzLnRvcCwgd2lkdGgsIGhlaWdodCk7XHJcbn1cclxuLyoqXHJcbiAqIENoZWNrcyB3aGV0aGVyIHByb3ZpZGVkIGVsZW1lbnQgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIFNWR0dyYXBoaWNzRWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIHtFbGVtZW50fSB0YXJnZXQgLSBFbGVtZW50IHRvIGJlIGNoZWNrZWQuXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxudmFyIGlzU1ZHR3JhcGhpY3NFbGVtZW50ID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIC8vIFNvbWUgYnJvd3NlcnMsIG5hbWVseSBJRSBhbmQgRWRnZSwgZG9uJ3QgaGF2ZSB0aGUgU1ZHR3JhcGhpY3NFbGVtZW50XHJcbiAgICAvLyBpbnRlcmZhY2UuXHJcbiAgICBpZiAodHlwZW9mIFNWR0dyYXBoaWNzRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCkgeyByZXR1cm4gdGFyZ2V0IGluc3RhbmNlb2YgZ2V0V2luZG93T2YodGFyZ2V0KS5TVkdHcmFwaGljc0VsZW1lbnQ7IH07XHJcbiAgICB9XHJcbiAgICAvLyBJZiBpdCdzIHNvLCB0aGVuIGNoZWNrIHRoYXQgZWxlbWVudCBpcyBhdCBsZWFzdCBhbiBpbnN0YW5jZSBvZiB0aGVcclxuICAgIC8vIFNWR0VsZW1lbnQgYW5kIHRoYXQgaXQgaGFzIHRoZSBcImdldEJCb3hcIiBtZXRob2QuXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXh0cmEtcGFyZW5zXHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCkgeyByZXR1cm4gKHRhcmdldCBpbnN0YW5jZW9mIGdldFdpbmRvd09mKHRhcmdldCkuU1ZHRWxlbWVudCAmJlxyXG4gICAgICAgIHR5cGVvZiB0YXJnZXQuZ2V0QkJveCA9PT0gJ2Z1bmN0aW9uJyk7IH07XHJcbn0pKCk7XHJcbi8qKlxyXG4gKiBDaGVja3Mgd2hldGhlciBwcm92aWRlZCBlbGVtZW50IGlzIGEgZG9jdW1lbnQgZWxlbWVudCAoPGh0bWw+KS5cclxuICpcclxuICogQHBhcmFtIHtFbGVtZW50fSB0YXJnZXQgLSBFbGVtZW50IHRvIGJlIGNoZWNrZWQuXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuZnVuY3Rpb24gaXNEb2N1bWVudEVsZW1lbnQodGFyZ2V0KSB7XHJcbiAgICByZXR1cm4gdGFyZ2V0ID09PSBnZXRXaW5kb3dPZih0YXJnZXQpLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcclxufVxyXG4vKipcclxuICogQ2FsY3VsYXRlcyBhbiBhcHByb3ByaWF0ZSBjb250ZW50IHJlY3RhbmdsZSBmb3IgcHJvdmlkZWQgaHRtbCBvciBzdmcgZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIHtFbGVtZW50fSB0YXJnZXQgLSBFbGVtZW50IGNvbnRlbnQgcmVjdGFuZ2xlIG9mIHdoaWNoIG5lZWRzIHRvIGJlIGNhbGN1bGF0ZWQuXHJcbiAqIEByZXR1cm5zIHtET01SZWN0SW5pdH1cclxuICovXHJcbmZ1bmN0aW9uIGdldENvbnRlbnRSZWN0KHRhcmdldCkge1xyXG4gICAgaWYgKCFpc0Jyb3dzZXIpIHtcclxuICAgICAgICByZXR1cm4gZW1wdHlSZWN0O1xyXG4gICAgfVxyXG4gICAgaWYgKGlzU1ZHR3JhcGhpY3NFbGVtZW50KHRhcmdldCkpIHtcclxuICAgICAgICByZXR1cm4gZ2V0U1ZHQ29udGVudFJlY3QodGFyZ2V0KTtcclxuICAgIH1cclxuICAgIHJldHVybiBnZXRIVE1MRWxlbWVudENvbnRlbnRSZWN0KHRhcmdldCk7XHJcbn1cclxuLyoqXHJcbiAqIENyZWF0ZXMgcmVjdGFuZ2xlIHdpdGggYW4gaW50ZXJmYWNlIG9mIHRoZSBET01SZWN0UmVhZE9ubHkuXHJcbiAqIFNwZWM6IGh0dHBzOi8vZHJhZnRzLmZ4dGYub3JnL2dlb21ldHJ5LyNkb21yZWN0cmVhZG9ubHlcclxuICpcclxuICogQHBhcmFtIHtET01SZWN0SW5pdH0gcmVjdEluaXQgLSBPYmplY3Qgd2l0aCByZWN0YW5nbGUncyB4L3kgY29vcmRpbmF0ZXMgYW5kIGRpbWVuc2lvbnMuXHJcbiAqIEByZXR1cm5zIHtET01SZWN0UmVhZE9ubHl9XHJcbiAqL1xyXG5mdW5jdGlvbiBjcmVhdGVSZWFkT25seVJlY3QoX2EpIHtcclxuICAgIHZhciB4ID0gX2EueCwgeSA9IF9hLnksIHdpZHRoID0gX2Eud2lkdGgsIGhlaWdodCA9IF9hLmhlaWdodDtcclxuICAgIC8vIElmIERPTVJlY3RSZWFkT25seSBpcyBhdmFpbGFibGUgdXNlIGl0IGFzIGEgcHJvdG90eXBlIGZvciB0aGUgcmVjdGFuZ2xlLlxyXG4gICAgdmFyIENvbnN0ciA9IHR5cGVvZiBET01SZWN0UmVhZE9ubHkgIT09ICd1bmRlZmluZWQnID8gRE9NUmVjdFJlYWRPbmx5IDogT2JqZWN0O1xyXG4gICAgdmFyIHJlY3QgPSBPYmplY3QuY3JlYXRlKENvbnN0ci5wcm90b3R5cGUpO1xyXG4gICAgLy8gUmVjdGFuZ2xlJ3MgcHJvcGVydGllcyBhcmUgbm90IHdyaXRhYmxlIGFuZCBub24tZW51bWVyYWJsZS5cclxuICAgIGRlZmluZUNvbmZpZ3VyYWJsZShyZWN0LCB7XHJcbiAgICAgICAgeDogeCwgeTogeSwgd2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodCxcclxuICAgICAgICB0b3A6IHksXHJcbiAgICAgICAgcmlnaHQ6IHggKyB3aWR0aCxcclxuICAgICAgICBib3R0b206IGhlaWdodCArIHksXHJcbiAgICAgICAgbGVmdDogeFxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcmVjdDtcclxufVxyXG4vKipcclxuICogQ3JlYXRlcyBET01SZWN0SW5pdCBvYmplY3QgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGRpbWVuc2lvbnMgYW5kIHRoZSB4L3kgY29vcmRpbmF0ZXMuXHJcbiAqIFNwZWM6IGh0dHBzOi8vZHJhZnRzLmZ4dGYub3JnL2dlb21ldHJ5LyNkaWN0ZGVmLWRvbXJlY3Rpbml0XHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gWCBjb29yZGluYXRlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFkgY29vcmRpbmF0ZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIC0gUmVjdGFuZ2xlJ3Mgd2lkdGguXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgLSBSZWN0YW5nbGUncyBoZWlnaHQuXHJcbiAqIEByZXR1cm5zIHtET01SZWN0SW5pdH1cclxuICovXHJcbmZ1bmN0aW9uIGNyZWF0ZVJlY3RJbml0KHgsIHksIHdpZHRoLCBoZWlnaHQpIHtcclxuICAgIHJldHVybiB7IHg6IHgsIHk6IHksIHdpZHRoOiB3aWR0aCwgaGVpZ2h0OiBoZWlnaHQgfTtcclxufVxuXG4vKipcclxuICogQ2xhc3MgdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgY29tcHV0YXRpb25zIG9mIHRoZSBjb250ZW50IHJlY3RhbmdsZSBvZlxyXG4gKiBwcm92aWRlZCBET00gZWxlbWVudCBhbmQgZm9yIGtlZXBpbmcgdHJhY2sgb2YgaXQncyBjaGFuZ2VzLlxyXG4gKi9cclxudmFyIFJlc2l6ZU9ic2VydmF0aW9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFJlc2l6ZU9ic2VydmF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gdGFyZ2V0IC0gRWxlbWVudCB0byBiZSBvYnNlcnZlZC5cclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gUmVzaXplT2JzZXJ2YXRpb24odGFyZ2V0KSB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQnJvYWRjYXN0ZWQgd2lkdGggb2YgY29udGVudCByZWN0YW5nbGUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYnJvYWRjYXN0V2lkdGggPSAwO1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEJyb2FkY2FzdGVkIGhlaWdodCBvZiBjb250ZW50IHJlY3RhbmdsZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5icm9hZGNhc3RIZWlnaHQgPSAwO1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFJlZmVyZW5jZSB0byB0aGUgbGFzdCBvYnNlcnZlZCBjb250ZW50IHJlY3RhbmdsZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBwcml2YXRlIHtET01SZWN0SW5pdH1cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNvbnRlbnRSZWN0XyA9IGNyZWF0ZVJlY3RJbml0KDAsIDAsIDAsIDApO1xyXG4gICAgICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGVzIGNvbnRlbnQgcmVjdGFuZ2xlIGFuZCB0ZWxscyB3aGV0aGVyIGl0J3Mgd2lkdGggb3IgaGVpZ2h0IHByb3BlcnRpZXNcclxuICAgICAqIGhhdmUgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCBicm9hZGNhc3QuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIFJlc2l6ZU9ic2VydmF0aW9uLnByb3RvdHlwZS5pc0FjdGl2ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgcmVjdCA9IGdldENvbnRlbnRSZWN0KHRoaXMudGFyZ2V0KTtcclxuICAgICAgICB0aGlzLmNvbnRlbnRSZWN0XyA9IHJlY3Q7XHJcbiAgICAgICAgcmV0dXJuIChyZWN0LndpZHRoICE9PSB0aGlzLmJyb2FkY2FzdFdpZHRoIHx8XHJcbiAgICAgICAgICAgIHJlY3QuaGVpZ2h0ICE9PSB0aGlzLmJyb2FkY2FzdEhlaWdodCk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGVzICdicm9hZGNhc3RXaWR0aCcgYW5kICdicm9hZGNhc3RIZWlnaHQnIHByb3BlcnRpZXMgd2l0aCBhIGRhdGFcclxuICAgICAqIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcgcHJvcGVydGllcyBvZiB0aGUgbGFzdCBvYnNlcnZlZCBjb250ZW50IHJlY3RhbmdsZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyB7RE9NUmVjdEluaXR9IExhc3Qgb2JzZXJ2ZWQgY29udGVudCByZWN0YW5nbGUuXHJcbiAgICAgKi9cclxuICAgIFJlc2l6ZU9ic2VydmF0aW9uLnByb3RvdHlwZS5icm9hZGNhc3RSZWN0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciByZWN0ID0gdGhpcy5jb250ZW50UmVjdF87XHJcbiAgICAgICAgdGhpcy5icm9hZGNhc3RXaWR0aCA9IHJlY3Qud2lkdGg7XHJcbiAgICAgICAgdGhpcy5icm9hZGNhc3RIZWlnaHQgPSByZWN0LmhlaWdodDtcclxuICAgICAgICByZXR1cm4gcmVjdDtcclxuICAgIH07XHJcbiAgICByZXR1cm4gUmVzaXplT2JzZXJ2YXRpb247XHJcbn0oKSk7XG5cbnZhciBSZXNpemVPYnNlcnZlckVudHJ5ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFJlc2l6ZU9ic2VydmVyRW50cnkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSB0YXJnZXQgLSBFbGVtZW50IHRoYXQgaXMgYmVpbmcgb2JzZXJ2ZWQuXHJcbiAgICAgKiBAcGFyYW0ge0RPTVJlY3RJbml0fSByZWN0SW5pdCAtIERhdGEgb2YgdGhlIGVsZW1lbnQncyBjb250ZW50IHJlY3RhbmdsZS5cclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gUmVzaXplT2JzZXJ2ZXJFbnRyeSh0YXJnZXQsIHJlY3RJbml0KSB7XHJcbiAgICAgICAgdmFyIGNvbnRlbnRSZWN0ID0gY3JlYXRlUmVhZE9ubHlSZWN0KHJlY3RJbml0KTtcclxuICAgICAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmljYXRpb24gZm9sbG93aW5nIHByb3BlcnRpZXMgYXJlIG5vdCB3cml0YWJsZVxyXG4gICAgICAgIC8vIGFuZCBhcmUgYWxzbyBub3QgZW51bWVyYWJsZSBpbiB0aGUgbmF0aXZlIGltcGxlbWVudGF0aW9uLlxyXG4gICAgICAgIC8vXHJcbiAgICAgICAgLy8gUHJvcGVydHkgYWNjZXNzb3JzIGFyZSBub3QgYmVpbmcgdXNlZCBhcyB0aGV5J2QgcmVxdWlyZSB0byBkZWZpbmUgYVxyXG4gICAgICAgIC8vIHByaXZhdGUgV2Vha01hcCBzdG9yYWdlIHdoaWNoIG1heSBjYXVzZSBtZW1vcnkgbGVha3MgaW4gYnJvd3NlcnMgdGhhdFxyXG4gICAgICAgIC8vIGRvbid0IHN1cHBvcnQgdGhpcyB0eXBlIG9mIGNvbGxlY3Rpb25zLlxyXG4gICAgICAgIGRlZmluZUNvbmZpZ3VyYWJsZSh0aGlzLCB7IHRhcmdldDogdGFyZ2V0LCBjb250ZW50UmVjdDogY29udGVudFJlY3QgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUmVzaXplT2JzZXJ2ZXJFbnRyeTtcclxufSgpKTtcblxudmFyIFJlc2l6ZU9ic2VydmVyU1BJID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIFJlc2l6ZU9ic2VydmVyLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UmVzaXplT2JzZXJ2ZXJDYWxsYmFja30gY2FsbGJhY2sgLSBDYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGludm9rZWRcclxuICAgICAqICAgICAgd2hlbiBvbmUgb2YgdGhlIG9ic2VydmVkIGVsZW1lbnRzIGNoYW5nZXMgaXQncyBjb250ZW50IGRpbWVuc2lvbnMuXHJcbiAgICAgKiBAcGFyYW0ge1Jlc2l6ZU9ic2VydmVyQ29udHJvbGxlcn0gY29udHJvbGxlciAtIENvbnRyb2xsZXIgaW5zdGFuY2Ugd2hpY2hcclxuICAgICAqICAgICAgaXMgcmVzcG9uc2libGUgZm9yIHRoZSB1cGRhdGVzIG9mIG9ic2VydmVyLlxyXG4gICAgICogQHBhcmFtIHtSZXNpemVPYnNlcnZlcn0gY2FsbGJhY2tDdHggLSBSZWZlcmVuY2UgdG8gdGhlIHB1YmxpY1xyXG4gICAgICogICAgICBSZXNpemVPYnNlcnZlciBpbnN0YW5jZSB3aGljaCB3aWxsIGJlIHBhc3NlZCB0byBjYWxsYmFjayBmdW5jdGlvbi5cclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gUmVzaXplT2JzZXJ2ZXJTUEkoY2FsbGJhY2ssIGNvbnRyb2xsZXIsIGNhbGxiYWNrQ3R4KSB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQ29sbGVjdGlvbiBvZiByZXNpemUgb2JzZXJ2YXRpb25zIHRoYXQgaGF2ZSBkZXRlY3RlZCBjaGFuZ2VzIGluIGRpbWVuc2lvbnNcclxuICAgICAgICAgKiBvZiBlbGVtZW50cy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBwcml2YXRlIHtBcnJheTxSZXNpemVPYnNlcnZhdGlvbj59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5hY3RpdmVPYnNlcnZhdGlvbnNfID0gW107XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogUmVnaXN0cnkgb2YgdGhlIFJlc2l6ZU9ic2VydmF0aW9uIGluc3RhbmNlcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBwcml2YXRlIHtNYXA8RWxlbWVudCwgUmVzaXplT2JzZXJ2YXRpb24+fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMub2JzZXJ2YXRpb25zXyA9IG5ldyBNYXBTaGltKCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgY2FsbGJhY2sgcHJvdmlkZWQgYXMgcGFyYW1ldGVyIDEgaXMgbm90IGEgZnVuY3Rpb24uJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2FsbGJhY2tfID0gY2FsbGJhY2s7XHJcbiAgICAgICAgdGhpcy5jb250cm9sbGVyXyA9IGNvbnRyb2xsZXI7XHJcbiAgICAgICAgdGhpcy5jYWxsYmFja0N0eF8gPSBjYWxsYmFja0N0eDtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogU3RhcnRzIG9ic2VydmluZyBwcm92aWRlZCBlbGVtZW50LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gdGFyZ2V0IC0gRWxlbWVudCB0byBiZSBvYnNlcnZlZC5cclxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAgICovXHJcbiAgICBSZXNpemVPYnNlcnZlclNQSS5wcm90b3R5cGUub2JzZXJ2ZSA9IGZ1bmN0aW9uICh0YXJnZXQpIHtcclxuICAgICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgMCBwcmVzZW50LicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBEbyBub3RoaW5nIGlmIGN1cnJlbnQgZW52aXJvbm1lbnQgZG9lc24ndCBoYXZlIHRoZSBFbGVtZW50IGludGVyZmFjZS5cclxuICAgICAgICBpZiAodHlwZW9mIEVsZW1lbnQgPT09ICd1bmRlZmluZWQnIHx8ICEoRWxlbWVudCBpbnN0YW5jZW9mIE9iamVjdCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoISh0YXJnZXQgaW5zdGFuY2VvZiBnZXRXaW5kb3dPZih0YXJnZXQpLkVsZW1lbnQpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3BhcmFtZXRlciAxIGlzIG5vdCBvZiB0eXBlIFwiRWxlbWVudFwiLicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgb2JzZXJ2YXRpb25zID0gdGhpcy5vYnNlcnZhdGlvbnNfO1xyXG4gICAgICAgIC8vIERvIG5vdGhpbmcgaWYgZWxlbWVudCBpcyBhbHJlYWR5IGJlaW5nIG9ic2VydmVkLlxyXG4gICAgICAgIGlmIChvYnNlcnZhdGlvbnMuaGFzKHRhcmdldCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvYnNlcnZhdGlvbnMuc2V0KHRhcmdldCwgbmV3IFJlc2l6ZU9ic2VydmF0aW9uKHRhcmdldCkpO1xyXG4gICAgICAgIHRoaXMuY29udHJvbGxlcl8uYWRkT2JzZXJ2ZXIodGhpcyk7XHJcbiAgICAgICAgLy8gRm9yY2UgdGhlIHVwZGF0ZSBvZiBvYnNlcnZhdGlvbnMuXHJcbiAgICAgICAgdGhpcy5jb250cm9sbGVyXy5yZWZyZXNoKCk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9wcyBvYnNlcnZpbmcgcHJvdmlkZWQgZWxlbWVudC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IHRhcmdldCAtIEVsZW1lbnQgdG8gc3RvcCBvYnNlcnZpbmcuXHJcbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgICAqL1xyXG4gICAgUmVzaXplT2JzZXJ2ZXJTUEkucHJvdG90eXBlLnVub2JzZXJ2ZSA9IGZ1bmN0aW9uICh0YXJnZXQpIHtcclxuICAgICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgMCBwcmVzZW50LicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBEbyBub3RoaW5nIGlmIGN1cnJlbnQgZW52aXJvbm1lbnQgZG9lc24ndCBoYXZlIHRoZSBFbGVtZW50IGludGVyZmFjZS5cclxuICAgICAgICBpZiAodHlwZW9mIEVsZW1lbnQgPT09ICd1bmRlZmluZWQnIHx8ICEoRWxlbWVudCBpbnN0YW5jZW9mIE9iamVjdCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoISh0YXJnZXQgaW5zdGFuY2VvZiBnZXRXaW5kb3dPZih0YXJnZXQpLkVsZW1lbnQpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3BhcmFtZXRlciAxIGlzIG5vdCBvZiB0eXBlIFwiRWxlbWVudFwiLicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgb2JzZXJ2YXRpb25zID0gdGhpcy5vYnNlcnZhdGlvbnNfO1xyXG4gICAgICAgIC8vIERvIG5vdGhpbmcgaWYgZWxlbWVudCBpcyBub3QgYmVpbmcgb2JzZXJ2ZWQuXHJcbiAgICAgICAgaWYgKCFvYnNlcnZhdGlvbnMuaGFzKHRhcmdldCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvYnNlcnZhdGlvbnMuZGVsZXRlKHRhcmdldCk7XHJcbiAgICAgICAgaWYgKCFvYnNlcnZhdGlvbnMuc2l6ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnJlbW92ZU9ic2VydmVyKHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIFN0b3BzIG9ic2VydmluZyBhbGwgZWxlbWVudHMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICAgKi9cclxuICAgIFJlc2l6ZU9ic2VydmVyU1BJLnByb3RvdHlwZS5kaXNjb25uZWN0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuY2xlYXJBY3RpdmUoKTtcclxuICAgICAgICB0aGlzLm9ic2VydmF0aW9uc18uY2xlYXIoKTtcclxuICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnJlbW92ZU9ic2VydmVyKHRoaXMpO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogQ29sbGVjdHMgb2JzZXJ2YXRpb24gaW5zdGFuY2VzIHRoZSBhc3NvY2lhdGVkIGVsZW1lbnQgb2Ygd2hpY2ggaGFzIGNoYW5nZWRcclxuICAgICAqIGl0J3MgY29udGVudCByZWN0YW5nbGUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICAgKi9cclxuICAgIFJlc2l6ZU9ic2VydmVyU1BJLnByb3RvdHlwZS5nYXRoZXJBY3RpdmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICB0aGlzLmNsZWFyQWN0aXZlKCk7XHJcbiAgICAgICAgdGhpcy5vYnNlcnZhdGlvbnNfLmZvckVhY2goZnVuY3Rpb24gKG9ic2VydmF0aW9uKSB7XHJcbiAgICAgICAgICAgIGlmIChvYnNlcnZhdGlvbi5pc0FjdGl2ZSgpKSB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5hY3RpdmVPYnNlcnZhdGlvbnNfLnB1c2gob2JzZXJ2YXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBJbnZva2VzIGluaXRpYWwgY2FsbGJhY2sgZnVuY3Rpb24gd2l0aCBhIGxpc3Qgb2YgUmVzaXplT2JzZXJ2ZXJFbnRyeVxyXG4gICAgICogaW5zdGFuY2VzIGNvbGxlY3RlZCBmcm9tIGFjdGl2ZSByZXNpemUgb2JzZXJ2YXRpb25zLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAgICovXHJcbiAgICBSZXNpemVPYnNlcnZlclNQSS5wcm90b3R5cGUuYnJvYWRjYXN0QWN0aXZlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIC8vIERvIG5vdGhpbmcgaWYgb2JzZXJ2ZXIgZG9lc24ndCBoYXZlIGFjdGl2ZSBvYnNlcnZhdGlvbnMuXHJcbiAgICAgICAgaWYgKCF0aGlzLmhhc0FjdGl2ZSgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGN0eCA9IHRoaXMuY2FsbGJhY2tDdHhfO1xyXG4gICAgICAgIC8vIENyZWF0ZSBSZXNpemVPYnNlcnZlckVudHJ5IGluc3RhbmNlIGZvciBldmVyeSBhY3RpdmUgb2JzZXJ2YXRpb24uXHJcbiAgICAgICAgdmFyIGVudHJpZXMgPSB0aGlzLmFjdGl2ZU9ic2VydmF0aW9uc18ubWFwKGZ1bmN0aW9uIChvYnNlcnZhdGlvbikge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFJlc2l6ZU9ic2VydmVyRW50cnkob2JzZXJ2YXRpb24udGFyZ2V0LCBvYnNlcnZhdGlvbi5icm9hZGNhc3RSZWN0KCkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuY2FsbGJhY2tfLmNhbGwoY3R4LCBlbnRyaWVzLCBjdHgpO1xyXG4gICAgICAgIHRoaXMuY2xlYXJBY3RpdmUoKTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIENsZWFycyB0aGUgY29sbGVjdGlvbiBvZiBhY3RpdmUgb2JzZXJ2YXRpb25zLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAgICovXHJcbiAgICBSZXNpemVPYnNlcnZlclNQSS5wcm90b3R5cGUuY2xlYXJBY3RpdmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVPYnNlcnZhdGlvbnNfLnNwbGljZSgwKTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIFRlbGxzIHdoZXRoZXIgb2JzZXJ2ZXIgaGFzIGFjdGl2ZSBvYnNlcnZhdGlvbnMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIFJlc2l6ZU9ic2VydmVyU1BJLnByb3RvdHlwZS5oYXNBY3RpdmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlT2JzZXJ2YXRpb25zXy5sZW5ndGggPiAwO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBSZXNpemVPYnNlcnZlclNQSTtcclxufSgpKTtcblxuLy8gUmVnaXN0cnkgb2YgaW50ZXJuYWwgb2JzZXJ2ZXJzLiBJZiBXZWFrTWFwIGlzIG5vdCBhdmFpbGFibGUgdXNlIGN1cnJlbnQgc2hpbVxyXG4vLyBmb3IgdGhlIE1hcCBjb2xsZWN0aW9uIGFzIGl0IGhhcyBhbGwgcmVxdWlyZWQgbWV0aG9kcyBhbmQgYmVjYXVzZSBXZWFrTWFwXHJcbi8vIGNhbid0IGJlIGZ1bGx5IHBvbHlmaWxsZWQgYW55d2F5LlxyXG52YXIgb2JzZXJ2ZXJzID0gdHlwZW9mIFdlYWtNYXAgIT09ICd1bmRlZmluZWQnID8gbmV3IFdlYWtNYXAoKSA6IG5ldyBNYXBTaGltKCk7XHJcbi8qKlxyXG4gKiBSZXNpemVPYnNlcnZlciBBUEkuIEVuY2Fwc3VsYXRlcyB0aGUgUmVzaXplT2JzZXJ2ZXIgU1BJIGltcGxlbWVudGF0aW9uXHJcbiAqIGV4cG9zaW5nIG9ubHkgdGhvc2UgbWV0aG9kcyBhbmQgcHJvcGVydGllcyB0aGF0IGFyZSBkZWZpbmVkIGluIHRoZSBzcGVjLlxyXG4gKi9cclxudmFyIFJlc2l6ZU9ic2VydmVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIFJlc2l6ZU9ic2VydmVyLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UmVzaXplT2JzZXJ2ZXJDYWxsYmFja30gY2FsbGJhY2sgLSBDYWxsYmFjayB0aGF0IGlzIGludm9rZWQgd2hlblxyXG4gICAgICogICAgICBkaW1lbnNpb25zIG9mIHRoZSBvYnNlcnZlZCBlbGVtZW50cyBjaGFuZ2UuXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIFJlc2l6ZU9ic2VydmVyKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlc2l6ZU9ic2VydmVyKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24uJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCcxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSAwIHByZXNlbnQuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjb250cm9sbGVyID0gUmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyLmdldEluc3RhbmNlKCk7XHJcbiAgICAgICAgdmFyIG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyU1BJKGNhbGxiYWNrLCBjb250cm9sbGVyLCB0aGlzKTtcclxuICAgICAgICBvYnNlcnZlcnMuc2V0KHRoaXMsIG9ic2VydmVyKTtcclxuICAgIH1cclxuICAgIHJldHVybiBSZXNpemVPYnNlcnZlcjtcclxufSgpKTtcclxuLy8gRXhwb3NlIHB1YmxpYyBtZXRob2RzIG9mIFJlc2l6ZU9ic2VydmVyLlxyXG5bXHJcbiAgICAnb2JzZXJ2ZScsXHJcbiAgICAndW5vYnNlcnZlJyxcclxuICAgICdkaXNjb25uZWN0J1xyXG5dLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xyXG4gICAgUmVzaXplT2JzZXJ2ZXIucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIF9hO1xyXG4gICAgICAgIHJldHVybiAoX2EgPSBvYnNlcnZlcnMuZ2V0KHRoaXMpKVttZXRob2RdLmFwcGx5KF9hLCBhcmd1bWVudHMpO1xyXG4gICAgfTtcclxufSk7XG5cbnZhciBpbmRleCA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBFeHBvcnQgZXhpc3RpbmcgaW1wbGVtZW50YXRpb24gaWYgYXZhaWxhYmxlLlxyXG4gICAgaWYgKHR5cGVvZiBnbG9iYWwkMS5SZXNpemVPYnNlcnZlciAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICByZXR1cm4gZ2xvYmFsJDEuUmVzaXplT2JzZXJ2ZXI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUmVzaXplT2JzZXJ2ZXI7XHJcbn0pKCk7XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSAoaW5kZXgpO1xuXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwodGhpcywgX193ZWJwYWNrX3JlcXVpcmVfXyhcImM4YmFcIikpKVxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCI2ZWEyXCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfbWluaV9jc3NfZXh0cmFjdF9wbHVnaW5fZGlzdF9sb2FkZXJfanNfcmVmXzZfb25lT2ZfMV8wX25vZGVfbW9kdWxlc19jc3NfbG9hZGVyX2Rpc3RfY2pzX2pzX3JlZl82X29uZU9mXzFfMV9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc19zdHlsZVBvc3RMb2FkZXJfanNfbm9kZV9tb2R1bGVzX3Bvc3Rjc3NfbG9hZGVyX3NyY19pbmRleF9qc19yZWZfNl9vbmVPZl8xXzJfbm9kZV9tb2R1bGVzX3Z1ZXRpZnlfbG9hZGVyX2xpYl9sb2FkZXJfanNfcmVmXzE5XzBfbm9kZV9tb2R1bGVzX2NhY2hlX2xvYWRlcl9kaXN0X2Nqc19qc19yZWZfMF8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfU2xpZGVyVHJhY2tfdnVlX3Z1ZV90eXBlX3N0eWxlX2luZGV4XzBfaWRfZTRjYWVhZjhfc2NvcGVkX3RydWVfbGFuZ19jc3NfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiODkwY1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX21pbmlfY3NzX2V4dHJhY3RfcGx1Z2luX2Rpc3RfbG9hZGVyX2pzX3JlZl82X29uZU9mXzFfMF9ub2RlX21vZHVsZXNfY3NzX2xvYWRlcl9kaXN0X2Nqc19qc19yZWZfNl9vbmVPZl8xXzFfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfc3R5bGVQb3N0TG9hZGVyX2pzX25vZGVfbW9kdWxlc19wb3N0Y3NzX2xvYWRlcl9zcmNfaW5kZXhfanNfcmVmXzZfb25lT2ZfMV8yX25vZGVfbW9kdWxlc192dWV0aWZ5X2xvYWRlcl9saWJfbG9hZGVyX2pzX3JlZl8xOV8wX25vZGVfbW9kdWxlc19jYWNoZV9sb2FkZXJfZGlzdF9janNfanNfcmVmXzBfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX1NsaWRlclRyYWNrX3Z1ZV92dWVfdHlwZV9zdHlsZV9pbmRleF8wX2lkX2U0Y2FlYWY4X3Njb3BlZF90cnVlX2xhbmdfY3NzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9ub2RlX21vZHVsZXNfbWluaV9jc3NfZXh0cmFjdF9wbHVnaW5fZGlzdF9sb2FkZXJfanNfcmVmXzZfb25lT2ZfMV8wX25vZGVfbW9kdWxlc19jc3NfbG9hZGVyX2Rpc3RfY2pzX2pzX3JlZl82X29uZU9mXzFfMV9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc19zdHlsZVBvc3RMb2FkZXJfanNfbm9kZV9tb2R1bGVzX3Bvc3Rjc3NfbG9hZGVyX3NyY19pbmRleF9qc19yZWZfNl9vbmVPZl8xXzJfbm9kZV9tb2R1bGVzX3Z1ZXRpZnlfbG9hZGVyX2xpYl9sb2FkZXJfanNfcmVmXzE5XzBfbm9kZV9tb2R1bGVzX2NhY2hlX2xvYWRlcl9kaXN0X2Nqc19qc19yZWZfMF8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfU2xpZGVyVHJhY2tfdnVlX3Z1ZV90eXBlX3N0eWxlX2luZGV4XzBfaWRfZTRjYWVhZjhfc2NvcGVkX3RydWVfbGFuZ19jc3NfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xuLyogdW51c2VkIGhhcm1vbnkgcmVleHBvcnQgKiAqL1xuIC8qIHVudXNlZCBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBfdW51c2VkX3dlYnBhY2tfZGVmYXVsdF9leHBvcnQgPSAoX25vZGVfbW9kdWxlc19taW5pX2Nzc19leHRyYWN0X3BsdWdpbl9kaXN0X2xvYWRlcl9qc19yZWZfNl9vbmVPZl8xXzBfbm9kZV9tb2R1bGVzX2Nzc19sb2FkZXJfZGlzdF9janNfanNfcmVmXzZfb25lT2ZfMV8xX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3N0eWxlUG9zdExvYWRlcl9qc19ub2RlX21vZHVsZXNfcG9zdGNzc19sb2FkZXJfc3JjX2luZGV4X2pzX3JlZl82X29uZU9mXzFfMl9ub2RlX21vZHVsZXNfdnVldGlmeV9sb2FkZXJfbGliX2xvYWRlcl9qc19yZWZfMTlfMF9ub2RlX21vZHVsZXNfY2FjaGVfbG9hZGVyX2Rpc3RfY2pzX2pzX3JlZl8wXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19TbGlkZXJUcmFja192dWVfdnVlX3R5cGVfc3R5bGVfaW5kZXhfMF9pZF9lNGNhZWFmOF9zY29wZWRfdHJ1ZV9sYW5nX2Nzc19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEpOyBcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiNmVlYlwiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImRhODRcIik7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjkxMTJcIik7XG52YXIgaGFzID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjUxMzVcIik7XG52YXIgc2V0R2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImNlNGVcIik7XG52YXIgaW5zcGVjdFNvdXJjZSA9IF9fd2VicGFja19yZXF1aXJlX18oXCI4OTI1XCIpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiNjlmM1wiKTtcblxudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldDtcbnZhciBlbmZvcmNlSW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZW5mb3JjZTtcbnZhciBURU1QTEFURSA9IFN0cmluZyhTdHJpbmcpLnNwbGl0KCdTdHJpbmcnKTtcblxuKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGtleSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgdmFyIHVuc2FmZSA9IG9wdGlvbnMgPyAhIW9wdGlvbnMudW5zYWZlIDogZmFsc2U7XG4gIHZhciBzaW1wbGUgPSBvcHRpb25zID8gISFvcHRpb25zLmVudW1lcmFibGUgOiBmYWxzZTtcbiAgdmFyIG5vVGFyZ2V0R2V0ID0gb3B0aW9ucyA/ICEhb3B0aW9ucy5ub1RhcmdldEdldCA6IGZhbHNlO1xuICBpZiAodHlwZW9mIHZhbHVlID09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAodHlwZW9mIGtleSA9PSAnc3RyaW5nJyAmJiAhaGFzKHZhbHVlLCAnbmFtZScpKSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodmFsdWUsICduYW1lJywga2V5KTtcbiAgICBlbmZvcmNlSW50ZXJuYWxTdGF0ZSh2YWx1ZSkuc291cmNlID0gVEVNUExBVEUuam9pbih0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8ga2V5IDogJycpO1xuICB9XG4gIGlmIChPID09PSBnbG9iYWwpIHtcbiAgICBpZiAoc2ltcGxlKSBPW2tleV0gPSB2YWx1ZTtcbiAgICBlbHNlIHNldEdsb2JhbChrZXksIHZhbHVlKTtcbiAgICByZXR1cm47XG4gIH0gZWxzZSBpZiAoIXVuc2FmZSkge1xuICAgIGRlbGV0ZSBPW2tleV07XG4gIH0gZWxzZSBpZiAoIW5vVGFyZ2V0R2V0ICYmIE9ba2V5XSkge1xuICAgIHNpbXBsZSA9IHRydWU7XG4gIH1cbiAgaWYgKHNpbXBsZSkgT1trZXldID0gdmFsdWU7XG4gIGVsc2UgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KE8sIGtleSwgdmFsdWUpO1xuLy8gYWRkIGZha2UgRnVuY3Rpb24jdG9TdHJpbmcgZm9yIGNvcnJlY3Qgd29yayB3cmFwcGVkIG1ldGhvZHMgLyBjb25zdHJ1Y3RvcnMgd2l0aCBtZXRob2RzIGxpa2UgTG9EYXNoIGlzTmF0aXZlXG59KShGdW5jdGlvbi5wcm90b3R5cGUsICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gdHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyAmJiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnNvdXJjZSB8fCBpbnNwZWN0U291cmNlKHRoaXMpO1xufSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiNmY1M1wiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgREVTQ1JJUFRPUlMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiODNhYlwiKTtcbnZhciBvYmplY3RLZXlzID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImRmNzVcIik7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImZjNmFcIik7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiZDFlN1wiKS5mO1xuXG4vLyBgT2JqZWN0LnsgZW50cmllcywgdmFsdWVzIH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoVE9fRU5UUklFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3QoaXQpO1xuICAgIHZhciBrZXlzID0gb2JqZWN0S2V5cyhPKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBpKSB7XG4gICAgICBrZXkgPSBrZXlzW2krK107XG4gICAgICBpZiAoIURFU0NSSVBUT1JTIHx8IHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoTywga2V5KSkge1xuICAgICAgICByZXN1bHQucHVzaChUT19FTlRSSUVTID8gW2tleSwgT1trZXldXSA6IE9ba2V5XSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYE9iamVjdC5lbnRyaWVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmVudHJpZXNcbiAgZW50cmllczogY3JlYXRlTWV0aG9kKHRydWUpLFxuICAvLyBgT2JqZWN0LnZhbHVlc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC52YWx1ZXNcbiAgdmFsdWVzOiBjcmVhdGVNZXRob2QoZmFsc2UpXG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIjcxNTZcIjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGlzT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjg2MWRcIik7XG52YXIgc2V0UHJvdG90eXBlT2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiZDJiYlwiKTtcblxuLy8gbWFrZXMgc3ViY2xhc3Npbmcgd29yayBjb3JyZWN0IGZvciB3cmFwcGVkIGJ1aWx0LWluc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoJHRoaXMsIGR1bW15LCBXcmFwcGVyKSB7XG4gIHZhciBOZXdUYXJnZXQsIE5ld1RhcmdldFByb3RvdHlwZTtcbiAgaWYgKFxuICAgIC8vIGl0IGNhbiB3b3JrIG9ubHkgd2l0aCBuYXRpdmUgYHNldFByb3RvdHlwZU9mYFxuICAgIHNldFByb3RvdHlwZU9mICYmXG4gICAgLy8gd2UgaGF2ZW4ndCBjb21wbGV0ZWx5IGNvcnJlY3QgcHJlLUVTNiB3YXkgZm9yIGdldHRpbmcgYG5ldy50YXJnZXRgLCBzbyB1c2UgdGhpc1xuICAgIHR5cGVvZiAoTmV3VGFyZ2V0ID0gZHVtbXkuY29uc3RydWN0b3IpID09ICdmdW5jdGlvbicgJiZcbiAgICBOZXdUYXJnZXQgIT09IFdyYXBwZXIgJiZcbiAgICBpc09iamVjdChOZXdUYXJnZXRQcm90b3R5cGUgPSBOZXdUYXJnZXQucHJvdG90eXBlKSAmJlxuICAgIE5ld1RhcmdldFByb3RvdHlwZSAhPT0gV3JhcHBlci5wcm90b3R5cGVcbiAgKSBzZXRQcm90b3R5cGVPZigkdGhpcywgTmV3VGFyZ2V0UHJvdG90eXBlKTtcbiAgcmV0dXJuICR0aGlzO1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCI3NDE4XCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiNzQ2ZlwiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgcGF0aCA9IF9fd2VicGFja19yZXF1aXJlX18oXCI0MjhmXCIpO1xudmFyIGhhcyA9IF9fd2VicGFja19yZXF1aXJlX18oXCI1MTM1XCIpO1xudmFyIHdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiZTUzOFwiKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IF9fd2VicGFja19yZXF1aXJlX18oXCI5YmYyXCIpLmY7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUpIHtcbiAgdmFyIFN5bWJvbCA9IHBhdGguU3ltYm9sIHx8IChwYXRoLlN5bWJvbCA9IHt9KTtcbiAgaWYgKCFoYXMoU3ltYm9sLCBOQU1FKSkgZGVmaW5lUHJvcGVydHkoU3ltYm9sLCBOQU1FLCB7XG4gICAgdmFsdWU6IHdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUuZihOQU1FKVxuICB9KTtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiNzgzOVwiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG4vLyBJRTgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gW1xuICAnY29uc3RydWN0b3InLFxuICAnaGFzT3duUHJvcGVydHknLFxuICAnaXNQcm90b3R5cGVPZicsXG4gICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG4gICd0b0xvY2FsZVN0cmluZycsXG4gICd0b1N0cmluZycsXG4gICd2YWx1ZU9mJ1xuXTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCI3YjBiXCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjFkODBcIik7XG5cbi8vIGBUb09iamVjdGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy10b29iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KSk7XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIjdjNzNcIjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjgyNWFcIik7XG52YXIgZGVmaW5lUHJvcGVydGllcyA9IF9fd2VicGFja19yZXF1aXJlX18oXCIzN2U4XCIpO1xudmFyIGVudW1CdWdLZXlzID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjc4MzlcIik7XG52YXIgaGlkZGVuS2V5cyA9IF9fd2VicGFja19yZXF1aXJlX18oXCJkMDEyXCIpO1xudmFyIGh0bWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiMWJlNFwiKTtcbnZhciBkb2N1bWVudENyZWF0ZUVsZW1lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiY2MxMlwiKTtcbnZhciBzaGFyZWRLZXkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiZjc3MlwiKTtcblxudmFyIEdUID0gJz4nO1xudmFyIExUID0gJzwnO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIFNDUklQVCA9ICdzY3JpcHQnO1xudmFyIElFX1BST1RPID0gc2hhcmVkS2V5KCdJRV9QUk9UTycpO1xuXG52YXIgRW1wdHlDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcblxudmFyIHNjcmlwdFRhZyA9IGZ1bmN0aW9uIChjb250ZW50KSB7XG4gIHJldHVybiBMVCArIFNDUklQVCArIEdUICsgY29udGVudCArIExUICsgJy8nICsgU0NSSVBUICsgR1Q7XG59O1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgQWN0aXZlWCBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIE51bGxQcm90b09iamVjdFZpYUFjdGl2ZVggPSBmdW5jdGlvbiAoYWN0aXZlWERvY3VtZW50KSB7XG4gIGFjdGl2ZVhEb2N1bWVudC53cml0ZShzY3JpcHRUYWcoJycpKTtcbiAgYWN0aXZlWERvY3VtZW50LmNsb3NlKCk7XG4gIHZhciB0ZW1wID0gYWN0aXZlWERvY3VtZW50LnBhcmVudFdpbmRvdy5PYmplY3Q7XG4gIGFjdGl2ZVhEb2N1bWVudCA9IG51bGw7IC8vIGF2b2lkIG1lbW9yeSBsZWFrXG4gIHJldHVybiB0ZW1wO1xufTtcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIGlmcmFtZSBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIE51bGxQcm90b09iamVjdFZpYUlGcmFtZSA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gVGhyYXNoLCB3YXN0ZSBhbmQgc29kb215OiBJRSBHQyBidWdcbiAgdmFyIGlmcmFtZSA9IGRvY3VtZW50Q3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7XG4gIHZhciBKUyA9ICdqYXZhJyArIFNDUklQVCArICc6JztcbiAgdmFyIGlmcmFtZURvY3VtZW50O1xuICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgaHRtbC5hcHBlbmRDaGlsZChpZnJhbWUpO1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNDc1XG4gIGlmcmFtZS5zcmMgPSBTdHJpbmcoSlMpO1xuICBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICBpZnJhbWVEb2N1bWVudC5vcGVuKCk7XG4gIGlmcmFtZURvY3VtZW50LndyaXRlKHNjcmlwdFRhZygnZG9jdW1lbnQuRj1PYmplY3QnKSk7XG4gIGlmcmFtZURvY3VtZW50LmNsb3NlKCk7XG4gIHJldHVybiBpZnJhbWVEb2N1bWVudC5GO1xufTtcblxuLy8gQ2hlY2sgZm9yIGRvY3VtZW50LmRvbWFpbiBhbmQgYWN0aXZlIHggc3VwcG9ydFxuLy8gTm8gbmVlZCB0byB1c2UgYWN0aXZlIHggYXBwcm9hY2ggd2hlbiBkb2N1bWVudC5kb21haW4gaXMgbm90IHNldFxuLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lcy1zaGltcy9lczUtc2hpbS9pc3N1ZXMvMTUwXG4vLyB2YXJpYXRpb24gb2YgaHR0cHM6Ly9naXRodWIuY29tL2tpdGNhbWJyaWRnZS9lczUtc2hpbS9jb21taXQvNGY3MzhhYzA2NjM0NlxuLy8gYXZvaWQgSUUgR0MgYnVnXG52YXIgYWN0aXZlWERvY3VtZW50O1xudmFyIE51bGxQcm90b09iamVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICAvKiBnbG9iYWwgQWN0aXZlWE9iamVjdCAqL1xuICAgIGFjdGl2ZVhEb2N1bWVudCA9IGRvY3VtZW50LmRvbWFpbiAmJiBuZXcgQWN0aXZlWE9iamVjdCgnaHRtbGZpbGUnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogaWdub3JlICovIH1cbiAgTnVsbFByb3RvT2JqZWN0ID0gYWN0aXZlWERvY3VtZW50ID8gTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWChhY3RpdmVYRG9jdW1lbnQpIDogTnVsbFByb3RvT2JqZWN0VmlhSUZyYW1lKCk7XG4gIHZhciBsZW5ndGggPSBlbnVtQnVnS2V5cy5sZW5ndGg7XG4gIHdoaWxlIChsZW5ndGgtLSkgZGVsZXRlIE51bGxQcm90b09iamVjdFtQUk9UT1RZUEVdW2VudW1CdWdLZXlzW2xlbmd0aF1dO1xuICByZXR1cm4gTnVsbFByb3RvT2JqZWN0KCk7XG59O1xuXG5oaWRkZW5LZXlzW0lFX1BST1RPXSA9IHRydWU7XG5cbi8vIGBPYmplY3QuY3JlYXRlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5jcmVhdGVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoTyAhPT0gbnVsbCkge1xuICAgIEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eUNvbnN0cnVjdG9yKCk7XG4gICAgRW1wdHlDb25zdHJ1Y3RvcltQUk9UT1RZUEVdID0gbnVsbDtcbiAgICAvLyBhZGQgXCJfX3Byb3RvX19cIiBmb3IgT2JqZWN0LmdldFByb3RvdHlwZU9mIHBvbHlmaWxsXG4gICAgcmVzdWx0W0lFX1BST1RPXSA9IE87XG4gIH0gZWxzZSByZXN1bHQgPSBOdWxsUHJvdG9PYmplY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRlZmluZVByb3BlcnRpZXMocmVzdWx0LCBQcm9wZXJ0aWVzKTtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiN2RkMFwiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyICQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiMjNlN1wiKTtcbnZhciBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjllZDNcIik7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiZTE2M1wiKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IF9fd2VicGFja19yZXF1aXJlX18oXCJkMmJiXCIpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImQ0NGVcIik7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjkxMTJcIik7XG52YXIgcmVkZWZpbmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiNmVlYlwiKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiYjYyMlwiKTtcbnZhciBJU19QVVJFID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImM0MzBcIik7XG52YXIgSXRlcmF0b3JzID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjNmOGNcIik7XG52YXIgSXRlcmF0b3JzQ29yZSA9IF9fd2VicGFja19yZXF1aXJlX18oXCJhZTkzXCIpO1xuXG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSBJdGVyYXRvcnNDb3JlLkl0ZXJhdG9yUHJvdG90eXBlO1xudmFyIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSBJdGVyYXRvcnNDb3JlLkJVR0dZX1NBRkFSSV9JVEVSQVRPUlM7XG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgS0VZUyA9ICdrZXlzJztcbnZhciBWQUxVRVMgPSAndmFsdWVzJztcbnZhciBFTlRSSUVTID0gJ2VudHJpZXMnO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEl0ZXJhYmxlLCBOQU1FLCBJdGVyYXRvckNvbnN0cnVjdG9yLCBuZXh0LCBERUZBVUxULCBJU19TRVQsIEZPUkNFRCkge1xuICBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yKEl0ZXJhdG9yQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuXG4gIHZhciBnZXRJdGVyYXRpb25NZXRob2QgPSBmdW5jdGlvbiAoS0lORCkge1xuICAgIGlmIChLSU5EID09PSBERUZBVUxUICYmIGRlZmF1bHRJdGVyYXRvcikgcmV0dXJuIGRlZmF1bHRJdGVyYXRvcjtcbiAgICBpZiAoIUJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgJiYgS0lORCBpbiBJdGVyYWJsZVByb3RvdHlwZSkgcmV0dXJuIEl0ZXJhYmxlUHJvdG90eXBlW0tJTkRdO1xuICAgIHN3aXRjaCAoS0lORCkge1xuICAgICAgY2FzZSBLRVlTOiByZXR1cm4gZnVuY3Rpb24ga2V5cygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgICAgY2FzZSBWQUxVRVM6IHJldHVybiBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICAgIGNhc2UgRU5UUklFUzogcmV0dXJuIGZ1bmN0aW9uIGVudHJpZXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICB9IHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzKTsgfTtcbiAgfTtcblxuICB2YXIgVE9fU1RSSU5HX1RBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgdmFyIElOQ09SUkVDVF9WQUxVRVNfTkFNRSA9IGZhbHNlO1xuICB2YXIgSXRlcmFibGVQcm90b3R5cGUgPSBJdGVyYWJsZS5wcm90b3R5cGU7XG4gIHZhciBuYXRpdmVJdGVyYXRvciA9IEl0ZXJhYmxlUHJvdG90eXBlW0lURVJBVE9SXVxuICAgIHx8IEl0ZXJhYmxlUHJvdG90eXBlWydAQGl0ZXJhdG9yJ11cbiAgICB8fCBERUZBVUxUICYmIEl0ZXJhYmxlUHJvdG90eXBlW0RFRkFVTFRdO1xuICB2YXIgZGVmYXVsdEl0ZXJhdG9yID0gIUJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgJiYgbmF0aXZlSXRlcmF0b3IgfHwgZ2V0SXRlcmF0aW9uTWV0aG9kKERFRkFVTFQpO1xuICB2YXIgYW55TmF0aXZlSXRlcmF0b3IgPSBOQU1FID09ICdBcnJheScgPyBJdGVyYWJsZVByb3RvdHlwZS5lbnRyaWVzIHx8IG5hdGl2ZUl0ZXJhdG9yIDogbmF0aXZlSXRlcmF0b3I7XG4gIHZhciBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIG1ldGhvZHMsIEtFWTtcblxuICAvLyBmaXggbmF0aXZlXG4gIGlmIChhbnlOYXRpdmVJdGVyYXRvcikge1xuICAgIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKGFueU5hdGl2ZUl0ZXJhdG9yLmNhbGwobmV3IEl0ZXJhYmxlKCkpKTtcbiAgICBpZiAoSXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUgJiYgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLm5leHQpIHtcbiAgICAgIGlmICghSVNfUFVSRSAmJiBnZXRQcm90b3R5cGVPZihDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUpICE9PSBJdGVyYXRvclByb3RvdHlwZSkge1xuICAgICAgICBpZiAoc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgICAgICBzZXRQcm90b3R5cGVPZihDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIEl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXSAhPSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIFRPX1NUUklOR19UQUcsIHRydWUsIHRydWUpO1xuICAgICAgaWYgKElTX1BVUkUpIEl0ZXJhdG9yc1tUT19TVFJJTkdfVEFHXSA9IHJldHVyblRoaXM7XG4gICAgfVxuICB9XG5cbiAgLy8gZml4IEFycmF5I3t2YWx1ZXMsIEBAaXRlcmF0b3J9Lm5hbWUgaW4gVjggLyBGRlxuICBpZiAoREVGQVVMVCA9PSBWQUxVRVMgJiYgbmF0aXZlSXRlcmF0b3IgJiYgbmF0aXZlSXRlcmF0b3IubmFtZSAhPT0gVkFMVUVTKSB7XG4gICAgSU5DT1JSRUNUX1ZBTFVFU19OQU1FID0gdHJ1ZTtcbiAgICBkZWZhdWx0SXRlcmF0b3IgPSBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBuYXRpdmVJdGVyYXRvci5jYWxsKHRoaXMpOyB9O1xuICB9XG5cbiAgLy8gZGVmaW5lIGl0ZXJhdG9yXG4gIGlmICgoIUlTX1BVUkUgfHwgRk9SQ0VEKSAmJiBJdGVyYWJsZVByb3RvdHlwZVtJVEVSQVRPUl0gIT09IGRlZmF1bHRJdGVyYXRvcikge1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShJdGVyYWJsZVByb3RvdHlwZSwgSVRFUkFUT1IsIGRlZmF1bHRJdGVyYXRvcik7XG4gIH1cbiAgSXRlcmF0b3JzW05BTUVdID0gZGVmYXVsdEl0ZXJhdG9yO1xuXG4gIC8vIGV4cG9ydCBhZGRpdGlvbmFsIG1ldGhvZHNcbiAgaWYgKERFRkFVTFQpIHtcbiAgICBtZXRob2RzID0ge1xuICAgICAgdmFsdWVzOiBnZXRJdGVyYXRpb25NZXRob2QoVkFMVUVTKSxcbiAgICAgIGtleXM6IElTX1NFVCA/IGRlZmF1bHRJdGVyYXRvciA6IGdldEl0ZXJhdGlvbk1ldGhvZChLRVlTKSxcbiAgICAgIGVudHJpZXM6IGdldEl0ZXJhdGlvbk1ldGhvZChFTlRSSUVTKVxuICAgIH07XG4gICAgaWYgKEZPUkNFRCkgZm9yIChLRVkgaW4gbWV0aG9kcykge1xuICAgICAgaWYgKEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgfHwgSU5DT1JSRUNUX1ZBTFVFU19OQU1FIHx8ICEoS0VZIGluIEl0ZXJhYmxlUHJvdG90eXBlKSkge1xuICAgICAgICByZWRlZmluZShJdGVyYWJsZVByb3RvdHlwZSwgS0VZLCBtZXRob2RzW0tFWV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSAkKHsgdGFyZ2V0OiBOQU1FLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBCVUdHWV9TQUZBUklfSVRFUkFUT1JTIHx8IElOQ09SUkVDVF9WQUxVRVNfTkFNRSB9LCBtZXRob2RzKTtcbiAgfVxuXG4gIHJldHVybiBtZXRob2RzO1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCI3ZjlhXCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiZGE4NFwiKTtcbnZhciBpbnNwZWN0U291cmNlID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjg5MjVcIik7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsLldlYWtNYXA7XG5cbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KGluc3BlY3RTb3VyY2UoV2Vha01hcCkpO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIjgyNWFcIjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGlzT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjg2MWRcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKFN0cmluZyhpdCkgKyAnIGlzIG5vdCBhbiBvYmplY3QnKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIjgzYWJcIjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGZhaWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImQwMzlcIik7XG5cbi8vIFRoYW5rJ3MgSUU4IGZvciBoaXMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgMSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSlbMV0gIT0gNztcbn0pO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIjg0MThcIjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciB0b1ByaW1pdGl2ZSA9IF9fd2VicGFja19yZXF1aXJlX18oXCJjMDRlXCIpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjliZjJcIik7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjVjNmNcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICB2YXIgcHJvcGVydHlLZXkgPSB0b1ByaW1pdGl2ZShrZXkpO1xuICBpZiAocHJvcGVydHlLZXkgaW4gb2JqZWN0KSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKG9iamVjdCwgcHJvcGVydHlLZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigwLCB2YWx1ZSkpO1xuICBlbHNlIG9iamVjdFtwcm9wZXJ0eUtleV0gPSB2YWx1ZTtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiODYxZFwiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogdHlwZW9mIGl0ID09PSAnZnVuY3Rpb24nO1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCI4OGJjXCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqLyhmdW5jdGlvbihnbG9iYWwpIHsvKipcbiAqIGxvZGFzaCAoQ3VzdG9tIEJ1aWxkKSA8aHR0cHM6Ly9sb2Rhc2guY29tLz5cbiAqIEJ1aWxkOiBgbG9kYXNoIG1vZHVsYXJpemUgZXhwb3J0cz1cIm5wbVwiIC1vIC4vYFxuICogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMgPGh0dHBzOi8vanF1ZXJ5Lm9yZy8+XG4gKiBSZWxlYXNlZCB1bmRlciBNSVQgbGljZW5zZSA8aHR0cHM6Ly9sb2Rhc2guY29tL2xpY2Vuc2U+XG4gKiBCYXNlZCBvbiBVbmRlcnNjb3JlLmpzIDEuOC4zIDxodHRwOi8vdW5kZXJzY29yZWpzLm9yZy9MSUNFTlNFPlxuICogQ29weXJpZ2h0IEplcmVteSBBc2hrZW5hcywgRG9jdW1lbnRDbG91ZCBhbmQgSW52ZXN0aWdhdGl2ZSBSZXBvcnRlcnMgJiBFZGl0b3JzXG4gKi9cblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMCxcbiAgICBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxuICAgIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGdsb2JhbGAgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCAmJiBnbG9iYWwuT2JqZWN0ID09PSBPYmplY3QgJiYgZ2xvYmFsO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHNlbGZgLiAqL1xudmFyIGZyZWVTZWxmID0gdHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZiAmJiBzZWxmLk9iamVjdCA9PT0gT2JqZWN0ICYmIHNlbGY7XG5cbi8qKiBVc2VkIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0LiAqL1xudmFyIHJvb3QgPSBmcmVlR2xvYmFsIHx8IGZyZWVTZWxmIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cbi8qKlxuICogQSBmYXN0ZXIgYWx0ZXJuYXRpdmUgdG8gYEZ1bmN0aW9uI2FwcGx5YCwgdGhpcyBmdW5jdGlvbiBpbnZva2VzIGBmdW5jYFxuICogd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgYHRoaXNBcmdgIGFuZCB0aGUgYXJndW1lbnRzIG9mIGBhcmdzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaW52b2tlLlxuICogQHBhcmFtIHsqfSB0aGlzQXJnIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge0FycmF5fSBhcmdzIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGBmdW5jYCB3aXRoLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc3VsdCBvZiBgZnVuY2AuXG4gKi9cbmZ1bmN0aW9uIGFwcGx5KGZ1bmMsIHRoaXNBcmcsIGFyZ3MpIHtcbiAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnKTtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSk7XG4gICAgY2FzZSAyOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgfVxuICByZXR1cm4gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbn1cblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWFwYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWVcbiAqIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TWFwKGFycmF5LCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID8gYXJyYXkubGVuZ3RoIDogMCxcbiAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQXBwZW5kcyB0aGUgZWxlbWVudHMgb2YgYHZhbHVlc2AgdG8gYGFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGFwcGVuZC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBhcnJheVB1c2goYXJyYXksIHZhbHVlcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICBvZmZzZXQgPSBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBhcnJheVtvZmZzZXQgKyBpbmRleF0gPSB2YWx1ZXNbaW5kZXhdO1xuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFN5bWJvbCA9IHJvb3QuU3ltYm9sLFxuICAgIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGUsXG4gICAgc3ByZWFkYWJsZVN5bWJvbCA9IFN5bWJvbCA/IFN5bWJvbC5pc0NvbmNhdFNwcmVhZGFibGUgOiB1bmRlZmluZWQ7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mbGF0dGVuYCB3aXRoIHN1cHBvcnQgZm9yIHJlc3RyaWN0aW5nIGZsYXR0ZW5pbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmbGF0dGVuLlxuICogQHBhcmFtIHtudW1iZXJ9IGRlcHRoIFRoZSBtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3ByZWRpY2F0ZT1pc0ZsYXR0ZW5hYmxlXSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNTdHJpY3RdIFJlc3RyaWN0IHRvIHZhbHVlcyB0aGF0IHBhc3MgYHByZWRpY2F0ZWAgY2hlY2tzLlxuICogQHBhcmFtIHtBcnJheX0gW3Jlc3VsdD1bXV0gVGhlIGluaXRpYWwgcmVzdWx0IHZhbHVlLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBiYXNlRmxhdHRlbihhcnJheSwgZGVwdGgsIHByZWRpY2F0ZSwgaXNTdHJpY3QsIHJlc3VsdCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBwcmVkaWNhdGUgfHwgKHByZWRpY2F0ZSA9IGlzRmxhdHRlbmFibGUpO1xuICByZXN1bHQgfHwgKHJlc3VsdCA9IFtdKTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICBpZiAoZGVwdGggPiAwICYmIHByZWRpY2F0ZSh2YWx1ZSkpIHtcbiAgICAgIGlmIChkZXB0aCA+IDEpIHtcbiAgICAgICAgLy8gUmVjdXJzaXZlbHkgZmxhdHRlbiBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgICAgYmFzZUZsYXR0ZW4odmFsdWUsIGRlcHRoIC0gMSwgcHJlZGljYXRlLCBpc1N0cmljdCwgcmVzdWx0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFycmF5UHVzaChyZXN1bHQsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFpc1N0cmljdCkge1xuICAgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucGlja2Agd2l0aG91dCBzdXBwb3J0IGZvciBpbmRpdmlkdWFsXG4gKiBwcm9wZXJ0eSBpZGVudGlmaWVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgc291cmNlIG9iamVjdC5cbiAqIEBwYXJhbSB7c3RyaW5nW119IHByb3BzIFRoZSBwcm9wZXJ0eSBpZGVudGlmaWVycyB0byBwaWNrLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gYmFzZVBpY2sob2JqZWN0LCBwcm9wcykge1xuICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgcmV0dXJuIGJhc2VQaWNrQnkob2JqZWN0LCBwcm9wcywgZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgIHJldHVybiBrZXkgaW4gb2JqZWN0O1xuICB9KTtcbn1cblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiAgYF8ucGlja0J5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBwcm9wcyBUaGUgcHJvcGVydHkgaWRlbnRpZmllcnMgdG8gcGljayBmcm9tLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBwcm9wZXJ0eS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGJhc2VQaWNrQnkob2JqZWN0LCBwcm9wcywgcHJlZGljYXRlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0ge307XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIga2V5ID0gcHJvcHNbaW5kZXhdLFxuICAgICAgICB2YWx1ZSA9IG9iamVjdFtrZXldO1xuXG4gICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwga2V5KSkge1xuICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5yZXN0YCB3aGljaCBkb2Vzbid0IHZhbGlkYXRlIG9yIGNvZXJjZSBhcmd1bWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVJlc3QoZnVuYywgc3RhcnQpIHtcbiAgc3RhcnQgPSBuYXRpdmVNYXgoc3RhcnQgPT09IHVuZGVmaW5lZCA/IChmdW5jLmxlbmd0aCAtIDEpIDogc3RhcnQsIDApO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IG5hdGl2ZU1heChhcmdzLmxlbmd0aCAtIHN0YXJ0LCAwKSxcbiAgICAgICAgYXJyYXkgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGFycmF5W2luZGV4XSA9IGFyZ3Nbc3RhcnQgKyBpbmRleF07XG4gICAgfVxuICAgIGluZGV4ID0gLTE7XG4gICAgdmFyIG90aGVyQXJncyA9IEFycmF5KHN0YXJ0ICsgMSk7XG4gICAgd2hpbGUgKCsraW5kZXggPCBzdGFydCkge1xuICAgICAgb3RoZXJBcmdzW2luZGV4XSA9IGFyZ3NbaW5kZXhdO1xuICAgIH1cbiAgICBvdGhlckFyZ3Nbc3RhcnRdID0gYXJyYXk7XG4gICAgcmV0dXJuIGFwcGx5KGZ1bmMsIHRoaXMsIG90aGVyQXJncyk7XG4gIH07XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBmbGF0dGVuYWJsZSBgYXJndW1lbnRzYCBvYmplY3Qgb3IgYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZmxhdHRlbmFibGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNGbGF0dGVuYWJsZSh2YWx1ZSkge1xuICByZXR1cm4gaXNBcnJheSh2YWx1ZSkgfHwgaXNBcmd1bWVudHModmFsdWUpIHx8XG4gICAgISEoc3ByZWFkYWJsZVN5bWJvbCAmJiB2YWx1ZSAmJiB2YWx1ZVtzcHJlYWRhYmxlU3ltYm9sXSk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyBrZXkgaWYgaXQncyBub3QgYSBzdHJpbmcgb3Igc3ltYm9sLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMge3N0cmluZ3xzeW1ib2x9IFJldHVybnMgdGhlIGtleS5cbiAqL1xuZnVuY3Rpb24gdG9LZXkodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fCBpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgdmFyIHJlc3VsdCA9ICh2YWx1ZSArICcnKTtcbiAgcmV0dXJuIChyZXN1bHQgPT0gJzAnICYmICgxIC8gdmFsdWUpID09IC1JTkZJTklUWSkgPyAnLTAnIDogcmVzdWx0O1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhbiBgYXJndW1lbnRzYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxuICogIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FyZ3VtZW50cyh2YWx1ZSkge1xuICAvLyBTYWZhcmkgOC4xIG1ha2VzIGBhcmd1bWVudHMuY2FsbGVlYCBlbnVtZXJhYmxlIGluIHN0cmljdCBtb2RlLlxuICByZXR1cm4gaXNBcnJheUxpa2VPYmplY3QodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxuICAgICghcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpIHx8IG9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpID09IGFyZ3NUYWcpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYW4gYEFycmF5YCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5KGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLiBBIHZhbHVlIGlzIGNvbnNpZGVyZWQgYXJyYXktbGlrZSBpZiBpdCdzXG4gKiBub3QgYSBmdW5jdGlvbiBhbmQgaGFzIGEgYHZhbHVlLmxlbmd0aGAgdGhhdCdzIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIG9yXG4gKiBlcXVhbCB0byBgMGAgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZSgnYWJjJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUxpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhaXNGdW5jdGlvbih2YWx1ZSk7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5pc0FycmF5TGlrZWAgZXhjZXB0IHRoYXQgaXQgYWxzbyBjaGVja3MgaWYgYHZhbHVlYFxuICogaXMgYW4gb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LWxpa2Ugb2JqZWN0LFxuICogIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGlzQXJyYXlMaWtlKHZhbHVlKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYEZ1bmN0aW9uYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBmdW5jdGlvbiwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oXyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0Z1bmN0aW9uKC9hYmMvKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgLy8gVGhlIHVzZSBvZiBgT2JqZWN0I3RvU3RyaW5nYCBhdm9pZHMgaXNzdWVzIHdpdGggdGhlIGB0eXBlb2ZgIG9wZXJhdG9yXG4gIC8vIGluIFNhZmFyaSA4LTkgd2hpY2ggcmV0dXJucyAnb2JqZWN0JyBmb3IgdHlwZWQgYXJyYXkgYW5kIG90aGVyIGNvbnN0cnVjdG9ycy5cbiAgdmFyIHRhZyA9IGlzT2JqZWN0KHZhbHVlKSA/IG9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpIDogJyc7XG4gIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBsZW5ndGguXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAqIFtgVG9MZW5ndGhgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10b2xlbmd0aCkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBsZW5ndGgsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0xlbmd0aCgzKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTGVuZ3RoKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKEluZmluaXR5KTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aCgnMycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNMZW5ndGgodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJlxuICAgIHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPD0gTUFYX1NBRkVfSU5URUdFUjtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGVcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcbiAqIG9mIGBPYmplY3RgLiAoZS5nLiBhcnJheXMsIGZ1bmN0aW9ucywgb2JqZWN0cywgcmVnZXhlcywgYG5ldyBOdW1iZXIoMClgLCBhbmQgYG5ldyBTdHJpbmcoJycpYClcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdCh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiAhIXZhbHVlICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXG4gKiBhbmQgaGFzIGEgYHR5cGVvZmAgcmVzdWx0IG9mIFwib2JqZWN0XCIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdExpa2Uoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc09iamVjdExpa2UobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgcmV0dXJuICEhdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgU3ltYm9sYCBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc3ltYm9sLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNTeW1ib2woU3ltYm9sLml0ZXJhdG9yKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzU3ltYm9sKCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3ltYm9sKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ3N5bWJvbCcgfHxcbiAgICAoaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBvYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKSA9PSBzeW1ib2xUYWcpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IGNvbXBvc2VkIG9mIHRoZSBwaWNrZWQgYG9iamVjdGAgcHJvcGVydGllcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHBhcmFtIHsuLi4oc3RyaW5nfHN0cmluZ1tdKX0gW3Byb3BzXSBUaGUgcHJvcGVydHkgaWRlbnRpZmllcnMgdG8gcGljay5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAnMicsICdjJzogMyB9O1xuICpcbiAqIF8ucGljayhvYmplY3QsIFsnYScsICdjJ10pO1xuICogLy8gPT4geyAnYSc6IDEsICdjJzogMyB9XG4gKi9cbnZhciBwaWNrID0gYmFzZVJlc3QoZnVuY3Rpb24ob2JqZWN0LCBwcm9wcykge1xuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB7fSA6IGJhc2VQaWNrKG9iamVjdCwgYXJyYXlNYXAoYmFzZUZsYXR0ZW4ocHJvcHMsIDEpLCB0b0tleSkpO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGljaztcblxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKHRoaXMsIF9fd2VicGFja19yZXF1aXJlX18oXCJjOGJhXCIpKSlcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiODkwY1wiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiODkyNVwiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgc3RvcmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiYzZjZFwiKTtcblxudmFyIGZ1bmN0aW9uVG9TdHJpbmcgPSBGdW5jdGlvbi50b1N0cmluZztcblxuLy8gdGhpcyBoZWxwZXIgYnJva2VuIGluIGAzLjQuMS0zLjQuNGAsIHNvIHdlIGNhbid0IHVzZSBgc2hhcmVkYCBoZWxwZXJcbmlmICh0eXBlb2Ygc3RvcmUuaW5zcGVjdFNvdXJjZSAhPSAnZnVuY3Rpb24nKSB7XG4gIHN0b3JlLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb25Ub1N0cmluZy5jYWxsKGl0KTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZS5pbnNwZWN0U291cmNlO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIjhhYTVcIjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBjaGFyQXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiNjU0N1wiKS5jaGFyQXQ7XG5cbi8vIGBBZHZhbmNlU3RyaW5nSW5kZXhgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYWR2YW5jZXN0cmluZ2luZGV4XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChTLCBpbmRleCwgdW5pY29kZSkge1xuICByZXR1cm4gaW5kZXggKyAodW5pY29kZSA/IGNoYXJBdChTLCBpbmRleCkubGVuZ3RoIDogMSk7XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIjhlOTVcIjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIE1lZGlhUXVlcnlEaXNwYXRjaCA9IF9fd2VicGFja19yZXF1aXJlX18oXCJjMTk1XCIpO1xubW9kdWxlLmV4cG9ydHMgPSBuZXcgTWVkaWFRdWVyeURpc3BhdGNoKCk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiOTAyMFwiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG4vKipcbiAqIERlbGVnYXRlIHRvIGhhbmRsZSBhIG1lZGlhIHF1ZXJ5IGJlaW5nIG1hdGNoZWQgYW5kIHVubWF0Y2hlZC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtIHtmdW5jdGlvbn0gb3B0aW9ucy5tYXRjaCBjYWxsYmFjayBmb3Igd2hlbiB0aGUgbWVkaWEgcXVlcnkgaXMgbWF0Y2hlZFxuICogQHBhcmFtIHtmdW5jdGlvbn0gW29wdGlvbnMudW5tYXRjaF0gY2FsbGJhY2sgZm9yIHdoZW4gdGhlIG1lZGlhIHF1ZXJ5IGlzIHVubWF0Y2hlZFxuICogQHBhcmFtIHtmdW5jdGlvbn0gW29wdGlvbnMuc2V0dXBdIG9uZS10aW1lIGNhbGxiYWNrIHRyaWdnZXJlZCB0aGUgZmlyc3QgdGltZSBhIHF1ZXJ5IGlzIG1hdGNoZWRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuZGVmZXJTZXR1cD1mYWxzZV0gc2hvdWxkIHRoZSBzZXR1cCBjYWxsYmFjayBiZSBydW4gaW1tZWRpYXRlbHksIHJhdGhlciB0aGFuIGZpcnN0IHRpbWUgcXVlcnkgaXMgbWF0Y2hlZD9cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBRdWVyeUhhbmRsZXIob3B0aW9ucykge1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgIW9wdGlvbnMuZGVmZXJTZXR1cCAmJiB0aGlzLnNldHVwKCk7XG59XG5cblF1ZXJ5SGFuZGxlci5wcm90b3R5cGUgPSB7XG5cbiAgICBjb25zdHJ1Y3RvciA6IFF1ZXJ5SGFuZGxlcixcblxuICAgIC8qKlxuICAgICAqIGNvb3JkaW5hdGVzIHNldHVwIG9mIHRoZSBoYW5kbGVyXG4gICAgICpcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKi9cbiAgICBzZXR1cCA6IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZih0aGlzLm9wdGlvbnMuc2V0dXApIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5zZXR1cCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5pdGlhbGlzZWQgPSB0cnVlO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBjb29yZGluYXRlcyBzZXR1cCBhbmQgdHJpZ2dlcmluZyBvZiB0aGUgaGFuZGxlclxuICAgICAqXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICovXG4gICAgb24gOiBmdW5jdGlvbigpIHtcbiAgICAgICAgIXRoaXMuaW5pdGlhbGlzZWQgJiYgdGhpcy5zZXR1cCgpO1xuICAgICAgICB0aGlzLm9wdGlvbnMubWF0Y2ggJiYgdGhpcy5vcHRpb25zLm1hdGNoKCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGNvb3JkaW5hdGVzIHRoZSB1bm1hdGNoIGV2ZW50IGZvciB0aGUgaGFuZGxlclxuICAgICAqXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICovXG4gICAgb2ZmIDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy51bm1hdGNoICYmIHRoaXMub3B0aW9ucy51bm1hdGNoKCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGNhbGxlZCB3aGVuIGEgaGFuZGxlciBpcyB0byBiZSBkZXN0cm95ZWQuXG4gICAgICogZGVsZWdhdGVzIHRvIHRoZSBkZXN0cm95IG9yIHVubWF0Y2ggY2FsbGJhY2tzLCBkZXBlbmRpbmcgb24gYXZhaWxhYmlsaXR5LlxuICAgICAqXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICovXG4gICAgZGVzdHJveSA6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMuZGVzdHJveSA/IHRoaXMub3B0aW9ucy5kZXN0cm95KCkgOiB0aGlzLm9mZigpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBkZXRlcm1pbmVzIGVxdWFsaXR5IGJ5IHJlZmVyZW5jZS5cbiAgICAgKiBpZiBvYmplY3QgaXMgc3VwcGxpZWQgY29tcGFyZSBvcHRpb25zLCBpZiBmdW5jdGlvbiwgY29tcGFyZSBtYXRjaCBjYWxsYmFja1xuICAgICAqXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtvYmplY3QgfHwgZnVuY3Rpb259IFt0YXJnZXRdIHRoZSB0YXJnZXQgZm9yIGNvbXBhcmlzb25cbiAgICAgKi9cbiAgICBlcXVhbHMgOiBmdW5jdGlvbih0YXJnZXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucyA9PT0gdGFyZ2V0IHx8IHRoaXMub3B0aW9ucy5tYXRjaCA9PT0gdGFyZ2V0O1xuICAgIH1cblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBRdWVyeUhhbmRsZXI7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiOTBlM1wiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG52YXIgaWQgPSAwO1xudmFyIHBvc3RmaXggPSBNYXRoLnJhbmRvbSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJyArIFN0cmluZyhrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5KSArICcpXycgKyAoKytpZCArIHBvc3RmaXgpLnRvU3RyaW5nKDM2KTtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiOTExMlwiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgREVTQ1JJUFRPUlMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiODNhYlwiKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IF9fd2VicGFja19yZXF1aXJlX18oXCI5YmYyXCIpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IF9fd2VicGFja19yZXF1aXJlX18oXCI1YzZjXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIGtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCI5MjYzXCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgcmVnZXhwRmxhZ3MgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiYWQ2ZFwiKTtcbnZhciBzdGlja3lIZWxwZXJzID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjlmN2ZcIik7XG5cbnZhciBuYXRpdmVFeGVjID0gUmVnRXhwLnByb3RvdHlwZS5leGVjO1xuLy8gVGhpcyBhbHdheXMgcmVmZXJzIHRvIHRoZSBuYXRpdmUgaW1wbGVtZW50YXRpb24sIGJlY2F1c2UgdGhlXG4vLyBTdHJpbmcjcmVwbGFjZSBwb2x5ZmlsbCB1c2VzIC4vZml4LXJlZ2V4cC13ZWxsLWtub3duLXN5bWJvbC1sb2dpYy5qcyxcbi8vIHdoaWNoIGxvYWRzIHRoaXMgZmlsZSBiZWZvcmUgcGF0Y2hpbmcgdGhlIG1ldGhvZC5cbnZhciBuYXRpdmVSZXBsYWNlID0gU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlO1xuXG52YXIgcGF0Y2hlZEV4ZWMgPSBuYXRpdmVFeGVjO1xuXG52YXIgVVBEQVRFU19MQVNUX0lOREVYX1dST05HID0gKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlMSA9IC9hLztcbiAgdmFyIHJlMiA9IC9iKi9nO1xuICBuYXRpdmVFeGVjLmNhbGwocmUxLCAnYScpO1xuICBuYXRpdmVFeGVjLmNhbGwocmUyLCAnYScpO1xuICByZXR1cm4gcmUxLmxhc3RJbmRleCAhPT0gMCB8fCByZTIubGFzdEluZGV4ICE9PSAwO1xufSkoKTtcblxudmFyIFVOU1VQUE9SVEVEX1kgPSBzdGlja3lIZWxwZXJzLlVOU1VQUE9SVEVEX1kgfHwgc3RpY2t5SGVscGVycy5CUk9LRU5fQ0FSRVQ7XG5cbi8vIG5vbnBhcnRpY2lwYXRpbmcgY2FwdHVyaW5nIGdyb3VwLCBjb3BpZWQgZnJvbSBlczUtc2hpbSdzIFN0cmluZyNzcGxpdCBwYXRjaC5cbnZhciBOUENHX0lOQ0xVREVEID0gLygpPz8vLmV4ZWMoJycpWzFdICE9PSB1bmRlZmluZWQ7XG5cbnZhciBQQVRDSCA9IFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyB8fCBOUENHX0lOQ0xVREVEIHx8IFVOU1VQUE9SVEVEX1k7XG5cbmlmIChQQVRDSCkge1xuICBwYXRjaGVkRXhlYyA9IGZ1bmN0aW9uIGV4ZWMoc3RyKSB7XG4gICAgdmFyIHJlID0gdGhpcztcbiAgICB2YXIgbGFzdEluZGV4LCByZUNvcHksIG1hdGNoLCBpO1xuICAgIHZhciBzdGlja3kgPSBVTlNVUFBPUlRFRF9ZICYmIHJlLnN0aWNreTtcbiAgICB2YXIgZmxhZ3MgPSByZWdleHBGbGFncy5jYWxsKHJlKTtcbiAgICB2YXIgc291cmNlID0gcmUuc291cmNlO1xuICAgIHZhciBjaGFyc0FkZGVkID0gMDtcbiAgICB2YXIgc3RyQ29weSA9IHN0cjtcblxuICAgIGlmIChzdGlja3kpIHtcbiAgICAgIGZsYWdzID0gZmxhZ3MucmVwbGFjZSgneScsICcnKTtcbiAgICAgIGlmIChmbGFncy5pbmRleE9mKCdnJykgPT09IC0xKSB7XG4gICAgICAgIGZsYWdzICs9ICdnJztcbiAgICAgIH1cblxuICAgICAgc3RyQ29weSA9IFN0cmluZyhzdHIpLnNsaWNlKHJlLmxhc3RJbmRleCk7XG4gICAgICAvLyBTdXBwb3J0IGFuY2hvcmVkIHN0aWNreSBiZWhhdmlvci5cbiAgICAgIGlmIChyZS5sYXN0SW5kZXggPiAwICYmICghcmUubXVsdGlsaW5lIHx8IHJlLm11bHRpbGluZSAmJiBzdHJbcmUubGFzdEluZGV4IC0gMV0gIT09ICdcXG4nKSkge1xuICAgICAgICBzb3VyY2UgPSAnKD86ICcgKyBzb3VyY2UgKyAnKSc7XG4gICAgICAgIHN0ckNvcHkgPSAnICcgKyBzdHJDb3B5O1xuICAgICAgICBjaGFyc0FkZGVkKys7XG4gICAgICB9XG4gICAgICAvLyBeKD8gKyByeCArICkgaXMgbmVlZGVkLCBpbiBjb21iaW5hdGlvbiB3aXRoIHNvbWUgc3RyIHNsaWNpbmcsIHRvXG4gICAgICAvLyBzaW11bGF0ZSB0aGUgJ3knIGZsYWcuXG4gICAgICByZUNvcHkgPSBuZXcgUmVnRXhwKCdeKD86JyArIHNvdXJjZSArICcpJywgZmxhZ3MpO1xuICAgIH1cblxuICAgIGlmIChOUENHX0lOQ0xVREVEKSB7XG4gICAgICByZUNvcHkgPSBuZXcgUmVnRXhwKCdeJyArIHNvdXJjZSArICckKD8hXFxcXHMpJywgZmxhZ3MpO1xuICAgIH1cbiAgICBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HKSBsYXN0SW5kZXggPSByZS5sYXN0SW5kZXg7XG5cbiAgICBtYXRjaCA9IG5hdGl2ZUV4ZWMuY2FsbChzdGlja3kgPyByZUNvcHkgOiByZSwgc3RyQ29weSk7XG5cbiAgICBpZiAoc3RpY2t5KSB7XG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgbWF0Y2guaW5wdXQgPSBtYXRjaC5pbnB1dC5zbGljZShjaGFyc0FkZGVkKTtcbiAgICAgICAgbWF0Y2hbMF0gPSBtYXRjaFswXS5zbGljZShjaGFyc0FkZGVkKTtcbiAgICAgICAgbWF0Y2guaW5kZXggPSByZS5sYXN0SW5kZXg7XG4gICAgICAgIHJlLmxhc3RJbmRleCArPSBtYXRjaFswXS5sZW5ndGg7XG4gICAgICB9IGVsc2UgcmUubGFzdEluZGV4ID0gMDtcbiAgICB9IGVsc2UgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyAmJiBtYXRjaCkge1xuICAgICAgcmUubGFzdEluZGV4ID0gcmUuZ2xvYmFsID8gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGggOiBsYXN0SW5kZXg7XG4gICAgfVxuICAgIGlmIChOUENHX0lOQ0xVREVEICYmIG1hdGNoICYmIG1hdGNoLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIEZpeCBicm93c2VycyB3aG9zZSBgZXhlY2AgbWV0aG9kcyBkb24ndCBjb25zaXN0ZW50bHkgcmV0dXJuIGB1bmRlZmluZWRgXG4gICAgICAvLyBmb3IgTlBDRywgbGlrZSBJRTguIE5PVEU6IFRoaXMgZG9lc24nIHdvcmsgZm9yIC8oLj8pPy9cbiAgICAgIG5hdGl2ZVJlcGxhY2UuY2FsbChtYXRjaFswXSwgcmVDb3B5LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAoaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoIC0gMjsgaSsrKSB7XG4gICAgICAgICAgaWYgKGFyZ3VtZW50c1tpXSA9PT0gdW5kZWZpbmVkKSBtYXRjaFtpXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGNoZWRFeGVjO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIjk0Y2FcIjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGZhaWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImQwMzlcIik7XG5cbnZhciByZXBsYWNlbWVudCA9IC8jfFxcLnByb3RvdHlwZVxcLi87XG5cbnZhciBpc0ZvcmNlZCA9IGZ1bmN0aW9uIChmZWF0dXJlLCBkZXRlY3Rpb24pIHtcbiAgdmFyIHZhbHVlID0gZGF0YVtub3JtYWxpemUoZmVhdHVyZSldO1xuICByZXR1cm4gdmFsdWUgPT0gUE9MWUZJTEwgPyB0cnVlXG4gICAgOiB2YWx1ZSA9PSBOQVRJVkUgPyBmYWxzZVxuICAgIDogdHlwZW9mIGRldGVjdGlvbiA9PSAnZnVuY3Rpb24nID8gZmFpbHMoZGV0ZWN0aW9uKVxuICAgIDogISFkZXRlY3Rpb247XG59O1xuXG52YXIgbm9ybWFsaXplID0gaXNGb3JjZWQubm9ybWFsaXplID0gZnVuY3Rpb24gKHN0cmluZykge1xuICByZXR1cm4gU3RyaW5nKHN0cmluZykucmVwbGFjZShyZXBsYWNlbWVudCwgJy4nKS50b0xvd2VyQ2FzZSgpO1xufTtcblxudmFyIGRhdGEgPSBpc0ZvcmNlZC5kYXRhID0ge307XG52YXIgTkFUSVZFID0gaXNGb3JjZWQuTkFUSVZFID0gJ04nO1xudmFyIFBPTFlGSUxMID0gaXNGb3JjZWQuUE9MWUZJTEwgPSAnUCc7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGb3JjZWQ7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiOTlhZlwiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyICQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiMjNlN1wiKTtcbnZhciBmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oXCJkMDM5XCIpO1xudmFyIGlzQXJyYXkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiZThiNVwiKTtcbnZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oXCI4NjFkXCIpO1xudmFyIHRvT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjdiMGJcIik7XG52YXIgdG9MZW5ndGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiNTBjNFwiKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IF9fd2VicGFja19yZXF1aXJlX18oXCI4NDE4XCIpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IF9fd2VicGFja19yZXF1aXJlX18oXCI2NWYwXCIpO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiMWRkZVwiKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiYjYyMlwiKTtcbnZhciBWOF9WRVJTSU9OID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjJkMDBcIik7XG5cbnZhciBJU19DT05DQVRfU1BSRUFEQUJMRSA9IHdlbGxLbm93blN5bWJvbCgnaXNDb25jYXRTcHJlYWRhYmxlJyk7XG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDB4MUZGRkZGRkZGRkZGRkY7XG52YXIgTUFYSU1VTV9BTExPV0VEX0lOREVYX0VYQ0VFREVEID0gJ01heGltdW0gYWxsb3dlZCBpbmRleCBleGNlZWRlZCc7XG5cbi8vIFdlIGNhbid0IHVzZSB0aGlzIGZlYXR1cmUgZGV0ZWN0aW9uIGluIFY4IHNpbmNlIGl0IGNhdXNlc1xuLy8gZGVvcHRpbWl6YXRpb24gYW5kIHNlcmlvdXMgcGVyZm9ybWFuY2UgZGVncmFkYXRpb25cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NzlcbnZhciBJU19DT05DQVRfU1BSRUFEQUJMRV9TVVBQT1JUID0gVjhfVkVSU0lPTiA+PSA1MSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgYXJyYXkgPSBbXTtcbiAgYXJyYXlbSVNfQ09OQ0FUX1NQUkVBREFCTEVdID0gZmFsc2U7XG4gIHJldHVybiBhcnJheS5jb25jYXQoKVswXSAhPT0gYXJyYXk7XG59KTtcblxudmFyIFNQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ2NvbmNhdCcpO1xuXG52YXIgaXNDb25jYXRTcHJlYWRhYmxlID0gZnVuY3Rpb24gKE8pIHtcbiAgaWYgKCFpc09iamVjdChPKSkgcmV0dXJuIGZhbHNlO1xuICB2YXIgc3ByZWFkYWJsZSA9IE9bSVNfQ09OQ0FUX1NQUkVBREFCTEVdO1xuICByZXR1cm4gc3ByZWFkYWJsZSAhPT0gdW5kZWZpbmVkID8gISFzcHJlYWRhYmxlIDogaXNBcnJheShPKTtcbn07XG5cbnZhciBGT1JDRUQgPSAhSVNfQ09OQ0FUX1NQUkVBREFCTEVfU1VQUE9SVCB8fCAhU1BFQ0lFU19TVVBQT1JUO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmNvbmNhdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuY29uY2F0XG4vLyB3aXRoIGFkZGluZyBzdXBwb3J0IG9mIEBAaXNDb25jYXRTcHJlYWRhYmxlIGFuZCBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIGNvbmNhdDogZnVuY3Rpb24gY29uY2F0KGFyZykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgQSA9IGFycmF5U3BlY2llc0NyZWF0ZShPLCAwKTtcbiAgICB2YXIgbiA9IDA7XG4gICAgdmFyIGksIGssIGxlbmd0aCwgbGVuLCBFO1xuICAgIGZvciAoaSA9IC0xLCBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIEUgPSBpID09PSAtMSA/IE8gOiBhcmd1bWVudHNbaV07XG4gICAgICBpZiAoaXNDb25jYXRTcHJlYWRhYmxlKEUpKSB7XG4gICAgICAgIGxlbiA9IHRvTGVuZ3RoKEUubGVuZ3RoKTtcbiAgICAgICAgaWYgKG4gKyBsZW4gPiBNQVhfU0FGRV9JTlRFR0VSKSB0aHJvdyBUeXBlRXJyb3IoTUFYSU1VTV9BTExPV0VEX0lOREVYX0VYQ0VFREVEKTtcbiAgICAgICAgZm9yIChrID0gMDsgayA8IGxlbjsgaysrLCBuKyspIGlmIChrIGluIEUpIGNyZWF0ZVByb3BlcnR5KEEsIG4sIEVba10pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG4gPj0gTUFYX1NBRkVfSU5URUdFUikgdGhyb3cgVHlwZUVycm9yKE1BWElNVU1fQUxMT1dFRF9JTkRFWF9FWENFRURFRCk7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KEEsIG4rKywgRSk7XG4gICAgICB9XG4gICAgfVxuICAgIEEubGVuZ3RoID0gbjtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiOWJkZFwiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgYW5PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiODI1YVwiKTtcblxuLy8gY2FsbCBzb21ldGhpbmcgb24gaXRlcmF0b3Igc3RlcCB3aXRoIHNhZmUgY2xvc2luZyBvbiBlcnJvclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIGZuLCB2YWx1ZSwgRU5UUklFUykge1xuICB0cnkge1xuICAgIHJldHVybiBFTlRSSUVTID8gZm4oYW5PYmplY3QodmFsdWUpWzBdLCB2YWx1ZVsxXSkgOiBmbih2YWx1ZSk7XG4gIC8vIDcuNC42IEl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsIGNvbXBsZXRpb24pXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdmFyIHJldHVybk1ldGhvZCA9IGl0ZXJhdG9yWydyZXR1cm4nXTtcbiAgICBpZiAocmV0dXJuTWV0aG9kICE9PSB1bmRlZmluZWQpIGFuT2JqZWN0KHJldHVybk1ldGhvZC5jYWxsKGl0ZXJhdG9yKSk7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiOWJmMlwiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgREVTQ1JJUFRPUlMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiODNhYlwiKTtcbnZhciBJRThfRE9NX0RFRklORSA9IF9fd2VicGFja19yZXF1aXJlX18oXCIwY2ZiXCIpO1xudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjgyNWFcIik7XG52YXIgdG9QcmltaXRpdmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiYzA0ZVwiKTtcblxudmFyIG5hdGl2ZURlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBuYXRpdmVEZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gbmF0aXZlRGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCcpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIjllZDNcIjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IF9fd2VicGFja19yZXF1aXJlX18oXCJhZTkzXCIpLkl0ZXJhdG9yUHJvdG90eXBlO1xudmFyIGNyZWF0ZSA9IF9fd2VicGFja19yZXF1aXJlX18oXCI3YzczXCIpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IF9fd2VicGFja19yZXF1aXJlX18oXCI1YzZjXCIpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImQ0NGVcIik7XG52YXIgSXRlcmF0b3JzID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjNmOGNcIik7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSXRlcmF0b3JDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCkge1xuICB2YXIgVE9fU1RSSU5HX1RBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgSXRlcmF0b3JDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUsIHsgbmV4dDogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvckNvbnN0cnVjdG9yLCBUT19TVFJJTkdfVEFHLCBmYWxzZSwgdHJ1ZSk7XG4gIEl0ZXJhdG9yc1tUT19TVFJJTkdfVEFHXSA9IHJldHVyblRoaXM7XG4gIHJldHVybiBJdGVyYXRvckNvbnN0cnVjdG9yO1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCI5ZjdmXCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oXCJkMDM5XCIpO1xuXG4vLyBiYWJlbC1taW5pZnkgdHJhbnNwaWxlcyBSZWdFeHAoJ2EnLCAneScpIC0+IC9hL3kgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvcixcbi8vIHNvIHdlIHVzZSBhbiBpbnRlcm1lZGlhdGUgZnVuY3Rpb24uXG5mdW5jdGlvbiBSRShzLCBmKSB7XG4gIHJldHVybiBSZWdFeHAocywgZik7XG59XG5cbmV4cG9ydHMuVU5TVVBQT1JURURfWSA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gYmFiZWwtbWluaWZ5IHRyYW5zcGlsZXMgUmVnRXhwKCdhJywgJ3knKSAtPiAvYS95IGFuZCBpdCBjYXVzZXMgU3ludGF4RXJyb3JcbiAgdmFyIHJlID0gUkUoJ2EnLCAneScpO1xuICByZS5sYXN0SW5kZXggPSAyO1xuICByZXR1cm4gcmUuZXhlYygnYWJjZCcpICE9IG51bGw7XG59KTtcblxuZXhwb3J0cy5CUk9LRU5fQ0FSRVQgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTc3MzY4N1xuICB2YXIgcmUgPSBSRSgnXnInLCAnZ3knKTtcbiAgcmUubGFzdEluZGV4ID0gMjtcbiAgcmV0dXJuIHJlLmV4ZWMoJ3N0cicpICE9IG51bGw7XG59KTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCJhMTViXCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oXCIyM2U3XCIpO1xudmFyIEluZGV4ZWRPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiNDRhZFwiKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiZmM2YVwiKTtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImE2NDBcIik7XG5cbnZhciBuYXRpdmVKb2luID0gW10uam9pbjtcblxudmFyIEVTM19TVFJJTkdTID0gSW5kZXhlZE9iamVjdCAhPSBPYmplY3Q7XG52YXIgU1RSSUNUX01FVEhPRCA9IGFycmF5TWV0aG9kSXNTdHJpY3QoJ2pvaW4nLCAnLCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmpvaW5gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmpvaW5cbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEVTM19TVFJJTkdTIHx8ICFTVFJJQ1RfTUVUSE9EIH0sIHtcbiAgam9pbjogZnVuY3Rpb24gam9pbihzZXBhcmF0b3IpIHtcbiAgICByZXR1cm4gbmF0aXZlSm9pbi5jYWxsKHRvSW5kZXhlZE9iamVjdCh0aGlzKSwgc2VwYXJhdG9yID09PSB1bmRlZmluZWQgPyAnLCcgOiBzZXBhcmF0b3IpO1xuICB9XG59KTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCJhNDhiXCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBjYW1lbDJoeXBoZW4gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiMDQ5N1wiKTtcblxudmFyIGlzRGltZW5zaW9uID0gZnVuY3Rpb24gKGZlYXR1cmUpIHtcbiAgdmFyIHJlID0gL1toZWlnaHR8d2lkdGhdJC87XG4gIHJldHVybiByZS50ZXN0KGZlYXR1cmUpO1xufTtcblxudmFyIG9iajJtcSA9IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIG1xID0gJyc7XG4gIHZhciBmZWF0dXJlcyA9IE9iamVjdC5rZXlzKG9iaik7XG4gIGZlYXR1cmVzLmZvckVhY2goZnVuY3Rpb24gKGZlYXR1cmUsIGluZGV4KSB7XG4gICAgdmFyIHZhbHVlID0gb2JqW2ZlYXR1cmVdO1xuICAgIGZlYXR1cmUgPSBjYW1lbDJoeXBoZW4oZmVhdHVyZSk7XG4gICAgLy8gQWRkIHB4IHRvIGRpbWVuc2lvbiBmZWF0dXJlc1xuICAgIGlmIChpc0RpbWVuc2lvbihmZWF0dXJlKSAmJiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlICsgJ3B4JztcbiAgICB9XG4gICAgaWYgKHZhbHVlID09PSB0cnVlKSB7XG4gICAgICBtcSArPSBmZWF0dXJlO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IGZhbHNlKSB7XG4gICAgICBtcSArPSAnbm90ICcgKyBmZWF0dXJlO1xuICAgIH0gZWxzZSB7XG4gICAgICBtcSArPSAnKCcgKyBmZWF0dXJlICsgJzogJyArIHZhbHVlICsgJyknO1xuICAgIH1cbiAgICBpZiAoaW5kZXggPCBmZWF0dXJlcy5sZW5ndGgtMSkge1xuICAgICAgbXEgKz0gJyBhbmQgJ1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBtcTtcbn07XG5cbnZhciBqc29uMm1xID0gZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gIHZhciBtcSA9ICcnO1xuICBpZiAodHlwZW9mIHF1ZXJ5ID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBxdWVyeTtcbiAgfVxuICAvLyBIYW5kbGluZyBhcnJheSBvZiBtZWRpYSBxdWVyaWVzXG4gIGlmIChxdWVyeSBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgcXVlcnkuZm9yRWFjaChmdW5jdGlvbiAocSwgaW5kZXgpIHtcbiAgICAgIG1xICs9IG9iajJtcShxKTtcbiAgICAgIGlmIChpbmRleCA8IHF1ZXJ5Lmxlbmd0aC0xKSB7XG4gICAgICAgIG1xICs9ICcsICdcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gbXE7XG4gIH1cbiAgLy8gSGFuZGxpbmcgc2luZ2xlIG1lZGlhIHF1ZXJ5XG4gIHJldHVybiBvYmoybXEocXVlcnkpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBqc29uMm1xO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gXCJhNGQzXCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oXCIyM2U3XCIpO1xudmFyIGdsb2JhbCA9IF9fd2VicGFja19yZXF1aXJlX18oXCJkYTg0XCIpO1xudmFyIGdldEJ1aWx0SW4gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiZDA2NlwiKTtcbnZhciBJU19QVVJFID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImM0MzBcIik7XG52YXIgREVTQ1JJUFRPUlMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiODNhYlwiKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjQ5MzBcIik7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiZmRiZlwiKTtcbnZhciBmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oXCJkMDM5XCIpO1xudmFyIGhhcyA9IF9fd2VicGFja19yZXF1aXJlX18oXCI1MTM1XCIpO1xudmFyIGlzQXJyYXkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiZThiNVwiKTtcbnZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oXCI4NjFkXCIpO1xudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjgyNWFcIik7XG52YXIgdG9PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiN2IwYlwiKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiZmM2YVwiKTtcbnZhciB0b1ByaW1pdGl2ZSA9IF9fd2VicGFja19yZXF1aXJlX18oXCJjMDRlXCIpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IF9fd2VicGFja19yZXF1aXJlX18oXCI1YzZjXCIpO1xudmFyIG5hdGl2ZU9iamVjdENyZWF0ZSA9IF9fd2VicGFja19yZXF1aXJlX18oXCI3YzczXCIpO1xudmFyIG9iamVjdEtleXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiZGY3NVwiKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjI0MWNcIik7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjA1N2ZcIik7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjc0MThcIik7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjA2Y2ZcIik7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiOWJmMlwiKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IF9fd2VicGFja19yZXF1aXJlX18oXCJkMWU3XCIpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IF9fd2VicGFja19yZXF1aXJlX18oXCI5MTEyXCIpO1xudmFyIHJlZGVmaW5lID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjZlZWJcIik7XG52YXIgc2hhcmVkID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjU2OTJcIik7XG52YXIgc2hhcmVkS2V5ID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImY3NzJcIik7XG52YXIgaGlkZGVuS2V5cyA9IF9fd2VicGFja19yZXF1aXJlX18oXCJkMDEyXCIpO1xudmFyIHVpZCA9IF9fd2VicGFja19yZXF1aXJlX18oXCI5MGUzXCIpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IF9fd2VicGFja19yZXF1aXJlX18oXCJiNjIyXCIpO1xudmFyIHdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiZTUzOFwiKTtcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiNzQ2ZlwiKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IF9fd2VicGFja19yZXF1aXJlX18oXCJkNDRlXCIpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiNjlmM1wiKTtcbnZhciAkZm9yRWFjaCA9IF9fd2VicGFja19yZXF1aXJlX18oXCJiNzI3XCIpLmZvckVhY2g7XG5cbnZhciBISURERU4gPSBzaGFyZWRLZXkoJ2hpZGRlbicpO1xudmFyIFNZTUJPTCA9ICdTeW1ib2wnO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIFRPX1BSSU1JVElWRSA9IHdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKFNZTUJPTCk7XG52YXIgT2JqZWN0UHJvdG90eXBlID0gT2JqZWN0W1BST1RPVFlQRV07XG52YXIgJFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgJHN0cmluZ2lmeSA9IGdldEJ1aWx0SW4oJ0pTT04nLCAnc3RyaW5naWZ5Jyk7XG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG52YXIgbmF0aXZlRGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xudmFyIG5hdGl2ZUdldE93blByb3BlcnR5TmFtZXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWwuZjtcbnZhciBuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmY7XG52YXIgQWxsU3ltYm9scyA9IHNoYXJlZCgnc3ltYm9scycpO1xudmFyIE9iamVjdFByb3RvdHlwZVN5bWJvbHMgPSBzaGFyZWQoJ29wLXN5bWJvbHMnKTtcbnZhciBTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5ID0gc2hhcmVkKCdzdHJpbmctdG8tc3ltYm9sLXJlZ2lzdHJ5Jyk7XG52YXIgU3ltYm9sVG9TdHJpbmdSZWdpc3RyeSA9IHNoYXJlZCgnc3ltYm9sLXRvLXN0cmluZy1yZWdpc3RyeScpO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG52YXIgUU9iamVjdCA9IGdsb2JhbC5RT2JqZWN0O1xuLy8gRG9uJ3QgdXNlIHNldHRlcnMgaW4gUXQgU2NyaXB0LCBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTczXG52YXIgVVNFX1NFVFRFUiA9ICFRT2JqZWN0IHx8ICFRT2JqZWN0W1BST1RPVFlQRV0gfHwgIVFPYmplY3RbUFJPVE9UWVBFXS5maW5kQ2hpbGQ7XG5cbi8vIGZhbGxiYWNrIGZvciBvbGQgQW5kcm9pZCwgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTY4N1xudmFyIHNldFN5bWJvbERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuYXRpdmVPYmplY3RDcmVhdGUobmF0aXZlRGVmaW5lUHJvcGVydHkoe30sICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmF0aXZlRGVmaW5lUHJvcGVydHkodGhpcywgJ2EnLCB7IHZhbHVlOiA3IH0pLmE7IH1cbiAgfSkpLmEgIT0gNztcbn0pID8gZnVuY3Rpb24gKE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgdmFyIE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IgPSBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0UHJvdG90eXBlLCBQKTtcbiAgaWYgKE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IpIGRlbGV0ZSBPYmplY3RQcm90b3R5cGVbUF07XG4gIG5hdGl2ZURlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICBpZiAoT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvciAmJiBPICE9PSBPYmplY3RQcm90b3R5cGUpIHtcbiAgICBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPYmplY3RQcm90b3R5cGUsIFAsIE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IpO1xuICB9XG59IDogbmF0aXZlRGVmaW5lUHJvcGVydHk7XG5cbnZhciB3cmFwID0gZnVuY3Rpb24gKHRhZywgZGVzY3JpcHRpb24pIHtcbiAgdmFyIHN5bWJvbCA9IEFsbFN5bWJvbHNbdGFnXSA9IG5hdGl2ZU9iamVjdENyZWF0ZSgkU3ltYm9sW1BST1RPVFlQRV0pO1xuICBzZXRJbnRlcm5hbFN0YXRlKHN5bWJvbCwge1xuICAgIHR5cGU6IFNZTUJPTCxcbiAgICB0YWc6IHRhZyxcbiAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb25cbiAgfSk7XG4gIGlmICghREVTQ1JJUFRPUlMpIHN5bWJvbC5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICByZXR1cm4gc3ltYm9sO1xufTtcblxudmFyIGlzU3ltYm9sID0gVVNFX1NZTUJPTF9BU19VSUQgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIE9iamVjdChpdCkgaW5zdGFuY2VvZiAkU3ltYm9sO1xufTtcblxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgaWYgKE8gPT09IE9iamVjdFByb3RvdHlwZSkgJGRlZmluZVByb3BlcnR5KE9iamVjdFByb3RvdHlwZVN5bWJvbHMsIFAsIEF0dHJpYnV0ZXMpO1xuICBhbk9iamVjdChPKTtcbiAgdmFyIGtleSA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKGhhcyhBbGxTeW1ib2xzLCBrZXkpKSB7XG4gICAgaWYgKCFBdHRyaWJ1dGVzLmVudW1lcmFibGUpIHtcbiAgICAgIGlmICghaGFzKE8sIEhJRERFTikpIG5hdGl2ZURlZmluZVByb3BlcnR5KE8sIEhJRERFTiwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHt9KSk7XG4gICAgICBPW0hJRERFTl1ba2V5XSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChoYXMoTywgSElEREVOKSAmJiBPW0hJRERFTl1ba2V5XSkgT1tISURERU5dW2tleV0gPSBmYWxzZTtcbiAgICAgIEF0dHJpYnV0ZXMgPSBuYXRpdmVPYmplY3RDcmVhdGUoQXR0cmlidXRlcywgeyBlbnVtZXJhYmxlOiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMCwgZmFsc2UpIH0pO1xuICAgIH0gcmV0dXJuIHNldFN5bWJvbERlc2NyaXB0b3IoTywga2V5LCBBdHRyaWJ1dGVzKTtcbiAgfSByZXR1cm4gbmF0aXZlRGVmaW5lUHJvcGVydHkoTywga2V5LCBBdHRyaWJ1dGVzKTtcbn07XG5cbnZhciAkZGVmaW5lUHJvcGVydGllcyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIHByb3BlcnRpZXMgPSB0b0luZGV4ZWRPYmplY3QoUHJvcGVydGllcyk7XG4gIHZhciBrZXlzID0gb2JqZWN0S2V5cyhwcm9wZXJ0aWVzKS5jb25jYXQoJGdldE93blByb3BlcnR5U3ltYm9scyhwcm9wZXJ0aWVzKSk7XG4gICRmb3JFYWNoKGtleXMsIGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoIURFU0NSSVBUT1JTIHx8ICRwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHByb3BlcnRpZXMsIGtleSkpICRkZWZpbmVQcm9wZXJ0eShPLCBrZXksIHByb3BlcnRpZXNba2V5XSk7XG4gIH0pO1xuICByZXR1cm4gTztcbn07XG5cbnZhciAkY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IG5hdGl2ZU9iamVjdENyZWF0ZShPKSA6ICRkZWZpbmVQcm9wZXJ0aWVzKG5hdGl2ZU9iamVjdENyZWF0ZShPKSwgUHJvcGVydGllcyk7XG59O1xuXG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgUCA9IHRvUHJpbWl0aXZlKFYsIHRydWUpO1xuICB2YXIgZW51bWVyYWJsZSA9IG5hdGl2ZVByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwodGhpcywgUCk7XG4gIGlmICh0aGlzID09PSBPYmplY3RQcm90b3R5cGUgJiYgaGFzKEFsbFN5bWJvbHMsIFApICYmICFoYXMoT2JqZWN0UHJvdG90eXBlU3ltYm9scywgUCkpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIGVudW1lcmFibGUgfHwgIWhhcyh0aGlzLCBQKSB8fCAhaGFzKEFsbFN5bWJvbHMsIFApIHx8IGhhcyh0aGlzLCBISURERU4pICYmIHRoaXNbSElEREVOXVtQXSA/IGVudW1lcmFibGUgOiB0cnVlO1xufTtcblxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICB2YXIgaXQgPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgaWYgKGl0ID09PSBPYmplY3RQcm90b3R5cGUgJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhcyhPYmplY3RQcm90b3R5cGVTeW1ib2xzLCBrZXkpKSByZXR1cm47XG4gIHZhciBkZXNjcmlwdG9yID0gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpO1xuICBpZiAoZGVzY3JpcHRvciAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pKSB7XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZGVzY3JpcHRvcjtcbn07XG5cbnZhciAkZ2V0T3duUHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICB2YXIgbmFtZXMgPSBuYXRpdmVHZXRPd25Qcm9wZXJ0eU5hbWVzKHRvSW5kZXhlZE9iamVjdChPKSk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgJGZvckVhY2gobmFtZXMsIGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoIWhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICFoYXMoaGlkZGVuS2V5cywga2V5KSkgcmVzdWx0LnB1c2goa2V5KTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG52YXIgJGdldE93blByb3BlcnR5U3ltYm9scyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhPKSB7XG4gIHZhciBJU19PQkpFQ1RfUFJPVE9UWVBFID0gTyA9PT0gT2JqZWN0UHJvdG90eXBlO1xuICB2YXIgbmFtZXMgPSBuYXRpdmVHZXRPd25Qcm9wZXJ0eU5hbWVzKElTX09CSkVDVF9QUk9UT1RZUEUgPyBPYmplY3RQcm90b3R5cGVTeW1ib2xzIDogdG9JbmRleGVkT2JqZWN0KE8pKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICAkZm9yRWFjaChuYW1lcywgZnVuY3Rpb24gKGtleSkge1xuICAgIGlmIChoYXMoQWxsU3ltYm9scywga2V5KSAmJiAoIUlTX09CSkVDVF9QUk9UT1RZUEUgfHwgaGFzKE9iamVjdFByb3RvdHlwZSwga2V5KSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKEFsbFN5bWJvbHNba2V5XSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIGBTeW1ib2xgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zeW1ib2wtY29uc3RydWN0b3JcbmlmICghTkFUSVZFX1NZTUJPTCkge1xuICAkU3ltYm9sID0gZnVuY3Rpb24gU3ltYm9sKCkge1xuICAgIGlmICh0aGlzIGluc3RhbmNlb2YgJFN5bWJvbCkgdGhyb3cgVHlwZUVycm9yKCdTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3InKTtcbiAgICB2YXIgZGVzY3JpcHRpb24gPSAhYXJndW1lbnRzLmxlbmd0aCB8fCBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IFN0cmluZyhhcmd1bWVudHNbMF0pO1xuICAgIHZhciB0YWcgPSB1aWQoZGVzY3JpcHRpb24pO1xuICAgIHZhciBzZXR0ZXIgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmICh0aGlzID09PSBPYmplY3RQcm90b3R5cGUpIHNldHRlci5jYWxsKE9iamVjdFByb3RvdHlwZVN5bWJvbHMsIHZhbHVlKTtcbiAgICAgIGlmIChoYXModGhpcywgSElEREVOKSAmJiBoYXModGhpc1tISURERU5dLCB0YWcpKSB0aGlzW0hJRERFTl1bdGFnXSA9IGZhbHNlO1xuICAgICAgc2V0U3ltYm9sRGVzY3JpcHRvcih0aGlzLCB0YWcsIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSkpO1xuICAgIH07XG4gICAgaWYgKERFU0NSSVBUT1JTICYmIFVTRV9TRVRURVIpIHNldFN5bWJvbERlc2NyaXB0b3IoT2JqZWN0UHJvdG90eXBlLCB0YWcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCBzZXQ6IHNldHRlciB9KTtcbiAgICByZXR1cm4gd3JhcCh0YWcsIGRlc2NyaXB0aW9uKTtcbiAgfTtcblxuICByZWRlZmluZSgkU3ltYm9sW1BST1RPVFlQRV0sICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnRhZztcbiAgfSk7XG5cbiAgcmVkZWZpbmUoJFN5bWJvbCwgJ3dpdGhvdXRTZXR0ZXInLCBmdW5jdGlvbiAoZGVzY3JpcHRpb24pIHtcbiAgICByZXR1cm4gd3JhcCh1aWQoZGVzY3JpcHRpb24pLCBkZXNjcmlwdGlvbik7XG4gIH0pO1xuXG4gIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmYgPSAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4gIGRlZmluZVByb3BlcnR5TW9kdWxlLmYgPSAkZGVmaW5lUHJvcGVydHk7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbiAgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mID0gZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsLmYgPSAkZ2V0T3duUHJvcGVydHlOYW1lcztcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmYgPSAkZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG4gIHdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUuZiA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgcmV0dXJuIHdyYXAod2VsbEtub3duU3ltYm9sKG5hbWUpLCBuYW1lKTtcbiAgfTtcblxuICBpZiAoREVTQ1JJUFRPUlMpIHtcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1TeW1ib2wtZGVzY3JpcHRpb25cbiAgICBuYXRpdmVEZWZpbmVQcm9wZXJ0eSgkU3ltYm9sW1BST1RPVFlQRV0sICdkZXNjcmlwdGlvbicsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gZGVzY3JpcHRpb24oKSB7XG4gICAgICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLmRlc2NyaXB0aW9uO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghSVNfUFVSRSkge1xuICAgICAgcmVkZWZpbmUoT2JqZWN0UHJvdG90eXBlLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAkcHJvcGVydHlJc0VudW1lcmFibGUsIHsgdW5zYWZlOiB0cnVlIH0pO1xuICAgIH1cbiAgfVxufVxuXG4kKHsgZ2xvYmFsOiB0cnVlLCB3cmFwOiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MLCBzaGFtOiAhTkFUSVZFX1NZTUJPTCB9LCB7XG4gIFN5bWJvbDogJFN5bWJvbFxufSk7XG5cbiRmb3JFYWNoKG9iamVjdEtleXMoV2VsbEtub3duU3ltYm9sc1N0b3JlKSwgZnVuY3Rpb24gKG5hbWUpIHtcbiAgZGVmaW5lV2VsbEtub3duU3ltYm9sKG5hbWUpO1xufSk7XG5cbiQoeyB0YXJnZXQ6IFNZTUJPTCwgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTCB9LCB7XG4gIC8vIGBTeW1ib2wuZm9yYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3ltYm9sLmZvclxuICAnZm9yJzogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBzdHJpbmcgPSBTdHJpbmcoa2V5KTtcbiAgICBpZiAoaGFzKFN0cmluZ1RvU3ltYm9sUmVnaXN0cnksIHN0cmluZykpIHJldHVybiBTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5W3N0cmluZ107XG4gICAgdmFyIHN5bWJvbCA9ICRTeW1ib2woc3RyaW5nKTtcbiAgICBTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5W3N0cmluZ10gPSBzeW1ib2w7XG4gICAgU3ltYm9sVG9TdHJpbmdSZWdpc3RyeVtzeW1ib2xdID0gc3RyaW5nO1xuICAgIHJldHVybiBzeW1ib2w7XG4gIH0sXG4gIC8vIGBTeW1ib2wua2V5Rm9yYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3ltYm9sLmtleWZvclxuICBrZXlGb3I6IGZ1bmN0aW9uIGtleUZvcihzeW0pIHtcbiAgICBpZiAoIWlzU3ltYm9sKHN5bSkpIHRocm93IFR5cGVFcnJvcihzeW0gKyAnIGlzIG5vdCBhIHN5bWJvbCcpO1xuICAgIGlmIChoYXMoU3ltYm9sVG9TdHJpbmdSZWdpc3RyeSwgc3ltKSkgcmV0dXJuIFN5bWJvbFRvU3RyaW5nUmVnaXN0cnlbc3ltXTtcbiAgfSxcbiAgdXNlU2V0dGVyOiBmdW5jdGlvbiAoKSB7IFVTRV9TRVRURVIgPSB0cnVlOyB9LFxuICB1c2VTaW1wbGU6IGZ1bmN0aW9uICgpIHsgVVNFX1NFVFRFUiA9IGZhbHNlOyB9XG59KTtcblxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0wsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIC8vIGBPYmplY3QuY3JlYXRlYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmNyZWF0ZVxuICBjcmVhdGU6ICRjcmVhdGUsXG4gIC8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbiAgZGVmaW5lUHJvcGVydHk6ICRkZWZpbmVQcm9wZXJ0eSxcbiAgLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnRpZXNcbiAgZGVmaW5lUHJvcGVydGllczogJGRlZmluZVByb3BlcnRpZXMsXG4gIC8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvcnNcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yXG59KTtcblxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0wgfSwge1xuICAvLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHluYW1lc1xuICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiAkZ2V0T3duUHJvcGVydHlOYW1lcyxcbiAgLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlzeW1ib2xzXG4gIGdldE93blByb3BlcnR5U3ltYm9sczogJGdldE93blByb3BlcnR5U3ltYm9sc1xufSk7XG5cbi8vIENocm9tZSAzOCBhbmQgMzkgYE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHNgIGZhaWxzIG9uIHByaW1pdGl2ZXNcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTM0NDNcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IGZhaWxzKGZ1bmN0aW9uICgpIHsgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmYoMSk7IH0pIH0sIHtcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpIHtcbiAgICByZXR1cm4gZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmYodG9PYmplY3QoaXQpKTtcbiAgfVxufSk7XG5cbi8vIGBKU09OLnN0cmluZ2lmeWAgbWV0aG9kIGJlaGF2aW9yIHdpdGggc3ltYm9sc1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtanNvbi5zdHJpbmdpZnlcbmlmICgkc3RyaW5naWZ5KSB7XG4gIHZhciBGT1JDRURfSlNPTl9TVFJJTkdJRlkgPSAhTkFUSVZFX1NZTUJPTCB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHN5bWJvbCA9ICRTeW1ib2woKTtcbiAgICAvLyBNUyBFZGdlIGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyB7fVxuICAgIHJldHVybiAkc3RyaW5naWZ5KFtzeW1ib2xdKSAhPSAnW251bGxdJ1xuICAgICAgLy8gV2ViS2l0IGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyBudWxsXG4gICAgICB8fCAkc3RyaW5naWZ5KHsgYTogc3ltYm9sIH0pICE9ICd7fSdcbiAgICAgIC8vIFY4IHRocm93cyBvbiBib3hlZCBzeW1ib2xzXG4gICAgICB8fCAkc3RyaW5naWZ5KE9iamVjdChzeW1ib2wpKSAhPSAne30nO1xuICB9KTtcblxuICAkKHsgdGFyZ2V0OiAnSlNPTicsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VEX0pTT05fU1RSSU5HSUZZIH0sIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uIHN0cmluZ2lmeShpdCwgcmVwbGFjZXIsIHNwYWNlKSB7XG4gICAgICB2YXIgYXJncyA9IFtpdF07XG4gICAgICB2YXIgaW5kZXggPSAxO1xuICAgICAgdmFyICRyZXBsYWNlcjtcbiAgICAgIHdoaWxlIChhcmd1bWVudHMubGVuZ3RoID4gaW5kZXgpIGFyZ3MucHVzaChhcmd1bWVudHNbaW5kZXgrK10pO1xuICAgICAgJHJlcGxhY2VyID0gcmVwbGFjZXI7XG4gICAgICBpZiAoIWlzT2JqZWN0KHJlcGxhY2VyKSAmJiBpdCA9PT0gdW5kZWZpbmVkIHx8IGlzU3ltYm9sKGl0KSkgcmV0dXJuOyAvLyBJRTggcmV0dXJucyBzdHJpbmcgb24gdW5kZWZpbmVkXG4gICAgICBpZiAoIWlzQXJyYXkocmVwbGFjZXIpKSByZXBsYWNlciA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgJHJlcGxhY2VyID09ICdmdW5jdGlvbicpIHZhbHVlID0gJHJlcGxhY2VyLmNhbGwodGhpcywga2V5LCB2YWx1ZSk7XG4gICAgICAgIGlmICghaXNTeW1ib2wodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gICAgICB9O1xuICAgICAgYXJnc1sxXSA9IHJlcGxhY2VyO1xuICAgICAgcmV0dXJuICRzdHJpbmdpZnkuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgfVxuICB9KTtcbn1cblxuLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS1AQHRvcHJpbWl0aXZlXG5pZiAoISRTeW1ib2xbUFJPVE9UWVBFXVtUT19QUklNSVRJVkVdKSB7XG4gIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSgkU3ltYm9sW1BST1RPVFlQRV0sIFRPX1BSSU1JVElWRSwgJFN5bWJvbFtQUk9UT1RZUEVdLnZhbHVlT2YpO1xufVxuLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ11gIHByb3BlcnR5XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9zdHJpbmd0YWdcbnNldFRvU3RyaW5nVGFnKCRTeW1ib2wsIFNZTUJPTCk7XG5cbmhpZGRlbktleXNbSElEREVOXSA9IHRydWU7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiYTYyM1wiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyICQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiMjNlN1wiKTtcbnZhciAkZXZlcnkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiYjcyN1wiKS5ldmVyeTtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImE2NDBcIik7XG52YXIgYXJyYXlNZXRob2RVc2VzVG9MZW5ndGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiYWU0MFwiKTtcblxudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdldmVyeScpO1xudmFyIFVTRVNfVE9fTEVOR1RIID0gYXJyYXlNZXRob2RVc2VzVG9MZW5ndGgoJ2V2ZXJ5Jyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZXZlcnlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmV2ZXJ5XG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhU1RSSUNUX01FVEhPRCB8fCAhVVNFU19UT19MRU5HVEggfSwge1xuICBldmVyeTogZnVuY3Rpb24gZXZlcnkoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGV2ZXJ5KHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiYTYzMFwiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oXCIyM2U3XCIpO1xudmFyIGZyb20gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiNGRmNFwiKTtcbnZhciBjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiMWM3ZVwiKTtcblxudmFyIElOQ09SUkVDVF9JVEVSQVRJT04gPSAhY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uKGZ1bmN0aW9uIChpdGVyYWJsZSkge1xuICBBcnJheS5mcm9tKGl0ZXJhYmxlKTtcbn0pO1xuXG4vLyBgQXJyYXkuZnJvbWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5mcm9tXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IElOQ09SUkVDVF9JVEVSQVRJT04gfSwge1xuICBmcm9tOiBmcm9tXG59KTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCJhNjQwXCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgZmFpbHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiZDAzOVwiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUsIGFyZ3VtZW50KSB7XG4gIHZhciBtZXRob2QgPSBbXVtNRVRIT0RfTkFNRV07XG4gIHJldHVybiAhIW1ldGhvZCAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY2FsbCxuby10aHJvdy1saXRlcmFsXG4gICAgbWV0aG9kLmNhbGwobnVsbCwgYXJndW1lbnQgfHwgZnVuY3Rpb24gKCkgeyB0aHJvdyAxOyB9LCAxKTtcbiAgfSk7XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcImE2OTFcIjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBgVG9JbnRlZ2VyYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXRvaW50ZWdlclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGlzTmFOKGFyZ3VtZW50ID0gK2FyZ3VtZW50KSA/IDAgOiAoYXJndW1lbnQgPiAwID8gZmxvb3IgOiBjZWlsKShhcmd1bWVudCk7XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcImE5ZTNcIjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBERVNDUklQVE9SUyA9IF9fd2VicGFja19yZXF1aXJlX18oXCI4M2FiXCIpO1xudmFyIGdsb2JhbCA9IF9fd2VicGFja19yZXF1aXJlX18oXCJkYTg0XCIpO1xudmFyIGlzRm9yY2VkID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjk0Y2FcIik7XG52YXIgcmVkZWZpbmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiNmVlYlwiKTtcbnZhciBoYXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiNTEzNVwiKTtcbnZhciBjbGFzc29mID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImM2YjZcIik7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiNzE1NlwiKTtcbnZhciB0b1ByaW1pdGl2ZSA9IF9fd2VicGFja19yZXF1aXJlX18oXCJjMDRlXCIpO1xudmFyIGZhaWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImQwMzlcIik7XG52YXIgY3JlYXRlID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjdjNzNcIik7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lcyA9IF9fd2VicGFja19yZXF1aXJlX18oXCIyNDFjXCIpLmY7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjA2Y2ZcIikuZjtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IF9fd2VicGFja19yZXF1aXJlX18oXCI5YmYyXCIpLmY7XG52YXIgdHJpbSA9IF9fd2VicGFja19yZXF1aXJlX18oXCI1OGE4XCIpLnRyaW07XG5cbnZhciBOVU1CRVIgPSAnTnVtYmVyJztcbnZhciBOYXRpdmVOdW1iZXIgPSBnbG9iYWxbTlVNQkVSXTtcbnZhciBOdW1iZXJQcm90b3R5cGUgPSBOYXRpdmVOdW1iZXIucHJvdG90eXBlO1xuXG4vLyBPcGVyYSB+MTIgaGFzIGJyb2tlbiBPYmplY3QjdG9TdHJpbmdcbnZhciBCUk9LRU5fQ0xBU1NPRiA9IGNsYXNzb2YoY3JlYXRlKE51bWJlclByb3RvdHlwZSkpID09IE5VTUJFUjtcblxuLy8gYFRvTnVtYmVyYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXRvbnVtYmVyXG52YXIgdG9OdW1iZXIgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGl0ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsIGZhbHNlKTtcbiAgdmFyIGZpcnN0LCB0aGlyZCwgcmFkaXgsIG1heENvZGUsIGRpZ2l0cywgbGVuZ3RoLCBpbmRleCwgY29kZTtcbiAgaWYgKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyAmJiBpdC5sZW5ndGggPiAyKSB7XG4gICAgaXQgPSB0cmltKGl0KTtcbiAgICBmaXJzdCA9IGl0LmNoYXJDb2RlQXQoMCk7XG4gICAgaWYgKGZpcnN0ID09PSA0MyB8fCBmaXJzdCA9PT0gNDUpIHtcbiAgICAgIHRoaXJkID0gaXQuY2hhckNvZGVBdCgyKTtcbiAgICAgIGlmICh0aGlyZCA9PT0gODggfHwgdGhpcmQgPT09IDEyMCkgcmV0dXJuIE5hTjsgLy8gTnVtYmVyKCcrMHgxJykgc2hvdWxkIGJlIE5hTiwgb2xkIFY4IGZpeFxuICAgIH0gZWxzZSBpZiAoZmlyc3QgPT09IDQ4KSB7XG4gICAgICBzd2l0Y2ggKGl0LmNoYXJDb2RlQXQoMSkpIHtcbiAgICAgICAgY2FzZSA2NjogY2FzZSA5ODogcmFkaXggPSAyOyBtYXhDb2RlID0gNDk7IGJyZWFrOyAvLyBmYXN0IGVxdWFsIG9mIC9eMGJbMDFdKyQvaVxuICAgICAgICBjYXNlIDc5OiBjYXNlIDExMTogcmFkaXggPSA4OyBtYXhDb2RlID0gNTU7IGJyZWFrOyAvLyBmYXN0IGVxdWFsIG9mIC9eMG9bMC03XSskL2lcbiAgICAgICAgZGVmYXVsdDogcmV0dXJuICtpdDtcbiAgICAgIH1cbiAgICAgIGRpZ2l0cyA9IGl0LnNsaWNlKDIpO1xuICAgICAgbGVuZ3RoID0gZGlnaXRzLmxlbmd0aDtcbiAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICBjb2RlID0gZGlnaXRzLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICAvLyBwYXJzZUludCBwYXJzZXMgYSBzdHJpbmcgdG8gYSBmaXJzdCB1bmF2YWlsYWJsZSBzeW1ib2xcbiAgICAgICAgLy8gYnV0IFRvTnVtYmVyIHNob3VsZCByZXR1cm4gTmFOIGlmIGEgc3RyaW5nIGNvbnRhaW5zIHVuYXZhaWxhYmxlIHN5bWJvbHNcbiAgICAgICAgaWYgKGNvZGUgPCA0OCB8fCBjb2RlID4gbWF4Q29kZSkgcmV0dXJuIE5hTjtcbiAgICAgIH0gcmV0dXJuIHBhcnNlSW50KGRpZ2l0cywgcmFkaXgpO1xuICAgIH1cbiAgfSByZXR1cm4gK2l0O1xufTtcblxuLy8gYE51bWJlcmAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW51bWJlci1jb25zdHJ1Y3RvclxuaWYgKGlzRm9yY2VkKE5VTUJFUiwgIU5hdGl2ZU51bWJlcignIDBvMScpIHx8ICFOYXRpdmVOdW1iZXIoJzBiMScpIHx8IE5hdGl2ZU51bWJlcignKzB4MScpKSkge1xuICB2YXIgTnVtYmVyV3JhcHBlciA9IGZ1bmN0aW9uIE51bWJlcih2YWx1ZSkge1xuICAgIHZhciBpdCA9IGFyZ3VtZW50cy5sZW5ndGggPCAxID8gMCA6IHZhbHVlO1xuICAgIHZhciBkdW1teSA9IHRoaXM7XG4gICAgcmV0dXJuIGR1bW15IGluc3RhbmNlb2YgTnVtYmVyV3JhcHBlclxuICAgICAgLy8gY2hlY2sgb24gMS4uY29uc3RydWN0b3IoZm9vKSBjYXNlXG4gICAgICAmJiAoQlJPS0VOX0NMQVNTT0YgPyBmYWlscyhmdW5jdGlvbiAoKSB7IE51bWJlclByb3RvdHlwZS52YWx1ZU9mLmNhbGwoZHVtbXkpOyB9KSA6IGNsYXNzb2YoZHVtbXkpICE9IE5VTUJFUilcbiAgICAgICAgPyBpbmhlcml0SWZSZXF1aXJlZChuZXcgTmF0aXZlTnVtYmVyKHRvTnVtYmVyKGl0KSksIGR1bW15LCBOdW1iZXJXcmFwcGVyKSA6IHRvTnVtYmVyKGl0KTtcbiAgfTtcbiAgZm9yICh2YXIga2V5cyA9IERFU0NSSVBUT1JTID8gZ2V0T3duUHJvcGVydHlOYW1lcyhOYXRpdmVOdW1iZXIpIDogKFxuICAgIC8vIEVTMzpcbiAgICAnTUFYX1ZBTFVFLE1JTl9WQUxVRSxOYU4sTkVHQVRJVkVfSU5GSU5JVFksUE9TSVRJVkVfSU5GSU5JVFksJyArXG4gICAgLy8gRVMyMDE1IChpbiBjYXNlLCBpZiBtb2R1bGVzIHdpdGggRVMyMDE1IE51bWJlciBzdGF0aWNzIHJlcXVpcmVkIGJlZm9yZSk6XG4gICAgJ0VQU0lMT04saXNGaW5pdGUsaXNJbnRlZ2VyLGlzTmFOLGlzU2FmZUludGVnZXIsTUFYX1NBRkVfSU5URUdFUiwnICtcbiAgICAnTUlOX1NBRkVfSU5URUdFUixwYXJzZUZsb2F0LHBhcnNlSW50LGlzSW50ZWdlcidcbiAgKS5zcGxpdCgnLCcpLCBqID0gMCwga2V5OyBrZXlzLmxlbmd0aCA+IGo7IGorKykge1xuICAgIGlmIChoYXMoTmF0aXZlTnVtYmVyLCBrZXkgPSBrZXlzW2pdKSAmJiAhaGFzKE51bWJlcldyYXBwZXIsIGtleSkpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KE51bWJlcldyYXBwZXIsIGtleSwgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE5hdGl2ZU51bWJlciwga2V5KSk7XG4gICAgfVxuICB9XG4gIE51bWJlcldyYXBwZXIucHJvdG90eXBlID0gTnVtYmVyUHJvdG90eXBlO1xuICBOdW1iZXJQcm90b3R5cGUuY29uc3RydWN0b3IgPSBOdW1iZXJXcmFwcGVyO1xuICByZWRlZmluZShnbG9iYWwsIE5VTUJFUiwgTnVtYmVyV3JhcHBlcik7XG59XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiYWMxZlwiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyICQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiMjNlN1wiKTtcbnZhciBleGVjID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjkyNjNcIik7XG5cbiQoeyB0YXJnZXQ6ICdSZWdFeHAnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAvLi8uZXhlYyAhPT0gZXhlYyB9LCB7XG4gIGV4ZWM6IGV4ZWNcbn0pO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcImFkNmRcIjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBhbk9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oXCI4MjVhXCIpO1xuXG4vLyBgUmVnRXhwLnByb3RvdHlwZS5mbGFnc2AgZ2V0dGVyIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1nZXQtcmVnZXhwLnByb3RvdHlwZS5mbGFnc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB0aGF0ID0gYW5PYmplY3QodGhpcyk7XG4gIHZhciByZXN1bHQgPSAnJztcbiAgaWYgKHRoYXQuZ2xvYmFsKSByZXN1bHQgKz0gJ2cnO1xuICBpZiAodGhhdC5pZ25vcmVDYXNlKSByZXN1bHQgKz0gJ2knO1xuICBpZiAodGhhdC5tdWx0aWxpbmUpIHJlc3VsdCArPSAnbSc7XG4gIGlmICh0aGF0LmRvdEFsbCkgcmVzdWx0ICs9ICdzJztcbiAgaWYgKHRoYXQudW5pY29kZSkgcmVzdWx0ICs9ICd1JztcbiAgaWYgKHRoYXQuc3RpY2t5KSByZXN1bHQgKz0gJ3knO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCJhZTQwXCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBERVNDUklQVE9SUyA9IF9fd2VicGFja19yZXF1aXJlX18oXCI4M2FiXCIpO1xudmFyIGZhaWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImQwMzlcIik7XG52YXIgaGFzID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjUxMzVcIik7XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBjYWNoZSA9IHt9O1xuXG52YXIgdGhyb3dlciA9IGZ1bmN0aW9uIChpdCkgeyB0aHJvdyBpdDsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUsIG9wdGlvbnMpIHtcbiAgaWYgKGhhcyhjYWNoZSwgTUVUSE9EX05BTUUpKSByZXR1cm4gY2FjaGVbTUVUSE9EX05BTUVdO1xuICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcbiAgdmFyIG1ldGhvZCA9IFtdW01FVEhPRF9OQU1FXTtcbiAgdmFyIEFDQ0VTU09SUyA9IGhhcyhvcHRpb25zLCAnQUNDRVNTT1JTJykgPyBvcHRpb25zLkFDQ0VTU09SUyA6IGZhbHNlO1xuICB2YXIgYXJndW1lbnQwID0gaGFzKG9wdGlvbnMsIDApID8gb3B0aW9uc1swXSA6IHRocm93ZXI7XG4gIHZhciBhcmd1bWVudDEgPSBoYXMob3B0aW9ucywgMSkgPyBvcHRpb25zWzFdIDogdW5kZWZpbmVkO1xuXG4gIHJldHVybiBjYWNoZVtNRVRIT0RfTkFNRV0gPSAhIW1ldGhvZCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIGlmIChBQ0NFU1NPUlMgJiYgIURFU0NSSVBUT1JTKSByZXR1cm4gdHJ1ZTtcbiAgICB2YXIgTyA9IHsgbGVuZ3RoOiAtMSB9O1xuXG4gICAgaWYgKEFDQ0VTU09SUykgZGVmaW5lUHJvcGVydHkoTywgMSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IHRocm93ZXIgfSk7XG4gICAgZWxzZSBPWzFdID0gMTtcblxuICAgIG1ldGhvZC5jYWxsKE8sIGFyZ3VtZW50MCwgYXJndW1lbnQxKTtcbiAgfSk7XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcImFlOTNcIjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBnZXRQcm90b3R5cGVPZiA9IF9fd2VicGFja19yZXF1aXJlX18oXCJlMTYzXCIpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IF9fd2VicGFja19yZXF1aXJlX18oXCI5MTEyXCIpO1xudmFyIGhhcyA9IF9fd2VicGFja19yZXF1aXJlX18oXCI1MTM1XCIpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IF9fd2VicGFja19yZXF1aXJlX18oXCJiNjIyXCIpO1xudmFyIElTX1BVUkUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiYzQzMFwiKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSBmYWxzZTtcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG4vLyBgJUl0ZXJhdG9yUHJvdG90eXBlJWAgb2JqZWN0XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy0laXRlcmF0b3Jwcm90b3R5cGUlLW9iamVjdFxudmFyIEl0ZXJhdG9yUHJvdG90eXBlLCBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUsIGFycmF5SXRlcmF0b3I7XG5cbmlmIChbXS5rZXlzKSB7XG4gIGFycmF5SXRlcmF0b3IgPSBbXS5rZXlzKCk7XG4gIC8vIFNhZmFyaSA4IGhhcyBidWdneSBpdGVyYXRvcnMgdy9vIGBuZXh0YFxuICBpZiAoISgnbmV4dCcgaW4gYXJyYXlJdGVyYXRvcikpIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSB0cnVlO1xuICBlbHNlIHtcbiAgICBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZihnZXRQcm90b3R5cGVPZihhcnJheUl0ZXJhdG9yKSk7XG4gICAgaWYgKFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSkgSXRlcmF0b3JQcm90b3R5cGUgPSBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cbn1cblxuaWYgKEl0ZXJhdG9yUHJvdG90eXBlID09IHVuZGVmaW5lZCkgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcblxuLy8gMjUuMS4yLjEuMSAlSXRlcmF0b3JQcm90b3R5cGUlW0BAaXRlcmF0b3JdKClcbmlmICghSVNfUFVSRSAmJiAhaGFzKEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUikpIHtcbiAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgcmV0dXJuVGhpcyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBJdGVyYXRvclByb3RvdHlwZTogSXRlcmF0b3JQcm90b3R5cGUsXG4gIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlM6IEJVR0dZX1NBRkFSSV9JVEVSQVRPUlNcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiYjA0MVwiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IF9fd2VicGFja19yZXF1aXJlX18oXCIwMGVlXCIpO1xudmFyIGNsYXNzb2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiZjVkZlwiKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPyB7fS50b1N0cmluZyA6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gJ1tvYmplY3QgJyArIGNsYXNzb2YodGhpcykgKyAnXSc7XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcImIwYzBcIjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIERFU0NSSVBUT1JTID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjgzYWJcIik7XG52YXIgZGVmaW5lUHJvcGVydHkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiOWJmMlwiKS5mO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgRnVuY3Rpb25Qcm90b3R5cGVUb1N0cmluZyA9IEZ1bmN0aW9uUHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIG5hbWVSRSA9IC9eXFxzKmZ1bmN0aW9uIChbXiAoXSopLztcbnZhciBOQU1FID0gJ25hbWUnO1xuXG4vLyBGdW5jdGlvbiBpbnN0YW5jZXMgYC5uYW1lYCBwcm9wZXJ0eVxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZnVuY3Rpb24taW5zdGFuY2VzLW5hbWVcbmlmIChERVNDUklQVE9SUyAmJiAhKE5BTUUgaW4gRnVuY3Rpb25Qcm90b3R5cGUpKSB7XG4gIGRlZmluZVByb3BlcnR5KEZ1bmN0aW9uUHJvdG90eXBlLCBOQU1FLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEZ1bmN0aW9uUHJvdG90eXBlVG9TdHJpbmcuY2FsbCh0aGlzKS5tYXRjaChuYW1lUkUpWzFdO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiYjYyMlwiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImRhODRcIik7XG52YXIgc2hhcmVkID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjU2OTJcIik7XG52YXIgaGFzID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjUxMzVcIik7XG52YXIgdWlkID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjkwZTNcIik7XG52YXIgTkFUSVZFX1NZTUJPTCA9IF9fd2VicGFja19yZXF1aXJlX18oXCI0OTMwXCIpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImZkYmZcIik7XG5cbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xudmFyIFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgY3JlYXRlV2VsbEtub3duU3ltYm9sID0gVVNFX1NZTUJPTF9BU19VSUQgPyBTeW1ib2wgOiBTeW1ib2wgJiYgU3ltYm9sLndpdGhvdXRTZXR0ZXIgfHwgdWlkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIGlmICghaGFzKFdlbGxLbm93blN5bWJvbHNTdG9yZSwgbmFtZSkpIHtcbiAgICBpZiAoTkFUSVZFX1NZTUJPTCAmJiBoYXMoU3ltYm9sLCBuYW1lKSkgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gU3ltYm9sW25hbWVdO1xuICAgIGVsc2UgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gY3JlYXRlV2VsbEtub3duU3ltYm9sKCdTeW1ib2wuJyArIG5hbWUpO1xuICB9IHJldHVybiBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV07XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcImI2NGJcIjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyICQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiMjNlN1wiKTtcbnZhciB0b09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oXCI3YjBiXCIpO1xudmFyIG5hdGl2ZUtleXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiZGY3NVwiKTtcbnZhciBmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oXCJkMDM5XCIpO1xuXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlS2V5cygxKTsgfSk7XG5cbi8vIGBPYmplY3Qua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3Qua2V5c1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRkFJTFNfT05fUFJJTUlUSVZFUyB9LCB7XG4gIGtleXM6IGZ1bmN0aW9uIGtleXMoaXQpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5cyh0b09iamVjdChpdCkpO1xuICB9XG59KTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCJiNzI3XCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBiaW5kID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjAzNjZcIik7XG52YXIgSW5kZXhlZE9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oXCI0NGFkXCIpO1xudmFyIHRvT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjdiMGJcIik7XG52YXIgdG9MZW5ndGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiNTBjNFwiKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiNjVmMFwiKTtcblxudmFyIHB1c2ggPSBbXS5wdXNoO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgZm9yRWFjaCwgbWFwLCBmaWx0ZXIsIHNvbWUsIGV2ZXJ5LCBmaW5kLCBmaW5kSW5kZXggfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHZhciBJU19NQVAgPSBUWVBFID09IDE7XG4gIHZhciBJU19GSUxURVIgPSBUWVBFID09IDI7XG4gIHZhciBJU19TT01FID0gVFlQRSA9PSAzO1xuICB2YXIgSVNfRVZFUlkgPSBUWVBFID09IDQ7XG4gIHZhciBJU19GSU5EX0lOREVYID0gVFlQRSA9PSA2O1xuICB2YXIgTk9fSE9MRVMgPSBUWVBFID09IDUgfHwgSVNfRklORF9JTkRFWDtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgY2FsbGJhY2tmbiwgdGhhdCwgc3BlY2lmaWNDcmVhdGUpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgc2VsZiA9IEluZGV4ZWRPYmplY3QoTyk7XG4gICAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGNhbGxiYWNrZm4sIHRoYXQsIDMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChzZWxmLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgY3JlYXRlID0gc3BlY2lmaWNDcmVhdGUgfHwgYXJyYXlTcGVjaWVzQ3JlYXRlO1xuICAgIHZhciB0YXJnZXQgPSBJU19NQVAgPyBjcmVhdGUoJHRoaXMsIGxlbmd0aCkgOiBJU19GSUxURVIgPyBjcmVhdGUoJHRoaXMsIDApIDogdW5kZWZpbmVkO1xuICAgIHZhciB2YWx1ZSwgcmVzdWx0O1xuICAgIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoTk9fSE9MRVMgfHwgaW5kZXggaW4gc2VsZikge1xuICAgICAgdmFsdWUgPSBzZWxmW2luZGV4XTtcbiAgICAgIHJlc3VsdCA9IGJvdW5kRnVuY3Rpb24odmFsdWUsIGluZGV4LCBPKTtcbiAgICAgIGlmIChUWVBFKSB7XG4gICAgICAgIGlmIChJU19NQVApIHRhcmdldFtpbmRleF0gPSByZXN1bHQ7IC8vIG1hcFxuICAgICAgICBlbHNlIGlmIChyZXN1bHQpIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIHRydWU7ICAgICAgICAgICAgICAvLyBzb21lXG4gICAgICAgICAgY2FzZSA1OiByZXR1cm4gdmFsdWU7ICAgICAgICAgICAgIC8vIGZpbmRcbiAgICAgICAgICBjYXNlIDY6IHJldHVybiBpbmRleDsgICAgICAgICAgICAgLy8gZmluZEluZGV4XG4gICAgICAgICAgY2FzZSAyOiBwdXNoLmNhbGwodGFyZ2V0LCB2YWx1ZSk7IC8vIGZpbHRlclxuICAgICAgICB9IGVsc2UgaWYgKElTX0VWRVJZKSByZXR1cm4gZmFsc2U7ICAvLyBldmVyeVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gSVNfRklORF9JTkRFWCA/IC0xIDogSVNfU09NRSB8fCBJU19FVkVSWSA/IElTX0VWRVJZIDogdGFyZ2V0O1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG4gIGZvckVhY2g6IGNyZWF0ZU1ldGhvZCgwKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5tYXBgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUubWFwXG4gIG1hcDogY3JlYXRlTWV0aG9kKDEpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlcmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWx0ZXJcbiAgZmlsdGVyOiBjcmVhdGVNZXRob2QoMiksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuc29tZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zb21lXG4gIHNvbWU6IGNyZWF0ZU1ldGhvZCgzKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5ldmVyeWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5ldmVyeVxuICBldmVyeTogY3JlYXRlTWV0aG9kKDQpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbmRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZFxuICBmaW5kOiBjcmVhdGVNZXRob2QoNSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmluZEluZGV4YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbmRJbmRleFxuICBmaW5kSW5kZXg6IGNyZWF0ZU1ldGhvZCg2KVxufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCJiY2Y3XCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBRdWVyeUhhbmRsZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiOTAyMFwiKTtcbnZhciBlYWNoID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjIxN2RcIikuZWFjaDtcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgc2luZ2xlIG1lZGlhIHF1ZXJ5LCBtYW5hZ2VzIGl0J3Mgc3RhdGUgYW5kIHJlZ2lzdGVyZWQgaGFuZGxlcnMgZm9yIHRoaXMgcXVlcnlcbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7c3RyaW5nfSBxdWVyeSB0aGUgbWVkaWEgcXVlcnkgc3RyaW5nXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc1VuY29uZGl0aW9uYWw9ZmFsc2VdIHdoZXRoZXIgdGhlIG1lZGlhIHF1ZXJ5IHNob3VsZCBydW4gcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBjb25kaXRpb25zIGFyZSBtZXQuIFByaW1hcmlseSBmb3IgaGVscGluZyBvbGRlciBicm93c2VycyBkZWFsIHdpdGggbW9iaWxlLWZpcnN0IGRlc2lnblxuICovXG5mdW5jdGlvbiBNZWRpYVF1ZXJ5KHF1ZXJ5LCBpc1VuY29uZGl0aW9uYWwpIHtcbiAgICB0aGlzLnF1ZXJ5ID0gcXVlcnk7XG4gICAgdGhpcy5pc1VuY29uZGl0aW9uYWwgPSBpc1VuY29uZGl0aW9uYWw7XG4gICAgdGhpcy5oYW5kbGVycyA9IFtdO1xuICAgIHRoaXMubXFsID0gd2luZG93Lm1hdGNoTWVkaWEocXVlcnkpO1xuXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMubGlzdGVuZXIgPSBmdW5jdGlvbihtcWwpIHtcbiAgICAgICAgLy8gQ2hyb21lIHBhc3NlcyBhbiBNZWRpYVF1ZXJ5TGlzdEV2ZW50IG9iamVjdCwgd2hpbGUgb3RoZXIgYnJvd3NlcnMgcGFzcyBNZWRpYVF1ZXJ5TGlzdCBkaXJlY3RseVxuICAgICAgICBzZWxmLm1xbCA9IG1xbC5jdXJyZW50VGFyZ2V0IHx8IG1xbDtcbiAgICAgICAgc2VsZi5hc3Nlc3MoKTtcbiAgICB9O1xuICAgIHRoaXMubXFsLmFkZExpc3RlbmVyKHRoaXMubGlzdGVuZXIpO1xufVxuXG5NZWRpYVF1ZXJ5LnByb3RvdHlwZSA9IHtcblxuICAgIGNvbnN0dWN0b3IgOiBNZWRpYVF1ZXJ5LFxuXG4gICAgLyoqXG4gICAgICogYWRkIGEgaGFuZGxlciBmb3IgdGhpcyBxdWVyeSwgdHJpZ2dlcmluZyBpZiBhbHJlYWR5IGFjdGl2ZVxuICAgICAqXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGhhbmRsZXJcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBoYW5kbGVyLm1hdGNoIGNhbGxiYWNrIGZvciB3aGVuIHF1ZXJ5IGlzIGFjdGl2YXRlZFxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IFtoYW5kbGVyLnVubWF0Y2hdIGNhbGxiYWNrIGZvciB3aGVuIHF1ZXJ5IGlzIGRlYWN0aXZhdGVkXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gW2hhbmRsZXIuc2V0dXBdIGNhbGxiYWNrIGZvciBpbW1lZGlhdGUgZXhlY3V0aW9uIHdoZW4gYSBxdWVyeSBoYW5kbGVyIGlzIHJlZ2lzdGVyZWRcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtoYW5kbGVyLmRlZmVyU2V0dXA9ZmFsc2VdIHNob3VsZCB0aGUgc2V0dXAgY2FsbGJhY2sgYmUgZGVmZXJyZWQgdW50aWwgdGhlIGZpcnN0IHRpbWUgdGhlIGhhbmRsZXIgaXMgbWF0Y2hlZD9cbiAgICAgKi9cbiAgICBhZGRIYW5kbGVyIDogZnVuY3Rpb24oaGFuZGxlcikge1xuICAgICAgICB2YXIgcWggPSBuZXcgUXVlcnlIYW5kbGVyKGhhbmRsZXIpO1xuICAgICAgICB0aGlzLmhhbmRsZXJzLnB1c2gocWgpO1xuXG4gICAgICAgIHRoaXMubWF0Y2hlcygpICYmIHFoLm9uKCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIHJlbW92ZXMgdGhlIGdpdmVuIGhhbmRsZXIgZnJvbSB0aGUgY29sbGVjdGlvbiwgYW5kIGNhbGxzIGl0J3MgZGVzdHJveSBtZXRob2RzXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge29iamVjdCB8fCBmdW5jdGlvbn0gaGFuZGxlciB0aGUgaGFuZGxlciB0byByZW1vdmVcbiAgICAgKi9cbiAgICByZW1vdmVIYW5kbGVyIDogZnVuY3Rpb24oaGFuZGxlcikge1xuICAgICAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLmhhbmRsZXJzO1xuICAgICAgICBlYWNoKGhhbmRsZXJzLCBmdW5jdGlvbihoLCBpKSB7XG4gICAgICAgICAgICBpZihoLmVxdWFscyhoYW5kbGVyKSkge1xuICAgICAgICAgICAgICAgIGguZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiAhaGFuZGxlcnMuc3BsaWNlKGksMSk7IC8vcmVtb3ZlIGZyb20gYXJyYXkgYW5kIGV4aXQgZWFjaCBlYXJseVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIG1lZGlhIHF1ZXJ5IHNob3VsZCBiZSBjb25zaWRlcmVkIGEgbWF0Y2hcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgaWYgbWVkaWEgcXVlcnkgY2FuIGJlIGNvbnNpZGVyZWQgYSBtYXRjaCwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAgICovXG4gICAgbWF0Y2hlcyA6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tcWwubWF0Y2hlcyB8fCB0aGlzLmlzVW5jb25kaXRpb25hbDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2xlYXJzIGFsbCBoYW5kbGVycyBhbmQgdW5iaW5kcyBldmVudHNcbiAgICAgKi9cbiAgICBjbGVhciA6IGZ1bmN0aW9uKCkge1xuICAgICAgICBlYWNoKHRoaXMuaGFuZGxlcnMsIGZ1bmN0aW9uKGhhbmRsZXIpIHtcbiAgICAgICAgICAgIGhhbmRsZXIuZGVzdHJveSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5tcWwucmVtb3ZlTGlzdGVuZXIodGhpcy5saXN0ZW5lcik7XG4gICAgICAgIHRoaXMuaGFuZGxlcnMubGVuZ3RoID0gMDsgLy9jbGVhciBhcnJheVxuICAgIH0sXG5cbiAgICAvKlxuICAgICAgICAqIEFzc2Vzc2VzIHRoZSBxdWVyeSwgdHVybmluZyBvbiBhbGwgaGFuZGxlcnMgaWYgaXQgbWF0Y2hlcywgdHVybmluZyB0aGVtIG9mZiBpZiBpdCBkb2Vzbid0IG1hdGNoXG4gICAgICAgICovXG4gICAgYXNzZXNzIDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBhY3Rpb24gPSB0aGlzLm1hdGNoZXMoKSA/ICdvbicgOiAnb2ZmJztcblxuICAgICAgICBlYWNoKHRoaXMuaGFuZGxlcnMsIGZ1bmN0aW9uKGhhbmRsZXIpIHtcbiAgICAgICAgICAgIGhhbmRsZXJbYWN0aW9uXSgpO1xuICAgICAgICB9KTtcbiAgICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1lZGlhUXVlcnk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiYzA0ZVwiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgaXNPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiODYxZFwiKTtcblxuLy8gYFRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXRvcHJpbWl0aXZlXG4vLyBpbnN0ZWFkIG9mIHRoZSBFUzYgc3BlYyB2ZXJzaW9uLCB3ZSBkaWRuJ3QgaW1wbGVtZW50IEBAdG9QcmltaXRpdmUgY2FzZVxuLy8gYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgLSBmbGFnIC0gcHJlZmVycmVkIHR5cGUgaXMgYSBzdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBQUkVGRVJSRURfU1RSSU5HKSB7XG4gIGlmICghaXNPYmplY3QoaW5wdXQpKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAoUFJFRkVSUkVEX1NUUklORyAmJiB0eXBlb2YgKGZuID0gaW5wdXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHR5cGVvZiAoZm4gPSBpbnB1dC52YWx1ZU9mKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmICghUFJFRkVSUkVEX1NUUklORyAmJiB0eXBlb2YgKGZuID0gaW5wdXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCJjMTk1XCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBNZWRpYVF1ZXJ5ID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImJjZjdcIik7XG52YXIgVXRpbCA9IF9fd2VicGFja19yZXF1aXJlX18oXCIyMTdkXCIpO1xudmFyIGVhY2ggPSBVdGlsLmVhY2g7XG52YXIgaXNGdW5jdGlvbiA9IFV0aWwuaXNGdW5jdGlvbjtcbnZhciBpc0FycmF5ID0gVXRpbC5pc0FycmF5O1xuXG4vKipcbiAqIEFsbG93cyBmb3IgcmVnaXN0cmF0aW9uIG9mIHF1ZXJ5IGhhbmRsZXJzLlxuICogTWFuYWdlcyB0aGUgcXVlcnkgaGFuZGxlcidzIHN0YXRlIGFuZCBpcyByZXNwb25zaWJsZSBmb3Igd2lyaW5nIHVwIGJyb3dzZXIgZXZlbnRzXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIE1lZGlhUXVlcnlEaXNwYXRjaCAoKSB7XG4gICAgaWYoIXdpbmRvdy5tYXRjaE1lZGlhKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbWF0Y2hNZWRpYSBub3QgcHJlc2VudCwgbGVnYWN5IGJyb3dzZXJzIHJlcXVpcmUgYSBwb2x5ZmlsbCcpO1xuICAgIH1cblxuICAgIHRoaXMucXVlcmllcyA9IHt9O1xuICAgIHRoaXMuYnJvd3NlcklzSW5jYXBhYmxlID0gIXdpbmRvdy5tYXRjaE1lZGlhKCdvbmx5IGFsbCcpLm1hdGNoZXM7XG59XG5cbk1lZGlhUXVlcnlEaXNwYXRjaC5wcm90b3R5cGUgPSB7XG5cbiAgICBjb25zdHJ1Y3RvciA6IE1lZGlhUXVlcnlEaXNwYXRjaCxcblxuICAgIC8qKlxuICAgICAqIFJlZ2lzdGVycyBhIGhhbmRsZXIgZm9yIHRoZSBnaXZlbiBtZWRpYSBxdWVyeVxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHEgdGhlIG1lZGlhIHF1ZXJ5XG4gICAgICogQHBhcmFtIHtvYmplY3QgfHwgQXJyYXkgfHwgRnVuY3Rpb259IG9wdGlvbnMgZWl0aGVyIGEgc2luZ2xlIHF1ZXJ5IGhhbmRsZXIgb2JqZWN0LCBhIGZ1bmN0aW9uLCBvciBhbiBhcnJheSBvZiBxdWVyeSBoYW5kbGVyc1xuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IG9wdGlvbnMubWF0Y2ggZmlyZWQgd2hlbiBxdWVyeSBtYXRjaGVkXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gW29wdGlvbnMudW5tYXRjaF0gZmlyZWQgd2hlbiBhIHF1ZXJ5IGlzIG5vIGxvbmdlciBtYXRjaGVkXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gW29wdGlvbnMuc2V0dXBdIGZpcmVkIHdoZW4gaGFuZGxlciBmaXJzdCB0cmlnZ2VyZWRcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmRlZmVyU2V0dXA9ZmFsc2VdIHdoZXRoZXIgc2V0dXAgc2hvdWxkIGJlIHJ1biBpbW1lZGlhdGVseSBvciBkZWZlcnJlZCB1bnRpbCBxdWVyeSBpcyBmaXJzdCBtYXRjaGVkXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbc2hvdWxkRGVncmFkZT1mYWxzZV0gd2hldGhlciB0aGlzIHBhcnRpY3VsYXIgbWVkaWEgcXVlcnkgc2hvdWxkIGFsd2F5cyBydW4gb24gaW5jYXBhYmxlIGJyb3dzZXJzXG4gICAgICovXG4gICAgcmVnaXN0ZXIgOiBmdW5jdGlvbihxLCBvcHRpb25zLCBzaG91bGREZWdyYWRlKSB7XG4gICAgICAgIHZhciBxdWVyaWVzICAgICAgICAgPSB0aGlzLnF1ZXJpZXMsXG4gICAgICAgICAgICBpc1VuY29uZGl0aW9uYWwgPSBzaG91bGREZWdyYWRlICYmIHRoaXMuYnJvd3NlcklzSW5jYXBhYmxlO1xuXG4gICAgICAgIGlmKCFxdWVyaWVzW3FdKSB7XG4gICAgICAgICAgICBxdWVyaWVzW3FdID0gbmV3IE1lZGlhUXVlcnkocSwgaXNVbmNvbmRpdGlvbmFsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vbm9ybWFsaXNlIHRvIG9iamVjdCBpbiBhbiBhcnJheVxuICAgICAgICBpZihpc0Z1bmN0aW9uKG9wdGlvbnMpKSB7XG4gICAgICAgICAgICBvcHRpb25zID0geyBtYXRjaCA6IG9wdGlvbnMgfTtcbiAgICAgICAgfVxuICAgICAgICBpZighaXNBcnJheShvcHRpb25zKSkge1xuICAgICAgICAgICAgb3B0aW9ucyA9IFtvcHRpb25zXTtcbiAgICAgICAgfVxuICAgICAgICBlYWNoKG9wdGlvbnMsIGZ1bmN0aW9uKGhhbmRsZXIpIHtcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGhhbmRsZXIpKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlciA9IHsgbWF0Y2ggOiBoYW5kbGVyIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxdWVyaWVzW3FdLmFkZEhhbmRsZXIoaGFuZGxlcik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiB1bnJlZ2lzdGVycyBhIHF1ZXJ5IGFuZCBhbGwgaXQncyBoYW5kbGVycywgb3IgYSBzcGVjaWZpYyBoYW5kbGVyIGZvciBhIHF1ZXJ5XG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcSB0aGUgbWVkaWEgcXVlcnkgdG8gdGFyZ2V0XG4gICAgICogQHBhcmFtIHtvYmplY3QgfHwgZnVuY3Rpb259IFtoYW5kbGVyXSBzcGVjaWZpYyBoYW5kbGVyIHRvIHVucmVnaXN0ZXJcbiAgICAgKi9cbiAgICB1bnJlZ2lzdGVyIDogZnVuY3Rpb24ocSwgaGFuZGxlcikge1xuICAgICAgICB2YXIgcXVlcnkgPSB0aGlzLnF1ZXJpZXNbcV07XG5cbiAgICAgICAgaWYocXVlcnkpIHtcbiAgICAgICAgICAgIGlmKGhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgICBxdWVyeS5yZW1vdmVIYW5kbGVyKGhhbmRsZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcXVlcnkuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5xdWVyaWVzW3FdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBNZWRpYVF1ZXJ5RGlzcGF0Y2g7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiYzQzMFwiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZhbHNlO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcImM2YjZcIjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxudmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGl0KS5zbGljZSg4LCAtMSk7XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcImM2Y2RcIjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGdsb2JhbCA9IF9fd2VicGFja19yZXF1aXJlX18oXCJkYTg0XCIpO1xudmFyIHNldEdsb2JhbCA9IF9fd2VicGFja19yZXF1aXJlX18oXCJjZTRlXCIpO1xuXG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBnbG9iYWxbU0hBUkVEXSB8fCBzZXRHbG9iYWwoU0hBUkVELCB7fSk7XG5cbm1vZHVsZS5leHBvcnRzID0gc3RvcmU7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiYzgzMlwiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24oZ2xvYmFsKSB7LyoqXG4gKiBsb2Rhc2ggKEN1c3RvbSBCdWlsZCkgPGh0dHBzOi8vbG9kYXNoLmNvbS8+XG4gKiBCdWlsZDogYGxvZGFzaCBtb2R1bGFyaXplIGV4cG9ydHM9XCJucG1cIiAtbyAuL2BcbiAqIENvcHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzIDxodHRwczovL2pxdWVyeS5vcmcvPlxuICogUmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UgPGh0dHBzOi8vbG9kYXNoLmNvbS9saWNlbnNlPlxuICogQmFzZWQgb24gVW5kZXJzY29yZS5qcyAxLjguMyA8aHR0cDovL3VuZGVyc2NvcmVqcy5vcmcvTElDRU5TRT5cbiAqIENvcHlyaWdodCBKZXJlbXkgQXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9yc1xuICovXG5cbi8qKiBVc2VkIGFzIHRoZSBgVHlwZUVycm9yYCBtZXNzYWdlIGZvciBcIkZ1bmN0aW9uc1wiIG1ldGhvZHMuICovXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xuXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxuICAgIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG4vKiogVXNlZCB0byBtYXRjaCBwcm9wZXJ0eSBuYW1lcyB3aXRoaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVJc0RlZXBQcm9wID0gL1xcLnxcXFsoPzpbXltcXF1dKnwoW1wiJ10pKD86KD8hXFwxKVteXFxcXF18XFxcXC4pKj9cXDEpXFxdLyxcbiAgICByZUlzUGxhaW5Qcm9wID0gL15cXHcqJC8sXG4gICAgcmVMZWFkaW5nRG90ID0gL15cXC4vLFxuICAgIHJlUHJvcE5hbWUgPSAvW14uW1xcXV0rfFxcWyg/OigtP1xcZCsoPzpcXC5cXGQrKT8pfChbXCInXSkoKD86KD8hXFwyKVteXFxcXF18XFxcXC4pKj8pXFwyKVxcXXwoPz0oPzpcXC58XFxbXFxdKSg/OlxcLnxcXFtcXF18JCkpL2c7XG5cbi8qKlxuICogVXNlZCB0byBtYXRjaCBgUmVnRXhwYFxuICogW3N5bnRheCBjaGFyYWN0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wYXR0ZXJucykuXG4gKi9cbnZhciByZVJlZ0V4cENoYXIgPSAvW1xcXFxeJC4qKz8oKVtcXF17fXxdL2c7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlRXNjYXBlQ2hhciA9IC9cXFxcKFxcXFwpPy9nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaG9zdCBjb25zdHJ1Y3RvcnMgKFNhZmFyaSkuICovXG52YXIgcmVJc0hvc3RDdG9yID0gL15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwgJiYgZ2xvYmFsLk9iamVjdCA9PT0gT2JqZWN0ICYmIGdsb2JhbDtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cbnZhciBmcmVlU2VsZiA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAmJiBzZWxmO1xuXG4vKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4gKi9cbnZhciByb290ID0gZnJlZUdsb2JhbCB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXG4vKipcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBnZXRWYWx1ZShvYmplY3QsIGtleSkge1xuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIGhvc3Qgb2JqZWN0IGluIElFIDwgOS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGhvc3Qgb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzSG9zdE9iamVjdCh2YWx1ZSkge1xuICAvLyBNYW55IGhvc3Qgb2JqZWN0cyBhcmUgYE9iamVjdGAgb2JqZWN0cyB0aGF0IGNhbiBjb2VyY2UgdG8gc3RyaW5nc1xuICAvLyBkZXNwaXRlIGhhdmluZyBpbXByb3Blcmx5IGRlZmluZWQgYHRvU3RyaW5nYCBtZXRob2RzLlxuICB2YXIgcmVzdWx0ID0gZmFsc2U7XG4gIGlmICh2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZS50b1N0cmluZyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9ICEhKHZhbHVlICsgJycpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGUsXG4gICAgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG92ZXJyZWFjaGluZyBjb3JlLWpzIHNoaW1zLiAqL1xudmFyIGNvcmVKc0RhdGEgPSByb290WydfX2NvcmUtanNfc2hhcmVkX18nXTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5nIGFzIG5hdGl2ZS4gKi9cbnZhciBtYXNrU3JjS2V5ID0gKGZ1bmN0aW9uKCkge1xuICB2YXIgdWlkID0gL1teLl0rJC8uZXhlYyhjb3JlSnNEYXRhICYmIGNvcmVKc0RhdGEua2V5cyAmJiBjb3JlSnNEYXRhLmtleXMuSUVfUFJPVE8gfHwgJycpO1xuICByZXR1cm4gdWlkID8gKCdTeW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7XG59KCkpO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgb2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGlmIGEgbWV0aG9kIGlzIG5hdGl2ZS4gKi9cbnZhciByZUlzTmF0aXZlID0gUmVnRXhwKCdeJyArXG4gIGZ1bmNUb1N0cmluZy5jYWxsKGhhc093blByb3BlcnR5KS5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgJ1xcXFwkJicpXG4gIC5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8IGZvciAuKz8oPz1cXFxcXFxdKS9nLCAnJDEuKj8nKSArICckJ1xuKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgU3ltYm9sID0gcm9vdC5TeW1ib2wsXG4gICAgc3BsaWNlID0gYXJyYXlQcm90by5zcGxpY2U7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBNYXAgPSBnZXROYXRpdmUocm9vdCwgJ01hcCcpLFxuICAgIG5hdGl2ZUNyZWF0ZSA9IGdldE5hdGl2ZShPYmplY3QsICdjcmVhdGUnKTtcblxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG52YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgIHN5bWJvbFRvU3RyaW5nID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by50b1N0cmluZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgaGFzaCBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIEhhc2goZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPyBlbnRyaWVzLmxlbmd0aCA6IDA7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBoYXNoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIEhhc2hcbiAqL1xuZnVuY3Rpb24gaGFzaENsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gbmF0aXZlQ3JlYXRlID8gbmF0aXZlQ3JlYXRlKG51bGwpIDoge307XG59XG5cbi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGhhc2guXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7T2JqZWN0fSBoYXNoIFRoZSBoYXNoIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNoRGVsZXRlKGtleSkge1xuICByZXR1cm4gdGhpcy5oYXMoa2V5KSAmJiBkZWxldGUgdGhpcy5fX2RhdGFfX1trZXldO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGhhc2ggdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gaGFzaEdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICBpZiAobmF0aXZlQ3JlYXRlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGRhdGFba2V5XTtcbiAgICByZXR1cm4gcmVzdWx0ID09PSBIQVNIX1VOREVGSU5FRCA/IHVuZGVmaW5lZCA6IHJlc3VsdDtcbiAgfVxuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpID8gZGF0YVtrZXldIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIGhhc2ggdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hIYXMoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgcmV0dXJuIG5hdGl2ZUNyZWF0ZSA/IGRhdGFba2V5XSAhPT0gdW5kZWZpbmVkIDogaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpO1xufVxuXG4vKipcbiAqIFNldHMgdGhlIGhhc2ggYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBoYXNoIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBoYXNoU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICBkYXRhW2tleV0gPSAobmF0aXZlQ3JlYXRlICYmIHZhbHVlID09PSB1bmRlZmluZWQpID8gSEFTSF9VTkRFRklORUQgOiB2YWx1ZTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBIYXNoYC5cbkhhc2gucHJvdG90eXBlLmNsZWFyID0gaGFzaENsZWFyO1xuSGFzaC5wcm90b3R5cGVbJ2RlbGV0ZSddID0gaGFzaERlbGV0ZTtcbkhhc2gucHJvdG90eXBlLmdldCA9IGhhc2hHZXQ7XG5IYXNoLnByb3RvdHlwZS5oYXMgPSBoYXNoSGFzO1xuSGFzaC5wcm90b3R5cGUuc2V0ID0gaGFzaFNldDtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGxpc3QgY2FjaGUgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBMaXN0Q2FjaGUoZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPyBlbnRyaWVzLmxlbmd0aCA6IDA7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IFtdO1xufVxuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgbGFzdEluZGV4ID0gZGF0YS5sZW5ndGggLSAxO1xuICBpZiAoaW5kZXggPT0gbGFzdEluZGV4KSB7XG4gICAgZGF0YS5wb3AoKTtcbiAgfSBlbHNlIHtcbiAgICBzcGxpY2UuY2FsbChkYXRhLCBpbmRleCwgMSk7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICByZXR1cm4gaW5kZXggPCAwID8gdW5kZWZpbmVkIDogZGF0YVtpbmRleF1bMV07XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVIYXMoa2V5KSB7XG4gIHJldHVybiBhc3NvY0luZGV4T2YodGhpcy5fX2RhdGFfXywga2V5KSA+IC0xO1xufVxuXG4vKipcbiAqIFNldHMgdGhlIGxpc3QgY2FjaGUgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGxpc3QgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIGRhdGEucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9IGVsc2Uge1xuICAgIGRhdGFbaW5kZXhdWzFdID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBMaXN0Q2FjaGVgLlxuTGlzdENhY2hlLnByb3RvdHlwZS5jbGVhciA9IGxpc3RDYWNoZUNsZWFyO1xuTGlzdENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBsaXN0Q2FjaGVEZWxldGU7XG5MaXN0Q2FjaGUucHJvdG90eXBlLmdldCA9IGxpc3RDYWNoZUdldDtcbkxpc3RDYWNoZS5wcm90b3R5cGUuaGFzID0gbGlzdENhY2hlSGFzO1xuTGlzdENhY2hlLnByb3RvdHlwZS5zZXQgPSBsaXN0Q2FjaGVTZXQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1hcCBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBNYXBDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA/IGVudHJpZXMubGVuZ3RoIDogMDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIG1hcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUNsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0ge1xuICAgICdoYXNoJzogbmV3IEhhc2gsXG4gICAgJ21hcCc6IG5ldyAoTWFwIHx8IExpc3RDYWNoZSksXG4gICAgJ3N0cmluZyc6IG5ldyBIYXNoXG4gIH07XG59XG5cbi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIG1hcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZURlbGV0ZShrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KVsnZGVsZXRlJ10oa2V5KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBtYXAgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlR2V0KGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmdldChrZXkpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIG1hcCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmhhcyhrZXkpO1xufVxuXG4vKipcbiAqIFNldHMgdGhlIG1hcCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBtYXAgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLnNldChrZXksIHZhbHVlKTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBNYXBDYWNoZWAuXG5NYXBDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBtYXBDYWNoZUNsZWFyO1xuTWFwQ2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IG1hcENhY2hlRGVsZXRlO1xuTWFwQ2FjaGUucHJvdG90eXBlLmdldCA9IG1hcENhY2hlR2V0O1xuTWFwQ2FjaGUucHJvdG90eXBlLmhhcyA9IG1hcENhY2hlSGFzO1xuTWFwQ2FjaGUucHJvdG90eXBlLnNldCA9IG1hcENhY2hlU2V0O1xuXG4vKipcbiAqIEdldHMgdGhlIGluZGV4IGF0IHdoaWNoIHRoZSBga2V5YCBpcyBmb3VuZCBpbiBgYXJyYXlgIG9mIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IGtleSBUaGUga2V5IHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBhc3NvY0luZGV4T2YoYXJyYXksIGtleSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICBpZiAoZXEoYXJyYXlbbGVuZ3RoXVswXSwga2V5KSkge1xuICAgICAgcmV0dXJuIGxlbmd0aDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmdldGAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWZhdWx0IHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldChvYmplY3QsIHBhdGgpIHtcbiAgcGF0aCA9IGlzS2V5KHBhdGgsIG9iamVjdCkgPyBbcGF0aF0gOiBjYXN0UGF0aChwYXRoKTtcblxuICB2YXIgaW5kZXggPSAwLFxuICAgICAgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG5cbiAgd2hpbGUgKG9iamVjdCAhPSBudWxsICYmIGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgb2JqZWN0ID0gb2JqZWN0W3RvS2V5KHBhdGhbaW5kZXgrK10pXTtcbiAgfVxuICByZXR1cm4gKGluZGV4ICYmIGluZGV4ID09IGxlbmd0aCkgPyBvYmplY3QgOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNOYXRpdmVgIHdpdGhvdXQgYmFkIHNoaW0gY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbmF0aXZlIGZ1bmN0aW9uLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTmF0aXZlKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpIHx8IGlzTWFza2VkKHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcGF0dGVybiA9IChpc0Z1bmN0aW9uKHZhbHVlKSB8fCBpc0hvc3RPYmplY3QodmFsdWUpKSA/IHJlSXNOYXRpdmUgOiByZUlzSG9zdEN0b3I7XG4gIHJldHVybiBwYXR0ZXJuLnRlc3QodG9Tb3VyY2UodmFsdWUpKTtcbn1cblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50b1N0cmluZ2Agd2hpY2ggZG9lc24ndCBjb252ZXJ0IG51bGxpc2hcbiAqIHZhbHVlcyB0byBlbXB0eSBzdHJpbmdzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBiYXNlVG9TdHJpbmcodmFsdWUpIHtcbiAgLy8gRXhpdCBlYXJseSBmb3Igc3RyaW5ncyB0byBhdm9pZCBhIHBlcmZvcm1hbmNlIGhpdCBpbiBzb21lIGVudmlyb25tZW50cy5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAoaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHN5bWJvbFRvU3RyaW5nID8gc3ltYm9sVG9TdHJpbmcuY2FsbCh2YWx1ZSkgOiAnJztcbiAgfVxuICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG59XG5cbi8qKlxuICogQ2FzdHMgYHZhbHVlYCB0byBhIHBhdGggYXJyYXkgaWYgaXQncyBub3Qgb25lLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjYXN0IHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGNhc3RQYXRoKHZhbHVlKSB7XG4gIHJldHVybiBpc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogc3RyaW5nVG9QYXRoKHZhbHVlKTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBkYXRhIGZvciBgbWFwYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG1hcCBUaGUgbWFwIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUgcmVmZXJlbmNlIGtleS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtYXAgZGF0YS5cbiAqL1xuZnVuY3Rpb24gZ2V0TWFwRGF0YShtYXAsIGtleSkge1xuICB2YXIgZGF0YSA9IG1hcC5fX2RhdGFfXztcbiAgcmV0dXJuIGlzS2V5YWJsZShrZXkpXG4gICAgPyBkYXRhW3R5cGVvZiBrZXkgPT0gJ3N0cmluZycgPyAnc3RyaW5nJyA6ICdoYXNoJ11cbiAgICA6IGRhdGEubWFwO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIG5hdGl2ZSBmdW5jdGlvbiBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBtZXRob2QgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGZ1bmN0aW9uIGlmIGl0J3MgbmF0aXZlLCBlbHNlIGB1bmRlZmluZWRgLlxuICovXG5mdW5jdGlvbiBnZXROYXRpdmUob2JqZWN0LCBrZXkpIHtcbiAgdmFyIHZhbHVlID0gZ2V0VmFsdWUob2JqZWN0LCBrZXkpO1xuICByZXR1cm4gYmFzZUlzTmF0aXZlKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcHJvcGVydHkgbmFtZSBhbmQgbm90IGEgcHJvcGVydHkgcGF0aC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBuYW1lLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzS2V5KHZhbHVlLCBvYmplY3QpIHtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBpZiAodHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nIHx8XG4gICAgICB2YWx1ZSA9PSBudWxsIHx8IGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiByZUlzUGxhaW5Qcm9wLnRlc3QodmFsdWUpIHx8ICFyZUlzRGVlcFByb3AudGVzdCh2YWx1ZSkgfHxcbiAgICAob2JqZWN0ICE9IG51bGwgJiYgdmFsdWUgaW4gT2JqZWN0KG9iamVjdCkpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgdW5pcXVlIG9iamVjdCBrZXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gKHR5cGUgPT0gJ3N0cmluZycgfHwgdHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nKVxuICAgID8gKHZhbHVlICE9PSAnX19wcm90b19fJylcbiAgICA6ICh2YWx1ZSA9PT0gbnVsbCk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgaXRzIHNvdXJjZSBtYXNrZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBpcyBtYXNrZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNNYXNrZWQoZnVuYykge1xuICByZXR1cm4gISFtYXNrU3JjS2V5ICYmIChtYXNrU3JjS2V5IGluIGZ1bmMpO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIGEgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKi9cbnZhciBzdHJpbmdUb1BhdGggPSBtZW1vaXplKGZ1bmN0aW9uKHN0cmluZykge1xuICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuXG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKHJlTGVhZGluZ0RvdC50ZXN0KHN0cmluZykpIHtcbiAgICByZXN1bHQucHVzaCgnJyk7XG4gIH1cbiAgc3RyaW5nLnJlcGxhY2UocmVQcm9wTmFtZSwgZnVuY3Rpb24obWF0Y2gsIG51bWJlciwgcXVvdGUsIHN0cmluZykge1xuICAgIHJlc3VsdC5wdXNoKHF1b3RlID8gc3RyaW5nLnJlcGxhY2UocmVFc2NhcGVDaGFyLCAnJDEnKSA6IChudW1iZXIgfHwgbWF0Y2gpKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59KTtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIGtleSBpZiBpdCdzIG5vdCBhIHN0cmluZyBvciBzeW1ib2wuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7c3RyaW5nfHN5bWJvbH0gUmV0dXJucyB0aGUga2V5LlxuICovXG5mdW5jdGlvbiB0b0tleSh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8IGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG59XG5cbi8qKlxuICogQ29udmVydHMgYGZ1bmNgIHRvIGl0cyBzb3VyY2UgY29kZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHNvdXJjZSBjb2RlLlxuICovXG5mdW5jdGlvbiB0b1NvdXJjZShmdW5jKSB7XG4gIGlmIChmdW5jICE9IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZ1bmNUb1N0cmluZy5jYWxsKGZ1bmMpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoZnVuYyArICcnKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG4gIHJldHVybiAnJztcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBtZW1vaXplcyB0aGUgcmVzdWx0IG9mIGBmdW5jYC4gSWYgYHJlc29sdmVyYCBpc1xuICogcHJvdmlkZWQsIGl0IGRldGVybWluZXMgdGhlIGNhY2hlIGtleSBmb3Igc3RvcmluZyB0aGUgcmVzdWx0IGJhc2VkIG9uIHRoZVxuICogYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbi4gQnkgZGVmYXVsdCwgdGhlIGZpcnN0IGFyZ3VtZW50XG4gKiBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24gaXMgdXNlZCBhcyB0aGUgbWFwIGNhY2hlIGtleS4gVGhlIGBmdW5jYFxuICogaXMgaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKlxuICogKipOb3RlOioqIFRoZSBjYWNoZSBpcyBleHBvc2VkIGFzIHRoZSBgY2FjaGVgIHByb3BlcnR5IG9uIHRoZSBtZW1vaXplZFxuICogZnVuY3Rpb24uIEl0cyBjcmVhdGlvbiBtYXkgYmUgY3VzdG9taXplZCBieSByZXBsYWNpbmcgdGhlIGBfLm1lbW9pemUuQ2FjaGVgXG4gKiBjb25zdHJ1Y3RvciB3aXRoIG9uZSB3aG9zZSBpbnN0YW5jZXMgaW1wbGVtZW50IHRoZVxuICogW2BNYXBgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wcm9wZXJ0aWVzLW9mLXRoZS1tYXAtcHJvdG90eXBlLW9iamVjdClcbiAqIG1ldGhvZCBpbnRlcmZhY2Ugb2YgYGRlbGV0ZWAsIGBnZXRgLCBgaGFzYCwgYW5kIGBzZXRgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3Jlc29sdmVyXSBUaGUgZnVuY3Rpb24gdG8gcmVzb2x2ZSB0aGUgY2FjaGUga2V5LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAyIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdjJzogMywgJ2QnOiA0IH07XG4gKlxuICogdmFyIHZhbHVlcyA9IF8ubWVtb2l6ZShfLnZhbHVlcyk7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIHZhbHVlcyhvdGhlcik7XG4gKiAvLyA9PiBbMywgNF1cbiAqXG4gKiBvYmplY3QuYSA9IDI7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIC8vIE1vZGlmeSB0aGUgcmVzdWx0IGNhY2hlLlxuICogdmFsdWVzLmNhY2hlLnNldChvYmplY3QsIFsnYScsICdiJ10pO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbJ2EnLCAnYiddXG4gKlxuICogLy8gUmVwbGFjZSBgXy5tZW1vaXplLkNhY2hlYC5cbiAqIF8ubWVtb2l6ZS5DYWNoZSA9IFdlYWtNYXA7XG4gKi9cbmZ1bmN0aW9uIG1lbW9pemUoZnVuYywgcmVzb2x2ZXIpIHtcbiAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicgfHwgKHJlc29sdmVyICYmIHR5cGVvZiByZXNvbHZlciAhPSAnZnVuY3Rpb24nKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgfVxuICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAga2V5ID0gcmVzb2x2ZXIgPyByZXNvbHZlci5hcHBseSh0aGlzLCBhcmdzKSA6IGFyZ3NbMF0sXG4gICAgICAgIGNhY2hlID0gbWVtb2l6ZWQuY2FjaGU7XG5cbiAgICBpZiAoY2FjaGUuaGFzKGtleSkpIHtcbiAgICAgIHJldHVybiBjYWNoZS5nZXQoa2V5KTtcbiAgICB9XG4gICAgdmFyIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgbWVtb2l6ZWQuY2FjaGUgPSBjYWNoZS5zZXQoa2V5LCByZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4gIG1lbW9pemVkLmNhY2hlID0gbmV3IChtZW1vaXplLkNhY2hlIHx8IE1hcENhY2hlKTtcbiAgcmV0dXJuIG1lbW9pemVkO1xufVxuXG4vLyBBc3NpZ24gY2FjaGUgdG8gYF8ubWVtb2l6ZWAuXG5tZW1vaXplLkNhY2hlID0gTWFwQ2FjaGU7XG5cbi8qKlxuICogUGVyZm9ybXMgYVxuICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBlcXVpdmFsZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICogdmFyIG90aGVyID0geyAnYSc6IDEgfTtcbiAqXG4gKiBfLmVxKG9iamVjdCwgb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKG9iamVjdCwgb3RoZXIpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKCdhJywgJ2EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKCdhJywgT2JqZWN0KCdhJykpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKE5hTiwgTmFOKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gZXEodmFsdWUsIG90aGVyKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gb3RoZXIgfHwgKHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXIpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYW4gYEFycmF5YCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5KGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYEZ1bmN0aW9uYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBmdW5jdGlvbiwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oXyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0Z1bmN0aW9uKC9hYmMvKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgLy8gVGhlIHVzZSBvZiBgT2JqZWN0I3RvU3RyaW5nYCBhdm9pZHMgaXNzdWVzIHdpdGggdGhlIGB0eXBlb2ZgIG9wZXJhdG9yXG4gIC8vIGluIFNhZmFyaSA4LTkgd2hpY2ggcmV0dXJucyAnb2JqZWN0JyBmb3IgdHlwZWQgYXJyYXkgYW5kIG90aGVyIGNvbnN0cnVjdG9ycy5cbiAgdmFyIHRhZyA9IGlzT2JqZWN0KHZhbHVlKSA/IG9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpIDogJyc7XG4gIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHRoZVxuICogW2xhbmd1YWdlIHR5cGVdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1lY21hc2NyaXB0LWxhbmd1YWdlLXR5cGVzKVxuICogb2YgYE9iamVjdGAuIChlLmcuIGFycmF5cywgZnVuY3Rpb25zLCBvYmplY3RzLCByZWdleGVzLCBgbmV3IE51bWJlcigwKWAsIGFuZCBgbmV3IFN0cmluZygnJylgKVxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0KHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChfLm5vb3ApO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuICEhdmFsdWUgJiYgKHR5cGUgPT0gJ29iamVjdCcgfHwgdHlwZSA9PSAnZnVuY3Rpb24nKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZS4gQSB2YWx1ZSBpcyBvYmplY3QtbGlrZSBpZiBpdCdzIG5vdCBgbnVsbGBcbiAqIGFuZCBoYXMgYSBgdHlwZW9mYCByZXN1bHQgb2YgXCJvYmplY3RcIi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZSh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gISF2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCc7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTeW1ib2xgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzeW1ib2wsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1N5bWJvbChTeW1ib2wuaXRlcmF0b3IpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNTeW1ib2woJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnc3ltYm9sJyB8fFxuICAgIChpc09iamVjdExpa2UodmFsdWUpICYmIG9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpID09IHN5bWJvbFRhZyk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZy4gQW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkIGZvciBgbnVsbGBcbiAqIGFuZCBgdW5kZWZpbmVkYCB2YWx1ZXMuIFRoZSBzaWduIG9mIGAtMGAgaXMgcHJlc2VydmVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvU3RyaW5nKG51bGwpO1xuICogLy8gPT4gJydcbiAqXG4gKiBfLnRvU3RyaW5nKC0wKTtcbiAqIC8vID0+ICctMCdcbiAqXG4gKiBfLnRvU3RyaW5nKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAnMSwyLDMnXG4gKi9cbmZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsID8gJycgOiBiYXNlVG9TdHJpbmcodmFsdWUpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBwYXRoYCBvZiBgb2JqZWN0YC4gSWYgdGhlIHJlc29sdmVkIHZhbHVlIGlzXG4gKiBgdW5kZWZpbmVkYCwgdGhlIGBkZWZhdWx0VmFsdWVgIGlzIHJldHVybmVkIGluIGl0cyBwbGFjZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuNy4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlXSBUaGUgdmFsdWUgcmV0dXJuZWQgZm9yIGB1bmRlZmluZWRgIHJlc29sdmVkIHZhbHVlcy5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiBbeyAnYic6IHsgJ2MnOiAzIH0gfV0gfTtcbiAqXG4gKiBfLmdldChvYmplY3QsICdhWzBdLmIuYycpO1xuICogLy8gPT4gM1xuICpcbiAqIF8uZ2V0KG9iamVjdCwgWydhJywgJzAnLCAnYicsICdjJ10pO1xuICogLy8gPT4gM1xuICpcbiAqIF8uZ2V0KG9iamVjdCwgJ2EuYi5jJywgJ2RlZmF1bHQnKTtcbiAqIC8vID0+ICdkZWZhdWx0J1xuICovXG5mdW5jdGlvbiBnZXQob2JqZWN0LCBwYXRoLCBkZWZhdWx0VmFsdWUpIHtcbiAgdmFyIHJlc3VsdCA9IG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogYmFzZUdldChvYmplY3QsIHBhdGgpO1xuICByZXR1cm4gcmVzdWx0ID09PSB1bmRlZmluZWQgPyBkZWZhdWx0VmFsdWUgOiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0O1xuXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwodGhpcywgX193ZWJwYWNrX3JlcXVpcmVfXyhcImM4YmFcIikpKVxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCJjOGJhXCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbnZhciBnO1xuXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxuZyA9IChmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59KSgpO1xuXG50cnkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcblx0ZyA9IGcgfHwgbmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcbn0gY2F0Y2ggKGUpIHtcblx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcblx0aWYgKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIpIGcgPSB3aW5kb3c7XG59XG5cbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XG5cbm1vZHVsZS5leHBvcnRzID0gZztcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCJjOTc1XCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oXCIyM2U3XCIpO1xudmFyICRpbmRleE9mID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjRkNjRcIikuaW5kZXhPZjtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImE2NDBcIik7XG52YXIgYXJyYXlNZXRob2RVc2VzVG9MZW5ndGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiYWU0MFwiKTtcblxudmFyIG5hdGl2ZUluZGV4T2YgPSBbXS5pbmRleE9mO1xuXG52YXIgTkVHQVRJVkVfWkVSTyA9ICEhbmF0aXZlSW5kZXhPZiAmJiAxIC8gWzFdLmluZGV4T2YoMSwgLTApIDwgMDtcbnZhciBTVFJJQ1RfTUVUSE9EID0gYXJyYXlNZXRob2RJc1N0cmljdCgnaW5kZXhPZicpO1xudmFyIFVTRVNfVE9fTEVOR1RIID0gYXJyYXlNZXRob2RVc2VzVG9MZW5ndGgoJ2luZGV4T2YnLCB7IEFDQ0VTU09SUzogdHJ1ZSwgMTogMCB9KTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5pbmRleE9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmRleG9mXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBORUdBVElWRV9aRVJPIHx8ICFTVFJJQ1RfTUVUSE9EIHx8ICFVU0VTX1RPX0xFTkdUSCB9LCB7XG4gIGluZGV4T2Y6IGZ1bmN0aW9uIGluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCA9IDAgKi8pIHtcbiAgICByZXR1cm4gTkVHQVRJVkVfWkVST1xuICAgICAgLy8gY29udmVydCAtMCB0byArMFxuICAgICAgPyBuYXRpdmVJbmRleE9mLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgMFxuICAgICAgOiAkaW5kZXhPZih0aGlzLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcImNhODRcIjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGhhcyA9IF9fd2VicGFja19yZXF1aXJlX18oXCI1MTM1XCIpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oXCJmYzZhXCIpO1xudmFyIGluZGV4T2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiNGQ2NFwiKS5pbmRleE9mO1xudmFyIGhpZGRlbktleXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiZDAxMlwiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgIWhhcyhoaWRkZW5LZXlzLCBrZXkpICYmIGhhcyhPLCBrZXkpICYmIHJlc3VsdC5wdXNoKGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXMoTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+aW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCJjYzEyXCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiZGE4NFwiKTtcbnZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oXCI4NjFkXCIpO1xuXG52YXIgZG9jdW1lbnQgPSBnbG9iYWwuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBFWElTVFMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBFWElTVFMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCJjY2E2XCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciAkID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjIzZTdcIik7XG52YXIgYXNzaWduID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjYwZGFcIik7XG5cbi8vIGBPYmplY3QuYXNzaWduYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5hc3NpZ25cbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IE9iamVjdC5hc3NpZ24gIT09IGFzc2lnbiB9LCB7XG4gIGFzc2lnbjogYXNzaWduXG59KTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCJjZTRlXCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiZGE4NFwiKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiOTExMlwiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICB0cnkge1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShnbG9iYWwsIGtleSwgdmFsdWUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGdsb2JhbFtrZXldID0gdmFsdWU7XG4gIH0gcmV0dXJuIHZhbHVlO1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCJkMDEyXCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0ge307XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiZDAzOVwiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcImQwNjZcIjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIHBhdGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiNDI4ZlwiKTtcbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiZGE4NFwiKTtcblxudmFyIGFGdW5jdGlvbiA9IGZ1bmN0aW9uICh2YXJpYWJsZSkge1xuICByZXR1cm4gdHlwZW9mIHZhcmlhYmxlID09ICdmdW5jdGlvbicgPyB2YXJpYWJsZSA6IHVuZGVmaW5lZDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWVzcGFjZSwgbWV0aG9kKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGFGdW5jdGlvbihwYXRoW25hbWVzcGFjZV0pIHx8IGFGdW5jdGlvbihnbG9iYWxbbmFtZXNwYWNlXSlcbiAgICA6IHBhdGhbbmFtZXNwYWNlXSAmJiBwYXRoW25hbWVzcGFjZV1bbWV0aG9kXSB8fCBnbG9iYWxbbmFtZXNwYWNlXSAmJiBnbG9iYWxbbmFtZXNwYWNlXVttZXRob2RdO1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCJkMWU3XCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgbmF0aXZlUHJvcGVydHlJc0VudW1lcmFibGUgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBOYXNob3JuIH4gSkRLOCBidWdcbnZhciBOQVNIT1JOX0JVRyA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvciAmJiAhbmF0aXZlUHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh7IDE6IDIgfSwgMSk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUucHJvcGVydHlpc2VudW1lcmFibGVcbmV4cG9ydHMuZiA9IE5BU0hPUk5fQlVHID8gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzLCBWKTtcbiAgcmV0dXJuICEhZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGU7XG59IDogbmF0aXZlUHJvcGVydHlJc0VudW1lcmFibGU7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiZDI4YlwiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjc0NmZcIik7XG5cbi8vIGBTeW1ib2wuaXRlcmF0b3JgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zeW1ib2wuaXRlcmF0b3JcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCJkMmJiXCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBhbk9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oXCI4MjVhXCIpO1xudmFyIGFQb3NzaWJsZVByb3RvdHlwZSA9IF9fd2VicGFja19yZXF1aXJlX18oXCIzYmJlXCIpO1xuXG4vLyBgT2JqZWN0LnNldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5zZXRwcm90b3R5cGVvZlxuLy8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gZnVuY3Rpb24gKCkge1xuICB2YXIgQ09SUkVDVF9TRVRURVIgPSBmYWxzZTtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgdmFyIHNldHRlcjtcbiAgdHJ5IHtcbiAgICBzZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdC5wcm90b3R5cGUsICdfX3Byb3RvX18nKS5zZXQ7XG4gICAgc2V0dGVyLmNhbGwodGVzdCwgW10pO1xuICAgIENPUlJFQ1RfU0VUVEVSID0gdGVzdCBpbnN0YW5jZW9mIEFycmF5O1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgIGFuT2JqZWN0KE8pO1xuICAgIGFQb3NzaWJsZVByb3RvdHlwZShwcm90byk7XG4gICAgaWYgKENPUlJFQ1RfU0VUVEVSKSBzZXR0ZXIuY2FsbChPLCBwcm90byk7XG4gICAgZWxzZSBPLl9fcHJvdG9fXyA9IHByb3RvO1xuICAgIHJldHVybiBPO1xuICB9O1xufSgpIDogdW5kZWZpbmVkKTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCJkM2I3XCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiMDBlZVwiKTtcbnZhciByZWRlZmluZSA9IF9fd2VicGFja19yZXF1aXJlX18oXCI2ZWViXCIpO1xudmFyIHRvU3RyaW5nID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImIwNDFcIik7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmdcbmlmICghVE9fU1RSSU5HX1RBR19TVVBQT1JUKSB7XG4gIHJlZGVmaW5lKE9iamVjdC5wcm90b3R5cGUsICd0b1N0cmluZycsIHRvU3RyaW5nLCB7IHVuc2FmZTogdHJ1ZSB9KTtcbn1cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCJkNDRlXCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IF9fd2VicGFja19yZXF1aXJlX18oXCI5YmYyXCIpLmY7XG52YXIgaGFzID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjUxMzVcIik7XG52YXIgd2VsbEtub3duU3ltYm9sID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImI2MjJcIik7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgVEFHLCBTVEFUSUMpIHtcbiAgaWYgKGl0ICYmICFoYXMoaXQgPSBTVEFUSUMgPyBpdCA6IGl0LnByb3RvdHlwZSwgVE9fU1RSSU5HX1RBRykpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eShpdCwgVE9fU1RSSU5HX1RBRywgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiBUQUcgfSk7XG4gIH1cbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiZDU4ZlwiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgYUZ1bmN0aW9uID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjFjMGJcIik7XG52YXIgdG9PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiN2IwYlwiKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjQ0YWRcIik7XG52YXIgdG9MZW5ndGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiNTBjNFwiKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IHJlZHVjZSwgcmVkdWNlUmlnaHQgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChJU19SSUdIVCkge1xuICByZXR1cm4gZnVuY3Rpb24gKHRoYXQsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c0xlbmd0aCwgbWVtbykge1xuICAgIGFGdW5jdGlvbihjYWxsYmFja2ZuKTtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoYXQpO1xuICAgIHZhciBzZWxmID0gSW5kZXhlZE9iamVjdChPKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IElTX1JJR0hUID8gbGVuZ3RoIC0gMSA6IDA7XG4gICAgdmFyIGkgPSBJU19SSUdIVCA/IC0xIDogMTtcbiAgICBpZiAoYXJndW1lbnRzTGVuZ3RoIDwgMikgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmIChpbmRleCBpbiBzZWxmKSB7XG4gICAgICAgIG1lbW8gPSBzZWxmW2luZGV4XTtcbiAgICAgICAgaW5kZXggKz0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBpbmRleCArPSBpO1xuICAgICAgaWYgKElTX1JJR0hUID8gaW5kZXggPCAwIDogbGVuZ3RoIDw9IGluZGV4KSB7XG4gICAgICAgIHRocm93IFR5cGVFcnJvcignUmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZScpO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKDtJU19SSUdIVCA/IGluZGV4ID49IDAgOiBsZW5ndGggPiBpbmRleDsgaW5kZXggKz0gaSkgaWYgKGluZGV4IGluIHNlbGYpIHtcbiAgICAgIG1lbW8gPSBjYWxsYmFja2ZuKG1lbW8sIHNlbGZbaW5kZXhdLCBpbmRleCwgTyk7XG4gICAgfVxuICAgIHJldHVybiBtZW1vO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUucmVkdWNlYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnJlZHVjZVxuICBsZWZ0OiBjcmVhdGVNZXRob2QoZmFsc2UpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnJlZHVjZXJpZ2h0XG4gIHJpZ2h0OiBjcmVhdGVNZXRob2QodHJ1ZSlcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiZDc4NFwiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGAgc2luY2UgaXQncyBtb3ZlZCB0byBlbnRyeSBwb2ludHNcbl9fd2VicGFja19yZXF1aXJlX18oXCJhYzFmXCIpO1xudmFyIHJlZGVmaW5lID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjZlZWJcIik7XG52YXIgZmFpbHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiZDAzOVwiKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiYjYyMlwiKTtcbnZhciByZWdleHBFeGVjID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjkyNjNcIik7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjkxMTJcIik7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbnZhciBSRVBMQUNFX1NVUFBPUlRTX05BTUVEX0dST1VQUyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vICNyZXBsYWNlIG5lZWRzIGJ1aWx0LWluIHN1cHBvcnQgZm9yIG5hbWVkIGdyb3Vwcy5cbiAgLy8gI21hdGNoIHdvcmtzIGZpbmUgYmVjYXVzZSBpdCBqdXN0IHJldHVybiB0aGUgZXhlYyByZXN1bHRzLCBldmVuIGlmIGl0IGhhc1xuICAvLyBhIFwiZ3JvcHNcIiBwcm9wZXJ0eS5cbiAgdmFyIHJlID0gLy4vO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICByZXN1bHQuZ3JvdXBzID0geyBhOiAnNycgfTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICByZXR1cm4gJycucmVwbGFjZShyZSwgJyQ8YT4nKSAhPT0gJzcnO1xufSk7XG5cbi8vIElFIDw9IDExIHJlcGxhY2VzICQwIHdpdGggdGhlIHdob2xlIG1hdGNoLCBhcyBpZiBpdCB3YXMgJCZcbi8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzYwMjQ2NjYvZ2V0dGluZy1pZS10by1yZXBsYWNlLWEtcmVnZXgtd2l0aC10aGUtbGl0ZXJhbC1zdHJpbmctMFxudmFyIFJFUExBQ0VfS0VFUFNfJDAgPSAoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJ2EnLnJlcGxhY2UoLy4vLCAnJDAnKSA9PT0gJyQwJztcbn0pKCk7XG5cbnZhciBSRVBMQUNFID0gd2VsbEtub3duU3ltYm9sKCdyZXBsYWNlJyk7XG4vLyBTYWZhcmkgPD0gMTMuMC4zKD8pIHN1YnN0aXR1dGVzIG50aCBjYXB0dXJlIHdoZXJlIG4+bSB3aXRoIGFuIGVtcHR5IHN0cmluZ1xudmFyIFJFR0VYUF9SRVBMQUNFX1NVQlNUSVRVVEVTX1VOREVGSU5FRF9DQVBUVVJFID0gKGZ1bmN0aW9uICgpIHtcbiAgaWYgKC8uL1tSRVBMQUNFXSkge1xuICAgIHJldHVybiAvLi9bUkVQTEFDRV0oJ2EnLCAnJDAnKSA9PT0gJyc7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufSkoKTtcblxuLy8gQ2hyb21lIDUxIGhhcyBhIGJ1Z2d5IFwic3BsaXRcIiBpbXBsZW1lbnRhdGlvbiB3aGVuIFJlZ0V4cCNleGVjICE9PSBuYXRpdmVFeGVjXG4vLyBXZWV4IEpTIGhhcyBmcm96ZW4gYnVpbHQtaW4gcHJvdG90eXBlcywgc28gdXNlIHRyeSAvIGNhdGNoIHdyYXBwZXJcbnZhciBTUExJVF9XT1JLU19XSVRIX09WRVJXUklUVEVOX0VYRUMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUgPSAvKD86KS87XG4gIHZhciBvcmlnaW5hbEV4ZWMgPSByZS5leGVjO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gb3JpZ2luYWxFeGVjLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH07XG4gIHZhciByZXN1bHQgPSAnYWInLnNwbGl0KHJlKTtcbiAgcmV0dXJuIHJlc3VsdC5sZW5ndGggIT09IDIgfHwgcmVzdWx0WzBdICE9PSAnYScgfHwgcmVzdWx0WzFdICE9PSAnYic7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZLCBsZW5ndGgsIGV4ZWMsIHNoYW0pIHtcbiAgdmFyIFNZTUJPTCA9IHdlbGxLbm93blN5bWJvbChLRVkpO1xuXG4gIHZhciBERUxFR0FURVNfVE9fU1lNQk9MID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTdHJpbmcgbWV0aG9kcyBjYWxsIHN5bWJvbC1uYW1lZCBSZWdFcCBtZXRob2RzXG4gICAgdmFyIE8gPSB7fTtcbiAgICBPW1NZTUJPTF0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9O1xuICAgIHJldHVybiAnJ1tLRVldKE8pICE9IDc7XG4gIH0pO1xuXG4gIHZhciBERUxFR0FURVNfVE9fRVhFQyA9IERFTEVHQVRFU19UT19TWU1CT0wgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTeW1ib2wtbmFtZWQgUmVnRXhwIG1ldGhvZHMgY2FsbCAuZXhlY1xuICAgIHZhciBleGVjQ2FsbGVkID0gZmFsc2U7XG4gICAgdmFyIHJlID0gL2EvO1xuXG4gICAgaWYgKEtFWSA9PT0gJ3NwbGl0Jykge1xuICAgICAgLy8gV2UgY2FuJ3QgdXNlIHJlYWwgcmVnZXggaGVyZSBzaW5jZSBpdCBjYXVzZXMgZGVvcHRpbWl6YXRpb25cbiAgICAgIC8vIGFuZCBzZXJpb3VzIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uIGluIFY4XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMzA2XG4gICAgICByZSA9IHt9O1xuICAgICAgLy8gUmVnRXhwW0BAc3BsaXRdIGRvZXNuJ3QgY2FsbCB0aGUgcmVnZXgncyBleGVjIG1ldGhvZCwgYnV0IGZpcnN0IGNyZWF0ZXNcbiAgICAgIC8vIGEgbmV3IG9uZS4gV2UgbmVlZCB0byByZXR1cm4gdGhlIHBhdGNoZWQgcmVnZXggd2hlbiBjcmVhdGluZyB0aGUgbmV3IG9uZS5cbiAgICAgIHJlLmNvbnN0cnVjdG9yID0ge307XG4gICAgICByZS5jb25zdHJ1Y3RvcltTUEVDSUVTXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlOyB9O1xuICAgICAgcmUuZmxhZ3MgPSAnJztcbiAgICAgIHJlW1NZTUJPTF0gPSAvLi9bU1lNQk9MXTtcbiAgICB9XG5cbiAgICByZS5leGVjID0gZnVuY3Rpb24gKCkgeyBleGVjQ2FsbGVkID0gdHJ1ZTsgcmV0dXJuIG51bGw7IH07XG5cbiAgICByZVtTWU1CT0xdKCcnKTtcbiAgICByZXR1cm4gIWV4ZWNDYWxsZWQ7XG4gIH0pO1xuXG4gIGlmIChcbiAgICAhREVMRUdBVEVTX1RPX1NZTUJPTCB8fFxuICAgICFERUxFR0FURVNfVE9fRVhFQyB8fFxuICAgIChLRVkgPT09ICdyZXBsYWNlJyAmJiAhKFxuICAgICAgUkVQTEFDRV9TVVBQT1JUU19OQU1FRF9HUk9VUFMgJiZcbiAgICAgIFJFUExBQ0VfS0VFUFNfJDAgJiZcbiAgICAgICFSRUdFWFBfUkVQTEFDRV9TVUJTVElUVVRFU19VTkRFRklORURfQ0FQVFVSRVxuICAgICkpIHx8XG4gICAgKEtFWSA9PT0gJ3NwbGl0JyAmJiAhU1BMSVRfV09SS1NfV0lUSF9PVkVSV1JJVFRFTl9FWEVDKVxuICApIHtcbiAgICB2YXIgbmF0aXZlUmVnRXhwTWV0aG9kID0gLy4vW1NZTUJPTF07XG4gICAgdmFyIG1ldGhvZHMgPSBleGVjKFNZTUJPTCwgJydbS0VZXSwgZnVuY3Rpb24gKG5hdGl2ZU1ldGhvZCwgcmVnZXhwLCBzdHIsIGFyZzIsIGZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICBpZiAocmVnZXhwLmV4ZWMgPT09IHJlZ2V4cEV4ZWMpIHtcbiAgICAgICAgaWYgKERFTEVHQVRFU19UT19TWU1CT0wgJiYgIWZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICAgICAgLy8gVGhlIG5hdGl2ZSBTdHJpbmcgbWV0aG9kIGFscmVhZHkgZGVsZWdhdGVzIHRvIEBAbWV0aG9kICh0aGlzXG4gICAgICAgICAgLy8gcG9seWZpbGxlZCBmdW5jdGlvbiksIGxlYXNpbmcgdG8gaW5maW5pdGUgcmVjdXJzaW9uLlxuICAgICAgICAgIC8vIFdlIGF2b2lkIGl0IGJ5IGRpcmVjdGx5IGNhbGxpbmcgdGhlIG5hdGl2ZSBAQG1ldGhvZCBtZXRob2QuXG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IG5hdGl2ZVJlZ0V4cE1ldGhvZC5jYWxsKHJlZ2V4cCwgc3RyLCBhcmcyKSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBuYXRpdmVNZXRob2QuY2FsbChzdHIsIHJlZ2V4cCwgYXJnMikgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlIH07XG4gICAgfSwge1xuICAgICAgUkVQTEFDRV9LRUVQU18kMDogUkVQTEFDRV9LRUVQU18kMCxcbiAgICAgIFJFR0VYUF9SRVBMQUNFX1NVQlNUSVRVVEVTX1VOREVGSU5FRF9DQVBUVVJFOiBSRUdFWFBfUkVQTEFDRV9TVUJTVElUVVRFU19VTkRFRklORURfQ0FQVFVSRVxuICAgIH0pO1xuICAgIHZhciBzdHJpbmdNZXRob2QgPSBtZXRob2RzWzBdO1xuICAgIHZhciByZWdleE1ldGhvZCA9IG1ldGhvZHNbMV07XG5cbiAgICByZWRlZmluZShTdHJpbmcucHJvdG90eXBlLCBLRVksIHN0cmluZ01ldGhvZCk7XG4gICAgcmVkZWZpbmUoUmVnRXhwLnByb3RvdHlwZSwgU1lNQk9MLCBsZW5ndGggPT0gMlxuICAgICAgLy8gMjEuMi41LjggUmVnRXhwLnByb3RvdHlwZVtAQHJlcGxhY2VdKHN0cmluZywgcmVwbGFjZVZhbHVlKVxuICAgICAgLy8gMjEuMi41LjExIFJlZ0V4cC5wcm90b3R5cGVbQEBzcGxpdF0oc3RyaW5nLCBsaW1pdClcbiAgICAgID8gZnVuY3Rpb24gKHN0cmluZywgYXJnKSB7IHJldHVybiByZWdleE1ldGhvZC5jYWxsKHN0cmluZywgdGhpcywgYXJnKTsgfVxuICAgICAgLy8gMjEuMi41LjYgUmVnRXhwLnByb3RvdHlwZVtAQG1hdGNoXShzdHJpbmcpXG4gICAgICAvLyAyMS4yLjUuOSBSZWdFeHAucHJvdG90eXBlW0BAc2VhcmNoXShzdHJpbmcpXG4gICAgICA6IGZ1bmN0aW9uIChzdHJpbmcpIHsgcmV0dXJuIHJlZ2V4TWV0aG9kLmNhbGwoc3RyaW5nLCB0aGlzKTsgfVxuICAgICk7XG4gIH1cblxuICBpZiAoc2hhbSkgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KFJlZ0V4cC5wcm90b3R5cGVbU1lNQk9MXSwgJ3NoYW0nLCB0cnVlKTtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiZDgxZFwiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyICQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiMjNlN1wiKTtcbnZhciAkbWFwID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImI3MjdcIikubWFwO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiMWRkZVwiKTtcbnZhciBhcnJheU1ldGhvZFVzZXNUb0xlbmd0aCA9IF9fd2VicGFja19yZXF1aXJlX18oXCJhZTQwXCIpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ21hcCcpO1xuLy8gRkY0OS0gaXNzdWVcbnZhciBVU0VTX1RPX0xFTkdUSCA9IGFycmF5TWV0aG9kVXNlc1RvTGVuZ3RoKCdtYXAnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5tYXBgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLm1hcFxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIHx8ICFVU0VTX1RPX0xFTkdUSCB9LCB7XG4gIG1hcDogZnVuY3Rpb24gbWFwKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRtYXAodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCJkYTg0XCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqLyhmdW5jdGlvbihnbG9iYWwpIHt2YXIgY2hlY2sgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICYmIGl0Lk1hdGggPT0gTWF0aCAmJiBpdDtcbn07XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG5tb2R1bGUuZXhwb3J0cyA9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICBjaGVjayh0eXBlb2YgZ2xvYmFsVGhpcyA9PSAnb2JqZWN0JyAmJiBnbG9iYWxUaGlzKSB8fFxuICBjaGVjayh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdykgfHxcbiAgY2hlY2sodHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZikgfHxcbiAgY2hlY2sodHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwodGhpcywgX193ZWJwYWNrX3JlcXVpcmVfXyhcImM4YmFcIikpKVxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCJkYmI0XCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciAkID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjIzZTdcIik7XG52YXIgREVTQ1JJUFRPUlMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiODNhYlwiKTtcbnZhciBvd25LZXlzID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjU2ZWZcIik7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImZjNmFcIik7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjA2Y2ZcIik7XG52YXIgY3JlYXRlUHJvcGVydHkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiODQxOFwiKTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICAgIHZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZjtcbiAgICB2YXIga2V5cyA9IG93bktleXMoTyk7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGtleSwgZGVzY3JpcHRvcjtcbiAgICB3aGlsZSAoa2V5cy5sZW5ndGggPiBpbmRleCkge1xuICAgICAgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBrZXkgPSBrZXlzW2luZGV4KytdKTtcbiAgICAgIGlmIChkZXNjcmlwdG9yICE9PSB1bmRlZmluZWQpIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwga2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiZGRiMFwiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImRhODRcIik7XG52YXIgRE9NSXRlcmFibGVzID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImZkYmNcIik7XG52YXIgQXJyYXlJdGVyYXRvck1ldGhvZHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiZTI2MFwiKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiOTExMlwiKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiYjYyMlwiKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgQXJyYXlWYWx1ZXMgPSBBcnJheUl0ZXJhdG9yTWV0aG9kcy52YWx1ZXM7XG5cbmZvciAodmFyIENPTExFQ1RJT05fTkFNRSBpbiBET01JdGVyYWJsZXMpIHtcbiAgdmFyIENvbGxlY3Rpb24gPSBnbG9iYWxbQ09MTEVDVElPTl9OQU1FXTtcbiAgdmFyIENvbGxlY3Rpb25Qcm90b3R5cGUgPSBDb2xsZWN0aW9uICYmIENvbGxlY3Rpb24ucHJvdG90eXBlO1xuICBpZiAoQ29sbGVjdGlvblByb3RvdHlwZSkge1xuICAgIC8vIHNvbWUgQ2hyb21lIHZlcnNpb25zIGhhdmUgbm9uLWNvbmZpZ3VyYWJsZSBtZXRob2RzIG9uIERPTVRva2VuTGlzdFxuICAgIGlmIChDb2xsZWN0aW9uUHJvdG90eXBlW0lURVJBVE9SXSAhPT0gQXJyYXlWYWx1ZXMpIHRyeSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoQ29sbGVjdGlvblByb3RvdHlwZSwgSVRFUkFUT1IsIEFycmF5VmFsdWVzKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgQ29sbGVjdGlvblByb3RvdHlwZVtJVEVSQVRPUl0gPSBBcnJheVZhbHVlcztcbiAgICB9XG4gICAgaWYgKCFDb2xsZWN0aW9uUHJvdG90eXBlW1RPX1NUUklOR19UQUddKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoQ29sbGVjdGlvblByb3RvdHlwZSwgVE9fU1RSSU5HX1RBRywgQ09MTEVDVElPTl9OQU1FKTtcbiAgICB9XG4gICAgaWYgKERPTUl0ZXJhYmxlc1tDT0xMRUNUSU9OX05BTUVdKSBmb3IgKHZhciBNRVRIT0RfTkFNRSBpbiBBcnJheUl0ZXJhdG9yTWV0aG9kcykge1xuICAgICAgLy8gc29tZSBDaHJvbWUgdmVyc2lvbnMgaGF2ZSBub24tY29uZmlndXJhYmxlIG1ldGhvZHMgb24gRE9NVG9rZW5MaXN0XG4gICAgICBpZiAoQ29sbGVjdGlvblByb3RvdHlwZVtNRVRIT0RfTkFNRV0gIT09IEFycmF5SXRlcmF0b3JNZXRob2RzW01FVEhPRF9OQU1FXSkgdHJ5IHtcbiAgICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KENvbGxlY3Rpb25Qcm90b3R5cGUsIE1FVEhPRF9OQU1FLCBBcnJheUl0ZXJhdG9yTWV0aG9kc1tNRVRIT0RfTkFNRV0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgQ29sbGVjdGlvblByb3RvdHlwZVtNRVRIT0RfTkFNRV0gPSBBcnJheUl0ZXJhdG9yTWV0aG9kc1tNRVRIT0RfTkFNRV07XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiZGY3NVwiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImNhODRcIik7XG52YXIgZW51bUJ1Z0tleXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiNzgzOVwiKTtcblxuLy8gYE9iamVjdC5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5rZXlzXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiZTAxYVwiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8vIGBTeW1ib2wucHJvdG90eXBlLmRlc2NyaXB0aW9uYCBnZXR0ZXJcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUuZGVzY3JpcHRpb25cblxudmFyICQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiMjNlN1wiKTtcbnZhciBERVNDUklQVE9SUyA9IF9fd2VicGFja19yZXF1aXJlX18oXCI4M2FiXCIpO1xudmFyIGdsb2JhbCA9IF9fd2VicGFja19yZXF1aXJlX18oXCJkYTg0XCIpO1xudmFyIGhhcyA9IF9fd2VicGFja19yZXF1aXJlX18oXCI1MTM1XCIpO1xudmFyIGlzT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjg2MWRcIik7XG52YXIgZGVmaW5lUHJvcGVydHkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiOWJmMlwiKS5mO1xudmFyIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiZTg5M1wiKTtcblxudmFyIE5hdGl2ZVN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG5cbmlmIChERVNDUklQVE9SUyAmJiB0eXBlb2YgTmF0aXZlU3ltYm9sID09ICdmdW5jdGlvbicgJiYgKCEoJ2Rlc2NyaXB0aW9uJyBpbiBOYXRpdmVTeW1ib2wucHJvdG90eXBlKSB8fFxuICAvLyBTYWZhcmkgMTIgYnVnXG4gIE5hdGl2ZVN5bWJvbCgpLmRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWRcbikpIHtcbiAgdmFyIEVtcHR5U3RyaW5nRGVzY3JpcHRpb25TdG9yZSA9IHt9O1xuICAvLyB3cmFwIFN5bWJvbCBjb25zdHJ1Y3RvciBmb3IgY29ycmVjdCB3b3JrIHdpdGggdW5kZWZpbmVkIGRlc2NyaXB0aW9uXG4gIHZhciBTeW1ib2xXcmFwcGVyID0gZnVuY3Rpb24gU3ltYm9sKCkge1xuICAgIHZhciBkZXNjcmlwdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPCAxIHx8IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogU3RyaW5nKGFyZ3VtZW50c1swXSk7XG4gICAgdmFyIHJlc3VsdCA9IHRoaXMgaW5zdGFuY2VvZiBTeW1ib2xXcmFwcGVyXG4gICAgICA/IG5ldyBOYXRpdmVTeW1ib2woZGVzY3JpcHRpb24pXG4gICAgICAvLyBpbiBFZGdlIDEzLCBTdHJpbmcoU3ltYm9sKHVuZGVmaW5lZCkpID09PSAnU3ltYm9sKHVuZGVmaW5lZCknXG4gICAgICA6IGRlc2NyaXB0aW9uID09PSB1bmRlZmluZWQgPyBOYXRpdmVTeW1ib2woKSA6IE5hdGl2ZVN5bWJvbChkZXNjcmlwdGlvbik7XG4gICAgaWYgKGRlc2NyaXB0aW9uID09PSAnJykgRW1wdHlTdHJpbmdEZXNjcmlwdGlvblN0b3JlW3Jlc3VsdF0gPSB0cnVlO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4gIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMoU3ltYm9sV3JhcHBlciwgTmF0aXZlU3ltYm9sKTtcbiAgdmFyIHN5bWJvbFByb3RvdHlwZSA9IFN5bWJvbFdyYXBwZXIucHJvdG90eXBlID0gTmF0aXZlU3ltYm9sLnByb3RvdHlwZTtcbiAgc3ltYm9sUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3ltYm9sV3JhcHBlcjtcblxuICB2YXIgc3ltYm9sVG9TdHJpbmcgPSBzeW1ib2xQcm90b3R5cGUudG9TdHJpbmc7XG4gIHZhciBuYXRpdmUgPSBTdHJpbmcoTmF0aXZlU3ltYm9sKCd0ZXN0JykpID09ICdTeW1ib2wodGVzdCknO1xuICB2YXIgcmVnZXhwID0gL15TeW1ib2xcXCgoLiopXFwpW14pXSskLztcbiAgZGVmaW5lUHJvcGVydHkoc3ltYm9sUHJvdG90eXBlLCAnZGVzY3JpcHRpb24nLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gZGVzY3JpcHRpb24oKSB7XG4gICAgICB2YXIgc3ltYm9sID0gaXNPYmplY3QodGhpcykgPyB0aGlzLnZhbHVlT2YoKSA6IHRoaXM7XG4gICAgICB2YXIgc3RyaW5nID0gc3ltYm9sVG9TdHJpbmcuY2FsbChzeW1ib2wpO1xuICAgICAgaWYgKGhhcyhFbXB0eVN0cmluZ0Rlc2NyaXB0aW9uU3RvcmUsIHN5bWJvbCkpIHJldHVybiAnJztcbiAgICAgIHZhciBkZXNjID0gbmF0aXZlID8gc3RyaW5nLnNsaWNlKDcsIC0xKSA6IHN0cmluZy5yZXBsYWNlKHJlZ2V4cCwgJyQxJyk7XG4gICAgICByZXR1cm4gZGVzYyA9PT0gJycgPyB1bmRlZmluZWQgOiBkZXNjO1xuICAgIH1cbiAgfSk7XG5cbiAgJCh7IGdsb2JhbDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgICBTeW1ib2w6IFN5bWJvbFdyYXBwZXJcbiAgfSk7XG59XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiZTE2M1wiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgaGFzID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjUxMzVcIik7XG52YXIgdG9PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiN2IwYlwiKTtcbnZhciBzaGFyZWRLZXkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiZjc3MlwiKTtcbnZhciBDT1JSRUNUX1BST1RPVFlQRV9HRVRURVIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiZTE3N1wiKTtcblxudmFyIElFX1BST1RPID0gc2hhcmVkS2V5KCdJRV9QUk9UTycpO1xudmFyIE9iamVjdFByb3RvdHlwZSA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8vIGBPYmplY3QuZ2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmdldHByb3RvdHlwZW9mXG5tb2R1bGUuZXhwb3J0cyA9IENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIChPKSB7XG4gIE8gPSB0b09iamVjdChPKTtcbiAgaWYgKGhhcyhPLCBJRV9QUk9UTykpIHJldHVybiBPW0lFX1BST1RPXTtcbiAgaWYgKHR5cGVvZiBPLmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgTyBpbnN0YW5jZW9mIE8uY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gTy5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIE8gaW5zdGFuY2VvZiBPYmplY3QgPyBPYmplY3RQcm90b3R5cGUgOiBudWxsO1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCJlMTc3XCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oXCJkMDM5XCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgRi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBudWxsO1xuICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ldyBGKCkpICE9PSBGLnByb3RvdHlwZTtcbn0pO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcImUyNjBcIjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciB0b0luZGV4ZWRPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiZmM2YVwiKTtcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjQ0ZDJcIik7XG52YXIgSXRlcmF0b3JzID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjNmOGNcIik7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IF9fd2VicGFja19yZXF1aXJlX18oXCI2OWYzXCIpO1xudmFyIGRlZmluZUl0ZXJhdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjdkZDBcIik7XG5cbnZhciBBUlJBWV9JVEVSQVRPUiA9ICdBcnJheSBJdGVyYXRvcic7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihBUlJBWV9JVEVSQVRPUik7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZW50cmllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZW50cmllc1xuLy8gYEFycmF5LnByb3RvdHlwZS5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5rZXlzXG4vLyBgQXJyYXkucHJvdG90eXBlLnZhbHVlc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUudmFsdWVzXG4vLyBgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4vLyBgQ3JlYXRlQXJyYXlJdGVyYXRvcmAgaW50ZXJuYWwgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1jcmVhdGVhcnJheWl0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmluZUl0ZXJhdG9yKEFycmF5LCAnQXJyYXknLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgdHlwZTogQVJSQVlfSVRFUkFUT1IsXG4gICAgdGFyZ2V0OiB0b0luZGV4ZWRPYmplY3QoaXRlcmF0ZWQpLCAvLyB0YXJnZXRcbiAgICBpbmRleDogMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgICBraW5kOiBraW5kICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGtpbmRcbiAgfSk7XG4vLyBgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtJWFycmF5aXRlcmF0b3Jwcm90b3R5cGUlLm5leHRcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgdmFyIHRhcmdldCA9IHN0YXRlLnRhcmdldDtcbiAgdmFyIGtpbmQgPSBzdGF0ZS5raW5kO1xuICB2YXIgaW5kZXggPSBzdGF0ZS5pbmRleCsrO1xuICBpZiAoIXRhcmdldCB8fCBpbmRleCA+PSB0YXJnZXQubGVuZ3RoKSB7XG4gICAgc3RhdGUudGFyZ2V0ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuICBpZiAoa2luZCA9PSAna2V5cycpIHJldHVybiB7IHZhbHVlOiBpbmRleCwgZG9uZTogZmFsc2UgfTtcbiAgaWYgKGtpbmQgPT0gJ3ZhbHVlcycpIHJldHVybiB7IHZhbHVlOiB0YXJnZXRbaW5kZXhdLCBkb25lOiBmYWxzZSB9O1xuICByZXR1cm4geyB2YWx1ZTogW2luZGV4LCB0YXJnZXRbaW5kZXhdXSwgZG9uZTogZmFsc2UgfTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1jcmVhdGV1bm1hcHBlZGFyZ3VtZW50c29iamVjdFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtY3JlYXRlbWFwcGVkYXJndW1lbnRzb2JqZWN0XG5JdGVyYXRvcnMuQXJndW1lbnRzID0gSXRlcmF0b3JzLkFycmF5O1xuXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuYWRkVG9VbnNjb3BhYmxlcygna2V5cycpO1xuYWRkVG9VbnNjb3BhYmxlcygndmFsdWVzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCdlbnRyaWVzJyk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiZTQzOVwiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oXCIyM2U3XCIpO1xudmFyIGZhaWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImQwMzlcIik7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImZjNmFcIik7XG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjA2Y2ZcIikuZjtcbnZhciBERVNDUklQVE9SUyA9IF9fd2VicGFja19yZXF1aXJlX18oXCI4M2FiXCIpO1xuXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKDEpOyB9KTtcbnZhciBGT1JDRUQgPSAhREVTQ1JJUFRPUlMgfHwgRkFJTFNfT05fUFJJTUlUSVZFUztcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvclxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VELCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gICAgcmV0dXJuIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvcih0b0luZGV4ZWRPYmplY3QoaXQpLCBrZXkpO1xuICB9XG59KTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCJlNTM4XCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciB3ZWxsS25vd25TeW1ib2wgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiYjYyMlwiKTtcblxuZXhwb3J0cy5mID0gd2VsbEtub3duU3ltYm9sO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcImU4OTNcIjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGhhcyA9IF9fd2VicGFja19yZXF1aXJlX18oXCI1MTM1XCIpO1xudmFyIG93bktleXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiNTZlZlwiKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiMDZjZlwiKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IF9fd2VicGFja19yZXF1aXJlX18oXCI5YmYyXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuICB2YXIga2V5cyA9IG93bktleXMoc291cmNlKTtcbiAgdmFyIGRlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZjtcbiAgdmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICBpZiAoIWhhcyh0YXJnZXQsIGtleSkpIGRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTtcbiAgfVxufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCJlOGI1XCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBjbGFzc29mID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImM2YjZcIik7XG5cbi8vIGBJc0FycmF5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWlzYXJyYXlcbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBpc0FycmF5KGFyZykge1xuICByZXR1cm4gY2xhc3NvZihhcmcpID09ICdBcnJheSc7XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcImU5NWFcIjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIHdlbGxLbm93blN5bWJvbCA9IF9fd2VicGFja19yZXF1aXJlX18oXCJiNjIyXCIpO1xudmFyIEl0ZXJhdG9ycyA9IF9fd2VicGFja19yZXF1aXJlX18oXCIzZjhjXCIpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbi8vIGNoZWNrIG9uIGRlZmF1bHQgQXJyYXkgaXRlcmF0b3Jcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAhPT0gdW5kZWZpbmVkICYmIChJdGVyYXRvcnMuQXJyYXkgPT09IGl0IHx8IEFycmF5UHJvdG90eXBlW0lURVJBVE9SXSA9PT0gaXQpO1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCJlYWY5XCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfbWluaV9jc3NfZXh0cmFjdF9wbHVnaW5fZGlzdF9sb2FkZXJfanNfcmVmXzZfb25lT2ZfMV8wX25vZGVfbW9kdWxlc19jc3NfbG9hZGVyX2Rpc3RfY2pzX2pzX3JlZl82X29uZU9mXzFfMV9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc19zdHlsZVBvc3RMb2FkZXJfanNfbm9kZV9tb2R1bGVzX3Bvc3Rjc3NfbG9hZGVyX3NyY19pbmRleF9qc19yZWZfNl9vbmVPZl8xXzJfbm9kZV9tb2R1bGVzX3Z1ZXRpZnlfbG9hZGVyX2xpYl9sb2FkZXJfanNfcmVmXzE5XzBfbm9kZV9tb2R1bGVzX2NhY2hlX2xvYWRlcl9kaXN0X2Nqc19qc19yZWZfMF8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfSW5uZXJTbGlkZXJfdnVlX3Z1ZV90eXBlX3N0eWxlX2luZGV4XzBfaWRfM2QxYTRmNzZfc2NvcGVkX3RydWVfbGFuZ19jc3NfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiM2I4MVwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX21pbmlfY3NzX2V4dHJhY3RfcGx1Z2luX2Rpc3RfbG9hZGVyX2pzX3JlZl82X29uZU9mXzFfMF9ub2RlX21vZHVsZXNfY3NzX2xvYWRlcl9kaXN0X2Nqc19qc19yZWZfNl9vbmVPZl8xXzFfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfc3R5bGVQb3N0TG9hZGVyX2pzX25vZGVfbW9kdWxlc19wb3N0Y3NzX2xvYWRlcl9zcmNfaW5kZXhfanNfcmVmXzZfb25lT2ZfMV8yX25vZGVfbW9kdWxlc192dWV0aWZ5X2xvYWRlcl9saWJfbG9hZGVyX2pzX3JlZl8xOV8wX25vZGVfbW9kdWxlc19jYWNoZV9sb2FkZXJfZGlzdF9janNfanNfcmVmXzBfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX0lubmVyU2xpZGVyX3Z1ZV92dWVfdHlwZV9zdHlsZV9pbmRleF8wX2lkXzNkMWE0Zjc2X3Njb3BlZF90cnVlX2xhbmdfY3NzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9ub2RlX21vZHVsZXNfbWluaV9jc3NfZXh0cmFjdF9wbHVnaW5fZGlzdF9sb2FkZXJfanNfcmVmXzZfb25lT2ZfMV8wX25vZGVfbW9kdWxlc19jc3NfbG9hZGVyX2Rpc3RfY2pzX2pzX3JlZl82X29uZU9mXzFfMV9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc19zdHlsZVBvc3RMb2FkZXJfanNfbm9kZV9tb2R1bGVzX3Bvc3Rjc3NfbG9hZGVyX3NyY19pbmRleF9qc19yZWZfNl9vbmVPZl8xXzJfbm9kZV9tb2R1bGVzX3Z1ZXRpZnlfbG9hZGVyX2xpYl9sb2FkZXJfanNfcmVmXzE5XzBfbm9kZV9tb2R1bGVzX2NhY2hlX2xvYWRlcl9kaXN0X2Nqc19qc19yZWZfMF8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfSW5uZXJTbGlkZXJfdnVlX3Z1ZV90eXBlX3N0eWxlX2luZGV4XzBfaWRfM2QxYTRmNzZfc2NvcGVkX3RydWVfbGFuZ19jc3NfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xuLyogdW51c2VkIGhhcm1vbnkgcmVleHBvcnQgKiAqL1xuIC8qIHVudXNlZCBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBfdW51c2VkX3dlYnBhY2tfZGVmYXVsdF9leHBvcnQgPSAoX25vZGVfbW9kdWxlc19taW5pX2Nzc19leHRyYWN0X3BsdWdpbl9kaXN0X2xvYWRlcl9qc19yZWZfNl9vbmVPZl8xXzBfbm9kZV9tb2R1bGVzX2Nzc19sb2FkZXJfZGlzdF9janNfanNfcmVmXzZfb25lT2ZfMV8xX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3N0eWxlUG9zdExvYWRlcl9qc19ub2RlX21vZHVsZXNfcG9zdGNzc19sb2FkZXJfc3JjX2luZGV4X2pzX3JlZl82X29uZU9mXzFfMl9ub2RlX21vZHVsZXNfdnVldGlmeV9sb2FkZXJfbGliX2xvYWRlcl9qc19yZWZfMTlfMF9ub2RlX21vZHVsZXNfY2FjaGVfbG9hZGVyX2Rpc3RfY2pzX2pzX3JlZl8wXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19Jbm5lclNsaWRlcl92dWVfdnVlX3R5cGVfc3R5bGVfaW5kZXhfMF9pZF8zZDFhNGY3Nl9zY29wZWRfdHJ1ZV9sYW5nX2Nzc19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEpOyBcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiZjAxM1wiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX21pbmlfY3NzX2V4dHJhY3RfcGx1Z2luX2Rpc3RfbG9hZGVyX2pzX3JlZl82X29uZU9mXzFfMF9ub2RlX21vZHVsZXNfY3NzX2xvYWRlcl9kaXN0X2Nqc19qc19yZWZfNl9vbmVPZl8xXzFfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfc3R5bGVQb3N0TG9hZGVyX2pzX25vZGVfbW9kdWxlc19wb3N0Y3NzX2xvYWRlcl9zcmNfaW5kZXhfanNfcmVmXzZfb25lT2ZfMV8yX25vZGVfbW9kdWxlc192dWV0aWZ5X2xvYWRlcl9saWJfbG9hZGVyX2pzX3JlZl8xOV8wX25vZGVfbW9kdWxlc19jYWNoZV9sb2FkZXJfZGlzdF9janNfanNfcmVmXzBfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX1NsaWRlckFycm93X3Z1ZV92dWVfdHlwZV9zdHlsZV9pbmRleF8wX2lkXzIxMTM3NjAzX3Njb3BlZF90cnVlX2xhbmdfY3NzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImZkYjJcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc19taW5pX2Nzc19leHRyYWN0X3BsdWdpbl9kaXN0X2xvYWRlcl9qc19yZWZfNl9vbmVPZl8xXzBfbm9kZV9tb2R1bGVzX2Nzc19sb2FkZXJfZGlzdF9janNfanNfcmVmXzZfb25lT2ZfMV8xX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3N0eWxlUG9zdExvYWRlcl9qc19ub2RlX21vZHVsZXNfcG9zdGNzc19sb2FkZXJfc3JjX2luZGV4X2pzX3JlZl82X29uZU9mXzFfMl9ub2RlX21vZHVsZXNfdnVldGlmeV9sb2FkZXJfbGliX2xvYWRlcl9qc19yZWZfMTlfMF9ub2RlX21vZHVsZXNfY2FjaGVfbG9hZGVyX2Rpc3RfY2pzX2pzX3JlZl8wXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19TbGlkZXJBcnJvd192dWVfdnVlX3R5cGVfc3R5bGVfaW5kZXhfMF9pZF8yMTEzNzYwM19zY29wZWRfdHJ1ZV9sYW5nX2Nzc19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihfbm9kZV9tb2R1bGVzX21pbmlfY3NzX2V4dHJhY3RfcGx1Z2luX2Rpc3RfbG9hZGVyX2pzX3JlZl82X29uZU9mXzFfMF9ub2RlX21vZHVsZXNfY3NzX2xvYWRlcl9kaXN0X2Nqc19qc19yZWZfNl9vbmVPZl8xXzFfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfc3R5bGVQb3N0TG9hZGVyX2pzX25vZGVfbW9kdWxlc19wb3N0Y3NzX2xvYWRlcl9zcmNfaW5kZXhfanNfcmVmXzZfb25lT2ZfMV8yX25vZGVfbW9kdWxlc192dWV0aWZ5X2xvYWRlcl9saWJfbG9hZGVyX2pzX3JlZl8xOV8wX25vZGVfbW9kdWxlc19jYWNoZV9sb2FkZXJfZGlzdF9janNfanNfcmVmXzBfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX1NsaWRlckFycm93X3Z1ZV92dWVfdHlwZV9zdHlsZV9pbmRleF8wX2lkXzIxMTM3NjAzX3Njb3BlZF90cnVlX2xhbmdfY3NzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fKTtcbi8qIHVudXNlZCBoYXJtb255IHJlZXhwb3J0ICogKi9cbiAvKiB1bnVzZWQgaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgX3VudXNlZF93ZWJwYWNrX2RlZmF1bHRfZXhwb3J0ID0gKF9ub2RlX21vZHVsZXNfbWluaV9jc3NfZXh0cmFjdF9wbHVnaW5fZGlzdF9sb2FkZXJfanNfcmVmXzZfb25lT2ZfMV8wX25vZGVfbW9kdWxlc19jc3NfbG9hZGVyX2Rpc3RfY2pzX2pzX3JlZl82X29uZU9mXzFfMV9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc19zdHlsZVBvc3RMb2FkZXJfanNfbm9kZV9tb2R1bGVzX3Bvc3Rjc3NfbG9hZGVyX3NyY19pbmRleF9qc19yZWZfNl9vbmVPZl8xXzJfbm9kZV9tb2R1bGVzX3Z1ZXRpZnlfbG9hZGVyX2xpYl9sb2FkZXJfanNfcmVmXzE5XzBfbm9kZV9tb2R1bGVzX2NhY2hlX2xvYWRlcl9kaXN0X2Nqc19qc19yZWZfMF8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfU2xpZGVyQXJyb3dfdnVlX3Z1ZV90eXBlX3N0eWxlX2luZGV4XzBfaWRfMjExMzc2MDNfc2NvcGVkX3RydWVfbGFuZ19jc3NfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hKTsgXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcImY1ZGZcIjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IF9fd2VicGFja19yZXF1aXJlX18oXCIwMGVlXCIpO1xudmFyIGNsYXNzb2ZSYXcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiYzZiNlwiKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiYjYyMlwiKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG4vLyBFUzMgd3JvbmcgaGVyZVxudmFyIENPUlJFQ1RfQVJHVU1FTlRTID0gY2xhc3NvZlJhdyhmdW5jdGlvbiAoKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPT0gJ0FyZ3VtZW50cyc7XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIFNjcmlwdCBBY2Nlc3MgRGVuaWVkIGVycm9yXG52YXIgdHJ5R2V0ID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gaXRba2V5XTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcblxuLy8gZ2V0dGluZyB0YWcgZnJvbSBFUzYrIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYFxubW9kdWxlLmV4cG9ydHMgPSBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPyBjbGFzc29mUmF3IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCB0YWcsIHJlc3VsdDtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG4gICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG4gICAgOiB0eXBlb2YgKHRhZyA9IHRyeUdldChPID0gT2JqZWN0KGl0KSwgVE9fU1RSSU5HX1RBRykpID09ICdzdHJpbmcnID8gdGFnXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBDT1JSRUNUX0FSR1VNRU5UUyA/IGNsYXNzb2ZSYXcoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAocmVzdWx0ID0gY2xhc3NvZlJhdyhPKSkgPT0gJ09iamVjdCcgJiYgdHlwZW9mIE8uY2FsbGVlID09ICdmdW5jdGlvbicgPyAnQXJndW1lbnRzJyA6IHJlc3VsdDtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiZjZmZFwiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG4vLyBkb2N1bWVudC5jdXJyZW50U2NyaXB0IHBvbHlmaWxsIGJ5IEFkYW0gTWlsbGVyXG5cbi8vIE1JVCBsaWNlbnNlXG5cbihmdW5jdGlvbihkb2N1bWVudCl7XG4gIHZhciBjdXJyZW50U2NyaXB0ID0gXCJjdXJyZW50U2NyaXB0XCIsXG4gICAgICBzY3JpcHRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpOyAvLyBMaXZlIE5vZGVMaXN0IGNvbGxlY3Rpb25cblxuICAvLyBJZiBicm93c2VyIG5lZWRzIGN1cnJlbnRTY3JpcHQgcG9seWZpbGwsIGFkZCBnZXQgY3VycmVudFNjcmlwdCgpIHRvIHRoZSBkb2N1bWVudCBvYmplY3RcbiAgaWYgKCEoY3VycmVudFNjcmlwdCBpbiBkb2N1bWVudCkpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZG9jdW1lbnQsIGN1cnJlbnRTY3JpcHQsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKXtcblxuICAgICAgICAvLyBJRSA2LTEwIHN1cHBvcnRzIHNjcmlwdCByZWFkeVN0YXRlXG4gICAgICAgIC8vIElFIDEwKyBzdXBwb3J0IHN0YWNrIHRyYWNlXG4gICAgICAgIHRyeSB7IHRocm93IG5ldyBFcnJvcigpOyB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcblxuICAgICAgICAgIC8vIEZpbmQgdGhlIHNlY29uZCBtYXRjaCBmb3IgdGhlIFwiYXRcIiBzdHJpbmcgdG8gZ2V0IGZpbGUgc3JjIHVybCBmcm9tIHN0YWNrLlxuICAgICAgICAgIC8vIFNwZWNpZmljYWxseSB3b3JrcyB3aXRoIHRoZSBmb3JtYXQgb2Ygc3RhY2sgdHJhY2VzIGluIElFLlxuICAgICAgICAgIHZhciBpLCByZXMgPSAoKC8uKmF0IFteXFwoXSpcXCgoLiopOi4rOi4rXFwpJC9pZykuZXhlYyhlcnIuc3RhY2spIHx8IFtmYWxzZV0pWzFdO1xuXG4gICAgICAgICAgLy8gRm9yIGFsbCBzY3JpcHRzIG9uIHRoZSBwYWdlLCBpZiBzcmMgbWF0Y2hlcyBvciBpZiByZWFkeSBzdGF0ZSBpcyBpbnRlcmFjdGl2ZSwgcmV0dXJuIHRoZSBzY3JpcHQgdGFnXG4gICAgICAgICAgZm9yKGkgaW4gc2NyaXB0cyl7XG4gICAgICAgICAgICBpZihzY3JpcHRzW2ldLnNyYyA9PSByZXMgfHwgc2NyaXB0c1tpXS5yZWFkeVN0YXRlID09IFwiaW50ZXJhY3RpdmVcIil7XG4gICAgICAgICAgICAgIHJldHVybiBzY3JpcHRzW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIElmIG5vIG1hdGNoLCByZXR1cm4gbnVsbFxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn0pKGRvY3VtZW50KTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCJmNzcyXCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBzaGFyZWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiNTY5MlwiKTtcbnZhciB1aWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiOTBlM1wiKTtcblxudmFyIGtleXMgPSBzaGFyZWQoJ2tleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBrZXlzW2tleV0gfHwgKGtleXNba2V5XSA9IHVpZChrZXkpKTtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiZjdmZVwiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24oZ2xvYmFsKSB7LyoqXG4gKiBsb2Rhc2ggKEN1c3RvbSBCdWlsZCkgPGh0dHBzOi8vbG9kYXNoLmNvbS8+XG4gKiBCdWlsZDogYGxvZGFzaCBtb2R1bGFyaXplIGV4cG9ydHM9XCJucG1cIiAtbyAuL2BcbiAqIENvcHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzIDxodHRwczovL2pxdWVyeS5vcmcvPlxuICogUmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UgPGh0dHBzOi8vbG9kYXNoLmNvbS9saWNlbnNlPlxuICogQmFzZWQgb24gVW5kZXJzY29yZS5qcyAxLjguMyA8aHR0cDovL3VuZGVyc2NvcmVqcy5vcmcvTElDRU5TRT5cbiAqIENvcHlyaWdodCBKZXJlbXkgQXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9yc1xuICovXG5cbi8qKiBVc2VkIGFzIHRoZSBgVHlwZUVycm9yYCBtZXNzYWdlIGZvciBcIkZ1bmN0aW9uc1wiIG1ldGhvZHMuICovXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBOQU4gPSAwIC8gMDtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG4vKiogVXNlZCB0byBtYXRjaCBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlLiAqL1xudmFyIHJlVHJpbSA9IC9eXFxzK3xcXHMrJC9nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgYmFkIHNpZ25lZCBoZXhhZGVjaW1hbCBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlSXNCYWRIZXggPSAvXlstK10weFswLTlhLWZdKyQvaTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGJpbmFyeSBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlSXNCaW5hcnkgPSAvXjBiWzAxXSskL2k7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBvY3RhbCBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlSXNPY3RhbCA9IC9eMG9bMC03XSskL2k7XG5cbi8qKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB3aXRob3V0IGEgZGVwZW5kZW5jeSBvbiBgcm9vdGAuICovXG52YXIgZnJlZVBhcnNlSW50ID0gcGFyc2VJbnQ7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgc2VsZmAuICovXG52YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjtcblxuLyoqIFVzZWQgYXMgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QuICovXG52YXIgcm9vdCA9IGZyZWVHbG9iYWwgfHwgZnJlZVNlbGYgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heCxcbiAgICBuYXRpdmVNaW4gPSBNYXRoLm1pbjtcblxuLyoqXG4gKiBHZXRzIHRoZSB0aW1lc3RhbXAgb2YgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdGhhdCBoYXZlIGVsYXBzZWQgc2luY2VcbiAqIHRoZSBVbml4IGVwb2NoICgxIEphbnVhcnkgMTk3MCAwMDowMDowMCBVVEMpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBEYXRlXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSB0aW1lc3RhbXAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZGVmZXIoZnVuY3Rpb24oc3RhbXApIHtcbiAqICAgY29uc29sZS5sb2coXy5ub3coKSAtIHN0YW1wKTtcbiAqIH0sIF8ubm93KCkpO1xuICogLy8gPT4gTG9ncyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpdCB0b29rIGZvciB0aGUgZGVmZXJyZWQgaW52b2NhdGlvbi5cbiAqL1xudmFyIG5vdyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gcm9vdC5EYXRlLm5vdygpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZGVib3VuY2VkIGZ1bmN0aW9uIHRoYXQgZGVsYXlzIGludm9raW5nIGBmdW5jYCB1bnRpbCBhZnRlciBgd2FpdGBcbiAqIG1pbGxpc2Vjb25kcyBoYXZlIGVsYXBzZWQgc2luY2UgdGhlIGxhc3QgdGltZSB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uIHdhc1xuICogaW52b2tlZC4gVGhlIGRlYm91bmNlZCBmdW5jdGlvbiBjb21lcyB3aXRoIGEgYGNhbmNlbGAgbWV0aG9kIHRvIGNhbmNlbFxuICogZGVsYXllZCBgZnVuY2AgaW52b2NhdGlvbnMgYW5kIGEgYGZsdXNoYCBtZXRob2QgdG8gaW1tZWRpYXRlbHkgaW52b2tlIHRoZW0uXG4gKiBQcm92aWRlIGBvcHRpb25zYCB0byBpbmRpY2F0ZSB3aGV0aGVyIGBmdW5jYCBzaG91bGQgYmUgaW52b2tlZCBvbiB0aGVcbiAqIGxlYWRpbmcgYW5kL29yIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIGB3YWl0YCB0aW1lb3V0LiBUaGUgYGZ1bmNgIGlzIGludm9rZWRcbiAqIHdpdGggdGhlIGxhc3QgYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24uIFN1YnNlcXVlbnRcbiAqIGNhbGxzIHRvIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24gcmV0dXJuIHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgYGZ1bmNgXG4gKiBpbnZvY2F0aW9uLlxuICpcbiAqICoqTm90ZToqKiBJZiBgbGVhZGluZ2AgYW5kIGB0cmFpbGluZ2Agb3B0aW9ucyBhcmUgYHRydWVgLCBgZnVuY2AgaXNcbiAqIGludm9rZWQgb24gdGhlIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQgb25seSBpZiB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uXG4gKiBpcyBpbnZva2VkIG1vcmUgdGhhbiBvbmNlIGR1cmluZyB0aGUgYHdhaXRgIHRpbWVvdXQuXG4gKlxuICogSWYgYHdhaXRgIGlzIGAwYCBhbmQgYGxlYWRpbmdgIGlzIGBmYWxzZWAsIGBmdW5jYCBpbnZvY2F0aW9uIGlzIGRlZmVycmVkXG4gKiB1bnRpbCB0byB0aGUgbmV4dCB0aWNrLCBzaW1pbGFyIHRvIGBzZXRUaW1lb3V0YCB3aXRoIGEgdGltZW91dCBvZiBgMGAuXG4gKlxuICogU2VlIFtEYXZpZCBDb3JiYWNobydzIGFydGljbGVdKGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vZGVib3VuY2luZy10aHJvdHRsaW5nLWV4cGxhaW5lZC1leGFtcGxlcy8pXG4gKiBmb3IgZGV0YWlscyBvdmVyIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIGBfLmRlYm91bmNlYCBhbmQgYF8udGhyb3R0bGVgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gZGVib3VuY2UuXG4gKiBAcGFyYW0ge251bWJlcn0gW3dhaXQ9MF0gVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gZGVsYXkuXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIFRoZSBvcHRpb25zIG9iamVjdC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMubGVhZGluZz1mYWxzZV1cbiAqICBTcGVjaWZ5IGludm9raW5nIG9uIHRoZSBsZWFkaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQuXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWF4V2FpdF1cbiAqICBUaGUgbWF4aW11bSB0aW1lIGBmdW5jYCBpcyBhbGxvd2VkIHRvIGJlIGRlbGF5ZWQgYmVmb3JlIGl0J3MgaW52b2tlZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudHJhaWxpbmc9dHJ1ZV1cbiAqICBTcGVjaWZ5IGludm9raW5nIG9uIHRoZSB0cmFpbGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZGVib3VuY2VkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiAvLyBBdm9pZCBjb3N0bHkgY2FsY3VsYXRpb25zIHdoaWxlIHRoZSB3aW5kb3cgc2l6ZSBpcyBpbiBmbHV4LlxuICogalF1ZXJ5KHdpbmRvdykub24oJ3Jlc2l6ZScsIF8uZGVib3VuY2UoY2FsY3VsYXRlTGF5b3V0LCAxNTApKTtcbiAqXG4gKiAvLyBJbnZva2UgYHNlbmRNYWlsYCB3aGVuIGNsaWNrZWQsIGRlYm91bmNpbmcgc3Vic2VxdWVudCBjYWxscy5cbiAqIGpRdWVyeShlbGVtZW50KS5vbignY2xpY2snLCBfLmRlYm91bmNlKHNlbmRNYWlsLCAzMDAsIHtcbiAqICAgJ2xlYWRpbmcnOiB0cnVlLFxuICogICAndHJhaWxpbmcnOiBmYWxzZVxuICogfSkpO1xuICpcbiAqIC8vIEVuc3VyZSBgYmF0Y2hMb2dgIGlzIGludm9rZWQgb25jZSBhZnRlciAxIHNlY29uZCBvZiBkZWJvdW5jZWQgY2FsbHMuXG4gKiB2YXIgZGVib3VuY2VkID0gXy5kZWJvdW5jZShiYXRjaExvZywgMjUwLCB7ICdtYXhXYWl0JzogMTAwMCB9KTtcbiAqIHZhciBzb3VyY2UgPSBuZXcgRXZlbnRTb3VyY2UoJy9zdHJlYW0nKTtcbiAqIGpRdWVyeShzb3VyY2UpLm9uKCdtZXNzYWdlJywgZGVib3VuY2VkKTtcbiAqXG4gKiAvLyBDYW5jZWwgdGhlIHRyYWlsaW5nIGRlYm91bmNlZCBpbnZvY2F0aW9uLlxuICogalF1ZXJ5KHdpbmRvdykub24oJ3BvcHN0YXRlJywgZGVib3VuY2VkLmNhbmNlbCk7XG4gKi9cbmZ1bmN0aW9uIGRlYm91bmNlKGZ1bmMsIHdhaXQsIG9wdGlvbnMpIHtcbiAgdmFyIGxhc3RBcmdzLFxuICAgICAgbGFzdFRoaXMsXG4gICAgICBtYXhXYWl0LFxuICAgICAgcmVzdWx0LFxuICAgICAgdGltZXJJZCxcbiAgICAgIGxhc3RDYWxsVGltZSxcbiAgICAgIGxhc3RJbnZva2VUaW1lID0gMCxcbiAgICAgIGxlYWRpbmcgPSBmYWxzZSxcbiAgICAgIG1heGluZyA9IGZhbHNlLFxuICAgICAgdHJhaWxpbmcgPSB0cnVlO1xuXG4gIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICB9XG4gIHdhaXQgPSB0b051bWJlcih3YWl0KSB8fCAwO1xuICBpZiAoaXNPYmplY3Qob3B0aW9ucykpIHtcbiAgICBsZWFkaW5nID0gISFvcHRpb25zLmxlYWRpbmc7XG4gICAgbWF4aW5nID0gJ21heFdhaXQnIGluIG9wdGlvbnM7XG4gICAgbWF4V2FpdCA9IG1heGluZyA/IG5hdGl2ZU1heCh0b051bWJlcihvcHRpb25zLm1heFdhaXQpIHx8IDAsIHdhaXQpIDogbWF4V2FpdDtcbiAgICB0cmFpbGluZyA9ICd0cmFpbGluZycgaW4gb3B0aW9ucyA/ICEhb3B0aW9ucy50cmFpbGluZyA6IHRyYWlsaW5nO1xuICB9XG5cbiAgZnVuY3Rpb24gaW52b2tlRnVuYyh0aW1lKSB7XG4gICAgdmFyIGFyZ3MgPSBsYXN0QXJncyxcbiAgICAgICAgdGhpc0FyZyA9IGxhc3RUaGlzO1xuXG4gICAgbGFzdEFyZ3MgPSBsYXN0VGhpcyA9IHVuZGVmaW5lZDtcbiAgICBsYXN0SW52b2tlVGltZSA9IHRpbWU7XG4gICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gbGVhZGluZ0VkZ2UodGltZSkge1xuICAgIC8vIFJlc2V0IGFueSBgbWF4V2FpdGAgdGltZXIuXG4gICAgbGFzdEludm9rZVRpbWUgPSB0aW1lO1xuICAgIC8vIFN0YXJ0IHRoZSB0aW1lciBmb3IgdGhlIHRyYWlsaW5nIGVkZ2UuXG4gICAgdGltZXJJZCA9IHNldFRpbWVvdXQodGltZXJFeHBpcmVkLCB3YWl0KTtcbiAgICAvLyBJbnZva2UgdGhlIGxlYWRpbmcgZWRnZS5cbiAgICByZXR1cm4gbGVhZGluZyA/IGludm9rZUZ1bmModGltZSkgOiByZXN1bHQ7XG4gIH1cblxuICBmdW5jdGlvbiByZW1haW5pbmdXYWl0KHRpbWUpIHtcbiAgICB2YXIgdGltZVNpbmNlTGFzdENhbGwgPSB0aW1lIC0gbGFzdENhbGxUaW1lLFxuICAgICAgICB0aW1lU2luY2VMYXN0SW52b2tlID0gdGltZSAtIGxhc3RJbnZva2VUaW1lLFxuICAgICAgICByZXN1bHQgPSB3YWl0IC0gdGltZVNpbmNlTGFzdENhbGw7XG5cbiAgICByZXR1cm4gbWF4aW5nID8gbmF0aXZlTWluKHJlc3VsdCwgbWF4V2FpdCAtIHRpbWVTaW5jZUxhc3RJbnZva2UpIDogcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gc2hvdWxkSW52b2tlKHRpbWUpIHtcbiAgICB2YXIgdGltZVNpbmNlTGFzdENhbGwgPSB0aW1lIC0gbGFzdENhbGxUaW1lLFxuICAgICAgICB0aW1lU2luY2VMYXN0SW52b2tlID0gdGltZSAtIGxhc3RJbnZva2VUaW1lO1xuXG4gICAgLy8gRWl0aGVyIHRoaXMgaXMgdGhlIGZpcnN0IGNhbGwsIGFjdGl2aXR5IGhhcyBzdG9wcGVkIGFuZCB3ZSdyZSBhdCB0aGVcbiAgICAvLyB0cmFpbGluZyBlZGdlLCB0aGUgc3lzdGVtIHRpbWUgaGFzIGdvbmUgYmFja3dhcmRzIGFuZCB3ZSdyZSB0cmVhdGluZ1xuICAgIC8vIGl0IGFzIHRoZSB0cmFpbGluZyBlZGdlLCBvciB3ZSd2ZSBoaXQgdGhlIGBtYXhXYWl0YCBsaW1pdC5cbiAgICByZXR1cm4gKGxhc3RDYWxsVGltZSA9PT0gdW5kZWZpbmVkIHx8ICh0aW1lU2luY2VMYXN0Q2FsbCA+PSB3YWl0KSB8fFxuICAgICAgKHRpbWVTaW5jZUxhc3RDYWxsIDwgMCkgfHwgKG1heGluZyAmJiB0aW1lU2luY2VMYXN0SW52b2tlID49IG1heFdhaXQpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRpbWVyRXhwaXJlZCgpIHtcbiAgICB2YXIgdGltZSA9IG5vdygpO1xuICAgIGlmIChzaG91bGRJbnZva2UodGltZSkpIHtcbiAgICAgIHJldHVybiB0cmFpbGluZ0VkZ2UodGltZSk7XG4gICAgfVxuICAgIC8vIFJlc3RhcnQgdGhlIHRpbWVyLlxuICAgIHRpbWVySWQgPSBzZXRUaW1lb3V0KHRpbWVyRXhwaXJlZCwgcmVtYWluaW5nV2FpdCh0aW1lKSk7XG4gIH1cblxuICBmdW5jdGlvbiB0cmFpbGluZ0VkZ2UodGltZSkge1xuICAgIHRpbWVySWQgPSB1bmRlZmluZWQ7XG5cbiAgICAvLyBPbmx5IGludm9rZSBpZiB3ZSBoYXZlIGBsYXN0QXJnc2Agd2hpY2ggbWVhbnMgYGZ1bmNgIGhhcyBiZWVuXG4gICAgLy8gZGVib3VuY2VkIGF0IGxlYXN0IG9uY2UuXG4gICAgaWYgKHRyYWlsaW5nICYmIGxhc3RBcmdzKSB7XG4gICAgICByZXR1cm4gaW52b2tlRnVuYyh0aW1lKTtcbiAgICB9XG4gICAgbGFzdEFyZ3MgPSBsYXN0VGhpcyA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gY2FuY2VsKCkge1xuICAgIGlmICh0aW1lcklkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcklkKTtcbiAgICB9XG4gICAgbGFzdEludm9rZVRpbWUgPSAwO1xuICAgIGxhc3RBcmdzID0gbGFzdENhbGxUaW1lID0gbGFzdFRoaXMgPSB0aW1lcklkID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgZnVuY3Rpb24gZmx1c2goKSB7XG4gICAgcmV0dXJuIHRpbWVySWQgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IHRyYWlsaW5nRWRnZShub3coKSk7XG4gIH1cblxuICBmdW5jdGlvbiBkZWJvdW5jZWQoKSB7XG4gICAgdmFyIHRpbWUgPSBub3coKSxcbiAgICAgICAgaXNJbnZva2luZyA9IHNob3VsZEludm9rZSh0aW1lKTtcblxuICAgIGxhc3RBcmdzID0gYXJndW1lbnRzO1xuICAgIGxhc3RUaGlzID0gdGhpcztcbiAgICBsYXN0Q2FsbFRpbWUgPSB0aW1lO1xuXG4gICAgaWYgKGlzSW52b2tpbmcpIHtcbiAgICAgIGlmICh0aW1lcklkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGxlYWRpbmdFZGdlKGxhc3RDYWxsVGltZSk7XG4gICAgICB9XG4gICAgICBpZiAobWF4aW5nKSB7XG4gICAgICAgIC8vIEhhbmRsZSBpbnZvY2F0aW9ucyBpbiBhIHRpZ2h0IGxvb3AuXG4gICAgICAgIHRpbWVySWQgPSBzZXRUaW1lb3V0KHRpbWVyRXhwaXJlZCwgd2FpdCk7XG4gICAgICAgIHJldHVybiBpbnZva2VGdW5jKGxhc3RDYWxsVGltZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aW1lcklkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRpbWVySWQgPSBzZXRUaW1lb3V0KHRpbWVyRXhwaXJlZCwgd2FpdCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgZGVib3VuY2VkLmNhbmNlbCA9IGNhbmNlbDtcbiAgZGVib3VuY2VkLmZsdXNoID0gZmx1c2g7XG4gIHJldHVybiBkZWJvdW5jZWQ7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgdGhlXG4gKiBbbGFuZ3VhZ2UgdHlwZV0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLWVjbWFzY3JpcHQtbGFuZ3VhZ2UtdHlwZXMpXG4gKiBvZiBgT2JqZWN0YC4gKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3Qoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KF8ubm9vcCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gISF2YWx1ZSAmJiAodHlwZSA9PSAnb2JqZWN0JyB8fCB0eXBlID09ICdmdW5jdGlvbicpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gIHJldHVybiAhIXZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jztcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN5bWJvbGAgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN5bWJvbCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU3ltYm9sKFN5bWJvbC5pdGVyYXRvcik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1N5bWJvbCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzeW1ib2wnIHx8XG4gICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgb2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT0gc3ltYm9sVGFnKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgbnVtYmVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgbnVtYmVyLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvTnVtYmVyKDMuMik7XG4gKiAvLyA9PiAzLjJcbiAqXG4gKiBfLnRvTnVtYmVyKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gNWUtMzI0XG4gKlxuICogXy50b051bWJlcihJbmZpbml0eSk7XG4gKiAvLyA9PiBJbmZpbml0eVxuICpcbiAqIF8udG9OdW1iZXIoJzMuMicpO1xuICogLy8gPT4gMy4yXG4gKi9cbmZ1bmN0aW9uIHRvTnVtYmVyKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiBOQU47XG4gIH1cbiAgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHZhciBvdGhlciA9IHR5cGVvZiB2YWx1ZS52YWx1ZU9mID09ICdmdW5jdGlvbicgPyB2YWx1ZS52YWx1ZU9mKCkgOiB2YWx1ZTtcbiAgICB2YWx1ZSA9IGlzT2JqZWN0KG90aGVyKSA/IChvdGhlciArICcnKSA6IG90aGVyO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IDAgPyB2YWx1ZSA6ICt2YWx1ZTtcbiAgfVxuICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UocmVUcmltLCAnJyk7XG4gIHZhciBpc0JpbmFyeSA9IHJlSXNCaW5hcnkudGVzdCh2YWx1ZSk7XG4gIHJldHVybiAoaXNCaW5hcnkgfHwgcmVJc09jdGFsLnRlc3QodmFsdWUpKVxuICAgID8gZnJlZVBhcnNlSW50KHZhbHVlLnNsaWNlKDIpLCBpc0JpbmFyeSA/IDIgOiA4KVxuICAgIDogKHJlSXNCYWRIZXgudGVzdCh2YWx1ZSkgPyBOQU4gOiArdmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRlYm91bmNlO1xuXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwodGhpcywgX193ZWJwYWNrX3JlcXVpcmVfXyhcImM4YmFcIikpKVxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCJmYjE1XCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLy8gRVNNIENPTVBBVCBGTEFHXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL0B2dWUvY2xpLXNlcnZpY2UvbGliL2NvbW1hbmRzL2J1aWxkL3NldFB1YmxpY1BhdGguanNcbi8vIFRoaXMgZmlsZSBpcyBpbXBvcnRlZCBpbnRvIGxpYi93YyBjbGllbnQgYnVuZGxlcy5cblxuaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gIGlmICh0cnVlKSB7XG4gICAgX193ZWJwYWNrX3JlcXVpcmVfXyhcImY2ZmRcIilcbiAgfVxuXG4gIHZhciBzZXRQdWJsaWNQYXRoX2lcbiAgaWYgKChzZXRQdWJsaWNQYXRoX2kgPSB3aW5kb3cuZG9jdW1lbnQuY3VycmVudFNjcmlwdCkgJiYgKHNldFB1YmxpY1BhdGhfaSA9IHNldFB1YmxpY1BhdGhfaS5zcmMubWF0Y2goLyguK1xcLylbXi9dK1xcLmpzKFxcPy4qKT8kLykpKSB7XG4gICAgX193ZWJwYWNrX3JlcXVpcmVfXy5wID0gc2V0UHVibGljUGF0aF9pWzFdIC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgfVxufVxuXG4vLyBJbmRpY2F0ZSB0byB3ZWJwYWNrIHRoYXQgdGhpcyBmaWxlIGNhbiBiZSBjb25jYXRlbmF0ZWRcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNldFB1YmxpY1BhdGggPSAobnVsbCk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZpbHRlci5qc1xudmFyIGVzX2FycmF5X2ZpbHRlciA9IF9fd2VicGFja19yZXF1aXJlX18oXCI0ZGU0XCIpO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5mb3ItZWFjaC5qc1xudmFyIGVzX2FycmF5X2Zvcl9lYWNoID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjQxNjBcIik7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmpvaW4uanNcbnZhciBlc19hcnJheV9qb2luID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImExNWJcIik7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5Lm1hcC5qc1xudmFyIGVzX2FycmF5X21hcCA9IF9fd2VicGFja19yZXF1aXJlX18oXCJkODFkXCIpO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5zbGljZS5qc1xudmFyIGVzX2FycmF5X3NsaWNlID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImZiNmFcIik7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC52YWx1ZXMuanNcbnZhciBlc19vYmplY3RfdmFsdWVzID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjA3YWNcIik7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuZm9yLWVhY2guanNcbnZhciB3ZWJfZG9tX2NvbGxlY3Rpb25zX2Zvcl9lYWNoID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjE1OWJcIik7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5qc1xudmFyIGVzX3N5bWJvbCA9IF9fd2VicGFja19yZXF1aXJlX18oXCJhNGQzXCIpO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzXG52YXIgZXNfb2JqZWN0X2dldF9vd25fcHJvcGVydHlfZGVzY3JpcHRvciA9IF9fd2VicGFja19yZXF1aXJlX18oXCJlNDM5XCIpO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycy5qc1xudmFyIGVzX29iamVjdF9nZXRfb3duX3Byb3BlcnR5X2Rlc2NyaXB0b3JzID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImRiYjRcIik7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5rZXlzLmpzXG52YXIgZXNfb2JqZWN0X2tleXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiYjY0YlwiKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanNcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMi5qc1xuXG5cblxuXG5cblxuXG5cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblxuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgIHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpO1xuICAgIGlmIChlbnVtZXJhYmxlT25seSkgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHtcbiAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlO1xuICAgIH0pO1xuICAgIGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTtcbiAgfVxuXG4gIHJldHVybiBrZXlzO1xufVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkMih0YXJnZXQpIHtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTtcblxuICAgIGlmIChpICUgMikge1xuICAgICAgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cbi8vIEVYVEVSTkFMIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvanNvbjJtcS9pbmRleC5qc1xudmFyIGpzb24ybXEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiYTQ4YlwiKTtcbnZhciBqc29uMm1xX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGpzb24ybXEpO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9jYWNoZS1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tMTItMCEuL25vZGVfbW9kdWxlcy90aHJlYWQtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVldGlmeS1sb2FkZXIvbGliL2xvYWRlci5qcz8/cmVmLS0xOS0wIS4vbm9kZV9tb2R1bGVzL2NhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS0wLTAhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy9taXhpblByb3BzVXBkYXRlZC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBtaXhpblByb3BzVXBkYXRlZHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIGNvbXB1dGVkOiB7XG4gICAgaXNQcm9wc1VwZGF0ZWQ6IGZ1bmN0aW9uIGlzUHJvcHNVcGRhdGVkKCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgLy8gUmVhZCBwcm9wcyB0aGF0IG5lZWQgdG8gYmUgbGlzdGVuZWQgZm9yIGNoYW5nZXMuXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLiRwcm9wcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHJldHVybiBfdGhpc1trZXldO1xuICAgICAgfSk7IC8vIFJldHVybiBhIGRpZmZlcmVudCB2YWx1ZSBlYWNoIHRpbWUuIGBEYXRlLm5vdygpYCBpcyBub3QgZ3VhcmFudGVlZCB0byBiZSB1bmlxdWUuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLXNpZGUtZWZmZWN0cy1pbi1jb21wdXRlZC1wcm9wZXJ0aWVzXG5cbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZVN3aXRjaCA9ICF0aGlzLnVwZGF0ZVN3aXRjaDtcbiAgICB9XG4gIH0sXG4gIHdhdGNoOiB7XG4gICAgaXNQcm9wc1VwZGF0ZWQ6IGZ1bmN0aW9uIGlzUHJvcHNVcGRhdGVkKCkge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLm9uUHJvcHNVcGRhdGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMub25Qcm9wc1VwZGF0ZWQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvbWl4aW5Qcm9wc1VwZGF0ZWQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19taXhpblByb3BzVXBkYXRlZHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChtaXhpblByb3BzVXBkYXRlZHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXG4vKiBnbG9iYWxzIF9fVlVFX1NTUl9DT05URVhUX18gKi9cblxuLy8gSU1QT1JUQU5UOiBEbyBOT1QgdXNlIEVTMjAxNSBmZWF0dXJlcyBpbiB0aGlzIGZpbGUgKGV4Y2VwdCBmb3IgbW9kdWxlcykuXG4vLyBUaGlzIG1vZHVsZSBpcyBhIHJ1bnRpbWUgdXRpbGl0eSBmb3IgY2xlYW5lciBjb21wb25lbnQgbW9kdWxlIG91dHB1dCBhbmQgd2lsbFxuLy8gYmUgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIHdlYnBhY2sgdXNlciBidW5kbGUuXG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNvbXBvbmVudCAoXG4gIHNjcmlwdEV4cG9ydHMsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmdW5jdGlvbmFsVGVtcGxhdGUsXG4gIGluamVjdFN0eWxlcyxcbiAgc2NvcGVJZCxcbiAgbW9kdWxlSWRlbnRpZmllciwgLyogc2VydmVyIG9ubHkgKi9cbiAgc2hhZG93TW9kZSAvKiB2dWUtY2xpIG9ubHkgKi9cbikge1xuICAvLyBWdWUuZXh0ZW5kIGNvbnN0cnVjdG9yIGV4cG9ydCBpbnRlcm9wXG4gIHZhciBvcHRpb25zID0gdHlwZW9mIHNjcmlwdEV4cG9ydHMgPT09ICdmdW5jdGlvbidcbiAgICA/IHNjcmlwdEV4cG9ydHMub3B0aW9uc1xuICAgIDogc2NyaXB0RXhwb3J0c1xuXG4gIC8vIHJlbmRlciBmdW5jdGlvbnNcbiAgaWYgKHJlbmRlcikge1xuICAgIG9wdGlvbnMucmVuZGVyID0gcmVuZGVyXG4gICAgb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnMgPSBzdGF0aWNSZW5kZXJGbnNcbiAgICBvcHRpb25zLl9jb21waWxlZCA9IHRydWVcbiAgfVxuXG4gIC8vIGZ1bmN0aW9uYWwgdGVtcGxhdGVcbiAgaWYgKGZ1bmN0aW9uYWxUZW1wbGF0ZSkge1xuICAgIG9wdGlvbnMuZnVuY3Rpb25hbCA9IHRydWVcbiAgfVxuXG4gIC8vIHNjb3BlZElkXG4gIGlmIChzY29wZUlkKSB7XG4gICAgb3B0aW9ucy5fc2NvcGVJZCA9ICdkYXRhLXYtJyArIHNjb3BlSWRcbiAgfVxuXG4gIHZhciBob29rXG4gIGlmIChtb2R1bGVJZGVudGlmaWVyKSB7IC8vIHNlcnZlciBidWlsZFxuICAgIGhvb2sgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgLy8gMi4zIGluamVjdGlvblxuICAgICAgY29udGV4dCA9XG4gICAgICAgIGNvbnRleHQgfHwgLy8gY2FjaGVkIGNhbGxcbiAgICAgICAgKHRoaXMuJHZub2RlICYmIHRoaXMuJHZub2RlLnNzckNvbnRleHQpIHx8IC8vIHN0YXRlZnVsXG4gICAgICAgICh0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudC4kdm5vZGUgJiYgdGhpcy5wYXJlbnQuJHZub2RlLnNzckNvbnRleHQpIC8vIGZ1bmN0aW9uYWxcbiAgICAgIC8vIDIuMiB3aXRoIHJ1bkluTmV3Q29udGV4dDogdHJ1ZVxuICAgICAgaWYgKCFjb250ZXh0ICYmIHR5cGVvZiBfX1ZVRV9TU1JfQ09OVEVYVF9fICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb250ZXh0ID0gX19WVUVfU1NSX0NPTlRFWFRfX1xuICAgICAgfVxuICAgICAgLy8gaW5qZWN0IGNvbXBvbmVudCBzdHlsZXNcbiAgICAgIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICAgICAgaW5qZWN0U3R5bGVzLmNhbGwodGhpcywgY29udGV4dClcbiAgICAgIH1cbiAgICAgIC8vIHJlZ2lzdGVyIGNvbXBvbmVudCBtb2R1bGUgaWRlbnRpZmllciBmb3IgYXN5bmMgY2h1bmsgaW5mZXJyZW5jZVxuICAgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMpIHtcbiAgICAgICAgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMuYWRkKG1vZHVsZUlkZW50aWZpZXIpXG4gICAgICB9XG4gICAgfVxuICAgIC8vIHVzZWQgYnkgc3NyIGluIGNhc2UgY29tcG9uZW50IGlzIGNhY2hlZCBhbmQgYmVmb3JlQ3JlYXRlXG4gICAgLy8gbmV2ZXIgZ2V0cyBjYWxsZWRcbiAgICBvcHRpb25zLl9zc3JSZWdpc3RlciA9IGhvb2tcbiAgfSBlbHNlIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICBob29rID0gc2hhZG93TW9kZVxuICAgICAgPyBmdW5jdGlvbiAoKSB7IGluamVjdFN0eWxlcy5jYWxsKHRoaXMsIHRoaXMuJHJvb3QuJG9wdGlvbnMuc2hhZG93Um9vdCkgfVxuICAgICAgOiBpbmplY3RTdHlsZXNcbiAgfVxuXG4gIGlmIChob29rKSB7XG4gICAgaWYgKG9wdGlvbnMuZnVuY3Rpb25hbCkge1xuICAgICAgLy8gZm9yIHRlbXBsYXRlLW9ubHkgaG90LXJlbG9hZCBiZWNhdXNlIGluIHRoYXQgY2FzZSB0aGUgcmVuZGVyIGZuIGRvZXNuJ3RcbiAgICAgIC8vIGdvIHRocm91Z2ggdGhlIG5vcm1hbGl6ZXJcbiAgICAgIG9wdGlvbnMuX2luamVjdFN0eWxlcyA9IGhvb2tcbiAgICAgIC8vIHJlZ2lzdGVyIGZvciBmdW5jdGlvbmFsIGNvbXBvbmVudCBpbiB2dWUgZmlsZVxuICAgICAgdmFyIG9yaWdpbmFsUmVuZGVyID0gb3B0aW9ucy5yZW5kZXJcbiAgICAgIG9wdGlvbnMucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyV2l0aFN0eWxlSW5qZWN0aW9uIChoLCBjb250ZXh0KSB7XG4gICAgICAgIGhvb2suY2FsbChjb250ZXh0KVxuICAgICAgICByZXR1cm4gb3JpZ2luYWxSZW5kZXIoaCwgY29udGV4dClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaW5qZWN0IGNvbXBvbmVudCByZWdpc3RyYXRpb24gYXMgYmVmb3JlQ3JlYXRlIGhvb2tcbiAgICAgIHZhciBleGlzdGluZyA9IG9wdGlvbnMuYmVmb3JlQ3JlYXRlXG4gICAgICBvcHRpb25zLmJlZm9yZUNyZWF0ZSA9IGV4aXN0aW5nXG4gICAgICAgID8gW10uY29uY2F0KGV4aXN0aW5nLCBob29rKVxuICAgICAgICA6IFtob29rXVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZXhwb3J0czogc2NyaXB0RXhwb3J0cyxcbiAgICBvcHRpb25zOiBvcHRpb25zXG4gIH1cbn1cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvbWl4aW5Qcm9wc1VwZGF0ZWQudnVlXG52YXIgbWl4aW5Qcm9wc1VwZGF0ZWRfcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnNcblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzcmNfbWl4aW5Qcm9wc1VwZGF0ZWR2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIG1peGluUHJvcHNVcGRhdGVkX3JlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgbWl4aW5Qcm9wc1VwZGF0ZWQgPSAoY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gRVhURVJOQUwgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9sb2Rhc2gucGljay9pbmRleC5qc1xudmFyIGxvZGFzaF9waWNrID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjg4YmNcIik7XG52YXIgbG9kYXNoX3BpY2tfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4obG9kYXNoX3BpY2spO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2xvZGFzaC5hc3NpZ24vaW5kZXguanNcbnZhciBsb2Rhc2hfYXNzaWduID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjQyYTBcIik7XG52YXIgbG9kYXNoX2Fzc2lnbl9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihsb2Rhc2hfYXNzaWduKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9sb2Rhc2guZ2V0L2luZGV4LmpzXG52YXIgbG9kYXNoX2dldCA9IF9fd2VicGFja19yZXF1aXJlX18oXCJjODMyXCIpO1xudmFyIGxvZGFzaF9nZXRfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4obG9kYXNoX2dldCk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3ZOb2RlVXRpbHMuanNcblxuXG5cblxuXG52YXIgdk5vZGVVdGlsc19tZXJnZVZOb2RlRGF0YSA9IGZ1bmN0aW9uIG1lcmdlVk5vZGVEYXRhKHZub2RlLCBuYW1lLCBvYmopIHtcbiAgaWYgKCF2bm9kZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZub2RlLmRhdGEgPSB2bm9kZS5kYXRhIHx8IHt9O1xuICB2bm9kZS5kYXRhW25hbWVdID0gX29iamVjdFNwcmVhZDIoe30sIHZub2RlLmRhdGFbbmFtZV0sIHt9LCBvYmopO1xufTtcbnZhciBzZXRWTm9kZURhdGEgPSBmdW5jdGlvbiBzZXRWTm9kZURhdGEodm5vZGUsIG5hbWUsIHZhbHVlKSB7XG4gIGlmICghdm5vZGUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2bm9kZS5kYXRhID0gdm5vZGUuZGF0YSB8fCB7fTtcbiAgdm5vZGUuZGF0YVtuYW1lXSA9IHZhbHVlO1xufTtcbnZhciBEQVRBX0tFWVMgPSBbJ2NsYXNzJywgJ3N0YXRpY0NsYXNzJywgJ3N0eWxlJywgJ2F0dHJzJywgJ3Byb3BzJywgJ2RvbVByb3BzJywgJ29uJywgJ25hdGl2ZU9uJywgJ2RpcmVjdGl2ZXMnLCAnc2NvcGVzU2xvdHMnLCAnc2xvdCcsICdyZWYnLCAna2V5J107XG5cbmZ1bmN0aW9uIG11dGF0ZUtleShrZXkpIHtcbiAgcmV0dXJuICcnICsga2V5ICsgXCItY2xvbmVkLWNpZFwiO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0RGF0YSh2bm9kZSwgaXNDb21wKSB7XG4gIHZhciBkYXRhID0gbG9kYXNoX3BpY2tfZGVmYXVsdCgpKHZub2RlLmRhdGEsIERBVEFfS0VZUyk7XG5cbiAgaWYgKGlzQ29tcCkge1xuICAgIHZhciBjT3B0cyA9IHZub2RlLmNvbXBvbmVudE9wdGlvbnM7XG4gICAgbG9kYXNoX2Fzc2lnbl9kZWZhdWx0KCkoZGF0YSwge1xuICAgICAgcHJvcHM6IGNPcHRzLnByb3BzRGF0YSxcbiAgICAgIG9uOiBjT3B0cy5saXN0ZW5lcnNcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChkYXRhLmtleSkge1xuICAgIGRhdGEua2V5ID0gbXV0YXRlS2V5KGRhdGEua2V5KTtcbiAgfVxuXG4gIHJldHVybiBkYXRhO1xufVxuXG52YXIgY2xvbmVWTm9kZSA9IGZ1bmN0aW9uIGNsb25lVk5vZGUodm5vZGUpIHtcbiAgLy8gdXNlIHRoZSBjb250ZXh0IHRoYXQgdGhlIG9yaWdpbmFsIHZub2RlIHdhcyBjcmVhdGVkIGluLlxuICB2YXIgaCA9IHZub2RlLmNvbnRleHQgJiYgdm5vZGUuY29udGV4dC4kY3JlYXRlRWxlbWVudDtcbiAgdmFyIGlzQ29tcCA9ICEhdm5vZGUuY29tcG9uZW50T3B0aW9ucztcbiAgdmFyIGlzVGV4dCA9ICF2bm9kZS50YWc7IC8vIHRoaXMgd2lsbCBhbHNvIG1hdGNoIGNvbW1lbnRzIGJ1dCB0aG9zZSB3aWxsIGJlIGRyb3BwZWQsIGVzc2VudGlhbGx5XG5cbiAgdmFyIGNoaWxkcmVuID0gaXNDb21wID8gdm5vZGUuY29tcG9uZW50T3B0aW9ucy5jaGlsZHJlbiA6IHZub2RlLmNoaWxkcmVuO1xuICBpZiAoaXNUZXh0KSByZXR1cm4gdm5vZGUudGV4dDtcbiAgdmFyIGRhdGEgPSBleHRyYWN0RGF0YSh2bm9kZSwgaXNDb21wKTtcbiAgdmFyIHRhZyA9IGlzQ29tcCA/IHZub2RlLmNvbXBvbmVudE9wdGlvbnMuQ3RvciA6IHZub2RlLnRhZztcbiAgdmFyIGNoaWxkTm9kZXMgPSBjaGlsZHJlbiA/IGNoaWxkcmVuLm1hcChmdW5jdGlvbiAoYykge1xuICAgIHJldHVybiBjbG9uZVZOb2RlKGMpO1xuICB9KSA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIGgodGFnLCBkYXRhLCBjaGlsZE5vZGVzKTtcbn07XG52YXIgdk5vZGVVdGlsc19jb3B5Q2xhc3Nlc0Zyb20gPSBmdW5jdGlvbiBjb3B5Q2xhc3Nlc0Zyb20odm5vZGUsIGZyb20pIHtcbiAgdmFyIF9mcm9tJGRhdGEgPSBmcm9tLmRhdGEsXG4gICAgICBkYXRhID0gX2Zyb20kZGF0YSA9PT0gdm9pZCAwID8ge30gOiBfZnJvbSRkYXRhO1xuICBzZXRWTm9kZURhdGEodm5vZGUsICdzdGF0aWNDbGFzcycsIGRhdGEuc3RhdGljQ2xhc3MpO1xuICB2Tm9kZVV0aWxzX21lcmdlVk5vZGVEYXRhKHZub2RlLCAnY2xhc3MnLCBfb2JqZWN0U3ByZWFkMih7fSwgZGF0YS5jbGFzcywge30sIGZyb20pKTtcbn07XG52YXIgdk5vZGVVdGlsc19nZXREYXRhID0gZnVuY3Rpb24gZ2V0RGF0YSh2bm9kZSwgcGF0aCwgZGVmYXVsdFZhbHVlKSB7XG4gIGlmICghdm5vZGUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZGF0YSA9IHZub2RlLmRhdGEgfHwge307XG4gIHJldHVybiB0eXBlb2YgcGF0aCA9PT0gJ3VuZGVmaW5lZCcgPyBkYXRhIDogbG9kYXNoX2dldF9kZWZhdWx0KCkoZGF0YSwgcGF0aCwgZGVmYXVsdFZhbHVlKTtcbn07XG52YXIgdk5vZGVVdGlsc19nZXRTdHlsZSA9IGZ1bmN0aW9uIGdldFN0eWxlKHZub2RlKSB7XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkMih7fSwgdk5vZGVVdGlsc19nZXREYXRhKHZub2RlLCAnc3RhdGljU3R5bGUnLCB7fSksIHt9LCB2Tm9kZVV0aWxzX2dldERhdGEodm5vZGUsICdzdHlsZScsIHt9KSk7XG59O1xuLy8gRVhURVJOQUwgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuY29uY2F0LmpzXG52YXIgZXNfYXJyYXlfY29uY2F0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjk5YWZcIik7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmV2ZXJ5LmpzXG52YXIgZXNfYXJyYXlfZXZlcnkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiYTYyM1wiKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZnJvbS5qc1xudmFyIGVzX2FycmF5X2Zyb20gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiYTYzMFwiKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuaW5kZXgtb2YuanNcbnZhciBlc19hcnJheV9pbmRleF9vZiA9IF9fd2VicGFja19yZXF1aXJlX18oXCJjOTc1XCIpO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5yZWR1Y2UuanNcbnZhciBlc19hcnJheV9yZWR1Y2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiMTNkNVwiKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMubnVtYmVyLmNvbnN0cnVjdG9yLmpzXG52YXIgZXNfbnVtYmVyX2NvbnN0cnVjdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImE5ZTNcIik7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5leGVjLmpzXG52YXIgZXNfcmVnZXhwX2V4ZWMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiYWMxZlwiKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yLmpzXG52YXIgZXNfc3RyaW5nX2l0ZXJhdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjNjYTNcIik7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5tYXRjaC5qc1xudmFyIGVzX3N0cmluZ19tYXRjaCA9IF9fd2VicGFja19yZXF1aXJlX18oXCI0NjZkXCIpO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9pbm5lclNsaWRlclV0aWxzLmpzXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG52YXIgY2FuVXNlRE9NID0gZnVuY3Rpb24gY2FuVXNlRE9NKCkge1xuICByZXR1cm4gISEodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmRvY3VtZW50ICYmIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcbn07XG52YXIgZ2V0UHJlQ2xvbmVzID0gZnVuY3Rpb24gZ2V0UHJlQ2xvbmVzKHNwZWMpIHtcbiAgaWYgKHNwZWMudW5zbGljayB8fCAhc3BlYy5pbmZpbml0ZSkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgaWYgKHNwZWMudmFyaWFibGVXaWR0aCkge1xuICAgIHJldHVybiBzcGVjLnNsaWRlQ291bnQ7XG4gIH1cblxuICByZXR1cm4gc3BlYy5zbGlkZXNUb1Nob3cgKyAoc3BlYy5jZW50ZXJNb2RlID8gMSA6IDApO1xufTtcbnZhciBnZXRQb3N0Q2xvbmVzID0gZnVuY3Rpb24gZ2V0UG9zdENsb25lcyhzcGVjKSB7XG4gIGlmIChzcGVjLnVuc2xpY2sgfHwgIXNwZWMuaW5maW5pdGUpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHJldHVybiBzcGVjLnNsaWRlQ291bnQ7XG59O1xudmFyIGlubmVyU2xpZGVyVXRpbHNfa2V5SGFuZGxlciA9IGZ1bmN0aW9uIGtleUhhbmRsZXIoZSwgYWNjZXNzaWJpbGl0eSwgcnRsKSB7XG4gIGlmIChlLnRhcmdldC50YWdOYW1lLm1hdGNoKCdURVhUQVJFQXxJTlBVVHxTRUxFQ1QnKSB8fCAhYWNjZXNzaWJpbGl0eSkgcmV0dXJuICcnO1xuICBpZiAoZS5rZXlDb2RlID09PSAzNykgcmV0dXJuIHJ0bCA/ICduZXh0JyA6ICdwcmV2aW91cyc7XG4gIGlmIChlLmtleUNvZGUgPT09IDM5KSByZXR1cm4gcnRsID8gJ3ByZXZpb3VzJyA6ICduZXh0JztcbiAgcmV0dXJuICcnO1xufTtcbnZhciBzaWJsaW5nRGlyZWN0aW9uID0gZnVuY3Rpb24gc2libGluZ0RpcmVjdGlvbihzcGVjKSB7XG4gIGlmIChzcGVjLnRhcmdldFNsaWRlID4gc3BlYy5jdXJyZW50U2xpZGUpIHtcbiAgICBpZiAoc3BlYy50YXJnZXRTbGlkZSA+IHNwZWMuY3VycmVudFNsaWRlICsgc2xpZGVzT25SaWdodChzcGVjKSkge1xuICAgICAgcmV0dXJuICdsZWZ0JztcbiAgICB9XG5cbiAgICByZXR1cm4gJ3JpZ2h0JztcbiAgfSBlbHNlIHtcbiAgICBpZiAoc3BlYy50YXJnZXRTbGlkZSA8IHNwZWMuY3VycmVudFNsaWRlIC0gc2xpZGVzT25MZWZ0KHNwZWMpKSB7XG4gICAgICByZXR1cm4gJ3JpZ2h0JztcbiAgICB9XG5cbiAgICByZXR1cm4gJ2xlZnQnO1xuICB9XG59O1xudmFyIHNsaWRlc09uUmlnaHQgPSBmdW5jdGlvbiBzbGlkZXNPblJpZ2h0KF9yZWYpIHtcbiAgdmFyIHNsaWRlc1RvU2hvdyA9IF9yZWYuc2xpZGVzVG9TaG93LFxuICAgICAgY2VudGVyTW9kZSA9IF9yZWYuY2VudGVyTW9kZSxcbiAgICAgIHJ0bCA9IF9yZWYucnRsLFxuICAgICAgY2VudGVyUGFkZGluZyA9IF9yZWYuY2VudGVyUGFkZGluZztcblxuICAvLyByZXR1cm5zIG5vIG9mIHNsaWRlcyBvbiB0aGUgcmlnaHQgb2YgYWN0aXZlIHNsaWRlXG4gIGlmIChjZW50ZXJNb2RlKSB7XG4gICAgdmFyIHJpZ2h0ID0gKHNsaWRlc1RvU2hvdyAtIDEpIC8gMiArIDE7XG4gICAgaWYgKHBhcnNlSW50KGNlbnRlclBhZGRpbmcpID4gMCkgcmlnaHQgKz0gMTtcbiAgICBpZiAocnRsICYmIHNsaWRlc1RvU2hvdyAlIDIgPT09IDApIHJpZ2h0ICs9IDE7XG4gICAgcmV0dXJuIHJpZ2h0O1xuICB9XG5cbiAgaWYgKHJ0bCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgcmV0dXJuIHNsaWRlc1RvU2hvdyAtIDE7XG59O1xudmFyIHNsaWRlc09uTGVmdCA9IGZ1bmN0aW9uIHNsaWRlc09uTGVmdChfcmVmMikge1xuICB2YXIgc2xpZGVzVG9TaG93ID0gX3JlZjIuc2xpZGVzVG9TaG93LFxuICAgICAgY2VudGVyTW9kZSA9IF9yZWYyLmNlbnRlck1vZGUsXG4gICAgICBydGwgPSBfcmVmMi5ydGwsXG4gICAgICBjZW50ZXJQYWRkaW5nID0gX3JlZjIuY2VudGVyUGFkZGluZztcblxuICAvLyByZXR1cm5zIG5vIG9mIHNsaWRlcyBvbiB0aGUgbGVmdCBvZiBhY3RpdmUgc2xpZGVcbiAgaWYgKGNlbnRlck1vZGUpIHtcbiAgICB2YXIgbGVmdCA9IChzbGlkZXNUb1Nob3cgLSAxKSAvIDIgKyAxO1xuICAgIGlmIChwYXJzZUludChjZW50ZXJQYWRkaW5nKSA+IDApIGxlZnQgKz0gMTtcbiAgICBpZiAoIXJ0bCAmJiBzbGlkZXNUb1Nob3cgJSAyID09PSAwKSBsZWZ0ICs9IDE7XG4gICAgcmV0dXJuIGxlZnQ7XG4gIH1cblxuICBpZiAocnRsKSB7XG4gICAgcmV0dXJuIHNsaWRlc1RvU2hvdyAtIDE7XG4gIH1cblxuICByZXR1cm4gMDtcbn07IC8vIHN0YXJ0SW5kZXggdGhhdCBuZWVkcyB0byBiZSBwcmVzZW50XG5cbnZhciBsYXp5U3RhcnRJbmRleCA9IGZ1bmN0aW9uIGxhenlTdGFydEluZGV4KHNwZWMpIHtcbiAgcmV0dXJuIHNwZWMuY3VycmVudFNsaWRlIC0gbGF6eVNsaWRlc09uTGVmdChzcGVjKTtcbn07XG52YXIgbGF6eUVuZEluZGV4ID0gZnVuY3Rpb24gbGF6eUVuZEluZGV4KHNwZWMpIHtcbiAgcmV0dXJuIHNwZWMuY3VycmVudFNsaWRlICsgbGF6eVNsaWRlc09uUmlnaHQoc3BlYyk7XG59O1xudmFyIGxhenlTbGlkZXNPbkxlZnQgPSBmdW5jdGlvbiBsYXp5U2xpZGVzT25MZWZ0KHNwZWMpIHtcbiAgcmV0dXJuIHNwZWMuY2VudGVyTW9kZSA/IE1hdGguZmxvb3Ioc3BlYy5zbGlkZXNUb1Nob3cgLyAyKSArIChwYXJzZUludChzcGVjLmNlbnRlclBhZGRpbmcpID4gMCA/IDEgOiAwKSA6IDA7XG59O1xudmFyIGxhenlTbGlkZXNPblJpZ2h0ID0gZnVuY3Rpb24gbGF6eVNsaWRlc09uUmlnaHQoc3BlYykge1xuICByZXR1cm4gc3BlYy5jZW50ZXJNb2RlID8gTWF0aC5mbG9vcigoc3BlYy5zbGlkZXNUb1Nob3cgLSAxKSAvIDIpICsgMSArIChwYXJzZUludChzcGVjLmNlbnRlclBhZGRpbmcpID4gMCA/IDEgOiAwKSA6IHNwZWMuc2xpZGVzVG9TaG93O1xufTtcbnZhciBnZXRPbkRlbWFuZExhenlTbGlkZXMgPSBmdW5jdGlvbiBnZXRPbkRlbWFuZExhenlTbGlkZXMoc3BlYykge1xuICB2YXIgb25EZW1hbmRTbGlkZXMgPSBbXTtcbiAgdmFyIHN0YXJ0SW5kZXggPSBsYXp5U3RhcnRJbmRleChzcGVjKTtcbiAgdmFyIGVuZEluZGV4ID0gbGF6eUVuZEluZGV4KHNwZWMpO1xuXG4gIGZvciAodmFyIHNsaWRlSW5kZXggPSBzdGFydEluZGV4OyBzbGlkZUluZGV4IDwgZW5kSW5kZXg7IHNsaWRlSW5kZXgrKykge1xuICAgIGlmIChzcGVjLmxhenlMb2FkZWRMaXN0LmluZGV4T2Yoc2xpZGVJbmRleCkgPCAwKSB7XG4gICAgICBvbkRlbWFuZFNsaWRlcy5wdXNoKHNsaWRlSW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvbkRlbWFuZFNsaWRlcztcbn07XG52YXIgaW5uZXJTbGlkZXJVdGlsc19jaGFuZ2VTbGlkZSA9IGZ1bmN0aW9uIGNoYW5nZVNsaWRlKHNwZWMsIG9wdGlvbnMpIHtcbiAgdmFyIGluZGV4T2Zmc2V0LCBwcmV2aW91c0ludCwgc2xpZGVPZmZzZXQsIHVuZXZlbk9mZnNldCwgdGFyZ2V0U2xpZGU7XG4gIHZhciBzbGlkZXNUb1Njcm9sbCA9IHNwZWMuc2xpZGVzVG9TY3JvbGwsXG4gICAgICBzbGlkZXNUb1Nob3cgPSBzcGVjLnNsaWRlc1RvU2hvdyxcbiAgICAgIHNsaWRlQ291bnQgPSBzcGVjLnNsaWRlQ291bnQsXG4gICAgICBjdXJyZW50U2xpZGUgPSBzcGVjLmN1cnJlbnRTbGlkZSxcbiAgICAgIGxhenlMb2FkID0gc3BlYy5sYXp5TG9hZCxcbiAgICAgIGluZmluaXRlID0gc3BlYy5pbmZpbml0ZTtcbiAgdW5ldmVuT2Zmc2V0ID0gc2xpZGVDb3VudCAlIHNsaWRlc1RvU2Nyb2xsICE9PSAwO1xuICBpbmRleE9mZnNldCA9IHVuZXZlbk9mZnNldCA/IDAgOiAoc2xpZGVDb3VudCAtIGN1cnJlbnRTbGlkZSkgJSBzbGlkZXNUb1Njcm9sbDtcblxuICBpZiAob3B0aW9ucy5tZXNzYWdlID09PSAncHJldmlvdXMnKSB7XG4gICAgc2xpZGVPZmZzZXQgPSBpbmRleE9mZnNldCA9PT0gMCA/IHNsaWRlc1RvU2Nyb2xsIDogc2xpZGVzVG9TaG93IC0gaW5kZXhPZmZzZXQ7XG4gICAgdGFyZ2V0U2xpZGUgPSBjdXJyZW50U2xpZGUgLSBzbGlkZU9mZnNldDtcblxuICAgIGlmIChsYXp5TG9hZCAmJiAhaW5maW5pdGUpIHtcbiAgICAgIHByZXZpb3VzSW50ID0gY3VycmVudFNsaWRlIC0gc2xpZGVPZmZzZXQ7XG4gICAgICB0YXJnZXRTbGlkZSA9IHByZXZpb3VzSW50ID09PSAtMSA/IHNsaWRlQ291bnQgLSAxIDogcHJldmlvdXNJbnQ7XG4gICAgfVxuICB9IGVsc2UgaWYgKG9wdGlvbnMubWVzc2FnZSA9PT0gJ25leHQnKSB7XG4gICAgc2xpZGVPZmZzZXQgPSBpbmRleE9mZnNldCA9PT0gMCA/IHNsaWRlc1RvU2Nyb2xsIDogaW5kZXhPZmZzZXQ7XG4gICAgdGFyZ2V0U2xpZGUgPSBjdXJyZW50U2xpZGUgKyBzbGlkZU9mZnNldDtcblxuICAgIGlmIChsYXp5TG9hZCAmJiAhaW5maW5pdGUpIHtcbiAgICAgIHRhcmdldFNsaWRlID0gKGN1cnJlbnRTbGlkZSArIHNsaWRlc1RvU2Nyb2xsKSAlIHNsaWRlQ291bnQgKyBpbmRleE9mZnNldDtcbiAgICB9XG4gIH0gZWxzZSBpZiAob3B0aW9ucy5tZXNzYWdlID09PSAnZG90cycpIHtcbiAgICAvLyBDbGljayBvbiBkb3RzXG4gICAgdGFyZ2V0U2xpZGUgPSBvcHRpb25zLmluZGV4ICogb3B0aW9ucy5zbGlkZXNUb1Njcm9sbDtcblxuICAgIGlmICh0YXJnZXRTbGlkZSA9PT0gb3B0aW9ucy5jdXJyZW50U2xpZGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfSBlbHNlIGlmIChvcHRpb25zLm1lc3NhZ2UgPT09ICdjaGlsZHJlbicpIHtcbiAgICAvLyBDbGljayBvbiB0aGUgc2xpZGVzXG4gICAgdGFyZ2V0U2xpZGUgPSBvcHRpb25zLmluZGV4O1xuXG4gICAgaWYgKHRhcmdldFNsaWRlID09PSBvcHRpb25zLmN1cnJlbnRTbGlkZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGluZmluaXRlKSB7XG4gICAgICB2YXIgZGlyZWN0aW9uID0gc2libGluZ0RpcmVjdGlvbihfb2JqZWN0U3ByZWFkMih7fSwgc3BlYywge1xuICAgICAgICB0YXJnZXRTbGlkZTogdGFyZ2V0U2xpZGVcbiAgICAgIH0pKTtcblxuICAgICAgaWYgKHRhcmdldFNsaWRlID4gb3B0aW9ucy5jdXJyZW50U2xpZGUgJiYgZGlyZWN0aW9uID09PSAnbGVmdCcpIHtcbiAgICAgICAgdGFyZ2V0U2xpZGUgPSB0YXJnZXRTbGlkZSAtIHNsaWRlQ291bnQ7XG4gICAgICB9IGVsc2UgaWYgKHRhcmdldFNsaWRlIDwgb3B0aW9ucy5jdXJyZW50U2xpZGUgJiYgZGlyZWN0aW9uID09PSAncmlnaHQnKSB7XG4gICAgICAgIHRhcmdldFNsaWRlID0gdGFyZ2V0U2xpZGUgKyBzbGlkZUNvdW50O1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChvcHRpb25zLm1lc3NhZ2UgPT09ICdpbmRleCcpIHtcbiAgICB0YXJnZXRTbGlkZSA9IE51bWJlcihvcHRpb25zLmluZGV4KTtcblxuICAgIGlmICh0YXJnZXRTbGlkZSA9PT0gb3B0aW9ucy5jdXJyZW50U2xpZGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXRTbGlkZTtcbn07XG52YXIgZmlsdGVyVW5kZWZpbmVkID0gZnVuY3Rpb24gZmlsdGVyVW5kZWZpbmVkKHByb3BzKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhwcm9wcykuZmlsdGVyKGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gcHJvcHNba2V5XSAhPT0gdW5kZWZpbmVkO1xuICB9KS5yZWR1Y2UoZnVuY3Rpb24gKG9iaiwga2V5KSB7XG4gICAgb2JqW2tleV0gPSBwcm9wc1trZXldO1xuICAgIHJldHVybiBvYmo7XG4gIH0sIHt9KTtcbn07XG52YXIgZmlsdGVyVW5kZWZpbmVkT3JOdWxsID0gZnVuY3Rpb24gZmlsdGVyVW5kZWZpbmVkT3JOdWxsKHByb3BzKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhwcm9wcykuZmlsdGVyKGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gcHJvcHNba2V5XSAhPT0gdW5kZWZpbmVkICYmIHByb3BzW2tleV0gIT09IG51bGw7XG4gIH0pLnJlZHVjZShmdW5jdGlvbiAob2JqLCBrZXkpIHtcbiAgICBvYmpba2V5XSA9IHByb3BzW2tleV07XG4gICAgcmV0dXJuIG9iajtcbiAgfSwge30pO1xufTtcbnZhciBpbm5lclNsaWRlclV0aWxzX3N3aXBlU3RhcnQgPSBmdW5jdGlvbiBzd2lwZVN0YXJ0KGUsIHN3aXBlLCBkcmFnZ2FibGUpIHtcbiAgaWYgKCFzd2lwZSB8fCAhZHJhZ2dhYmxlICYmIGUudHlwZS5pbmRleE9mKCdtb3VzZScpICE9PSAtMSkgcmV0dXJuICcnO1xuICByZXR1cm4ge1xuICAgIGRyYWdnaW5nOiB0cnVlLFxuICAgIHRvdWNoT2JqZWN0OiB7XG4gICAgICBzdGFydFg6IGUudG91Y2hlcyA/IGUudG91Y2hlc1swXS5wYWdlWCA6IGUuY2xpZW50WCxcbiAgICAgIHN0YXJ0WTogZS50b3VjaGVzID8gZS50b3VjaGVzWzBdLnBhZ2VZIDogZS5jbGllbnRZLFxuICAgICAgY3VyWDogZS50b3VjaGVzID8gZS50b3VjaGVzWzBdLnBhZ2VYIDogZS5jbGllbnRYLFxuICAgICAgY3VyWTogZS50b3VjaGVzID8gZS50b3VjaGVzWzBdLnBhZ2VZIDogZS5jbGllbnRZXG4gICAgfVxuICB9O1xufTtcbnZhciBpbm5lclNsaWRlclV0aWxzX3N3aXBlTW92ZSA9IGZ1bmN0aW9uIHN3aXBlTW92ZShlLCBzcGVjKSB7XG4gIC8vIHNwZWMgYWxzbyBjb250YWlucywgdHJhY2tSZWYgYW5kIHNsaWRlSW5kZXhcbiAgdmFyIHNjcm9sbGluZyA9IHNwZWMuc2Nyb2xsaW5nLFxuICAgICAgYW5pbWF0aW5nID0gc3BlYy5hbmltYXRpbmcsXG4gICAgICB2ZXJ0aWNhbCA9IHNwZWMudmVydGljYWwsXG4gICAgICBzd2lwZVRvU2xpZGUgPSBzcGVjLnN3aXBlVG9TbGlkZSxcbiAgICAgIHZlcnRpY2FsU3dpcGluZyA9IHNwZWMudmVydGljYWxTd2lwaW5nLFxuICAgICAgcnRsID0gc3BlYy5ydGwsXG4gICAgICBjdXJyZW50U2xpZGUgPSBzcGVjLmN1cnJlbnRTbGlkZSxcbiAgICAgIGVkZ2VGcmljdGlvbiA9IHNwZWMuZWRnZUZyaWN0aW9uLFxuICAgICAgZWRnZURyYWdnZWQgPSBzcGVjLmVkZ2VEcmFnZ2VkLFxuICAgICAgb25FZGdlID0gc3BlYy5vbkVkZ2UsXG4gICAgICBzd2lwZWQgPSBzcGVjLnN3aXBlZCxcbiAgICAgIHN3aXBpbmcgPSBzcGVjLnN3aXBpbmcsXG4gICAgICBzbGlkZUNvdW50ID0gc3BlYy5zbGlkZUNvdW50LFxuICAgICAgc2xpZGVzVG9TY3JvbGwgPSBzcGVjLnNsaWRlc1RvU2Nyb2xsLFxuICAgICAgaW5maW5pdGUgPSBzcGVjLmluZmluaXRlLFxuICAgICAgdG91Y2hPYmplY3QgPSBzcGVjLnRvdWNoT2JqZWN0LFxuICAgICAgc3dpcGVFdmVudCA9IHNwZWMuc3dpcGVFdmVudCxcbiAgICAgIGxpc3RIZWlnaHQgPSBzcGVjLmxpc3RIZWlnaHQsXG4gICAgICBsaXN0V2lkdGggPSBzcGVjLmxpc3RXaWR0aDtcbiAgaWYgKHNjcm9sbGluZykgcmV0dXJuO1xuICBpZiAoYW5pbWF0aW5nKSByZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpO1xuICBpZiAodmVydGljYWwgJiYgc3dpcGVUb1NsaWRlICYmIHZlcnRpY2FsU3dpcGluZykgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICB2YXIgc3dpcGVMZWZ0LFxuICAgICAgc3RhdGUgPSB7fTtcbiAgdmFyIGN1ckxlZnQgPSBnZXRUcmFja0xlZnQoc3BlYyk7XG4gIHRvdWNoT2JqZWN0LmN1clggPSBlLnRvdWNoZXMgPyBlLnRvdWNoZXNbMF0ucGFnZVggOiBlLmNsaWVudFg7XG4gIHRvdWNoT2JqZWN0LmN1clkgPSBlLnRvdWNoZXMgPyBlLnRvdWNoZXNbMF0ucGFnZVkgOiBlLmNsaWVudFk7XG4gIHRvdWNoT2JqZWN0LnN3aXBlTGVuZ3RoID0gTWF0aC5yb3VuZChNYXRoLnNxcnQoTWF0aC5wb3codG91Y2hPYmplY3QuY3VyWCAtIHRvdWNoT2JqZWN0LnN0YXJ0WCwgMikpKTtcbiAgdmFyIHZlcnRpY2FsU3dpcGVMZW5ndGggPSBNYXRoLnJvdW5kKE1hdGguc3FydChNYXRoLnBvdyh0b3VjaE9iamVjdC5jdXJZIC0gdG91Y2hPYmplY3Quc3RhcnRZLCAyKSkpO1xuXG4gIGlmICghdmVydGljYWxTd2lwaW5nICYmICFzd2lwaW5nICYmIHZlcnRpY2FsU3dpcGVMZW5ndGggPiAxMCkge1xuICAgIHJldHVybiB7XG4gICAgICBzY3JvbGxpbmc6IHRydWVcbiAgICB9O1xuICB9XG5cbiAgaWYgKHZlcnRpY2FsU3dpcGluZykgdG91Y2hPYmplY3Quc3dpcGVMZW5ndGggPSB2ZXJ0aWNhbFN3aXBlTGVuZ3RoO1xuICB2YXIgcG9zaXRpb25PZmZzZXQgPSAoIXJ0bCA/IDEgOiAtMSkgKiAodG91Y2hPYmplY3QuY3VyWCA+IHRvdWNoT2JqZWN0LnN0YXJ0WCA/IDEgOiAtMSk7XG4gIGlmICh2ZXJ0aWNhbFN3aXBpbmcpIHBvc2l0aW9uT2Zmc2V0ID0gdG91Y2hPYmplY3QuY3VyWSA+IHRvdWNoT2JqZWN0LnN0YXJ0WSA/IDEgOiAtMTtcbiAgdmFyIGRvdENvdW50ID0gTWF0aC5jZWlsKHNsaWRlQ291bnQgLyBzbGlkZXNUb1Njcm9sbCk7XG4gIHZhciBzd2lwZURpcmVjdGlvbiA9IGdldFN3aXBlRGlyZWN0aW9uKHNwZWMudG91Y2hPYmplY3QsIHZlcnRpY2FsU3dpcGluZyk7XG4gIHZhciB0b3VjaFN3aXBlTGVuZ3RoID0gdG91Y2hPYmplY3Quc3dpcGVMZW5ndGg7XG5cbiAgaWYgKCFpbmZpbml0ZSkge1xuICAgIGlmIChjdXJyZW50U2xpZGUgPT09IDAgJiYgc3dpcGVEaXJlY3Rpb24gPT09ICdyaWdodCcgfHwgY3VycmVudFNsaWRlICsgMSA+PSBkb3RDb3VudCAmJiBzd2lwZURpcmVjdGlvbiA9PT0gJ2xlZnQnIHx8ICFjYW5Hb05leHQoc3BlYykgJiYgc3dpcGVEaXJlY3Rpb24gPT09ICdsZWZ0Jykge1xuICAgICAgdG91Y2hTd2lwZUxlbmd0aCA9IHRvdWNoT2JqZWN0LnN3aXBlTGVuZ3RoICogZWRnZUZyaWN0aW9uO1xuXG4gICAgICBpZiAoZWRnZURyYWdnZWQgPT09IGZhbHNlICYmIG9uRWRnZSkge1xuICAgICAgICBvbkVkZ2Uoc3dpcGVEaXJlY3Rpb24pO1xuICAgICAgICBzdGF0ZVsnZWRnZURyYWdnZWQnXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKCFzd2lwZWQgJiYgc3dpcGVFdmVudCkge1xuICAgIHN3aXBlRXZlbnQoc3dpcGVEaXJlY3Rpb24pO1xuICAgIHN0YXRlWydzd2lwZWQnXSA9IHRydWU7XG4gIH1cblxuICBpZiAoIXZlcnRpY2FsKSB7XG4gICAgaWYgKCFydGwpIHtcbiAgICAgIHN3aXBlTGVmdCA9IGN1ckxlZnQgKyB0b3VjaFN3aXBlTGVuZ3RoICogcG9zaXRpb25PZmZzZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN3aXBlTGVmdCA9IGN1ckxlZnQgLSB0b3VjaFN3aXBlTGVuZ3RoICogcG9zaXRpb25PZmZzZXQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHN3aXBlTGVmdCA9IGN1ckxlZnQgKyB0b3VjaFN3aXBlTGVuZ3RoICogKGxpc3RIZWlnaHQgLyBsaXN0V2lkdGgpICogcG9zaXRpb25PZmZzZXQ7XG4gIH1cblxuICBpZiAodmVydGljYWxTd2lwaW5nKSB7XG4gICAgc3dpcGVMZWZ0ID0gY3VyTGVmdCArIHRvdWNoU3dpcGVMZW5ndGggKiBwb3NpdGlvbk9mZnNldDtcbiAgfVxuXG4gIHN0YXRlID0gX29iamVjdFNwcmVhZDIoe30sIHN0YXRlLCB7XG4gICAgdG91Y2hPYmplY3Q6IHRvdWNoT2JqZWN0LFxuICAgIHN3aXBlTGVmdDogc3dpcGVMZWZ0LFxuICAgIHRyYWNrU3R5bGU6IGlubmVyU2xpZGVyVXRpbHNfZ2V0VHJhY2tDU1MoX29iamVjdFNwcmVhZDIoe30sIHNwZWMsIHtcbiAgICAgIGxlZnQ6IHN3aXBlTGVmdFxuICAgIH0pKVxuICB9KTtcblxuICBpZiAoTWF0aC5hYnModG91Y2hPYmplY3QuY3VyWCAtIHRvdWNoT2JqZWN0LnN0YXJ0WCkgPCBNYXRoLmFicyh0b3VjaE9iamVjdC5jdXJZIC0gdG91Y2hPYmplY3Quc3RhcnRZKSAqIDAuOCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGlmICh0b3VjaE9iamVjdC5zd2lwZUxlbmd0aCA+IDEwKSB7XG4gICAgc3RhdGVbJ3N3aXBpbmcnXSA9IHRydWU7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufTtcbnZhciBpbm5lclNsaWRlclV0aWxzX3N3aXBlRW5kID0gZnVuY3Rpb24gc3dpcGVFbmQoZSwgc3BlYykge1xuICB2YXIgZHJhZ2dpbmcgPSBzcGVjLmRyYWdnaW5nLFxuICAgICAgc3dpcGUgPSBzcGVjLnN3aXBlLFxuICAgICAgdG91Y2hPYmplY3QgPSBzcGVjLnRvdWNoT2JqZWN0LFxuICAgICAgbGlzdFdpZHRoID0gc3BlYy5saXN0V2lkdGgsXG4gICAgICB0b3VjaFRocmVzaG9sZCA9IHNwZWMudG91Y2hUaHJlc2hvbGQsXG4gICAgICB2ZXJ0aWNhbFN3aXBpbmcgPSBzcGVjLnZlcnRpY2FsU3dpcGluZyxcbiAgICAgIGxpc3RIZWlnaHQgPSBzcGVjLmxpc3RIZWlnaHQsXG4gICAgICBjdXJyZW50U2xpZGUgPSBzcGVjLmN1cnJlbnRTbGlkZSxcbiAgICAgIHN3aXBlVG9TbGlkZSA9IHNwZWMuc3dpcGVUb1NsaWRlLFxuICAgICAgc2Nyb2xsaW5nID0gc3BlYy5zY3JvbGxpbmcsXG4gICAgICBvblN3aXBlID0gc3BlYy5vblN3aXBlO1xuXG4gIGlmICghZHJhZ2dpbmcpIHtcbiAgICBpZiAoc3dpcGUpIGUucHJldmVudERlZmF1bHQoKTtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICB2YXIgbWluU3dpcGUgPSB2ZXJ0aWNhbFN3aXBpbmcgPyBsaXN0SGVpZ2h0IC8gdG91Y2hUaHJlc2hvbGQgOiBsaXN0V2lkdGggLyB0b3VjaFRocmVzaG9sZDtcbiAgdmFyIHN3aXBlRGlyZWN0aW9uID0gZ2V0U3dpcGVEaXJlY3Rpb24odG91Y2hPYmplY3QsIHZlcnRpY2FsU3dpcGluZyk7IC8vIHJlc2V0IHRoZSBzdGF0ZSBvZiB0b3VjaCByZWxhdGVkIHN0YXRlIHZhcmlhYmxlcy5cblxuICB2YXIgc3RhdGUgPSB7XG4gICAgZHJhZ2dpbmc6IGZhbHNlLFxuICAgIGVkZ2VEcmFnZ2VkOiBmYWxzZSxcbiAgICBzY3JvbGxpbmc6IGZhbHNlLFxuICAgIHN3aXBpbmc6IGZhbHNlLFxuICAgIHN3aXBlZDogZmFsc2UsXG4gICAgc3dpcGVMZWZ0OiBudWxsLFxuICAgIHRvdWNoT2JqZWN0OiB7fVxuICB9O1xuXG4gIGlmIChzY3JvbGxpbmcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBpZiAoIXRvdWNoT2JqZWN0LnN3aXBlTGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgaWYgKHRvdWNoT2JqZWN0LnN3aXBlTGVuZ3RoID4gbWluU3dpcGUpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBpZiAob25Td2lwZSkge1xuICAgICAgb25Td2lwZShzd2lwZURpcmVjdGlvbik7XG4gICAgfVxuXG4gICAgdmFyIHNsaWRlQ291bnQsIG5ld1NsaWRlO1xuXG4gICAgc3dpdGNoIChzd2lwZURpcmVjdGlvbikge1xuICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICBjYXNlICd1cCc6XG4gICAgICAgIG5ld1NsaWRlID0gY3VycmVudFNsaWRlICsgZ2V0U2xpZGVDb3VudChzcGVjKTtcbiAgICAgICAgc2xpZGVDb3VudCA9IHN3aXBlVG9TbGlkZSA/IGNoZWNrTmF2aWdhYmxlKHNwZWMsIG5ld1NsaWRlKSA6IG5ld1NsaWRlO1xuICAgICAgICBzdGF0ZVsnY3VycmVudERpcmVjdGlvbiddID0gMDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgIGNhc2UgJ2Rvd24nOlxuICAgICAgICBuZXdTbGlkZSA9IGN1cnJlbnRTbGlkZSAtIGdldFNsaWRlQ291bnQoc3BlYyk7XG4gICAgICAgIHNsaWRlQ291bnQgPSBzd2lwZVRvU2xpZGUgPyBjaGVja05hdmlnYWJsZShzcGVjLCBuZXdTbGlkZSkgOiBuZXdTbGlkZTtcbiAgICAgICAgc3RhdGVbJ2N1cnJlbnREaXJlY3Rpb24nXSA9IDE7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBzbGlkZUNvdW50ID0gY3VycmVudFNsaWRlO1xuICAgIH1cblxuICAgIHN0YXRlWyd0cmlnZ2VyU2xpZGVIYW5kbGVyJ10gPSBzbGlkZUNvdW50O1xuICB9IGVsc2Uge1xuICAgIC8vIEFkanVzdCB0aGUgdHJhY2sgYmFjayB0byBpdCdzIG9yaWdpbmFsIHBvc2l0aW9uLlxuICAgIHZhciBjdXJyZW50TGVmdCA9IGdldFRyYWNrTGVmdChzcGVjKTtcbiAgICBzdGF0ZVsndHJhY2tTdHlsZSddID0gZ2V0VHJhY2tBbmltYXRlQ1NTKF9vYmplY3RTcHJlYWQyKHt9LCBzcGVjLCB7XG4gICAgICBsZWZ0OiBjdXJyZW50TGVmdFxuICAgIH0pKTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn07XG52YXIgZ2V0TmF2aWdhYmxlSW5kZXhlcyA9IGZ1bmN0aW9uIGdldE5hdmlnYWJsZUluZGV4ZXMoc3BlYykge1xuICB2YXIgbWF4ID0gc3BlYy5pbmZpbml0ZSA/IHNwZWMuc2xpZGVDb3VudCAqIDIgOiBzcGVjLnNsaWRlQ291bnQ7XG4gIHZhciBicmVha3BvaW50ID0gc3BlYy5pbmZpbml0ZSA/IHNwZWMuc2xpZGVzVG9TaG93ICogLTEgOiAwO1xuICB2YXIgY291bnRlciA9IHNwZWMuaW5maW5pdGUgPyBzcGVjLnNsaWRlc1RvU2hvdyAqIC0xIDogMDtcbiAgdmFyIGluZGV4ZXMgPSBbXTtcblxuICB3aGlsZSAoYnJlYWtwb2ludCA8IG1heCkge1xuICAgIGluZGV4ZXMucHVzaChicmVha3BvaW50KTtcbiAgICBicmVha3BvaW50ID0gY291bnRlciArIHNwZWMuc2xpZGVzVG9TY3JvbGw7XG4gICAgY291bnRlciArPSBNYXRoLm1pbihzcGVjLnNsaWRlc1RvU2Nyb2xsLCBzcGVjLnNsaWRlc1RvU2hvdyk7XG4gIH1cblxuICByZXR1cm4gaW5kZXhlcztcbn07XG52YXIgY2hlY2tOYXZpZ2FibGUgPSBmdW5jdGlvbiBjaGVja05hdmlnYWJsZShzcGVjLCBpbmRleCkge1xuICB2YXIgbmF2aWdhYmxlcyA9IGdldE5hdmlnYWJsZUluZGV4ZXMoc3BlYyk7XG4gIHZhciBwcmV2TmF2aWdhYmxlID0gMDtcblxuICBpZiAoaW5kZXggPiBuYXZpZ2FibGVzW25hdmlnYWJsZXMubGVuZ3RoIC0gMV0pIHtcbiAgICBpbmRleCA9IG5hdmlnYWJsZXNbbmF2aWdhYmxlcy5sZW5ndGggLSAxXTtcbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBuIGluIG5hdmlnYWJsZXMpIHtcbiAgICAgIGlmIChpbmRleCA8IG5hdmlnYWJsZXNbbl0pIHtcbiAgICAgICAgaW5kZXggPSBwcmV2TmF2aWdhYmxlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgcHJldk5hdmlnYWJsZSA9IG5hdmlnYWJsZXNbbl07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGluZGV4O1xufTtcbnZhciBnZXRTbGlkZUNvdW50ID0gZnVuY3Rpb24gZ2V0U2xpZGVDb3VudChzcGVjKSB7XG4gIHZhciBjZW50ZXJPZmZzZXQgPSBzcGVjLmNlbnRlck1vZGUgPyBzcGVjLnNsaWRlV2lkdGggKiBNYXRoLmZsb29yKHNwZWMuc2xpZGVzVG9TaG93IC8gMikgOiAwO1xuXG4gIGlmIChzcGVjLnN3aXBlVG9TbGlkZSkge1xuICAgIHZhciBzd2lwZWRTbGlkZTtcbiAgICB2YXIgc2xpY2tMaXN0ID0gc3BlYy5saXN0UmVmO1xuICAgIHZhciBzbGlkZXMgPSBzbGlja0xpc3QucXVlcnlTZWxlY3RvckFsbCgnLnNsaWNrLXNsaWRlJyk7XG4gICAgQXJyYXkuZnJvbShzbGlkZXMpLmV2ZXJ5KGZ1bmN0aW9uIChzbGlkZSkge1xuICAgICAgaWYgKCFzcGVjLnZlcnRpY2FsKSB7XG4gICAgICAgIGlmIChzbGlkZS5vZmZzZXRMZWZ0IC0gY2VudGVyT2Zmc2V0ICsgZ2V0V2lkdGgoc2xpZGUpIC8gMiA+IHNwZWMuc3dpcGVMZWZ0ICogLTEpIHtcbiAgICAgICAgICBzd2lwZWRTbGlkZSA9IHNsaWRlO1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHNsaWRlLm9mZnNldFRvcCArIGdldEhlaWdodChzbGlkZSkgLyAyID4gc3BlYy5zd2lwZUxlZnQgKiAtMSkge1xuICAgICAgICAgIHN3aXBlZFNsaWRlID0gc2xpZGU7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuXG4gICAgaWYgKCFzd2lwZWRTbGlkZSkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgdmFyIGN1cnJlbnRJbmRleCA9IHNwZWMucnRsID09PSB0cnVlID8gc3BlYy5zbGlkZUNvdW50IC0gc3BlYy5jdXJyZW50U2xpZGUgOiBzcGVjLmN1cnJlbnRTbGlkZTtcbiAgICB2YXIgc2xpZGVzVHJhdmVyc2VkID0gTWF0aC5hYnMoc3dpcGVkU2xpZGUuZGF0YXNldC5pbmRleCAtIGN1cnJlbnRJbmRleCkgfHwgMTtcbiAgICByZXR1cm4gc2xpZGVzVHJhdmVyc2VkO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzcGVjLnNsaWRlc1RvU2Nyb2xsO1xuICB9XG59OyAvLyBnaXZlbiBhbiBvYmplY3QgYW5kIGEgbGlzdCBvZiBrZXlzLCByZXR1cm4gbmV3IG9iamVjdCB3aXRoIGdpdmVuIGtleXNcblxudmFyIGV4dHJhY3RPYmplY3QgPSBmdW5jdGlvbiBleHRyYWN0T2JqZWN0KHNwZWMsIGtleXMpIHtcbiAgdmFyIG5ld09iamVjdCA9IHt9O1xuICBrZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiBuZXdPYmplY3Rba2V5XSA9IHNwZWNba2V5XTtcbiAgfSk7XG4gIHJldHVybiBuZXdPYmplY3Q7XG59O1xudmFyIFBST1BfS0VZUyA9IHtcbiAgVFJBQ0s6IFsnZmFkZScsICdjc3NFYXNlJywgJ3NwZWVkJywgJ2luZmluaXRlJywgJ2NlbnRlck1vZGUnLCAnY3VycmVudFNsaWRlJywgJ2xhenlMb2FkJywgJ2xhenlMb2FkZWRMaXN0JywgJ3J0bCcsICdzbGlkZVdpZHRoJywgJ3NsaWRlSGVpZ2h0JywgJ2xpc3RIZWlnaHQnLCAndmVydGljYWwnLCAnc2xpZGVzVG9TaG93JywgJ3NsaWRlc1RvU2Nyb2xsJywgJ3NsaWRlQ291bnQnLCAndHJhY2tTdHlsZScsICd2YXJpYWJsZVdpZHRoJywgJ3Vuc2xpY2snLCAnY2VudGVyUGFkZGluZyddLFxuICBET1Q6IFsnZG90c0NsYXNzJywgJ3NsaWRlQ291bnQnLCAnc2xpZGVzVG9TaG93JywgJ2N1cnJlbnRTbGlkZScsICdzbGlkZXNUb1Njcm9sbCcsICdjaGlsZHJlbicsICdjdXN0b21QYWdpbmcnLCAnaW5maW5pdGUnXSxcbiAgQVJST1c6IFsnaW5maW5pdGUnLCAnY2VudGVyTW9kZScsICdjdXJyZW50U2xpZGUnLCAnc2xpZGVDb3VudCcsICdzbGlkZXNUb1Nob3cnLCAncHJldkFycm93JywgJ25leHRBcnJvdyddXG59OyAvLyB3aGV0aGVyIG9yIG5vdCB3ZSBjYW4gZ28gbmV4dFxuXG52YXIgY2FuR29OZXh0ID0gZnVuY3Rpb24gY2FuR29OZXh0KHNwZWMpIHtcbiAgdmFyIGNhbkdvID0gdHJ1ZTtcblxuICBpZiAoIXNwZWMuaW5maW5pdGUpIHtcbiAgICBpZiAoc3BlYy5jZW50ZXJNb2RlICYmIHNwZWMuY3VycmVudFNsaWRlID49IHNwZWMuc2xpZGVDb3VudCAtIDEpIHtcbiAgICAgIGNhbkdvID0gZmFsc2U7XG4gICAgfSBlbHNlIGlmIChzcGVjLnNsaWRlQ291bnQgPD0gc3BlYy5zbGlkZXNUb1Nob3cgfHwgc3BlYy5jdXJyZW50U2xpZGUgPj0gc3BlYy5zbGlkZUNvdW50IC0gc3BlYy5zbGlkZXNUb1Nob3cpIHtcbiAgICAgIGNhbkdvID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNhbkdvO1xufTtcbnZhciBpbm5lclNsaWRlclV0aWxzX3NsaWRlSGFuZGxlciA9IGZ1bmN0aW9uIHNsaWRlSGFuZGxlcihzcGVjKSB7XG4gIHZhciB3YWl0Rm9yQW5pbWF0ZSA9IHNwZWMud2FpdEZvckFuaW1hdGUsXG4gICAgICBhbmltYXRpbmcgPSBzcGVjLmFuaW1hdGluZyxcbiAgICAgIGZhZGUgPSBzcGVjLmZhZGUsXG4gICAgICBpbmZpbml0ZSA9IHNwZWMuaW5maW5pdGUsXG4gICAgICBpbmRleCA9IHNwZWMuaW5kZXgsXG4gICAgICBzbGlkZUNvdW50ID0gc3BlYy5zbGlkZUNvdW50LFxuICAgICAgbGF6eUxvYWRlZExpc3QgPSBzcGVjLmxhenlMb2FkZWRMaXN0LFxuICAgICAgbGF6eUxvYWQgPSBzcGVjLmxhenlMb2FkLFxuICAgICAgY3VycmVudFNsaWRlID0gc3BlYy5jdXJyZW50U2xpZGUsXG4gICAgICBjZW50ZXJNb2RlID0gc3BlYy5jZW50ZXJNb2RlLFxuICAgICAgc2xpZGVzVG9TY3JvbGwgPSBzcGVjLnNsaWRlc1RvU2Nyb2xsLFxuICAgICAgc2xpZGVzVG9TaG93ID0gc3BlYy5zbGlkZXNUb1Nob3csXG4gICAgICB1c2VDU1MgPSBzcGVjLnVzZUNTUztcbiAgaWYgKHdhaXRGb3JBbmltYXRlICYmIGFuaW1hdGluZykgcmV0dXJuIHt9O1xuICB2YXIgYW5pbWF0aW9uU2xpZGUgPSBpbmRleCxcbiAgICAgIGZpbmFsU2xpZGUsXG4gICAgICBhbmltYXRpb25MZWZ0LFxuICAgICAgZmluYWxMZWZ0O1xuICB2YXIgc3RhdGUgPSB7fSxcbiAgICAgIG5leHRTdGF0ZSA9IHt9O1xuXG4gIGlmIChmYWRlKSB7XG4gICAgaWYgKCFpbmZpbml0ZSAmJiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHNsaWRlQ291bnQpKSByZXR1cm4ge307XG5cbiAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICBhbmltYXRpb25TbGlkZSA9IGluZGV4ICsgc2xpZGVDb3VudDtcbiAgICB9IGVsc2UgaWYgKGluZGV4ID49IHNsaWRlQ291bnQpIHtcbiAgICAgIGFuaW1hdGlvblNsaWRlID0gaW5kZXggLSBzbGlkZUNvdW50O1xuICAgIH1cblxuICAgIGlmIChsYXp5TG9hZCAmJiBsYXp5TG9hZGVkTGlzdC5pbmRleE9mKGFuaW1hdGlvblNsaWRlKSA8IDApIHtcbiAgICAgIGxhenlMb2FkZWRMaXN0LnB1c2goYW5pbWF0aW9uU2xpZGUpO1xuICAgIH1cblxuICAgIHN0YXRlID0ge1xuICAgICAgYW5pbWF0aW5nOiB0cnVlLFxuICAgICAgY3VycmVudFNsaWRlOiBhbmltYXRpb25TbGlkZSxcbiAgICAgIGxhenlMb2FkZWRMaXN0OiBsYXp5TG9hZGVkTGlzdFxuICAgIH07XG4gICAgbmV4dFN0YXRlID0ge1xuICAgICAgYW5pbWF0aW5nOiBmYWxzZVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgZmluYWxTbGlkZSA9IGFuaW1hdGlvblNsaWRlO1xuXG4gICAgaWYgKGFuaW1hdGlvblNsaWRlIDwgMCkge1xuICAgICAgZmluYWxTbGlkZSA9IGFuaW1hdGlvblNsaWRlICsgc2xpZGVDb3VudDtcbiAgICAgIGlmICghaW5maW5pdGUpIGZpbmFsU2xpZGUgPSAwO2Vsc2UgaWYgKHNsaWRlQ291bnQgJSBzbGlkZXNUb1Njcm9sbCAhPT0gMCkgZmluYWxTbGlkZSA9IHNsaWRlQ291bnQgLSBzbGlkZUNvdW50ICUgc2xpZGVzVG9TY3JvbGw7XG4gICAgfSBlbHNlIGlmICghY2FuR29OZXh0KHNwZWMpICYmIGFuaW1hdGlvblNsaWRlID4gY3VycmVudFNsaWRlKSB7XG4gICAgICBhbmltYXRpb25TbGlkZSA9IGZpbmFsU2xpZGUgPSBjdXJyZW50U2xpZGU7XG4gICAgfSBlbHNlIGlmIChjZW50ZXJNb2RlICYmIGFuaW1hdGlvblNsaWRlID49IHNsaWRlQ291bnQpIHtcbiAgICAgIGFuaW1hdGlvblNsaWRlID0gaW5maW5pdGUgPyBzbGlkZUNvdW50IDogc2xpZGVDb3VudCAtIDE7XG4gICAgICBmaW5hbFNsaWRlID0gaW5maW5pdGUgPyAwIDogc2xpZGVDb3VudCAtIDE7XG4gICAgfSBlbHNlIGlmIChhbmltYXRpb25TbGlkZSA+PSBzbGlkZUNvdW50KSB7XG4gICAgICBmaW5hbFNsaWRlID0gYW5pbWF0aW9uU2xpZGUgLSBzbGlkZUNvdW50O1xuICAgICAgaWYgKCFpbmZpbml0ZSkgZmluYWxTbGlkZSA9IHNsaWRlQ291bnQgLSBzbGlkZXNUb1Nob3c7ZWxzZSBpZiAoc2xpZGVDb3VudCAlIHNsaWRlc1RvU2Nyb2xsICE9PSAwKSBmaW5hbFNsaWRlID0gMDtcbiAgICB9XG5cbiAgICBhbmltYXRpb25MZWZ0ID0gZ2V0VHJhY2tMZWZ0KF9vYmplY3RTcHJlYWQyKHt9LCBzcGVjLCB7XG4gICAgICBzbGlkZUluZGV4OiBhbmltYXRpb25TbGlkZVxuICAgIH0pKTtcbiAgICBmaW5hbExlZnQgPSBnZXRUcmFja0xlZnQoX29iamVjdFNwcmVhZDIoe30sIHNwZWMsIHtcbiAgICAgIHNsaWRlSW5kZXg6IGZpbmFsU2xpZGVcbiAgICB9KSk7XG5cbiAgICBpZiAoIWluZmluaXRlKSB7XG4gICAgICBpZiAoYW5pbWF0aW9uTGVmdCA9PT0gZmluYWxMZWZ0KSBhbmltYXRpb25TbGlkZSA9IGZpbmFsU2xpZGU7XG4gICAgICBhbmltYXRpb25MZWZ0ID0gZmluYWxMZWZ0O1xuICAgIH1cblxuICAgIGxhenlMb2FkICYmIGxhenlMb2FkZWRMaXN0LmNvbmNhdChnZXRPbkRlbWFuZExhenlTbGlkZXMoX29iamVjdFNwcmVhZDIoe30sIHNwZWMsIHtcbiAgICAgIGN1cnJlbnRTbGlkZTogYW5pbWF0aW9uU2xpZGVcbiAgICB9KSkpO1xuXG4gICAgaWYgKCF1c2VDU1MpIHtcbiAgICAgIHN0YXRlID0ge1xuICAgICAgICBjdXJyZW50U2xpZGU6IGZpbmFsU2xpZGUsXG4gICAgICAgIHRyYWNrU3R5bGU6IGlubmVyU2xpZGVyVXRpbHNfZ2V0VHJhY2tDU1MoX29iamVjdFNwcmVhZDIoe30sIHNwZWMsIHtcbiAgICAgICAgICBsZWZ0OiBmaW5hbExlZnRcbiAgICAgICAgfSkpLFxuICAgICAgICBsYXp5TG9hZGVkTGlzdDogbGF6eUxvYWRlZExpc3RcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlID0ge1xuICAgICAgICBhbmltYXRpbmc6IHRydWUsXG4gICAgICAgIGN1cnJlbnRTbGlkZTogZmluYWxTbGlkZSxcbiAgICAgICAgdHJhY2tTdHlsZTogZ2V0VHJhY2tBbmltYXRlQ1NTKF9vYmplY3RTcHJlYWQyKHt9LCBzcGVjLCB7XG4gICAgICAgICAgbGVmdDogYW5pbWF0aW9uTGVmdFxuICAgICAgICB9KSksXG4gICAgICAgIGxhenlMb2FkZWRMaXN0OiBsYXp5TG9hZGVkTGlzdFxuICAgICAgfTtcbiAgICAgIG5leHRTdGF0ZSA9IHtcbiAgICAgICAgYW5pbWF0aW5nOiBmYWxzZSxcbiAgICAgICAgY3VycmVudFNsaWRlOiBmaW5hbFNsaWRlLFxuICAgICAgICB0cmFja1N0eWxlOiBpbm5lclNsaWRlclV0aWxzX2dldFRyYWNrQ1NTKF9vYmplY3RTcHJlYWQyKHt9LCBzcGVjLCB7XG4gICAgICAgICAgbGVmdDogZmluYWxMZWZ0XG4gICAgICAgIH0pKSxcbiAgICAgICAgc3dpcGVMZWZ0OiBudWxsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc3RhdGU6IHN0YXRlLFxuICAgIG5leHRTdGF0ZTogbmV4dFN0YXRlXG4gIH07XG59OyAvLyBnZXQgd2lkdGggb2YgYW4gZWxlbWVudFxuXG52YXIgZ2V0V2lkdGggPSBmdW5jdGlvbiBnZXRXaWR0aChlbGVtKSB7XG4gIHJldHVybiBlbGVtICYmIGVsZW0ub2Zmc2V0V2lkdGggfHwgMDtcbn07XG52YXIgZ2V0SGVpZ2h0ID0gZnVuY3Rpb24gZ2V0SGVpZ2h0KGVsZW0pIHtcbiAgcmV0dXJuIGVsZW0gJiYgZWxlbS5vZmZzZXRIZWlnaHQgfHwgMDtcbn07XG52YXIgZ2V0U3dpcGVEaXJlY3Rpb24gPSBmdW5jdGlvbiBnZXRTd2lwZURpcmVjdGlvbih0b3VjaE9iamVjdCkge1xuICB2YXIgdmVydGljYWxTd2lwaW5nID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcbiAgdmFyIHhEaXN0LCB5RGlzdCwgciwgc3dpcGVBbmdsZTtcbiAgeERpc3QgPSB0b3VjaE9iamVjdC5zdGFydFggLSB0b3VjaE9iamVjdC5jdXJYO1xuICB5RGlzdCA9IHRvdWNoT2JqZWN0LnN0YXJ0WSAtIHRvdWNoT2JqZWN0LmN1clk7XG4gIHIgPSBNYXRoLmF0YW4yKHlEaXN0LCB4RGlzdCk7XG4gIHN3aXBlQW5nbGUgPSBNYXRoLnJvdW5kKHIgKiAxODAgLyBNYXRoLlBJKTtcblxuICBpZiAoc3dpcGVBbmdsZSA8IDApIHtcbiAgICBzd2lwZUFuZ2xlID0gMzYwIC0gTWF0aC5hYnMoc3dpcGVBbmdsZSk7XG4gIH1cblxuICBpZiAoc3dpcGVBbmdsZSA8PSA0NSAmJiBzd2lwZUFuZ2xlID49IDAgfHwgc3dpcGVBbmdsZSA8PSAzNjAgJiYgc3dpcGVBbmdsZSA+PSAzMTUpIHtcbiAgICByZXR1cm4gJ2xlZnQnO1xuICB9XG5cbiAgaWYgKHN3aXBlQW5nbGUgPj0gMTM1ICYmIHN3aXBlQW5nbGUgPD0gMjI1KSB7XG4gICAgcmV0dXJuICdyaWdodCc7XG4gIH1cblxuICBpZiAodmVydGljYWxTd2lwaW5nID09PSB0cnVlKSB7XG4gICAgaWYgKHN3aXBlQW5nbGUgPj0gMzUgJiYgc3dpcGVBbmdsZSA8PSAxMzUpIHtcbiAgICAgIHJldHVybiAndXAnO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJ2Rvd24nO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAndmVydGljYWwnO1xufTsgLy8gZ2V0IGluaXRpYWxpemVkIHN0YXRlXG5cbnZhciBpbml0aWFsaXplZFN0YXRlID0gZnVuY3Rpb24gaW5pdGlhbGl6ZWRTdGF0ZShzcGVjKSB7XG4gIC8vIHNwZWMgYWxzbyBjb250YWlucyBsaXN0UmVmLCB0cmFja1JlZlxuICB2YXIgc2xpZGVDb3VudCA9IHNwZWMuY2hpbGRyZW4ubGVuZ3RoO1xuICB2YXIgbGlzdFdpZHRoID0gTWF0aC5jZWlsKGdldFdpZHRoKHNwZWMubGlzdFJlZikpO1xuICB2YXIgdHJhY2tXaWR0aCA9IE1hdGguY2VpbChnZXRXaWR0aChzcGVjLnRyYWNrUmVmKSk7XG4gIHZhciBzbGlkZVdpZHRoO1xuXG4gIGlmICghc3BlYy52ZXJ0aWNhbCkge1xuICAgIHZhciBjZW50ZXJQYWRkaW5nQWRqID0gc3BlYy5jZW50ZXJNb2RlICYmIHBhcnNlSW50KHNwZWMuY2VudGVyUGFkZGluZykgKiAyO1xuXG4gICAgaWYgKHR5cGVvZiBzcGVjLmNlbnRlclBhZGRpbmcgPT09ICdzdHJpbmcnICYmIHNwZWMuY2VudGVyUGFkZGluZy5zbGljZSgtMSkgPT09ICclJykge1xuICAgICAgY2VudGVyUGFkZGluZ0FkaiAqPSBsaXN0V2lkdGggLyAxMDA7XG4gICAgfVxuXG4gICAgc2xpZGVXaWR0aCA9IE1hdGguY2VpbCgobGlzdFdpZHRoIC0gY2VudGVyUGFkZGluZ0FkaikgLyBzcGVjLnNsaWRlc1RvU2hvdyk7XG4gIH0gZWxzZSB7XG4gICAgc2xpZGVXaWR0aCA9IGxpc3RXaWR0aDtcbiAgfVxuXG4gIHZhciBzbGlkZUhlaWdodCA9IHNwZWMubGlzdFJlZiAmJiBnZXRIZWlnaHQoc3BlYy5saXN0UmVmLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWluZGV4PVwiMFwiXScpKTtcbiAgdmFyIGxpc3RIZWlnaHQgPSBzbGlkZUhlaWdodCAqIHNwZWMuc2xpZGVzVG9TaG93O1xuICB2YXIgY3VycmVudFNsaWRlID0gc3BlYy5jdXJyZW50U2xpZGUgPT09IHVuZGVmaW5lZCA/IHNwZWMuaW5pdGlhbFNsaWRlIDogc3BlYy5jdXJyZW50U2xpZGU7XG5cbiAgaWYgKHNwZWMucnRsICYmIHNwZWMuY3VycmVudFNsaWRlID09PSB1bmRlZmluZWQpIHtcbiAgICBjdXJyZW50U2xpZGUgPSBzbGlkZUNvdW50IC0gMSAtIHNwZWMuaW5pdGlhbFNsaWRlO1xuICB9XG5cbiAgdmFyIGxhenlMb2FkZWRMaXN0ID0gc3BlYy5sYXp5TG9hZGVkTGlzdCB8fCBbXTtcbiAgdmFyIHNsaWRlc1RvTG9hZCA9IGdldE9uRGVtYW5kTGF6eVNsaWRlcyh7XG4gICAgY3VycmVudFNsaWRlOiBjdXJyZW50U2xpZGUsXG4gICAgbGF6eUxvYWRlZExpc3Q6IGxhenlMb2FkZWRMaXN0XG4gIH0sIHNwZWMpO1xuICBsYXp5TG9hZGVkTGlzdC5jb25jYXQoc2xpZGVzVG9Mb2FkKTtcbiAgdmFyIHN0YXRlID0ge1xuICAgIHNsaWRlQ291bnQ6IHNsaWRlQ291bnQsXG4gICAgc2xpZGVXaWR0aDogc2xpZGVXaWR0aCxcbiAgICBsaXN0V2lkdGg6IGxpc3RXaWR0aCxcbiAgICB0cmFja1dpZHRoOiB0cmFja1dpZHRoLFxuICAgIGN1cnJlbnRTbGlkZTogY3VycmVudFNsaWRlLFxuICAgIHNsaWRlSGVpZ2h0OiBzbGlkZUhlaWdodCxcbiAgICBsaXN0SGVpZ2h0OiBsaXN0SGVpZ2h0LFxuICAgIGxhenlMb2FkZWRMaXN0OiBsYXp5TG9hZGVkTGlzdFxuICB9O1xuXG4gIGlmIChzcGVjLmF1dG9wbGF5aW5nID09PSBudWxsICYmIHNwZWMuYXV0b3BsYXkpIHtcbiAgICBzdGF0ZVsnYXV0b3BsYXlpbmcnXSA9ICdwbGF5aW5nJztcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn07XG52YXIgZ2V0VHJhY2tMZWZ0ID0gZnVuY3Rpb24gZ2V0VHJhY2tMZWZ0KHNwZWMpIHtcbiAgaWYgKHNwZWMudW5zbGljaykge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgY2hlY2tTcGVjS2V5cyhzcGVjLCBbJ3NsaWRlSW5kZXgnLCAndHJhY2tSZWYnLCAnaW5maW5pdGUnLCAnY2VudGVyTW9kZScsICdzbGlkZUNvdW50JywgJ3NsaWRlc1RvU2hvdycsICdzbGlkZXNUb1Njcm9sbCcsICdzbGlkZVdpZHRoJywgJ2xpc3RXaWR0aCcsICd2YXJpYWJsZVdpZHRoJywgJ3NsaWRlSGVpZ2h0J10pO1xuICB2YXIgc2xpZGVJbmRleCA9IHNwZWMuc2xpZGVJbmRleCxcbiAgICAgIHRyYWNrUmVmID0gc3BlYy50cmFja1JlZixcbiAgICAgIGluZmluaXRlID0gc3BlYy5pbmZpbml0ZSxcbiAgICAgIGNlbnRlck1vZGUgPSBzcGVjLmNlbnRlck1vZGUsXG4gICAgICBzbGlkZUNvdW50ID0gc3BlYy5zbGlkZUNvdW50LFxuICAgICAgc2xpZGVzVG9TaG93ID0gc3BlYy5zbGlkZXNUb1Nob3csXG4gICAgICBzbGlkZXNUb1Njcm9sbCA9IHNwZWMuc2xpZGVzVG9TY3JvbGwsXG4gICAgICBzbGlkZVdpZHRoID0gc3BlYy5zbGlkZVdpZHRoLFxuICAgICAgbGlzdFdpZHRoID0gc3BlYy5saXN0V2lkdGgsXG4gICAgICB2YXJpYWJsZVdpZHRoID0gc3BlYy52YXJpYWJsZVdpZHRoLFxuICAgICAgc2xpZGVIZWlnaHQgPSBzcGVjLnNsaWRlSGVpZ2h0LFxuICAgICAgZmFkZSA9IHNwZWMuZmFkZSxcbiAgICAgIHZlcnRpY2FsID0gc3BlYy52ZXJ0aWNhbDtcbiAgdmFyIHNsaWRlT2Zmc2V0ID0gMDtcbiAgdmFyIHRhcmdldExlZnQ7XG4gIHZhciB0YXJnZXRTbGlkZTtcbiAgdmFyIHZlcnRpY2FsT2Zmc2V0ID0gMDtcblxuICBpZiAoZmFkZSB8fCBzcGVjLnNsaWRlQ291bnQgPT09IDEpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHZhciBzbGlkZXNUb09mZnNldCA9IDA7XG5cbiAgaWYgKGluZmluaXRlKSB7XG4gICAgc2xpZGVzVG9PZmZzZXQgPSAtZ2V0UHJlQ2xvbmVzKHNwZWMpOyAvLyBicmluZyBhY3RpdmUgc2xpZGUgdG8gdGhlIGJlZ2lubmluZyBvZiB2aXN1YWwgYXJlYVxuICAgIC8vIGlmIG5leHQgc2Nyb2xsIGRvZXNuJ3QgaGF2ZSBlbm91Z2ggY2hpbGRyZW4sIGp1c3QgcmVhY2ggdGlsbCB0aGUgZW5kIG9mIG9yaWdpbmFsIHNsaWRlcyBpbnN0ZWFkIG9mIHNoaWZ0aW5nIHNsaWRlc1RvU2Nyb2xsIGNoaWxkcmVuXG5cbiAgICBpZiAoc2xpZGVDb3VudCAlIHNsaWRlc1RvU2Nyb2xsICE9PSAwICYmIHNsaWRlSW5kZXggKyBzbGlkZXNUb1Njcm9sbCA+IHNsaWRlQ291bnQpIHtcbiAgICAgIHNsaWRlc1RvT2Zmc2V0ID0gLShzbGlkZUluZGV4ID4gc2xpZGVDb3VudCA/IHNsaWRlc1RvU2hvdyAtIChzbGlkZUluZGV4IC0gc2xpZGVDb3VudCkgOiBzbGlkZUNvdW50ICUgc2xpZGVzVG9TY3JvbGwpO1xuICAgIH0gLy8gc2hpZnQgY3VycmVudCBzbGlkZSB0byBjZW50ZXIgb2YgdGhlIGZyYW1lXG5cblxuICAgIGlmIChjZW50ZXJNb2RlKSB7XG4gICAgICBzbGlkZXNUb09mZnNldCArPSBwYXJzZUludChzbGlkZXNUb1Nob3cgLyAyKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKHNsaWRlQ291bnQgJSBzbGlkZXNUb1Njcm9sbCAhPT0gMCAmJiBzbGlkZUluZGV4ICsgc2xpZGVzVG9TY3JvbGwgPiBzbGlkZUNvdW50KSB7XG4gICAgICBzbGlkZXNUb09mZnNldCA9IHNsaWRlc1RvU2hvdyAtIHNsaWRlQ291bnQgJSBzbGlkZXNUb1Njcm9sbDtcbiAgICB9XG5cbiAgICBpZiAoY2VudGVyTW9kZSkge1xuICAgICAgc2xpZGVzVG9PZmZzZXQgPSBwYXJzZUludChzbGlkZXNUb1Nob3cgLyAyKTtcbiAgICB9XG4gIH1cblxuICBzbGlkZU9mZnNldCA9IHNsaWRlc1RvT2Zmc2V0ICogc2xpZGVXaWR0aDtcbiAgdmVydGljYWxPZmZzZXQgPSBzbGlkZXNUb09mZnNldCAqIHNsaWRlSGVpZ2h0O1xuXG4gIGlmICghdmVydGljYWwpIHtcbiAgICB0YXJnZXRMZWZ0ID0gc2xpZGVJbmRleCAqIHNsaWRlV2lkdGggKiAtMSArIHNsaWRlT2Zmc2V0O1xuICB9IGVsc2Uge1xuICAgIHRhcmdldExlZnQgPSBzbGlkZUluZGV4ICogc2xpZGVIZWlnaHQgKiAtMSArIHZlcnRpY2FsT2Zmc2V0O1xuICB9XG5cbiAgaWYgKHZhcmlhYmxlV2lkdGggPT09IHRydWUpIHtcbiAgICB2YXIgdGFyZ2V0U2xpZGVJbmRleDtcbiAgICB2YXIgdHJhY2tFbGVtID0gdHJhY2tSZWYuJGVsO1xuICAgIHRhcmdldFNsaWRlSW5kZXggPSBzbGlkZUluZGV4ICsgZ2V0UHJlQ2xvbmVzKHNwZWMpO1xuICAgIHRhcmdldFNsaWRlID0gdHJhY2tFbGVtICYmIHRyYWNrRWxlbS5jaGlsZE5vZGVzW3RhcmdldFNsaWRlSW5kZXhdO1xuICAgIHRhcmdldExlZnQgPSB0YXJnZXRTbGlkZSA/IHRhcmdldFNsaWRlLm9mZnNldExlZnQgKiAtMSA6IDA7XG5cbiAgICBpZiAoY2VudGVyTW9kZSA9PT0gdHJ1ZSkge1xuICAgICAgdGFyZ2V0U2xpZGVJbmRleCA9IGluZmluaXRlID8gc2xpZGVJbmRleCArIGdldFByZUNsb25lcyhzcGVjKSA6IHNsaWRlSW5kZXg7XG4gICAgICB0YXJnZXRTbGlkZSA9IHRyYWNrRWxlbSAmJiB0cmFja0VsZW0uY2hpbGRyZW5bdGFyZ2V0U2xpZGVJbmRleF07XG4gICAgICB0YXJnZXRMZWZ0ID0gMDtcblxuICAgICAgZm9yICh2YXIgc2xpZGUgPSAwOyBzbGlkZSA8IHRhcmdldFNsaWRlSW5kZXg7IHNsaWRlKyspIHtcbiAgICAgICAgdGFyZ2V0TGVmdCAtPSB0cmFja0VsZW0gJiYgdHJhY2tFbGVtLmNoaWxkcmVuW3NsaWRlXSAmJiB0cmFja0VsZW0uY2hpbGRyZW5bc2xpZGVdLm9mZnNldFdpZHRoO1xuICAgICAgfVxuXG4gICAgICB0YXJnZXRMZWZ0IC09IHBhcnNlSW50KHNwZWMuY2VudGVyUGFkZGluZyk7XG4gICAgICB0YXJnZXRMZWZ0ICs9IHRhcmdldFNsaWRlICYmIChsaXN0V2lkdGggLSB0YXJnZXRTbGlkZS5vZmZzZXRXaWR0aCkgLyAyO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXRMZWZ0O1xufTtcbnZhciBnZXRUb3RhbFNsaWRlcyA9IGZ1bmN0aW9uIGdldFRvdGFsU2xpZGVzKHNwZWMpIHtcbiAgcmV0dXJuIHNwZWMuc2xpZGVDb3VudCA9PT0gMSA/IDEgOiBnZXRQcmVDbG9uZXMoc3BlYykgKyBzcGVjLnNsaWRlQ291bnQgKyBnZXRQb3N0Q2xvbmVzKHNwZWMpO1xufTtcbnZhciBjaGVja1NwZWNLZXlzID0gZnVuY3Rpb24gY2hlY2tTcGVjS2V5cyhzcGVjLCBrZXlzQXJyYXkpIHtcbiAgcmV0dXJuIGtleXNBcnJheS5yZWR1Y2UoZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgc3BlYy5oYXNPd25Qcm9wZXJ0eShrZXkpO1xuICB9LCB0cnVlKSA/IG51bGwgOiBjb25zb2xlLmVycm9yKCdLZXlzIE1pc3Npbmc6Jywgc3BlYyk7XG59OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcblxudmFyIGlubmVyU2xpZGVyVXRpbHNfZ2V0VHJhY2tDU1MgPSBmdW5jdGlvbiBnZXRUcmFja0NTUyhzcGVjKSB7XG4gIGNoZWNrU3BlY0tleXMoc3BlYywgWydsZWZ0JywgJ3ZhcmlhYmxlV2lkdGgnLCAnc2xpZGVDb3VudCcsICdzbGlkZXNUb1Nob3cnLCAnc2xpZGVXaWR0aCddKTtcbiAgdmFyIHRyYWNrV2lkdGgsIHRyYWNrSGVpZ2h0O1xuICB2YXIgdHJhY2tDaGlsZHJlbiA9IHNwZWMuc2xpZGVDb3VudCArIDIgKiBzcGVjLnNsaWRlc1RvU2hvdztcblxuICBpZiAoIXNwZWMudmVydGljYWwpIHtcbiAgICB0cmFja1dpZHRoID0gZ2V0VG90YWxTbGlkZXMoc3BlYykgKiBzcGVjLnNsaWRlV2lkdGg7XG4gIH0gZWxzZSB7XG4gICAgdHJhY2tIZWlnaHQgPSB0cmFja0NoaWxkcmVuICogc3BlYy5zbGlkZUhlaWdodDtcbiAgfVxuXG4gIHZhciBzdHlsZSA9IHtcbiAgICBvcGFjaXR5OiAxLFxuICAgIHRyYW5zaXRpb246ICcnLFxuICAgIFdlYmtpdFRyYW5zaXRpb246ICcnXG4gIH07XG5cbiAgaWYgKHNwZWMudXNlVHJhbnNmb3JtKSB7XG4gICAgdmFyIFdlYmtpdFRyYW5zZm9ybSA9ICFzcGVjLnZlcnRpY2FsID8gJ3RyYW5zbGF0ZTNkKCcgKyBzcGVjLmxlZnQgKyAncHgsIDBweCwgMHB4KScgOiAndHJhbnNsYXRlM2QoMHB4LCAnICsgc3BlYy5sZWZ0ICsgJ3B4LCAwcHgpJztcbiAgICB2YXIgdHJhbnNmb3JtID0gIXNwZWMudmVydGljYWwgPyAndHJhbnNsYXRlM2QoJyArIHNwZWMubGVmdCArICdweCwgMHB4LCAwcHgpJyA6ICd0cmFuc2xhdGUzZCgwcHgsICcgKyBzcGVjLmxlZnQgKyAncHgsIDBweCknO1xuICAgIHZhciBtc1RyYW5zZm9ybSA9ICFzcGVjLnZlcnRpY2FsID8gJ3RyYW5zbGF0ZVgoJyArIHNwZWMubGVmdCArICdweCknIDogJ3RyYW5zbGF0ZVkoJyArIHNwZWMubGVmdCArICdweCknO1xuICAgIHN0eWxlID0gX29iamVjdFNwcmVhZDIoe30sIHN0eWxlLCB7XG4gICAgICBXZWJraXRUcmFuc2Zvcm06IFdlYmtpdFRyYW5zZm9ybSxcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNmb3JtLFxuICAgICAgbXNUcmFuc2Zvcm06IG1zVHJhbnNmb3JtXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHNwZWMudmVydGljYWwpIHtcbiAgICAgIHN0eWxlWyd0b3AnXSA9IHNwZWMubGVmdDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3R5bGVbJ2xlZnQnXSA9IHNwZWMubGVmdDtcbiAgICB9XG4gIH1cblxuICBpZiAoc3BlYy5mYWRlKSBzdHlsZSA9IHtcbiAgICBvcGFjaXR5OiAxXG4gIH07XG4gIGlmICh0cmFja1dpZHRoKSBzdHlsZS53aWR0aCA9IHRyYWNrV2lkdGggKyAncHgnO1xuICBpZiAodHJhY2tIZWlnaHQpIHN0eWxlLmhlaWdodCA9IHRyYWNrSGVpZ2h0ICsgJ3B4JzsgLy8gRmFsbGJhY2sgZm9yIElFOFxuXG4gIGlmICh3aW5kb3cgJiYgIXdpbmRvdy5hZGRFdmVudExpc3RlbmVyICYmIHdpbmRvdy5hdHRhY2hFdmVudCkge1xuICAgIGlmICghc3BlYy52ZXJ0aWNhbCkge1xuICAgICAgc3R5bGUubWFyZ2luTGVmdCA9IHNwZWMubGVmdCArICdweCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0eWxlLm1hcmdpblRvcCA9IHNwZWMubGVmdCArICdweCc7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0eWxlO1xufTtcbnZhciBnZXRUcmFja0FuaW1hdGVDU1MgPSBmdW5jdGlvbiBnZXRUcmFja0FuaW1hdGVDU1Moc3BlYykge1xuICBjaGVja1NwZWNLZXlzKHNwZWMsIFsnbGVmdCcsICd2YXJpYWJsZVdpZHRoJywgJ3NsaWRlQ291bnQnLCAnc2xpZGVzVG9TaG93JywgJ3NsaWRlV2lkdGgnLCAnc3BlZWQnLCAnY3NzRWFzZSddKTtcbiAgdmFyIHN0eWxlID0gaW5uZXJTbGlkZXJVdGlsc19nZXRUcmFja0NTUyhzcGVjKTsgLy8gdXNlQ1NTIGlzIHRydWUgYnkgZGVmYXVsdCBzbyBpdCBjYW4gYmUgdW5kZWZpbmVkXG5cbiAgaWYgKHNwZWMudXNlVHJhbnNmb3JtKSB7XG4gICAgc3R5bGUuV2Via2l0VHJhbnNpdGlvbiA9ICctd2Via2l0LXRyYW5zZm9ybSAnICsgc3BlYy5zcGVlZCArICdtcyAnICsgc3BlYy5jc3NFYXNlO1xuICAgIHN0eWxlLnRyYW5zaXRpb24gPSAndHJhbnNmb3JtICcgKyBzcGVjLnNwZWVkICsgJ21zICcgKyBzcGVjLmNzc0Vhc2U7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHNwZWMudmVydGljYWwpIHtcbiAgICAgIHN0eWxlLnRyYW5zaXRpb24gPSAndG9wICcgKyBzcGVjLnNwZWVkICsgJ21zICcgKyBzcGVjLmNzc0Vhc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0eWxlLnRyYW5zaXRpb24gPSAnbGVmdCAnICsgc3BlYy5zcGVlZCArICdtcyAnICsgc3BlYy5jc3NFYXNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdHlsZTtcbn07XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9kZWZhdWx0UHJvcHMuanNcblxuXG5cbnZhciBkZWZhdWx0UHJvcHNfcHJvcHMgPSB7XG4gIGFjY2Vzc2liaWxpdHk6IHtcbiAgICB0eXBlOiBCb29sZWFuLFxuICAgIGRlZmF1bHQ6IHRydWVcbiAgfSxcbiAgYWRhcHRpdmVIZWlnaHQ6IHtcbiAgICB0eXBlOiBCb29sZWFuLFxuICAgIGRlZmF1bHQ6IGZhbHNlXG4gIH0sXG4gIGFycm93czoge1xuICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgZGVmYXVsdDogdHJ1ZVxuICB9LFxuICBhc05hdkZvcjoge1xuICAgIHR5cGU6IE9iamVjdCxcbiAgICBkZWZhdWx0OiBudWxsXG4gIH0sXG4gIGF1dG9wbGF5OiB7XG4gICAgdHlwZTogQm9vbGVhbixcbiAgICBkZWZhdWx0OiBmYWxzZVxuICB9LFxuICBhdXRvcGxheVNwZWVkOiB7XG4gICAgdHlwZTogTnVtYmVyLFxuICAgIGRlZmF1bHQ6IDMwMDBcbiAgfSxcbiAgY2VudGVyTW9kZToge1xuICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgZGVmYXVsdDogZmFsc2VcbiAgfSxcbiAgY2VudGVyUGFkZGluZzoge1xuICAgIHR5cGU6IFN0cmluZyxcbiAgICBkZWZhdWx0OiAnNTBweCdcbiAgfSxcbiAgY3NzRWFzZToge1xuICAgIHR5cGU6IFN0cmluZyxcbiAgICBkZWZhdWx0OiAnZWFzZSdcbiAgfSxcbiAgZG90czoge1xuICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgZGVmYXVsdDogZmFsc2VcbiAgfSxcbiAgZG90c0NsYXNzOiB7XG4gICAgdHlwZTogU3RyaW5nLFxuICAgIGRlZmF1bHQ6ICdzbGljay1kb3RzJ1xuICB9LFxuICBkcmFnZ2FibGU6IHtcbiAgICB0eXBlOiBCb29sZWFuLFxuICAgIGRlZmF1bHQ6IHRydWVcbiAgfSxcbiAgZWRnZUZyaWN0aW9uOiB7XG4gICAgdHlwZTogTnVtYmVyLFxuICAgIGRlZmF1bHQ6IDAuMzVcbiAgfSxcbiAgZmFkZToge1xuICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgZGVmYXVsdDogZmFsc2VcbiAgfSxcbiAgZm9jdXNPblNlbGVjdDoge1xuICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgZGVmYXVsdDogZmFsc2VcbiAgfSxcbiAgaW5maW5pdGU6IHtcbiAgICB0eXBlOiBCb29sZWFuLFxuICAgIGRlZmF1bHQ6IHRydWVcbiAgfSxcbiAgaW5pdGlhbFNsaWRlOiB7XG4gICAgdHlwZTogTnVtYmVyLFxuICAgIGRlZmF1bHQ6IDBcbiAgfSxcbiAgbGF6eUxvYWQ6IHtcbiAgICB0eXBlOiBTdHJpbmcsXG4gICAgZGVmYXVsdDogbnVsbFxuICB9LFxuICBwYXVzZU9uRG90c0hvdmVyOiB7XG4gICAgdHlwZTogQm9vbGVhbixcbiAgICBkZWZhdWx0OiBmYWxzZVxuICB9LFxuICBwYXVzZU9uRm9jdXM6IHtcbiAgICB0eXBlOiBCb29sZWFuLFxuICAgIGRlZmF1bHQ6IGZhbHNlXG4gIH0sXG4gIHBhdXNlT25Ib3Zlcjoge1xuICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgZGVmYXVsdDogdHJ1ZVxuICB9LFxuICByZXNwb25zaXZlOiB7XG4gICAgdHlwZTogQXJyYXksXG4gICAgZGVmYXVsdDogbnVsbFxuICB9LFxuICByb3dzOiB7XG4gICAgdHlwZTogTnVtYmVyLFxuICAgIGRlZmF1bHQ6IDFcbiAgfSxcbiAgcnRsOiB7XG4gICAgdHlwZTogQm9vbGVhbixcbiAgICBkZWZhdWx0OiBmYWxzZVxuICB9LFxuICBzbGlkZXNQZXJSb3c6IHtcbiAgICB0eXBlOiBOdW1iZXIsXG4gICAgZGVmYXVsdDogMVxuICB9LFxuICBzbGlkZXNUb1Njcm9sbDoge1xuICAgIHR5cGU6IE51bWJlcixcbiAgICBkZWZhdWx0OiAxXG4gIH0sXG4gIHNsaWRlc1RvU2hvdzoge1xuICAgIHR5cGU6IE51bWJlcixcbiAgICBkZWZhdWx0OiAxXG4gIH0sXG4gIHNwZWVkOiB7XG4gICAgdHlwZTogTnVtYmVyLFxuICAgIGRlZmF1bHQ6IDUwMFxuICB9LFxuICBzd2lwZToge1xuICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgZGVmYXVsdDogdHJ1ZVxuICB9LFxuICBzd2lwZVRvU2xpZGU6IHtcbiAgICB0eXBlOiBCb29sZWFuLFxuICAgIGRlZmF1bHQ6IGZhbHNlXG4gIH0sXG4gIHRvdWNoTW92ZToge1xuICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgZGVmYXVsdDogdHJ1ZVxuICB9LFxuICB0b3VjaFRocmVzaG9sZDoge1xuICAgIHR5cGU6IE51bWJlcixcbiAgICBkZWZhdWx0OiA1XG4gIH0sXG4gIHVzZUNTUzoge1xuICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgZGVmYXVsdDogdHJ1ZVxuICB9LFxuICB1c2VUcmFuc2Zvcm06IHtcbiAgICB0eXBlOiBCb29sZWFuLFxuICAgIGRlZmF1bHQ6IHRydWVcbiAgfSxcbiAgdmFyaWFibGVXaWR0aDoge1xuICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgZGVmYXVsdDogZmFsc2VcbiAgfSxcbiAgdmVydGljYWw6IHtcbiAgICB0eXBlOiBCb29sZWFuLFxuICAgIGRlZmF1bHQ6IGZhbHNlXG4gIH0sXG4gIHdhaXRGb3JBbmltYXRlOiB7XG4gICAgdHlwZTogQm9vbGVhbixcbiAgICBkZWZhdWx0OiB0cnVlXG4gIH1cbn07XG52YXIgZGVmYXVsdFZhbHVlcyA9IE9iamVjdC5rZXlzKGRlZmF1bHRQcm9wc19wcm9wcykucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGtleSkge1xuICBhY2Nba2V5XSA9IGRlZmF1bHRQcm9wc19wcm9wc1trZXldLmRlZmF1bHQ7XG4gIHJldHVybiBhY2M7XG59LCB7fSk7XG52YXIgdHlwZXMgPSBPYmplY3Qua2V5cyhkZWZhdWx0UHJvcHNfcHJvcHMpLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBrZXkpIHtcbiAgYWNjW2tleV0gPSBkZWZhdWx0UHJvcHNfcHJvcHNba2V5XS50eXBlO1xuICByZXR1cm4gYWNjO1xufSwge30pO1xuLy8gRVhURVJOQUwgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmFzc2lnbi5qc1xudmFyIGVzX29iamVjdF9hc3NpZ24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiY2NhNlwiKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZS5qc1xuXG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHtcbiAgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307XG4gIHZhciB0YXJnZXQgPSB7fTtcbiAgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpO1xuICB2YXIga2V5LCBpO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAga2V5ID0gc291cmNlS2V5c1tpXTtcbiAgICBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlO1xuICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXMuanNcblxuXG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7XG4gIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuICB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7XG4gIHZhciBrZXksIGk7XG5cbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldO1xuICAgICAgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTtcbiAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7XG4gICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG4vLyBFWFRFUk5BTCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuZGVzY3JpcHRpb24uanNcbnZhciBlc19zeW1ib2xfZGVzY3JpcHRpb24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiZTAxYVwiKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLml0ZXJhdG9yLmpzXG52YXIgZXNfc3ltYm9sX2l0ZXJhdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImQyOGJcIik7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yLmpzXG52YXIgZXNfYXJyYXlfaXRlcmF0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiZTI2MFwiKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZy5qc1xudmFyIGVzX29iamVjdF90b19zdHJpbmcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiZDNiN1wiKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvci5qc1xudmFyIHdlYl9kb21fY29sbGVjdGlvbnNfaXRlcmF0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiZGRiMFwiKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mLmpzXG5cblxuXG5cblxuXG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHtcbiAgICBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gICAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIF90eXBlb2Yob2JqKTtcbn1cbi8vIEVYVEVSTkFMIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvcmVzaXplLW9ic2VydmVyLXBvbHlmaWxsL2Rpc3QvUmVzaXplT2JzZXJ2ZXIuZXMuanNcbnZhciBSZXNpemVPYnNlcnZlcl9lcyA9IF9fd2VicGFja19yZXF1aXJlX18oXCI2ZGQ4XCIpO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2xvZGFzaC5kZWJvdW5jZS9pbmRleC5qc1xudmFyIGxvZGFzaF9kZWJvdW5jZSA9IF9fd2VicGFja19yZXF1aXJlX18oXCJmN2ZlXCIpO1xudmFyIGxvZGFzaF9kZWJvdW5jZV9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihsb2Rhc2hfZGVib3VuY2UpO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9jYWNoZS1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tMTItMCEuL25vZGVfbW9kdWxlcy90aHJlYWQtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVldGlmeS1sb2FkZXIvbGliL2xvYWRlci5qcz8/cmVmLS0xOS0wIS4vbm9kZV9tb2R1bGVzL2NhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS0wLTAhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy9TbGlkZXJUcmFjay52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG5cblxuXG5cblxuXG5cblxudmFyIGdldFNsaWRlQ2xhc3NlcyA9IGZ1bmN0aW9uIGdldFNsaWRlQ2xhc3NlcyhzcGVjKSB7XG4gIHZhciBzbGlja0FjdGl2ZSwgc2xpY2tDZW50ZXIsIHNsaWNrQ2xvbmVkO1xuICB2YXIgY2VudGVyT2Zmc2V0LCBpbmRleDtcblxuICBpZiAoc3BlYy5ydGwpIHtcbiAgICBpbmRleCA9IHNwZWMuc2xpZGVDb3VudCAtIDEgLSBzcGVjLmluZGV4O1xuICB9IGVsc2Uge1xuICAgIGluZGV4ID0gc3BlYy5pbmRleDtcbiAgfVxuXG4gIHNsaWNrQ2xvbmVkID0gaW5kZXggPCAwIHx8IGluZGV4ID49IHNwZWMuc2xpZGVDb3VudDtcblxuICBpZiAoc3BlYy5jZW50ZXJNb2RlKSB7XG4gICAgY2VudGVyT2Zmc2V0ID0gTWF0aC5mbG9vcihzcGVjLnNsaWRlc1RvU2hvdyAvIDIpO1xuICAgIHNsaWNrQ2VudGVyID0gKGluZGV4IC0gc3BlYy5jdXJyZW50U2xpZGUpICUgc3BlYy5zbGlkZUNvdW50ID09PSAwO1xuXG4gICAgaWYgKGluZGV4ID4gc3BlYy5jdXJyZW50U2xpZGUgLSBjZW50ZXJPZmZzZXQgLSAxICYmIGluZGV4IDw9IHNwZWMuY3VycmVudFNsaWRlICsgY2VudGVyT2Zmc2V0KSB7XG4gICAgICBzbGlja0FjdGl2ZSA9IHRydWU7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHNsaWNrQWN0aXZlID0gc3BlYy5jdXJyZW50U2xpZGUgPD0gaW5kZXggJiYgaW5kZXggPCBzcGVjLmN1cnJlbnRTbGlkZSArIHNwZWMuc2xpZGVzVG9TaG93O1xuICB9XG5cbiAgdmFyIHNsaWNrQ3VycmVudCA9IGluZGV4ID09PSBzcGVjLmN1cnJlbnRTbGlkZTtcbiAgcmV0dXJuIHtcbiAgICAnc2xpY2stc2xpZGUnOiB0cnVlLFxuICAgICdzbGljay1hY3RpdmUnOiBzbGlja0FjdGl2ZSxcbiAgICAnc2xpY2stY2VudGVyJzogc2xpY2tDZW50ZXIsXG4gICAgJ3NsaWNrLWNsb25lZCc6IHNsaWNrQ2xvbmVkLFxuICAgICdzbGljay1jdXJyZW50Jzogc2xpY2tDdXJyZW50IC8vIGR1YmlvdXMgaW4gY2FzZSBvZiBSVExcblxuICB9O1xufTtcblxudmFyIGdldFNsaWRlU3R5bGUgPSBmdW5jdGlvbiBnZXRTbGlkZVN0eWxlKHNwZWMpIHtcbiAgdmFyIHN0eWxlID0ge307XG5cbiAgaWYgKHNwZWMudmFyaWFibGVXaWR0aCA9PT0gdW5kZWZpbmVkIHx8IHNwZWMudmFyaWFibGVXaWR0aCA9PT0gZmFsc2UpIHtcbiAgICBzdHlsZS53aWR0aCA9IHR5cGVvZiBzcGVjLnNsaWRlV2lkdGggPT09ICdudW1iZXInID8gXCJcIi5jb25jYXQoc3BlYy5zbGlkZVdpZHRoLCBcInB4XCIpIDogc3BlYy5zbGlkZVdpZHRoO1xuICB9XG5cbiAgaWYgKHNwZWMuZmFkZSkge1xuICAgIHN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJztcblxuICAgIGlmIChzcGVjLnZlcnRpY2FsKSB7XG4gICAgICBzdHlsZS50b3AgPSBcIlwiLmNvbmNhdCgtc3BlYy5pbmRleCAqIHBhcnNlSW50KHNwZWMuc2xpZGVIZWlnaHQpLCBcInB4XCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHlsZS5sZWZ0ID0gXCJcIi5jb25jYXQoLXNwZWMuaW5kZXggKiBwYXJzZUludChzcGVjLnNsaWRlV2lkdGgpLCBcInB4XCIpO1xuICAgIH1cblxuICAgIHN0eWxlLm9wYWNpdHkgPSBzcGVjLmN1cnJlbnRTbGlkZSA9PT0gc3BlYy5pbmRleCA/IDEgOiAwO1xuICAgIHN0eWxlLnRyYW5zaXRpb24gPSAnb3BhY2l0eSAnICsgc3BlYy5zcGVlZCArICdtcyAnICsgc3BlYy5jc3NFYXNlICsgJywgJyArICd2aXNpYmlsaXR5ICcgKyBzcGVjLnNwZWVkICsgJ21zICcgKyBzcGVjLmNzc0Vhc2U7XG4gIH1cblxuICByZXR1cm4gc3R5bGU7XG59O1xuXG52YXIgZ2V0S2V5ID0gZnVuY3Rpb24gZ2V0S2V5KGNoaWxkLCBmYWxsYmFja0tleSkge1xuICByZXR1cm4gY2hpbGQua2V5ICE9IG51bGwgJiYgU3RyaW5nKGNoaWxkLmtleSkgfHwgZmFsbGJhY2tLZXk7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBTbGlkZXJUcmFja3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdTbGlkZXJUcmFjaycsXG4gIHByb3BzOiBQUk9QX0tFWVMuVFJBQ0ssXG4gIG1ldGhvZHM6IHtcbiAgICBjbG9uZVNsaWRlOiBmdW5jdGlvbiBjbG9uZVNsaWRlKHNsaWRlLCBvcHRpb25zKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICB2YXIgY2xvbmUgPSBjbG9uZVZOb2RlKHNsaWRlKTtcbiAgICAgIGNsb25lLmtleSA9IG9wdGlvbnMua2V5O1xuICAgICAgdk5vZGVVdGlsc19tZXJnZVZOb2RlRGF0YShjbG9uZSwgJ2NsYXNzJywgb3B0aW9ucy5jbGFzcyk7XG4gICAgICB2Tm9kZVV0aWxzX21lcmdlVk5vZGVEYXRhKGNsb25lLCAnYXR0cnMnLCBvcHRpb25zLmF0dHJzKTtcbiAgICAgIHZOb2RlVXRpbHNfbWVyZ2VWTm9kZURhdGEoY2xvbmUsICdzdHlsZScsIG9wdGlvbnMuc3R5bGUpO1xuICAgICAgdk5vZGVVdGlsc19tZXJnZVZOb2RlRGF0YShjbG9uZSwgJ29uJywge1xuICAgICAgICBjbGljazogZnVuY3Rpb24gY2xpY2soZSkge1xuICAgICAgICAgIHZOb2RlVXRpbHNfZ2V0RGF0YShzbGlkZSwgJ29uLmNsaWNrJywgZnVuY3Rpb24gKCkge30pKGUpO1xuXG4gICAgICAgICAgX3RoaXMuJGVtaXQoJ2NoaWxkQ2xpY2tlZCcsIG9wdGlvbnMuY2hpbGRPbkNsaWNrT3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH0sXG4gICAgcmVuZGVyU2xpZGVzOiBmdW5jdGlvbiByZW5kZXJTbGlkZXMoc3BlYywgY2hpbGRyZW4pIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgaCA9IHRoaXMuJGNyZWF0ZUVsZW1lbnQ7XG4gICAgICB2YXIga2V5O1xuICAgICAgdmFyIHNsaWRlcyA9IFtdO1xuICAgICAgdmFyIHByZUNsb25lU2xpZGVzID0gW107XG4gICAgICB2YXIgcG9zdENsb25lU2xpZGVzID0gW107XG4gICAgICB2YXIgY2hpbGRyZW5Db3VudCA9IGNoaWxkcmVuLmxlbmd0aDtcbiAgICAgIHZhciBzdGFydEluZGV4ID0gbGF6eVN0YXJ0SW5kZXgoc3BlYyk7XG4gICAgICB2YXIgZW5kSW5kZXggPSBsYXp5RW5kSW5kZXgoc3BlYyk7XG4gICAgICBjaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChlbGVtLCBpbmRleCkge1xuICAgICAgICB2YXIgY2hpbGQ7XG4gICAgICAgIHZhciBjaGlsZE9uQ2xpY2tPcHRpb25zID0ge1xuICAgICAgICAgIG1lc3NhZ2U6ICdjaGlsZHJlbicsXG4gICAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICAgIHNsaWRlc1RvU2Nyb2xsOiBzcGVjLnNsaWRlc1RvU2Nyb2xsLFxuICAgICAgICAgIGN1cnJlbnRTbGlkZTogc3BlYy5jdXJyZW50U2xpZGVcbiAgICAgICAgfTsgLy8gaW4gY2FzZSBvZiBsYXp5TG9hZCwgd2hldGhlciBvciBub3Qgd2Ugd2FudCB0byBmZXRjaCB0aGUgc2xpZGVcblxuICAgICAgICBpZiAoIXNwZWMubGF6eUxvYWQgfHwgc3BlYy5sYXp5TG9hZCAmJiBzcGVjLmxhenlMb2FkZWRMaXN0LmluZGV4T2YoaW5kZXgpID49IDApIHtcbiAgICAgICAgICBjaGlsZCA9IGVsZW07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2hpbGQgPSBoKFwiZGl2XCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNoaWxkU3R5bGUgPSBnZXRTbGlkZVN0eWxlKF9vYmplY3RTcHJlYWQyKHt9LCBzcGVjLCB7XG4gICAgICAgICAgaW5kZXg6IGluZGV4XG4gICAgICAgIH0pKTtcbiAgICAgICAgdmFyIHNsaWRlQ2xhc3NlcyA9IGdldFNsaWRlQ2xhc3Nlcyhfb2JqZWN0U3ByZWFkMih7fSwgc3BlYywge1xuICAgICAgICAgIGluZGV4OiBpbmRleFxuICAgICAgICB9KSk7IC8vIHB1c2ggYSBjbG9uZWQgZWxlbWVudCBvZiB0aGUgZGVzaXJlZCBzbGlkZVxuXG4gICAgICAgIHNsaWRlcy5wdXNoKF90aGlzMi5jbG9uZVNsaWRlKGNoaWxkLCB7XG4gICAgICAgICAga2V5OiAnb3JpZ2luYWwnICsgZ2V0S2V5KGNoaWxkLCBpbmRleCksXG4gICAgICAgICAgY2xhc3M6IHNsaWRlQ2xhc3NlcyxcbiAgICAgICAgICBzdHlsZTogX29iamVjdFNwcmVhZDIoe1xuICAgICAgICAgICAgb3V0bGluZTogJ25vbmUnXG4gICAgICAgICAgfSwgY2hpbGRTdHlsZSksXG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIHRhYkluZGV4OiAnLTEnLFxuICAgICAgICAgICAgJ2RhdGEtaW5kZXgnOiBpbmRleCxcbiAgICAgICAgICAgICdhcmlhLWhpZGRlbic6IFwiXCIuY29uY2F0KCFzbGlkZUNsYXNzZXNbJ3NsaWNrLWFjdGl2ZSddKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgY2hpbGRPbkNsaWNrT3B0aW9uczogY2hpbGRPbkNsaWNrT3B0aW9uc1xuICAgICAgICB9KSk7IC8vIGlmIHNsaWRlIG5lZWRzIHRvIGJlIHByZWNsb25lZCBvciBwb3N0Y2xvbmVkXG5cbiAgICAgICAgaWYgKHNwZWMuaW5maW5pdGUgJiYgc3BlYy5mYWRlID09PSBmYWxzZSAmJiBjaGlsZHJlbkNvdW50ID4gc3BlYy5zbGlkZXNUb1Nob3cpIHtcbiAgICAgICAgICB2YXIgcHJlQ2xvbmVObyA9IGNoaWxkcmVuQ291bnQgLSBpbmRleDtcblxuICAgICAgICAgIGlmIChwcmVDbG9uZU5vIDw9IGdldFByZUNsb25lcyhzcGVjKSAmJiBjaGlsZHJlbkNvdW50ICE9PSBzcGVjLnNsaWRlc1RvU2hvdykge1xuICAgICAgICAgICAga2V5ID0gLXByZUNsb25lTm87XG5cbiAgICAgICAgICAgIGlmIChrZXkgPj0gc3RhcnRJbmRleCkge1xuICAgICAgICAgICAgICBjaGlsZCA9IGVsZW07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNsaWRlQ2xhc3NlcyA9IGdldFNsaWRlQ2xhc3Nlcyhfb2JqZWN0U3ByZWFkMih7fSwgc3BlYywge1xuICAgICAgICAgICAgICBpbmRleDoga2V5XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICBwcmVDbG9uZVNsaWRlcy5wdXNoKF90aGlzMi5jbG9uZVNsaWRlKGNoaWxkLCB7XG4gICAgICAgICAgICAgIGtleTogJ3ByZWNsb25lZCcgKyBnZXRLZXkoY2hpbGQsIGtleSksXG4gICAgICAgICAgICAgIGNsYXNzOiBzbGlkZUNsYXNzZXMsXG4gICAgICAgICAgICAgIHN0eWxlOiBjaGlsZFN0eWxlLFxuICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgIHRhYkluZGV4OiAnLTEnLFxuICAgICAgICAgICAgICAgICdkYXRhLWluZGV4Jzoga2V5LFxuICAgICAgICAgICAgICAgICdhcmlhLWhpZGRlbic6IFwiXCIuY29uY2F0KCFzbGlkZUNsYXNzZXNbJ3NsaWNrLWFjdGl2ZSddKVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBjaGlsZE9uQ2xpY2tPcHRpb25zOiBjaGlsZE9uQ2xpY2tPcHRpb25zXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGNoaWxkcmVuQ291bnQgIT09IHNwZWMuc2xpZGVzVG9TaG93KSB7XG4gICAgICAgICAgICBrZXkgPSBjaGlsZHJlbkNvdW50ICsgaW5kZXg7XG5cbiAgICAgICAgICAgIGlmIChrZXkgPCBlbmRJbmRleCkge1xuICAgICAgICAgICAgICBjaGlsZCA9IGVsZW07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNsaWRlQ2xhc3NlcyA9IGdldFNsaWRlQ2xhc3Nlcyhfb2JqZWN0U3ByZWFkMih7fSwgc3BlYywge1xuICAgICAgICAgICAgICBpbmRleDoga2V5XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICBwb3N0Q2xvbmVTbGlkZXMucHVzaChfdGhpczIuY2xvbmVTbGlkZShjaGlsZCwge1xuICAgICAgICAgICAgICBrZXk6ICdwb3N0Y2xvbmVkJyArIGdldEtleShjaGlsZCwga2V5KSxcbiAgICAgICAgICAgICAgY2xhc3M6IHNsaWRlQ2xhc3NlcyxcbiAgICAgICAgICAgICAgc3R5bGU6IGNoaWxkU3R5bGUsXG4gICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgdGFiSW5kZXg6ICctMScsXG4gICAgICAgICAgICAgICAgJ2RhdGEtaW5kZXgnOiBrZXksXG4gICAgICAgICAgICAgICAgJ2FyaWEtaGlkZGVuJzogXCJcIi5jb25jYXQoIXNsaWRlQ2xhc3Nlc1snc2xpY2stYWN0aXZlJ10pXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGNoaWxkT25DbGlja09wdGlvbnM6IGNoaWxkT25DbGlja09wdGlvbnNcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sIHRoaXMpO1xuXG4gICAgICBpZiAoc3BlYy5ydGwpIHtcbiAgICAgICAgcmV0dXJuIHByZUNsb25lU2xpZGVzLmNvbmNhdChzbGlkZXMsIHBvc3RDbG9uZVNsaWRlcykucmV2ZXJzZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHByZUNsb25lU2xpZGVzLmNvbmNhdChzbGlkZXMsIHBvc3RDbG9uZVNsaWRlcyk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgaCA9IGFyZ3VtZW50c1swXTtcbiAgICB2YXIgc2xpZGVzID0gdGhpcy5yZW5kZXJTbGlkZXModGhpcy4kcHJvcHMsIHRoaXMuJHNsb3RzLmRlZmF1bHQpO1xuICAgIHJldHVybiBoKFwiZGl2XCIsIHtcbiAgICAgIFwiY2xhc3NcIjoge1xuICAgICAgICAnc2xpY2stdHJhY2snOiB0cnVlLFxuICAgICAgICAnc2xpY2stY2VudGVyJzogdGhpcy4kcHJvcHMuY2VudGVyTW9kZVxuICAgICAgfSxcbiAgICAgIFwic3R5bGVcIjogdGhpcy50cmFja1N0eWxlXG4gICAgfSwgW3NsaWRlc10pO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL1NsaWRlclRyYWNrLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfU2xpZGVyVHJhY2t2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoU2xpZGVyVHJhY2t2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIEVYVEVSTkFMIE1PRFVMRTogLi9zcmMvU2xpZGVyVHJhY2sudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9ZTRjYWVhZjgmc2NvcGVkPXRydWUmbGFuZz1jc3MmXG52YXIgU2xpZGVyVHJhY2t2dWVfdHlwZV9zdHlsZV9pbmRleF8wX2lkX2U0Y2FlYWY4X3Njb3BlZF90cnVlX2xhbmdfY3NzXyA9IF9fd2VicGFja19yZXF1aXJlX18oXCI2ZWEyXCIpO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9TbGlkZXJUcmFjay52dWVcbnZhciBTbGlkZXJUcmFja19yZW5kZXIsIFNsaWRlclRyYWNrX3N0YXRpY1JlbmRlckZuc1xuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIFNsaWRlclRyYWNrX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgc3JjX1NsaWRlclRyYWNrdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBTbGlkZXJUcmFja19yZW5kZXIsXG4gIFNsaWRlclRyYWNrX3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIFwiZTRjYWVhZjhcIixcbiAgbnVsbFxuICBcbilcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgU2xpZGVyVHJhY2sgPSAoU2xpZGVyVHJhY2tfY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXJyYXlMaWtlVG9BcnJheS5qc1xuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7XG5cbiAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgYXJyMltpXSA9IGFycltpXTtcbiAgfVxuXG4gIHJldHVybiBhcnIyO1xufVxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXJyYXlXaXRob3V0SG9sZXMuanNcblxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkoYXJyKTtcbn1cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheS5qc1xuXG5cblxuXG5cblxuXG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikge1xuICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGl0ZXIpKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTtcbn1cbi8vIEVYVEVSTkFMIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmZ1bmN0aW9uLm5hbWUuanNcbnZhciBlc19mdW5jdGlvbl9uYW1lID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImIwYzBcIik7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC50by1zdHJpbmcuanNcbnZhciBlc19yZWdleHBfdG9fc3RyaW5nID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjI1ZjBcIik7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzXG5cblxuXG5cblxuXG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHtcbiAgaWYgKCFvKSByZXR1cm47XG4gIGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG4gIHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTtcbiAgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTtcbiAgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obik7XG4gIGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbn1cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL25vbkl0ZXJhYmxlU3ByZWFkLmpzXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufVxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Db25zdW1hYmxlQXJyYXkuanNcblxuXG5cblxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikge1xuICByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpO1xufVxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvY2FjaGUtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTEyLTAhLi9ub2RlX21vZHVsZXMvdGhyZWFkLWxvYWRlci9kaXN0L2Nqcy5qcyEuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZXRpZnktbG9hZGVyL2xpYi9sb2FkZXIuanM/P3JlZi0tMTktMCEuL25vZGVfbW9kdWxlcy9jYWNoZS1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tMC0wIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvU2xpZGVyQXJyb3cudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBTbGlkZXJBcnJvd3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdTbGlkZXJBcnJvdycsXG4gIHByb3BzOiBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KFBST1BfS0VZUy5BUlJPVyksIFsndHlwZSddKSxcbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHZhciBoID0gYXJndW1lbnRzWzBdO1xuICAgIHZhciBjbGFzc2VzID0ge1xuICAgICAgJ3NsaWNrLWFycm93JzogdHJ1ZVxuICAgIH07XG4gICAgdmFyIGNsaWNrYWJsZSA9IHRydWU7XG4gICAgdmFyIGFycm93O1xuICAgIHZhciBvcHRpb24gPSB7XG4gICAgICBjdXJyZW50U2xpZGU6IHRoaXMuY3VycmVudFNsaWRlLFxuICAgICAgc2xpZGVDb3VudDogdGhpcy5zbGlkZUNvdW50XG4gICAgfTtcblxuICAgIGlmICh0aGlzLnR5cGUgPT09ICdwcmV2aW91cycpIHtcbiAgICAgIGNsYXNzZXNbJ3NsaWNrLXByZXYnXSA9IHRydWU7XG5cbiAgICAgIGlmICghdGhpcy5pbmZpbml0ZSAmJiAodGhpcy5jdXJyZW50U2xpZGUgPT09IDAgfHwgdGhpcy5zbGlkZUNvdW50IDw9IHRoaXMuc2xpZGVzVG9TaG93KSkge1xuICAgICAgICBjbGFzc2VzWydzbGljay1kaXNhYmxlZCddID0gdHJ1ZTtcbiAgICAgICAgY2xpY2thYmxlID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIG9wdGlvbi5rZXkgPSAnMCc7XG4gICAgICBhcnJvdyA9IHRoaXMucHJldkFycm93ID8gdGhpcy5wcmV2QXJyb3cob3B0aW9uKVswXSA6IGgoXCJidXR0b25cIiwge1xuICAgICAgICBcImF0dHJzXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJidXR0b25cIixcbiAgICAgICAgICBcImRhdGEtcm9sZVwiOiBcIm5vbmVcIlxuICAgICAgICB9LFxuICAgICAgICBcInN0eWxlXCI6IFwiZGlzcGxheTogYmxvY2s7XCJcbiAgICAgIH0sIFtcIlByZXZpb3VzXCJdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2xhc3Nlc1snc2xpY2stbmV4dCddID0gdHJ1ZTtcblxuICAgICAgaWYgKCFjYW5Hb05leHQodGhpcy4kcHJvcHMpKSB7XG4gICAgICAgIGNsYXNzZXNbJ3NsaWNrLWRpc2FibGVkJ10gPSB0cnVlO1xuICAgICAgICBjbGlja2FibGUgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgb3B0aW9uLmtleSA9ICcxJztcbiAgICAgIGFycm93ID0gdGhpcy5uZXh0QXJyb3cgPyB0aGlzLm5leHRBcnJvdyhvcHRpb24pWzBdIDogaChcImJ1dHRvblwiLCB7XG4gICAgICAgIFwiYXR0cnNcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImJ1dHRvblwiLFxuICAgICAgICAgIFwiZGF0YS1yb2xlXCI6IFwibm9uZVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwic3R5bGVcIjogXCJkaXNwbGF5OiBibG9jaztcIlxuICAgICAgfSwgW1wiTmV4dFwiXSk7XG4gICAgfVxuXG4gICAgc2V0Vk5vZGVEYXRhKGFycm93LCAna2V5Jywgb3B0aW9uLmtleSk7XG4gICAgdk5vZGVVdGlsc19tZXJnZVZOb2RlRGF0YShhcnJvdywgJ2NsYXNzJywgY2xhc3Nlcyk7XG4gICAgdk5vZGVVdGlsc19tZXJnZVZOb2RlRGF0YShhcnJvdywgJ29uJywge1xuICAgICAgY2xpY2s6IGZ1bmN0aW9uIGNsaWNrKCkge1xuICAgICAgICBpZiAoY2xpY2thYmxlKSB7XG4gICAgICAgICAgX3RoaXMuJGVtaXQoJ2Fycm93Q2xpY2tlZCcsIHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IF90aGlzLnR5cGVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBhcnJvdztcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9TbGlkZXJBcnJvdy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX1NsaWRlckFycm93dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKFNsaWRlckFycm93dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBFWFRFUk5BTCBNT0RVTEU6IC4vc3JjL1NsaWRlckFycm93LnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTIxMTM3NjAzJnNjb3BlZD10cnVlJmxhbmc9Y3NzJlxudmFyIFNsaWRlckFycm93dnVlX3R5cGVfc3R5bGVfaW5kZXhfMF9pZF8yMTEzNzYwM19zY29wZWRfdHJ1ZV9sYW5nX2Nzc18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiZjAxM1wiKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvU2xpZGVyQXJyb3cudnVlXG52YXIgU2xpZGVyQXJyb3dfcmVuZGVyLCBTbGlkZXJBcnJvd19zdGF0aWNSZW5kZXJGbnNcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBTbGlkZXJBcnJvd19jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHNyY19TbGlkZXJBcnJvd3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgU2xpZGVyQXJyb3dfcmVuZGVyLFxuICBTbGlkZXJBcnJvd19zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBcIjIxMTM3NjAzXCIsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIFNsaWRlckFycm93ID0gKFNsaWRlckFycm93X2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIEVYVEVSTkFMIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5zcGxpdC5qc1xudmFyIGVzX3N0cmluZ19zcGxpdCA9IF9fd2VicGFja19yZXF1aXJlX18oXCIxMjc2XCIpO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9jYWNoZS1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tMTItMCEuL25vZGVfbW9kdWxlcy90aHJlYWQtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVldGlmeS1sb2FkZXIvbGliL2xvYWRlci5qcz8/cmVmLS0xOS0wIS4vbm9kZV9tb2R1bGVzL2NhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS0wLTAhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy9TbGlkZXJEb3RzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcblxuXG5cblxuXG5cblxudmFyIGdldERvdENvdW50ID0gZnVuY3Rpb24gZ2V0RG90Q291bnQoc3BlYykge1xuICB2YXIgZG90cztcblxuICBpZiAoc3BlYy5pbmZpbml0ZSkge1xuICAgIGRvdHMgPSBNYXRoLmNlaWwoc3BlYy5zbGlkZUNvdW50IC8gc3BlYy5zbGlkZXNUb1Njcm9sbCk7XG4gIH0gZWxzZSB7XG4gICAgZG90cyA9IE1hdGguY2VpbCgoc3BlYy5zbGlkZUNvdW50IC0gc3BlYy5zbGlkZXNUb1Nob3cpIC8gc3BlYy5zbGlkZXNUb1Njcm9sbCkgKyAxO1xuICB9XG5cbiAgcmV0dXJuIGRvdHM7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBTbGlkZXJEb3RzdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ1NsaWRlckRvdHMnLFxuICBwcm9wczogUFJPUF9LRVlTLkRPVCxcbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHZhciBoID0gYXJndW1lbnRzWzBdO1xuICAgIHZhciBkb3RDb3VudCA9IGdldERvdENvdW50KHtcbiAgICAgIHNsaWRlQ291bnQ6IHRoaXMuc2xpZGVDb3VudCxcbiAgICAgIHNsaWRlc1RvU2Nyb2xsOiB0aGlzLnNsaWRlc1RvU2Nyb2xsLFxuICAgICAgc2xpZGVzVG9TaG93OiB0aGlzLnNsaWRlc1RvU2hvdyxcbiAgICAgIGluZmluaXRlOiB0aGlzLmluZmluaXRlXG4gICAgfSk7IC8vIEFwcGx5IGpvaW4gJiBzcGxpdCB0byBBcnJheSB0byBwcmUtZmlsbCBpdCBmb3IgSUU4XG4gICAgLy9cbiAgICAvLyBDcmVkaXQ6IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzEzNzM1NDI1LzE4NDk0NThcblxuICAgIHZhciBkb3RzID0gQXJyYXkuYXBwbHkobnVsbCwgQXJyYXkoZG90Q291bnQgKyAxKS5qb2luKCcwJykuc3BsaXQoJycpKS5tYXAoZnVuY3Rpb24gKHgsIGkpIHtcbiAgICAgIHZhciBsZWZ0Qm91bmQgPSBpICogX3RoaXMuc2xpZGVzVG9TY3JvbGw7XG4gICAgICB2YXIgcmlnaHRCb3VuZCA9IGkgKiBfdGhpcy5zbGlkZXNUb1Njcm9sbCArIChfdGhpcy5zbGlkZXNUb1Njcm9sbCAtIDEpO1xuICAgICAgdmFyIGNsYXNzTmFtZSA9IHtcbiAgICAgICAgJ3NsaWNrLWFjdGl2ZSc6IF90aGlzLmN1cnJlbnRTbGlkZSA+PSBsZWZ0Qm91bmQgJiYgX3RoaXMuY3VycmVudFNsaWRlIDw9IHJpZ2h0Qm91bmRcbiAgICAgIH07XG4gICAgICB2YXIgZG90T3B0aW9ucyA9IHtcbiAgICAgICAgbWVzc2FnZTogJ2RvdHMnLFxuICAgICAgICBpbmRleDogaSxcbiAgICAgICAgc2xpZGVzVG9TY3JvbGw6IF90aGlzLnNsaWRlc1RvU2Nyb2xsLFxuICAgICAgICBjdXJyZW50U2xpZGU6IF90aGlzLmN1cnJlbnRTbGlkZVxuICAgICAgfTtcbiAgICAgIHZhciBjdXN0b21QYWdpbmcgPSBfdGhpcy5jdXN0b21QYWdpbmcgPyBfdGhpcy5jdXN0b21QYWdpbmcoaSlbMF0gOiBoKFwiYnV0dG9uXCIsIFtpICsgMV0pO1xuICAgICAgcmV0dXJuIGgoXCJsaVwiLCB7XG4gICAgICAgIFwia2V5XCI6IGksXG4gICAgICAgIFwiY2xhc3NcIjogY2xhc3NOYW1lLFxuICAgICAgICBcIm9uXCI6IHtcbiAgICAgICAgICBcImNsaWNrXCI6IGZ1bmN0aW9uIGNsaWNrKCkge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzLiRlbWl0KCdkb3RDbGlja2VkJywgZG90T3B0aW9ucyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LCBbY3VzdG9tUGFnaW5nXSk7XG4gICAgfSk7XG4gICAgdmFyIHdyYXBwZXJTdHlsZSA9IHtcbiAgICAgIGRpc3BsYXk6ICdibG9jaydcbiAgICB9O1xuXG4gICAgdmFyIHdyYXBwZXJDbGFzcyA9IF9kZWZpbmVQcm9wZXJ0eSh7fSwgdGhpcy5kb3RzQ2xhc3MsIHRydWUpO1xuXG4gICAgcmV0dXJuIGgoXCJ1bFwiLCB7XG4gICAgICBcInN0eWxlXCI6IHdyYXBwZXJTdHlsZSxcbiAgICAgIFwiY2xhc3NcIjogd3JhcHBlckNsYXNzXG4gICAgfSwgW2RvdHNdKTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9TbGlkZXJEb3RzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfU2xpZGVyRG90c3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChTbGlkZXJEb3RzdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9TbGlkZXJEb3RzLnZ1ZVxudmFyIFNsaWRlckRvdHNfcmVuZGVyLCBTbGlkZXJEb3RzX3N0YXRpY1JlbmRlckZuc1xuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBTbGlkZXJEb3RzX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgc3JjX1NsaWRlckRvdHN2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIFNsaWRlckRvdHNfcmVuZGVyLFxuICBTbGlkZXJEb3RzX3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIFNsaWRlckRvdHMgPSAoU2xpZGVyRG90c19jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9pbml0aWFsU3RhdGUuanNcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGluaXRpYWxTdGF0ZSA9ICh7XG4gIGFuaW1hdGluZzogZmFsc2UsXG4gIGF1dG9wbGF5aW5nOiBudWxsLFxuICBjdXJyZW50RGlyZWN0aW9uOiAwLFxuICBjdXJyZW50TGVmdDogbnVsbCxcbiAgY3VycmVudFNsaWRlOiAwLFxuICBkaXJlY3Rpb246IDEsXG4gIGRyYWdnaW5nOiBmYWxzZSxcbiAgZWRnZURyYWdnZWQ6IGZhbHNlLFxuICBpbml0aWFsaXplZDogZmFsc2UsXG4gIGxhenlMb2FkZWRMaXN0OiBbXSxcbiAgbGlzdEhlaWdodDogbnVsbCxcbiAgbGlzdFdpZHRoOiBudWxsLFxuICBzY3JvbGxpbmc6IGZhbHNlLFxuICBzbGlkZUhlaWdodDogbnVsbCxcbiAgc2xpZGVXaWR0aDogbnVsbCxcbiAgc3dpcGVMZWZ0OiBudWxsLFxuICBzd2lwZWQ6IGZhbHNlLFxuICAvLyB1c2VkIGJ5IHN3aXBlRXZlbnQuIGRpZmZlcmVudGl0ZXMgYmV0d2VlbiB0b3VjaCBhbmQgc3dpcGUuXG4gIHN3aXBpbmc6IGZhbHNlLFxuICB0b3VjaE9iamVjdDoge1xuICAgIHN0YXJ0WDogMCxcbiAgICBzdGFydFk6IDAsXG4gICAgY3VyWDogMCxcbiAgICBjdXJZOiAwXG4gIH0sXG4gIHRyYWNrU3R5bGU6IHt9LFxuICB0cmFja1dpZHRoOiAwXG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2NhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS0xMi0wIS4vbm9kZV9tb2R1bGVzL3RocmVhZC1sb2FkZXIvZGlzdC9janMuanMhLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWV0aWZ5LWxvYWRlci9saWIvbG9hZGVyLmpzPz9yZWYtLTE5LTAhLi9ub2RlX21vZHVsZXMvY2FjaGUtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTAtMCEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL0lubmVyU2xpZGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBJbm5lclNsaWRlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdJbm5lclNsaWRlcicsXG4gIGNvbXBvbmVudHM6IHtcbiAgICBTbGlkZXJUcmFjazogU2xpZGVyVHJhY2ssXG4gICAgU2xpZGVyQXJyb3c6IFNsaWRlckFycm93LFxuICAgIFNsaWRlckRvdHM6IFNsaWRlckRvdHNcbiAgfSxcbiAgbWl4aW5zOiBbbWl4aW5Qcm9wc1VwZGF0ZWRdLFxuICBpbmhlcml0QXR0cnM6IGZhbHNlLFxuICBwcm9wczogX29iamVjdFNwcmVhZDIoe30sIGRlZmF1bHRQcm9wc19wcm9wcywge1xuICAgIHVuc2xpY2s6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0sXG4gICAgcHJldkFycm93OiBGdW5jdGlvbixcbiAgICBuZXh0QXJyb3c6IEZ1bmN0aW9uLFxuICAgIGN1c3RvbVBhZ2luZzogRnVuY3Rpb25cbiAgfSksXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIF9vYmplY3RTcHJlYWQyKHt9LCBpbml0aWFsU3RhdGUsIHtcbiAgICAgIGN1cnJlbnRTbGlkZTogdGhpcy5pbml0aWFsU2xpZGVcbiAgICB9KTtcbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBzbGlkZUNvdW50OiBmdW5jdGlvbiBzbGlkZUNvdW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHNsb3RzLmRlZmF1bHQubGVuZ3RoO1xuICAgIH0sXG4gICAgc3BlYzogZnVuY3Rpb24gc3BlYygpIHtcbiAgICAgIHJldHVybiBfb2JqZWN0U3ByZWFkMih7fSwgdGhpcy4kcHJvcHMsIHt9LCB0aGlzLiRkYXRhLCB7XG4gICAgICAgIHNsaWRlQ291bnQ6IHRoaXMuc2xpZGVDb3VudFxuICAgICAgfSk7XG4gICAgfVxuICB9LFxuICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkge1xuICAgIC8vIG5vbi1yZWFjdGl2ZSBkYXRhXG4gICAgdGhpcy5jYWxsYmFja1RpbWVycyA9IFtdO1xuICAgIHRoaXMuY2xpY2thYmxlID0gdHJ1ZTtcbiAgICB0aGlzLmRlYm91bmNlZFJlc2l6ZSA9IG51bGw7XG4gICAgdGhpcy5zc3JJbml0KCk7XG4gICAgdGhpcy4kcGFyZW50LiRlbWl0KCdpbml0Jyk7XG5cbiAgICBpZiAodGhpcy5sYXp5TG9hZCkge1xuICAgICAgdmFyIHNsaWRlc1RvTG9hZCA9IGdldE9uRGVtYW5kTGF6eVNsaWRlcyh0aGlzLnNwZWMpO1xuXG4gICAgICBpZiAoc2xpZGVzVG9Mb2FkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5sYXp5TG9hZGVkTGlzdCA9IHRoaXMubGF6eUxvYWRlZExpc3QuY29uY2F0KHNsaWRlc1RvTG9hZCk7XG4gICAgICAgIHRoaXMuJHBhcmVudC4kZW1pdCgnbGF6eUxvYWQnLCBzbGlkZXNUb0xvYWQpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIHNwZWMgPSBfb2JqZWN0U3ByZWFkMih7XG4gICAgICBsaXN0UmVmOiB0aGlzLiRyZWZzLmxpc3QsXG4gICAgICB0cmFja1JlZjogdGhpcy4kcmVmcy50cmFjayxcbiAgICAgIGNoaWxkcmVuOiB0aGlzLiRzbG90cy5kZWZhdWx0XG4gICAgfSwgdGhpcy4kcHJvcHMpO1xuXG4gICAgdGhpcy51cGRhdGVTdGF0ZShzcGVjLCB0cnVlKTtcbiAgICB0aGlzLmFkYXB0SGVpZ2h0KCk7XG5cbiAgICBpZiAodGhpcy5hdXRvUGxheSkge1xuICAgICAgdGhpcy5hdXRvUGxheSgndXBkYXRlJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubGF6eUxvYWQgPT09ICdwcm9ncmVzc2l2ZScpIHtcbiAgICAgIHRoaXMubGF6eUxvYWRUaW1lciA9IHNldEludGVydmFsKHRoaXMucHJvZ3Jlc3NpdmVMYXp5TG9hZCwgMTAwMCk7XG4gICAgfVxuXG4gICAgdGhpcy5ybyA9IG5ldyBSZXNpemVPYnNlcnZlcl9lc1tcImFcIiAvKiBkZWZhdWx0ICovXShmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoX3RoaXMuYW5pbWF0aW5nKSB7XG4gICAgICAgIF90aGlzLm9uV2luZG93UmVzaXplZChmYWxzZSk7IC8vIGRvbid0IHNldCB0cmFja1N0eWxlIGhlbmNlIGRvbid0IGJyZWFrIGFuaW1hdGlvblxuXG5cbiAgICAgICAgX3RoaXMuY2FsbGJhY2tUaW1lcnMucHVzaChzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMub25XaW5kb3dSZXNpemVkKCk7XG4gICAgICAgIH0sIF90aGlzLnNwZWVkKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfdGhpcy5vbldpbmRvd1Jlc2l6ZWQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnJvLm9ic2VydmUodGhpcy4kcmVmcy5saXN0KTtcbiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHRoaXMuJHJlZnMubGlzdC5xdWVyeVNlbGVjdG9yQWxsKCcuc2xpY2stc2xpZGUnKSwgZnVuY3Rpb24gKHNsaWRlKSB7XG4gICAgICBzbGlkZS5vbmZvY3VzID0gX3RoaXMucGF1c2VPbkZvY3VzID8gX3RoaXMub25TbGlkZUZvY3VzIDogbnVsbDtcbiAgICAgIHNsaWRlLm9uYmx1ciA9IF90aGlzLnBhdXNlT25Gb2N1cyA/IF90aGlzLm9uU2xpZGVCbHVyIDogbnVsbDtcbiAgICB9KTtcblxuICAgIGlmICh3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMub25XaW5kb3dSZXNpemVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2luZG93LmF0dGFjaEV2ZW50KCdvbnJlc2l6ZScsIHRoaXMub25XaW5kb3dSZXNpemVkKTtcbiAgICB9XG4gIH0sXG4gIHVwZGF0ZWQ6IGZ1bmN0aW9uIHVwZGF0ZWQoKSB7XG4gICAgdGhpcy5jaGVja0ltYWdlc0xvYWQoKTtcbiAgICB0aGlzLiRwYXJlbnQuJGVtaXQoJ3JlSW5pdCcpO1xuXG4gICAgaWYgKHRoaXMubGF6eUxvYWQpIHtcbiAgICAgIHZhciBzbGlkZXNUb0xvYWQgPSBnZXRPbkRlbWFuZExhenlTbGlkZXMoX29iamVjdFNwcmVhZDIoe30sIHRoaXMuJHByb3BzLCB7fSwgdGhpcy4kZGF0YSkpO1xuXG4gICAgICBpZiAoc2xpZGVzVG9Mb2FkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5sYXp5TG9hZGVkTGlzdCA9IHRoaXMubGF6eUxvYWRlZExpc3QuY29uY2F0KHNsaWRlc1RvTG9hZCk7XG4gICAgICAgIHRoaXMuJHBhcmVudC4kZW1pdCgnbGF6eUxvYWQnLCBzbGlkZXNUb0xvYWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuYWRhcHRIZWlnaHQoKTtcbiAgfSxcbiAgYmVmb3JlRGVzdHJveTogZnVuY3Rpb24gYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLnJvLnVub2JzZXJ2ZSh0aGlzLiRyZWZzLmxpc3QpO1xuXG4gICAgaWYgKHRoaXMuYW5pbWF0aW9uRW5kQ2FsbGJhY2spIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmFuaW1hdGlvbkVuZENhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5sYXp5TG9hZFRpbWVyKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMubGF6eUxvYWRUaW1lcik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2FsbGJhY2tUaW1lcnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmNhbGxiYWNrVGltZXJzLmZvckVhY2goZnVuY3Rpb24gKHRpbWVyKSB7XG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmNhbGxiYWNrVGltZXJzID0gW107XG4gICAgfVxuXG4gICAgaWYgKHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5vbldpbmRvd1Jlc2l6ZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB3aW5kb3cuZGV0YWNoRXZlbnQoJ29ucmVzaXplJywgdGhpcy5vbldpbmRvd1Jlc2l6ZWQpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmF1dG9wbGF5VGltZXIpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5hdXRvcGxheVRpbWVyKTtcbiAgICB9XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBvblByb3BzVXBkYXRlZDogZnVuY3Rpb24gb25Qcm9wc1VwZGF0ZWQoKSB7XG4gICAgICB2YXIgbmV4dFByb3BzID0gdGhpcy4kcHJvcHM7XG5cbiAgICAgIHZhciBzcGVjID0gX29iamVjdFNwcmVhZDIoe1xuICAgICAgICBsaXN0UmVmOiB0aGlzLiRyZWZzLmxpc3QsXG4gICAgICAgIHRyYWNrUmVmOiB0aGlzLiRyZWZzLnRyYWNrLFxuICAgICAgICBjaGlsZHJlbjogdGhpcy4kc2xvdHMuZGVmYXVsdFxuICAgICAgfSwgbmV4dFByb3BzLCB7fSwgdGhpcy4kZGF0YSk7XG5cbiAgICAgIHZhciBzZXRUcmFja1N0eWxlID0gZmFsc2U7XG5cbiAgICAgIGZvciAodmFyIF9pID0gMCwgX09iamVjdCRrZXlzID0gT2JqZWN0LmtleXModGhpcy4kcHJvcHMpOyBfaSA8IF9PYmplY3Qka2V5cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgdmFyIGtleSA9IF9PYmplY3Qka2V5c1tfaV07XG5cbiAgICAgICAgaWYgKCFuZXh0UHJvcHMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgIHNldFRyYWNrU3R5bGUgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKF90eXBlb2YobmV4dFByb3BzW2tleV0pID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgbmV4dFByb3BzW2tleV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXh0UHJvcHNba2V5XSAhPT0gdGhpcy4kcHJvcHNba2V5XSkge1xuICAgICAgICAgIHNldFRyYWNrU3R5bGUgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMudXBkYXRlU3RhdGUoc3BlYywgc2V0VHJhY2tTdHlsZSk7XG5cbiAgICAgIGlmICh0aGlzLmN1cnJlbnRTbGlkZSA+PSB0aGlzLnNsaWRlQ291bnQpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VTbGlkZSh7XG4gICAgICAgICAgbWVzc2FnZTogJ2luZGV4JyxcbiAgICAgICAgICBpbmRleDogdGhpcy5zbGlkZUNvdW50IC0gbmV4dFByb3BzLnNsaWRlc1RvU2hvdyxcbiAgICAgICAgICBjdXJyZW50U2xpZGU6IHRoaXMuY3VycmVudFNsaWRlXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAobmV4dFByb3BzLmF1dG9wbGF5KSB7XG4gICAgICAgIHRoaXMuYXV0b1BsYXkoJ3VwZGF0ZScpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wYXVzZSgncGF1c2VkJyk7XG4gICAgICB9XG4gICAgfSxcbiAgICB1cGRhdGVTdGF0ZTogZnVuY3Rpb24gdXBkYXRlU3RhdGUoc3BlYywgc2V0VHJhY2tTdHlsZSkge1xuICAgICAgdmFyIHVwZGF0ZWRTdGF0ZSA9IGluaXRpYWxpemVkU3RhdGUoc3BlYyk7XG4gICAgICBzcGVjID0gX29iamVjdFNwcmVhZDIoe30sIHNwZWMsIHt9LCB1cGRhdGVkU3RhdGUsIHtcbiAgICAgICAgc2xpZGVJbmRleDogdXBkYXRlZFN0YXRlLmN1cnJlbnRTbGlkZVxuICAgICAgfSk7XG4gICAgICB2YXIgdGFyZ2V0TGVmdCA9IGdldFRyYWNrTGVmdChzcGVjKTtcbiAgICAgIHNwZWMgPSBfb2JqZWN0U3ByZWFkMih7fSwgc3BlYywge1xuICAgICAgICBsZWZ0OiB0YXJnZXRMZWZ0XG4gICAgICB9KTtcbiAgICAgIHZhciB0cmFja1N0eWxlID0gaW5uZXJTbGlkZXJVdGlsc19nZXRUcmFja0NTUyhzcGVjKTtcblxuICAgICAgaWYgKHNldFRyYWNrU3R5bGUgfHwgdGhpcy5zbGlkZUNvdW50ICE9PSBzcGVjLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICB1cGRhdGVkU3RhdGVbJ3RyYWNrU3R5bGUnXSA9IHRyYWNrU3R5bGU7XG4gICAgICB9XG5cbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy4kZGF0YSwgdXBkYXRlZFN0YXRlKTtcbiAgICB9LFxuICAgIGFkYXB0SGVpZ2h0OiBmdW5jdGlvbiBhZGFwdEhlaWdodCgpIHtcbiAgICAgIGlmICh0aGlzLmFkYXB0aXZlSGVpZ2h0ICYmIHRoaXMuJHJlZnMubGlzdCkge1xuICAgICAgICB2YXIgZWxlbSA9IHRoaXMuJHJlZnMubGlzdC5xdWVyeVNlbGVjdG9yKFwiW2RhdGEtaW5kZXg9XFxcIlwiLmNvbmNhdCh0aGlzLmN1cnJlbnRTbGlkZSwgXCJcXFwiXVwiKSk7XG4gICAgICAgIHRoaXMuJHJlZnMubGlzdC5zdHlsZS5oZWlnaHQgPSBnZXRIZWlnaHQoZWxlbSkgKyAncHgnO1xuICAgICAgfVxuICAgIH0sXG4gICAgc3NySW5pdDogZnVuY3Rpb24gc3NySW5pdCgpIHtcbiAgICAgIHZhciBwcmVDbG9uZXMgPSBnZXRQcmVDbG9uZXModGhpcy5zcGVjKTtcbiAgICAgIHZhciBwb3N0Q2xvbmVzID0gZ2V0UG9zdENsb25lcyh0aGlzLnNwZWMpO1xuXG4gICAgICBpZiAodGhpcy52YXJpYWJsZVdpZHRoKSB7XG4gICAgICAgIHZhciB0cmFja1dpZHRoID0gW10sXG4gICAgICAgICAgICB0cmFja0xlZnQgPSBbXTtcbiAgICAgICAgdmFyIGNoaWxkcmVuV2lkdGhzID0gW107XG4gICAgICAgIHRoaXMuJHNsb3RzLmRlZmF1bHQuZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgICB2YXIgX2dldFN0eWxlID0gdk5vZGVVdGlsc19nZXRTdHlsZShjaGlsZCksXG4gICAgICAgICAgICAgIHdpZHRoID0gX2dldFN0eWxlLndpZHRoO1xuXG4gICAgICAgICAgY2hpbGRyZW5XaWR0aHMucHVzaCh3aWR0aCk7XG4gICAgICAgICAgdHJhY2tXaWR0aC5wdXNoKHdpZHRoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcmVDbG9uZXM7IGkrKykge1xuICAgICAgICAgIHRyYWNrTGVmdC5wdXNoKGNoaWxkcmVuV2lkdGhzW2NoaWxkcmVuV2lkdGhzLmxlbmd0aCAtIDEgLSBpXSk7XG4gICAgICAgICAgdHJhY2tXaWR0aC5wdXNoKGNoaWxkcmVuV2lkdGhzW2NoaWxkcmVuV2lkdGhzLmxlbmd0aCAtIDEgLSBpXSk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBwb3N0Q2xvbmVzOyBfaTIrKykge1xuICAgICAgICAgIHRyYWNrV2lkdGgucHVzaChjaGlsZHJlbldpZHRoc1tfaTJdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAodmFyIF9pMyA9IDA7IF9pMyA8IHRoaXMuY3VycmVudFNsaWRlOyBfaTMrKykge1xuICAgICAgICAgIHRyYWNrTGVmdC5wdXNoKGNoaWxkcmVuV2lkdGhzW19pM10pO1xuICAgICAgICB9IC8vIGZpbHRlciB1bmRlZmluZWRcblxuXG4gICAgICAgIHRyYWNrV2lkdGggPSB0cmFja1dpZHRoLmZpbHRlcihmdW5jdGlvbiAobykge1xuICAgICAgICAgIHJldHVybiBvO1xuICAgICAgICB9KTtcbiAgICAgICAgdHJhY2tMZWZ0ID0gdHJhY2tMZWZ0LmZpbHRlcihmdW5jdGlvbiAobykge1xuICAgICAgICAgIHJldHVybiBvO1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIHRyYWNrU3R5bGUgPSB7XG4gICAgICAgICAgd2lkdGg6IFwiY2FsYyhcIi5jb25jYXQodHJhY2tXaWR0aC5qb2luKCcgKyAnKSwgXCIpXCIpLFxuICAgICAgICAgIGxlZnQ6IFwiY2FsYyhcIi5jb25jYXQodHJhY2tMZWZ0Lm1hcChmdW5jdGlvbiAobykge1xuICAgICAgICAgICAgcmV0dXJuIFwiLVwiLmNvbmNhdChvKTtcbiAgICAgICAgICB9KS5qb2luKCcgKyAnKSwgXCIpXCIpXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHRoaXMuY2VudGVyTW9kZSkge1xuICAgICAgICAgIHZhciBjdXJyZW50V2lkdGggPSBjaGlsZHJlbldpZHRoc1t0aGlzLmN1cnJlbnRTbGlkZV07XG4gICAgICAgICAgdHJhY2tTdHlsZS5sZWZ0ID0gXCJjYWxjKFwiLmNvbmNhdCh0cmFja0xlZnQubWFwKGZ1bmN0aW9uIChvKSB7XG4gICAgICAgICAgICByZXR1cm4gXCItXCIuY29uY2F0KG8pO1xuICAgICAgICAgIH0pLmpvaW4oJyArICcpLCBcIiArICgxMDAlIC0gXCIpLmNvbmNhdChjdXJyZW50V2lkdGgsIFwiKSAvIDIgKVwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudHJhY2tTdHlsZSA9IHRyYWNrU3R5bGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgc2xpZGVDb3VudCA9IHByZUNsb25lcyArIHBvc3RDbG9uZXMgKyB0aGlzLnNsaWRlQ291bnQ7XG5cbiAgICAgICAgdmFyIF90cmFja1dpZHRoID0gMTAwIC8gdGhpcy5zbGlkZXNUb1Nob3cgKiBzbGlkZUNvdW50O1xuXG4gICAgICAgIHZhciBzbGlkZVdpZHRoID0gMTAwIC8gc2xpZGVDb3VudDtcblxuICAgICAgICB2YXIgX3RyYWNrTGVmdCA9IC1zbGlkZVdpZHRoICogKHByZUNsb25lcyArIHRoaXMuY3VycmVudFNsaWRlKSAqIF90cmFja1dpZHRoIC8gMTAwO1xuXG4gICAgICAgIGlmICh0aGlzLmNlbnRlck1vZGUpIHtcbiAgICAgICAgICBfdHJhY2tMZWZ0ICs9ICgxMDAgLSBzbGlkZVdpZHRoICogX3RyYWNrV2lkdGggLyAxMDApIC8gMjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2xpZGVXaWR0aCA9IHNsaWRlV2lkdGggKyAnJSc7XG4gICAgICAgIHRoaXMudHJhY2tTdHlsZSA9IHtcbiAgICAgICAgICB3aWR0aDogX3RyYWNrV2lkdGggKyAnJScsXG4gICAgICAgICAgbGVmdDogX3RyYWNrTGVmdCArICclJ1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0sXG4gICAgc2xpZGVIYW5kbGVyOiBmdW5jdGlvbiBzbGlkZUhhbmRsZXIoaW5kZXgpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgZG9udEFuaW1hdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuICAgICAgdmFyIGFzTmF2Rm9yID0gdGhpcy5hc05hdkZvcixcbiAgICAgICAgICBzcGVlZCA9IHRoaXMuc3BlZWQ7IC8vIGNhcHR1cmUgY3VycmVudHNsaWRlIGJlZm9yZSBzdGF0ZSBpcyB1cGRhdGVkXG5cbiAgICAgIHZhciBjdXJyZW50U2xpZGUgPSB0aGlzLmN1cnJlbnRTbGlkZTtcblxuICAgICAgdmFyIF9zbGlkZUhhbmRsZXIyID0gaW5uZXJTbGlkZXJVdGlsc19zbGlkZUhhbmRsZXIoX29iamVjdFNwcmVhZDIoe1xuICAgICAgICBpbmRleDogaW5kZXhcbiAgICAgIH0sIHRoaXMuJHByb3BzLCB7fSwgdGhpcy4kZGF0YSwge1xuICAgICAgICB0cmFja1JlZjogdGhpcy4kcmVmcy50cmFjayxcbiAgICAgICAgdXNlQ1NTOiB0aGlzLnVzZUNTUyAmJiAhZG9udEFuaW1hdGVcbiAgICAgIH0pKSxcbiAgICAgICAgICBzdGF0ZSA9IF9zbGlkZUhhbmRsZXIyLnN0YXRlLFxuICAgICAgICAgIG5leHRTdGF0ZSA9IF9zbGlkZUhhbmRsZXIyLm5leHRTdGF0ZTtcblxuICAgICAgaWYgKCFzdGF0ZSkgcmV0dXJuO1xuICAgICAgdGhpcy4kcGFyZW50LiRlbWl0KCdiZWZvcmVDaGFuZ2UnLCBjdXJyZW50U2xpZGUsIHN0YXRlLmN1cnJlbnRTbGlkZSk7XG4gICAgICB2YXIgc2xpZGVzVG9Mb2FkID0gc3RhdGUubGF6eUxvYWRlZExpc3QuZmlsdGVyKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gX3RoaXMyLmxhenlMb2FkZWRMaXN0LmluZGV4T2YodmFsdWUpIDwgMDtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoc2xpZGVzVG9Mb2FkLmxlbmd0aCkge1xuICAgICAgICB0aGlzLiRwYXJlbnQuJGVtaXQoJ2xhenlMb2FkJywgc2xpZGVzVG9Mb2FkKTtcbiAgICAgIH1cblxuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLiRkYXRhLCBzdGF0ZSk7XG5cbiAgICAgIGlmIChhc05hdkZvcikge1xuICAgICAgICBhc05hdkZvci5nb1RvKGluZGV4KTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFuZXh0U3RhdGUpIHJldHVybjtcbiAgICAgIHRoaXMuYW5pbWF0aW9uRW5kQ2FsbGJhY2sgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFuaW1hdGluZyA9IG5leHRTdGF0ZS5hbmltYXRpbmcsXG4gICAgICAgICAgICBmaXJzdEJhdGNoID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG5leHRTdGF0ZSwgW1wiYW5pbWF0aW5nXCJdKTtcblxuICAgICAgICBPYmplY3QuYXNzaWduKF90aGlzMi4kZGF0YSwgZmlyc3RCYXRjaCk7XG5cbiAgICAgICAgX3RoaXMyLmNhbGxiYWNrVGltZXJzLnB1c2goc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMyLmFuaW1hdGluZyA9IGFuaW1hdGluZztcbiAgICAgICAgfSwgMTApKTtcblxuICAgICAgICBfdGhpczIuJHBhcmVudC4kZW1pdCgnYWZ0ZXJDaGFuZ2UnLCBzdGF0ZS5jdXJyZW50U2xpZGUpOyAvLyBkZWxldGUgdGhpcy5hbmltYXRpb25FbmRDYWxsYmFja1xuXG5cbiAgICAgICAgX3RoaXMyLmFuaW1hdGlvbkVuZENhbGxiYWNrID0gdW5kZWZpbmVkO1xuICAgICAgfSwgc3BlZWQpO1xuICAgIH0sXG4gICAgb25XaW5kb3dSZXNpemVkOiBmdW5jdGlvbiBvbldpbmRvd1Jlc2l6ZWQoc2V0VHJhY2tTdHlsZSkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIGlmICh0aGlzLmRlYm91bmNlZFJlc2l6ZSkgdGhpcy5kZWJvdW5jZWRSZXNpemUuY2FuY2VsKCk7XG4gICAgICB0aGlzLmRlYm91bmNlZFJlc2l6ZSA9IGxvZGFzaF9kZWJvdW5jZV9kZWZhdWx0KCkoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3RoaXMzLnJlc2l6ZVdpbmRvdyhzZXRUcmFja1N0eWxlKTtcbiAgICAgIH0sIDUwKTtcbiAgICAgIHRoaXMuZGVib3VuY2VkUmVzaXplKCk7XG4gICAgfSxcbiAgICByZXNpemVXaW5kb3c6IGZ1bmN0aW9uIHJlc2l6ZVdpbmRvdygpIHtcbiAgICAgIHZhciBzZXRUcmFja1N0eWxlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB0cnVlO1xuXG4gICAgICBpZiAoISh0aGlzLiRyZWZzLnRyYWNrICYmIHRoaXMuJHJlZnMudHJhY2suJGVsKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBzcGVjID0gX29iamVjdFNwcmVhZDIoe1xuICAgICAgICBsaXN0UmVmOiB0aGlzLiRyZWZzLmxpc3QsXG4gICAgICAgIHRyYWNrUmVmOiB0aGlzLiRyZWZzLnRyYWNrLFxuICAgICAgICBjaGlsZHJlbjogdGhpcy4kc2xvdHMuZGVmYXVsdFxuICAgICAgfSwgdGhpcy4kcHJvcHMsIHt9LCB0aGlzLiRkYXRhKTtcblxuICAgICAgdGhpcy51cGRhdGVTdGF0ZShzcGVjLCBzZXRUcmFja1N0eWxlKTtcblxuICAgICAgaWYgKHRoaXMuYXV0b3BsYXkpIHtcbiAgICAgICAgdGhpcy5hdXRvUGxheSgndXBkYXRlJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBhdXNlKCdwYXVzZWQnKTtcbiAgICAgIH0gLy8gYW5pbWF0aW5nIHN0YXRlIHNob3VsZCBiZSBjbGVhcmVkIHdoaWxlIHJlc2l6aW5nLCBvdGhlcndpc2UgYXV0b3BsYXkgc3RvcHMgd29ya2luZ1xuXG5cbiAgICAgIHRoaXMuYW5pbWF0aW5nID0gZmFsc2U7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5hbmltYXRpb25FbmRDYWxsYmFjayk7IC8vIGRlbGV0ZSB0aGlzLmFuaW1hdGlvbkVuZENhbGxiYWNrXG5cbiAgICAgIHRoaXMuYW5pbWF0aW9uRW5kQ2FsbGJhY2sgPSB1bmRlZmluZWQ7XG4gICAgfSxcbiAgICBjaGVja0ltYWdlc0xvYWQ6IGZ1bmN0aW9uIGNoZWNrSW1hZ2VzTG9hZCgpIHtcbiAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgICB2YXIgaW1hZ2VzID0gdGhpcy4kcmVmcy5saXN0LnF1ZXJ5U2VsZWN0b3JBbGwoJy5zbGljay1zbGlkZSBpbWcnKTtcbiAgICAgIHZhciBpbWFnZXNDb3VudCA9IGltYWdlcy5sZW5ndGgsXG4gICAgICAgICAgbG9hZGVkQ291bnQgPSAwO1xuICAgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChpbWFnZXMsIGZ1bmN0aW9uIChpbWFnZSkge1xuICAgICAgICB2YXIgaGFuZGxlciA9IGZ1bmN0aW9uIGhhbmRsZXIoKSB7XG4gICAgICAgICAgcmV0dXJuICsrbG9hZGVkQ291bnQgJiYgbG9hZGVkQ291bnQgPj0gaW1hZ2VzQ291bnQgJiYgX3RoaXM0Lm9uV2luZG93UmVzaXplZCgpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmICghaW1hZ2Uub25jbGljaykge1xuICAgICAgICAgIGltYWdlLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gaW1hZ2UucGFyZW50Tm9kZS5mb2N1cygpO1xuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIHByZXZDbGlja0hhbmRsZXIgPSBpbWFnZS5vbmNsaWNrO1xuXG4gICAgICAgICAgaW1hZ2Uub25jbGljayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHByZXZDbGlja0hhbmRsZXIoKTtcbiAgICAgICAgICAgIGltYWdlLnBhcmVudE5vZGUuZm9jdXMoKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpbWFnZS5vbmxvYWQpIHtcbiAgICAgICAgICBpZiAoX3RoaXM0LmxhenlMb2FkKSB7XG4gICAgICAgICAgICBpbWFnZS5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIF90aGlzNC5hZGFwdEhlaWdodCgpO1xuXG4gICAgICAgICAgICAgIF90aGlzNC5jYWxsYmFja1RpbWVycy5wdXNoKHNldFRpbWVvdXQoX3RoaXM0Lm9uV2luZG93UmVzaXplZCwgX3RoaXM0LnNwZWVkKSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbWFnZS5vbmxvYWQgPSBoYW5kbGVyO1xuXG4gICAgICAgICAgICBpbWFnZS5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICBoYW5kbGVyKCk7XG5cbiAgICAgICAgICAgICAgX3RoaXM0LiRwYXJlbnQuJGVtaXQoJ2xhenlMb2FkRXJyb3InKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHByb2dyZXNzaXZlTGF6eUxvYWQ6IGZ1bmN0aW9uIHByb2dyZXNzaXZlTGF6eUxvYWQoKSB7XG4gICAgICB2YXIgc2xpZGVzVG9Mb2FkID0gW107XG5cbiAgICAgIHZhciBzcGVjID0gX29iamVjdFNwcmVhZDIoe30sIHRoaXMuJHByb3BzLCB7fSwgdGhpcy4kZGF0YSk7XG5cbiAgICAgIGZvciAodmFyIGluZGV4ID0gdGhpcy5jdXJyZW50U2xpZGU7IGluZGV4IDwgdGhpcy5zbGlkZUNvdW50ICsgZ2V0UG9zdENsb25lcyhzcGVjKTsgaW5kZXgrKykge1xuICAgICAgICBpZiAodGhpcy5sYXp5TG9hZGVkTGlzdC5pbmRleE9mKGluZGV4KSA8IDApIHtcbiAgICAgICAgICBzbGlkZXNUb0xvYWQucHVzaChpbmRleCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgX2luZGV4ID0gdGhpcy5jdXJyZW50U2xpZGUgLSAxOyBfaW5kZXggPj0gLWdldFByZUNsb25lcyhzcGVjKTsgX2luZGV4LS0pIHtcbiAgICAgICAgaWYgKHRoaXMubGF6eUxvYWRlZExpc3QuaW5kZXhPZihfaW5kZXgpIDwgMCkge1xuICAgICAgICAgIHNsaWRlc1RvTG9hZC5wdXNoKF9pbmRleCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHNsaWRlc1RvTG9hZC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMubGF6eUxvYWRlZExpc3QgPSB0aGlzLmxhenlMb2FkZWRMaXN0LmNvbmNhdChzbGlkZXNUb0xvYWQpO1xuICAgICAgICB0aGlzLiRwYXJlbnQuJGVtaXQoJ2xhenlMb2FkJywgc2xpZGVzVG9Mb2FkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLmxhenlMb2FkVGltZXIpIHtcbiAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMubGF6eUxvYWRUaW1lcik7IC8vIGRlbGV0ZSB0aGlzLmxhenlMb2FkVGltZXI7XG5cbiAgICAgICAgICB0aGlzLmxhenlMb2FkVGltZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGNsaWNrSGFuZGxlcjogZnVuY3Rpb24gY2xpY2tIYW5kbGVyKGUpIHtcbiAgICAgIGlmICh0aGlzLmNsaWNrYWJsZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNsaWNrYWJsZSA9IHRydWU7XG4gICAgfSxcbiAgICBrZXlIYW5kbGVyOiBmdW5jdGlvbiBrZXlIYW5kbGVyKGUpIHtcbiAgICAgIHZhciBkaXIgPSBpbm5lclNsaWRlclV0aWxzX2tleUhhbmRsZXIoZSwgdGhpcy5hY2Nlc3NpYmlsaXR5LCB0aGlzLnJ0bCk7XG5cbiAgICAgIGRpciAhPT0gJycgJiYgdGhpcy5jaGFuZ2VTbGlkZSh7XG4gICAgICAgIG1lc3NhZ2U6IGRpclxuICAgICAgfSk7XG4gICAgfSxcbiAgICBjaGFuZ2VTbGlkZTogZnVuY3Rpb24gY2hhbmdlU2xpZGUob3B0aW9ucykge1xuICAgICAgdmFyIGRvbnRBbmltYXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcblxuICAgICAgdmFyIHNwZWMgPSBfb2JqZWN0U3ByZWFkMih7fSwgdGhpcy4kcHJvcHMsIHt9LCB0aGlzLiRkYXRhKTtcblxuICAgICAgdmFyIHRhcmdldFNsaWRlID0gaW5uZXJTbGlkZXJVdGlsc19jaGFuZ2VTbGlkZShzcGVjLCBvcHRpb25zKTtcblxuICAgICAgaWYgKHRhcmdldFNsaWRlICE9PSAwICYmICF0YXJnZXRTbGlkZSkgcmV0dXJuO1xuXG4gICAgICBpZiAoZG9udEFuaW1hdGUgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5zbGlkZUhhbmRsZXIodGFyZ2V0U2xpZGUsIGRvbnRBbmltYXRlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2xpZGVIYW5kbGVyKHRhcmdldFNsaWRlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHN3aXBlU3RhcnQ6IGZ1bmN0aW9uIHN3aXBlU3RhcnQoZSkge1xuICAgICAgaWYgKHRoaXMudmVydGljYWxTd2lwaW5nKSB7XG4gICAgICAgIHRoaXMuZGlzYWJsZUJvZHlTY3JvbGwoKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHN0YXRlID0gaW5uZXJTbGlkZXJVdGlsc19zd2lwZVN0YXJ0KGUsIHRoaXMuc3dpcGUsIHRoaXMuZHJhZ2dhYmxlKTtcblxuICAgICAgaWYgKHN0YXRlICE9PSAnJykge1xuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMuJGRhdGEsIHN0YXRlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHN3aXBlTW92ZTogZnVuY3Rpb24gc3dpcGVNb3ZlKGUpIHtcbiAgICAgIHZhciBfdGhpczUgPSB0aGlzO1xuXG4gICAgICB2YXIgc3RhdGUgPSBpbm5lclNsaWRlclV0aWxzX3N3aXBlTW92ZShlLCBfb2JqZWN0U3ByZWFkMih7fSwgdGhpcy4kcHJvcHMsIHt9LCB0aGlzLiRkYXRhLCB7XG4gICAgICAgIHRyYWNrUmVmOiB0aGlzLiRyZWZzLnRyYWNrLFxuICAgICAgICBsaXN0UmVmOiB0aGlzLiRyZWZzLmxpc3QsXG4gICAgICAgIHNsaWRlSW5kZXg6IHRoaXMuY3VycmVudFNsaWRlLFxuICAgICAgICBvbkVkZ2U6IGZ1bmN0aW9uIG9uRWRnZShlKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzNS4kcGFyZW50LiRlbWl0KCdlZGdlJywgZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHN3aXBlRXZlbnQ6IGZ1bmN0aW9uIHN3aXBlRXZlbnQoZSkge1xuICAgICAgICAgIHJldHVybiBfdGhpczUuJHBhcmVudC4kZW1pdCgnc3dpcGUnLCBlKTtcbiAgICAgICAgfVxuICAgICAgfSkpO1xuXG4gICAgICBpZiAoIXN0YXRlKSByZXR1cm47XG5cbiAgICAgIGlmIChzdGF0ZVsnc3dpcGluZyddKSB7XG4gICAgICAgIHRoaXMuY2xpY2thYmxlID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy4kZGF0YSwgc3RhdGUpO1xuICAgIH0sXG4gICAgc3dpcGVFbmQ6IGZ1bmN0aW9uIHN3aXBlRW5kKGUpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGlubmVyU2xpZGVyVXRpbHNfc3dpcGVFbmQoZSwgX29iamVjdFNwcmVhZDIoe30sIHRoaXMuJHByb3BzLCB7fSwgdGhpcy4kZGF0YSwge1xuICAgICAgICB0cmFja1JlZjogdGhpcy4kcmVmcy50cmFjayxcbiAgICAgICAgbGlzdFJlZjogdGhpcy4kcmVmcy5saXN0LFxuICAgICAgICBzbGlkZUluZGV4OiB0aGlzLmN1cnJlbnRTbGlkZVxuICAgICAgfSkpO1xuXG4gICAgICBpZiAoIXN0YXRlKSByZXR1cm47XG4gICAgICB2YXIgdHJpZ2dlclNsaWRlSGFuZGxlciA9IHN0YXRlWyd0cmlnZ2VyU2xpZGVIYW5kbGVyJ107IC8vIGRlbGV0ZSBzdGF0ZVtcInRyaWdnZXJTbGlkZUhhbmRsZXJcIl07XG5cbiAgICAgIHRoaXMudHJpZ2dlclNsaWRlSGFuZGxlciA9IHVuZGVmaW5lZDtcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy4kZGF0YSwgc3RhdGUpO1xuICAgICAgaWYgKHRyaWdnZXJTbGlkZUhhbmRsZXIgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgICAgdGhpcy5zbGlkZUhhbmRsZXIodHJpZ2dlclNsaWRlSGFuZGxlcik7XG5cbiAgICAgIGlmICh0aGlzLnZlcnRpY2FsU3dpcGluZykge1xuICAgICAgICB0aGlzLmVuYWJsZUJvZHlTY3JvbGwoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHByZXY6IGZ1bmN0aW9uIHByZXYoKSB7XG4gICAgICB2YXIgX3RoaXM2ID0gdGhpcztcblxuICAgICAgLy8gdGhpcyBhbmQgZmVsbG93IG1ldGhvZHMgYXJlIHdyYXBwZWQgaW4gc2V0VGltZW91dFxuICAgICAgLy8gdG8gbWFrZSBzdXJlIGluaXRpYWxpemUgc2V0U3RhdGUgaGFzIGhhcHBlbmVkIGJlZm9yZVxuICAgICAgLy8gYW55IG9mIHN1Y2ggbWV0aG9kcyBhcmUgY2FsbGVkXG4gICAgICB0aGlzLmNhbGxiYWNrVGltZXJzLnB1c2goc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfdGhpczYuY2hhbmdlU2xpZGUoe1xuICAgICAgICAgIG1lc3NhZ2U6ICdwcmV2aW91cydcbiAgICAgICAgfSk7XG4gICAgICB9LCAwKSk7XG4gICAgfSxcbiAgICBuZXh0OiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgdmFyIF90aGlzNyA9IHRoaXM7XG5cbiAgICAgIHRoaXMuY2FsbGJhY2tUaW1lcnMucHVzaChzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzNy5jaGFuZ2VTbGlkZSh7XG4gICAgICAgICAgbWVzc2FnZTogJ25leHQnXG4gICAgICAgIH0pO1xuICAgICAgfSwgMCkpO1xuICAgIH0sXG4gICAgZ29UbzogZnVuY3Rpb24gZ29UbyhzbGlkZSkge1xuICAgICAgdmFyIF90aGlzOCA9IHRoaXM7XG5cbiAgICAgIHZhciBkb250QW5pbWF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZmFsc2U7XG4gICAgICBzbGlkZSA9IE51bWJlcihzbGlkZSk7XG4gICAgICBpZiAoaXNOYU4oc2xpZGUpKSByZXR1cm4gJyc7XG4gICAgICB0aGlzLmNhbGxiYWNrVGltZXJzLnB1c2goc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfdGhpczguY2hhbmdlU2xpZGUoe1xuICAgICAgICAgIG1lc3NhZ2U6ICdpbmRleCcsXG4gICAgICAgICAgaW5kZXg6IHNsaWRlLFxuICAgICAgICAgIGN1cnJlbnRTbGlkZTogX3RoaXM4LmN1cnJlbnRTbGlkZVxuICAgICAgICB9LCBkb250QW5pbWF0ZSk7XG4gICAgICB9LCAwKSk7XG4gICAgfSxcbiAgICBwbGF5OiBmdW5jdGlvbiBwbGF5KCkge1xuICAgICAgdmFyIG5leHRJbmRleDtcblxuICAgICAgaWYgKHRoaXMucnRsKSB7XG4gICAgICAgIG5leHRJbmRleCA9IHRoaXMuY3VycmVudFNsaWRlIC0gdGhpcy5zbGlkZXNUb1Njcm9sbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChjYW5Hb05leHQoX29iamVjdFNwcmVhZDIoe30sIHRoaXMuJHByb3BzLCB7fSwgdGhpcy4kZGF0YSkpKSB7XG4gICAgICAgICAgbmV4dEluZGV4ID0gdGhpcy5jdXJyZW50U2xpZGUgKyB0aGlzLnNsaWRlc1RvU2Nyb2xsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLnNsaWRlSGFuZGxlcihuZXh0SW5kZXgpO1xuICAgIH0sXG4gICAgYXV0b1BsYXk6IGZ1bmN0aW9uIGF1dG9QbGF5KHBsYXlUeXBlKSB7XG4gICAgICBpZiAodGhpcy5hdXRvcGxheVRpbWVyKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5hdXRvcGxheVRpbWVyKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGF1dG9wbGF5aW5nID0gdGhpcy5hdXRvcGxheWluZztcblxuICAgICAgaWYgKHBsYXlUeXBlID09PSAndXBkYXRlJykge1xuICAgICAgICBpZiAoYXV0b3BsYXlpbmcgPT09ICdob3ZlcmVkJyB8fCBhdXRvcGxheWluZyA9PT0gJ2ZvY3VzZWQnIHx8IGF1dG9wbGF5aW5nID09PSAncGF1c2VkJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChwbGF5VHlwZSA9PT0gJ2xlYXZlJykge1xuICAgICAgICBpZiAoYXV0b3BsYXlpbmcgPT09ICdwYXVzZWQnIHx8IGF1dG9wbGF5aW5nID09PSAnZm9jdXNlZCcpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocGxheVR5cGUgPT09ICdibHVyJykge1xuICAgICAgICBpZiAoYXV0b3BsYXlpbmcgPT09ICdwYXVzZWQnIHx8IGF1dG9wbGF5aW5nID09PSAnaG92ZXJlZCcpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5hdXRvcGxheVRpbWVyID0gc2V0SW50ZXJ2YWwodGhpcy5wbGF5LCB0aGlzLmF1dG9wbGF5U3BlZWQgKyA1MCk7XG4gICAgICB0aGlzLmF1dG9wbGF5aW5nID0gJ3BsYXlpbmcnO1xuICAgIH0sXG4gICAgcGF1c2U6IGZ1bmN0aW9uIHBhdXNlKHBhdXNlVHlwZSkge1xuICAgICAgaWYgKHRoaXMuYXV0b3BsYXlUaW1lcikge1xuICAgICAgICBjbGVhckludGVydmFsKHRoaXMuYXV0b3BsYXlUaW1lcik7XG4gICAgICAgIHRoaXMuYXV0b3BsYXlUaW1lciA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciBhdXRvcGxheWluZyA9IHRoaXMuYXV0b3BsYXlpbmc7XG5cbiAgICAgIGlmIChwYXVzZVR5cGUgPT09ICdwYXVzZWQnKSB7XG4gICAgICAgIHRoaXMuYXV0b3BsYXlpbmcgPSAncGF1c2VkJztcbiAgICAgIH0gZWxzZSBpZiAocGF1c2VUeXBlID09PSAnZm9jdXNlZCcpIHtcbiAgICAgICAgaWYgKGF1dG9wbGF5aW5nID09PSAnaG92ZXJlZCcgfHwgYXV0b3BsYXlpbmcgPT09ICdwbGF5aW5nJykge1xuICAgICAgICAgIHRoaXMuYXV0b3BsYXlpbmcgPSAnZm9jdXNlZCc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHBhdXNlVHlwZSAgaXMgJ2hvdmVyZWQnXG4gICAgICAgIGlmIChhdXRvcGxheWluZyA9PT0gJ3BsYXlpbmcnKSB7XG4gICAgICAgICAgdGhpcy5hdXRvcGxheWluZyA9ICdob3ZlcmVkJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgb25Eb3RzT3ZlcjogZnVuY3Rpb24gb25Eb3RzT3ZlcigpIHtcbiAgICAgIHRoaXMuYXV0b3BsYXkgJiYgdGhpcy5wYXVzZSgnaG92ZXJlZCcpO1xuICAgIH0sXG4gICAgb25Eb3RzTGVhdmU6IGZ1bmN0aW9uIG9uRG90c0xlYXZlKCkge1xuICAgICAgdGhpcy5hdXRvcGxheSAmJiB0aGlzLmF1dG9wbGF5aW5nID09PSAnaG92ZXJlZCcgJiYgdGhpcy5hdXRvUGxheSgnbGVhdmUnKTtcbiAgICB9LFxuICAgIG9uVHJhY2tPdmVyOiBmdW5jdGlvbiBvblRyYWNrT3ZlcigpIHtcbiAgICAgIHRoaXMuYXV0b3BsYXkgJiYgdGhpcy5wYXVzZSgnaG92ZXJlZCcpO1xuICAgIH0sXG4gICAgb25UcmFja0xlYXZlOiBmdW5jdGlvbiBvblRyYWNrTGVhdmUoKSB7XG4gICAgICB0aGlzLmF1dG9wbGF5ICYmIHRoaXMuYXV0b3BsYXlpbmcgPT09ICdob3ZlcmVkJyAmJiB0aGlzLmF1dG9QbGF5KCdsZWF2ZScpO1xuICAgIH0sXG4gICAgb25TbGlkZUZvY3VzOiBmdW5jdGlvbiBvblNsaWRlRm9jdXMoKSB7XG4gICAgICB0aGlzLmF1dG9wbGF5ICYmIHRoaXMucGF1c2UoJ2ZvY3VzZWQnKTtcbiAgICB9LFxuICAgIG9uU2xpZGVCbHVyOiBmdW5jdGlvbiBvblNsaWRlQmx1cigpIHtcbiAgICAgIHRoaXMuYXV0b3BsYXkgJiYgdGhpcy5hdXRvcGxheWluZyA9PT0gJ2ZvY3VzZWQnICYmIHRoaXMuYXV0b1BsYXkoJ2JsdXInKTtcbiAgICB9LFxuICAgIHNlbGVjdEhhbmRsZXI6IGZ1bmN0aW9uIHNlbGVjdEhhbmRsZXIob3B0aW9ucykge1xuICAgICAgaWYgKHRoaXMuZm9jdXNPblNlbGVjdCkge1xuICAgICAgICB0aGlzLmNoYW5nZVNsaWRlKG9wdGlvbnMpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIGggPSBhcmd1bWVudHNbMF07XG4gICAgdmFyIGNsYXNzTmFtZSA9IHtcbiAgICAgICdzbGljay1zbGlkZXInOiB0cnVlLFxuICAgICAgJ3NsaWNrLWluaXRpYWxpemVkJzogdHJ1ZSxcbiAgICAgICdzbGljay12ZXJ0aWNhbCc6IHRoaXMudmVydGljYWxcbiAgICB9O1xuICAgIHZhciB0cmFja1Byb3BzID0gZXh0cmFjdE9iamVjdCh0aGlzLnNwZWMsIFBST1BfS0VZUy5UUkFDSyk7XG4gICAgdHJhY2tQcm9wcyA9IGZpbHRlclVuZGVmaW5lZChfb2JqZWN0U3ByZWFkMih7fSwgdHJhY2tQcm9wcykpO1xuICAgIHZhciBwYXVzZU9uSG92ZXIgPSB0aGlzLnBhdXNlT25Ib3ZlcjtcbiAgICB2YXIgdHJhY2tOYXRpdmVPbiA9IGZpbHRlclVuZGVmaW5lZCh7XG4gICAgICBtb3VzZWVudGVyOiBwYXVzZU9uSG92ZXIgPyB0aGlzLm9uVHJhY2tPdmVyIDogdW5kZWZpbmVkLFxuICAgICAgbW91c2VvdmVyOiBwYXVzZU9uSG92ZXIgPyB0aGlzLm9uVHJhY2tPdmVyIDogdW5kZWZpbmVkLFxuICAgICAgbW91c2VsZWF2ZTogcGF1c2VPbkhvdmVyID8gdGhpcy5vblRyYWNrTGVhdmUgOiB1bmRlZmluZWRcbiAgICB9KTtcbiAgICB2YXIgZG90cztcblxuICAgIGlmICh0aGlzLmRvdHMgPT09IHRydWUgJiYgdGhpcy5zbGlkZUNvdW50ID49IHRoaXMuc2xpZGVzVG9TaG93KSB7XG4gICAgICB2YXIgZG90UHJvcHMgPSBleHRyYWN0T2JqZWN0KHRoaXMuc3BlYywgUFJPUF9LRVlTLkRPVCk7XG4gICAgICB2YXIgcGF1c2VPbkRvdHNIb3ZlciA9IHRoaXMucGF1c2VPbkRvdHNIb3ZlcjtcbiAgICAgIHZhciBkb3ROYXRpdmVPbiA9IGZpbHRlclVuZGVmaW5lZCh7XG4gICAgICAgIG1vdXNlZW50ZXI6IHBhdXNlT25Eb3RzSG92ZXIgPyB0aGlzLm9uRG90c0xlYXZlIDogdW5kZWZpbmVkLFxuICAgICAgICBtb3VzZW92ZXI6IHBhdXNlT25Eb3RzSG92ZXIgPyB0aGlzLm9uRG90c092ZXIgOiB1bmRlZmluZWQsXG4gICAgICAgIG1vdXNlbGVhdmU6IHBhdXNlT25Eb3RzSG92ZXIgPyB0aGlzLm9uRG90c0xlYXZlIDogdW5kZWZpbmVkXG4gICAgICB9KTtcbiAgICAgIGRvdHMgPSBoKFNsaWRlckRvdHMsIHtcbiAgICAgICAgXCJwcm9wc1wiOiBfb2JqZWN0U3ByZWFkMih7fSwgZG90UHJvcHMpLFxuICAgICAgICBcIm5hdGl2ZU9uXCI6IF9vYmplY3RTcHJlYWQyKHt9LCBkb3ROYXRpdmVPbiksXG4gICAgICAgIFwib25cIjoge1xuICAgICAgICAgIFwiZG90Q2xpY2tlZFwiOiB0aGlzLmNoYW5nZVNsaWRlXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHZhciBwcmV2QXJyb3csIG5leHRBcnJvdztcbiAgICB2YXIgYXJyb3dQcm9wcyA9IGV4dHJhY3RPYmplY3QodGhpcy5zcGVjLCBQUk9QX0tFWVMuQVJST1cpO1xuXG4gICAgaWYgKHRoaXMuYXJyb3dzKSB7XG4gICAgICBwcmV2QXJyb3cgPSBoKFNsaWRlckFycm93LCB7XG4gICAgICAgIFwicHJvcHNcIjogX29iamVjdFNwcmVhZDIoe30sIF9vYmplY3RTcHJlYWQyKHt9LCBhcnJvd1Byb3BzLCB7XG4gICAgICAgICAgdHlwZTogJ3ByZXZpb3VzJ1xuICAgICAgICB9KSksXG4gICAgICAgIFwib25cIjoge1xuICAgICAgICAgIFwiYXJyb3dDbGlja2VkXCI6IHRoaXMuY2hhbmdlU2xpZGVcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBuZXh0QXJyb3cgPSBoKFNsaWRlckFycm93LCB7XG4gICAgICAgIFwicHJvcHNcIjogX29iamVjdFNwcmVhZDIoe30sIF9vYmplY3RTcHJlYWQyKHt9LCBhcnJvd1Byb3BzLCB7XG4gICAgICAgICAgdHlwZTogJ25leHQnXG4gICAgICAgIH0pKSxcbiAgICAgICAgXCJvblwiOiB7XG4gICAgICAgICAgXCJhcnJvd0NsaWNrZWRcIjogdGhpcy5jaGFuZ2VTbGlkZVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB2YXIgdmVydGljYWxIZWlnaHRTdHlsZSA9IHt9O1xuXG4gICAgaWYgKHRoaXMudmVydGljYWwpIHtcbiAgICAgIHZlcnRpY2FsSGVpZ2h0U3R5bGUgPSB7XG4gICAgICAgIGhlaWdodDogXCJcIi5jb25jYXQodGhpcy5saXN0SGVpZ2h0LCBcInB4XCIpXG4gICAgICB9O1xuICAgIH1cblxuICAgIHZhciBjZW50ZXJQYWRkaW5nU3R5bGUgPSB7fTtcblxuICAgIGlmICh0aGlzLnZlcnRpY2FsID09PSBmYWxzZSkge1xuICAgICAgaWYgKHRoaXMuY2VudGVyTW9kZSA9PT0gdHJ1ZSkge1xuICAgICAgICBjZW50ZXJQYWRkaW5nU3R5bGUgPSB7XG4gICAgICAgICAgcGFkZGluZzogJzBweCAnICsgdGhpcy5jZW50ZXJQYWRkaW5nXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmNlbnRlck1vZGUgPT09IHRydWUpIHtcbiAgICAgICAgY2VudGVyUGFkZGluZ1N0eWxlID0ge1xuICAgICAgICAgIHBhZGRpbmc6IHRoaXMuY2VudGVyUGFkZGluZyArICcgMHB4J1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBsaXN0U3R5bGUgPSBfb2JqZWN0U3ByZWFkMih7fSwgdGhpcy4kcGFyZW50LiR2bm9kZS5kYXRhLnN0eWxlKTtcblxuICAgIGlmICghdGhpcy51bnNsaWNrKSB7XG4gICAgICBsaXN0U3R5bGUgPSBfb2JqZWN0U3ByZWFkMih7fSwgbGlzdFN0eWxlLCB7fSwgZmlsdGVyVW5kZWZpbmVkT3JOdWxsKHZlcnRpY2FsSGVpZ2h0U3R5bGUpLCB7fSwgY2VudGVyUGFkZGluZ1N0eWxlKTtcbiAgICB9XG5cbiAgICB2YXIgYWNjZXNzaWJpbGl0eSA9IHRoaXMuYWNjZXNzaWJpbGl0eSxcbiAgICAgICAgZHJhZ2dpbmcgPSB0aGlzLmRyYWdnaW5nLFxuICAgICAgICB0b3VjaE1vdmUgPSB0aGlzLnRvdWNoTW92ZTtcbiAgICB2YXIgbGlzdE9uID0gZmlsdGVyVW5kZWZpbmVkKHtcbiAgICAgIGNsaWNrOiB0aGlzLmNsaWNrSGFuZGxlcixcbiAgICAgIG1vdXNlZG93bjogdG91Y2hNb3ZlID8gdGhpcy5zd2lwZVN0YXJ0IDogdW5kZWZpbmVkLFxuICAgICAgbW91c2Vtb3ZlOiBkcmFnZ2luZyAmJiB0b3VjaE1vdmUgPyB0aGlzLnN3aXBlTW92ZSA6IHVuZGVmaW5lZCxcbiAgICAgIG1vdXNldXA6IHRvdWNoTW92ZSA/IHRoaXMuc3dpcGVFbmQgOiB1bmRlZmluZWQsXG4gICAgICBtb3VzZWxlYXZlOiBkcmFnZ2luZyAmJiB0b3VjaE1vdmUgPyB0aGlzLnN3aXBlRW5kIDogdW5kZWZpbmVkLFxuICAgICAgdG91Y2hzdGFydDogdG91Y2hNb3ZlID8gdGhpcy5zd2lwZVN0YXJ0IDogdW5kZWZpbmVkLFxuICAgICAgdG91Y2htb3ZlOiBkcmFnZ2luZyAmJiB0b3VjaE1vdmUgPyB0aGlzLnN3aXBlTW92ZSA6IHVuZGVmaW5lZCxcbiAgICAgIHRvdWNoZW5kOiB0b3VjaE1vdmUgPyB0aGlzLnN3aXBlRW5kIDogdW5kZWZpbmVkLFxuICAgICAgdG91Y2hjYW5jZWw6IGRyYWdnaW5nICYmIHRvdWNoTW92ZSA/IHRoaXMuc3dpcGVFbmQgOiB1bmRlZmluZWQsXG4gICAgICBrZXlkb3duOiBhY2Nlc3NpYmlsaXR5ID8gdGhpcy5rZXlIYW5kbGVyIDogdW5kZWZpbmVkXG4gICAgfSk7XG4gICAgcmV0dXJuIGgoXCJkaXZcIiwge1xuICAgICAgXCJjbGFzc1wiOiBjbGFzc05hbWUsXG4gICAgICBcImF0dHJzXCI6IHtcbiAgICAgICAgXCJkaXJcIjogIXRoaXMudW5zbGljayA/ICdsdHInIDogZmFsc2VcbiAgICAgIH1cbiAgICB9LCBbIXRoaXMudW5zbGljayA/IHByZXZBcnJvdyA6ICcnLCBoKFwiZGl2XCIsIHtcbiAgICAgIFwicmVmXCI6IFwibGlzdFwiLFxuICAgICAgXCJjbGFzc1wiOiAnc2xpY2stbGlzdCcsXG4gICAgICBcIm9uXCI6IF9vYmplY3RTcHJlYWQyKHt9LCBsaXN0T24pLFxuICAgICAgXCJzdHlsZVwiOiBsaXN0U3R5bGVcbiAgICB9LCBbaChTbGlkZXJUcmFjaywge1xuICAgICAgXCJyZWZcIjogXCJ0cmFja1wiLFxuICAgICAgXCJwcm9wc1wiOiBfb2JqZWN0U3ByZWFkMih7fSwgdHJhY2tQcm9wcyksXG4gICAgICBcIm5hdGl2ZU9uXCI6IF9vYmplY3RTcHJlYWQyKHt9LCB0cmFja05hdGl2ZU9uKSxcbiAgICAgIFwib25cIjoge1xuICAgICAgICBcImNoaWxkQ2xpY2tlZFwiOiB0aGlzLnNlbGVjdEhhbmRsZXJcbiAgICAgIH1cbiAgICB9LCBbdGhpcy4kc2xvdHMuZGVmYXVsdF0pXSksICF0aGlzLnVuc2xpY2sgPyBuZXh0QXJyb3cgOiAnJywgIXRoaXMudW5zbGljayA/IGRvdHMgOiAnJ10pO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL0lubmVyU2xpZGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfSW5uZXJTbGlkZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoSW5uZXJTbGlkZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIEVYVEVSTkFMIE1PRFVMRTogLi9zcmMvSW5uZXJTbGlkZXIudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9M2QxYTRmNzYmc2NvcGVkPXRydWUmbGFuZz1jc3MmXG52YXIgSW5uZXJTbGlkZXJ2dWVfdHlwZV9zdHlsZV9pbmRleF8wX2lkXzNkMWE0Zjc2X3Njb3BlZF90cnVlX2xhbmdfY3NzXyA9IF9fd2VicGFja19yZXF1aXJlX18oXCJlYWY5XCIpO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9Jbm5lclNsaWRlci52dWVcbnZhciBJbm5lclNsaWRlcl9yZW5kZXIsIElubmVyU2xpZGVyX3N0YXRpY1JlbmRlckZuc1xuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIElubmVyU2xpZGVyX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgc3JjX0lubmVyU2xpZGVydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBJbm5lclNsaWRlcl9yZW5kZXIsXG4gIElubmVyU2xpZGVyX3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIFwiM2QxYTRmNzZcIixcbiAgbnVsbFxuICBcbilcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgSW5uZXJTbGlkZXIgPSAoSW5uZXJTbGlkZXJfY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvY2FjaGUtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTEyLTAhLi9ub2RlX21vZHVsZXMvdGhyZWFkLWxvYWRlci9kaXN0L2Nqcy5qcyEuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZXRpZnktbG9hZGVyL2xpYi9sb2FkZXIuanM/P3JlZi0tMTktMCEuL25vZGVfbW9kdWxlcy9jYWNoZS1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tMC0wIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvVnVlU2xpY2tDYXJvdXNlbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG52YXIgZW5xdWlyZSA9IGNhblVzZURPTSgpICYmIF9fd2VicGFja19yZXF1aXJlX18oXCI4ZTk1XCIpO1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBWdWVTbGlja0Nhcm91c2VsdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ1Z1ZVNsaWNrQ2Fyb3VzZWwnLFxuICBjb21wb25lbnRzOiB7XG4gICAgSW5uZXJTbGlkZXI6IElubmVyU2xpZGVyXG4gIH0sXG4gIG1peGluczogW21peGluUHJvcHNVcGRhdGVkXSxcbiAgaW5oZXJpdEF0dHJzOiBmYWxzZSxcbiAgcHJvcHM6IGRlZmF1bHRQcm9wc19wcm9wcyxcbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYnJlYWtwb2ludDogbnVsbFxuICAgIH07XG4gIH0sXG4gIGNvbXB1dGVkOiB7XG4gICAgc2V0dGluZ3M6IGZ1bmN0aW9uIHNldHRpbmdzKCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgdmFyIHByb3BzID0gZmlsdGVyVW5kZWZpbmVkKHRoaXMuJHByb3BzKTtcbiAgICAgIHZhciBzZXR0aW5ncztcbiAgICAgIHZhciBuZXdQcm9wcztcblxuICAgICAgaWYgKHRoaXMuYnJlYWtwb2ludCkge1xuICAgICAgICBuZXdQcm9wcyA9IHRoaXMucmVzcG9uc2l2ZS5maWx0ZXIoZnVuY3Rpb24gKHJlc3ApIHtcbiAgICAgICAgICByZXR1cm4gcmVzcC5icmVha3BvaW50ID09PSBfdGhpcy5icmVha3BvaW50O1xuICAgICAgICB9KTtcbiAgICAgICAgc2V0dGluZ3MgPSBuZXdQcm9wc1swXS5zZXR0aW5ncyA9PT0gJ3Vuc2xpY2snID8gJ3Vuc2xpY2snIDogX29iamVjdFNwcmVhZDIoe30sIGRlZmF1bHRWYWx1ZXMsIHt9LCBwcm9wcywge30sIG5ld1Byb3BzWzBdLnNldHRpbmdzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldHRpbmdzID0gX29iamVjdFNwcmVhZDIoe30sIGRlZmF1bHRWYWx1ZXMsIHt9LCBwcm9wcyk7XG4gICAgICB9IC8vIGZvcmNlIHNjcm9sbGluZyBieSBvbmUgaWYgY2VudGVyTW9kZSBpcyBvblxuXG5cbiAgICAgIGlmIChzZXR0aW5ncy5jZW50ZXJNb2RlKSB7XG4gICAgICAgIGlmIChzZXR0aW5ncy5zbGlkZXNUb1Njcm9sbCA+IDEgJiYgXCJwcm9kdWN0aW9uXCIgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgY29uc29sZS53YXJuKFwic2xpZGVzVG9TY3JvbGwgc2hvdWxkIGJlIGVxdWFsIHRvIDEgaW4gY2VudGVyTW9kZSwgeW91IGFyZSB1c2luZyBcIi5jb25jYXQoc2V0dGluZ3Muc2xpZGVzVG9TY3JvbGwpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNldHRpbmdzLnNsaWRlc1RvU2Nyb2xsID0gMTtcbiAgICAgIH0gLy8gZm9yY2Ugc2hvd2luZyBvbmUgc2xpZGUgYW5kIHNjcm9sbGluZyBieSBvbmUgaWYgdGhlIGZhZGUgbW9kZSBpcyBvblxuXG5cbiAgICAgIGlmIChzZXR0aW5ncy5mYWRlKSB7XG4gICAgICAgIGlmIChzZXR0aW5ncy5zbGlkZXNUb1Nob3cgPiAxICYmIFwicHJvZHVjdGlvblwiICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgIGNvbnNvbGUud2FybihcInNsaWRlc1RvU2hvdyBzaG91bGQgYmUgZXF1YWwgdG8gMSB3aGVuIGZhZGUgaXMgdHJ1ZSwgeW91J3JlIHVzaW5nIFwiLmNvbmNhdChzZXR0aW5ncy5zbGlkZXNUb1Nob3cpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzZXR0aW5ncy5zbGlkZXNUb1Njcm9sbCA+IDEgJiYgXCJwcm9kdWN0aW9uXCIgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgY29uc29sZS53YXJuKFwic2xpZGVzVG9TY3JvbGwgc2hvdWxkIGJlIGVxdWFsIHRvIDEgd2hlbiBmYWRlIGlzIHRydWUsIHlvdSdyZSB1c2luZyBcIi5jb25jYXQoc2V0dGluZ3Muc2xpZGVzVG9TY3JvbGwpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNldHRpbmdzLnNsaWRlc1RvU2hvdyA9IDE7XG4gICAgICAgIHNldHRpbmdzLnNsaWRlc1RvU2Nyb2xsID0gMTtcbiAgICAgIH0gLy8gcm93cyBhbmQgc2xpZGVzUGVyUm93IGxvZ2ljIGlzIGhhbmRsZWQgaGVyZVxuXG5cbiAgICAgIGlmIChzZXR0aW5ncy52YXJpYWJsZVdpZHRoICYmIChzZXR0aW5ncy5yb3dzID4gMSB8fCBzZXR0aW5ncy5zbGlkZXNQZXJSb3cgPiAxKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLndhcm4oXCJ2YXJpYWJsZVdpZHRoIGlzIG5vdCBzdXBwb3J0ZWQgaW4gY2FzZSBvZiByb3dzID4gMSBvciBzbGlkZXNQZXJSb3cgPiAxXCIpO1xuICAgICAgICBzZXR0aW5ncy52YXJpYWJsZVdpZHRoID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZXR0aW5ncztcbiAgICB9XG4gIH0sXG4gIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5tYWtlQnJlYWtwb2ludHMoKTtcbiAgfSxcbiAgYmVmb3JlRGVzdHJveTogZnVuY3Rpb24gYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLmNsZWFyQnJlYWtwb2ludHMoKTtcbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIHByZXY6IGZ1bmN0aW9uIHByZXYoKSB7XG4gICAgICB0aGlzLiRyZWZzLmlubmVyU2xpZGVyLnByZXYoKTtcbiAgICB9LFxuICAgIG5leHQ6IGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICB0aGlzLiRyZWZzLmlubmVyU2xpZGVyLm5leHQoKTtcbiAgICB9LFxuICAgIGdvVG86IGZ1bmN0aW9uIGdvVG8oc2xpZGUpIHtcbiAgICAgIHZhciBkb250QW5pbWF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZmFsc2U7XG4gICAgICB0aGlzLiRyZWZzLmlubmVyU2xpZGVyLmdvVG8oc2xpZGUsIGRvbnRBbmltYXRlKTtcbiAgICB9LFxuICAgIHBhdXNlOiBmdW5jdGlvbiBwYXVzZSgpIHtcbiAgICAgIHRoaXMuJHJlZnMuaW5uZXJTbGlkZXIucGF1c2UoJ3BhdXNlZCcpO1xuICAgIH0sXG4gICAgcGxheTogZnVuY3Rpb24gcGxheSgpIHtcbiAgICAgIHRoaXMuJHJlZnMuaW5uZXJTbGlkZXIuYXV0b1BsYXkoJ3BsYXknKTtcbiAgICB9LFxuICAgIG9uUHJvcHNVcGRhdGVkOiBmdW5jdGlvbiBvblByb3BzVXBkYXRlZCgpIHtcbiAgICAgIHRoaXMuY2xlYXJCcmVha3BvaW50cygpO1xuICAgICAgdGhpcy5tYWtlQnJlYWtwb2ludHMoKTtcbiAgICB9LFxuICAgIGNsZWFyQnJlYWtwb2ludHM6IGZ1bmN0aW9uIGNsZWFyQnJlYWtwb2ludHMoKSB7XG4gICAgICB0aGlzLnJlc3BvbnNpdmVNZWRpYUhhbmRsZXJzLmZvckVhY2goZnVuY3Rpb24gKG9iaikge1xuICAgICAgICByZXR1cm4gZW5xdWlyZS51bnJlZ2lzdGVyKG9iai5xdWVyeSwgb2JqLmhhbmRsZXIpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnJlc3BvbnNpdmVNZWRpYUhhbmRsZXJzID0gW107XG4gICAgfSxcbiAgICBtZWRpYTogZnVuY3Rpb24gbWVkaWEocXVlcnksIGhhbmRsZXIpIHtcbiAgICAgIC8vIGphdmFzY3JpcHQgaGFuZGxlciBmb3IgIGNzcyBtZWRpYSBxdWVyeVxuICAgICAgLy8gd2hlbiBub3QgdXNpbmcgc2VydmVyIHNpZGUgcmVuZGVyaW5nXG4gICAgICBpZiAoIWNhblVzZURPTSgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZW5xdWlyZS5yZWdpc3RlcihxdWVyeSwgaGFuZGxlcik7XG4gICAgICB0aGlzLnJlc3BvbnNpdmVNZWRpYUhhbmRsZXJzLnB1c2goe1xuICAgICAgICBxdWVyeTogcXVlcnksXG4gICAgICAgIGhhbmRsZXI6IGhhbmRsZXJcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgbWFrZUJyZWFrcG9pbnRzOiBmdW5jdGlvbiBtYWtlQnJlYWtwb2ludHMoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdGhpcy5icmVha3BvaW50ID0gbnVsbDtcbiAgICAgIHRoaXMucmVzcG9uc2l2ZU1lZGlhSGFuZGxlcnMgPSBbXTsgLy8gaGFuZGxlcyByZXNwb25zaXZlIGJyZWFrcG9pbnRzXG5cbiAgICAgIGlmICh0aGlzLnJlc3BvbnNpdmUpIHtcbiAgICAgICAgdmFyIGJyZWFrcG9pbnRzID0gdGhpcy5yZXNwb25zaXZlLm1hcChmdW5jdGlvbiAoYnJlYWtwdCkge1xuICAgICAgICAgIHJldHVybiBicmVha3B0LmJyZWFrcG9pbnQ7XG4gICAgICAgIH0pOyAvLyBzb3J0IHRoZW0gaW4gaW5jcmVhc2luZyBvcmRlciBvZiB0aGVpciBudW1lcmljYWwgdmFsdWVcblxuICAgICAgICBicmVha3BvaW50cy5zb3J0KGZ1bmN0aW9uICh4LCB5KSB7XG4gICAgICAgICAgcmV0dXJuIHggLSB5O1xuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWtwb2ludHMuZm9yRWFjaChmdW5jdGlvbiAoYnJlYWtwb2ludCwgaW5kZXgpIHtcbiAgICAgICAgICAvLyBtZWRpYSBxdWVyeSBmb3IgZWFjaCBicmVha3BvaW50XG4gICAgICAgICAgdmFyIG1lZGlhUXVlcnkgPSBqc29uMm1xX2RlZmF1bHQoKSh7XG4gICAgICAgICAgICBtaW5XaWR0aDogaW5kZXggPT09IDAgPyAwIDogYnJlYWtwb2ludHNbaW5kZXggLSAxXSArIDEsXG4gICAgICAgICAgICBtYXhXaWR0aDogYnJlYWtwb2ludFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgX3RoaXMyLm1lZGlhKG1lZGlhUXVlcnksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzMi5icmVha3BvaW50ID0gYnJlYWtwb2ludDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7IC8vIFJlZ2lzdGVyIG1lZGlhIHF1ZXJ5IGZvciBmdWxsIHNjcmVlbi4gTmVlZCB0byBzdXBwb3J0IHJlc2l6ZSBmcm9tIHNtYWxsIHRvIGxhcmdlXG4gICAgICAgIC8vIGNvbnZlcnQgamF2YXNjcmlwdCBvYmplY3QgdG8gbWVkaWEgcXVlcnkgc3RyaW5nXG5cbiAgICAgICAgdmFyIHF1ZXJ5ID0ganNvbjJtcV9kZWZhdWx0KCkoe1xuICAgICAgICAgIG1pbldpZHRoOiBicmVha3BvaW50cy5zbGljZSgtMSlbMF1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubWVkaWEocXVlcnksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczIuYnJlYWtwb2ludCA9IG51bGw7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIGggPSBhcmd1bWVudHNbMF07XG4gICAgdmFyIHNldHRpbmdzID0gdGhpcy5zZXR0aW5ncztcbiAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLiRzbG90cy5kZWZhdWx0IHx8IFtdO1xuXG4gICAgaWYgKHNldHRpbmdzID09PSAndW5zbGljaycpIHtcbiAgICAgIHJldHVybiBoKFwiZGl2XCIsIHtcbiAgICAgICAgXCJjbGFzc1wiOiBcInJlZ3VsYXIgc2xpZGVyXCJcbiAgICAgIH0sIFtjaGlsZHJlbl0pO1xuICAgIH1cblxuICAgIHNldHRpbmdzLnByZXZBcnJvdyA9IHRoaXMuJHNjb3BlZFNsb3RzLnByZXZBcnJvdztcbiAgICBzZXR0aW5ncy5uZXh0QXJyb3cgPSB0aGlzLiRzY29wZWRTbG90cy5uZXh0QXJyb3c7XG4gICAgc2V0dGluZ3MuY3VzdG9tUGFnaW5nID0gdGhpcy4kc2NvcGVkU2xvdHMuY3VzdG9tUGFnaW5nO1xuICAgIGNoaWxkcmVuID0gY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgcmV0dXJuICEhY2hpbGQudGFnO1xuICAgIH0pO1xuICAgIHZhciBuZXdDaGlsZHJlbiA9IFtdO1xuICAgIHZhciBjdXJyZW50V2lkdGggPSBudWxsO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkgKz0gc2V0dGluZ3Mucm93cyAqIHNldHRpbmdzLnNsaWRlc1BlclJvdykge1xuICAgICAgdmFyIG5ld1NsaWRlID0gW107XG5cbiAgICAgIGZvciAodmFyIGogPSBpOyBqIDwgaSArIHNldHRpbmdzLnJvd3MgKiBzZXR0aW5ncy5zbGlkZXNQZXJSb3c7IGogKz0gc2V0dGluZ3Muc2xpZGVzUGVyUm93KSB7XG4gICAgICAgIHZhciByb3cgPSBbXTtcblxuICAgICAgICBmb3IgKHZhciBrID0gajsgayA8IGogKyBzZXR0aW5ncy5zbGlkZXNQZXJSb3c7IGsgKz0gMSkge1xuICAgICAgICAgIGlmIChzZXR0aW5ncy52YXJpYWJsZVdpZHRoICYmIHZOb2RlVXRpbHNfZ2V0U3R5bGUoY2hpbGRyZW5ba10pKSB7XG4gICAgICAgICAgICBjdXJyZW50V2lkdGggPSB2Tm9kZVV0aWxzX2dldFN0eWxlKGNoaWxkcmVuW2tdKS53aWR0aDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoayA+PSBjaGlsZHJlbi5sZW5ndGgpIGJyZWFrO1xuICAgICAgICAgIHZhciBjbG9uZWRWTm9kZSA9IGNsb25lVk5vZGUoY2hpbGRyZW5ba10pO1xuICAgICAgICAgIHNldFZOb2RlRGF0YShjbG9uZWRWTm9kZSwgJ2tleScsIDEwMCAqIGkgKyAxMCAqIGogKyBrKTtcbiAgICAgICAgICB2Tm9kZVV0aWxzX21lcmdlVk5vZGVEYXRhKGNsb25lZFZOb2RlLCAnYXR0cnMnLCB7XG4gICAgICAgICAgICB0YWJJbmRleDogLTFcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB2Tm9kZVV0aWxzX21lcmdlVk5vZGVEYXRhKGNsb25lZFZOb2RlLCAnc3R5bGUnLCB7XG4gICAgICAgICAgICB3aWR0aDogXCJcIi5jb25jYXQoMTAwIC8gc2V0dGluZ3Muc2xpZGVzUGVyUm93LCBcIiVcIiksXG4gICAgICAgICAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJ1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJvdy5wdXNoKGNsb25lZFZOb2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5ld1NsaWRlLnB1c2goaChcImRpdlwiLCB7XG4gICAgICAgICAgXCJrZXlcIjogMTAgKiBpICsgalxuICAgICAgICB9LCBbcm93XSkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2V0dGluZ3MudmFyaWFibGVXaWR0aCkge1xuICAgICAgICBuZXdDaGlsZHJlbi5wdXNoKGgoXCJkaXZcIiwge1xuICAgICAgICAgIFwia2V5XCI6IGksXG4gICAgICAgICAgXCJzdHlsZVwiOiB7XG4gICAgICAgICAgICB3aWR0aDogY3VycmVudFdpZHRoXG4gICAgICAgICAgfVxuICAgICAgICB9LCBbbmV3U2xpZGVdKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdDaGlsZHJlbi5wdXNoKGgoXCJkaXZcIiwge1xuICAgICAgICAgIFwia2V5XCI6IGlcbiAgICAgICAgfSwgW25ld1NsaWRlXSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChuZXdDaGlsZHJlbi5sZW5ndGggPD0gc2V0dGluZ3Muc2xpZGVzVG9TaG93KSB7XG4gICAgICBzZXR0aW5ncy51bnNsaWNrID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gaChJbm5lclNsaWRlciwge1xuICAgICAgXCJyZWZcIjogXCJpbm5lclNsaWRlclwiLFxuICAgICAgXCJwcm9wc1wiOiBfb2JqZWN0U3ByZWFkMih7fSwgc2V0dGluZ3MpLFxuICAgICAgXCJrZXlcIjogT2JqZWN0LnZhbHVlcyhzZXR0aW5ncykuam9pbignJylcbiAgICB9LCBbbmV3Q2hpbGRyZW5dKTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9WdWVTbGlja0Nhcm91c2VsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfVnVlU2xpY2tDYXJvdXNlbHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChWdWVTbGlja0Nhcm91c2VsdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9WdWVTbGlja0Nhcm91c2VsLnZ1ZVxudmFyIFZ1ZVNsaWNrQ2Fyb3VzZWxfcmVuZGVyLCBWdWVTbGlja0Nhcm91c2VsX3N0YXRpY1JlbmRlckZuc1xuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBWdWVTbGlja0Nhcm91c2VsX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgc3JjX1Z1ZVNsaWNrQ2Fyb3VzZWx2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIFZ1ZVNsaWNrQ2Fyb3VzZWxfcmVuZGVyLFxuICBWdWVTbGlja0Nhcm91c2VsX3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIFZ1ZVNsaWNrQ2Fyb3VzZWwgPSAoVnVlU2xpY2tDYXJvdXNlbF9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9AdnVlL2NsaS1zZXJ2aWNlL2xpYi9jb21tYW5kcy9idWlsZC9lbnRyeS1saWIuanNcblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBlbnRyeV9saWIgPSBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChWdWVTbGlja0Nhcm91c2VsKTtcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcImZiNmFcIjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciAkID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjIzZTdcIik7XG52YXIgaXNPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiODYxZFwiKTtcbnZhciBpc0FycmF5ID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImU4YjVcIik7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjIzY2JcIik7XG52YXIgdG9MZW5ndGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiNTBjNFwiKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiZmM2YVwiKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IF9fd2VicGFja19yZXF1aXJlX18oXCI4NDE4XCIpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IF9fd2VicGFja19yZXF1aXJlX18oXCJiNjIyXCIpO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiMWRkZVwiKTtcbnZhciBhcnJheU1ldGhvZFVzZXNUb0xlbmd0aCA9IF9fd2VicGFja19yZXF1aXJlX18oXCJhZTQwXCIpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ3NsaWNlJyk7XG52YXIgVVNFU19UT19MRU5HVEggPSBhcnJheU1ldGhvZFVzZXNUb0xlbmd0aCgnc2xpY2UnLCB7IEFDQ0VTU09SUzogdHJ1ZSwgMDogMCwgMTogMiB9KTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbnZhciBuYXRpdmVTbGljZSA9IFtdLnNsaWNlO1xudmFyIG1heCA9IE1hdGgubWF4O1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnNsaWNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zbGljZVxuLy8gZmFsbGJhY2sgZm9yIG5vdCBhcnJheS1saWtlIEVTMyBzdHJpbmdzIGFuZCBET00gb2JqZWN0c1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIUhBU19TUEVDSUVTX1NVUFBPUlQgfHwgIVVTRVNfVE9fTEVOR1RIIH0sIHtcbiAgc2xpY2U6IGZ1bmN0aW9uIHNsaWNlKHN0YXJ0LCBlbmQpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBrID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW5ndGgpO1xuICAgIHZhciBmaW4gPSB0b0Fic29sdXRlSW5kZXgoZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiBlbmQsIGxlbmd0aCk7XG4gICAgLy8gaW5saW5lIGBBcnJheVNwZWNpZXNDcmVhdGVgIGZvciB1c2FnZSBuYXRpdmUgYEFycmF5I3NsaWNlYCB3aGVyZSBpdCdzIHBvc3NpYmxlXG4gICAgdmFyIENvbnN0cnVjdG9yLCByZXN1bHQsIG47XG4gICAgaWYgKGlzQXJyYXkoTykpIHtcbiAgICAgIENvbnN0cnVjdG9yID0gTy5jb25zdHJ1Y3RvcjtcbiAgICAgIC8vIGNyb3NzLXJlYWxtIGZhbGxiYWNrXG4gICAgICBpZiAodHlwZW9mIENvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgKENvbnN0cnVjdG9yID09PSBBcnJheSB8fCBpc0FycmF5KENvbnN0cnVjdG9yLnByb3RvdHlwZSkpKSB7XG4gICAgICAgIENvbnN0cnVjdG9yID0gdW5kZWZpbmVkO1xuICAgICAgfSBlbHNlIGlmIChpc09iamVjdChDb25zdHJ1Y3RvcikpIHtcbiAgICAgICAgQ29uc3RydWN0b3IgPSBDb25zdHJ1Y3RvcltTUEVDSUVTXTtcbiAgICAgICAgaWYgKENvbnN0cnVjdG9yID09PSBudWxsKSBDb25zdHJ1Y3RvciA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChDb25zdHJ1Y3RvciA9PT0gQXJyYXkgfHwgQ29uc3RydWN0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gbmF0aXZlU2xpY2UuY2FsbChPLCBrLCBmaW4pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQgPSBuZXcgKENvbnN0cnVjdG9yID09PSB1bmRlZmluZWQgPyBBcnJheSA6IENvbnN0cnVjdG9yKShtYXgoZmluIC0gaywgMCkpO1xuICAgIGZvciAobiA9IDA7IGsgPCBmaW47IGsrKywgbisrKSBpZiAoayBpbiBPKSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIG4sIE9ba10pO1xuICAgIHJlc3VsdC5sZW5ndGggPSBuO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcImZjNmFcIjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcbnZhciBJbmRleGVkT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjQ0YWRcIik7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oXCIxZDgwXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSW5kZXhlZE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGl0KSk7XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcImZkYjJcIjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcImZkYmNcIjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuLy8gaXRlcmFibGUgRE9NIGNvbGxlY3Rpb25zXG4vLyBmbGFnIC0gYGl0ZXJhYmxlYCBpbnRlcmZhY2UgLSAnZW50cmllcycsICdrZXlzJywgJ3ZhbHVlcycsICdmb3JFYWNoJyBtZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQ1NTUnVsZUxpc3Q6IDAsXG4gIENTU1N0eWxlRGVjbGFyYXRpb246IDAsXG4gIENTU1ZhbHVlTGlzdDogMCxcbiAgQ2xpZW50UmVjdExpc3Q6IDAsXG4gIERPTVJlY3RMaXN0OiAwLFxuICBET01TdHJpbmdMaXN0OiAwLFxuICBET01Ub2tlbkxpc3Q6IDEsXG4gIERhdGFUcmFuc2Zlckl0ZW1MaXN0OiAwLFxuICBGaWxlTGlzdDogMCxcbiAgSFRNTEFsbENvbGxlY3Rpb246IDAsXG4gIEhUTUxDb2xsZWN0aW9uOiAwLFxuICBIVE1MRm9ybUVsZW1lbnQ6IDAsXG4gIEhUTUxTZWxlY3RFbGVtZW50OiAwLFxuICBNZWRpYUxpc3Q6IDAsXG4gIE1pbWVUeXBlQXJyYXk6IDAsXG4gIE5hbWVkTm9kZU1hcDogMCxcbiAgTm9kZUxpc3Q6IDEsXG4gIFBhaW50UmVxdWVzdExpc3Q6IDAsXG4gIFBsdWdpbjogMCxcbiAgUGx1Z2luQXJyYXk6IDAsXG4gIFNWR0xlbmd0aExpc3Q6IDAsXG4gIFNWR051bWJlckxpc3Q6IDAsXG4gIFNWR1BhdGhTZWdMaXN0OiAwLFxuICBTVkdQb2ludExpc3Q6IDAsXG4gIFNWR1N0cmluZ0xpc3Q6IDAsXG4gIFNWR1RyYW5zZm9ybUxpc3Q6IDAsXG4gIFNvdXJjZUJ1ZmZlckxpc3Q6IDAsXG4gIFN0eWxlU2hlZXRMaXN0OiAwLFxuICBUZXh0VHJhY2tDdWVMaXN0OiAwLFxuICBUZXh0VHJhY2tMaXN0OiAwLFxuICBUb3VjaExpc3Q6IDBcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiZmRiZlwiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgTkFUSVZFX1NZTUJPTCA9IF9fd2VicGFja19yZXF1aXJlX18oXCI0OTMwXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9TWU1CT0xcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICYmICFTeW1ib2wuc2hhbVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PSAnc3ltYm9sJztcblxuXG4vKioqLyB9KVxuXG4vKioqKioqLyB9KVtcImRlZmF1bHRcIl07XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXZ1ZS1zbGljay1jYXJvdXNlbC51bWQuanMubWFwIiwiPHRlbXBsYXRlPlxuICA8dnVlLXNsaWNrLWNhcm91c2VsIHYtYmluZD1cInNldHRpbmdzXCIgY2xhc3M9XCJhcnRpY2xlLWNhcm91c2VsXCI+XG4gICAgPHNsb3Q+PC9zbG90PlxuICA8L3Z1ZS1zbGljay1jYXJvdXNlbD5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVnVlU2xpY2tDYXJvdXNlbCBmcm9tICd2dWUtc2xpY2stY2Fyb3VzZWwnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcG9uZW50czoge1Z1ZVNsaWNrQ2Fyb3VzZWx9LFxuICBuYW1lOiAnQXJ0aWNsZUNhcm91c2VsJyxcbiAgZGF0YTogKCkgPT4gKHtcbiAgICBzZXR0aW5nczoge1xuICAgICAgXCJkb3RzXCI6IGZhbHNlLFxuICAgICAgXCJpbmZpbml0ZVwiOiBmYWxzZSxcbiAgICAgIFwic2xpZGVzVG9TaG93XCI6IDMsXG4gICAgICBcInNsaWRlc1RvU2Nyb2xsXCI6IDEsXG4gICAgICBcInJlc3BvbnNpdmVcIjogW1xuICAgICAgICB7XG4gICAgICAgICAgXCJicmVha3BvaW50XCI6IDEyMDAsXG4gICAgICAgICAgXCJzZXR0aW5nc1wiOiB7XG4gICAgICAgICAgICBcInNsaWRlc1RvU2hvd1wiOiAxXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfVxuICB9KVxufVxuPC9zY3JpcHQ+XG4iLCJmdW5jdGlvbiBub3JtYWxpemVDb21wb25lbnQodGVtcGxhdGUsIHN0eWxlLCBzY3JpcHQsIHNjb3BlSWQsIGlzRnVuY3Rpb25hbFRlbXBsYXRlLCBtb2R1bGVJZGVudGlmaWVyIC8qIHNlcnZlciBvbmx5ICovLCBzaGFkb3dNb2RlLCBjcmVhdGVJbmplY3RvciwgY3JlYXRlSW5qZWN0b3JTU1IsIGNyZWF0ZUluamVjdG9yU2hhZG93KSB7XHJcbiAgICBpZiAodHlwZW9mIHNoYWRvd01vZGUgIT09ICdib29sZWFuJykge1xyXG4gICAgICAgIGNyZWF0ZUluamVjdG9yU1NSID0gY3JlYXRlSW5qZWN0b3I7XHJcbiAgICAgICAgY3JlYXRlSW5qZWN0b3IgPSBzaGFkb3dNb2RlO1xyXG4gICAgICAgIHNoYWRvd01vZGUgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIFZ1ZS5leHRlbmQgY29uc3RydWN0b3IgZXhwb3J0IGludGVyb3AuXHJcbiAgICBjb25zdCBvcHRpb25zID0gdHlwZW9mIHNjcmlwdCA9PT0gJ2Z1bmN0aW9uJyA/IHNjcmlwdC5vcHRpb25zIDogc2NyaXB0O1xyXG4gICAgLy8gcmVuZGVyIGZ1bmN0aW9uc1xyXG4gICAgaWYgKHRlbXBsYXRlICYmIHRlbXBsYXRlLnJlbmRlcikge1xyXG4gICAgICAgIG9wdGlvbnMucmVuZGVyID0gdGVtcGxhdGUucmVuZGVyO1xyXG4gICAgICAgIG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zID0gdGVtcGxhdGUuc3RhdGljUmVuZGVyRm5zO1xyXG4gICAgICAgIG9wdGlvbnMuX2NvbXBpbGVkID0gdHJ1ZTtcclxuICAgICAgICAvLyBmdW5jdGlvbmFsIHRlbXBsYXRlXHJcbiAgICAgICAgaWYgKGlzRnVuY3Rpb25hbFRlbXBsYXRlKSB7XHJcbiAgICAgICAgICAgIG9wdGlvbnMuZnVuY3Rpb25hbCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gc2NvcGVkSWRcclxuICAgIGlmIChzY29wZUlkKSB7XHJcbiAgICAgICAgb3B0aW9ucy5fc2NvcGVJZCA9IHNjb3BlSWQ7XHJcbiAgICB9XHJcbiAgICBsZXQgaG9vaztcclxuICAgIGlmIChtb2R1bGVJZGVudGlmaWVyKSB7XHJcbiAgICAgICAgLy8gc2VydmVyIGJ1aWxkXHJcbiAgICAgICAgaG9vayA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XHJcbiAgICAgICAgICAgIC8vIDIuMyBpbmplY3Rpb25cclxuICAgICAgICAgICAgY29udGV4dCA9XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0IHx8IC8vIGNhY2hlZCBjYWxsXHJcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMuJHZub2RlICYmIHRoaXMuJHZub2RlLnNzckNvbnRleHQpIHx8IC8vIHN0YXRlZnVsXHJcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMucGFyZW50ICYmIHRoaXMucGFyZW50LiR2bm9kZSAmJiB0aGlzLnBhcmVudC4kdm5vZGUuc3NyQ29udGV4dCk7IC8vIGZ1bmN0aW9uYWxcclxuICAgICAgICAgICAgLy8gMi4yIHdpdGggcnVuSW5OZXdDb250ZXh0OiB0cnVlXHJcbiAgICAgICAgICAgIGlmICghY29udGV4dCAmJiB0eXBlb2YgX19WVUVfU1NSX0NPTlRFWFRfXyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQgPSBfX1ZVRV9TU1JfQ09OVEVYVF9fO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGluamVjdCBjb21wb25lbnQgc3R5bGVzXHJcbiAgICAgICAgICAgIGlmIChzdHlsZSkge1xyXG4gICAgICAgICAgICAgICAgc3R5bGUuY2FsbCh0aGlzLCBjcmVhdGVJbmplY3RvclNTUihjb250ZXh0KSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gcmVnaXN0ZXIgY29tcG9uZW50IG1vZHVsZSBpZGVudGlmaWVyIGZvciBhc3luYyBjaHVuayBpbmZlcmVuY2VcclxuICAgICAgICAgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQuX3JlZ2lzdGVyZWRDb21wb25lbnRzLmFkZChtb2R1bGVJZGVudGlmaWVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgLy8gdXNlZCBieSBzc3IgaW4gY2FzZSBjb21wb25lbnQgaXMgY2FjaGVkIGFuZCBiZWZvcmVDcmVhdGVcclxuICAgICAgICAvLyBuZXZlciBnZXRzIGNhbGxlZFxyXG4gICAgICAgIG9wdGlvbnMuX3NzclJlZ2lzdGVyID0gaG9vaztcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHN0eWxlKSB7XHJcbiAgICAgICAgaG9vayA9IHNoYWRvd01vZGVcclxuICAgICAgICAgICAgPyBmdW5jdGlvbiAoY29udGV4dCkge1xyXG4gICAgICAgICAgICAgICAgc3R5bGUuY2FsbCh0aGlzLCBjcmVhdGVJbmplY3RvclNoYWRvdyhjb250ZXh0LCB0aGlzLiRyb290LiRvcHRpb25zLnNoYWRvd1Jvb3QpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA6IGZ1bmN0aW9uIChjb250ZXh0KSB7XHJcbiAgICAgICAgICAgICAgICBzdHlsZS5jYWxsKHRoaXMsIGNyZWF0ZUluamVjdG9yKGNvbnRleHQpKTtcclxuICAgICAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmIChob29rKSB7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMuZnVuY3Rpb25hbCkge1xyXG4gICAgICAgICAgICAvLyByZWdpc3RlciBmb3IgZnVuY3Rpb25hbCBjb21wb25lbnQgaW4gdnVlIGZpbGVcclxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxSZW5kZXIgPSBvcHRpb25zLnJlbmRlcjtcclxuICAgICAgICAgICAgb3B0aW9ucy5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXJXaXRoU3R5bGVJbmplY3Rpb24oaCwgY29udGV4dCkge1xyXG4gICAgICAgICAgICAgICAgaG9vay5jYWxsKGNvbnRleHQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsUmVuZGVyKGgsIGNvbnRleHQpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gaW5qZWN0IGNvbXBvbmVudCByZWdpc3RyYXRpb24gYXMgYmVmb3JlQ3JlYXRlIGhvb2tcclxuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmcgPSBvcHRpb25zLmJlZm9yZUNyZWF0ZTtcclxuICAgICAgICAgICAgb3B0aW9ucy5iZWZvcmVDcmVhdGUgPSBleGlzdGluZyA/IFtdLmNvbmNhdChleGlzdGluZywgaG9vaykgOiBbaG9va107XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHNjcmlwdDtcclxufVxuXG5leHBvcnQgZGVmYXVsdCBub3JtYWxpemVDb21wb25lbnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ub3JtYWxpemUtY29tcG9uZW50Lm1qcy5tYXBcbiIsIjx0ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cImhlYWRlci1jYXJvdXNlbCBtYi04IHhsOm1iLTMyXCI+XG4gICAgPHZ1ZS1zbGljay1jYXJvdXNlbCB2LWJpbmQ9XCJzZXR0aW5nc1wiPlxuICAgICAgPHNsb3Q+XG4gICAgICA8L3Nsb3Q+XG4gICAgPC92dWUtc2xpY2stY2Fyb3VzZWw+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBWdWVTbGlja0Nhcm91c2VsIGZyb20gJ3Z1ZS1zbGljay1jYXJvdXNlbCdcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wb25lbnRzOiB7VnVlU2xpY2tDYXJvdXNlbH0sXG4gIG5hbWU6ICdIZWFkZXJDYXJvdXNlbCcsXG4gIGRhdGE6ICgpID0+ICh7XG4gICAgc2V0dGluZ3M6IHtcbiAgICAgIFwiZmFkZVwiOiB0cnVlLFxuICAgICAgXCJkb3RzXCI6IHRydWUsXG4gICAgfVxuICB9KVxufVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJjYWxlbmRhciBncmlkIGdyaWQtY29scy00XCI+XG4gICAgPGRpdiB2LWlmPVwic2hvd0Jhbm5lclwiIGNsYXNzPVwiY29sLXNwYW4tNCB4bDpjb2wtc3Bhbi0xXCI+XG4gICAgICA8YXNpZGUgY2xhc3M9XCJiYW5uZXIgYmctb3JhbmdlLTMwMCB0ZXh0LXdoaXRlIGgtZnVsbFwiPlxuICAgICAgICA8aSBjbGFzcz1cImljby0tY2FsZW5kYXIgYmFubmVyX19pY29uXCI+PC9pPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYmFubmVyX19ib2R5XCI+XG4gICAgICAgICAgPGgxIGNsYXNzPVwiaGVhZC1hbHQtbWQgYmFubmVyX19jdGFcIj57eyBuYW1lIH19PC9oMT5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi0td2hpdGUgYnRuLS1mdWxsd2lkdGggc206YnRuLS1hdXRvd2lkdGggbXQtOFwiIHYtaWY9XCJvblNob3dNb3JlICYmIGhhc01vcmVcIiBAY2xpY2s9XCJvblNob3dNb3JlKClcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG5fX2JvZHlcIj5ab2JyYXppdCBkYWzFocOtPC9kaXY+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9hc2lkZT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IDpjbGFzcz1cInsnY29sLXNwYW4tNCB4bDpjb2wtc3Bhbi0zJzogc2hvd0Jhbm5lciwgJ2NvbC1zcGFuLTQnOiAhc2hvd0Jhbm5lcn1cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGdyaWQtY29scy0xMiBpdGVtcy1jZW50ZXIgY2FsZW5kYXItdGFibGUtcm93XCIgdi1mb3I9XCJldmVudCBpbiBldmVudHNcIiB2LWJpbmQ6a2V5PVwiZXZlbnQuaWRcIiA6Y2xhc3M9XCJ7J2NhbGVuZGFyLXRhYmxlLXJvdy0tc3RhbmRhbG9uZSc6ICFzaG93QmFubmVyfVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNwYW4tMiB0ZXh0LW9yYW5nZS0zMDAgaGVhZC1hbHQtbWQgY2FsZW5kYXItdGFibGUtcm93X19jb2xcIj48c3Bhbj57eyBldmVudC5zdGFydFRpbWVzdGFtcCB8IGRhdGVEYXkgfX08L3NwYW4+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc3Bhbi04IGdyaWQgZ3JpZC1jb2xzLTMgY29sLWdhcC00IGNhbGVuZGFyLXRhYmxlLXJvd19fY29sXCIgOmNsYXNzPVwieydjYWxlbmRhci10YWJsZS1yb3dfX2NvbC0tbm9yYm9yZGVyJzogIWV2ZW50Lm1hcExpbmt9XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zcGFuLTMgbWQ6Y29sLXNwYW4tMVwiPlxuICAgICAgICAgICAgPHN0cm9uZyBjbGFzcz1cImJsb2NrXCI+e3sgZXZlbnQuc3RhcnREYXRlVmVyYm9zZSB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJmb250LWxpZ2h0IHRleHQtc20gbXQtMVwiPnt7IGV2ZW50LmFsbERheSA/IFwiQ2Vsw70gZGVuXCIgOiBldmVudC5zdGFydFRpbWVWZXJib3NlIH19PC9wPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc3Bhbi0zIG1kOmNvbC1zcGFuLTIgbXQtNCBtZDptdC0wXCI+XG4gICAgICAgICAgICA8YSB2LWlmPVwiZXZlbnQubGlua1wiIHYtYmluZDpocmVmPVwiZXZlbnQubGlua1wiIGNsYXNzPVwiZm9udC1ib2xkIGJsb2NrXCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9yZWZlcnJlciBub29wZW5lclwiPnt7IGV2ZW50LnRpdGxlIH19PC9hPlxuICAgICAgICAgICAgPHN0cm9uZyB2LWlmPVwiIWV2ZW50LmxpbmtcIiBjbGFzcz1cImJsb2NrXCI+e3sgZXZlbnQudGl0bGUgfX08L3N0cm9uZz5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwiZm9udC1saWdodCB0ZXh0LXNtIG10LTFcIiB2LWlmPVwiZXZlbnQuZGVzY3JpcHRpb25cIj57eyBldmVudC5kZXNjcmlwdGlvbiB9fTwvcD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc3Bhbi0yIHRleHQtY2VudGVyIGZvbnQtbGlnaHQgY2FsZW5kYXItdGFibGUtcm93X19jb2xcIj5cbiAgICAgICAgICA8YSA6aHJlZj1cImV2ZW50Lm1hcExpbmtcIiB2LWlmPVwiZXZlbnQubWFwTGlua1wiIGNsYXNzPVwiaWNvbi1saW5rXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImljby0tbG9jYXRpb24gdGV4dC12aW9sZXQtMzAwIG1yLTFcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICA8c3Bhbj5NYXBhPC9zcGFuPlxuICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgcHJvcHM6IHtcbiAgICAgIG5hbWU6IHtcbiAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICBkZWZhdWx0OiBcIkthbGVuZMOhxZlcIlxuICAgICAgfSxcbiAgICAgIGV2ZW50czoge1xuICAgICAgICB0eXBlOiBBcnJheSxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICB9LFxuICAgICAgb25TaG93TW9yZToge1xuICAgICAgICB0eXBlOiBGdW5jdGlvbixcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIGhhc01vcmU6IHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICBzaG93QmFubmVyOiB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgICB9LFxuICAgIH0sXG4gICAgZmlsdGVyczoge1xuICAgICAgZGF0ZURheTogKHZhbCkgPT4ge1xuICAgICAgICByZXR1cm4gYCR7bmV3IERhdGUodmFsKS5nZXREYXRlKCl9LmA7XG4gICAgICB9XG4gICAgfVxuICB9O1xuPC9zY3JpcHQ+XG4iLCI8c2NyaXB0PlxuY29uc3QgaW5pdGlhbEV2ZW50cyA9IFtcbiAge1xuICAgIGlkOiAyLFxuICAgIHN0YXJ0OiBcIjIwMjAtMDctMDhUMTA6MDA6MDAuMDAwWlwiLFxuICAgIHN0YXJ0VGltZXN0YW1wOiBuZXcgRGF0ZShcIjIwMjAtMDctMDhUMTA6MDA6MDAuMDAwWlwiKS5nZXRUaW1lKCksXG4gICAgc3RhcnREYXRlVmVyYm9zZTogXCJzdMWZZWRhIDguIMSNZXJ2ZW5jZSAyMDIwXCIsXG4gICAgc3RhcnRUaW1lVmVyYm9zZTogXCIxMjowMFwiLFxuICAgIGFsbERheTogZmFsc2UsXG4gICAgZW5kOiBcIjIwMjAtMDctMDhUMTE6MDA6MDAuMDAwWlwiLFxuICAgIHRpdGxlOiBcIlBpcsOhdHNrw70gb2LEm2QgLSBDaHJ1ZGltXCIsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICBcIlByYXZpZGVsbsOpIHNldGvDoW7DrSBwaXLDoXTFryBwxZlpIHN0xZllZGXEjW7DrW0gb2LEm2TEmy4gTmVqZW4gbyBwb2xpdGljZSBhIHMgY2h1dMOtLlwiLFxuICAgIGxpbms6XG4gICAgICBcImh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vY2FsZW5kYXIvZXZlbnQ/ZWlkPU1tdzFZMlJ3TVRCeVltODBZMjA0Y1d4c2FXMW1hV0ptY1RKZk1qQXlNREEzTURoVU1UQXdNREF3V2lBM2NqWTNNM0pzYURJMU5XOW1iM0pvZGpOdlpXSXliREJuTUVCblwiXG4gIH0sXG4gIHtcbiAgICBpZDogMTUsXG4gICAgc3RhcnQ6ICBcIjIwMjAtMDctMTNUMTk6MDA6MDAuMDAwWlwiLFxuICAgIHN0YXJ0VGltZXN0YW1wOiBuZXcgRGF0ZShcIjIwMjAtMDctMTNUMTk6MDA6MDAuMDAwWlwiKS5nZXRUaW1lKCksXG4gICAgc3RhcnREYXRlVmVyYm9zZTogXCJwb25kxJtsw60gMTMuIMSNZXJ2ZW5jZSAyMDIwXCIsXG4gICAgc3RhcnRUaW1lVmVyYm9zZTogXCIyMTowMFwiLFxuICAgIGFsbERheTogZmFsc2UsXG4gICAgZW5kOiBcIjIwMjAtMDctMTNUMTk6MzA6MDAuMDAwWlwiLFxuICAgIHRpdGxlOiBcIk11bWJsZSAtIHDFmWVkc2VkbmljdHZvXCIsXG4gICAgbGluazpcbiAgICAgIFwiaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9jYWxlbmRhci9ldmVudD9laWQ9WXpWcE0yRnZhR2MyTUhBelkySTVhR00xYVcxallqbHJOakJ2YlRoaVlqRTJkR2syTkdJNWFqWTRjalkwWkdock56Vm5hbWRqT1dkamIxOHlNREl3TURjeE0xUXhPVEF3TURCYUlEZHlOamN6Y214b01qVTFiMlp2Y21oMk0yOWxZakpzTUdjd1FHY1wiXG4gIH0sXG4gIHtcbiAgICBpZDogMyxcbiAgICBzdGFydDogXCIyMDIwLTA3LTE1VDEwOjAwOjAwLjAwMFpcIixcbiAgICBzdGFydFRpbWVzdGFtcDogbmV3IERhdGUoXCIyMDIwLTA3LTE1VDEwOjAwOjAwLjAwMFpcIikuZ2V0VGltZSgpLFxuICAgIHN0YXJ0RGF0ZVZlcmJvc2U6IFwic3TFmWVkYSAxNS4gxI1lcnZlbmNlIDIwMjBcIixcbiAgICBzdGFydFRpbWVWZXJib3NlOiBcIjEyOjAwXCIsXG4gICAgYWxsRGF5OiBmYWxzZSxcbiAgICBlbmQ6IFwiMjAyMC0wNy0xNVQxMTowMDowMC4wMDBaXCIsXG4gICAgdGl0bGU6IFwiUGlyw6F0c2vDvSBvYsSbZCAtIENocnVkaW1cIixcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgIFwiUHJhdmlkZWxuw6kgc2V0a8OhbsOtIHBpcsOhdMWvIHDFmWkgc3TFmWVkZcSNbsOtbSBvYsSbZMSbLiBOZWplbiBvIHBvbGl0aWNlIGEgcyBjaHV0w60uXCIsXG4gICAgbGluazpcbiAgICAgIFwiaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9jYWxlbmRhci9ldmVudD9laWQ9TW13MVkyUndNVEJ5WW04MFkyMDRjV3hzYVcxbWFXSm1jVEpmTWpBeU1EQTNNVFZVTVRBd01EQXdXaUEzY2pZM00zSnNhREkxTlc5bWIzSm9kak52WldJeWJEQm5NRUJuXCIsXG4gICAgbWFwTGluazogXCJodHRwczovL21hcHMuZ29vZ2xlLmNvbVwiXG4gIH0sXG4gIHtcbiAgICBpZDogMTYsXG4gICAgc3RhcnQ6IFwiMjAyMC0wNy0yMFQxOTowMDowMC4wMDBaXCIsXG4gICAgc3RhcnRUaW1lc3RhbXA6IG5ldyBEYXRlKFwiMjAyMC0wNy0yMFQxOTowMDowMC4wMDBaXCIpLmdldFRpbWUoKSxcbiAgICBzdGFydERhdGVWZXJib3NlOiBcInBvbmTEm2zDrSAyMC4gxI1lcnZlbmNlIDIwMjBcIixcbiAgICBzdGFydFRpbWVWZXJib3NlOiBcIjIxOjAwXCIsXG4gICAgYWxsRGF5OiBmYWxzZSxcbiAgICBlbmQ6IFwiMjAyMC0wNy0yMFQxOTozMDowMC4wMDBaXCIsXG4gICAgdGl0bGU6IFwiTXVtYmxlIC0gcMWZZWRzZWRuaWN0dm9cIixcbiAgICBsaW5rOlxuICAgICAgXCJodHRwczovL3d3dy5nb29nbGUuY29tL2NhbGVuZGFyL2V2ZW50P2VpZD1ZelZwTTJGdmFHYzJNSEF6WTJJNWFHTTFhVzFqWWpsck5qQnZiVGhpWWpFMmRHazJOR0k1YWpZNGNqWTBaR2hyTnpWbmFtZGpPV2RqYjE4eU1ESXdNRGN5TUZReE9UQXdNREJhSURkeU5qY3pjbXhvTWpVMWIyWnZjbWgyTTI5bFlqSnNNR2N3UUdjXCJcbiAgfSxcbiAge1xuICAgIGlkOiA0LFxuICAgIHN0YXJ0OiBcIjIwMjAtMDctMjJUMTA6MDA6MDAuMDAwWlwiLFxuICAgIHN0YXJ0VGltZXN0YW1wOiBuZXcgRGF0ZShcIjIwMjAtMDctMjJUMTA6MDA6MDAuMDAwWlwiKS5nZXRUaW1lKCksXG4gICAgc3RhcnREYXRlVmVyYm9zZTogXCJzdMWZZWRhIDIyLiDEjWVydmVuY2UgMjAyMFwiLFxuICAgIHN0YXJ0VGltZVZlcmJvc2U6IFwiMTI6MDBcIixcbiAgICBhbGxEYXk6IGZhbHNlLFxuICAgIGVuZDogXCIyMDIwLTA3LTIyVDExOjAwOjAwLjAwMFpcIixcbiAgICB0aXRsZTogXCJQaXLDoXRza8O9IG9ixJtkIC0gQ2hydWRpbVwiLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgXCJQcmF2aWRlbG7DqSBzZXRrw6Fuw60gcGlyw6F0xa8gcMWZaSBzdMWZZWRlxI1uw61tIG9ixJtkxJsuIE5lamVuIG8gcG9saXRpY2UgYSBzIGNodXTDrS5cIixcbiAgICBsaW5rOlxuICAgICAgXCJodHRwczovL3d3dy5nb29nbGUuY29tL2NhbGVuZGFyL2V2ZW50P2VpZD1NbXcxWTJSd01UQnlZbTgwWTIwNGNXeHNhVzFtYVdKbWNUSmZNakF5TURBM01qSlVNVEF3TURBd1dpQTNjalkzTTNKc2FESTFOVzltYjNKb2RqTnZaV0l5YkRCbk1FQm5cIlxuICB9LFxuICB7XG4gICAgaWQ6IDE3LFxuICAgIHN0YXJ0OiBcIjIwMjAtMDctMjdUMTk6MDA6MDAuMDAwWlwiLFxuICAgIHN0YXJ0VGltZXN0YW1wOiBuZXcgRGF0ZShcIjIwMjAtMDctMjdUMTk6MDA6MDAuMDAwWlwiKS5nZXRUaW1lKCksXG4gICAgc3RhcnREYXRlVmVyYm9zZTogXCJwb25kxJtsw60gMjcuIMSNZXJ2ZW5jZSAyMDIwXCIsXG4gICAgc3RhcnRUaW1lVmVyYm9zZTogXCIyMTowMFwiLFxuICAgIGFsbERheTogZmFsc2UsXG4gICAgZW5kOiBcIjIwMjAtMDctMjdUMTk6MzA6MDAuMDAwWlwiLFxuICAgIHRpdGxlOiBcIk11bWJsZSAtIHDFmWVkc2VkbmljdHZvXCIsXG4gICAgbGluazpcbiAgICAgIFwiaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9jYWxlbmRhci9ldmVudD9laWQ9WXpWcE0yRnZhR2MyTUhBelkySTVhR00xYVcxallqbHJOakJ2YlRoaVlqRTJkR2syTkdJNWFqWTRjalkwWkdock56Vm5hbWRqT1dkamIxOHlNREl3TURjeU4xUXhPVEF3TURCYUlEZHlOamN6Y214b01qVTFiMlp2Y21oMk0yOWxZakpzTUdjd1FHY1wiXG4gIH0sXG4gIHtcbiAgICBpZDogNSxcbiAgICBzdGFydDogXCIyMDIwLTA3LTI5VDEwOjAwOjAwLjAwMFpcIixcbiAgICBzdGFydFRpbWVzdGFtcDogbmV3IERhdGUoXCIyMDIwLTA3LTI5VDEwOjAwOjAwLjAwMFpcIikuZ2V0VGltZSgpLFxuICAgIHN0YXJ0RGF0ZVZlcmJvc2U6IFwic3TFmWVkYSAyOS4gxI1lcnZlbmNlIDIwMjBcIixcbiAgICBzdGFydFRpbWVWZXJib3NlOiBcIjEyOjAwXCIsXG4gICAgYWxsRGF5OiBmYWxzZSxcbiAgICBlbmQ6IFwiMjAyMC0wNy0yOVQxMTowMDowMC4wMDBaXCIsXG4gICAgdGl0bGU6IFwiUGlyw6F0c2vDvSBvYsSbZCAtIENocnVkaW1cIixcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgIFwiUHJhdmlkZWxuw6kgc2V0a8OhbsOtIHBpcsOhdMWvIHDFmWkgc3TFmWVkZcSNbsOtbSBvYsSbZMSbLiBOZWplbiBvIHBvbGl0aWNlIGEgcyBjaHV0w60uXCIsXG4gICAgbGluazpcbiAgICAgIFwiaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9jYWxlbmRhci9ldmVudD9laWQ9TW13MVkyUndNVEJ5WW04MFkyMDRjV3hzYVcxbWFXSm1jVEpmTWpBeU1EQTNNamxVTVRBd01EQXdXaUEzY2pZM00zSnNhREkxTlc5bWIzSm9kak52WldJeWJEQm5NRUJuXCJcbiAgfSxcbiAge1xuICAgIGlkOiAxOCxcbiAgICBzdGFydDogXCIyMDIwLTA4LTAzVDE5OjAwOjAwLjAwMFpcIixcbiAgICBzdGFydFRpbWVzdGFtcDogbmV3IERhdGUoXCIyMDIwLTA4LTAzVDE5OjAwOjAwLjAwMFpcIikuZ2V0VGltZSgpLFxuICAgIHN0YXJ0RGF0ZVZlcmJvc2U6IFwicG9uZMSbbMOtIDMuIHNycG5hIDIwMjBcIixcbiAgICBzdGFydFRpbWVWZXJib3NlOiBcIjIxOjAwXCIsXG4gICAgYWxsRGF5OiBmYWxzZSxcbiAgICBlbmQ6IFwiMjAyMC0wOC0wM1QxOTozMDowMC4wMDBaXCIsXG4gICAgdGl0bGU6IFwiTXVtYmxlIC0gcMWZZWRzZWRuaWN0dm9cIixcbiAgICBsaW5rOlxuICAgICAgXCJodHRwczovL3d3dy5nb29nbGUuY29tL2NhbGVuZGFyL2V2ZW50P2VpZD1ZelZwTTJGdmFHYzJNSEF6WTJJNWFHTTFhVzFqWWpsck5qQnZiVGhpWWpFMmRHazJOR0k1YWpZNGNqWTBaR2hyTnpWbmFtZGpPV2RqYjE4eU1ESXdNRGd3TTFReE9UQXdNREJhSURkeU5qY3pjbXhvTWpVMWIyWnZjbWgyTTI5bFlqSnNNR2N3UUdjXCJcbiAgfSxcbiAge1xuICAgIGlkOiA2LFxuICAgIHN0YXJ0OiBcIjIwMjAtMDgtMDVUMTA6MDA6MDAuMDAwWlwiLFxuICAgIHN0YXJ0VGltZXN0YW1wOiBuZXcgRGF0ZShcIjIwMjAtMDgtMDVUMTA6MDA6MDAuMDAwWlwiKS5nZXRUaW1lKCksXG4gICAgc3RhcnREYXRlVmVyYm9zZTogXCJzdMWZZWRhIDUuIHNycG5hIDIwMjBcIixcbiAgICBzdGFydFRpbWVWZXJib3NlOiBcIjEyOjAwXCIsXG4gICAgYWxsRGF5OiBmYWxzZSxcbiAgICBlbmQ6IFwiMjAyMC0wOC0wNVQxMTowMDowMC4wMDBaXCIsXG4gICAgdGl0bGU6IFwiUGlyw6F0c2vDvSBvYsSbZCAtIENocnVkaW1cIixcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgIFwiUHJhdmlkZWxuw6kgc2V0a8OhbsOtIHBpcsOhdMWvIHDFmWkgc3TFmWVkZcSNbsOtbSBvYsSbZMSbLiBOZWplbiBvIHBvbGl0aWNlIGEgcyBjaHV0w60uXCIsXG4gICAgbGluazpcbiAgICAgIFwiaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9jYWxlbmRhci9ldmVudD9laWQ9TW13MVkyUndNVEJ5WW04MFkyMDRjV3hzYVcxbWFXSm1jVEpmTWpBeU1EQTRNRFZVTVRBd01EQXdXaUEzY2pZM00zSnNhREkxTlc5bWIzSm9kak52WldJeWJEQm5NRUJuXCJcbiAgfVxuXTtcblxuY29uc3QgbW9yZUV2ZW50cyA9IFtcbiAge1xuICAgIGlkOiAxOSxcbiAgICBzdGFydDogXCIyMDIwLTA4LTEwVDE5OjAwOjAwLjAwMFpcIixcbiAgICBzdGFydFRpbWVzdGFtcDogbmV3IERhdGUoXCIyMDIwLTA4LTEwVDE5OjAwOjAwLjAwMFpcIikuZ2V0VGltZSgpLFxuICAgIHN0YXJ0RGF0ZVZlcmJvc2U6IFwicG9uZMSbbMOtIDEwLiBzcnBuYSAyMDIwXCIsXG4gICAgc3RhcnRUaW1lVmVyYm9zZTogXCIyMTowMFwiLFxuICAgIGFsbERheTogZmFsc2UsXG4gICAgZW5kOiBcIjIwMjAtMDgtMTBUMTk6MzA6MDAuMDAwWlwiLFxuICAgIHRpdGxlOiBcIk11bWJsZSAtIHDFmWVkc2VkbmljdHZvXCIsXG4gICAgbGluazpcbiAgICAgIFwiaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9jYWxlbmRhci9ldmVudD9laWQ9WXpWcE0yRnZhR2MyTUhBelkySTVhR00xYVcxallqbHJOakJ2YlRoaVlqRTJkR2syTkdJNWFqWTRjalkwWkdock56Vm5hbWRqT1dkamIxOHlNREl3TURneE1GUXhPVEF3TURCYUlEZHlOamN6Y214b01qVTFiMlp2Y21oMk0yOWxZakpzTUdjd1FHY1wiXG4gIH0sXG4gIHtcbiAgICBpZDogNyxcbiAgICBzdGFydDogXCIyMDIwLTA4LTEyVDEwOjAwOjAwLjAwMFpcIixcbiAgICBzdGFydFRpbWVzdGFtcDogbmV3IERhdGUoXCIyMDIwLTA4LTEyVDEwOjAwOjAwLjAwMFpcIikuZ2V0VGltZSgpLFxuICAgIHN0YXJ0RGF0ZVZlcmJvc2U6IFwic3TFmWVkYSAxMi4gc3JwbmEgMjAyMFwiLFxuICAgIHN0YXJ0VGltZVZlcmJvc2U6IFwiMTI6MDBcIixcbiAgICBhbGxEYXk6IGZhbHNlLFxuICAgIGVuZDogXCIyMDIwLTA4LTEyVDExOjAwOjAwLjAwMFpcIixcbiAgICB0aXRsZTogXCJQaXLDoXRza8O9IG9ixJtkIC0gQ2hydWRpbVwiLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgXCJQcmF2aWRlbG7DqSBzZXRrw6Fuw60gcGlyw6F0xa8gcMWZaSBzdMWZZWRlxI1uw61tIG9ixJtkxJsuIE5lamVuIG8gcG9saXRpY2UgYSBzIGNodXTDrS5cIixcbiAgICBsaW5rOlxuICAgICAgXCJodHRwczovL3d3dy5nb29nbGUuY29tL2NhbGVuZGFyL2V2ZW50P2VpZD1NbXcxWTJSd01UQnlZbTgwWTIwNGNXeHNhVzFtYVdKbWNUSmZNakF5TURBNE1USlVNVEF3TURBd1dpQTNjalkzTTNKc2FESTFOVzltYjNKb2RqTnZaV0l5YkRCbk1FQm5cIlxuICB9XG5dO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGE6ICgpID0+ICh7XG4gICAgZXZlbnRzOiBpbml0aWFsRXZlbnRzLFxuICAgIGhhc01vcmU6IHRydWUsXG4gIH0pLFxuICBtZXRob2RzOiB7XG4gICAgb25TaG93TW9yZSgpIHtcbiAgICAgIHRoaXMuJGRhdGEuZXZlbnRzID0gWy4uLmluaXRpYWxFdmVudHMsIC4uLm1vcmVFdmVudHNdO1xuICAgICAgdGhpcy4kZGF0YS5oYXNNb3JlID0gZmFsc2U7XG4gICAgfVxuICB9LFxuICByZW5kZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuJHNjb3BlZFNsb3RzLmRlZmF1bHQoe1xuICAgICAgZXZlbnRzOiB0aGlzLmV2ZW50cyxcbiAgICAgIGhhc01vcmU6IHRoaXMuaGFzTW9yZSxcbiAgICAgIG9uU2hvd01vcmU6IHRoaXMub25TaG93TW9yZSxcbiAgICB9KTtcbiAgfVxufTtcbjwvc2NyaXB0PlxuIiwiPHNjcmlwdD5cbiAgY29uc3QgcGFnZVNpemUgPSAxMDtcblxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgcHJvcHM6IHtcbiAgICAgIGNhbGVuZGFySWQ6IHtcbiAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICBhcGlLZXk6IHtcbiAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH1cbiAgICB9LFxuICAgIGRhdGEoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBldmVudHM6IFtdLFxuICAgICAgICB0b1Nob3c6IDcsXG4gICAgICB9O1xuICAgIH0sXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIGRpc3BsYXllZEV2ZW50cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXZlbnRzLnNsaWNlKDAsIHRoaXMudG9TaG93KTtcbiAgICAgIH0sXG4gICAgICBoYXNNb3JlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50b1Nob3cgPCB0aGlzLmV2ZW50cy5sZW5ndGg7XG4gICAgICB9LFxuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgb25TaG93TW9yZSgpIHtcbiAgICAgICAgdGhpcy50b1Nob3cgKz0gcGFnZVNpemU7XG4gICAgICB9LFxuICAgICAgbG9hZEV2ZW50c0Zyb21TdG9yYWdlKCkge1xuICAgICAgICBpZiAod2luZG93LnNlc3Npb25TdG9yYWdlICYmIHdpbmRvdy5zZXNzaW9uU3RvcmFnZVsnX19waXJjYWxfJyArIHRoaXMuY2FsZW5kYXJJZF0pIHtcbiAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZSh3aW5kb3cuc2Vzc2lvblN0b3JhZ2VbJ19fcGlyY2FsXycgKyB0aGlzLmNhbGVuZGFySWRdKTtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgLy8gU3RvcmUgZXZlbnRzIHRvIHNlc3Npb25TdG9yYWdlIGlmIHBvc3NpYmxlIHRvIHNhdmUgcmVxdWVzdHMuXG4gICAgICBzdG9yZUV2ZW50c1RvU3RvcmFnZSgpIHtcbiAgICAgICAgaWYgKHdpbmRvdy5zZXNzaW9uU3RvcmFnZSkge1xuICAgICAgICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZVsnX19waXJjYWxfJyArIHRoaXMuY2FsZW5kYXJJZF0gPSBKU09OLnN0cmluZ2lmeSh0aGlzLmV2ZW50cyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIG1vdW50ZWQoKSB7XG4gICAgICBjb25zdCBldiA9IHRoaXMubG9hZEV2ZW50c0Zyb21TdG9yYWdlKCk7XG5cbiAgICAgIGlmICghIGV2KSB7XG4gICAgICAgIGNvbnN0IHRvSXNvID0gbm93ID0+IG5vdy50b0lTT1N0cmluZygpLnNwbGl0KCcuJylbMF0rXCJaXCI7XG4gICAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgICAgIGNvbnN0IHRpbWVNaW4gPSBub3cudG9JU09TdHJpbmcoKTtcbiAgICAgICAgY29uc3QgdGltZU1heCA9IG5ldyBEYXRlKCtub3cgKyAoMTAwMCAqIDYwICogNjAgKiAyNCAqIDkwKSkudG9JU09TdHJpbmcoKTsgLy8gOTAgZGF5cyBhaGVhZFxuICAgICAgICBjb25zdCByZXFVcmwgPSBgaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vY2FsZW5kYXIvdjMvY2FsZW5kYXJzLyR7dGhpcy5jYWxlbmRhcklkfS9ldmVudHM/a2V5PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuYXBpS2V5KX0mbWF4UmVzdWx0cz0xNTAmdGltZU1pbj0ke2VuY29kZVVSSUNvbXBvbmVudCh0aW1lTWluKX0mdGltZU1heD0ke2VuY29kZVVSSUNvbXBvbmVudCh0aW1lTWF4KX0mc2FuaXRpemVIdG1sPXRydWUmc2luZ2xlRXZlbnRzPXRydWUmbWF4QXRlbmRlZXM9MWA7XG5cbiAgICAgICAgbGV0IGNvdW50ZXIgPSAwO1xuXG4gICAgICAgIGZldGNoKHJlcVVybClcbiAgICAgICAgICAudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlByb2JsZW0gbG9hZGluZyBldmVudHMgZnJvbSBnb29nbGVcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpXG4gICAgICAgICAgfSlcbiAgICAgICAgICAudGhlbihyZXNwID0+IHtcbiAgICAgICAgICAgIHRoaXMuZXZlbnRzID0gcmVzcC5pdGVtc1xuICAgICAgICAgICAgICAubWFwKGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gbmV3IERhdGUoZS5zdGFydC5kYXRlVGltZSB8fCBlLnN0YXJ0LmRhdGUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVuZCA9IG5ldyBEYXRlKGUuZW5kLmRhdGVUaW1lIHx8IGUuZW5kLmRhdGUpO1xuXG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnREYXRlVmVyYm9zZSA9IHN0YXJ0LnRvTG9jYWxlRGF0ZVN0cmluZygnY3MtQ1onLCB7d2Vla2RheTogJ2xvbmcnLCB5ZWFyOiAnbnVtZXJpYycsIG1vbnRoOiAnbG9uZycsIGRheTogJ251bWVyaWMnfSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRUaW1lVmVyYm9zZSA9IHN0YXJ0LmdldEhvdXJzKCkgKyAnOicgKyBzdGFydC5nZXRNaW51dGVzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgYWxsRGF5ID0gISBlLnN0YXJ0LmRhdGVUaW1lO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgIGlkOiBjb3VudGVyKyssXG4gICAgICAgICAgICAgICAgICBzdGFydDogc3RhcnQsXG4gICAgICAgICAgICAgICAgICBzdGFydFRpbWVzdGFtcDogc3RhcnQuZ2V0VGltZSgpLFxuICAgICAgICAgICAgICAgICAgc3RhcnREYXRlVmVyYm9zZSxcbiAgICAgICAgICAgICAgICAgIHN0YXJ0VGltZVZlcmJvc2UsXG4gICAgICAgICAgICAgICAgICBhbGxEYXksXG4gICAgICAgICAgICAgICAgICBlbmQ6IGVuZCxcbiAgICAgICAgICAgICAgICAgIHRpdGxlOiBlLnN1bW1hcnksXG4gICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogZS5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICAgIGxpbms6IGUuaHRtbExpbmtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuc29ydCgoZTEsIGUyKSA9PiBlMS5zdGFydCA8IGUyLnN0YXJ0ID8gLTEgOiAxKTtcblxuICAgICAgICAgICAgdGhpcy5zdG9yZUV2ZW50c1RvU3RvcmFnZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZXZlbnRzID0gZXY7XG4gICAgICB9XG4gICAgfSxcbiAgICByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kc2NvcGVkU2xvdHMuZGVmYXVsdCh7XG4gICAgICAgIGV2ZW50czogdGhpcy5kaXNwbGF5ZWRFdmVudHMsXG4gICAgICAgIGhhc01vcmU6IHRoaXMuaGFzTW9yZSxcbiAgICAgICAgb25TaG93TW9yZTogdGhpcy5vblNob3dNb3JlLFxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJyZWdpb24tbWFwIGZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyXCI+XG4gICAgPGRpdiBjbGFzcz1cInctZnVsbCBtYXgtdy14bCBibG9ja1wiPlxuICAgICAgPHN2Z1xuICAgICAgICB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIlxuICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgaWQ9XCJzdmdtYXB5XCJcbiAgICAgICAgdmVyc2lvbj1cIjEuMVwiXG4gICAgICAgIHZpZXdCb3g9XCIwIDc1IDgwMCA1MDBcIlxuICAgICAgPlxuICAgICAgICA8Zz5cbiAgICAgICAgICA8YSB4bGluazpocmVmPVwiI1wiIHYtZm9yPVwicmVnaW9uIGluIHJlZ2lvbnNcIiA6a2V5PVwicmVnaW9uLmlkXCIgQG1vdXNlb3Zlcj1cImN1cnJlbnQgPSByZWdpb25cIiBAbW91c2VvdXQ9XCJjdXJyZW50ID0gbnVsbFwiIEBjbGljaz1cInNlbGVjdFJlZ2lvbihyZWdpb24pXCI+XG4gICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICBjbGFzcz1cIm1hcC1wb2x5Z29uXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwieydyZWdpb24tbWFwX19yZWdpb24nOiB0cnVlLCAncmVnaW9uLW1hcF9fcmVnaW9uLS1jdXJyZW50JzogY3VycmVudCA9PT0gcmVnaW9ufVwiXG4gICAgICAgICAgICAgIDpkPVwicmVnaW9uLnBvbHlnb25cIlxuICAgICAgICAgICAgPjwvcGF0aD5cbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvZz5cbiAgICAgIDwvc3ZnPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm9wczoge1xuICAgIGxpbmtzOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICBkZWZhdWx0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgXCJwcmFoYVwiOiBcImh0dHBzOi8vcHJhaGEucGlyYXRpLmN6XCIsXG4gICAgICAgICAgXCJzdHJlZG9jZXNreVwiOiBcImh0dHBzOi8vc3RyZWRvY2Vza3kucGlyYXRpLmN6XCIsXG4gICAgICAgICAgXCJqaWhvY2Vza3lcIjogXCJodHRwczovL2ppaG9jZXNreS5waXJhdGkuY3pcIixcbiAgICAgICAgICBcInBsemVuc2t5XCI6IFwiaHR0cHM6Ly9wbHplbnNreS5waXJhdGkuY3pcIixcbiAgICAgICAgICBcImthcmxvdmFyc2t5XCI6IFwiaHR0cHM6Ly9rYXJsb3ZhcnNreS5waXJhdGkuY3pcIixcbiAgICAgICAgICBcInVzdGVja3lcIjogXCJodHRwczovL3VzdGVja3kucGlyYXRpLmN6XCIsXG4gICAgICAgICAgXCJsaWJlcmVja3lcIjogXCJodHRwczovL2xpYmVyZWNreS5waXJhdGkuY3pcIixcbiAgICAgICAgICBcImtyYWxvdmVocmFkZWNreVwiOiBcImh0dHBzOi8va3JhbG92ZWhyYWRlY2t5LnBpcmF0aS5jelwiLFxuICAgICAgICAgIFwibW9yYXZza29zbGV6c2t5XCI6IFwiaHR0cHM6Ly9tb3JhdnNrb3NsZXpza3kucGlyYXRpLmN6XCIsXG4gICAgICAgICAgXCJwYXJkdWJpY2t5XCI6IFwiaHR0cHM6Ly9wYXJkdWJpY2t5LnBpcmF0aS5jelwiLFxuICAgICAgICAgIFwidnlzb2NpbmFcIjogXCJodHRwczovL3Z5c29jaW5hLnBpcmF0aS5jelwiLFxuICAgICAgICAgIFwiamlob21vcmF2c2t5XCI6IFwiaHR0cHM6Ly9qaWhvbW9yYXZza3kucGlyYXRpLmN6XCIsXG4gICAgICAgICAgXCJvbG9tb3Vja3lcIjogXCJodHRwczovL29sb21vdWNreS5waXJhdGkuY3pcIixcbiAgICAgICAgICBcInpsaW5za3lcIjogXCJodHRwczovL3psaW5za3kucGlyYXRpLmN6XCJcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBzZWxlY3RSZWdpb24ocmVnaW9uKSB7XG4gICAgICBjb25zdCBocmVmID0gdGhpcy4kcHJvcHMubGlua3NbcmVnaW9uLmlkXTtcbiAgICAgIHdpbmRvdy5vcGVuKGhyZWYsICdfYmxhbmsnKTtcbiAgICB9XG4gIH0sXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnQ6IG51bGwsXG4gICAgICByZWdpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogXCJqaWhvY2Vza3lcIixcbiAgICAgICAgICBuYW1lOiBcIkppaG/EjWVza8O9IGtyYWpcIixcbiAgICAgICAgICBwb2x5Z29uOiBcIk0xNzMuNSw0NDUuNjFMMTc5LjUsNDQ3LjM2TDE4NS42MTU5OTk5OTk5OTk5OSw0NTIuNjkyTDE4NC42MTU5OTk5OTk5OTk5OSw0NTUuNzg5TDE4OC45NjMsNDYyLjMxTDE5Ni41Nyw0NjMuNjY5TDE5OC43NDMsNDcwLjQ2MDk5OTk5OTk5OTk2TDIwMy45MDUsNDc3LjI1Mjk5OTk5OTk5OTkzTDIwNi4wNzksNDgzLjUwMTk5OTk5OTk5OTk1TDIxMS43ODQwMDAwMDAwMDAwMiw0ODMuNzcyOTk5OTk5OTk5OTdMMjIxLjU2NTAwMDAwMDAwMDAzLDQ5My4wMUwyMjYuNzI3MDAwMDAwMDAwMDMsNDk0LjkxMUwyMzIuNDMzMDAwMDAwMDAwMDIsNTAxLjcwNEwyMjguMzU4MDAwMDAwMDAwMDMsNTA2LjA1MUwyMzcuMzI0MDAwMDAwMDAwMDQsNTE1LjAxNjk5OTk5OTk5OTlIMjQ3LjY0ODAwMDAwMDAwMDA1TDI1Ny45NzIwMDAwMDAwMDAwNCw1MTYuOTE3OTk5OTk5OTk5OUwyNjYuMzk0MDAwMDAwMDAwMDYsNTIxLjgwODk5OTk5OTk5OTlMMjc4LjM0ODAwMDAwMDAwMDA3LDUxMS43NTU5OTk5OTk5OTk4NkwyODAuNzkzMDAwMDAwMDAwMDYsNTA1LjUwNzk5OTk5OTk5OTg3TDI4Ny4wNDIwMDAwMDAwMDAxLDUxMC45NDE5OTk5OTk5OTk5TDI5My44MzQwMDAwMDAwMDAwNiw1MTIuMjk5OTk5OTk5OTk5OEwyOTkuMjY4MDAwMDAwMDAwMSw1MTAuOTQxOTk5OTk5OTk5ODRMMzA4LjIzNDAwMDAwMDAwMDEsNTE2LjkxODk5OTk5OTk5OTlMMzExLjc2NjAwMDAwMDAwMDEsNTExLjIxMzk5OTk5OTk5OTlMMzEwLjY4MDAwMDAwMDAwMDA2LDUwNS43Nzk5OTk5OTk5OTk4NkwzMTEuNzY3MDAwMDAwMDAwMDUsNDk2LjU0Mjk5OTk5OTk5OTg0TDMxOS4zNzQwMDAwMDAwMDAxLDQ5MC4yOTQ5OTk5OTk5OTk4NUwzMjIuMDkxMDAwMDAwMDAwMDcsNDgyLjQxNTk5OTk5OTk5OThMMzI5LjE1NTAwMDAwMDAwMDEsNDgyLjY4Njk5OTk5OTk5OTg0TDMzOC45MzYwMDAwMDAwMDAxLDQ4NS42NzQ5OTk5OTk5OTk4NEwzNDAuNTY2MDAwMDAwMDAwMSw0ODIuNjg2OTk5OTk5OTk5ODRMMzM4LjEyMTAwMDAwMDAwMDEsNDc4LjMzOTk5OTk5OTk5OTg2TDMzOS40NzkwMDAwMDAwMDAxLDQ3Mi4zNjE5OTk5OTk5OTk4NUwzNDEuOTI0MDAwMDAwMDAwMSw0NjUuMDI1OTk5OTk5OTk5ODRMMzQxLjEwOTAwMDAwMDAwMDEsNDU1LjUxNjk5OTk5OTk5OThMMzQwLjU2NjAwMDAwMDAwMDEsNDQ1LjQ2Mzk5OTk5OTk5OThMMzQzLjU1NDAwMDAwMDAwMDEsNDM5Ljc1ODk5OTk5OTk5OTg0TDM1Mi41MjAwMDAwMDAwMDAxLDQ0Mi43NDY5OTk5OTk5OTk4NEwzNjAuMTI3MDAwMDAwMDAwMSw0NDQuMzc3OTk5OTk5OTk5OEwzNjIuNTcyMDAwMDAwMDAwMSw0NTIuNTI3OTk5OTk5OTk5OEwzNzQuMjU1MDAwMDAwMDAwMSw0NDkuODEwOTk5OTk5OTk5OEwzNzcuNTE1MDAwMDAwMDAwMSw0NDUuNDYyOTk5OTk5OTk5OEwzODUuMzk0MDAwMDAwMDAwMSw0NDUuNzM0OTk5OTk5OTk5OEwzOTcuMzQ5MDAwMDAwMDAwMSw0NTEuOTgyOTk5OTk5OTk5OEw0MDEuNDI0MDAwMDAwMDAwMSw0NTMuODg0OTk5OTk5OTk5NzZMNDA1LjUwMTAwMDAwMDAwMDEsNDU5Ljg1Njk5OTk5OTk5OTc0TDQwOC43NTEwMDAwMDAwMDAxLDQ1Mi44NTY5OTk5OTk5OTk3NEw0MDQuNzUxMDAwMDAwMDAwMSw0NDYuNjA2OTk5OTk5OTk5NzRMNDAwLjI1MTAwMDAwMDAwMDEsNDQyLjYwNjk5OTk5OTk5OTc0TDQwNS43NTEwMDAwMDAwMDAxLDQzNi44NTY5OTk5OTk5OTk3NEw0MDYuNzUxMDAwMDAwMDAwMSw0MzAuNjA2OTk5OTk5OTk5NzRMNDEyLjAwMTAwMDAwMDAwMDEsNDI5LjYwNjk5OTk5OTk5OTc0TDQxMi43NTEwMDAwMDAwMDAxLDQyNS4xMDY5OTk5OTk5OTk3NEw0MDUuNTAxMDAwMDAwMDAwMSw0MTkuMzU2OTk5OTk5OTk5NzRMMzk4LjUwMTAwMDAwMDAwMDEsNDIwLjg1Njk5OTk5OTk5OTc0TDM5MC4wMDEwMDAwMDAwMDAxLDQyMC42MDY5OTk5OTk5OTk3NEwzODMuNTAxMDAwMDAwMDAwMSw0MTQuMTA2OTk5OTk5OTk5NzRMMzg0LjUwMTAwMDAwMDAwMDEsNDA4LjYwNjk5OTk5OTk5OTc0TDM4MS4yNTEwMDAwMDAwMDAxLDQwNC4xMDY5OTk5OTk5OTk3NEwzNzQuMDAxMDAwMDAwMDAwMSw0MDUuMzU2OTk5OTk5OTk5NzRMMzY2LjAwMTAwMDAwMDAwMDEsNDAyLjM1Njk5OTk5OTk5OTc0TDM2MS4wMDEwMDAwMDAwMDAxLDQwNS4xMDY5OTk5OTk5OTk3NEwzNTUuNTAxMDAwMDAwMDAwMSw0MDAuMTA2OTk5OTk5OTk5NzRMMzUyLjc1MTAwMDAwMDAwMDEsMzk1LjEwNjk5OTk5OTk5OTc0TDM0Ni41MDEwMDAwMDAwMDAxLDM5MS42MDY5OTk5OTk5OTk3NEwzNDEuNzUxMDAwMDAwMDAwMSwzOTQuMzU2OTk5OTk5OTk5NzRMMzM2LjI1MTAwMDAwMDAwMDEsMzg5Ljg1Njk5OTk5OTk5OTc0TDMzMy41MDEwMDAwMDAwMDAxLDM4NC44NTY5OTk5OTk5OTk3NEwzMzQuNzUxMDAwMDAwMDAwMSwzODAuMzU2OTk5OTk5OTk5NzRMMzMyLjAwMTAwMDAwMDAwMDEsMzc0LjYwNjk5OTk5OTk5OTc0VjM2Ni44NTY5OTk5OTk5OTk3NEwzMzUuMDAxMDAwMDAwMDAwMSwzNjMuMTA2OTk5OTk5OTk5NzRMMzM1LjI1MTAwMDAwMDAwMDEsMzU2LjEwNjk5OTk5OTk5OTc0TDMzMy41MDEwMDAwMDAwMDAxLDM0OS42MDY5OTk5OTk5OTk3NEwzMzAuMjUxMDAwMDAwMDAwMSwzNDQuODU2OTk5OTk5OTk5NzRMMzI4LjAwMTAwMDAwMDAwMDEsMzM5LjM1Njk5OTk5OTk5OTc0TDMyMy43NTEwMDAwMDAwMDAxLDMzOS44NTY5OTk5OTk5OTk3NEwzMTYuMDAxMDAwMDAwMDAwMSwzMzMuMzU2OTk5OTk5OTk5NzRMMzEwLjc1MTAwMDAwMDAwMDEsMzM3LjEwNjk5OTk5OTk5OTc0TDMxMi4yNTEwMDAwMDAwMDAxLDM0NC44NTY5OTk5OTk5OTk3NEwzMDUuNzUxMDAwMDAwMDAwMSwzNDguMzU2OTk5OTk5OTk5NzRMMzAyLjI1MTAwMDAwMDAwMDEsMzUyLjM1Njk5OTk5OTk5OTc0TDI5NS4wMDEwMDAwMDAwMDAxLDM0OS4zNTY5OTk5OTk5OTk3NEwyODcuMDAxMDAwMDAwMDAwMSwzNDcuMzU2OTk5OTk5OTk5NzRMMjgyLjUwMTAwMDAwMDAwMDEsMzQ4LjEwNjk5OTk5OTk5OTc0TDI3Ni4wMDEwMDAwMDAwMDAxLDM0NS4xMDY5OTk5OTk5OTk3NEwyNjkuNzUxMDAwMDAwMDAwMSwzNDguODU2OTk5OTk5OTk5NzRDMjY5Ljc1MTAwMDAwMDAwMDEsMzQ4Ljg1Njk5OTk5OTk5OTc0LDI2Ni4xMDMwMDAwMDAwMDAwNywzNDguNjIxOTk5OTk5OTk5NzMsMjY1LjUwMTAwMDAwMDAwMDEsMzQ4LjYwNjk5OTk5OTk5OTc0UzI2MS41MDEwMDAwMDAwMDAxLDM0My42MDY5OTk5OTk5OTk3NCwyNjEuNTAxMDAwMDAwMDAwMSwzNDMuNjA2OTk5OTk5OTk5NzRIMjU1LjUwMTAwMDAwMDAwMDFMMjUyLjUwMTAwMDAwMDAwMDEsMzQ3LjM1Njk5OTk5OTk5OTc0TDIzOS4wMDEwMDAwMDAwMDAxLDM0OC44NTY5OTk5OTk5OTk3NEwyMzUuMjUxMDAwMDAwMDAwMSwzNDQuODU2OTk5OTk5OTk5NzRIMjMwLjUwMTAwMDAwMDAwMDFMMjI3Ljc1MTAwMDAwMDAwMDEsMzQ5LjYwNjk5OTk5OTk5OTc0TDIyMC43NTEwMDAwMDAwMDAxLDM1My4xMDY5OTk5OTk5OTk3NEwyMTYuMjUxMDAwMDAwMDAwMSwzNTAuODU2OTk5OTk5OTk5NzRMMjAyLjUwMTAwMDAwMDAwMDEsMzUwLjM1Njk5OTk5OTk5OTc0TDE5OS43NTEwMDAwMDAwMDAxLDM1NC4zNTY5OTk5OTk5OTk3NEwyMDEuMjUxMDAwMDAwMDAwMSwzNTkuODU2OTk5OTk5OTk5NzRWMzY0LjM1Njk5OTk5OTk5OTc0TDIwMC41MDEwMDAwMDAwMDAxLDM3Mi4xMDY5OTk5OTk5OTk3NEwyMDQuMDAxMDAwMDAwMDAwMSwzNzcuODU2OTk5OTk5OTk5NzRMMTk5LjUwMTAwMDAwMDAwMDEsMzg0Ljg1Njk5OTk5OTk5OTc0TDE5Ni4wMDEwMDAwMDAwMDAxLDM4Ny42MDY5OTk5OTk5OTk3NFYzOTEuMzU2OTk5OTk5OTk5NzRMMTkzLjAwMTAwMDAwMDAwMDEsMzk0LjEwNjk5OTk5OTk5OTc0TDE5Ni43NTEwMDAwMDAwMDAxLDM5OC4zNTY5OTk5OTk5OTk3NEwxOTIuMDAxMDAwMDAwMDAwMSw0MDAuODU2OTk5OTk5OTk5NzRMMTk1LjAwMTAwMDAwMDAwMDEsNDA2Ljg1Njk5OTk5OTk5OTc0TDE5Mi41MDEwMDAwMDAwMDAxLDQxMi44NTY5OTk5OTk5OTk3NEwxODYuNTAxMDAwMDAwMDAwMSw0MTUuMTA2OTk5OTk5OTk5NzRMMTg1LjAwMTAwMDAwMDAwMDEsNDE3Ljg1Njk5OTk5OTk5OTc0TDE4MC41MDEwMDAwMDAwMDAxLDQxNi4zNTY5OTk5OTk5OTk3NEwxNzkuMjUxMDAwMDAwMDAwMSw0MjYuMTA2OTk5OTk5OTk5NzRMMTgxLjc1MTAwMDAwMDAwMDEsNDMwLjEwNjk5OTk5OTk5OTc0TDE4MC41MDEwMDAwMDAwMDAxLDQzMy42MDY5OTk5OTk5OTk3NEwxNzUuMjUxMDAwMDAwMDAwMSw0MzUuODU2OTk5OTk5OTk5NzRMMTczLjU3NjAwMDAwMDAwMDA4LDQ0MS44MzE5OTk5OTk5OTk3N0wxNzMuNSw0NDUuNjFaXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiBcInBsemVuc2t5XCIsXG4gICAgICAgICAgbmFtZTogXCJQbHplxYhza8O9IGtyYWpcIixcbiAgICAgICAgICBwb2x5Z29uOiBcIk0xNTEuMDI3LDI0Ni43NzFMMTQ3LjYzNywyNTUuMDU5TDE0MS45ODYsMjU2LjU2NlYyNjUuMDQyTDEzNC40NTIsMjU5LjM5MDk5OTk5OTk5OTk2TDEyNi41NDEsMjU4LjQ0ODk5OTk5OTk5OTk2TDExMS40NzIsMjY4LjI0Mjk5OTk5OTk5OTk0VjI3My44OTM5OTk5OTk5OTk5NUwxMDcuNjEwOTk5OTk5OTk5OTksMjc3Ljc1NDk5OTk5OTk5OTk0TDEwMS4zMDA5OTk5OTk5OTk5OSwyNzQuNjQ3OTk5OTk5OTk5OUw5OC4wOTg5OTk5OTk5OTk5OSwyNzYuMTU0OTk5OTk5OTk5OUw5MS44ODMsMjcyLjM4Njk5OTk5OTk5OTk0TDg0LjM0ODk5OTk5OTk5OTk5LDI3NS41ODg5OTk5OTk5OTk5NEw3OC45ODEsMjgwLjk1Njk5OTk5OTk5OTk0TDczLjk5LDI3Ni41Mjk5OTk5OTk5OTk5TDY5LjQ2OSwyODAuMjk3OTk5OTk5OTk5OUw2Mi4zNTU5OTk5OTk5OTk5OTUsMjgwLjAwNjk5OTk5OTk5OTlMNTQuNDc3LDI5MS45NjA5OTk5OTk5OTk5TDU0LDI5OS4xMUw0NS43ODQsMzA2LjYzMzAwMDAwMDAwMDA0TDUyLjAzMywzMTMuNjk2TDU5LjY0LDMxOC44NThMNTkuMDk3LDMyNi43MzdMNjQuMjU5LDMzMi43MTUwMDAwMDAwMDAwM0w2My45ODcsMzQwLjA1TDcyLjEzOCwzNDUuNzU2MDAwMDAwMDAwMDNMNzEuMzIzMDAwMDAwMDAwMDEsMzU0LjcyMUw3Mi42ODEwMDAwMDAwMDAwMSwzNjAuOTY5TDc5LjIwMjAwMDAwMDAwMDAxLDM2NC41MDFMODQuOTA4MDAwMDAwMDAwMDIsMzcwLjQ3OUw4OS4yNTUwMDAwMDAwMDAwMSwzNzcuODEzOTk5OTk5OTk5OTZMOTcuMTM0MDAwMDAwMDAwMDEsMzc5Ljk4Nzk5OTk5OTk5OTk0TDk5Ljg1MTAwMDAwMDAwMDAxLDM3OC4wODY5OTk5OTk5OTk5M0wxMDYuOTE0MDAwMDAwMDAwMDIsMzc5LjQ0NDk5OTk5OTk5OTk0TDExNS44ODAwMDAwMDAwMDAwMSwzODUuOTY1OTk5OTk5OTk5OTVMMTE2Ljk2NzAwMDAwMDAwMDAxLDM5My4zMDA5OTk5OTk5OTk5M0wxMjQuODQ2MDAwMDAwMDAwMDIsNDAxLjE3OTk5OTk5OTk5OTk1VjQwNC45ODM5OTk5OTk5OTk5TDEzMi4xODEsNDEwLjY4OTk5OTk5OTk5OTk0TDEzMy41MzkwMDAwMDAwMDAwMiw0MTYuMzk0OTk5OTk5OTk5OUwxMzguNDMsNDE5LjkyNjk5OTk5OTk5OTlIMTQ1LjIyMkwxNTEuNzQzLDQyNi40NDc5OTk5OTk5OTk5TDE1Ny43Miw0MzUuMTQwOTk5OTk5OTk5OUwxNTguNTM1LDQ0NC42NTA5OTk5OTk5OTk5TDE2OS42NzQsNDUxLjk4NTk5OTk5OTk5OTlMMTczLjUwMSw0NDUuNjEwOTk5OTk5OTk5OUwxNzMuNTc2LDQ0MS44MzU5OTk5OTk5OTk5TDE3NS4yNTEsNDM1Ljg2MDk5OTk5OTk5OTlMMTgwLjUwMSw0MzMuNjEwOTk5OTk5OTk5OUwxODEuNzUxLDQzMC4xMTA5OTk5OTk5OTk5TDE3OS4yNTEsNDI2LjExMDk5OTk5OTk5OTlMMTgwLjUwMSw0MTYuMzYwOTk5OTk5OTk5OUwxODUuMDAxLDQxNy44NjA5OTk5OTk5OTk5TDE4Ni41MDEsNDE1LjExMDk5OTk5OTk5OTlMMTkyLjUwMSw0MTIuODYwOTk5OTk5OTk5OUwxOTUuMDAxLDQwNi44NjA5OTk5OTk5OTk5TDE5Mi4wMDEsNDAwLjg2MDk5OTk5OTk5OTlMMTk2Ljc1MSwzOTguMzYwOTk5OTk5OTk5OUwxOTMuMDAxLDM5NC4xMTA5OTk5OTk5OTk5TDE5Ni4wMDEsMzkxLjM2MDk5OTk5OTk5OTlWMzg3LjYxMDk5OTk5OTk5OTlMMTk5LjUwMSwzODQuODYwOTk5OTk5OTk5OUwyMDQuMDAxLDM3Ny44NjA5OTk5OTk5OTk5TDIwMC41MDEsMzcyLjExMDk5OTk5OTk5OTlMMjAxLjI1MSwzNjQuMzYwOTk5OTk5OTk5OVYzNTkuODYwOTk5OTk5OTk5OUwxOTkuNzUxLDM1NC4zNjA5OTk5OTk5OTk5TDIwMi41MDEsMzUwLjM2MDk5OTk5OTk5OTlMMTk5LjI1MSwzNDQuODYwOTk5OTk5OTk5OUwxOTkuNTAxLDMzOC44NjA5OTk5OTk5OTk5TDIwMC43NTEsMzM0LjM2MDk5OTk5OTk5OTlMMTk3LjUwMSwzMzEuODYwOTk5OTk5OTk5OUwxOTQuMDAxLDMyNy4zNjA5OTk5OTk5OTk5TDE5NS43NTEsMzIyLjM2MDk5OTk5OTk5OTlMMTkxLjc1MSwzMTguMTEwOTk5OTk5OTk5OUwxOTcuMDAxLDMxNC4zNjA5OTk5OTk5OTk5SDIwMi41MDFMMjA3LjI1MSwzMDguNjEwOTk5OTk5OTk5OUwyMDUuMDAxLDMwNC4xMTA5OTk5OTk5OTk5TDIwNy41MDEsMjk5Ljg2MDk5OTk5OTk5OTlMMjA1LjI1MSwyOTMuODYwOTk5OTk5OTk5OUwyMTAuMDAxLDI4OS4xMTA5OTk5OTk5OTk5TDIwOC43NTEsMjg1LjM2MDk5OTk5OTk5OTlMMjA5LjI1MSwyNzguODYwOTk5OTk5OTk5OUwyMDUuMDAxLDI3Ni4xMTA5OTk5OTk5OTk5TDIwMC4wMDEsMjc1LjExMDk5OTk5OTk5OTlMMTk5Ljc1MSwyNzEuMTEwOTk5OTk5OTk5OUwxOTQuNzUxLDI3Mi4xMTA5OTk5OTk5OTk5QzE5NC43NTEsMjcyLjExMDk5OTk5OTk5OTksMTg5LjY5NSwyNjUuNDA0OTk5OTk5OTk5ODYsMTg5LjUwMSwyNjUuMzYwOTk5OTk5OTk5OVMxODUuMDAxLDI2Ny4xMTA5OTk5OTk5OTk5LDE4NS4wMDEsMjY3LjExMDk5OTk5OTk5OTlMMTgwLjUwMSwyNjQuODYwOTk5OTk5OTk5OUwxNzYuNTAxLDI2Mi42MTA5OTk5OTk5OTk5TDE3NS43NTEsMjU4LjM2MDk5OTk5OTk5OTlMMTY5LjAwMSwyNTcuODYwOTk5OTk5OTk5OUwxNjUuMDAxLDI2MC4zNjA5OTk5OTk5OTk5TDE2MS41MDEsMjU3LjExMDk5OTk5OTk5OTlMMTY0LjI1MSwyNTMuNjEwOTk5OTk5OTk5ODhMMTYxLjk1NjAwMDAwMDAwMDAyLDI1MC43MjY5OTk5OTk5OTk5TDE1NS4xNzUsMjQ2Ljc3MDk5OTk5OTk5OTlMMTUxLjAyNywyNDYuNzcxWlwiLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6IFwia2FybG92YXJza3lcIixcbiAgICAgICAgICBuYW1lOiBcIkthcmxvdmFyc2vDvSBrcmFqXCIsXG4gICAgICAgICAgcG9seWdvbjogXCJNNjkuNDcsMjgwLjI5OUw2Mi4zNTcsMjgwLjAwOFYyNzQuODQ2TDU3LjE5NSwyNzIuNDAxTDU3LjQ2NiwyNjYuNDI0MDAwMDAwMDAwMDRMNDIuMjUxLDI1Ni4xTDMyLjc0MiwyNTEuMjEwMDAwMDAwMDAwMDRMMjguNjY1OTk5OTk5OTk5OTk3LDI0My44NzQwMDAwMDAwMDAwMkwyNC41OTA5OTk5OTk5OTk5OTgsMjM5LjI1NTAwMDAwMDAwMDAyTDI2LjQ5MywyMzAuODMzMDAwMDAwMDAwMDNMMjAuMjQ0LDIyMS4zMjRMMTUuNzYxLDIxNi44NDFMMTguODg2LDIxMC43MjhMMTYuMTY5OTk5OTk5OTk5OTk4LDIwMy45MzZIMjQuODYzOTk5OTk5OTk5OTk3TDI3LjAzNywyMDYuMTFWMjEyLjA4NzAwMDAwMDAwMDAySDMxLjY1NkwzNC4yMzcsMjE0LjY2OEwzMi43NDIwMDAwMDAwMDAwMDQsMjE4Ljg3OTAwMDAwMDAwMDAyTDM1LjQ1OSwyMjEuNTk2MDAwMDAwMDAwMDNWMjI4LjM4ODAwMDAwMDAwMDAzTDM5LjUzNTAwMDAwMDAwMDAwNCwyMzIuNDY0MDAwMDAwMDAwMDNMNDEuNDM3MDAwMDAwMDAwMDA1LDIyMi42ODMwMDAwMDAwMDAwMkM0MS40MzcwMDAwMDAwMDAwMDUsMjIyLjY4MzAwMDAwMDAwMDAyLDQwLjA3OTAwMDAwMDAwMDAxLDIxOS40MjIwMDAwMDAwMDAwMyw0MS40MzcwMDAwMDAwMDAwMDUsMjE4LjA2NDAwMDAwMDAwMDAyUzQ2Ljg3MSwyMTIuNjMwMDAwMDAwMDAwMDIsNDYuODcxLDIxMi42MzAwMDAwMDAwMDAwMkw0OS4zMTYsMjA0LjQ3OUw1OS45MTIwMDAwMDAwMDAwMDYsMTk4Ljc3NFYxOTQuOTdMNjMuMzA4MDAwMDAwMDAwMDEsMTkxLjU3NEw3MS4wNTEsMTkwLjM1MUw4MC44MzIwMDAwMDAwMDAwMSwxODguNzIxTDg0LjA5MjAwMDAwMDAwMDAxLDE5MS45ODFMODkuNTI2MDAwMDAwMDAwMDEsMTg1LjE4OUw5OS41NzkwMDAwMDAwMDAwMSwxODIuNDcxOTk5OTk5OTk5OThMMTEwLjE3NTAwMDAwMDAwMDAxLDE5MC4zNTA5OTk5OTk5OTk5N0wxMTUuMDE5LDE5NS4xOTQ5OTk5OTk5OTk5NkgxMjUuMDM2TDEyOS45MzMsMTk3LjA0NDk5OTk5OTk5OTk2QzEyOS45MzMsMTk3LjA0NDk5OTk5OTk5OTk2LDEyOS42NzYsMjAxLjI1OTk5OTk5OTk5OTk2LDEyOS45MzMsMjAxLjc1Mzk5OTk5OTk5OTk2UzE0MC42Njg5OTk5OTk5OTk5OCwyMDAuNjIzOTk5OTk5OTk5OTcsMTQwLjY2ODk5OTk5OTk5OTk4LDIwMC42MjM5OTk5OTk5OTk5N0wxNDUuMzc4LDIwNS4zMzI5OTk5OTk5OTk5N0wxNDAuNzYyOTk5OTk5OTk5OTgsMjA5Ljk0Nzk5OTk5OTk5OTk4TDE0My4zMDU5OTk5OTk5OTk5OCwyMTQuNzUwOTk5OTk5OTk5OThMMTQxLjYxMSwyMjAuOTY1OTk5OTk5OTk5OThMMTQ1Ljc1NSwyMjUuMTA5OTk5OTk5OTk5OTlMMTQ0LjA2LDIyOC42ODlMMTQ4Ljc2OCwyMzUuMDkzTDE0NC4wNTksMjM5LjgwMUwxNTEuMDI4LDI0Ni43NzFMMTQ3LjYzOCwyNTUuMDU5TDE0MS45ODcsMjU2LjU2NlYyNjUuMDQyTDEzNC40NTMsMjU5LjM5MDk5OTk5OTk5OTk2TDEyNi41NDIsMjU4LjQ0ODk5OTk5OTk5OTk2TDExMS40NzMsMjY4LjI0Mjk5OTk5OTk5OTk0VjI3My44OTM5OTk5OTk5OTk5NUwxMDcuNjEyLDI3Ny43NTQ5OTk5OTk5OTk5NEwxMDEuMzAxOTk5OTk5OTk5OTksMjc0LjY0Nzk5OTk5OTk5OTlMOTguMSwyNzYuMTU0OTk5OTk5OTk5OUw5MS44ODQsMjcyLjM4Njk5OTk5OTk5OTk0TDg0LjM1LDI3NS41ODg5OTk5OTk5OTk5NEw3OC45ODIsMjgwLjk1Njk5OTk5OTk5OTk0TDczLjk5MSwyNzYuNTI5OTk5OTk5OTk5OUw2OS40NywyODAuMjk5WlwiLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6IFwiamlob21vcmF2c2t5XCIsXG4gICAgICAgICAgbmFtZTogXCJKaWhvbW9yYXZza8O9IGtyYWpcIixcbiAgICAgICAgICBwb2x5Z29uOiBcIk01NDYuNjY3LDMzNi43NzdMNTQwLjUsMzMwLjYxSDUyMkw1MTguMzMzLDMzNi42MUg1MDZMNTAyLjc1LDMzOS44Nkw1MDEuNSwzNDQuNjFMNTA2Ljc1LDM0OC4xMUw1MDUuMjUsMzUxLjExTDUwMC4yNSwzNTQuMTFMNTAzLDM2MC42MUw1MDAuNzUsMzY1LjM2TDUwMi43NSwzNzAuMzZMNTAzLjI1LDM3OS4zNkw0OTMuNSwzODMuODZMNDkxLjc1LDM4Ny44Nkw0ODcuMjUsMzkwLjg2TDQ5MSwzOTUuNjFMNDg3LDM5OC44Nkw0ODUuNzUsNDAzLjM2TDQ5MSw0MDguNjFMNDg1LjI1LDQxMi4xMUw0ODYuNzUsNDE3LjExQzQ4Ni43NSw0MTcuMTEsNDkxLjEyLDQxOS42OTcsNDkxLjI1LDQyMC4zNlM0ODkuNSw0MjMuNjEsNDg5LjUsNDIzLjYxTDQ4NS43NSw0MjQuNjFMNDgzLjUsNDMwLjExTDQ3OC43NSw0MjguODZMNDc1Ljc1LDQzMy42MUw0NzAuMjUsNDM2LjM2TDQ2NC41LDQzNC42MUw0NjAuMjUsNDM3LjExTDQ1NCw0MzIuODZMNDQ3LDQzNS44Nkw0NDQuNzUsNDQxLjExSDQzOC43NUw0MzUuNSw0NDUuNjFMNDMyLDQ0Ni42MUw0MjksNDUyLjM2TDQyMy4yNSw0NDguMTFMNDE3Ljc1LDQ1My44Nkw0MTMuMjUsNDUwLjYxTDQwOC43NSw0NTIuODZMNDA1LjUsNDU5Ljg2TDQwOS4wMyw0NjAuNDA5TDQxNi4wOTI5OTk5OTk5OTk5Niw0NjEuMjIzTDQyNC4yNDI5OTk5OTk5OTk5NCw0NjcuMjAxTDQzMi4zOTM5OTk5OTk5OTk5NSw0NjguMDE2TDQzNC4yOTQ5OTk5OTk5OTk5Niw0NjQuNzU1TDQ0Mi40NDQ5OTk5OTk5OTk5NCw0NjUuNTdMNDU0LjM5OTk5OTk5OTk5OTksNDczLjk5Mkw0NTUuNzU3OTk5OTk5OTk5OSw0NzguMzQwMDAwMDAwMDAwMDNMNDcxLjUxNDk5OTk5OTk5OTkzLDQ4Ny4wMzNMNDkwLjI2MTk5OTk5OTk5OTk0LDQ4Ni43NjJMNTA0LjY2MDk5OTk5OTk5OTk0LDQ4OS40NzlMNTEwLjA5NDk5OTk5OTk5OTk3LDQ4My4yMjk5OTk5OTk5OTk5Nkw1MTMuMDgzLDQ3NS4wOEw1MjMuMTM2LDQ3NC41MzdMNTI3LjQ4Myw0NzkuMTU1TDUzNy41MzYsNDgwLjc4NDk5OTk5OTk5OTk3TDUzOC44OTM5OTk5OTk5OTk5LDQ4Ny41NzhMNTQ0LjA1NTk5OTk5OTk5OTksNDg1Ljk0N0w1NTMuMDIxOTk5OTk5OTk5OSw0OTEuMzgyTDU2MS4xNzE5OTk5OTk5OTk5LDQ4OS4yMDhMNTY2LjYwNTk5OTk5OTk5OTksNDkyLjc0TDU2OS4zMjI5OTk5OTk5OTk5LDUwNi4zMjRMNTczLjY3MDk5OTk5OTk5OTgsNTA1Ljc4MUw1NzYuOTMwOTk5OTk5OTk5OCw0OTQuMzdMNTc5LjEwNDk5OTk5OTk5OTgsNDg2LjQ5MUw1ODguMDcwOTk5OTk5OTk5OCw0NzUuMzUxTDU5MC4yNDM5OTk5OTk5OTk4LDQ2Ny43NDM5OTk5OTk5OTk5N0w1OTMuNTA0OTk5OTk5OTk5OCw0NjYuMzg1OTk5OTk5OTk5OTdMNTk4LjM5NDk5OTk5OTk5OTgsNDYxLjQ5Nkg2MDMuNTU2OTk5OTk5OTk5OEw2MTMuNjA5OTk5OTk5OTk5OCw0NjUuODQyOTk5OTk5OTk5OTZMNjIyLjMwMzk5OTk5OTk5OTcsNDcxLjAwNDk5OTk5OTk5OTk0TDYzMC45OTY5OTk5OTk5OTk3LDQ2NS4yOTk5OTk5OTk5OTk5NUw2MzguMzMyOTk5OTk5OTk5Nyw0NzAuMTg5OTk5OTk5OTk5OTRMNjQ0Ljg1Mzk5OTk5OTk5OTcsNDY4LjU1OTk5OTk5OTk5OTk1TDY1MS42NDU5OTk5OTk5OTk3LDQ2Mi4zMTA5OTk5OTk5OTk5TDY0OS40OTk5OTk5OTk5OTk4LDQ1OS42MTA5OTk5OTk5OTk5M0w2NDUuNzQ5OTk5OTk5OTk5OCw0NTQuMTEwOTk5OTk5OTk5OTNMNjM5LjQ5OTk5OTk5OTk5OTgsNDUyLjYxMDk5OTk5OTk5OTkzTDYzOS4yNDk5OTk5OTk5OTk4LDQ0OC42MTA5OTk5OTk5OTk5M0w2MzMuNDk5OTk5OTk5OTk5OCw0NDUuMTEwOTk5OTk5OTk5OTNMNjI2Ljk5OTk5OTk5OTk5OTgsNDQ3LjYxMDk5OTk5OTk5OTkzTDYyMS40OTk5OTk5OTk5OTk4LDQ0Mi42MTA5OTk5OTk5OTk5M0w2MTYuMjQ5OTk5OTk5OTk5OCw0NDIuODYwOTk5OTk5OTk5OTNMNjE2LjQ5OTk5OTk5OTk5OTgsNDM3LjExMDk5OTk5OTk5OTkzTDYwOC4yNDk5OTk5OTk5OTk4LDQzNi4xMTA5OTk5OTk5OTk5M0w2MDEuOTk5OTk5OTk5OTk5OCw0MzIuNjEwOTk5OTk5OTk5OTNMNjAyLjc0OTk5OTk5OTk5OTgsNDI2Ljg2MDk5OTk5OTk5OTkzTDU5OS43NDk5OTk5OTk5OTk4LDQyMy42MTA5OTk5OTk5OTk5M0w1OTEuNDk5OTk5OTk5OTk5OCw0MjYuODYwOTk5OTk5OTk5OTNMNTg3Ljc0OTk5OTk5OTk5OTgsNDIyLjExMDk5OTk5OTk5OTkzTDU5Mi43NDk5OTk5OTk5OTk4LDQxNi44NjA5OTk5OTk5OTk5M0w1OTcuMjQ5OTk5OTk5OTk5OCw0MTMuODYwOTk5OTk5OTk5OTNMNTk3Ljk5OTk5OTk5OTk5OTgsNDA4Ljg2MDk5OTk5OTk5OTkzTDU5MS4yNDk5OTk5OTk5OTk4LDQwOC4xMTA5OTk5OTk5OTk5M0w1OTIuNzQ5OTk5OTk5OTk5OCw0MDIuODYwOTk5OTk5OTk5OTNMNTg5Ljc0OTk5OTk5OTk5OTgsMzk3LjYxMDk5OTk5OTk5OTkzTDU5My4zNzQ5OTk5OTk5OTk4LDM5Mi43MzU5OTk5OTk5OTk5M0w1ODkuNDk5OTk5OTk5OTk5OCwzODYuMTEwOTk5OTk5OTk5OTNWMzgyLjM2MDk5OTk5OTk5OTkzTDU4Ni4zNzQ5OTk5OTk5OTk4LDM3OS4yMzU5OTk5OTk5OTk5M0g1NzkuNUw1NzguNSwzNzMuODYwOTk5OTk5OTk5OTNWMzY4Ljg2MDk5OTk5OTk5OTkzTDU3Mi41LDM2NS4xMTA5OTk5OTk5OTk5M1YzNjAuNjEwOTk5OTk5OTk5OTNMNTY4LjYyNSwzNTYuNzM1OTk5OTk5OTk5OTNMNTY2LjI1LDM1MS42MTA5OTk5OTk5OTk5M0g1NjAuNzVMNTU3LDM1NS44NjA5OTk5OTk5OTk5M0w1NjEsMzU5Ljg2MDk5OTk5OTk5OTkzTDU2NS4xMjUsMzYzLjk4NTk5OTk5OTk5OTkzTDU2MC43NSwzNzAuMzYwOTk5OTk5OTk5OTNMNTU3Ljc1LDM3My4zNjA5OTk5OTk5OTk5M0w1NTAuMjUsMzY3Ljg2MDk5OTk5OTk5OTkzTDU1My43NSwzNjQuMzYwOTk5OTk5OTk5OTNMNTQ5LjI1LDM1OC4zNjA5OTk5OTk5OTk5M1YzNTEuODYwOTk5OTk5OTk5OTNMNTU0LjI1LDM0Ni42MTA5OTk5OTk5OTk5M0w1NDguNSwzNDQuODYwOTk5OTk5OTk5OTNMNTQzLjc1LDM0NC42MTA5OTk5OTk5OTk5M0w1NDYuNjY3LDMzNi43NzdaXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogXCJ6bGluc2t5XCIsXG4gICAgICAgICAgbmFtZTogXCJabMOtbnNrw70ga3JhalwiLFxuICAgICAgICAgIHBvbHlnb246IFwiTTczNy41LDM2NS4wNDZMNzMxLjc1LDM2Mi4zNkw3MzAuNSwzNTYuNjFMNzIzLjUsMzUyLjExTDcyMywzNDcuNjFMNzE3LjUsMzQ5Ljg2SDcxMi4yNUw3MDYuMjUsMzQ1LjYxTDY5OC4yNSwzNDMuODZMNjkwLjI1LDM0Ny4xMUw2ODUuMjUsMzQyLjg2SDY3OS41TDY3NS4zNzUsMzQ2Ljk4NUw2NzEuMjUsMzQ1LjYxTDY2NC41LDM1MC4xMVYzNTcuMTFDNjY0LjUsMzU3LjExLDY2MC4xNjQsMzYxLjczNiw2NTkuMTI1LDM2Mi40ODVTNjUzLjI1LDM1NS44Niw2NTMuMjUsMzU1Ljg2TDY0NS41LDM1OC42MUw2NDcuNzUsMzY1LjM2TDY0MSwzNjcuMzZMNjM2LDM2NS44Nkw2MzEuODc1LDM2OS45ODVMNjI5LDM3NS4xMUw2MjUuMTI1LDM3MS4yMzVMNjE4LjUsMzcxLjYxTDYxNi41LDM2Ni44Nkw2MTIuNSwzNzAuMzZMNjE0Ljc1LDM3OC4xMUw2MTEsMzgxLjg2TDYwOC43NSwzODUuMzZMNTk5LjI1LDM4Ni44Nkw1OTMuMzc1LDM5Mi43MzVMNTg5Ljc1LDM5Ny42MUw1OTIuNzUsNDAyLjg2TDU5MS4yNSw0MDguMTFMNTk4LDQwOC44Nkw1OTcuMjUsNDEzLjg2TDU5Mi43NSw0MTYuODZMNTg3Ljc1LDQyMi4xMUw1OTEuNSw0MjYuODZMNTk5Ljc1LDQyMy42MUw2MDIuNzUsNDI2Ljg2TDYwMiw0MzIuNjFMNjA4LjI1LDQzNi4xMUw2MTYuNSw0MzcuMTFMNjE2LjI1LDQ0Mi44Nkw2MjEuNSw0NDIuNjFMNjI3LDQ0Ny42MUw2MzMuNSw0NDUuMTFMNjM5LjI1LDQ0OC42MUw2MzkuNSw0NTIuNjFMNjQ1Ljc1LDQ1NC4xMUw2NDkuNSw0NTkuNjFMNjUxLjY0Niw0NjIuMzFINjU2LjUzNjk5OTk5OTk5OTlMNjYzLjYwMDk5OTk5OTk5OTksNDU3Ljk2M0w2NjguNDkwOTk5OTk5OTk5OSw0NDkuNTRMNjc4LjU0Mzk5OTk5OTk5OTksNDQ4Ljk5N0w2ODAuMzA5OTk5OTk5OTk5OCw0MzUuNTQ4TDY4NC4yNDg5OTk5OTk5OTk4LDQzMS42MDlMNjk3LjI4OTk5OTk5OTk5OTgsNDMwLjUyMkw3MDQuMDgyOTk5OTk5OTk5OSw0MjAuNzQyVjQwOS4wNkw3MDcuNjEzOTk5OTk5OTk5OCwzOTkuMDA3VjM5MS45NDRMNzEzLjA0Nzk5OTk5OTk5OTgsMzgzLjUyMkw3MjAuMzgzOTk5OTk5OTk5OCwzODEuNjJMNzI3LjE3NTk5OTk5OTk5OTgsMzc4LjA4OEw3MzMuMTUzOTk5OTk5OTk5OCwzNzUuOTE1TDczNy41LDM2NS4wNDZaXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogXCJ2eXNvY2luYVwiLFxuICAgICAgICAgIG5hbWU6IFwiS3JhaiBWeXNvxI1pbmFcIixcbiAgICAgICAgICBwb2x5Z29uOiBcIk01MDIuNzUsMzM5Ljg2TDQ5NS41LDMzMi42MUw0ODkuNjY3LDMzMi40NDMwMDAwMDAwMDAwNEw0ODIuNSwzMjMuOTQzMDAwMDAwMDAwMDRMNDY4LjUsMzIwLjc3NzAwMDAwMDAwMDA0TDQ2NiwzMTQuOTQzMDAwMDAwMDAwMDRMNDU5LjMzMywzMTUuMTFWMzExLjQ0MzAwMDAwMDAwMDA0TDQ1Mi41LDMxNS43NzcwMDAwMDAwMDAwNEM0NTIuNSwzMTUuNzc3MDAwMDAwMDAwMDQsNDUyLjcyOSwzMjEuMjU1MDAwMDAwMDAwMDUsNDUyLjUsMzIxLjQ0MzAwMDAwMDAwMDA0UzQ0NC44MzMsMzE4Ljc3NzAwMDAwMDAwMDA0LDQ0NC44MzMsMzE4Ljc3NzAwMDAwMDAwMDA0TDQ0MSwzMTYuNzc3MDAwMDAwMDAwMDRWMzExLjc3NzAwMDAwMDAwMDA0TDQzNS44MzMsMzA5LjExMDAwMDAwMDAwMDA3TDQzMS44MzMsMzA4LjI3NzAwMDAwMDAwMDA0TDQyNy42NjcwMDAwMDAwMDAwMywzMDMuOTQzMDAwMDAwMDAwMDRMNDIwLjY2NzAwMDAwMDAwMDAzLDI5OS40NDMwMDAwMDAwMDAwNEw0MTEsMjk5LjYxTDQwMiwyOTIuNjFMMzk2LDI5My4xMUwzOTIsMjk2LjM2TDM5Mi41LDMwMi4zNkwzODYuNzUsMzAyLjExTDM4NC43NSwzMDYuMzZIMzc5TDM3NS43NSwzMDkuMzZMMzcxLjc1LDMwOC4zNkwzNjguNzUsMzEwLjExTDM2OCwzMTQuMTFMMzY0LjI1LDMxNy42MUwzNjQsMzIzLjM2TDM3MS43NSwzMjcuMTFDMzcxLjc1LDMyNy4xMSwzNzIuMDMyLDMzMS43MjYsMzcyLDMzMi4zNlMzNjcuMjUsMzM1LjYxLDM2Ny4yNSwzMzUuNjFMMzYzLjUsMzMzLjg2TDM2MS4yNSwzMzcuODZMMzU2Ljc1LDMzNy4xMUwzNTAuMjUsMzM3LjM2TDM0MiwzMzYuMTFMMzM2LjUsMzQxLjYxTDMzNi4yNSwzNDYuODZMMzMzLjUsMzQ5LjYxTDMzNS4yNSwzNTYuMTFMMzM1LDM2My4xMUwzMzIsMzY2Ljg2VjM3NC42MUwzMzQuNzUsMzgwLjM2TDMzMy41LDM4NC44NkwzMzYuMjUsMzg5Ljg2TDM0MS43NSwzOTQuMzZMMzQ2LjUsMzkxLjYxTDM1Mi43NSwzOTUuMTFMMzU1LjUsNDAwLjExTDM2MSw0MDUuMTFMMzY2LDQwMi4zNkwzNzQsNDA1LjM2TDM4MS4yNSw0MDQuMTFMMzg0LjUsNDA4LjYxTDM4My41LDQxNC4xMUwzOTAsNDIwLjYxTDM5OC41LDQyMC44Nkw0MDUuNSw0MTkuMzZMNDEyLjc1LDQyNS4xMUw0MTIsNDI5LjYxTDQwNi43NSw0MzAuNjFMNDA1Ljc1LDQzNi44Nkw0MDAuMjUsNDQyLjYxTDQwNC43NSw0NDYuNjFMNDA4Ljc1LDQ1Mi44Nkw0MTMuMjUsNDUwLjYxTDQxNy43NSw0NTMuODZMNDIzLjI1LDQ0OC4xMUw0MjksNDUyLjM2TDQzMiw0NDYuNjFMNDM1LjUsNDQ1LjYxTDQzOC43NSw0NDEuMTFINDQ0Ljc1TDQ0Nyw0MzUuODZMNDU0LDQzMi44Nkw0NjAuMjUsNDM3LjExTDQ2NC41LDQzNC42MUw0NzAuMjUsNDM2LjM2TDQ3NS43NSw0MzMuNjFMNDc4Ljc1LDQyOC44Nkw0ODMuNSw0MzAuMTFMNDg1Ljc1LDQyNC42MUw0ODkuNSw0MjMuNjFMNDkxLjI1LDQyMC4zNkw0ODYuNzUsNDE3LjExTDQ4NS4yNSw0MTIuMTFMNDkxLDQwOC42MUw0ODUuNzUsNDAzLjM2TDQ4NywzOTguODZMNDkxLDM5NS42MUw0ODcuMjUsMzkwLjg2TDQ5MS43NSwzODcuODZMNDkzLjUsMzgzLjg2TDUwMy4yNSwzNzkuMzZMNTAyLjc1LDM3MC4zNkw1MDAuNzUsMzY1LjM2TDUwMywzNjAuNjFMNTAwLjI1LDM1NC4xMUw1MDUuMjUsMzUxLjExTDUwNi43NSwzNDguMTFMNTAxLjUsMzQ0LjYxTDUwMi43NSwzMzkuODZaXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogXCJzdHJlZG9jZXNreVwiLFxuICAgICAgICAgIG5hbWU6IFwiU3TFmWVkb8SNZXNrw70ga3JhalwiLFxuICAgICAgICAgIHBvbHlnb246IFwiTTQwNC4xNjcsMjczLjExTDM5Ny4zMzM5OTk5OTk5OTk5NSwyNjkuNzc3TDM5Ny4xNjcsMjY1LjExTDM5MS42NjcsMjYzLjI3N0wzODYsMjU5Ljk0NEwzODYuODMzLDI1NS4yNzcwMDAwMDAwMDAwMkwzOTAuMjQ4MDAwMDAwMDAwMDUsMjUwLjM0N0wzOTIuMzIwMDAwMDAwMDAwMDUsMjQzLjU2NkwzODQuMjIxMDAwMDAwMDAwMDYsMjM5LjIzNEwzODguMTc3MDAwMDAwMDAwMSwyMzIuMjY1MDAwMDAwMDAwMDFMMzg2LjEwNTAwMDAwMDAwMDEsMjI3Ljc0NDAwMDAwMDAwMDAzTDM4Ny4yMzUwMDAwMDAwMDAwNywyMjIuMDk0MDAwMDAwMDAwMDJMMzg1LjkxNzAwMDAwMDAwMDEsMjE2LjA2NjAwMDAwMDAwMDAzTDM4Mi45MDMwMDAwMDAwMDAxLDIxMy4wNTIwMDAwMDAwMDAwMkwzNzcuNDQxMDAwMDAwMDAwMSwyMTYuNjMxMDAwMDAwMDAwMDNMMzY4LjU4ODAwMDAwMDAwMDEsMjE1LjUwMTAwMDAwMDAwMDAzVjIxMC4yMjcwMDAwMDAwMDAwM0wzNjMuNzg1MDAwMDAwMDAwMSwyMDUuNDI0MDAwMDAwMDAwMDRMMzU3LjQ3NTAwMDAwMDAwMDEsMjA0LjIwMDAwMDAwMDAwMDA1TDM1Ni4xNTcwMDAwMDAwMDAxLDE5OS40OTEwMDAwMDAwMDAwNEwzNjAuOTYwMDAwMDAwMDAwMSwxOTQuNjg4MDAwMDAwMDAwMDVMMzU4LjA0MTAwMDAwMDAwMDEsMTg2LjY4MzAwMDAwMDAwMDA1TDM1OS43MzYwMDAwMDAwMDAxLDE4MS45NzQwMDAwMDAwMDAwNUwzNTYuOTExMDAwMDAwMDAwMSwxNzcuNDUzMDAwMDAwMDAwMDZMMzU5LjM1NzAwMDAwMDAwMDE0LDE3My42ODUwMDAwMDAwMDAwNkwzNTQuMjcyMDAwMDAwMDAwMTYsMTcxLjQyNTAwMDAwMDAwMDA3VjE2Ny42NTgwMDAwMDAwMDAwN0wzNDcuMTYxMDAwMDAwMDAwMiwxNjQuMDMyMDAwMDAwMDAwMDdMMzQzLjkxMjAwMDAwMDAwMDE1LDE2MC43ODMwMDAwMDAwMDAwN0gzMzguMzU1MDAwMDAwMDAwMTNMMzM0LjExNzAwMDAwMDAwMDEzLDE1Ni41NDUwMDAwMDAwMDAwN0wzMjkuOTczMDAwMDAwMDAwMSwxNjMuNzAyMDAwMDAwMDAwMDhMMzIzLjM4MDAwMDAwMDAwMDEsMTcxLjA0ODAwMDAwMDAwMDFMMzIxLjEyMDAwMDAwMDAwMDEsMTY4Ljc4ODAwMDAwMDAwMDFMMzE1LjQ3MDAwMDAwMDAwMDE0LDE2OS43MjkwMDAwMDAwMDAxVjE3NC40MzgwMDAwMDAwMDAxTDMwNy41NTkwMDAwMDAwMDAxNCwxODAuODQyMDAwMDAwMDAwMUwyOTguMTQxMDAwMDAwMDAwMTMsMTgzLjEwMjAwMDAwMDAwMDFMMjk1Ljg4MTAwMDAwMDAwMDE0LDE3Ni4zMjEwMDAwMDAwMDAwOEwyODQuOTUzMDAwMDAwMDAwMTUsMTc2Ljg4NjAwMDAwMDAwMDA4TDI4Mi42OTMwMDAwMDAwMDAxNSwxNzkuOTAxMDAwMDAwMDAwMDdMMjgzLjYzNTAwMDAwMDAwMDE2LDE4Ny4wNTkwMDAwMDAwMDAwNUgyNzguOTI2MDAwMDAwMDAwMTZMMjc3LjQxOTAwMDAwMDAwMDE1LDE5MS41ODAwMDAwMDAwMDAwNEgyNzIuNTIyMDAwMDAwMDAwMTZMMjc0LjIxNzAwMDAwMDAwMDE2LDIwMC4wNTYwMDAwMDAwMDAwNEwyNzAuNjM4MDAwMDAwMDAwMTUsMjAzLjYzNTAwMDAwMDAwMDA1TDI2Mi41MzkwMDAwMDAwMDAxNiwyMDIuODgyMDAwMDAwMDAwMDZMMjU4LjIwNjAwMDAwMDAwMDEzLDIwNy4yMTUwMDAwMDAwMDAwNkgyNDEuODE5MDAwMDAwMDAwMTNMMjMzLjkwODAwMDAwMDAwMDEzLDIwMy42MzYwMDAwMDAwMDAwNUwyMjcuNTA0MDAwMDAwMDAwMTMsMjA3LjAyNjAwMDAwMDAwMDA0VjIxMS41NDcwMDAwMDAwMDAwM0wyMjIuMzI0MDAwMDAwMDAwMTMsMjE2LjcyNzAwMDAwMDAwMDAzSDIxNi4zOTEwMDAwMDAwMDAxM0wyMTQuMzY2MDAwMDAwMDAwMTMsMjE4Ljc1MTAwMDAwMDAwMDAzTDIxNC41MDgwMDAwMDAwMDAxMiwyMjIuNjYwMDAwMDAwMDAwMDNMMjA4Ljg1NzAwMDAwMDAwMDEsMjE5LjI2OTAwMDAwMDAwMDAzTDIwMi42NDIwMDAwMDAwMDAxLDIyNS40ODQwMDAwMDAwMDAwNEwxOTMuOTc3MDAwMDAwMDAwMTIsMjI1LjI5NjAwMDAwMDAwMDA1TDE4NS42ODkwMDAwMDAwMDAxLDIzMC4zODIwMDAwMDAwMDAwNkwxNzguMzQzMDAwMDAwMDAwMSwyMzAuNzU4MDAwMDAwMDAwMDdMMTcyLjY5MjAwMDAwMDAwMDEsMjM2LjAzMjAwMDAwMDAwMDA3TDE3MS41NjIwMDAwMDAwMDAxLDI0Mi42MjQwMDAwMDAwMDAwOEwxNjUuMzQ2MDAwMDAwMDAwMSwyNDUuMjYxMDAwMDAwMDAwMDhMMTYxLjk1NjAwMDAwMDAwMDEsMjUwLjcyMzAwMDAwMDAwMDA3TDE2NC4yNTEwMDAwMDAwMDAxLDI1My42MDcwMDAwMDAwMDAwNkwxNjEuNTAxMDAwMDAwMDAwMSwyNTcuMTA3MDAwMDAwMDAwMUwxNjUuMDAxMDAwMDAwMDAwMSwyNjAuMzU3MDAwMDAwMDAwMUwxNjkuMDAxMDAwMDAwMDAwMSwyNTcuODU3MDAwMDAwMDAwMUwxNzUuNzUxMDAwMDAwMDAwMSwyNTguMzU3MDAwMDAwMDAwMUwxNzYuNTAxMDAwMDAwMDAwMSwyNjIuNjA3MDAwMDAwMDAwMUwxODAuNTAxMDAwMDAwMDAwMSwyNjQuODU3MDAwMDAwMDAwMUwxODUuMDAxMDAwMDAwMDAwMSwyNjcuMTA3MDAwMDAwMDAwMUwxODkuNTAxMDAwMDAwMDAwMSwyNjUuMzU3MDAwMDAwMDAwMUwxOTQuNzUxMDAwMDAwMDAwMSwyNzIuMTA3MDAwMDAwMDAwMUwxOTkuNzUxMDAwMDAwMDAwMSwyNzEuMTA3MDAwMDAwMDAwMUwyMDAuMDAxMDAwMDAwMDAwMSwyNzUuMTA3MDAwMDAwMDAwMUwyMDUuMDAxMDAwMDAwMDAwMSwyNzYuMTA3MDAwMDAwMDAwMUwyMDkuMjUxMDAwMDAwMDAwMSwyNzguODU3MDAwMDAwMDAwMUwyMDguNzUxMDAwMDAwMDAwMSwyODUuMzU3MDAwMDAwMDAwMUwyMTAuMDAxMDAwMDAwMDAwMSwyODkuMTA3MDAwMDAwMDAwMUwyMDUuMjUxMDAwMDAwMDAwMSwyOTMuODU3MDAwMDAwMDAwMUwyMDcuNTAxMDAwMDAwMDAwMSwyOTkuODU3MDAwMDAwMDAwMUwyMDUuMDAxMDAwMDAwMDAwMSwzMDQuMTA3MDAwMDAwMDAwMUwyMDcuMjUxMDAwMDAwMDAwMSwzMDguNjA3MDAwMDAwMDAwMUwyMDIuNTAxMDAwMDAwMDAwMSwzMTQuMzU3MDAwMDAwMDAwMUgxOTdMMTkxLjc1LDMxOC4xMDcwMDAwMDAwMDAxTDE5NS43NSwzMjIuMzU3MDAwMDAwMDAwMUwxOTQsMzI3LjM1NzAwMDAwMDAwMDFMMTk3LjUsMzMxLjg1NzAwMDAwMDAwMDFMMjAwLjc1LDMzNC4zNTcwMDAwMDAwMDAxTDE5OS41LDMzOC44NTcwMDAwMDAwMDAxTDE5OS4yNSwzNDQuODU3MDAwMDAwMDAwMUwyMDIuNSwzNTAuMzU3MDAwMDAwMDAwMUwyMTYuMjUsMzUwLjg1NzAwMDAwMDAwMDFMMjIwLjc1LDM1My4xMDcwMDAwMDAwMDAxTDIyNy43NSwzNDkuNjA3MDAwMDAwMDAwMUwyMzAuNSwzNDQuODU3MDAwMDAwMDAwMUgyMzUuMjVMMjM5LDM0OC44NTcwMDAwMDAwMDAxTDI1Mi41LDM0Ny4zNTcwMDAwMDAwMDAxTDI1NS41LDM0My42MDcwMDAwMDAwMDAxSDI2MS41TDI2NS41LDM0OC42MDcwMDAwMDAwMDAxTDI2OS43NSwzNDguODU3MDAwMDAwMDAwMUwyNzYsMzQ1LjEwNzAwMDAwMDAwMDFMMjgyLjUsMzQ4LjEwNzAwMDAwMDAwMDFMMjg3LDM0Ny4zNTcwMDAwMDAwMDAxTDI5NSwzNDkuMzU3MDAwMDAwMDAwMUwzMDIuMjUsMzUyLjM1NzAwMDAwMDAwMDFMMzA1Ljc1LDM0OC4zNTcwMDAwMDAwMDAxTDMxMi4yNSwzNDQuODU3MDAwMDAwMDAwMUwzMTAuNzUsMzM3LjEwNzAwMDAwMDAwMDFMMzE2LDMzMy4zNTcwMDAwMDAwMDAxTDMyMy43NSwzMzkuODU3MDAwMDAwMDAwMUwzMjgsMzM5LjM1NzAwMDAwMDAwMDFMMzMwLjI1LDM0NC44NTcwMDAwMDAwMDAxTDMzMy41LDM0OS42MDcwMDAwMDAwMDAxTDMzNi4yNSwzNDYuODU3MDAwMDAwMDAwMUwzMzYuNSwzNDEuNjA3MDAwMDAwMDAwMUwzNDIsMzM2LjEwNzAwMDAwMDAwMDFMMzUwLjI1LDMzNy4zNTcwMDAwMDAwMDAxTDM1Ni43NSwzMzcuMTA3MDAwMDAwMDAwMUwzNjEuMjUsMzM3Ljg1NzAwMDAwMDAwMDFMMzYzLjUsMzMzLjg1NzAwMDAwMDAwMDFMMzY3LjI1LDMzNS42MDcwMDAwMDAwMDAxTDM3MiwzMzIuMzU3MDAwMDAwMDAwMUwzNzEuNzUsMzI3LjEwNzAwMDAwMDAwMDFMMzY0LDMyMy4zNTcwMDAwMDAwMDAxTDM2NC4yNSwzMTcuNjA3MDAwMDAwMDAwMUwzNjgsMzE0LjEwNzAwMDAwMDAwMDFMMzY4Ljc1LDMxMC4xMDcwMDAwMDAwMDAxTDM3MS43NSwzMDguMzU3MDAwMDAwMDAwMUwzNzUuNzUsMzA5LjM1NzAwMDAwMDAwMDFMMzc5LDMwNi4zNTcwMDAwMDAwMDAxSDM4NC43NUwzODYuNzUsMzAyLjEwNzAwMDAwMDAwMDFMMzkyLjUsMzAyLjM1NzAwMDAwMDAwMDFMMzkyLDI5Ni4zNTcwMDAwMDAwMDAxTDM5NiwyOTMuMTA3MDAwMDAwMDAwMUw0MDIsMjkyLjYwNzAwMDAwMDAwMDFMNDAwLDI4NC40NDEwMDAwMDAwMDAxTDQwMy42NjcsMjgwLjc3NDAwMDAwMDAwMDFMNDA0LjE2NywyNzMuMTFaTTMxMCwyNTQuMTFMMzA1LjE2NywyNTQuNjFMMzAxLjgzMzk5OTk5OTk5OTk1LDI1Ni45NDMwMDAwMDAwMDAwNEwzMDQuMTY3LDI1OC45NDMwMDAwMDAwMDAwNEwzMDQuNjY3LDI2NC4xMUwzMDEuMTY3LDI2Ny4yNzdMMjk3LjE2NywyNjQuNjFMMjkyLDI2My45NDRMMjg5LjUsMjY2LjQ0NEwyODQuODMzLDI2Ny42MTFMMjgyLjE2NjAwMDAwMDAwMDA1LDI3MS40NDRMMjc4LjQ5OTAwMDAwMDAwMDEsMjcxLjYxMUwyNzQuOTk5MDAwMDAwMDAwMSwyNzMuMjc3OTk5OTk5OTk5OTZMMjczLjk5OTAwMDAwMDAwMDEsMjc1Ljk0NDk5OTk5OTk5OTk0TDI2OS40OTkwMDAwMDAwMDAxLDI3Ni45NDQ5OTk5OTk5OTk5NEwyNjYuMTY2MDAwMDAwMDAwMDUsMjczLjI3Nzk5OTk5OTk5OTk2TDI2Ny44MzMsMjY3Ljk0NDk5OTk5OTk5OTk0TDI2My4xNjYwMDAwMDAwMDAwNSwyNjUuNjExOTk5OTk5OTk5OUwyNjQuNDk5MDAwMDAwMDAwMSwyNjIuNjExOTk5OTk5OTk5OUwyNjAuNjY2MDAwMDAwMDAwMDUsMjYwLjExMTk5OTk5OTk5OTlMMjU3LjY2NjAwMDAwMDAwMDA1LDI1NS43Nzg5OTk5OTk5OTk5TDI1OS45OTkwMDAwMDAwMDAxLDI1Mi4yNzg5OTk5OTk5OTk5TDI1Ni4xNjYwMDAwMDAwMDAwNSwyNDcuNjExOTk5OTk5OTk5OUwyNjMuMTY2MDAwMDAwMDAwMDUsMjQ0LjExMTk5OTk5OTk5OTlMMjY1LjgzMywyNDUuNjExOTk5OTk5OTk5OUwyNzAuNSwyNDUuOTQ0OTk5OTk5OTk5OUwyNjkuMzMzLDI0MS42MTE5OTk5OTk5OTk5TDI3Mi4zMzMsMjM5Ljc3ODk5OTk5OTk5OTlMMjc2LjUsMjQwLjYxMTk5OTk5OTk5OTlMMjgxLjE2NywyMzguMTExOTk5OTk5OTk5OUwyODMuNjY3LDIzNC43Nzg5OTk5OTk5OTk5TDI4OS4xNjcsMjM0Ljk0NTk5OTk5OTk5OTlMMjkwLjUsMjM3LjI3ODk5OTk5OTk5OTlMMjkzLjY2NywyMzguMjc4OTk5OTk5OTk5OUwyOTQuNjY3LDIzOS43Nzg5OTk5OTk5OTk5TDI5OC4zMzM5OTk5OTk5OTk5NSwyMzguOTQ1OTk5OTk5OTk5OUwyOTcuMzMzOTk5OTk5OTk5OTUsMjQyLjYxMjk5OTk5OTk5OTkxTDMwMi4xNjcsMjQzLjc3OTk5OTk5OTk5OTkyTDMwNC4zMzM5OTk5OTk5OTk5NSwyNDcuMjc5OTk5OTk5OTk5OTJIMzA3LjUwMDk5OTk5OTk5OTlMMzEwLjUwMDk5OTk5OTk5OTksMjUxLjExMjk5OTk5OTk5OTkxTDMxMCwyNTQuMTFaXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogXCJwcmFoYVwiLFxuICAgICAgICAgIG5hbWU6IFwiSGxhdm7DrSBtxJtzdG8gUHJhaGFcIixcbiAgICAgICAgICBwb2x5Z29uOiBcIk0yNTYuMTY3LDI0Ny42MUwyNjMuMTY3LDI0NC4xMUwyNjUuODMzOTk5OTk5OTk5OTUsMjQ1LjYxQzI2NS44MzM5OTk5OTk5OTk5NSwyNDUuNjEsMjcwLjAwMjk5OTk5OTk5OTkzLDI0Ni40MTUwMDAwMDAwMDAwMiwyNzAuNTAwOTk5OTk5OTk5OSwyNDUuOTQzUzI2OS4zMzM5OTk5OTk5OTk5NSwyNDEuNjEsMjY5LjMzMzk5OTk5OTk5OTk1LDI0MS42MUwyNzIuMzMzOTk5OTk5OTk5OTUsMjM5Ljc3NzAwMDAwMDAwMDAyTDI3Ni41MDA5OTk5OTk5OTk5LDI0MC42MUwyODEuMTY3OTk5OTk5OTk5OSwyMzguMTFMMjgzLjY2Nzk5OTk5OTk5OTksMjM0Ljc3NzAwMDAwMDAwMDAyTDI4OS4xNjc5OTk5OTk5OTk5LDIzNC45NDQwMDAwMDAwMDAwMkwyOTAuNTAwOTk5OTk5OTk5OSwyMzcuMjc3MDAwMDAwMDAwMDJMMjkzLjY2Nzk5OTk5OTk5OTksMjM4LjI3NzAwMDAwMDAwMDAyTDI5NC42Njc5OTk5OTk5OTk5LDIzOS43NzcwMDAwMDAwMDAwMkwyOTguMzM0OTk5OTk5OTk5ODcsMjM4Ljk0NDAwMDAwMDAwMDAyTDI5Ny4zMzQ5OTk5OTk5OTk4NywyNDIuNjExMDAwMDAwMDAwMDJMMzAyLjE2Nzk5OTk5OTk5OTksMjQzLjc3ODAwMDAwMDAwMDAyTDMwNC4zMzQ5OTk5OTk5OTk4NywyNDcuMjc4MDAwMDAwMDAwMDJIMzA3LjUwMTk5OTk5OTk5OTg0TDMxMC41MDE5OTk5OTk5OTk4NCwyNTEuMTExMDAwMDAwMDAwMDJMMzEwLjAwMTk5OTk5OTk5OTg0LDI1NC4xMTEwMDAwMDAwMDAwMkwzMDUuMTY4OTk5OTk5OTk5OCwyNTQuNjExMDAwMDAwMDAwMDJMMzAxLjgzNTk5OTk5OTk5OTgsMjU2Ljk0NEwzMDQuMTY4OTk5OTk5OTk5OCwyNTguOTQ0TDMwNC42Njg5OTk5OTk5OTk4LDI2NC4xMTFMMzAxLjE2ODk5OTk5OTk5OTgsMjY3LjI3Nzk5OTk5OTk5OTk2TDI5Ny4xNjg5OTk5OTk5OTk4LDI2NC42MTFMMjkyLDI2My45NDRMMjg5LjUsMjY2LjQ0NEwyODQuODMzLDI2Ny42MTFMMjgyLjE2NjAwMDAwMDAwMDA1LDI3MS40NDRMMjc4LjQ5OTAwMDAwMDAwMDEsMjcxLjYxMUwyNzQuOTk5MDAwMDAwMDAwMSwyNzMuMjc3OTk5OTk5OTk5OTZMMjczLjk5OTAwMDAwMDAwMDEsMjc1Ljk0NDk5OTk5OTk5OTk0TDI2OS40OTkwMDAwMDAwMDAxLDI3Ni45NDQ5OTk5OTk5OTk5NEwyNjYuMTY2MDAwMDAwMDAwMDUsMjczLjI3Nzk5OTk5OTk5OTk2TDI2Ny44MzMsMjY3Ljk0NDk5OTk5OTk5OTk0TDI2My4xNjYwMDAwMDAwMDAwNSwyNjUuNjExOTk5OTk5OTk5OUwyNjQuNDk5MDAwMDAwMDAwMSwyNjIuNjExOTk5OTk5OTk5OUwyNjAuNjY2MDAwMDAwMDAwMDUsMjYwLjExMTk5OTk5OTk5OTlMMjU3LjY2NjAwMDAwMDAwMDA1LDI1NS43Nzg5OTk5OTk5OTk5TDI1OS45OTkwMDAwMDAwMDAxLDI1Mi4yNzg5OTk5OTk5OTk5TDI1Ni4xNjcsMjQ3LjYxWlwiLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6IFwidXN0ZWNreVwiLFxuICAgICAgICAgIG5hbWU6IFwiw5pzdGVja8O9IGtyYWpcIixcbiAgICAgICAgICBwb2x5Z29uOiBcIk0xMTAuMTc0LDE5MC4zNTFMMTE5LjY4MywxODUuMTg5TDExOS40MTIsMTc3Ljg1Mzk5OTk5OTk5OTk4TDEyMi42NzIwMDAwMDAwMDAwMSwxNzQuNTkzTDEzMi40NTMsMTcyLjk2M0wxNDAuNjA0LDE3NC4wNDk5OTk5OTk5OTk5OEwxNDMuODY0LDE2OC4wNzI5OTk5OTk5OTk5OFYxNjMuNzI1OTk5OTk5OTk5OTdMMTQ2LjU4MTAwMDAwMDAwMDAyLDE1OC44MzU5OTk5OTk5OTk5OEgxNDkuODQxTDE1MS40NzEsMTYzLjcyNTk5OTk5OTk5OTk3TDE1NS41NDYsMTYyLjM2Nzk5OTk5OTk5OTk3VjE1Ni4zOTA5OTk5OTk5OTk5NkwxNTguMTI4LDE1My44MDg5OTk5OTk5OTk5N0wxNTkuNjIxOTk5OTk5OTk5OTksMTQ5Ljg2OTk5OTk5OTk5OTk4SDE2My40MjQ5OTk5OTk5OTk5OEwxNjUuMDU0OTk5OTk5OTk5OTgsMTU1LjAzMTk5OTk5OTk5OTk4TDE2OS40MDIsMTU3Ljc0OUwxNzcuODIzOTk5OTk5OTk5OTgsMTUxLjc3MkwxNzguMzY3LDE0MS43MkwxODIuMzA1OTk5OTk5OTk5OTgsMTM3Ljc4MUwxODYuNzg5LDE0MC4wOUwxOTIuMjIyOTk5OTk5OTk5OTgsMTM1LjIwMDAwMDAwMDAwMDAyTDE5NS43NTUsMTM4LjczMjAwMDAwMDAwMDAzTDIwMi4yNzU5OTk5OTk5OTk5OCwxMzUuMjAwMDAwMDAwMDAwMDJMMjA5LjYxMSwxMzQuMzg1MDAwMDAwMDAwMDJMMjExLjI0MDk5OTk5OTk5OTk5LDEzOC4xODkwMDAwMDAwMDAwMkgyMTQuMjNMMjE5LjExOTk5OTk5OTk5OTk4LDEzMy4yOTkwMDAwMDAwMDAwNFYxMjUuNjkyMDAwMDAwMDAwMDRMMjI1LjM2ODk5OTk5OTk5OTk3LDEyNC42MDUwMDAwMDAwMDAwM0wyMjkuNzE1OTk5OTk5OTk5OTgsMTIwLjI1ODAwMDAwMDAwMDA0TDIzNS40MjEsMTIzLjc5MDAwMDAwMDAwMDAzTDI0NC4xMTQ5OTk5OTk5OTk5OCwxMTkuMTcxMDAwMDAwMDAwMDNMMjQ3LjY0NywxMTUuNjM5MDAwMDAwMDAwMDRMMjU0Ljk4MiwxMTYuMTgyMDAwMDAwMDAwMDRMMjU4LjUxNCwxMDkuMTE5MDAwMDAwMDAwMDRIMjYzLjQwNEwyNjUuMzA2LDExMS4yOTIwMDAwMDAwMDAwNEwyNzUuMDg3LDEwNy43NjAwMDAwMDAwMDAwNUwyNzYuMTc0LDEwMC45NjgwMDAwMDAwMDAwNUwyNjguMDIyOTk5OTk5OTk5OTcsOTguMjUxMDAwMDAwMDAwMDVWOTMuMDg5MDAwMDAwMDAwMDRMMjU5Ljg3Myw5MS40NTkwMDAwMDAwMDAwNUwyNjIuODYxLDg2LjAyNTAwMDAwMDAwMDA1TDI2NS41NzgsNzguOTYxMDAwMDAwMDAwMDRMMjczLjcyOSw4Mi43NjUwMDAwMDAwMDAwNEwyNzUuNjMxLDg0LjY2NzAwMDAwMDAwMDA0SDI4MC41MjA5OTk5OTk5OTk5NkwyODguMTI4LDgxLjk1MDAwMDAwMDAwMDA1TDI5My4wMTgsODYuODQwMDAwMDAwMDAwMDVMMjk3LjkwOSw5MS40NTkwMDAwMDAwMDAwNUwyOTguMTgsOTcuNDM2MDAwMDAwMDAwMDVMMjk0LjEwNSwxMDQuMjI4MDAwMDAwMDAwMDVMMzAzLjM0MjAwMDAwMDAwMDA0LDEwMi41OTgwMDAwMDAwMDAwNkwzMDEuNzEyMDAwMDAwMDAwMDUsMTEyLjEwNzAwMDAwMDAwMDA2VjExNi40NTQwMDAwMDAwMDAwNUwyOTUuMzEwMDAwMDAwMDAwMDYsMTE4LjY5MDAwMDAwMDAwMDA1TDI5NC4zNjgwMDAwMDAwMDAwNSwxMjYuMDM2MDAwMDAwMDAwMDZMMjg3Ljk2NDAwMDAwMDAwMDA2LDEyMy41ODcwMDAwMDAwMDAwNkwyODAuODA3MDAwMDAwMDAwMSwxMjIuNjQ1MDAwMDAwMDAwMDdMMjgyLjMxNDAwMDAwMDAwMDEsMTI4LjY3MjAwMDAwMDAwMDA1TDI3Ny41MTEwMDAwMDAwMDAxLDEzMy40NzUwMDAwMDAwMDAwNVYxMzcuMzM2MDAwMDAwMDAwMDRMMjczLjMyMDAwMDAwMDAwMDEsMTQxLjUyNzAwMDAwMDAwMDA0QzI3My4zMjAwMDAwMDAwMDAxLDE0MS41MjcwMDAwMDAwMDAwNCwyNjkuMjUwMDAwMDAwMDAwMSwxNDcuMjEzMDAwMDAwMDAwMDUsMjY5LjMxODAwMDAwMDAwMDEsMTQ4LjI2MTAwMDAwMDAwMDA1UzI3Mi43MDgwMDAwMDAwMDAxLDE1My43MjMwMDAwMDAwMDAwNCwyNzIuNzA4MDAwMDAwMDAwMSwxNTMuNzIzMDAwMDAwMDAwMDRWMTU4LjgwOTAwMDAwMDAwMDA1TDI3OS44NjcwMDAwMDAwMDAxLDE3MC42NzIwMDAwMDAwMDAwNUwyODQuOTUxMDAwMDAwMDAwMSwxNzYuODg5MDAwMDAwMDAwMDdMMjgyLjY5MTAwMDAwMDAwMDEsMTc5LjkwNDAwMDAwMDAwMDA1TDI4My42MzMwMDAwMDAwMDAxLDE4Ny4wNjIwMDAwMDAwMDAwNEgyNzguOTI0MDAwMDAwMDAwMUwyNzcuNDE3MDAwMDAwMDAwMSwxOTEuNTgzMDAwMDAwMDAwMDNIMjcyLjUyMDAwMDAwMDAwMDFMMjc0LjIxNTAwMDAwMDAwMDEsMjAwLjA1OTAwMDAwMDAwMDAzTDI3MC42MzYwMDAwMDAwMDAxLDIwMy42MzgwMDAwMDAwMDAwM0wyNjIuNTM3MDAwMDAwMDAwMSwyMDIuODg1MDAwMDAwMDAwMDVMMjU4LjIwNDAwMDAwMDAwMDA2LDIwNy4yMTgwMDAwMDAwMDAwNUgyNDEuODE3MDAwMDAwMDAwMDZMMjMzLjkwNjAwMDAwMDAwMDA2LDIwMy42MzkwMDAwMDAwMDAwNEwyMjcuNTAyMDAwMDAwMDAwMDcsMjA3LjAyOTAwMDAwMDAwMDAyVjIxMS41NUwyMjIuMzIyMDAwMDAwMDAwMDYsMjE2LjczMDAwMDAwMDAwMDAySDIxNi4zODkwMDAwMDAwMDAwN0wyMTQuMzY0MDAwMDAwMDAwMDYsMjE4Ljc1NDAwMDAwMDAwMDAyTDIxNC41MDYwMDAwMDAwMDAwNiwyMjIuNjYzTDIwOC44NTUwMDAwMDAwMDAwNSwyMTkuMjcyMDAwMDAwMDAwMDJMMjAyLjY0MDAwMDAwMDAwMDA0LDIyNS40ODcwMDAwMDAwMDAwMkwxOTMuOTc1MDAwMDAwMDAwMDUsMjI1LjI5OTAwMDAwMDAwMDA0TDE4NS42ODcwMDAwMDAwMDAwNCwyMzAuMzg1MDAwMDAwMDAwMDVMMTc4LjM0MTAwMDAwMDAwMDA0LDIzMC43NjEwMDAwMDAwMDAwNUwxNzIuNjkwMDAwMDAwMDAwMDMsMjM2LjAzNTAwMDAwMDAwMDA1TDE3MS41NjAwMDAwMDAwMDAwMywyNDIuNjI3MDAwMDAwMDAwMDdMMTY1LjM0NDAwMDAwMDAwMDAyLDI0NS4yNjQwMDAwMDAwMDAwN0wxNjEuOTU0MDAwMDAwMDAwMDQsMjUwLjcyNjAwMDAwMDAwMDA2TDE1NS4xNzMwMDAwMDAwMDAwMywyNDYuNzcwMDAwMDAwMDAwMDdMMTUxLjAyNjAwMDAwMDAwMDA0LDI0Ni43NzEwMDAwMDAwMDAwN0wxNDQuMDU3MDAwMDAwMDAwMDQsMjM5LjgwMTAwMDAwMDAwMDA3TDE0OC43NjYwMDAwMDAwMDAwNSwyMzUuMDkzMDAwMDAwMDAwMDdMMTQ0LjA1ODAwMDAwMDAwMDA1LDIyOC42ODkwMDAwMDAwMDAwOEwxNDUuNzUzMDAwMDAwMDAwMDQsMjI1LjExMDAwMDAwMDAwMDA3TDE0MS42MDkwMDAwMDAwMDAwNCwyMjAuOTY2MDAwMDAwMDAwMDdMMTQzLjMwNDAwMDAwMDAwMDAzLDIxNC43NTEwMDAwMDAwMDAwNkwxNDAuNzYxMDAwMDAwMDAwMDIsMjA5Ljk0ODAwMDAwMDAwMDA2TDE0NS4zNzYwMDAwMDAwMDAwMywyMDUuMzMzMDAwMDAwMDAwMDZMMTQwLjY2NzAwMDAwMDAwMDAzLDIwMC42MjQwMDAwMDAwMDAwNUwxMjkuOTMxMDAwMDAwMDAwMDQsMjAxLjc1NDAwMDAwMDAwMDA1VjE5Ny4wNDUwMDAwMDAwMDAwNEwxMjUuMDM0MDAwMDAwMDAwMDMsMTk1LjE5NTAwMDAwMDAwMDA1SDExNS4wMTcwMDAwMDAwMDAwNEwxMTAuMTc0LDE5MC4zNTFaXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogXCJwYXJkdWJpY2t5XCIsXG4gICAgICAgICAgbmFtZTogXCJQYXJkdWJpY2vDvSBrcmFqXCIsXG4gICAgICAgICAgcG9seWdvbjogXCJNNTU1Ljc0MiwyMjYuNzU3TDU1NCwyMzQuOTQ0TDU0OS4zMzMsMjQzLjk0NEw1NDcuODMzLDI1Mi42MTFMNTUwLjMzMywyNTYuNzc3OTk5OTk5OTk5OTZMNTQwLjMzMywyNjQuOTQ0OTk5OTk5OTk5OTRWMjcwLjYxMTk5OTk5OTk5OTlMNTQyLjgzMywyNzYuNDQ0OTk5OTk5OTk5OTRMNTQzLjgzMywyODMuNzc4OTk5OTk5OTk5OTRMNTQ2LjI1LDI4Ni4xOTU5OTk5OTk5OTk5TDU0MC42NjcsMjg5Ljk0NDk5OTk5OTk5OTk0TDU0NC44MzMwMDAwMDAwMDAxLDI5OC4xMTE5OTk5OTk5OTk5TDU0OS4zMzMwMDAwMDAwMDAxLDMwNi45NDQ5OTk5OTk5OTk5NFYzMTEuNDQ0OTk5OTk5OTk5OTRMNTU1LjAwMDAwMDAwMDAwMDEsMzEzLjk0NDk5OTk5OTk5OTk0VjMyMS40NDQ5OTk5OTk5OTk5NEw1NDkuODMzMDAwMDAwMDAwMSwzMjYuNjExOTk5OTk5OTk5OVYzMzIuMjc4OTk5OTk5OTk5OUw1NDYuNjY3LDMzNi43Nzg5OTk5OTk5OTk5TDU0MC41LDMzMC42MTE5OTk5OTk5OTk5SDUyMkw1MTguMzMzLDMzNi42MTE5OTk5OTk5OTk5SDUwNkw1MDIuNzUsMzM5Ljg2MTk5OTk5OTk5OTlMNDk1LjUsMzMyLjYxMTk5OTk5OTk5OTlMNDg5LjY2NywzMzIuNDQ0OTk5OTk5OTk5OTRMNDgyLjUsMzIzLjk0NDk5OTk5OTk5OTk0TDQ2OC41LDMyMC43Nzg5OTk5OTk5OTk5NEw0NjYsMzE0Ljk0NDk5OTk5OTk5OTk0TDQ1OS4zMzMsMzE1LjExMTk5OTk5OTk5OTlWMzExLjQ0NDk5OTk5OTk5OTk0TDQ1Mi41LDMxNS43Nzg5OTk5OTk5OTk5NFYzMjEuNDQ0OTk5OTk5OTk5OTRMNDQ0LjgzMywzMTguNzc4OTk5OTk5OTk5OTRMNDQxLDMxNi43Nzg5OTk5OTk5OTk5NFYzMTEuNzc4OTk5OTk5OTk5OTRMNDM1LjgzMywzMDkuMTExOTk5OTk5OTk5OTdMNDMxLjgzMywzMDguMjc4OTk5OTk5OTk5OTRMNDI3LjY2NzAwMDAwMDAwMDAzLDMwMy45NDQ5OTk5OTk5OTk5NEw0MjAuNjY3MDAwMDAwMDAwMDMsMjk5LjQ0NDk5OTk5OTk5OTk0TDQxMSwyOTkuNjFMNDAyLDI5Mi42MUw0MDAsMjg0LjQ0NEw0MDMuNjY3LDI4MC43NzcwMDAwMDAwMDAwNEw0MDQuMTY3LDI3My4xMTAwMDAwMDAwMDAwN0wzOTcuMzMzOTk5OTk5OTk5OTUsMjY5Ljc3NzAwMDAwMDAwMDA0TDM5Ny4xNjcsMjY1LjExMDAwMDAwMDAwMDA3TDM5MS42NjcsMjYzLjI3NzAwMDAwMDAwMDA0TDM4NiwyNTkuOTQ0TDM4Ni44MzMsMjU1LjI3NzAwMDAwMDAwMDAyTDM5MC4yNDgwMDAwMDAwMDAwNSwyNTAuMzQ3TDM5OC45NTkwMDAwMDAwMDAwNiwyNDguNDAzMDAwMDAwMDAwMDJMNDA4Ljg5NTAwMDAwMDAwMDA0LDIzOS43OTkwMDAwMDAwMDAwNEw0MTQuMTY5MDAwMDAwMDAwMDQsMjQyLjgxMzAwMDAwMDAwMDA1QzQxNC4xNjkwMDAwMDAwMDAwNCwyNDIuODEzMDAwMDAwMDAwMDUsNDIzLjI5ODAwMDAwMDAwMDA2LDI0My4xNDMwMDAwMDAwMDAwNiw0MjMuNzc0MDAwMDAwMDAwMDYsMjQyLjgxMzAwMDAwMDAwMDA1UzQyOC44NjAwMDAwMDAwMDAwNywyMzUuODQ0MDAwMDAwMDAwMDUsNDI4Ljg2MDAwMDAwMDAwMDA3LDIzNS44NDQwMDAwMDAwMDAwNUg0MzMuNzU3MDAwMDAwMDAwMDZWMjQxLjQ5NTAwMDAwMDAwMDA2TDQzNy4yNDEwMDAwMDAwMDAwNCwyNDIuNzIwMDAwMDAwMDAwMDZMNDQwLjUzNzAwMDAwMDAwMDAzLDIzOS40MjQwMDAwMDAwMDAwNkw0NDYuOTQxMDAwMDAwMDAwMDMsMjM2LjIyMjAwMDAwMDAwMDA3TDQ1NC42NjQwMDAwMDAwMDAwNCwyMzYuNDEwMDAwMDAwMDAwMDVMNDU4LjA1NTAwMDAwMDAwMDA2LDIzOS44MDAwMDAwMDAwMDAwNFYyNDYuMzkzMDAwMDAwMDAwMDNINDYyLjU3NjAwMDAwMDAwMDFMNDY2LjcyMDAwMDAwMDAwMDEsMjUwLjUzNzAwMDAwMDAwMDAzTDQ3My45NzIwMDAwMDAwMDAxLDI1NC43NzUwMDAwMDAwMDAwM0w0NzguMjEwMDAwMDAwMDAwMSwyNTkuMDEzMDAwMDAwMDAwMDNMNDg0LjgwMjAwMDAwMDAwMDEsMjU3LjEzMDAwMDAwMDAwMDA1SDQ5NC4yMjAwMDAwMDAwMDAxTDQ5NS45MTUwMDAwMDAwMDAxLDI0OS45NzMwMDAwMDAwMDAwNEw1MDEuMTg5MDAwMDAwMDAwMSwyNDQuNjk5MDAwMDAwMDAwMDRMNTExLjE3MTAwMDAwMDAwMDA1LDI0MS44NzQwMDAwMDAwMDAwNVYyMzYuNDEyMDAwMDAwMDAwMDZINTE1LjEyNjAwMDAwMDAwMDFMNTIzLjUyMTAwMDAwMDAwMDEsMjQwLjE3MTAwMDAwMDAwMDA1TDUzNS45MDgwMDAwMDAwMDAxLDI0Ny4xMzYwMDAwMDAwMDAwNUw1NDIuOTcxMDAwMDAwMDAwMSwyNDAuMDczMDAwMDAwMDAwMDZMNTQ2LjYzOTAwMDAwMDAwMDEsMjM2LjQwNTAwMDAwMDAwMDA2TDU0Ni41MDMwMDAwMDAwMDAyLDIzMC4wMjAwMDAwMDAwMDAwN0w1NTUuNzQyLDIyNi43NTdaXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogXCJrcmFsb3ZlaHJhZGVja3lcIixcbiAgICAgICAgICBuYW1lOiBcIktyw6Fsb3bDqWhyYWRlY2vDvSBrcmFqXCIsXG4gICAgICAgICAgcG9seWdvbjogXCJNNDAxLjE1MSwxMjcuODYzTDQwOS4zMDIsMTI4LjQwNkw0MTguMjY3LDEzMi40ODFMNDIwLjk4NCwxMzUuMTk4TDQyNy4yMzMsMTM2LjI4NUw0MzQuMDI1LDEzMi40ODFMNDM2Ljc0MTk5OTk5OTk5OTk2LDEzOC40NThMNDQwLjU0NTk5OTk5OTk5OTk0LDE0Ni44OEg0NDUuNDM2OTk5OTk5OTk5OTVMNDUyLjQ5OTk5OTk5OTk5OTk0LDE0NC4xNjI5OTk5OTk5OTk5OEw0NTYuODQ3OTk5OTk5OTk5OTYsMTUyLjMxM0w0NTYuMzA0LDE1Ny40NzVMNDYzLjA5NywxNTIuNTg1TDQ2Ny43MTUsMTQ3Ljk2Nkw0NzUuODY0OTk5OTk5OTk5OTUsMTUzLjY3MTAwMDAwMDAwMDAyTDQ3OS45NDEsMTUzLjk0M0w0ODEuMjk5LDE0Ny45NjZINDkyLjQzOEw1MDYuMjk0LDE2MS41NUw1MDEuNjc0OTk5OTk5OTk5OTUsMTY1LjYyNkw1MDAuNTg3OTk5OTk5OTk5OTcsMTczLjUwNUw0OTEuODk1LDE3Ni43NjVMNDc5LjM5NywxODYuNTQ2TDQ4MC40ODQsMTkxLjk4TDQ4Ny41NDY5OTk5OTk5OTk5NywyMDAuMTNMNDkzLjUyNSwxOTcuMTQyTDQ5Ni45MjEsMjAwLjUzNzk5OTk5OTk5OTk4VjIwNC43NDlMNTAwLjc5MiwyMDguNjIwOTk5OTk5OTk5OThMNTA1Ljc1LDIwOC4wMUw1MTEuNDU2LDIxOC4wNjNMNTE5LjMzNSwyMjQuMzExOTk5OTk5OTk5OThMNTIwLjY5MywyMzQuMzY0OTk5OTk5OTk5OThMNTIzLjUyMSwyNDAuMTY4OTk5OTk5OTk5OThMNTE1LjEyNiwyMzYuNDFINTExLjE3MVYyNDEuODcxOTk5OTk5OTk5OTlMNTAxLjE4ODk5OTk5OTk5OTk2LDI0NC42OTY5OTk5OTk5OTk5N0w0OTUuOTE0OTk5OTk5OTk5OTYsMjQ5Ljk3MDk5OTk5OTk5OTk4TDQ5NC4yMTk5OTk5OTk5OTk5NywyNTcuMTI4SDQ4NC44MDE5OTk5OTk5OTk5Nkw0NzguMjEsMjU5LjAxMDk5OTk5OTk5OTk3TDQ3My45NzIsMjU0Ljc3Mjk5OTk5OTk5OTk3TDQ2Ni43MTk5OTk5OTk5OTk5NywyNTAuNTM0OTk5OTk5OTk5OTdMNDYyLjU3NTk5OTk5OTk5OTk2LDI0Ni4zOTA5OTk5OTk5OTk5Nkg0NTguMDU0OTk5OTk5OTk5OTVWMjM5LjhMNDU0LjY2Mzk5OTk5OTk5OTkzLDIzNi40MTAwMDAwMDAwMDAwM0w0NDYuOTQwOTk5OTk5OTk5OSwyMzYuMjIyMDAwMDAwMDAwMDRMNDQwLjUzNjk5OTk5OTk5OTksMjM5LjQyNDAwMDAwMDAwMDA0TDQzNy4yNDA5OTk5OTk5OTk5MywyNDIuNzIwMDAwMDAwMDAwMDNDNDM3LjI0MDk5OTk5OTk5OTkzLDI0Mi43MjAwMDAwMDAwMDAwMyw0MzQuMDkyOTk5OTk5OTk5OSwyNDEuNjIxMDAwMDAwMDAwMDQsNDMzLjc1Njk5OTk5OTk5OTk1LDI0MS40OTUwMDAwMDAwMDAwM1M0MzMuNzU2OTk5OTk5OTk5OTUsMjM1Ljg0NDAwMDAwMDAwMDAyLDQzMy43NTY5OTk5OTk5OTk5NSwyMzUuODQ0MDAwMDAwMDAwMDJINDI4Ljg1OTk5OTk5OTk5OTk2TDQyMy43NzM5OTk5OTk5OTk5NCwyNDIuODEzMDAwMDAwMDAwMDJINDE0LjE2ODk5OTk5OTk5OTlMNDA4Ljg5NDk5OTk5OTk5OTksMjM5Ljc5OUwzOTguOTU4OTk5OTk5OTk5OTUsMjQ4LjQwMzAwMDAwMDAwMDAyTDM5MC4yNDc5OTk5OTk5OTk5MywyNTAuMzQ3TDM5Mi4zMTk5OTk5OTk5OTk5NCwyNDMuNTY2TDM4NC4yMjA5OTk5OTk5OTk5NSwyMzkuMjM0TDM4OC4xNzY5OTk5OTk5OTk5NiwyMzIuMjY1MDAwMDAwMDAwMDFMMzg2LjEwNDk5OTk5OTk5OTk2LDIyNy43NDQwMDAwMDAwMDAwM0wzODcuMjM0OTk5OTk5OTk5OTYsMjIyLjA5NDAwMDAwMDAwMDAyTDM4NS45MTcsMjE2LjA2NjAwMDAwMDAwMDAzTDM4Mi45MDI5OTk5OTk5OTk5NiwyMTMuMDUyMDAwMDAwMDAwMDJMMzc3LjQ0MSwyMTYuNjMxMDAwMDAwMDAwMDNMMzY4LjU4Nzk5OTk5OTk5OTk3LDIxNS41MDEwMDAwMDAwMDAwM1YyMTAuMjI3MDAwMDAwMDAwMDNMMzYzLjc4NDk5OTk5OTk5OTk3LDIwNS40MjQwMDAwMDAwMDAwNEwzNTcuNDc0OTk5OTk5OTk5OTcsMjA0LjIwMDAwMDAwMDAwMDA1TDM1Ni4xNTcsMTk5LjQ5MTAwMDAwMDAwMDA0TDM2MC45NiwxOTQuNjg4MDAwMDAwMDAwMDVMMzU4LjA0MSwxODYuNjgzMDAwMDAwMDAwMDVMMzU5LjczNiwxODEuOTc0MDAwMDAwMDAwMDVMMzU2LjkxMSwxNzcuNDUzMDAwMDAwMDAwMDZMMzU5LjM1NywxNzMuNjg1MDAwMDAwMDAwMDZMMzY3LjI2ODAwMDAwMDAwMDAzLDE3OC43NzEwMDAwMDAwMDAwN0wzNzQuNDI1LDE3NC4wNjIwMDAwMDAwMDAwN0wzODUuMzUsMTc3LjgyOTAwMDAwMDAwMDA2TDM4OC41NTIsMTgyLjcyNjAwMDAwMDAwMDA2TDM5My40NDksMTc5LjkwMTAwMDAwMDAwMDA3VjE3NC44MTYwMDAwMDAwMDAwNkwzOTkuMjg4LDE3MS4wNDkwMDAwMDAwMDAwNkw0MDMuODA5LDE3NS41NzAwMDAwMDAwMDAwNUM0MDMuODA5LDE3NS41NzAwMDAwMDAwMDAwNSw0MTMuMzE3LDE3My42MDUwMDAwMDAwMDAwNSw0MTMuNDE1LDE3My40OTgwMDAwMDAwMDAwNVM0MTMuNDE1LDE2OS45MTkwMDAwMDAwMDAwNCw0MTMuNDE1LDE2OS45MTkwMDAwMDAwMDAwNEw0MDcuNzY0LDE2NC4yNjgwMDAwMDAwMDAwM0w0MTAuNzc4LDE1OC4yNDEwMDAwMDAwMDAwNEw0MDcuMDExLDE1NC40NzQwMDAwMDAwMDAwNUw0MDguNTE3LDE1MC4zMzAwMDAwMDAwMDAwNEw0MDUuMzE2LDE0Mi42MDcwMDAwMDAwMDAwM0w0MDcuMTk4OTk5OTk5OTk5OTYsMTM0LjY5NjAwMDAwMDAwMDAzTDQwMS4xNTEsMTI3Ljg2M1pcIixcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiBcImxpYmVyZWNreVwiLFxuICAgICAgICAgIG5hbWU6IFwiTGliZXJlY2vDvSBrcmFqXCIsXG4gICAgICAgICAgcG9seWdvbjogXCJNNDAxLjE1MSwxMjcuODYzTDQwNy4xOTcsMTM0LjY5N0w0MDUuMzE0LDE0Mi42MDhMNDA4LjUxNTAwMDAwMDAwMDA0LDE1MC4zMzEwMDAwMDAwMDAwMkw0MDcuMDA5MDAwMDAwMDAwMDcsMTU0LjQ3NTAwMDAwMDAwMDAyTDQxMC43NzYwMDAwMDAwMDAwNywxNTguMjQyMDAwMDAwMDAwMDJMNDA3Ljc2MjAwMDAwMDAwMDA2LDE2NC4yNjlMNDEzLjQxMzAwMDAwMDAwMDA3LDE2OS45MjAwMDAwMDAwMDAwMlYxNzMuNDk5MDAwMDAwMDAwMDJMNDAzLjgwNzAwMDAwMDAwMDEsMTc1LjU3MTAwMDAwMDAwMDAzTDM5OS4yODYwMDAwMDAwMDAwNiwxNzEuMDUwMDAwMDAwMDAwMDRMMzkzLjQ0NzAwMDAwMDAwMDA2LDE3NC44MTcwMDAwMDAwMDAwNFYxNzkuOTAyMDAwMDAwMDAwMDRMMzg4LjU1MDAwMDAwMDAwMDA3LDE4Mi43MjcwMDAwMDAwMDAwM0wzODUuMzQ4MDAwMDAwMDAwMDcsMTc3LjgzMDAwMDAwMDAwMDA0TDM3NC40MjMwMDAwMDAwMDAwNiwxNzQuMDYzMDAwMDAwMDAwMDVMMzY3LjI2NjAwMDAwMDAwMDEsMTc4Ljc3MjAwMDAwMDAwMDA1TDM1OS4zNTUwMDAwMDAwMDAxLDE3My42ODYwMDAwMDAwMDAwNEwzNTQuMjcwMDAwMDAwMDAwMSwxNzEuNDI2MDAwMDAwMDAwMDRWMTY3LjY1OTAwMDAwMDAwMDA1TDM0Ny4xNTkwMDAwMDAwMDAxLDE2NC4wMzMwMDAwMDAwMDAwNEwzNDMuOTEwMDAwMDAwMDAwMSwxNjAuNzg0MDAwMDAwMDAwMDVIMzM4LjM1MzAwMDAwMDAwMDA3TDMzNC4xMTUwMDAwMDAwMDAwNywxNTYuNTQ2MDAwMDAwMDAwMDVMMzI5Ljk3MTAwMDAwMDAwMDA2LDE2My43MDMwMDAwMDAwMDAwNkwzMjMuMzc4MDAwMDAwMDAwMDQsMTcxLjA0OTAwMDAwMDAwMDA2TDMyMS4xMTgwMDAwMDAwMDAwNSwxNjguNzg5MDAwMDAwMDAwMDdMMzE1LjQ2ODAwMDAwMDAwMDEsMTY5LjczMDAwMDAwMDAwMDA4VjE3NC40MzkwMDAwMDAwMDAwOEwzMDcuNTU3MDAwMDAwMDAwMSwxODAuODQzMDAwMDAwMDAwMDdMMjk4LjEzOTAwMDAwMDAwMDA3LDE4My4xMDMwMDAwMDAwMDAwN0wyOTUuODc5MDAwMDAwMDAwMSwxNzYuMzIyMDAwMDAwMDAwMDZMMjg0Ljk1MTAwMDAwMDAwMDEsMTc2Ljg4NzAwMDAwMDAwMDA2TDI3OS44NjcwMDAwMDAwMDAxLDE3MC42NzAwMDAwMDAwMDAwNEwyNzIuNzA4MDAwMDAwMDAwMSwxNTguODA3MDAwMDAwMDAwMDRWMTUzLjcyMTAwMDAwMDAwMDAzTDI2OS4zMTgwMDAwMDAwMDAxLDE0OC4yNTkwMDAwMDAwMDAwNEwyNzMuMzIwMDAwMDAwMDAwMSwxNDEuNTI1MDAwMDAwMDAwMDNMMjc3LjUxMTAwMDAwMDAwMDEsMTM3LjMzNDAwMDAwMDAwMDAzVjEzMy40NzMwMDAwMDAwMDAwNEwyODIuMzE0MDAwMDAwMDAwMSwxMjguNjcwMDAwMDAwMDAwMDRMMjgwLjgwNzAwMDAwMDAwMDEsMTIyLjY0MzAwMDAwMDAwMDA0TDI4Ny45NjQwMDAwMDAwMDAwNiwxMjMuNTg1MDAwMDAwMDAwMDRMMjk0LjM2ODAwMDAwMDAwMDA1LDEyNi4wMzQwMDAwMDAwMDAwM0wyOTUuMzEwMDAwMDAwMDAwMDYsMTE4LjY4ODAwMDAwMDAwMDAzTDMwMS43MTIwMDAwMDAwMDAwNSwxMTYuNDUyMDAwMDAwMDAwMDNMMzE4LjU1NywxMjEuNjE0MDAwMDAwMDAwMDNMMzIzLjk5MTAwMDAwMDAwMDA0LDExMy43MzUwMDAwMDAwMDAwM0wzMzQuMDQzMDAwMDAwMDAwMDYsMTEzLjE5MjAwMDAwMDAwMDAyQzMzNC4wNDMwMDAwMDAwMDAwNiwxMTMuMTkyMDAwMDAwMDAwMDIsMzQwLjY1NzAwMDAwMDAwMDA0LDExNC40MjAwMDAwMDAwMDAwMiwzNDEuMTA3MDAwMDAwMDAwMSwxMTQuMDA3MDAwMDAwMDAwMDJTMzQyLjczNzAwMDAwMDAwMDEsMTA0LjQ5ODAwMDAwMDAwMDAyLDM0Mi43MzcwMDAwMDAwMDAxLDEwNC40OTgwMDAwMDAwMDAwMkwzNDQuOTEwMDAwMDAwMDAwMSw5NS44MDQwMDAwMDAwMDAwMkwzNDAuMjkxMDAwMDAwMDAwMDUsOTEuMTg1MDAwMDAwMDAwMDJMMzQ0LjYzODAwMDAwMDAwMDAzLDg2LjgzODAwMDAwMDAwMDAySDM1MS45NzNMMzU1Ljc3Nyw5MC4zNzAwMDAwMDAwMDAwMkwzNjEuNzUzOTk5OTk5OTk5OTYsODcuMTEwMDAwMDAwMDAwMDFMMzY1LjAxMzk5OTk5OTk5OTk1LDkyLjgxNjAwMDAwMDAwMDAyTDM2OS45MDM5OTk5OTk5OTk5NCw5MC42NDMwMDAwMDAwMDAwMUwzNzUuMzM3OTk5OTk5OTk5OTcsOTcuMTY0MDAwMDAwMDAwMDJMMzcyLjg5MywxMDIuNTk4MDAwMDAwMDAwMDFMMzc1LjYwOTk5OTk5OTk5OTk2LDExMS4wMjAwMDAwMDAwMDAwMUwzODAuMzY0LDExNS43NzQwMDAwMDAwMDAwMkwzODQuODQ3LDEyMC4yNTcwMDAwMDAwMDAwMkwzODUuMzksMTI4LjEzNjAwMDAwMDAwMDAyTDM4Ny4xNTYsMTI5LjkwMjAwMDAwMDAwMDAyTDM5My4yNjksMTI0LjMzMjAwMDAwMDAwMDAyTDQwMS4xNTEsMTI3Ljg2M1pcIixcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiBcIm9sb21vdWNreVwiLFxuICAgICAgICAgIG5hbWU6IFwiT2xvbW91Y2vDvSBrcmFqXCIsXG4gICAgICAgICAgcG9seWdvbjogXCJNNjE3LjY4NywyMTQuMjU5VjIyNC42MDk5OTk5OTk5OTk5OUg2MTIuNzVMNjA4LjI1LDIyOS4xMDk5OTk5OTk5OTk5OUw1OTguMjUsMjM1LjYwOTk5OTk5OTk5OTk5VjI0Mi42MDk5OTk5OTk5OTk5OUw1OTQuNzUsMjQ2LjEwOTk5OTk5OTk5OTk5TDU5Ny41LDI1MS4xMDk5OTk5OTk5OTk5OUw1OTEuNSwyNTkuNjFMNTg5Ljc1LDI2Ny4zNkw1OTMuODc1LDI3MS40ODVMNTkwLDI3Ny44Nkw1ODguNzUsMjg1LjM2TDU5Mi4zNzUsMjg4Ljk4NUg1OTdWMjk0LjM2SDYwMy4yNUw2MDcuMjUsMjk4LjM2TDYxNC41LDI5Ni4zNkw2MjAuNSwzMDUuMTFINjI1LjVMNjI5Ljc1LDMwNy4zNkw2MzQuNzUsMzAzLjg2TDYzOSwzMDguMTFMNjQ0LjUsMzA1LjExTDY1MiwzMDkuMTFMNjUwLjI1LDMxNy42MUg2NThMNjYwLjc1LDMyNS4xMUw2NjYuNzUsMzI3LjExTDY3MS44NzUsMzMyLjIzNUw2NzEuMjUsMzM3LjM2SDY3Ni43NUw2NzkuNSwzNDIuODZMNjc1LjM3NSwzNDYuOTg1TDY3MS4yNSwzNDUuNjFMNjY0LjUsMzUwLjExVjM1Ny4xMUw2NTkuMTI1LDM2Mi40ODVMNjUzLjI1LDM1NS44Nkw2NDUuNSwzNTguNjFMNjQ3Ljc1LDM2NS4zNkw2NDEsMzY3LjM2TDYzNiwzNjUuODZMNjMxLjg3NSwzNjkuOTg1TDYyOSwzNzUuMTFMNjI1LjEyNSwzNzEuMjM1TDYxOC41LDM3MS42MUw2MTYuNSwzNjYuODZMNjEyLjUsMzcwLjM2TDYxNC43NSwzNzguMTFMNjExLDM4MS44Nkw2MDguNzUsMzg1LjM2TDU5OS4yNSwzODYuODZMNTkzLjM3NSwzOTIuNzM1TDU4OS41LDM4Ni4xMVYzODIuMzZMNTg2LjM3NSwzNzkuMjM1SDU3OS41TDU3OC41LDM3My44NlYzNjguODZMNTcyLjUsMzY1LjExVjM2MC42MUw1NjguNjI1LDM1Ni43MzVMNTY2LjI1LDM1MS42MUg1NjAuNzVMNTU3LDM1NS44Nkw1NjEsMzU5Ljg2TDU2NS4xMjUsMzYzLjk4NUw1NjAuNzUsMzcwLjM2TDU1Ny43NSwzNzMuMzZMNTUwLjI1LDM2Ny44Nkw1NTMuNzUsMzY0LjM2TDU0OS4yNSwzNTguMzZWMzUxLjg2TDU1NC4yNSwzNDYuNjFMNTQ4LjUsMzQ0Ljg2TDU0My43NSwzNDQuNjFMNTQ2LjY2NywzMzYuNzc3TDU0OS44MzMwMDAwMDAwMDAxLDMzMi4yNzdWMzI2LjYxTDU1NS4wMDAwMDAwMDAwMDAxLDMyMS40NDMwMDAwMDAwMDAwNFYzMTMuOTQzMDAwMDAwMDAwMDRMNTQ5LjMzMzAwMDAwMDAwMDEsMzExLjQ0MzAwMDAwMDAwMDA0VjMwNi45NDMwMDAwMDAwMDAwNEw1NDQuODMzMDAwMDAwMDAwMSwyOTguMTFMNTQwLjY2NywyODkuOTQzMDAwMDAwMDAwMDRMNTQ2LjI1LDI4Ni4xOTRMNTQzLjgzMywyODMuNzc3MDAwMDAwMDAwMDRMNTQyLjgzMywyNzYuNDQzMDAwMDAwMDAwMDRMNTQwLjMzMywyNzAuNjFWMjY0Ljk0MzAwMDAwMDAwMDA0QzU0MC4zMzMsMjY0Ljk0MzAwMDAwMDAwMDA0LDU1MC4yMjEsMjU3LjAzMjAwMDAwMDAwMDA0LDU1MC4zMzMsMjU2Ljc3NjAwMDAwMDAwMDA3UzU0Ny44MzMsMjUyLjYwOTAwMDAwMDAwMDA3LDU0Ny44MzMsMjUyLjYwOTAwMDAwMDAwMDA3TDU0OS4zMzMsMjQzLjk0MjAwMDAwMDAwMDA2TDU1NCwyMzQuOTQyMDAwMDAwMDAwMDZMNTU1Ljc0MiwyMjYuNzU1MDAwMDAwMDAwMDVMNTY0LjQzNSwyMjIuNjc5MDAwMDAwMDAwMDZINTcxLjIyOEw1NzEuNDk4OTk5OTk5OTk5OSwyMTQuMjU3MDAwMDAwMDAwMDZMNTY3LjAxNiwyMDkuNzc0MDAwMDAwMDAwMDZMNTYyLjUzNCwyMDguMDA4MDAwMDAwMDAwMDdMNTU5LjI3MywxOTYuMzI1MDAwMDAwMDAwMDdMNTUyLjIxLDE5Mi41MjEwMDAwMDAwMDAwN0w1NTYuMDE0LDE4NS4xODYwMDAwMDAwMDAwNkw1NjQuNDM2LDE4Ny4zNTkwMDAwMDAwMDAwN0w1NzAuNjg1MDAwMDAwMDAwMSwxODguNzE3MDAwMDAwMDAwMDdMNTgxLjAwOSwxOTEuNzA2MDAwMDAwMDAwMDdMNTg1LjIyLDE5NS45MTcwMDAwMDAwMDAxTDU5Mi40MjAwMDAwMDAwMDAxLDE5My42MDcwMDAwMDAwMDAwOEw1OTMuNTA3MDAwMDAwMDAwMSwyMDAuNjcxMDAwMDAwMDAwMDhMNTk5LjIxMjAwMDAwMDAwMDEsMjA1LjAxODAwMDAwMDAwMDFINjA3LjkwNjAwMDAwMDAwMDFMNjEwLjA3OTAwMDAwMDAwMDEsMjEyLjYyNTAwMDAwMDAwMDA5TDYxNy42ODcsMjE0LjI1OVpcIixcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiBcIm1vcmF2c2tvc2xlenNreVwiLFxuICAgICAgICAgIG5hbWU6IFwiTW9yYXZza29zbGV6c2vDvSBrcmFqXCIsXG4gICAgICAgICAgcG9seWdvbjogXCJNNjE3LjY4NywyMTQuMjU5VjIyNC42MDk5OTk5OTk5OTk5OUg2MTIuNzVMNjA4LjI1LDIyOS4xMDk5OTk5OTk5OTk5OUw1OTguMjUsMjM1LjYwOTk5OTk5OTk5OTk5VjI0Mi42MDk5OTk5OTk5OTk5OUw1OTQuNzUsMjQ2LjEwOTk5OTk5OTk5OTk5TDU5Ny41LDI1MS4xMDk5OTk5OTk5OTk5OUw1OTEuNSwyNTkuNjFMNTg5Ljc1LDI2Ny4zNkw1OTMuODc1LDI3MS40ODVMNTkwLDI3Ny44Nkw1ODguNzUsMjg1LjM2TDU5Mi4zNzUsMjg4Ljk4NUg1OTdWMjk0LjM2SDYwMy4yNUw2MDcuMjUsMjk4LjM2TDYxNC41LDI5Ni4zNkw2MjAuNSwzMDUuMTFINjI1LjVMNjI5Ljc1LDMwNy4zNkw2MzQuNzUsMzAzLjg2TDYzOSwzMDguMTFMNjQ0LjUsMzA1LjExTDY1MiwzMDkuMTFMNjUwLjI1LDMxNy42MUg2NThMNjYwLjc1LDMyNS4xMUw2NjYuNzUsMzI3LjExTDY3MS44NzUsMzMyLjIzNUw2NzEuMjUsMzM3LjM2SDY3Ni43NUw2NzkuNSwzNDIuODZINjg1LjI1TDY5MC4yNSwzNDcuMTFMNjk4LjI1LDM0My44Nkw3MDYuMjUsMzQ1LjYxTDcxMi4yNSwzNDkuODZINzE3LjVMNzIzLDM0Ny42MUw3MjMuNSwzNTIuMTFMNzMwLjUsMzU2LjYxTDczMS43NSwzNjIuMzZMNzM3LjUsMzY1LjA0Nkw3NDIuMTE5LDM2My40MTZMNzUwLjgxMywzNTIuMDA1TDc1MC4yNjksMzQ1LjQ4NEw3NTYuMjQ3LDM0Mi43NjdMNzYxLjEzNzk5OTk5OTk5OTksMzQ1LjIxMkw3NjkuMjg3OTk5OTk5OTk5OSwzNDMuNTgyTDc3Ni4wNzk5OTk5OTk5OTk5LDM0NS43NTVMNzg0Ljc3Mzk5OTk5OTk5OTksMzQxLjY4TDc4Ni4xMzE5OTk5OTk5OTk4LDMzNS4xNTlMNzgxLjI0MDk5OTk5OTk5OTksMzIxLjg0N0w3NzguMjUyOTk5OTk5OTk5OCwzMTIuNjA5OTk5OTk5OTk5OTZINzcxLjE4ODk5OTk5OTk5OTlMNzY4LjIwMDk5OTk5OTk5OTgsMzA5LjA3OEw3NTkuMjM0OTk5OTk5OTk5OCwzMDYuMzYxTDc1Ny44NzY5OTk5OTk5OTk4LDI5OS44NEw3NTEuODk4OTk5OTk5OTk5OSwyODYuNzk5TDc1NS4xNTk5OTk5OTk5OTk5LDI3OS43MzZMNzUyLjQ0Mjk5OTk5OTk5OTksMjc4LjY0OUw3NDkuNzI1OTk5OTk5OTk5OSwyNzEuMDQyTDc0NC4yOTE5OTk5OTk5OTk5LDI3NS4xMTY5OTk5OTk5OTk5Nkw3MzMuNjk1OTk5OTk5OTk5OSwyNjkuMTRMNzI0LjQ1Nzk5OTk5OTk5OTksMjY3Ljc4Mkw3MjEuMTk3OTk5OTk5OTk5OSwyNzMuNDg4TDcxNi4zMDY5OTk5OTk5OTk5LDI2NS4zMzhMNzEwLjA1Nzk5OTk5OTk5OTksMjYyLjM0OTAwMDAwMDAwMDA1TDcwNy4wNjk5OTk5OTk5OTk4LDI1OC41NDUwMDAwMDAwMDAxTDcwMS42MzU5OTk5OTk5OTk5LDI2Mi4wNzcwMDAwMDAwMDAwNkw2OTYuMjAxOTk5OTk5OTk5OSwyNTkuNjMyMDAwMDAwMDAwMDZMNjk2LjYwODk5OTk5OTk5OTksMjUyLjk3NTAwMDAwMDAwMDA1TDY5Mi4xMjcsMjQ4LjQ5MzAwMDAwMDAwMDA1TDY4NS42MDYsMjQ5LjU4MDAwMDAwMDAwMDA0TDY4Mi4zNDUsMjU4LjAwMjAwMDAwMDAwMDA3QzY4Mi4zNDUsMjU4LjAwMjAwMDAwMDAwMDA3LDY3Ni44MTEsMjYzLjkzOTAwMDAwMDAwMDEsNjc2LjA5NiwyNjQuMjUxMDAwMDAwMDAwMVM2NzAuMjU1LDI2NC4xMTUwMDAwMDAwMDAwNyw2NzAuMjU1LDI2NC4xMTUwMDAwMDAwMDAwN0w2NjQuNjg2LDI1OC41NDYwMDAwMDAwMDAwNUw2NTguOTgsMjU2LjY0NDAwMDAwMDAwMDA2TDY1NS45OTIsMjQ3LjY3OTAwMDAwMDAwMDA2TDY1MC44Mjk5OTk5OTk5OTk5LDI0MC4zNDMwMDAwMDAwMDAwNUw2NDQuOTg3OTk5OTk5OTk5OSwyNDEuMDIzMDAwMDAwMDAwMDVMNjM5LjQxOSwyMzUuNDUzMDAwMDAwMDAwMDZWMjMwLjgzNDAwMDAwMDAwMDA2TDY0OS4xOTk5OTk5OTk5OTk5LDIyNy44NDUwMDAwMDAwMDAwNkw2NTYuOTQzLDIyNC4wNDEwMDAwMDAwMDAwNVYyMTkuNTU4MDAwMDAwMDAwMDVMNjUxLjkxNywyMTQuNTMyMDAwMDAwMDAwMDRMNjUzLjAwNCwyMDkuMDk4MDAwMDAwMDAwMDRMNjQ3LjU3LDIwMy42NjQwMDAwMDAwMDAwNEw2NDQuODUyMDAwMDAwMDAwMSwyMDkuMDk4MDAwMDAwMDAwMDRMNjQwLjc3NywyMTMuMTczMDAwMDAwMDAwMDNMNjI3LjE5MzAwMDAwMDAwMDEsMjEyLjA4NjAwMDAwMDAwMDA0TDYxNy42ODcsMjE0LjI1OVpcIixcbiAgICAgICAgfSxcbiAgICAgIF1cbiAgICB9O1xuICB9LFxufTtcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICA8dnVlLXNsaWNrLWNhcm91c2VsIHYtYmluZD1cInNldHRpbmdzXCIgY2xhc3M9XCJ0d2l0dGVyLWNhcm91c2VsXCI+XG4gICAgPHNsb3Q+PC9zbG90PlxuICA8L3Z1ZS1zbGljay1jYXJvdXNlbD5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVnVlU2xpY2tDYXJvdXNlbCBmcm9tICd2dWUtc2xpY2stY2Fyb3VzZWwnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcG9uZW50czoge1Z1ZVNsaWNrQ2Fyb3VzZWx9LFxuICBuYW1lOiAnVHdpdHRlckNhcm91c2VsJyxcbiAgZGF0YTogKCkgPT4gKHtcbiAgICBzZXR0aW5nczoge1xuICAgICAgXCJkb3RzXCI6IGZhbHNlLFxuICAgICAgXCJpbmZpbml0ZVwiOiBmYWxzZSxcbiAgICAgIFwic2xpZGVzVG9TaG93XCI6IDQsXG4gICAgICBcInNsaWRlc1RvU2Nyb2xsXCI6IDEsXG4gICAgICBcInJlc3BvbnNpdmVcIjogW1xuICAgICAgICB7XG4gICAgICAgICAgXCJicmVha3BvaW50XCI6IDE2MDAsXG4gICAgICAgICAgXCJzZXR0aW5nc1wiOiB7XG4gICAgICAgICAgICBcInNsaWRlc1RvU2hvd1wiOiAzXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCJicmVha3BvaW50XCI6IDEyMDAsXG4gICAgICAgICAgXCJzZXR0aW5nc1wiOiB7XG4gICAgICAgICAgICBcInNsaWRlc1RvU2hvd1wiOiAzXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCJicmVha3BvaW50XCI6IDkwMCxcbiAgICAgICAgICBcInNldHRpbmdzXCI6IHtcbiAgICAgICAgICAgIFwic2xpZGVzVG9TaG93XCI6IDJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcImJyZWFrcG9pbnRcIjogNTAwLFxuICAgICAgICAgIFwic2V0dGluZ3NcIjoge1xuICAgICAgICAgICAgXCJzbGlkZXNUb1Nob3dcIjogMVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH1cbiAgfSlcbn1cbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICA8ZGl2PlxuICAgIDxzbG90XG4gICAgICB2LWJpbmQ6dmlld3M9XCJ2aWV3c1wiXG4gICAgICB2LWJpbmQ6aXNDdXJyZW50Vmlldz1cImlzQ3VycmVudFZpZXdcIlxuICAgICAgdi1iaW5kOnRvZ2dsZVZpZXc9XCJ0b2dnbGVWaWV3XCJcbiAgICAgIHYtYmluZDpzaG93Vmlldz1cInNob3dWaWV3XCJcbiAgICAgIHYtYmluZDpzZXRWaWV3PVwic2V0Vmlld1wiXG4gICAgPjwvc2xvdD5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm9wczoge1xuICAgIGluaXRpYWw6IHtcbiAgICAgIGRlZmF1bHQ6ICgpID0+IHt9XG4gICAgfSxcbiAgICBzeW5jTG9jYXRpb246IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICB9LFxuICAgIGxvY2F0aW9uUGFyYW06IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6IFwidmlld1wiLFxuICAgIH1cbiAgfSxcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmlld3M6IHRoaXMuJHByb3BzLmluaXRpYWwsXG4gICAgICBxdWVyeVBhcmFtczogbnVsbCxcbiAgICAgIGtleUxpc3RlbmVyOiBlID0+IHtcbiAgICAgICAgLy8gRXNjXG4gICAgICAgIGlmIChlLmtleUNvZGUgPT09IDI3KSB7XG4gICAgICAgICAgdGhpcy5oaWRlQWxsVmlld3MoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH0sXG4gIHdhdGNoOiB7XG4gICAgcm91dGVWaWV3KCkge1xuICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuICAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIHNldFZpZXcodmlld0lkLCBzaG93LCBoaWRlT3RoZXJzID0gZmFsc2UpIHtcbiAgICAgIGlmIChoaWRlT3RoZXJzKSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuJGRhdGEudmlld3MpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICBpZiAoa2V5ICE9PSB2aWV3SWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VmlldyhrZXksIGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLiRkYXRhLnZpZXdzW3ZpZXdJZF0gPSBzaG93O1xuXG4gICAgICBpZiAoc2hvdyAmJiB0aGlzLiRwcm9wcy5zeW5jTG9jYXRpb24pIHtcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuXG4gICAgICAgIHF1ZXJ5UGFyYW1zLnNldCh0aGlzLiRwcm9wcy5sb2NhdGlvblBhcmFtLCB2aWV3SWQpO1xuICAgICAgICBoaXN0b3J5LnB1c2hTdGF0ZShudWxsLCBudWxsLCBcIj9cIiArIHF1ZXJ5UGFyYW1zLnRvU3RyaW5nKCkpO1xuICAgICAgfVxuICAgIH0sXG4gICAgc2V0Vmlld3ModXBkYXRlcykge1xuICAgICAgdGhpcy4kZGF0YS52aWV3cyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZGF0YS52aWV3cywgdXBkYXRlcyk7XG4gICAgfSxcbiAgICB0b2dnbGVWaWV3KHZpZXdJZCkge1xuICAgICAgIXRoaXMuaXNDdXJyZW50Vmlldyh2aWV3SWQpICYmIHRoaXMuc2V0Vmlldyh2aWV3SWQsICF0aGlzLmlzQ3VycmVudFZpZXcodmlld0lkKSwgdHJ1ZSk7XG4gICAgfSxcbiAgICBzaG93Vmlldyh2aWV3SWQpIHtcbiAgICAgIHRoaXMuc2V0Vmlldyh2aWV3SWQsIHRydWUsIHRydWUpO1xuICAgIH0sXG4gICAgaXNDdXJyZW50Vmlldyh2aWV3SWQpIHtcbiAgICAgIHJldHVybiB0aGlzLiRkYXRhLnZpZXdzW3ZpZXdJZF07XG4gICAgfSxcbiAgICBoaWRlQWxsVmlld3MoKSB7XG4gICAgICBPYmplY3Qua2V5cyh0aGlzLiRkYXRhLnZpZXdzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIHRoaXMuc2V0VmlldyhrZXksIGZhbHNlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgbW91bnRlZCgpIHtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuJGRhdGEua2V5TGlzdGVuZXIpO1xuXG4gICAgaWYgKHRoaXMuJHByb3BzLnN5bmNMb2NhdGlvbikge1xuICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuICAgICAgY29uc3QgbG9jYXRpb25WaWV3ID0gcXVlcnlQYXJhbXMuZ2V0KHRoaXMuJHByb3BzLmxvY2F0aW9uUGFyYW0pO1xuXG4gICAgICBpZiAobG9jYXRpb25WaWV3ICYmIE9iamVjdC5rZXlzKHRoaXMuJGRhdGEudmlld3MpLmluZGV4T2YobG9jYXRpb25WaWV3KSAhPT0gLTEpIHtcbiAgICAgICAgdGhpcy5zaG93Vmlldyhsb2NhdGlvblZpZXcpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgZGVzdHJveWVkKCkge1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy4kZGF0YS5rZXlMaXN0ZW5lcik7XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICA8ZGl2IEBtb3VzZWVudGVyPVwib25Nb3VzZUVudGVyXCIgQG1vdXNlbGVhdmU9XCJvbk1vdXNlTGVhdmVcIj5cbiAgICA8c3BhbiB2LWlmPVwiIWhyZWZcIiBjbGFzcz1cIm5hdmJhci1tZW51X19saW5rIG5hdmJhci1tZW51X19zdWJtZW51LXRvZ2dsZVwiIDpjbGFzcz1cInsnbmF2YmFyLW1lbnVfX3N1Ym1lbnUtdG9nZ2xlLS1vcGVuJzogc2hvd31cIiBAY2xpY2s9XCJoYW5kbGVDbGlja1wiPnt7IGxhYmVsIH19PC9zcGFuPlxuICAgIDxhIHYtaWY9XCJocmVmXCIgOmhyZWY9XCJocmVmXCIgY2xhc3M9XCJuYXZiYXItbWVudV9fbGluayBuYXZiYXItbWVudV9fc3VibWVudS10b2dnbGVcIiA6Y2xhc3M9XCJ7J25hdmJhci1tZW51X19zdWJtZW51LXRvZ2dsZS0tb3Blbic6IHNob3d9XCIgQGNsaWNrLnByZXZlbnQ9XCJoYW5kbGVDbGlja1wiPnt7IGxhYmVsIH19PC9hPlxuICAgIDxkaXYgOmNsYXNzPVwieyduYXZiYXItbWVudV9fc3VibWVudS13cmFwLS1zaG93Jzogc2hvd31cIiBjbGFzcz1cIm5hdmJhci1tZW51X19zdWJtZW51LXdyYXBcIj5cbiAgICAgIDxzbG90PlxuICAgICAgPC9zbG90PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBpc0xnU2NyZWVuU2l6ZSB9IGZyb20gXCIuLi8uLi91dGlsc1wiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNob3c6IGZhbHNlXG4gICAgfTtcbiAgfSxcbiAgcHJvcHM6IHtcbiAgICBocmVmOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgICBsYWJlbDoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIG9uTW91c2VFbnRlcigpIHtcbiAgICAgIGlmIChpc0xnU2NyZWVuU2l6ZSgpKSB7XG4gICAgICAgIHRoaXMuJGRhdGEuc2hvdyA9IHRydWU7XG4gICAgICB9XG4gICAgfSxcbiAgICBvbk1vdXNlTGVhdmUoKSB7XG4gICAgICBpZiAoaXNMZ1NjcmVlblNpemUoKSkge1xuICAgICAgICB0aGlzLiRkYXRhLnNob3cgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZUNsaWNrKGV2dCkge1xuICAgICAgLy8gT24gbW9iaWxlIHNjcmVlbnMsIGZpcnN0IGNsaWNrIHNob3VsZCBqdXN0IHRvZ2dsZSBhbmQgcmVkaXIgb24gc2Vjb25kIG9uZVxuICAgICAgaWYgKGlzTGdTY3JlZW5TaXplKCkgfHwgdGhpcy4kZGF0YS5zaG93KSB7XG4gICAgICAgIGlmICh0aGlzLiRwcm9wcy5ocmVmKSB7XG4gICAgICAgICAgd2luZG93LmxvY2F0aW9uID0gdGhpcy4kcHJvcHMuaHJlZjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLiRkYXRhLnNob3cgPSAhdGhpcy4kZGF0YS5zaG93O1xuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDxkaXYgQG1vdXNlZW50ZXI9XCJvbk1vdXNlRW50ZXJcIiBAbW91c2VsZWF2ZT1cIm9uTW91c2VMZWF2ZVwiPlxuICAgIDxzcGFuIHYtaWY9XCIhaHJlZlwiIGNsYXNzPVwibmF2YmFyLW1lbnVfX2xpbmsgbmF2YmFyLW1lbnVfX3N1Ym1lbnUtdG9nZ2xlXCIgOmNsYXNzPVwieyduYXZiYXItbWVudV9fc3VibWVudS10b2dnbGUtLW9wZW4nOiBzaG93fVwiIEBjbGljaz1cImhhbmRsZUNsaWNrXCI+e3sgbGFiZWwgfX08L3NwYW4+XG4gICAgPGEgdi1pZj1cImhyZWZcIiA6aHJlZj1cImhyZWZcIiBjbGFzcz1cIm5hdmJhci1tZW51X19saW5rIG5hdmJhci1tZW51X19zdWJtZW51LXRvZ2dsZVwiIDpjbGFzcz1cInsnbmF2YmFyLW1lbnVfX3N1Ym1lbnUtdG9nZ2xlLS1vcGVuJzogc2hvd31cIiBAY2xpY2sucHJldmVudD1cImhhbmRsZUNsaWNrXCI+e3sgbGFiZWwgfX08L2E+XG4gICAgPGRpdiA6Y2xhc3M9XCJ7J25hdmJhci1tZW51X19zdWJtZW51LXdyYXAtLXNob3cnOiBzaG93fVwiIGNsYXNzPVwibmF2YmFyLW1lbnVfX3N1Ym1lbnUtd3JhcFwiPlxuICAgICAgPHVsIGNsYXNzPVwibmF2YmFyLW1lbnVfX3N1Ym1lbnVcIj5cbiAgICAgICAgPGxpIHYtZm9yPVwiKGl0ZW0sIGluZGV4KSBpbiBwYXJzZWRJdGVtc1wiIDprZXk9XCJpbmRleFwiPlxuICAgICAgICAgICAgPGEgOmhyZWY9XCJpdGVtWzFdXCIgY2xhc3M9XCJuYXZiYXItbWVudV9fbGlua1wiPnt7IGl0ZW1bMF0gfX08L2E+XG4gICAgICAgIDwvbGk+XG4gICAgICA8L3VsPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBpc0xnU2NyZWVuU2l6ZSB9IGZyb20gXCIuLi8uLi91dGlsc1wiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNob3c6IGZhbHNlLFxuICAgICAgcGFyc2VkSXRlbXM6IEpTT04ucGFyc2UodGhpcy5pdGVtcyksXG4gICAgfTtcbiAgfSxcbiAgcHJvcHM6IHtcbiAgICBocmVmOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgICBsYWJlbDoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgIH0sXG4gICAgaXRlbXM6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICB9XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBvbk1vdXNlRW50ZXIoKSB7XG4gICAgICBpZiAoaXNMZ1NjcmVlblNpemUoKSkge1xuICAgICAgICB0aGlzLiRkYXRhLnNob3cgPSB0cnVlO1xuICAgICAgfVxuICAgIH0sXG4gICAgb25Nb3VzZUxlYXZlKCkge1xuICAgICAgaWYgKGlzTGdTY3JlZW5TaXplKCkpIHtcbiAgICAgICAgdGhpcy4kZGF0YS5zaG93ID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVDbGljayhldnQpIHtcbiAgICAgIC8vIE9uIG1vYmlsZSBzY3JlZW5zLCBmaXJzdCBjbGljayBzaG91bGQganVzdCB0b2dnbGUgYW5kIHJlZGlyIG9uIHNlY29uZCBvbmVcbiAgICAgIGlmIChpc0xnU2NyZWVuU2l6ZSgpIHx8IHRoaXMuJGRhdGEuc2hvdykge1xuICAgICAgICBpZiAodGhpcy4kcHJvcHMuaHJlZikge1xuICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9IHRoaXMuJHByb3BzLmhyZWY7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy4kZGF0YS5zaG93ID0gIXRoaXMuJGRhdGEuc2hvdztcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiPHNjcmlwdD5cbiAgaW1wb3J0IFVpTmF2YmFyU3ViaXRlbSBmcm9tIFwiLi9OYXZiYXJTdWJpdGVtXCI7XG4gIGltcG9ydCBVaU5hdmJhclN1Yml0ZW1SZXBsYWNpbmcgZnJvbSBcIi4vTmF2YmFyU3ViaXRlbVJlcGxhY2luZ1wiO1xuICBpbXBvcnQgeyBpc0xnU2NyZWVuU2l6ZSB9IGZyb20gXCIuLi8uLi91dGlsc1wiO1xuXG4gIGV4cG9ydCBkZWZhdWx0IHtcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICBVaU5hdmJhclN1Yml0ZW0sXG4gICAgICBVaU5hdmJhclN1Yml0ZW1SZXBsYWNpbmcsXG4gICAgfSxcbiAgICBkYXRhKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNMZ1NjcmVlblNpemU6IGlzTGdTY3JlZW5TaXplKCksXG4gICAgICAgIHNob3c6IGZhbHNlLFxuICAgICAgICByZXNpemVIYW5kbGVyOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy4kZGF0YS5pc0xnU2NyZWVuU2l6ZSA9IGlzTGdTY3JlZW5TaXplKCk7XG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0sXG4gICAgbW91bnRlZCgpIHtcbiAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgdGhpcy4kZGF0YS5yZXNpemVIYW5kbGVyKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIHRoaXMuJGRhdGEucmVzaXplSGFuZGxlcik7XG4gICAgfVxuICB9XG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cbiAgPGRpdiA6Y2xhc3M9XCJbd3JhcHBlcmNsYXNzLCAnZm9vdGVyLWNvbGxhcHNpYmxlJ11cIj5cbiAgICA8c3BhbiBjbGFzcz1cInRleHQteGwgZm9udC1hbHQgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGUgdGV4dC13aGl0ZSBmb290ZXItY29sbGFwc2libGVfX3RvZ2dsZVwiIDpjbGFzcz1cIltsYWJlbGNsYXNzLCBzaG93ID8gJ2Zvb3Rlci1jb2xsYXBzaWJsZV9fdG9nZ2xlLS1vcGVuJyA6ICcnXVwiIEBjbGljaz1cImhhbmRsZUNsaWNrXCI+e3sgbGFiZWwgfX08L3NwYW4+XG4gICAgPGRpdiB2LXNob3c9XCJzaG93IHx8IGlzTGdTY3JlZW5TaXplXCIgOmNsYXNzPVwiW3Nsb3R3cmFwcGVyY2xhc3NdXCI+XG4gICAgICA8c2xvdD5cbiAgICAgIDwvc2xvdD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgaXNMZ1NjcmVlblNpemUgfSBmcm9tIFwiLi4vLi4vdXRpbHNcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc0xnU2NyZWVuU2l6ZTogaXNMZ1NjcmVlblNpemUoKSxcbiAgICAgIHNob3c6IGZhbHNlLFxuICAgICAgcmVzaXplSGFuZGxlcjogKCkgPT4ge1xuICAgICAgICB0aGlzLiRkYXRhLmlzTGdTY3JlZW5TaXplID0gaXNMZ1NjcmVlblNpemUoKTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcbiAgcHJvcHM6IHtcbiAgICBocmVmOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgICBsYWJlbDoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgIH0sXG4gICAgbGFiZWxjbGFzczoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgIH0sXG4gICAgd3JhcHBlcmNsYXNzOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiBcIlwiLFxuICAgIH0sXG4gICAgc2xvdHdyYXBwZXJjbGFzczoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogXCJcIixcbiAgICB9XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBoYW5kbGVDbGljaygpIHtcbiAgICAgIGlmICh0aGlzLiRwcm9wcy5ocmVmKSB7XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9IHRoaXMuJHByb3BzLmhyZWY7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuJGRhdGEuc2hvdyA9ICF0aGlzLiRkYXRhLnNob3c7XG4gICAgfVxuICB9LFxuICBtb3VudGVkKCkge1xuICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIHRoaXMuJGRhdGEucmVzaXplSGFuZGxlcik7XG4gICAgfSk7XG4gIH0sXG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgdGhpcy4kZGF0YS5yZXNpemVIYW5kbGVyKTtcbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJmbGlwLWNsb2NrXCI+XG4gICAgPHRlbXBsYXRlIHYtZm9yPVwiZGF0YSBpbiB0aW1lRGF0YVwiIHYtc2hvdz1cInNob3dcIj5cbiAgICAgIDxzcGFuIHYtYmluZDprZXk9XCJkYXRhLmxhYmVsXCIgY2xhc3M9XCJmbGlwLWNsb2NrX19waWVjZVwiIDppZD1cImRhdGEuZWxlbWVudElkXCIgdi1zaG93PVwiZGF0YS5zaG93XCI+XG4gICAgICAgIDxzcGFuIDpjbGFzcz1cIlsnZmxpcC1jbG9ja19fY2FyZCcsICdmbGlwLWNhcmQnLCBjbG9ja0NsYXNzZXMgXVwiPlxuICAgICAgICAgIDxiIGNsYXNzPVwiZmxpcC1jYXJkX190b3BcIj57eyBkYXRhLmN1cnJlbnQgfCB0d29EaWdpdHMgfX08L2I+XG4gICAgICAgICAgPGIgY2xhc3M9XCJmbGlwLWNhcmRfX2JvdHRvbVwiIHYtYmluZDpkYXRhLXZhbHVlPVwiZGF0YS5jdXJyZW50IHwgdHdvRGlnaXRzXCI+PC9iPlxuICAgICAgICAgIDxiIGNsYXNzPVwiZmxpcC1jYXJkX19iYWNrXCIgdi1iaW5kOmRhdGEtdmFsdWU9XCJkYXRhLnByZXZpb3VzIHwgdHdvRGlnaXRzXCI+PC9iPlxuICAgICAgICAgIDxiIGNsYXNzPVwiZmxpcC1jYXJkX19iYWNrLWJvdHRvbVwiIHYtYmluZDpkYXRhLXZhbHVlPVwiZGF0YS5wcmV2aW91cyB8IHR3b0RpZ2l0c1wiPjwvYj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiA6Y2xhc3M9XCJbJ2ZsaXAtY2xvY2tfX3Nsb3QnLCAnZm9udC1hbHQnLCBzbG90Q2xhc3Nlc11cIj57eyBkYXRhLmxhYmVsIH19PC9zcGFuPlxuICAgICAgPC9zcGFuPlxuICAgIDwvdGVtcGxhdGU+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgZm9yRWFjaE5vZGUgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnZmxpcENvdW50ZG93bicsXG4gIHByb3BzOiB7XG4gICAgZGVhZGxpbmU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICB9LFxuICAgIHN0b3A6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgfSxcbiAgICB1bml0czoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2RheXMsaG91cnMsbWludXRlcyxzZWNvbmRzJ1xuICAgIH0sXG4gICAgY2xvY2tDbGFzc2VzOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAndGV4dC02eGwnXG4gICAgfSxcbiAgICBzbG90Q2xhc3Nlczoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ3RleHQtM3hsJ1xuICAgIH1cbiAgfSxcbiAgZGF0YSgpIHtcbiAgICBjb25zdCB1dWlkID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwKTtcbiAgICByZXR1cm4ge1xuICAgICAgbm93OiBNYXRoLnRydW5jKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCksXG4gICAgICBkYXRlOiBudWxsLFxuICAgICAgaW50ZXJ2YWw6IG51bGwsXG4gICAgICBkaWZmOiAwLFxuICAgICAgc2hvdzogZmFsc2UsXG4gICAgICB0aW1lRGF0YTogW1xuICAgICAgICB7XG4gICAgICAgICAgY3VycmVudDogMCxcbiAgICAgICAgICBwcmV2aW91czogMCxcbiAgICAgICAgICBsYWJlbDogXCJEbsOtXCIsXG4gICAgICAgICAgZWxlbWVudElkOiAnZmxpcC1jYXJkLWRheXMtJyArIHV1aWQsXG4gICAgICAgICAgc2hvdzogdGhpcy51bml0cy5pbmRleE9mKFwiZGF5c1wiKSAhPT0gLTEsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBjdXJyZW50OiAwLFxuICAgICAgICAgIHByZXZpb3VzOiAwLFxuICAgICAgICAgIGxhYmVsOiBcIkhvZFwiLFxuICAgICAgICAgIGVsZW1lbnRJZDogJ2ZsaXAtY2FyZC1ob3Vycy0nICsgdXVpZCxcbiAgICAgICAgICBzaG93OiB0aGlzLnVuaXRzLmluZGV4T2YoXCJob3Vyc1wiKSAhPT0gLTEsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBjdXJyZW50OiAwLFxuICAgICAgICAgIHByZXZpb3VzOiAwLFxuICAgICAgICAgIGxhYmVsOiBcIk1pblwiLFxuICAgICAgICAgIGVsZW1lbnRJZDogJ2ZsaXAtY2FyZC1taW51dGVzLScgKyB1dWlkLFxuICAgICAgICAgIHNob3c6IHRoaXMudW5pdHMuaW5kZXhPZihcIm1pbnV0ZXNcIikgIT09IC0xLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgY3VycmVudDogMCxcbiAgICAgICAgICBwcmV2aW91czogMCxcbiAgICAgICAgICBsYWJlbDogXCJTZWtcIixcbiAgICAgICAgICBlbGVtZW50SWQ6ICdmbGlwLWNhcmQtc2Vjb25kcy0nICsgdXVpZCxcbiAgICAgICAgICBzaG93OiB0aGlzLnVuaXRzLmluZGV4T2YoXCJzZWNvbmRzXCIpICE9PSAtMSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfSxcbiAgY3JlYXRlZCgpIHtcbiAgICBpZiAoIXRoaXMuZGVhZGxpbmUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgcHJvcHMgJ2RlYWRsaW5lJ1wiKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbmRUaW1lID0gdGhpcy5kZWFkbGluZTtcbiAgICB0aGlzLmRhdGUgPSBNYXRoLnRydW5jKERhdGUucGFyc2UoZW5kVGltZS5yZXBsYWNlKC8tL2csICcvJykpIC8gMTAwMCk7XG5cbiAgICBpZiAoIXRoaXMuZGF0ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBwcm9wcyB2YWx1ZSwgY29ycmVjdCB0aGUgJ2RlYWRsaW5lJ1wiKTtcbiAgICB9XG5cbiAgICB0aGlzLmludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgdGhpcy5ub3cgPSBNYXRoLnRydW5jKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCk7XG4gICAgfSwgMTAwMCk7XG4gIH0sXG4gIG1vdW50ZWQoKSB7XG4gICAgaWYgKHRoaXMuZGlmZiAhPT0gMCkge1xuICAgICAgdGhpcy5zaG93ID0gdHJ1ZTtcbiAgICB9XG4gIH0sXG4gIHdhdGNoOiB7XG4gICAgZGVhZGxpbmUobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGNvbnN0IGVuZFRpbWUgPSB0aGlzLmRlYWRsaW5lO1xuICAgICAgdGhpcy5kYXRlID0gTWF0aC50cnVuYyhEYXRlLnBhcnNlKGVuZFRpbWUucmVwbGFjZSgvLS9nLCAnLycpKSAvIDEwMDApO1xuXG4gICAgICBpZiAoIXRoaXMuZGF0ZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHByb3BzIHZhbHVlLCBjb3JyZWN0IHRoZSAnZGVhZGxpbmUnXCIpO1xuICAgICAgfVxuICAgIH0sXG4gICAgbm93KHZhbHVlKSB7XG4gICAgICB0aGlzLmRpZmYgPSB0aGlzLmRhdGUgLSB2YWx1ZTtcblxuICAgICAgaWYgKHRoaXMuZGlmZiA8PSAwIHx8IHRoaXMuc3RvcCkge1xuICAgICAgICB0aGlzLmRpZmYgPSAwO1xuICAgICAgICB0aGlzLnVwZGF0ZVRpbWUoMywgMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnVwZGF0ZVRpbWUoMCwgTWF0aC50cnVuYyh0aGlzLmRpZmYgLyA2MCAvIDYwIC8gMjQpKTtcbiAgICAgICAgdGhpcy51cGRhdGVUaW1lKDEsIE1hdGgudHJ1bmModGhpcy5kaWZmIC8gNjAgLyA2MCkgJSAyNCk7XG4gICAgICAgIHRoaXMudXBkYXRlVGltZSgyLCBNYXRoLnRydW5jKHRoaXMuZGlmZiAvIDYwKSAlIDYwKTtcbiAgICAgICAgdGhpcy51cGRhdGVUaW1lKDMsIE1hdGgudHJ1bmModGhpcy5kaWZmKSAlIDYwKTtcbiAgICAgIH1cbiAgICB9LFxuICB9LFxuICBmaWx0ZXJzOiB7XG4gICAgdHdvRGlnaXRzKHZhbHVlKSB7XG4gICAgICBpZiAodmFsdWUudG9TdHJpbmcoKS5sZW5ndGggPD0gMSkge1xuICAgICAgICByZXR1cm4gJzAnICsgdmFsdWUudG9TdHJpbmcoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xuICAgIH0sXG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICB1cGRhdGVUaW1lKGlkeCwgbmV3VmFsdWUpIHtcbiAgICAgIGlmIChpZHggPj0gdGhpcy50aW1lRGF0YS5sZW5ndGggfHwgbmV3VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFwcGx5VXBkYXRlID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBkID0gdGhpcy50aW1lRGF0YVtpZHhdO1xuICAgICAgICBjb25zdCB2YWwgPSBuZXdWYWx1ZSA8IDAgPyAwIDogbmV3VmFsdWU7XG4gICAgICAgIGNvbnN0IGVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7ZC5lbGVtZW50SWR9YCk7XG4gICAgICAgIGlmICh2YWwgIT09IGQuY3VycmVudCkge1xuICAgICAgICAgIGQucHJldmlvdXMgPSBkLmN1cnJlbnQ7XG4gICAgICAgICAgZC5jdXJyZW50ID0gdmFsO1xuICAgICAgICAgIGlmIChlbCkge1xuICAgICAgICAgICAgZWwuY2xhc3NMaXN0LnJlbW92ZSgnZmxpcCcpO1xuICAgICAgICAgICAgdm9pZCBlbC5vZmZzZXRXaWR0aDtcbiAgICAgICAgICAgIGVsLmNsYXNzTGlzdC5hZGQoJ2ZsaXAnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGlkeCA9PT0gMCkge1xuICAgICAgICAgICAgY29uc3QgZWxzID0gZWwucXVlcnlTZWxlY3RvckFsbCgnc3BhbiBiJyk7XG4gICAgICAgICAgICBpZiAoZWxzKSB7XG4gICAgICAgICAgICAgIGZvckVhY2hOb2RlKGVscywgZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2xzID0gZS5jbGFzc0xpc3RbMF07XG4gICAgICAgICAgICAgICAgaWYgKG5ld1ZhbHVlIC8gMTAwMCA+PSAxKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoIWNscy5pbmNsdWRlcygnLTRkaWdpdHMnKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdDbHMgPSBjbHMgKyAnLTRkaWdpdHMnO1xuICAgICAgICAgICAgICAgICAgICBlLmNsYXNzTGlzdC5hZGQobmV3Q2xzKTtcbiAgICAgICAgICAgICAgICAgICAgZS5jbGFzc0xpc3QucmVtb3ZlKGNscyk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGlmIChjbHMuaW5jbHVkZXMoJy00ZGlnaXRzJykpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3Q2xzID0gY2xzLnJlcGxhY2UoJy00ZGlnaXRzJywgJycpO1xuICAgICAgICAgICAgICAgICAgICBlLmNsYXNzTGlzdC5hZGQobmV3Q2xzKTtcbiAgICAgICAgICAgICAgICAgICAgZS5jbGFzc0xpc3QucmVtb3ZlKGNscyk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGlmICh3aW5kb3dbJ3JlcXVlc3RBbmltYXRpb25GcmFtZSddKSB7XG4gICAgICAgIHRoaXMuZnJhbWUgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYXBwbHlVcGRhdGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXBwbHlVcGRhdGUoKTtcbiAgICAgIH1cbiAgICB9LFxuICB9LFxuICBiZWZvcmVEZXN0cm95KCkge1xuICAgIGlmICh3aW5kb3dbJ2NhbmNlbEFuaW1hdGlvbkZyYW1lJ10pIHtcbiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuZnJhbWUpO1xuICAgIH1cbiAgfSxcbiAgZGVzdHJveWVkKCkge1xuICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICB9XG59XG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cbiAgPGRpdiByZWY9XCJzbGlkZXJcIlxuICAgICAgIGNsYXNzPVwiaG9yaXpvbnRhbC1zY3JvbGxpbmcgZHJhZ2dhYmxlIG5vLXNjcm9sbGJhcnNcIlxuICAgICAgIDpjbGFzcz1cInsnYWN0aXZlJzogaXNEb3dufVwiXG4gICAgICAgdi1vbjptb3VzZWRvd249XCJtb3VzZWRvd25cIlxuICAgICAgIHYtb246bW91c2VsZWF2ZT1cIm1vdXNlbGVhdmVcIlxuICAgICAgIHYtb246bW91c2V1cD1cIm1vdXNldXBcIlxuICAgICAgIHYtb246bW91c2Vtb3ZlPVwibW91c2Vtb3ZlXCJcbiAgPlxuICAgIDxzbG90Pjwvc2xvdD5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBkYXRhOiAoKSA9PiAoe1xuICAgIGlzRG93bjogZmFsc2UsXG4gICAgc3RhcnRYOiBudWxsLFxuICAgIHNjcm9sbExlZnQ6IG51bGxcbiAgfSksXG4gIG1ldGhvZHM6IHtcbiAgICBtb3VzZW1vdmU6IGZ1bmN0aW9uIChlKXtcbiAgICAgIGlmICghdGhpcy5pc0Rvd24pIHJldHVyblxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICBjb25zdCBkaXN0YW5jZSA9IHRoaXMuJHJlZnMuc2xpZGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgfCBudWxsXG4gICAgICBjb25zdCB4ID0gZS5wYWdlWCAtIGRpc3RhbmNlXG4gICAgICBjb25zdCB3YWxrID0geCAtIHRoaXMuc3RhcnRYXG4gICAgICB0aGlzLiRyZWZzLnNsaWRlci5zY3JvbGxMZWZ0ID0gdGhpcy5zY3JvbGxMZWZ0IC0gd2Fsa1xuICAgIH0sXG4gICAgbW91c2VsZWF2ZTogZnVuY3Rpb24gKCl7XG4gICAgICB0aGlzLmlzRG93biA9IGZhbHNlXG4gICAgfSxcbiAgICBtb3VzZXVwOiBmdW5jdGlvbiAoKXtcbiAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcbiAgICB9LFxuICAgIG1vdXNlZG93bjogZnVuY3Rpb24gKGUpe1xuICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xuICAgICAgY29uc3QgZGlzdGFuY2UgPSB0aGlzLiRyZWZzLnNsaWRlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IHwgbnVsbFxuICAgICAgdGhpcy5zdGFydFggPSBlLnBhZ2VYIC0gZGlzdGFuY2VcbiAgICAgIHRoaXMuc2Nyb2xsTGVmdCA9IHRoaXMuJHJlZnMuc2xpZGVyLnNjcm9sbExlZnRcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbW91bnRlZCgpIHtcbiAgICBjb25zb2xlLmxvZyhgTW91bnRlZCBnZW5lcmljIFZ1ZSBhcHAgaW4gYCAsIHRoaXMuJGVsKTtcbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcblxuaW1wb3J0IHsgZm9yRWFjaE5vZGUgfSBmcm9tIFwiLi91dGlsc1wiO1xuXG5pbXBvcnQgQXJ0aWNsZUNhcm91c2VsIGZyb20gXCIuL2NvbXBvbmVudHMvYXJ0aWNsZXMvQXJ0aWNsZUNhcm91c2VsXCI7XG5pbXBvcnQgSGVhZGVyQ2Fyb3VzZWwgZnJvbSBcIi4vY29tcG9uZW50cy9oZWFkZXIvSGVhZGVyQ2Fyb3VzZWxcIjtcbmltcG9ydCBSZW5kZXJlciBmcm9tIFwiLi9jb21wb25lbnRzL2NhbGVuZGFyL1JlbmRlcmVyXCI7XG5pbXBvcnQgRHVtbXlQcm92aWRlciBmcm9tIFwiLi9jb21wb25lbnRzL2NhbGVuZGFyL0R1bW15UHJvdmlkZXJcIjtcbmltcG9ydCBHb29nbGVQcm92aWRlciBmcm9tIFwiLi9jb21wb25lbnRzL2NhbGVuZGFyL0dvb2dsZVByb3ZpZGVyXCI7XG5pbXBvcnQgUmVnaW9uTWFwIGZyb20gXCIuL2NvbXBvbmVudHMvUmVnaW9uTWFwXCI7XG5pbXBvcnQgVHdpdHRlckNhcm91c2VsIGZyb20gXCIuL2NvbXBvbmVudHMvVHdpdHRlckNhcm91c2VsXCI7XG5pbXBvcnQgVmlld1Byb3ZpZGVyIGZyb20gXCIuL2NvbXBvbmVudHMvVmlld1Byb3ZpZGVyXCI7XG5pbXBvcnQgTmF2YmFyIGZyb20gXCIuL2NvbXBvbmVudHMvbmF2YmFyL05hdmJhclwiO1xuaW1wb3J0IEZvb3RlckNvbGxhcHNpYmxlIGZyb20gXCIuL2NvbXBvbmVudHMvZm9vdGVyL0Zvb3RlckNvbGxhcHNpYmxlXCI7XG5pbXBvcnQgRmxpcENsb2NrIGZyb20gXCIuL2NvbXBvbmVudHMvRmxpcENsb2NrXCI7XG5pbXBvcnQgSG9yaXpvbnRhbFNjcm9sbGFibGUgZnJvbSBcIi4vY29tcG9uZW50cy9Ib3Jpem9udGFsU2Nyb2xsYWJsZVwiO1xuXG5cblZ1ZS5jb21wb25lbnQoXCJ1aS1hcnRpY2xlLWNhcm91c2VsXCIsIEFydGljbGVDYXJvdXNlbCk7XG5WdWUuY29tcG9uZW50KFwidWktaGVhZGVyLWNhcm91c2VsXCIsIEhlYWRlckNhcm91c2VsKTtcblZ1ZS5jb21wb25lbnQoXCJ1aS1jYWxlbmRhci1yZW5kZXJlclwiLCBSZW5kZXJlcik7XG5WdWUuY29tcG9uZW50KFwidWktY2FsZW5kYXItZHVtbXktcHJvdmlkZXJcIiwgRHVtbXlQcm92aWRlcik7XG5WdWUuY29tcG9uZW50KFwidWktY2FsZW5kYXItZ29vZ2xlLXByb3ZpZGVyXCIsIEdvb2dsZVByb3ZpZGVyKTtcblZ1ZS5jb21wb25lbnQoXCJ1aS1yZWdpb24tbWFwXCIsIFJlZ2lvbk1hcCk7XG5WdWUuY29tcG9uZW50KFwidWktdHdpdHRlci1jYXJvdXNlbFwiLCBUd2l0dGVyQ2Fyb3VzZWwpO1xuVnVlLmNvbXBvbmVudChcInVpLXZpZXctcHJvdmlkZXJcIiwgVmlld1Byb3ZpZGVyKTtcblZ1ZS5jb21wb25lbnQoXCJ1aS1uYXZiYXJcIiwgTmF2YmFyKTtcblZ1ZS5jb21wb25lbnQoXCJ1aS1mb290ZXItY29sbGFwc2libGVcIiwgRm9vdGVyQ29sbGFwc2libGUpO1xuVnVlLmNvbXBvbmVudChcInVpLWZsaXAtY2xvY2tcIiwgRmxpcENsb2NrKTtcblZ1ZS5jb21wb25lbnQoXCJ1aS1ob3Jpem9udGFsLXNjcm9sbGFibGVcIiwgSG9yaXpvbnRhbFNjcm9sbGFibGUpO1xuXG5cbmltcG9ydCBVaUFwcCBmcm9tIFwiLi9jb21wb25lbnRzL1VpQXBwLnZ1ZVwiO1xuXG5cbmNvbnN0IGFwcEZhY3RvcnkgPSAoZWwsIGF0dHJzKSA9PiB7XG4gIC8vIEJvb3RzdHJhcCBWdWUuanMuXG4gIG5ldyBWdWUoe1xuICAgIGVsLFxuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgIFVpQXBwXG4gICAgfVxuICB9KTtcbn07XG5cblxuLyoqXG4gKiBCb290c3RyYXAgVnVlLmpzIGFwcGxpY2F0aW9uIGF0IGdpdmVuIEVsZW1lbnQgaW5zdGFuY2UuXG4gKlxuICogQXBwIHByb3BlcnRpZXMgYXJlIHBhc3NlZCB2aWEgZGF0YSBhdHRyaWJ1dGVzLCBsaWtlOlxuICpcbiAqIDxkaXYgY2xhc3M9XCJfX3Z1ZS1yb290XCIgZGF0YS1tZXNzYWdlPVwiSGVsbG9cIiBkYXRhLWFwcD1cIlNvbWVBcHBcIj48L2Rpdj5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsIERPTSBFbGVtZW50XG4gKi9cbmZ1bmN0aW9uIHJlbmRlclZ1ZUFwcEVsZW1lbnQoZWwpIHtcbiAgY29uc3QgYXR0cnMgPSBPYmplY3QuYXNzaWduKHt9LCBlbC5kYXRhc2V0KTtcbiAgcmV0dXJuIGFwcEZhY3RvcnkoZWwsIGF0dHJzKTtcbn1cblxuXG5mdW5jdGlvbiBpbml0KGV2ZW50KSB7XG4gIC8vIEluaXRpYWxpemUgVnVlLmpzIGFwcHMuXG4gIGZvckVhY2hOb2RlKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5fX2pzLXJvb3QnKSwgcmVuZGVyVnVlQXBwRWxlbWVudClcbn1cblxuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGluaXQpO1xuIl0sIm5hbWVzIjpbInRoaXMiLCJBcnRpY2xlQ2Fyb3VzZWwiLCJIZWFkZXJDYXJvdXNlbCIsIlJlbmRlcmVyIiwiRHVtbXlQcm92aWRlciIsIkdvb2dsZVByb3ZpZGVyIiwiUmVnaW9uTWFwIiwiVHdpdHRlckNhcm91c2VsIiwiVmlld1Byb3ZpZGVyIiwiTmF2YmFyIiwiRm9vdGVyQ29sbGFwc2libGUiLCJGbGlwQ2xvY2siLCJIb3Jpem9udGFsU2Nyb2xsYWJsZSIsIlVpQXBwIl0sIm1hcHBpbmdzIjoiOzs7OztFQUFBLFdBQWMsR0FBRztFQUNqQixFQUFFLElBQUksRUFBRSxPQUFPO0VBQ2YsRUFBRSxJQUFJLEVBQUUsT0FBTztFQUNmLEVBQUUsSUFBSSxFQUFFLE9BQU87RUFDZixFQUFFLElBQUksRUFBRSxRQUFRO0VBQ2hCLEVBQUUsS0FBSyxFQUFFLFFBQVE7RUFDakIsQ0FBQzs7RUNKRCxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ2hFO0VBQ08sTUFBTSxXQUFXLEdBQUcsVUFBVSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRTtFQUM3RCxFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0VBQ3pDLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbkMsR0FBRztFQUNILENBQUMsQ0FBQztBQUNGO0VBQ08sU0FBUyxj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LEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFO0VBQ2xELFFBQVEsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDMUMsS0FBSztFQUNMLElBQUksT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsSUFBSSxFQUFFLFFBQVEsRUFBRTtFQUN0RCxRQUFRLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxTQUFTLEdBQUcsUUFBUSxHQUFHLFFBQVEsQ0FBQyxDQUFDO0VBQzVELFFBQVEsT0FBTyxJQUFJLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0VBQ3JDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztFQUNWLENBQUM7RUFDRDtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQSxTQUFTLFdBQVcsQ0FBQyxNQUFNLEVBQUU7RUFDN0IsSUFBSSxJQUFJLFNBQVMsR0FBRyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0VBQ3ZELElBQUksSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO0VBQ3RCLElBQUksS0FBSyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsV0FBVyxHQUFHLFNBQVMsRUFBRSxFQUFFLEdBQUcsV0FBVyxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRTtFQUM3RSxRQUFRLElBQUksUUFBUSxHQUFHLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUN2QyxRQUFRLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDLENBQUM7RUFDbEQsUUFBUSxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0VBQzVDLEtBQUs7RUFDTCxJQUFJLE9BQU8sUUFBUSxDQUFDO0VBQ3BCLENBQUM7RUFDRDtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtF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QUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLFFBQVE7RUFDM0M7RUFDQSxTQUFTLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxJQUFJLElBQUk7RUFDMUM7RUFDQSxTQUFTLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7RUFDNUMsR0FBRyxDQUFDLENBQUM7QUFDTDtFQUNBLEVBQUUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxxQkFBcUIsRUFBRSxFQUFFO0VBQ25FO0VBQ0EsSUFBSSxTQUFTLEVBQUUsU0FBUyxTQUFTLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUU7RUFDdkQsTUFBTSxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3RCLE1BQU0sSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0VBQ3BCLE1BQU0sSUFBSSxTQUFTLENBQUM7RUFDcEIsTUFBTSxPQUFPLFNBQVMsQ0FBQyxNQUFNLEdBQUcsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztFQUNyRSxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUM7RUFDM0IsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxTQUFTLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU87RUFDMUUsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLFFBQVEsR0FBRyxVQUFVLEdBQUcsRUFBRSxLQUFLLEVBQUU7RUFDL0QsUUFBUSxJQUFJLE9BQU8sU0FBUyxJQUFJLFVBQVUsRUFBRSxLQUFLLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0VBQ3JGLFFBQVEsSUFBSSxDQUFDLFFB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O0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQSxTQUFTLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFO0VBQzFCLEVBQUUsT0FBTyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLElBQUksS0FBSyxLQUFLLEtBQUssQ0FBQyxDQUFDO0VBQ2pFLENBQUM7QUFDRDtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQSxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO0FBQzVCO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBLFNBQVMsVUFBVSxDQUFDLEtBQUssRUFBRTtFQUMzQjtFQUNBO0VBQ0EsRUFBRSxJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDOUQsRUFBRSxPQUFPLEdBQUcsSUFBSSxPQUFPLElBQUksR0FBRyxJQUFJLE1BQU0sQ0FBQztFQUN6QyxDQUFDO0FBQ0Q7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBLFNBQVMsUUFBUSxDQUFDLEtBQUssRUFBRTtFQUN6QixFQUFFLElBQUksSUFBSSxHQUFHLE9BQU8sS0FBSyxDQUFDO0VBQzFCLEVBQUUsT0FBTyxDQUFDLENBQUMsS0FBSyxLQUFLLElBQUksSUFBSSxRQUFRLElBQUksSUFBSSxJQUFJLFVBQVUsQ0FBQyxDQUFDO0VBQzdELENBQUM7QUFDRDtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBLFNBQVMsWUFBWSxDQUFDLEtBQUssRUFBRTtFQUM3QixFQUFFLE9BQU8sQ0FBQyxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssSUFBSSxRQUFRLENBQUM7RUFDN0MsQ0FBQztBQUNEO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBLFNBQVMsUUFBUSxDQUFDLEtBQUssRUFBRTtFQUN6QixFQUFFLE9BQU8sT0FBTyxLQUFLLElBQUksUUFBUTtFQUNqQyxLQUFLLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDO0VBQ3JFLENBQUM7QUFDRDtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBLFNBQVMsUUFBUSxDQUFDLEtBQUssRUFBRTtFQUN6QixFQUFFLE9BQU8sS0FBSyxJQUFJLElBQUksR0FBRyxFQUFFLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0VBQ2xELENBQUM7QUFDRDtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0EsU0FBUyxHQUFHLENBQUMsTUFB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Q0FBQyxVQUFVLEdBQUcsRUFBRSxHQUFHLEVBQUU7RUFDaEMsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQzFCLElBQUksT0FBTyxHQUFHLENBQUM7RUFDZixHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7RUFDVCxDQUFDLENBQUM7RUFDRixJQUFJLHFCQUFxQixHQUFHLFNBQVMscUJBQXFCLENBQUMsS0FBSyxFQUFFO0VBQ2xFLEVBQUUsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEdBQUcsRUFBRTtFQUNsRCxJQUFJLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDO0VBQzNELEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEdBQUcsRUFBRSxHQUFHLEVBQUU7RUFDaEMsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQzFCLElBQUksT0FBTyxHQUFHLENBQUM7RUFDZixHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7RUFDVCxDQUFDLENBQUM7RUFDRixJQUFJLDJCQUEyQixHQUFHLFNBQVMsVUFBVSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO0VBQzNFLEVBQUUsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQztFQUN4RSxFQUFFLE9BQU87RUFDVCxJQUFJLFFBQVEsRUFBRSxJQUFJO0VBQ2xCLElBQUksV0FBVyxFQUFFO0VBQ2pCLE1BQU0sTUFBTSxFQUFFLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLE9BQU87RUFDeEQsTUFBTSxNQUFNLEVBQUUsQ0FBQyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsT0FBTztFQUN4RCxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxPQUFPO0VBQ3RELE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLE9BQU87RUFDdEQsS0FBSztFQUNMLEdBQUcsQ0FBQztFQUNKLENBQUMsQ0FBQztFQUNGLElBQUksMEJBQTBCLEdBQUcsU0FBUyxTQUFTLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRTtFQUM3RDtFQUNBLEVBQUUsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVM7RUFDaEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVM7RUFDaEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVE7RUFDOUIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVk7RUFDdEMsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGVBQWU7RUFDNUMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUc7RUFDcEIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVk7RUFDdEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVk7RUFDdEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVc7RUFDcEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU07RUFDMUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU07RUFDMUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU87RUFDNUIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVU7RUFDbEMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWM7RUFDMUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVE7RUFDOUIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVc7RUFDcEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVU7RUFDbEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVU7RUFDbEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztFQUNqQyxFQUFFLElBQUksU0FBUyxFQUFFLE9BQU87RUFDeEIsRUFBRSxJQUFJLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztFQUMzQyxFQUFFLElBQUksUUFBUSxJQUFJLFlBQVksSUFBSSxlQUFlLEVBQUUsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO0VBQ3RFLEVBQUUsSUFBSSxTQUFTO0VBQ2YsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO0VBQ2pCLEVBQUUsSUFBSSxPQUFPLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ25DLEVBQUUsV0FBVyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7RUFDaEUsRUFBRSxXQUFXLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQztFQUNoRSxFQUFFLFdBQVcsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN0RyxFQUFFLElBQUksbUJBQW1CLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RztFQUNBLEVBQUUsSUFBSSxDQUFDLGVBQWUsSUFBSSxDQUFDLE9BQU8sSUFBSSxtQkFBbUIsR0FBRyxFQUFFLEVBQUU7RUFDaEUsSUFBSSxPQUFPO0VBQ1gsTUFBTSxTQUFTLEVBQUUsSUFBSTtFQUNyQixLQUFLLENBQUM7RUFDTixHQUFHO0FBQ0g7RUFDQSxFQUFFLElBQUksZUFBZSxFQUFFLFdBQVcsQ0FBQyxXQUFXLEdBQUcsbUJBQW1CLENBQUM7RUFDckUsRUFBRSxJQUFJLGNBQWMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxXQUFXLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDMUYsRUFBRSxJQUFJLGVBQWUsRUFBRSxjQUFjLEdBQUcsV0FBVyxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUN2RixFQUFFLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLGNBQWMsQ0FBQyxDQUFDO0VBQ3hELEVBQUUsSUFBSSxjQUFjLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxlQUFlLENBQUMsQ0FBQztFQUM1RSxFQUFFLElBQUksZ0JBQWdCLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQztBQUNqRDtFQUNBLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRTtFQUNqQixJQUFJLElBQUksWUFBWSxLQUFLLENBQUMsSUFBSSxjQUFjLEtBQUssT0FBTyxJQUFJLFlBQVksR0FBRyxDQUFDLElBQUksUUFBUSxJQUFJLGNBQWMsS0FBSyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksY0FBYyxLQUFLLE1BQU0sRUFBRTtFQUN4SyxNQUFNLGdCQUFnQixHQUFHLFdBQVcsQ0FBQyxXQUFXLEdBQUcsWUFBWSxDQUFDO0FBQ2hFO0VBQ0EsTUFBTSxJQUFJLFdBQVcsS0FBSyxLQUFLLElBQUksTUFBTSxFQUFFO0VBQzNDLFFBQVEsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0VBQy9CLFFBQVEsS0FBSyxDQUFDLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUNwQyxPQUFPO0VBQ1AsS0FBSztFQUNMLEdBQUc7QUFDSDtFQUNBLEVBQUUsSUFBSSxDQUFDLE1BQU0sSUFBSSxVQUFVLEVBQUU7RUFDN0IsSUFBSSxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUM7RUFDL0IsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQzNCLEdBQUc7QUFDSDtFQUNBLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRTtFQUNqQixJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUU7RUFDZCxNQUFNLFNBQVMsR0FBRyxPQUFPLEdBQUcsZ0JBQWdCLEdBQUcsY0FBYyxDQUFDO0VBQzlELEtBQUssTUFBTTtFQUNYLE1BQU0sU0FBUyxHQUFHLE9BQU8sR0FBRyxnQkFBZ0IsR0FBRyxjQUFjLENBQUM7RUFDOUQsS0FBSztFQUNMLEdBQUcsTUFBTTtFQUNULElBQUksU0FBUyxHQUFHLE9BQU8sR0FBRyxnQkFBZ0IsSUFBSSxVQUFVLEdBQUcsU0FBUyxDQUFDLEdBQUcsY0FBYyxDQUFDO0VBQ3ZGLEdBQUc7QUFDSDtFQUNBLEVBQUUsSUFBSSxlQUFlLEVBQUU7RUFDdkIsSUFBSSxTQUFTLEdBQUcsT0FBTyxHQUFHLGdCQUFnQixHQUFHLGNBQWMsQ0FBQztFQUM1RCxHQUFHO0FBQ0g7RUFDQSxFQUFFLEtBQUssR0FBRyxjQUFjLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRTtFQUNwQyxJQUFJLFdBQVcsRUFBRSxXQUFXO0VBQzVCLElBQUksU0FBUyxFQUFFLFNBQVM7RUFDeEIsSUFBSSxVQUFVLEVBQUUsNEJBQTRCLENBQUMsY0FBYyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUU7RUFDdEUsTUFBTSxJQUFJLEVBQUUsU0FBUztFQUNyQixLQUFLLENBQUMsQ0FBQztFQUNQLEdBQUcsQ0FBQyxDQUFDO0FBQ0w7RUFDQSxFQUFFLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsRUFBRTtFQUMvRyxJQUFJLE9BQU8sS0FBSyxDQUFDO0VBQ2pCLEdBQUc7QUFDSDtFQUNBLEVBQUUsSUFBSSxXQUFXLENBQUMsV0FBVyxHQUFHLEVBQUUsRUFBRTtFQUNwQyxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDNUIsSUFBSSxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7RUFDdkIsR0FBRztBQUNIO0VBQ0EsRUFBRSxPQUFPLEtBQUssQ0FBQztFQUNmLENBQUMsQ0FBQztFQUNGLElBQUkseUJBQXlCLEdBQUcsU0FBUyxRQUFRLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRTtFQUMzRCxFQUFFLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRO0VBQzlCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLO0VBQ3hCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXO0VBQ3BDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTO0VBQ2hDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjO0VBQzFDLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlO0VBQzVDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVO0VBQ2xDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZO0VBQ3RDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZO0VBQ3RDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTO0VBQ2hDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDN0I7RUFDQSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUU7RUFDakIsSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7RUFDbEMsSUFBSSxPQUFPLEVBQUUsQ0FBQztFQUNkLEdBQUc7QUFDSDtFQUNBLEVBQUUsSUFBSSxRQUFRLEdBQUcsZUFBZSxHQUFHLFVBQVUsR0FBRyxjQUFjLEdBQUcsU0FBUyxHQUFHLGNBQWMsQ0FBQztFQUM1RixFQUFFLElBQUksY0FBYyxHQUFHLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxlQUFlLENBQUMsQ0FBQztBQUN2RTtFQUNBLEVBQUUsSUFBSSxLQUFLLEdBQUc7RUFDZCxJQUFJLFFBQVEsRUFBRSxLQUFLO0VBQ25CLElBQUksV0FBVyxFQUFFLEtBQUs7RUFDdEIsSUFBSSxTQUFTLEVBQUUsS0FBSztFQUNwQixJQUFJLE9BQU8sRUFBRSxLQUFLO0VBQ2xCLElBQUksTUFBTSxFQUFFLEtBQUs7RUFDakIsSUFBSSxTQUFTLEVBQUUsSUFBSTtFQUNuQixJQUFJLFdBQVcsRUFBRSxFQUFFO0VBQ25CLEdBQUcsQ0FBQztBQUNKO0VBQ0EsRUFBRSxJQUFJLFNBQVMsRUFBRTtFQUNqQixJQUFJLE9BQU8sS0FBSyxDQUFDO0VBQ2pCLEdBQUc7QUFDSDtFQUNBLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUU7RUFDaEMsSUFBSSxPQUFPLEtBQUssQ0FBQztFQUNqQixHQUFHO0FBQ0g7RUFDQSxFQUFFLElBQUksV0FBVyxDQUFDLFdBQVcsR0FBRyxRQUFRLEVBQUU7RUFDMUMsSUFBSSxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDdkI7RUFDQSxJQUFJLElBQUksT0FBTyxFQUFFO0VBQ2pCLE1BQU0sT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0VBQzlCLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxVQUFVLEVBQUUsUUFBUSxDQUFDO0FBQzdCO0VBQ0EsSUFBSSxRQUFRLGNBQWM7RUFDMUIsTUFBTSxLQUFLLE1BQU0sQ0FBQztFQUNsQixNQUFNLEtBQUssSUFBSTtFQUNmLFFBQVEsUUFBUSxHQUFHLFlBQVksR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDdEQsUUFBUSxVQUFVLEdBQUcsWUFBWSxHQUFHLGNBQWMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0VBQzlFLFFBQVEsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3RDLFFBQVEsTUFBTTtBQUNkO0VBQ0EsTUFBTSxLQUFLLE9BQU8sQ0FBQztFQUNuQixNQUFNLEtBQUssTUFBTTtFQUNqQixRQUFRLFFBQVEsR0FBRyxZQUFZLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ3RELFFBQVEsVUFBVSxHQUFHLFlBQVksR0FBRyxjQUFjLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztFQUM5RSxRQUFRLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN0QyxRQUFRLE1BQU07QUFDZDtFQUNBLE1BQU07RUFDTixRQUFRLFVBQVUsR0FBRyxZQUFZLENBQUM7RUFDbEMsS0FBSztBQUNMO0VBQ0EsSUFBSSxLQUFLLENBQUMscUJBQXFCLENBQUMsR0FBRyxVQUFVLENBQUM7RUFDOUMsR0FBRyxNQUFNO0VBQ1Q7RUFDQSxJQUFJLElBQUksV0FBVyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUN6QyxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRTtFQUN0RSxNQUFNLElBQUksRUFBRSxXQUFXO0VBQ3ZCLEtBQUssQ0FBQyxDQUFDLENBQUM7RUFDUixHQUFHO0FBQ0g7RUFDQSxFQUFFLE9BQU8sS0FBSyxDQUFDO0VBQ2YsQ0FBQyxDQUFDO0VBQ0YsSUFBSSxtQkFBbUIsR0FBRyxTQUFTLG1CQUFtQixDQUFDLElBQUksRUFBRTtFQUM3RCxFQUFFLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztFQUNsRSxFQUFFLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDOUQsRUFBRSxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQzNELEVBQUUsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO0FBQ25CO0VBQ0EsRUFBRSxPQUFPLFVBQVUsR0FBRyxHQUFHLEVBQUU7RUFDM0IsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0VBQzdCLElBQUksVUFBVSxHQUFHLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO0VBQy9DLElBQUksT0FBTyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7RUFDaEUsR0FBRztBQUNIO0VBQ0EsRUFBRSxPQUFPLE9BQU8sQ0FBQztFQUNqQixDQUFDLENBQUM7RUFDRixJQUFJLGNBQWMsR0FBRyxTQUFTLGNBQWMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO0VBQzFELEVBQUUsSUFBSSxVQUFVLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDN0MsRUFBRSxJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUM7QUFDeEI7RUFDQSxFQUFFLElBQUksS0FBSyxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFO0VBQ2pELElBQUksS0FBSyxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQzlDLEdBQUcsTUFBTTtFQUNULElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxVQUFVLEVBQUU7RUFDOUIsTUFBTSxJQUFJLEtBQUssR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUU7RUFDakMsUUFBUSxLQUFLLEdBQUcsYUFBYSxDQUFDO0VBQzlCLFFBQVEsTUFBTTtFQUNkLE9BQU87QUFDUDtFQUNBLE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNwQyxLQUFLO0VBQ0wsR0FBRztBQUNIO0VBQ0EsRUFBRSxPQUFPLEtBQUssQ0FBQztFQUNmLENBQUMsQ0FBQztFQUNGLElBQUksYUFBYSxHQUFHLFNBQVMsYUFBYSxDQUFDLElBQUksRUFBRTtFQUNqRCxFQUFFLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9GO0VBQ0EsRUFBRSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7RUFDekIsSUFBSSxJQUFJLFdBQVcsQ0FBQztFQUNwQixJQUFJLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7RUFDakMsSUFBSSxJQUFJLE1BQU0sR0FBRyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLENBQUM7RUFDNUQsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLEtBQUssRUFBRTtFQUM5QyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO0VBQzFCLFFBQVEsSUFBSSxLQUFLLENBQUMsVUFBVSxHQUFHLFlBQVksR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEVBQUU7RUFDekYsVUFBVSxXQUFXLEdBQUcsS0FBSyxDQUFDO0VBQzlCLFVBQVUsT0FBTyxLQUFLLENBQUM7RUFDdkIsU0FBUztFQUNULE9BQU8sTUFBTTtFQUNiLFFBQVEsSUFBSSxLQUFLLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsRUFBRTtFQUMxRSxVQUFVLFdBQVcsR0FBRyxLQUFLLENBQUM7RUFDOUIsVUFBVSxPQUFPLEtBQUssQ0FBQztFQUN2QixTQUFTO0VBQ1QsT0FBTztBQUNQO0VBQ0EsTUFBTSxPQUFPLElBQUksQ0FBQztFQUNsQixLQUFLLENBQUMsQ0FBQztBQUNQO0VBQ0EsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO0VBQ3RCLE1BQU0sT0FBTyxDQUFDLENBQUM7RUFDZixLQUFLO0FBQ0w7RUFDQSxJQUFJLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO0VBQ25HLElBQUksSUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDbEYsSUFBSSxPQUFPLGVBQWUsQ0FBQztFQUMzQixHQUFHLE1BQU07RUFDVCxJQUFJLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztFQUMvQixHQUFHO0VBQ0gsQ0FBQyxDQUFDO0FBQ0Y7RUFDQSxJQUFJLGFBQWEsR0FBRyxTQUFTLGFBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFO0VBQ3ZELEVBQUUsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDO0VBQ3JCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsRUFBRTtFQUM5QixJQUFJLE9BQU8sU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN0QyxHQUFHLENBQUMsQ0FBQztFQUNMLEVBQUUsT0FBTyxTQUFTLENBQUM7RUFDbkIsQ0FBQyxDQUFDO0VBQ0YsSUFBSSxTQUFTLEdBQUc7RUFDaEIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLGVBQWUsQ0FBQztFQUN0UixFQUFFLEdBQUcsRUFBRSxDQUFDLFdBQVcsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLFVBQVUsQ0FBQztFQUM1SCxFQUFFLEtBQUssRUFBRSxDQUFDLFVBQVUsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLFdBQVcsQ0FBQztFQUMzRyxDQUFDLENBQUM7QUFDRjtFQUNBLElBQUksU0FBUyxHQUFHLFNBQVMsU0FBUyxDQUFDLElBQUksRUFBRTtFQUN6QyxFQUFFLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQztBQUNuQjtFQUNBLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7RUFDdEIsSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRTtFQUNyRSxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUM7RUFDcEIsS0FBSyxNQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFO0VBQ2pILE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQztFQUNwQixLQUFLO0VBQ0wsR0FBRztBQUNIO0VBQ0EsRUFBRSxPQUFPLEtBQUssQ0FBQztFQUNmLENBQUMsQ0FBQztFQUNGLElBQUksNkJBQTZCLEdBQUcsU0FBUyxZQUFZLENBQUMsSUFBSSxFQUFFO0VBQ2hFLEVBQUUsSUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWM7RUFDMUMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVM7RUFDaEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUk7RUFDdEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVE7RUFDOUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUs7RUFDeEIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVU7RUFDbEMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWM7RUFDMUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVE7RUFDOUIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVk7RUFDdEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVU7RUFDbEMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWM7RUFDMUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVk7RUFDdEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztFQUMzQixFQUFFLElBQUksY0FBYyxJQUFJLFNBQVMsRUFBRSxPQUFPLEVBQUUsQ0FBQztFQUM3QyxFQUFFLElBQUksY0FBYyxHQUFHLEtBQUs7RUFDNUIsTUFBTSxVQUFVO0VBQ2hCLE1BQU0sYUFBYTtFQUNuQixNQUFNLFNBQVMsQ0FBQztFQUNoQixFQUFFLElBQUksS0FBSyxHQUFHLEVBQUU7RUFDaEIsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDO0FBQ3JCO0VBQ0EsRUFBRSxJQUFJLElBQUksRUFBRTtFQUNaLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxLQUFLLEdBQUcsQ0FBQyxJQUFJLEtBQUssSUFBSSxVQUFVLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQztBQUNuRTtFQUNBLElBQUksSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO0VBQ25CLE1BQU0sY0FBYyxHQUFHLEtBQUssR0FBRyxVQUFVLENBQUM7RUFDMUMsS0FBSyxNQUFNLElBQUksS0FBSyxJQUFJLFVBQVUsRUFBRTtFQUNwQyxNQUFNLGNBQWMsR0FBRyxLQUFLLEdBQUcsVUFBVSxDQUFDO0VBQzFDLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxRQUFRLElBQUksY0FBYyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUU7RUFDaEUsTUFBTSxjQUFjLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0VBQzFDLEtBQUs7QUFDTDtFQUNBLElBQUksS0FBSyxHQUFHO0VBQ1osTUFBTSxTQUFTLEVBQUUsSUFBSTtFQUNyQixNQUFNLFlBQVksRUFBRSxjQUFjO0VBQ2xDLE1BQU0sY0FBYyxFQUFFLGNBQWM7RUFDcEMsS0FBSyxDQUFDO0VBQ04sSUFBSSxTQUFTLEdBQUc7RUFDaEIsTUFBTSxTQUFTLEVBQUUsS0FBSztFQUN0QixLQUFLLENBQUM7RUFDTixHQUFHLE1BQU07RUFDVCxJQUFJLFVBQVUsR0FBRyxjQUFjLENBQUM7QUFDaEM7RUFDQSxJQUFJLElBQUksY0FBYyxHQUFHLENBQUMsRUFBRTtFQUM1QixNQUFNLFVBQVUsR0FBRyxjQUFjLEdBQUcsVUFBVSxDQUFDO0VBQy9DLE1BQU0sSUFBSSxDQUFDLFFBQVEsRUFBRSxVQUFVLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxVQUFVLEdBQUcsY0FBYyxLQUFLLENBQUMsRUFBRSxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxjQUFjLENBQUM7RUFDdEksS0FBSyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksY0FBYyxHQUFHLFlBQVksRUFBRTtFQUNsRSxNQUFNLGNBQWMsR0FBRyxVQUFVLEdBQUcsWUFBWSxDQUFDO0VBQ2pELEtBQUssTUFBTSxJQUFJLFVBQVUsSUFBSSxjQUFjLElBQUksVUFBVSxFQUFFO0VBQzNELE1BQU0sY0FBYyxHQUFHLFFBQVEsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLENBQUMsQ0FBQztFQUM5RCxNQUFNLFVBQVUsR0FBRyxRQUFRLEdBQUcsQ0FBQyxHQUFHLFVBQVUsR0FBRyxDQUFDLENBQUM7RUFDakQsS0FBSyxNQUFNLElBQUksY0FBYyxJQUFJLFVBQVUsRUFBRTtFQUM3QyxNQUFNLFVBQVUsR0FBRyxjQUFjLEdBQUcsVUFBVSxDQUFDO0VBQy9DLE1BQU0sSUFBSSxDQUFDLFFBQVEsRUFBRSxVQUFVLEdBQUcsVUFBVSxHQUFHLFlBQVksQ0FBQyxLQUFLLElBQUksVUFBVSxHQUFHLGNBQWMsS0FBSyxDQUFDLEVBQUUsVUFBVSxHQUFHLENBQUMsQ0FBQztFQUN2SCxLQUFLO0FBQ0w7RUFDQSxJQUFJLGFBQWEsR0FBRyxZQUFZLENBQUMsY0FBYyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUU7RUFDMUQsTUFBTSxVQUFVLEVBQUUsY0FBYztFQUNoQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0VBQ1IsSUFBSSxTQUFTLEdBQUcsWUFBWSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFO0VBQ3RELE1BQU0sVUFBVSxFQUFFLFVBQVU7RUFDNUIsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNSO0VBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO0VBQ25CLE1BQU0sSUFBSSxhQUFhLEtBQUssU0FBUyxFQUFFLGNBQWMsR0FBRyxVQUFVLENBQUM7RUFDbkUsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDO0VBQ2hDLEtBQUs7QUFDTDtFQUNBLElBQUksUUFBUSxJQUFJLGNBQWMsQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsY0FBYyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUU7RUFDckYsTUFBTSxZQUFZLEVBQUUsY0FBYztFQUNsQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDVDtFQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtFQUNqQixNQUFNLEtBQUssR0FBRztFQUNkLFFBQVEsWUFBWSxFQUFFLFVBQVU7RUFDaEMsUUFBUSxVQUFVLEVBQUUsNEJBQTRCLENBQUMsY0FBYyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUU7RUFDMUUsVUFBVSxJQUFJLEVBQUUsU0FBUztFQUN6QixTQUFTLENBQUMsQ0FBQztFQUNYLFFBQVEsY0FBYyxFQUFFLGNBQWM7RUFDdEMsT0FBTyxDQUFDO0VBQ1IsS0FBSyxNQUFNO0VBQ1gsTUFBTSxLQUFLLEdBQUc7RUFDZCxRQUFRLFNBQVMsRUFBRSxJQUFJO0VBQ3ZCLFFBQVEsWUFBWSxFQUFFLFVBQVU7RUFDaEMsUUFBUSxVQUFVLEVBQUUsa0JBQWtCLENBQUMsY0FBYyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUU7RUFDaEUsVUFBVSxJQUFJLEVBQUUsYUFBYTtFQUM3QixTQUFTLENBQUMsQ0FBQztFQUNYLFFBQVEsY0FBYyxFQUFFLGNBQWM7RUFDdEMsT0FBTyxDQUFDO0VBQ1IsTUFBTSxTQUFTLEdBQUc7RUFDbEIsUUFBUSxTQUFTLEVBQUUsS0FBSztFQUN4QixRQUFRLFlBQVksRUFBRSxVQUFVO0VBQ2hDLFFBQVEsVUFBVSxFQUFFLDRCQUE0QixDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFO0VBQzFFLFVBQVUsSUFBSSxFQUFFLFNBQVM7RUFDekIsU0FBUyxDQUFDLENBQUM7RUFDWCxRQUFRLFNBQVMsRUFBRSxJQUFJO0VBQ3ZCLE9BQU8sQ0FBQztFQUNSLEtBQUs7RUFDTCxHQUFHO0FBQ0g7RUFDQSxFQUFFLE9BQU87RUFDVCxJQUFJLEtBQUssRUFBRSxLQUFLO0VBQ2hCLElBQUksU0FBUyxFQUFFLFNBQVM7RUFDeEIsR0FBRyxDQUFDO0VBQ0osQ0FBQyxDQUFDO0FBQ0Y7RUFDQSxJQUFJLFFBQVEsR0FBRyxTQUFTLFFBQVEsQ0FBQyxJQUFJLEVBQUU7RUFDdkMsRUFBRSxPQUFPLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsQ0FBQztFQUN2QyxDQUFDLENBQUM7RUFDRixJQUFJLFNBQVMsR0FBRyxTQUFTLFNBQVMsQ0FBQyxJQUFJLEVBQUU7RUFDekMsRUFBRSxPQUFPLElBQUksSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsQ0FBQztFQUN4QyxDQUFDLENBQUM7RUFDRixJQUFJLGlCQUFpQixHQUFHLFNBQVMsaUJBQWlCLENBQUMsV0FBVyxFQUFFO0VBQ2hFLEVBQUUsSUFBSSxlQUFlLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQ2xHLEVBQUUsSUFBSSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxVQUFVLENBQUM7RUFDbEMsRUFBRSxLQUFLLEdBQUcsV0FBVyxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDO0VBQ2hELEVBQUUsS0FBSyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQztFQUNoRCxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztFQUMvQixFQUFFLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdDO0VBQ0EsRUFBRSxJQUFJLFVBQVUsR0FBRyxDQUFDLEVBQUU7RUFDdEIsSUFBSSxVQUFVLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7RUFDNUMsR0FBRztBQUNIO0VBQ0EsRUFBRSxJQUFJLFVBQVUsSUFBSSxFQUFFLElBQUksVUFBVSxJQUFJLENBQUMsSUFBSSxVQUFVLElBQUksR0FBRyxJQUFJLFVBQVUsSUFBSSxHQUFHLEVBQUU7RUFDckYsSUFBSSxPQUFPLE1BQU0sQ0FBQztFQUNsQixHQUFHO0FBQ0g7RUFDQSxFQUFFLElBQUksVUFBVSxJQUFJLEdBQUcsSUFBSSxVQUFVLElBQUksR0FBRyxFQUFFO0VBQzlDLElBQUksT0FBTyxPQUFPLENBQUM7RUFDbkIsR0FBRztBQUNIO0VBQ0EsRUFBRSxJQUFJLGVBQWUsS0FBSyxJQUFJLEVBQUU7RUFDaEMsSUFBSSxJQUFJLFVBQVUsSUFBSSxFQUFFLElBQUksVUFBVSxJQUFJLEdBQUcsRUFBRTtFQUMvQyxNQUFNLE9BQU8sSUFBSSxDQUFDO0VBQ2xCLEtBQUssTUFBTTtFQUNYLE1BQU0sT0FBTyxNQUFNLENBQUM7RUFDcEIsS0FBSztFQUNMLEdBQUc7QUFDSDtFQUNBLEVBQUUsT0FBTyxVQUFVLENBQUM7RUFDcEIsQ0FBQyxDQUFDO0FBQ0Y7RUFDQSxJQUFJLGdCQUFnQixHQUFHLFNBQVMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFO0VBQ3ZEO0VBQ0EsRUFBRSxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztFQUN4QyxFQUFFLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0VBQ3BELEVBQUUsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7RUFDdEQsRUFBRSxJQUFJLFVBQVUsQ0FBQztBQUNqQjtFQUNBLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7RUFDdEIsSUFBSSxJQUFJLGdCQUFnQixHQUFHLElBQUksQ0FBQyxVQUFVLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDL0U7RUFDQSxJQUFJLElBQUksT0FBTyxJQUFJLENBQUMsYUFBYSxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRTtFQUN4RixNQUFNLGdCQUFnQixJQUFJLFNBQVMsR0FBRyxHQUFHLENBQUM7RUFDMUMsS0FBSztBQUNMO0VBQ0EsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsR0FBRyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7RUFDL0UsR0FBRyxNQUFNO0VBQ1QsSUFBSSxVQUFVLEdBQUcsU0FBUyxDQUFDO0VBQzNCLEdBQUc7QUFDSDtFQUNBLEVBQUUsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO0VBQzlGLEVBQUUsSUFBSSxVQUFVLEdBQUcsV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7RUFDbkQsRUFBRSxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7QUFDN0Y7RUFDQSxFQUFFLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLFNBQVMsRUFBRTtFQUNuRCxJQUFJLFlBQVksR0FBRyxVQUFVLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7RUFDdEQsR0FBRztBQUNIO0VBQ0EsRUFBRSxJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxJQUFJLEVBQUUsQ0FBQztFQUNqRCxFQUFFLElBQUksWUFBWSxHQUFHLHFCQUFxQixDQUFDO0VBQzNDLElBQUksWUFBWSxFQUFFLFlBQVk7RUFDOUIsSUFBSSxjQUFjLEVBQUUsY0FBYztFQUNsQyxHQUFTLENBQUMsQ0FBQztFQUNYLEVBQUUsY0FBYyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztFQUN0QyxFQUFFLElBQUksS0FBSyxHQUFHO0VBQ2QsSUFBSSxVQUFVLEVBQUUsVUFBVTtFQUMxQixJQUFJLFVBQVUsRUFBRSxVQUFVO0VBQzFCLElBQUksU0FBUyxFQUFFLFNBQVM7RUFDeEIsSUFBSSxVQUFVLEVBQUUsVUFBVTtFQUMxQixJQUFJLFlBQVksRUFBRSxZQUFZO0VBQzlCLElBQUksV0FBVyxFQUFFLFdBQVc7RUFDNUIsSUFBSSxVQUFVLEVBQUUsVUFBVTtFQUMxQixJQUFJLGNBQWMsRUFBRSxjQUFjO0VBQ2xDLEdBQUcsQ0FBQztBQUNKO0VBQ0EsRUFBRSxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7RUFDbEQsSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLEdBQUcsU0FBUyxDQUFDO0VBQ3JDLEdBQUc7QUFDSDtFQUNBLEVBQUUsT0FBTyxLQUFLLENBQUM7RUFDZixDQUFDLENBQUM7RUFDRixJQUFJLFlBQVksR0FBRyxTQUFTLFlBQVksQ0FBQyxJQUFJLEVBQUU7RUFDL0MsRUFBRSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7RUFDcEIsSUFBSSxPQUFPLENBQUMsQ0FBQztFQUNiLEdBQUc7QUFDSDtFQUNBLEVBQUUsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDLFlBQVksRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUM7RUFDdkwsRUFBRSxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVTtFQUNsQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUTtFQUM5QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUTtFQUM5QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVTtFQUNsQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVTtFQUNsQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWTtFQUN0QyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYztFQUMxQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVTtFQUNsQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUztFQUNoQyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYTtFQUN4QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVztFQUNwQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSTtFQUN0QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0VBQy9CLEVBQUUsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDO0VBQ3RCLEVBQUUsSUFBSSxVQUFVLENBQUM7RUFDakIsRUFBRSxJQUFJLFdBQVcsQ0FBQztFQUNsQixFQUFFLElBQUksY0FBYyxHQUFHLENBQUMsQ0FBQztBQUN6QjtFQUNBLEVBQUUsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxDQUFDLEVBQUU7RUFDckMsSUFBSSxPQUFPLENBQUMsQ0FBQztFQUNiLEdBQUc7QUFDSDtFQUNBLEVBQUUsSUFBSSxjQUFjLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCO0VBQ0EsRUFBRSxJQUFJLFFBQVEsRUFBRTtFQUNoQixJQUFJLGNBQWMsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUN6QztBQUNBO0VBQ0EsSUFBSSxJQUFJLFVBQVUsR0FBRyxjQUFjLEtBQUssQ0FBQyxJQUFJLFVBQVUsR0FBRyxjQUFjLEdBQUcsVUFBVSxFQUFFO0VBQ3ZGLE1BQU0sY0FBYyxHQUFHLEVBQUUsVUFBVSxHQUFHLFVBQVUsR0FBRyxZQUFZLElBQUksVUFBVSxHQUFHLFVBQVUsQ0FBQyxHQUFHLFVBQVUsR0FBRyxjQUFjLENBQUMsQ0FBQztFQUMzSCxLQUFLO0FBQ0w7QUFDQTtFQUNBLElBQUksSUFBSSxVQUFVLEVBQUU7RUFDcEIsTUFBTSxjQUFjLElBQUksUUFBUSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNuRCxLQUFLO0VBQ0wsR0FBRyxNQUFNO0VBQ1QsSUFBSSxJQUFJLFVBQVUsR0FBRyxjQUFjLEtBQUssQ0FBQyxJQUFJLFVBQVUsR0FBRyxjQUFjLEdBQUcsVUFBVSxFQUFFO0VBQ3ZGLE1BQU0sY0FBYyxHQUFHLFlBQVksR0FBRyxVQUFVLEdBQUcsY0FBYyxDQUFDO0VBQ2xFLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxVQUFVLEVBQUU7RUFDcEIsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNsRCxLQUFLO0VBQ0wsR0FBRztBQUNIO0VBQ0EsRUFBRSxXQUFXLEdBQUcsY0FBYyxHQUFHLFVBQVUsQ0FBQztFQUM1QyxFQUFFLGNBQWMsR0FBRyxjQUFjLEdBQUcsV0FBVyxDQUFDO0FBQ2hEO0VBQ0EsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFO0VBQ2pCLElBQUksVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0VBQzVELEdBQUcsTUFBTTtFQUNULElBQUksVUFBVSxHQUFHLFVBQVUsR0FBRyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEdBQUcsY0FBYyxDQUFDO0VBQ2hFLEdBQUc7QUFDSDtFQUNBLEVBQUUsSUFBSSxhQUFhLEtBQUssSUFBSSxFQUFFO0VBQzlCLElBQUksSUFBSSxnQkFBZ0IsQ0FBQztFQUN6QixJQUFJLElBQUksU0FBUyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUM7RUFDakMsSUFBSSxnQkFBZ0IsR0FBRyxVQUFVLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ3ZELElBQUksV0FBVyxHQUFHLFNBQVMsSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLENBQUM7RUFDdEUsSUFBSSxVQUFVLEdBQUcsV0FBVyxHQUFHLFdBQVcsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9EO0VBQ0EsSUFBSSxJQUFJLFVBQVUsS0FBSyxJQUFJLEVBQUU7RUFDN0IsTUFBTSxnQkFBZ0IsR0FBRyxRQUFRLEdBQUcsVUFBVSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxVQUFVLENBQUM7RUFDakYsTUFBTSxXQUFXLEdBQUcsU0FBUyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztFQUN0RSxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFDckI7RUFDQSxNQUFNLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsRUFBRTtFQUM3RCxRQUFRLFVBQVUsSUFBSSxTQUFTLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsQ0FBQztFQUN0RyxPQUFPO0FBQ1A7RUFDQSxNQUFNLFVBQVUsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0VBQ2pELE1BQU0sVUFBVSxJQUFJLFdBQVcsSUFBSSxDQUFDLFNBQVMsR0FBRyxXQUFXLENBQUMsV0FBVyxJQUFJLENBQUMsQ0FBQztFQUM3RSxLQUFLO0VBQ0wsR0FBRztBQUNIO0VBQ0EsRUFBRSxPQUFPLFVBQVUsQ0FBQztFQUNwQixDQUFDLENBQUM7RUFDRixJQUFJLGNBQWMsR0FBRyxTQUFTLGNBQWMsQ0FBQyxJQUFJLEVBQUU7RUFDbkQsRUFBRSxPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDaEcsQ0FBQyxDQUFDO0VBQ0YsSUFBSSxhQUFhLEdBQUcsU0FBUyxhQUFhLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRTtFQUM1RCxFQUFFLE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEtBQUssRUFBRSxHQUFHLEVBQUU7RUFDaEQsSUFBSSxPQUFPLEtBQUssSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQzdDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLENBQUM7RUFDekQsQ0FBQyxDQUFDO0FBQ0Y7RUFDQSxJQUFJLDRCQUE0QixHQUFHLFNBQVMsV0FBVyxDQUFDLElBQUksRUFBRTtFQUM5RCxFQUFFLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztFQUM3RixFQUFFLElBQUksVUFBVSxFQUFFLFdBQVcsQ0FBQztFQUM5QixFQUFFLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7QUFDOUQ7RUFDQSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO0VBQ3RCLElBQUksVUFBVSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0VBQ3hELEdBQUcsTUFBTTtFQUNULElBQUksV0FBVyxHQUFHLGFBQWEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO0VBQ25ELEdBQUc7QUFDSDtFQUNBLEVBQUUsSUFBSSxLQUFLLEdBQUc7RUFDZCxJQUFJLE9BQU8sRUFBRSxDQUFDO0VBQ2QsSUFBSSxVQUFVLEVBQUUsRUFBRTtFQUNsQixJQUFJLGdCQUFnQixFQUFFLEVBQUU7RUFDeEIsR0FBRyxDQUFDO0FBQ0o7RUFDQSxFQUFFLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtFQUN6QixJQUFJLElBQUksZUFBZSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxlQUFlLEdBQUcsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUM7RUFDdkksSUFBSSxJQUFJLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsY0FBYyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsZUFBZSxHQUFHLG1CQUFtQixHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDO0VBQ2pJLElBQUksSUFBSSxXQUFXLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLGFBQWEsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssR0FBRyxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7RUFDN0csSUFBSSxLQUFLLEdBQUcsY0FBYyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUU7RUFDdEMsTUFBTSxlQUFlLEVBQUUsZUFBZTtFQUN0QyxNQUFNLFNBQVMsRUFBRSxTQUFTO0VBQzFCLE1BQU0sV0FBVyxFQUFFLFdBQVc7RUFDOUIsS0FBSyxDQUFDLENBQUM7RUFDUCxHQUFHLE1BQU07RUFDVCxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtFQUN2QixNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0VBQy9CLEtBQUssTUFBTTtFQUNYLE1BQU0sS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7RUFDaEMsS0FBSztFQUNMLEdBQUc7QUFDSDtFQUNBLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssR0FBRztFQUN6QixJQUFJLE9BQU8sRUFBRSxDQUFDO0VBQ2QsR0FBRyxDQUFDO0VBQ0osRUFBRSxJQUFJLFVBQVUsRUFBRSxLQUFLLENBQUMsS0FBSyxHQUFHLFVBQVUsR0FBRyxJQUFJLENBQUM7RUFDbEQsRUFBRSxJQUFJLFdBQVcsRUFBRSxLQUFLLENBQUMsTUFBTSxHQUFHLFdBQVcsR0FBRyxJQUFJLENBQUM7QUFDckQ7RUFDQSxFQUFFLElBQUksTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixJQUFJLE1BQU0sQ0FBQyxXQUFXLEVBQUU7RUFDaEUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtFQUN4QixNQUFNLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7RUFDMUMsS0FBSyxNQUFNO0VBQ1gsTUFBTSxLQUFLLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0VBQ3pDLEtBQUs7RUFDTCxHQUFHO0FBQ0g7RUFDQSxFQUFFLE9BQU8sS0FBSyxDQUFDO0VBQ2YsQ0FBQyxDQUFDO0VBQ0YsSUFBSSxrQkFBa0IsR0FBRyxTQUFTLGtCQUFrQixDQUFDLElBQUksRUFBRTtFQUMzRCxFQUFFLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0VBQ2pILEVBQUUsSUFBSSxLQUFLLEdBQUcsNEJBQTRCLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakQ7RUFDQSxFQUFFLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtFQUN6QixJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsR0FBRyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO0VBQ3RGLElBQUksS0FBSyxDQUFDLFVBQVUsR0FBRyxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztFQUN4RSxHQUFHLE1BQU07RUFDVCxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtFQUN2QixNQUFNLEtBQUssQ0FBQyxVQUFVLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7RUFDcEUsS0FBSyxNQUFNO0VBQ1gsTUFBTSxLQUFLLENBQUMsVUFBVSxHQUFHLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO0VBQ3JFLEtBQUs7RUFDTCxHQUFHO0FBQ0g7RUFDQSxFQUFFLE9BQU8sS0FBSyxDQUFDO0VBQ2YsQ0FBQyxDQUFDO0VBQ0Y7QUFDQTtBQUNBO0FBQ0E7RUFDQSxJQUFJLGtCQUFrQixHQUFHO0VBQ3pCLEVBQUUsYUFBYSxFQUFFO0VBQ2pCLElBQUksSUFBSSxFQUFFLE9BQU87RUFDakIsSUFBSSxPQUFPLEVBQUUsSUFBSTtFQUNqQixHQUFHO0VBQ0gsRUFBRSxjQUFjLEVBQUU7RUFDbEIsSUFBSSxJQUFJLEVBQUUsT0FBTztFQUNqQixJQUFJLE9BQU8sRUFBRSxLQUFLO0VBQ2xCLEdBQUc7RUFDSCxFQUFFLE1BQU0sRUFBRTtFQUNWLElBQUksSUFBSSxFQUFFLE9BQU87RUFDakIsSUFBSSxPQUFPLEVBQUUsSUFBSTtFQUNqQixHQUFHO0VBQ0gsRUFBRSxRQUFRLEVBQUU7RUFDWixJQUFJLElBQUksRUFBRSxNQUFNO0VBQ2hCLElBQUksT0FBTyxFQUFFLElBQUk7RUFDakIsR0FBRztFQUNILEVBQUUsUUFBUSxFQUFFO0VBQ1osSUFBSSxJQUFJLEVBQUUsT0FBTztFQUNqQixJQUFJLE9BQU8sRUFBRSxLQUFLO0VBQ2xCLEdBQUc7RUFDSCxFQUFFLGFBQWEsRUFBRTtFQUNqQixJQUFJLElBQUksRUFBRSxNQUFNO0VBQ2hCLElBQUksT0FBTyxFQUFFLElBQUk7RUFDakIsR0FBRztFQUNILEVBQUUsVUFBVSxFQUFFO0VBQ2QsSUFBSSxJQUFJLEVBQUUsT0FBTztFQUNqQixJQUFJLE9BQU8sRUFBRSxLQUFLO0VBQ2xCLEdBQUc7RUFDSCxFQUFFLGFBQWEsRUFBRTtFQUNqQixJQUFJLElBQUksRUFBRSxNQUFNO0VBQ2hCLElBQUksT0FBTyxFQUFFLE1BQU07RUFDbkIsR0FBRztFQUNILEVBQUUsT0FBTyxFQUFFO0VBQ1gsSUFBSSxJQUFJLEVBQUUsTUFBTTtFQUNoQixJQUFJLE9BQU8sRUFBRSxNQUFNO0VBQ25CLEdBQUc7RUFDSCxFQUFFLElBQUksRUFBRTtFQUNSLElBQUksSUFBSSxFQUFFLE9BQU87RUFDakIsSUFBSSxPQUFPLEVBQUUsS0FBSztFQUNsQixHQUFHO0VBQ0gsRUFBRSxTQUFTLEVBQUU7RUFDYixJQUFJLElBQUksRUFBRSxNQUFNO0VBQ2hCLElBQUksT0FBTyxFQUFFLFlBQVk7RUFDekIsR0FBRztFQUNILEVBQUUsU0FBUyxFQUFFO0VBQ2IsSUFBSSxJQUFJLEVBQUUsT0FBTztFQUNqQixJQUFJLE9BQU8sRUFBRSxJQUFJO0VBQ2pCLEdBQUc7RUFDSCxFQUFFLFlBQVksRUFBRTtFQUNoQixJQUFJLElBQUksRUFBRSxNQUFNO0VBQ2hCLElBQUksT0FBTyxFQUFFLElBQUk7RUFDakIsR0FBRztFQUNILEVBQUUsSUFBSSxFQUFFO0VBQ1IsSUFBSSxJQUFJLEVBQUUsT0FBTztFQUNqQixJQUFJLE9BQU8sRUFBRSxLQUFLO0VBQ2xCLEdBQUc7RUFDSCxFQUFFLGFBQWEsRUFBRTtFQUNqQixJQUFJLElBQUksRUFBRSxPQUFPO0VBQ2pCLElBQUksT0FBTyxFQUFFLEtBQUs7RUFDbEIsR0FBRztFQUNILEVBQUUsUUFBUSxFQUFFO0VBQ1osSUFBSSxJQUFJLEVBQUUsT0FBTztFQUNqQixJQUFJLE9BQU8sRUFBRSxJQUFJO0VBQ2pCLEdBQUc7RUFDSCxFQUFFLFlBQVksRUFBRTtFQUNoQixJQUFJLElBQUksRUFBRSxNQUFNO0VBQ2hCLElBQUksT0FBTyxFQUFFLENBQUM7RUFDZCxHQUFHO0VBQ0gsRUFBRSxRQUFRLEVBQUU7RUFDWixJQUFJLElBQUksRUFBRSxNQUFNO0VBQ2hCLElBQUksT0FBTyxFQUFFLElBQUk7RUFDakIsR0FBRztFQUNILEVBQUUsZ0JBQWdCLEVBQUU7RUFDcEIsSUFBSSxJQUFJLEVBQUUsT0FBTztFQUNqQixJQUFJLE9BQU8sRUFBRSxLQUFLO0VBQ2xCLEdBQUc7RUFDSCxFQUFFLFlBQVksRUFBRTtFQUNoQixJQUFJLElBQUksRUFBRSxPQUFPO0VBQ2pCLElBQUksT0FBTyxFQUFFLEtBQUs7RUFDbEIsR0FBRztFQUNILEVBQUUsWUFBWSxFQUFFO0VBQ2hCLElBQUksSUFBSSxFQUFFLE9BQU87RUFDakIsSUFBSSxPQUFPLEVBQUUsSUFBSTtFQUNqQixHQUFHO0VBQ0gsRUFBRSxVQUFVLEVBQUU7RUFDZCxJQUFJLElBQUksRUFBRSxLQUFLO0VBQ2YsSUFBSSxPQUFPLEVBQUUsSUFBSTtFQUNqQixHQUFHO0VBQ0gsRUFBRSxJQUFJLEVBQUU7RUFDUixJQUFJLElBQUksRUFBRSxNQUFNO0VBQ2hCLElBQUksT0FBTyxFQUFFLENBQUM7RUFDZCxHQUFHO0VBQ0gsRUFBRSxHQUFHLEVBQUU7RUFDUCxJQUFJLElBQUksRUFBRSxPQUFPO0VBQ2pCLElBQUksT0FBTyxFQUFFLEtBQUs7RUFDbEIsR0FBRztFQUNILEVBQUUsWUFBWSxFQUFFO0VBQ2hCLElBQUksSUFBSSxFQUFFLE1BQU07RUFDaEIsSUFBSSxPQUFPLEVBQUUsQ0FBQztFQUNkLEdBQUc7RUFDSCxFQUFFLGNBQWMsRUFBRTtFQUNsQixJQUFJLElBQUksRUFBRSxNQUFNO0VBQ2hCLElBQUksT0FBTyxFQUFFLENBQUM7RUFDZCxHQUFHO0VBQ0gsRUFBRSxZQUFZLEVBQUU7RUFDaEIsSUFBSSxJQUFJLEVBQUUsTUFBTTtFQUNoQixJQUFJLE9BQU8sRUFBRSxDQUFDO0VBQ2QsR0FBRztFQUNILEVBQUUsS0FBSyxFQUFFO0VBQ1QsSUFBSSxJQUFJLEVBQUUsTUFBTTtFQUNoQixJQUFJLE9BQU8sRUFBRSxHQUFHO0VBQ2hCLEdBQUc7RUFDSCxFQUFFLEtBQUssRUFBRTtFQUNULElBQUksSUFBSSxFQUFFLE9BQU87RUFDakIsSUFBSSxPQUFPLEVBQUUsSUFBSTtFQUNqQixHQUFHO0VBQ0gsRUFBRSxZQUFZLEVBQUU7RUFDaEIsSUFBSSxJQUFJLEVBQUUsT0FBTztFQUNqQixJQUFJLE9BQU8sRUFBRSxLQUFLO0VBQ2xCLEdBQUc7RUFDSCxFQUFFLFNBQVMsRUFBRTtFQUNiLElBQUksSUFBSSxFQUFFLE9BQU87RUFDakIsSUFBSSxPQUFPLEVBQUUsSUFBSTtFQUNqQixHQUFHO0VBQ0gsRUFBRSxjQUFjLEVBQUU7RUFDbEIsSUFBSSxJQUFJLEVBQUUsTUFBTTtFQUNoQixJQUFJLE9BQU8sRUFBRSxDQUFDO0VBQ2QsR0FBRztFQUNILEVBQUUsTUFBTSxFQUFFO0VBQ1YsSUFBSSxJQUFJLEVBQUUsT0FBTztFQUNqQixJQUFJLE9BQU8sRUFBRSxJQUFJO0VBQ2pCLEdBQUc7RUFDSCxFQUFFLFlBQVksRUFBRTtFQUNoQixJQUFJLElBQUksRUFBRSxPQUFPO0VBQ2pCLElBQUksT0FBTyxFQUFFLElBQUk7RUFDakIsR0FBRztFQUNILEVBQUUsYUFBYSxFQUFFO0VBQ2pCLElBQUksSUFBSSxFQUFFLE9BQU87RUFDakIsSUFBSSxPQUFPLEVBQUUsS0FBSztFQUNsQixHQUFHO0VBQ0gsRUFBRSxRQUFRLEVBQUU7RUFDWixJQUFJLElBQUksRUFBRSxPQUFPO0VBQ2pCLElBQUksT0FBTyxFQUFFLEtBQUs7RUFDbEIsR0FBRztFQUNILEVBQUUsY0FBYyxFQUFFO0VBQ2xCLElBQUksSUFBSSxFQUFFLE9BQU87RUFDakIsSUFBSSxPQUFPLEVBQUUsSUFBSTtFQUNqQixHQUFHO0VBQ0gsQ0FBQyxDQUFDO0VBQ0YsSUFBSSxhQUFhLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEdBQUcsRUFBRSxHQUFHLEVBQUU7RUFDL0UsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDO0VBQzdDLEVBQUUsT0FBTyxHQUFHLENBQUM7RUFDYixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7RUFDUCxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsR0FBRyxFQUFFLEdBQUcsRUFBRTtFQUN2RSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7RUFDMUMsRUFBRSxPQUFPLEdBQUcsQ0FBQztFQUNiLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztFQUNQO0VBQ0EsSUFBSSxnQkFBZ0IsR0FBRyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNuRDtFQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVMsNkJBQTZCLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRTtFQUN6RCxFQUFFLElBQUksTUFBTSxJQUFJLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztFQUNoQyxFQUFFLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztFQUNsQixFQUFFLElBQUksVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7RUFDdkMsRUFBRSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDYjtFQUNBLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0VBQzFDLElBQUksR0FBRyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN4QixJQUFJLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUztFQUM3QyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDOUIsR0FBRztBQUNIO0VBQ0EsRUFBRSxPQUFPLE1BQU0sQ0FBQztFQUNoQixDQUFDO0VBQ0Q7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTLHdCQUF3QixDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUU7RUFDcEQsRUFBRSxJQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7RUFDaEMsRUFBRSxJQUFJLE1BQU0sR0FBRyw2QkFBNkIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7RUFDL0QsRUFBRSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDYjtFQUNBLEVBQUUsSUFBSSxNQUFNLENBQUMscUJBQXFCLEVBQUU7RUFDcEMsSUFBSSxJQUFJLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNoRTtFQUNBLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7RUFDbEQsTUFBTSxHQUFHLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDaEMsTUFBTSxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVM7RUFDL0MsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFLFNBQVM7RUFDN0UsTUFBTSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2hDLEtBQUs7RUFDTCxHQUFHO0FBQ0g7RUFDQSxFQUFFLE9BQU8sTUFBTSxDQUFDO0VBQ2hCLENBQUM7RUFDRDtFQUNBLElBQUkscUJBQXFCLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDeEQ7RUFDQTtFQUNBLElBQUksa0JBQWtCLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDckQ7RUFDQTtFQUNBLElBQUksaUJBQWlCLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDcEQ7RUFDQTtFQUNBLElBQUksbUJBQW1CLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdEQ7RUFDQTtFQUNBLElBQUksNEJBQTRCLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDL0Q7RUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBUyxPQUFPLENBQUMsR0FBRyxFQUFFO0VBQ3RCLEVBQUUseUJBQXlCLENBQUM7QUFDNUI7RUFDQSxFQUFFLElBQUksT0FBTyxNQUFNLEtBQUssVUFBVSxJQUFJLE9BQU8sTUFBTSxDQUFDLFFBQVEsS0FBSyxRQUFRLEVBQUU7RUFDM0UsSUFBSSxPQUFPLEdBQUcsU0FBUyxPQUFPLENBQUMsR0FBRyxFQUFFO0VBQ3BDLE1BQU0sT0FBTyxPQUFPLEdBQUcsQ0FBQztFQUN4QixLQUFLLENBQUM7RUFDTixHQUFHLE1BQU07RUFDVCxJQUFJLE9BQU8sR0FBRyxTQUFTLE9BQU8sQ0FBQyxHQUFHLEVBQUU7RUFDcEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLElBQUksR0FBRyxDQUFDLFdBQVcsS0FBSyxNQUFNLElBQUksR0FBRyxLQUFLLE1BQU0sQ0FBQyxTQUFTLEdBQUcsUUFBUSxHQUFHLE9BQU8sR0FBRyxDQUFDO0VBQ25JLEtBQUssQ0FBQztFQUNOLEdBQUc7QUFDSDtFQUNBLEVBQUUsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDdEIsQ0FBQztFQUNEO0VBQ0EsSUFBSSxpQkFBaUIsR0FBRyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNwRDtFQUNBO0VBQ0EsSUFBSSxlQUFlLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUM7RUFDbEQsSUFBSSx1QkFBdUIsZ0JBQWdCLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUNsRjtFQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLElBQUksZUFBZSxHQUFHLFNBQVMsZUFBZSxDQUFDLElBQUksRUFBRTtFQUNyRCxFQUFFLElBQUksV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLENBQUM7RUFDNUMsRUFBRSxJQUFJLFlBQVksRUFBRSxLQUFLLENBQUM7QUFDMUI7RUFDQSxFQUFFLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRTtFQUNoQixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQzdDLEdBQUcsTUFBTTtFQUNULElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDdkIsR0FBRztBQUNIO0VBQ0EsRUFBRSxXQUFXLEdBQUcsS0FBSyxHQUFHLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQztBQUN0RDtFQUNBLEVBQUUsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO0VBQ3ZCLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNyRCxJQUFJLFdBQVcsR0FBRyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssQ0FBQyxDQUFDO0FBQ3RFO0VBQ0EsSUFBSSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksR0FBRyxDQUFDLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxFQUFFO0VBQ25HLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQztFQUN6QixLQUFLO0VBQ0wsR0FBRyxNQUFNO0VBQ1QsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksSUFBSSxLQUFLLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztFQUM5RixHQUFHO0FBQ0g7RUFDQSxFQUFFLElBQUksWUFBWSxHQUFHLEtBQUssS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDO0VBQ2pELEVBQUUsT0FBTztFQUNULElBQUksYUFBYSxFQUFFLElBQUk7RUFDdkIsSUFBSSxjQUFjLEVBQUUsV0FBVztFQUMvQixJQUFJLGNBQWMsRUFBRSxXQUFXO0VBQy9CLElBQUksY0FBYyxFQUFFLFdBQVc7RUFDL0IsSUFBSSxlQUFlLEVBQUUsWUFBWTtBQUNqQztFQUNBLEdBQUcsQ0FBQztFQUNKLENBQUMsQ0FBQztBQUNGO0VBQ0EsSUFBSSxhQUFhLEdBQUcsU0FBUyxhQUFhLENBQUMsSUFBSSxFQUFFO0VBQ2pELEVBQUUsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQ2pCO0VBQ0EsRUFBRSxJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssS0FBSyxFQUFFO0VBQ3hFLElBQUksS0FBSyxDQUFDLEtBQUssR0FBRyxPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssUUFBUSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0VBQzNHLEdBQUc7QUFDSDtFQUNBLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO0VBQ2pCLElBQUksS0FBSyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7QUFDaEM7RUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtFQUN2QixNQUFNLEtBQUssQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztFQUM1RSxLQUFLLE1BQU07RUFDWCxNQUFNLEtBQUssQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztFQUM1RSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDN0QsSUFBSSxLQUFLLENBQUMsVUFBVSxHQUFHLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksR0FBRyxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEdBQUcs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QTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztFQUVBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUVBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7RUF4S0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQ0RBOztBQUVBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztFQUVBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7RUFFQTtFQUVBO0VBQ0E7RUFDQTtFQUNBOztFQUVBOztFQUVBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7RUFFQTtFQUNBOztFQUVBOztFQUVBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0VBRUE7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0VBckdBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3lCQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7OztFQXBJQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNPQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7RUE1Q0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNXQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7RUFFQTs7RUFFQTtFQUNBOztFQUVBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7RUFFQTtFQUNBO0VBQ0E7O0VBRUE7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7RUE5RkE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNZQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztFQUVBO0VBQ0E7RUFDQTtFQUNBOzs7RUFoREE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2VBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7RUFFQTtFQUNBO0VBQ0E7RUFDQTs7O0VBdkRBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNHQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7RUF6QkE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDV0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0VBRUE7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7RUF6REE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDa0JBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7RUFFQTtFQUNBOztFQUVBO0VBQ0E7RUFDQTs7RUFFQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7RUFFQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0VBRUE7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztFQUVBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7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 diff --git a/main/styleguide/source/_patterns/molecules/twitter-box.mustache b/main/styleguide/source/_patterns/molecules/twitter-box.mustache index 00a70a083d006f18bf767a61e54c6ade27765fd0..b2a8860ab3c938502434979fb44619cede57371b 100644 --- a/main/styleguide/source/_patterns/molecules/twitter-box.mustache +++ b/main/styleguide/source/_patterns/molecules/twitter-box.mustache @@ -1,4 +1,4 @@ -<div class="mb-5 p-4 flex flex-col items-center text-center border border-grey-100 sm:mb-0"> +<div class="mb-5 p-4 flex flex-col items-center text-center border border-grey-100 h-full sm:mb-0"> <div class="flex flex-row sm:flex-col items-center"> <img class="rounded-full shadow-sm w-12 h-12 mb-4 sm:mb-2" src="https://randomuser.me/api/portraits/women/56.jpg" alt="user image"/> diff --git a/main/styleguide/source/_patterns/templates/person.mustache b/main/styleguide/source/_patterns/templates/person.mustache index c20708c254f5f794d5a7ef927e3d25eeda65ad1a..b8351f7262f0ae19c333dfe21ee6814c21d647ad 100644 --- a/main/styleguide/source/_patterns/templates/person.mustache +++ b/main/styleguide/source/_patterns/templates/person.mustache @@ -85,19 +85,19 @@ </h2> <div class="__js-root twitter-carousel-root"> <ui-twitter-carousel> - <div class="w-full flex max-w-xs"> + <div class="w-full h-full flex max-w-xs"> {{> molecules-twitter-box }} </div> - <div class="w-full flex max-w-xs"> + <div class="w-full h-full flex max-w-xs"> {{> molecules-twitter-box }} </div> - <div class="w-full flex max-w-xs"> + <div class="w-full h-full flex max-w-xs"> {{> molecules-twitter-box }} </div> - <div class="w-full flex max-w-xs"> + <div class="w-full h-full flex max-w-xs"> {{> molecules-twitter-box }} </div> - <div class="w-full flex max-w-xs"> + <div class="w-full h-full flex max-w-xs"> {{> molecules-twitter-box }} </div> </ui-twitter-carousel> diff --git a/main/styleguide/source/css/molecules/carousels.pcss b/main/styleguide/source/css/molecules/carousels.pcss index 31cde331d38ecc88387a9949d2b1a0239943decf..e43cfd550d6bd9dc58bb3027491935377ba2867d 100644 --- a/main/styleguide/source/css/molecules/carousels.pcss +++ b/main/styleguide/source/css/molecules/carousels.pcss @@ -194,7 +194,21 @@ } } -.twitter-carousel { +div.twitter-carousel { + div.slick-track { + display: flex; + } + + div.slick-slide { + display: flex; + height: auto; + margin-right: 1rem; + + & > div { + height: 100%; + } + } + .slick-arrow { right: 10%; @screen lg { diff --git a/main/templates/main/includes/newsletter_section.html b/main/templates/main/includes/newsletter_section.html index f6ce3385f4ada98c4cdadcfa19518fcb86e598c4..bf050f571dbc37af2216886fbcfeb5f4cf4538bc 100644 --- a/main/templates/main/includes/newsletter_section.html +++ b/main/templates/main/includes/newsletter_section.html @@ -18,8 +18,9 @@ placeholder="Tvůj email"/> <div class="checkbox form-field__control flex items-center mb-3"> <input type="checkbox" id="checkbox_1" name="confirmed" required=""> - <label class="text-xs font-alt font-light" for="checkbox_1">"Souhlasím se zpracováním osobních - údajů"</label> + <label class="text-xs font-alt font-light" for="checkbox_1"> + Souhlasím se zpracováním osobních údajů + </label> </div> {% include 'main/includes/form_button_animated.html' with btn_text="Odebírat" %} </form> diff --git a/main/templates/main/main_person_page.html b/main/templates/main/main_person_page.html index b5291e32c86aedcc87fa97b61b5f20af89d674ab..b3b408432672f358be54808fa4e1ccc8e976765f 100644 --- a/main/templates/main/main_person_page.html +++ b/main/templates/main/main_person_page.html @@ -64,8 +64,8 @@ <div class="__js-root twitter-carousel-root"> <ui-twitter-carousel> {% for tweet in tweet_list %} - <div class="w-full flex max-w-xs"> - <div class="mb-5 p-4 flex flex-col items-center text-center border border-grey-100 sm:mb-0"> + <div class="w-full h-full flex max-w-xs mr-2"> + <div class="mb-5 p-4 flex flex-col h-full items-center text-center border border-grey-100 sm:mb-0"> <div class="flex flex-row sm:flex-col items-center"> <img class="rounded-full shadow-sm w-12 h-12 mb-4 sm:mb-2" src="{{ tweet.author_img_url }}" @@ -87,6 +87,7 @@ </div> </section> {% endif %} + {% if article_page_list %} <section class="grid-container mb-4 xl:mb-20 justify-start"> <div class="grid-content"> @@ -115,6 +116,7 @@ </div> </section> {% endif %} + {% for people_group in page.people %} <section class="grid-container person-grid-container mb-4 xl:mb-20 justify-start"> <div class="grid-content-with-right-side"> @@ -146,7 +148,6 @@ </div> {% endfor %} </div> - </div> </section> {% endfor %} diff --git a/twitter_utils/models.py b/twitter_utils/models.py index 8453dfb36c4cf9d0d0d6c4560ce36db9ea2e806a..0f4c7115dc95b96d20c8d733ec5199aa8febc9ee 100644 --- a/twitter_utils/models.py +++ b/twitter_utils/models.py @@ -1,6 +1,14 @@ from django.db import models +class TweetQueryset(models.QuerySet): + def username(self, username): + return self.filter(author_username=username) + + def username_list(self, username_list): + return self.filter(author_username__in=username_list) + + class Tweet(models.Model): """ Model pro ukládání Tweetů getnutých v manage commandu update_tweets z API Twitteru. @@ -15,3 +23,5 @@ class Tweet(models.Model): author_username = models.CharField(max_length=128, default="PiratskaStrana") text = models.TextField() twitter_id = models.CharField(max_length=32, unique=True) + + objects = TweetQueryset.as_manager() diff --git a/twitter_utils/services.py b/twitter_utils/services.py index 95d987484c2ff01683585fe6c31a08098430f14a..030bc42e80e516ac7853438adcc3fa57914206b2 100644 --- a/twitter_utils/services.py +++ b/twitter_utils/services.py @@ -54,7 +54,7 @@ class TweetDownloadService: start_time=timezone.now() - timedelta(days=self.days_back), tweet_fields=["author_id", "created_at"], user_fields=["name", "username"], - ) # 49022430 + ) return tweets_response.data