From ff0a1c5e33006a071e5d341572b07259735a570b Mon Sep 17 00:00:00 2001 From: Quido Zientek <quido@codero.cz> Date: Tue, 30 Aug 2022 12:00:33 +0200 Subject: [PATCH] [FEATURE + FIX] blocks back-image, button, self.max_items --- .isort.cfg | 2 +- .pre-commit-config.yaml | 2 +- main/blocks.py | 15 +- ..._remove_mainhomepage_max_items_and_more.py | 138 + main/models.py | 26 +- main/static/main/css/styles.css | 260 +- main/static/main/js/main.bundle.js | 13216 +++++++++++++++- .../atoms/buttons/button-animated.mustache | 4 +- .../articles/article-carousel-item.mustache | 5 +- .../molecules/blocks/contact-block.mustache | 9 +- .../molecules/representative-box.mustache | 9 +- .../_patterns/templates/homepage.mustache | 12 +- .../source/css/molecules/sliding_button.pcss | 1 + main/templates/main/blocks/boxes_block.html | 9 +- main/templates/main/blocks/news_block.html | 47 +- main/templates/main/blocks/regions_block.html | 11 +- main/templates/main/blocks/twitter_block.html | 6 +- .../main/includes/article_carousel_item.html | 18 + .../main/includes/button_animated.html | 4 +- main/templates/main/main_articles_page.html | 8 +- 20 files changed, 13709 insertions(+), 93 deletions(-) create mode 100644 main/migrations/0026_remove_mainhomepage_max_items_and_more.py create mode 100644 main/templates/main/includes/article_carousel_item.html diff --git a/.isort.cfg b/.isort.cfg index 642718cf..340422d3 100644 --- a/.isort.cfg +++ b/.isort.cfg @@ -3,4 +3,4 @@ line_length = 88 multi_line_output = 3 include_trailing_comma = true -known_third_party = PyPDF2,arrow,bleach,bs4,captcha,celery,django,environ,faker,fastjsonschema,icalevnt,markdown,modelcluster,pirates,pytest,pytz,requests,sentry_sdk,taggit,tweepy,wagtail,wagtailmetadata,weasyprint,yaml,zoneinfo +known_third_party = PyPDF2,arrow,bleach,bs4,captcha,celery,django,environ,faker,fastjsonschema,icalevnt,markdown,modelcluster,pirates,pytest,pytz,requests,sentry_sdk,taggit,tweepy,wagtail,wagtailmetadata,weasyprint,yaml diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 547e2ea1..ba68da54 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,5 +1,5 @@ default_language_version: - python: python3.8 + python: python3.10 exclude: snapshots/ repos: diff --git a/main/blocks.py b/main/blocks.py index bbd25225..4a567c12 100644 --- a/main/blocks.py +++ b/main/blocks.py @@ -3,10 +3,10 @@ from wagtail.core.blocks import ( CharBlock, ListBlock, PageChooserBlock, + RichTextBlock, StructBlock, TextBlock, URLBlock, - RichTextBlock ) from wagtail.documents.blocks import DocumentChooserBlock from wagtail.images.blocks import ImageChooserBlock @@ -34,6 +34,7 @@ class BoxBlock(CTAMixin, StructBlock): class BoxesBlock(StructBlock): title = CharBlock(label="Nadpis") list = ListBlock(BoxBlock, label="Boxíky") + image = ImageChooserBlock(label="Obrázek pozadí", required=False) class Meta: template = "main/blocks/boxes_block.html" @@ -65,6 +66,7 @@ class NewsBlock(StructBlock): label="Titulek", help_text="Nejnovější články se načtou automaticky", ) + image = ImageChooserBlock(label="Obrázek pozadí", required=False) class Meta: template = "main/blocks/news_block.html" @@ -138,12 +140,14 @@ class RegionsBlock(StructBlock): label="Titulek", help_text="Články pro regiony se načtou automaticky", ) + image = ImageChooserBlock(label="Obrázek pozadí", required=False) class Meta: template = "main/blocks/regions_block.html" icon = "view" label = "Články pro regiony" + class TweetsBlock(StructBlock): title = CharBlock( label="Titulek", @@ -155,6 +159,7 @@ class TweetsBlock(StructBlock): icon = "openquote" label = "Tweety" + class PersonContactBlock(StructBlock): position = CharBlock(label="Název pozice", required=False) # email, phone? @@ -177,6 +182,7 @@ class PersonContactBoxBlock(CTAMixin, StructBlock): icon = "mail" label = "Kontakty" + # Footer class LinkBlock(StructBlock): text = CharBlock( @@ -200,8 +206,11 @@ class OtherLinksBlock(StructBlock): class SocialLinkBlock(LinkBlock): - icon = CharBlock(label="Ikona", help_text="Seznam ikon - https://styleguide.pirati.cz/latest/?p=viewall-atoms-icons <br/>" - "Název ikony zadejte bez tečky na začátku") # TODO CSS class name or somthing better? + icon = CharBlock( + label="Ikona", + help_text="Seznam ikon - https://styleguide.pirati.cz/latest/?p=viewall-atoms-icons <br/>" + "Název ikony zadejte bez tečky na začátku", + ) # TODO CSS class name or somthing better? class Meta: icon = "link" diff --git a/main/migrations/0026_remove_mainhomepage_max_items_and_more.py b/main/migrations/0026_remove_mainhomepage_max_items_and_more.py new file mode 100644 index 00000000..2fd64825 --- /dev/null +++ b/main/migrations/0026_remove_mainhomepage_max_items_and_more.py @@ -0,0 +1,138 @@ +# Generated by Django 4.0.7 on 2022-08-30 09:43 + +import wagtail.blocks +import wagtail.fields +import wagtail.images.blocks +from django.db import migrations + +import main.blocks + + +class Migration(migrations.Migration): + + dependencies = [ + ("main", "0025_alter_mainhomepage_social_links_and_more"), + ] + + operations = [ + migrations.RemoveField( + model_name="mainhomepage", + name="max_items", + ), + migrations.AlterField( + model_name="mainhomepage", + name="content", + field=wagtail.fields.StreamField( + [ + ( + "carousel", + wagtail.blocks.StructBlock( + [ + ( + "slides", + wagtail.blocks.ListBlock( + main.blocks.HomePageCarouseSlideBlock, + label="Obrázky s nadpisy - carouselu", + ), + ) + ] + ), + ), + ( + "news", + wagtail.blocks.StructBlock( + [ + ( + "title", + wagtail.blocks.CharBlock( + help_text="Nejnovější články se načtou automaticky", + label="Titulek", + ), + ), + ( + "image", + wagtail.images.blocks.ImageChooserBlock( + label="Obrázek pozadí", required=False + ), + ), + ] + ), + ), + ( + "people", + wagtail.blocks.StructBlock( + [ + ( + "title", + wagtail.blocks.CharBlock(label="Hlavní titulek"), + ), + ( + "list", + wagtail.blocks.ListBlock( + main.blocks.BoxBlock, label="Boxíky" + ), + ), + ] + ), + ), + ( + "regions", + wagtail.blocks.StructBlock( + [ + ( + "title", + wagtail.blocks.CharBlock( + help_text="Články pro regiony se načtou automaticky", + label="Titulek", + ), + ), + ( + "image", + wagtail.images.blocks.ImageChooserBlock( + label="Obrázek pozadí", required=False + ), + ), + ] + ), + ), + ( + "tweets", + wagtail.blocks.StructBlock( + [ + ( + "title", + wagtail.blocks.CharBlock( + help_text="Tweety budou načteny pro všechny profily uvedené v nastavení webu automaticky", + label="Titulek", + ), + ) + ] + ), + ), + ( + "boxes", + wagtail.blocks.StructBlock( + [ + ("title", wagtail.blocks.CharBlock(label="Nadpis")), + ( + "list", + wagtail.blocks.ListBlock( + main.blocks.BoxBlock, label="Boxíky" + ), + ), + ( + "image", + wagtail.images.blocks.ImageChooserBlock( + label="Obrázek pozadí", required=False + ), + ), + ] + ), + ), + ], + blank=True, + use_json_field=None, + verbose_name="Hlavní obsah", + ), + ), + ] diff --git a/main/models.py b/main/models.py index afc6da4e..df2f8202 100644 --- a/main/models.py +++ b/main/models.py @@ -47,7 +47,6 @@ class ARTICLE_TYPES(models.IntegerChoices): class MainHomePage(MenuMixin, ExtendedMetadataHomePageMixin, MetadataPageMixin, Page): - max_items = models.IntegerField("Počet tweetů na stránce", default=4) # header contact_newcomers = models.URLField( @@ -163,30 +162,21 @@ class MainHomePage(MenuMixin, ExtendedMetadataHomePageMixin, MetadataPageMixin, context["tweet_list"] = tweet_list[:4] context["show_next_tweet"] = len(tweet_list) > 4 context["regions"] = REGION_CHOICES - context["article_data_list"] = self.get_sorted_article_qs() + context["article_data_list"] = MainArticlePage.objects.filter( + region__isnull=False + ).order_by("-date")[:3] + context["article_carousel_list"] = MainArticlePage.objects.order_by("-date")[:8] return context - @staticmethod - def get_sorted_article_qs(): - last_month = timezone.now().today().replace(day=1) - timedelta(days=1) - first_day_of_last_month = last_month.replace(day=1) - - sorted_article_qs = MainArticlePage.objects.filter( - date__gt=first_day_of_last_month - ).order_by("-date") - return sorted_article_qs[:3] - def get_region_response(self, request): - last_month = timezone.now().today().replace(day=1) - timedelta(days=1) - first_day_of_last_month = last_month.replace(day=1) if request.GET.get("region", None) == "VSK": sorted_article_qs = MainArticlePage.objects.filter( - date__gt=first_day_of_last_month + region__isnull=False ).order_by("-date") else: sorted_article_qs = MainArticlePage.objects.filter( - date__gt=first_day_of_last_month, region=request.GET.get("region", None) + region=request.GET.get("region", None) ).order_by("-date") context = {"article_data_list": sorted_article_qs[:3]} data = { @@ -197,9 +187,7 @@ class MainHomePage(MenuMixin, ExtendedMetadataHomePageMixin, MetadataPageMixin, return JsonResponse(data=data, safe=False) def get_twitter_response(self, request): - tweet_paginator = Paginator( - Tweet.objects.order_by("-twitter_id"), self.max_items - ) + tweet_paginator = Paginator(Tweet.objects.order_by("-twitter_id"), 4) tweet_page = tweet_paginator.get_page(request.GET.get("page", 1)) context = {"tweet_list": tweet_page.object_list} html_content = render( diff --git a/main/static/main/css/styles.css b/main/static/main/css/styles.css index 5778a939..898aca90 100644 --- a/main/static/main/css/styles.css +++ b/main/static/main/css/styles.css @@ -1462,6 +1462,27 @@ video { max-width: none; } +@responsive { + @media (min-width: 1200px) { + .grid-container { + grid-template-columns: 240px 1fr 102px; + grid-template-areas: + "left-side content right-side"; + margin-left: 10% + } + } + @media (min-width: 2060px) { + .grid-container { + margin-left: 20% + } + } + @media (min-width: 1200px) { + .grid-container.person-grid-container { + grid-template-columns: 240px 1fr 339px + } + } +} + .grid-content { grid-area: content; } @@ -1489,6 +1510,27 @@ video { grid-row: content / right-side; } +@responsive { + /* Removes default container padding from the element. */ + /* @note: needs to be kept in sync with tailwind configuration */ + .container-padding--zero { + margin-left: -1rem; + margin-right: -1rem; + } + + @media (min-width: 1200px) { + .container-padding--zero { + margin-left: -2rem; + margin-right: -2rem + } + } + + .container-padding--auto { + margin-left: 0; + margin-right: 0; + } +} + .footer-section { height: 450px; } @@ -2151,6 +2193,191 @@ video { line-height: 1.25; } +@responsive { + .head-alt-xl, + .content-block .head-alt-xl{ + font-family: Bebas Neue, Helvetica, Arial, sans-serif; + font-size: 5.3rem; + font-weight: 400; + line-height: 0.96; + } + + .head-alt-lg, + .content-block .head-alt-lg{ + font-family: Bebas Neue, Helvetica, Arial, sans-serif; + font-size: 4rem; + font-weight: 400; + line-height: 0.96; + } + + .head-alt-md, + .content-block .head-alt-md{ + font-family: Bebas Neue, Helvetica, Arial, sans-serif; + font-size: 2.45rem; + font-weight: 400; + line-height: 0.96; + } + + .head-alt-base, + .content-block .head-alt-base{ + font-family: Bebas Neue, Helvetica, Arial, sans-serif; + font-size: 1.875rem; + font-weight: 400; + line-height: 0.96; + } + + .head-alt-sm, + .content-block .head-alt-sm{ + font-family: Bebas Neue, Helvetica, Arial, sans-serif; + font-size: 1.6rem; + font-weight: 400; + line-height: 0.96; + } + + .head-alt-xs, + .content-block .head-alt-xs{ + font-family: Bebas Neue, Helvetica, Arial, sans-serif; + font-size: 1.3rem; + font-weight: 400; + line-height: 0.96; + } + + .head-alt-2xs, + .content-block .head-alt-2xs{ + font-family: Bebas Neue, Helvetica, Arial, sans-serif; + font-size: 1.125rem; + font-weight: 400; + line-height: 0.96; + } + + + + .head-base, + .content-block .head-base{ + font-family: Roboto Condensed, Helvetica, Arial, sans-serif; + font-size: 1.875rem; + font-weight: 500; + line-height: 1.25; + } + + .head-sm, + .content-block .head-sm{ + font-family: Roboto Condensed, Helvetica, Arial, sans-serif; + font-size: 1.6rem; + font-weight: 500; + line-height: 1.25; + } + + .head-xs, + .content-block .head-xs{ + font-family: Roboto Condensed, Helvetica, Arial, sans-serif; + font-size: 1.3rem; + font-weight: 500; + line-height: 1.25; + } + + .head-2xs, + .content-block .head-2xs{ + font-family: Roboto Condensed, Helvetica, Arial, sans-serif; + font-size: 1.125rem; + font-weight: 500; + line-height: 1.25; + } + + + + .head-heavy-base, + .content-block .head-heavy-base{ + font-family: Roboto Condensed, Helvetica, Arial, sans-serif; + font-size: 1.875rem; + font-weight: 700; + line-height: 1.25; + } + + .head-heavy-sm, + .content-block .head-heavy-sm{ + font-family: Roboto Condensed, Helvetica, Arial, sans-serif; + font-size: 1.6rem; + font-weight: 700; + line-height: 1.25; + } + + .head-heavy-xs, + .content-block .head-heavy-xs{ + font-family: Roboto Condensed, Helvetica, Arial, sans-serif; + font-size: 1.3rem; + font-weight: 700; + line-height: 1.25; + } + + .head-heavy-2xs, + .content-block .head-heavy-2xs{ + font-family: Roboto Condensed, Helvetica, Arial, sans-serif; + font-size: 1.125rem; + font-weight: 700; + line-height: 1.25; + } + + + + .head-allcaps-2xs, + .content-block .head-allcaps-2xs{ + font-family: Roboto Condensed, Helvetica, Arial, sans-serif; + font-size: 1.125rem; + font-weight: 400; + text-transform: uppercase; + line-height: 1.25; + } + + .head-allcaps-3xs, + .content-block .head-allcaps-3xs{ + font-family: Roboto Condensed, Helvetica, Arial, sans-serif; + font-size: 1rem; + font-weight: 400; + text-transform: uppercase; + line-height: 1.25; + } + + .head-allcaps-4xs, + .content-block .head-allcaps-4xs{ + font-family: Roboto Condensed, Helvetica, Arial, sans-serif; + font-size: .875rem; + font-weight: 400; + text-transform: uppercase; + line-height: 1.25; + } + + + + + .head-allcaps-heavy-2xs, + .content-block .head-allcaps-heavy-2xs{ + font-family: Roboto Condensed, Helvetica, Arial, sans-serif; + font-size: 1.125rem; + font-weight: 700; + text-transform: uppercase; + line-height: 1.25; + } + + .head-allcaps-heavy-3xs, + .content-block .head-allcaps-heavy-3xs{ + font-family: Roboto Condensed, Helvetica, Arial, sans-serif; + font-size: 1rem; + font-weight: 700; + text-transform: uppercase; + line-height: 1.25; + } + + .head-allcaps-heavy-4xs, + .content-block .head-allcaps-heavy-4xs{ + font-family: Roboto Condensed, Helvetica, Arial, sans-serif; + font-size: .875rem; + font-weight: 700; + text-transform: uppercase; + line-height: 1.25; + } +} + .header-clip { -webkit-clip-path: polygon(0 0, 100% 0, 100% 96%, 0% 100%); clip-path: polygon(0 0, 100% 0, 100% 96%, 0% 100%); @@ -2658,6 +2885,7 @@ p{ padding-bottom: 0.25rem; font-family: Bebas Neue, Helvetica, Arial, sans-serif; line-height: 2.25rem; + min-width: 8rem; } .btn__slide__wrap { @@ -2723,6 +2951,20 @@ p{ background-color: rgb(146 210 219 / var(--tw-bg-opacity)); } +@responsive { + + @media (min-width: 1200px) { + .switch__item{ + padding-left: 2rem; + padding-right: 2rem; + padding-top: 1rem; + padding-bottom: 1rem; + font-size: 1.3rem; + } + } + +} + /* HORIZONTAL SCROLLABLE */ .horizontal-scrolling { @@ -3360,10 +3602,6 @@ p{ max-height: 5rem; } -.w-32{ - width: 8rem; -} - .w-40{ width: 10rem; } @@ -3372,6 +3610,10 @@ p{ width: 4rem; } +.w-32{ + width: 8rem; +} + .w-full{ width: 100%; } @@ -3645,16 +3887,16 @@ p{ padding: 0.75rem; } -.py-32{ - padding-top: 8rem; - padding-bottom: 8rem; -} - .px-1{ padding-left: 0.25rem; padding-right: 0.25rem; } +.py-32{ + padding-top: 8rem; + padding-bottom: 8rem; +} + .py-5{ padding-top: 1.25rem; padding-bottom: 1.25rem; diff --git a/main/static/main/js/main.bundle.js b/main/static/main/js/main.bundle.js index dea5766e..d352f944 100644 --- a/main/static/main/js/main.bundle.js +++ b/main/static/main/js/main.bundle.js @@ -1 +1,13215 @@ -!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"),V=n("746f"),I=n("d44e"),H=n("69f3"),R=n("b727").forEach,P=E("hidden"),z=$("toPrimitive"),W=H.set,N=H.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,P)&&t[P][r]&&(t[P][r]=!1),n=b(n,{enumerable:g(0,!1)})):(d(t,P)||G(t,P,g(1,{})),t[P][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 R(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,P)&&this[P][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,P)&&n[P][r]||(i.enumerable=!0),i}},ut=function(t){var e=U(v(t)),n=[];return R(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 R(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,P)&&d(this[P],e)&&(this[P][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}),R(m(tt),(function(t){V(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[z]||O(B.prototype,z,B.prototype.valueOf),I(B,"Symbol"),C[P]=!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(H(t))return!1;var n=typeof t;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=t&&!P(t))||i.test(t)||!r.test(t)||null!=e&&t in Object(e)}(e,t)?[e]:H(n=e)?n:D(n)).length;null!=t&&o<a;)t=t[V(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!(!R(t)||(e=t,v&&v in e))&&(function(t){var e=R(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=I((function(t){var e;t=null==(e=t)?"":function(t){if("string"==typeof t)return t;if(P(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 V(t){if("string"==typeof t||P(t))return t;var e=t+"";return"0"==e&&1/t==-1/0?"-0":e}function I(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(I.Cache||M),n}I.Cache=M;var H=Array.isArray;function R(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function P(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},V=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+z(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},I=function(t,e){var n={};return e.forEach((function(e){return n[e]=t[e]})),n},H={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"]},R=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},P=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):!R(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}},z=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:H.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=H.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,R(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:H.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(z(t.listRef)),i=Math.ceil(z(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=P(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||!R(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+V(e),y=d?D(e,g):g,v.currentDirection=0;break;case"right":case"down":g=u-V(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(!R(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=I(this.spec,H.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=I(this.spec,H.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=I(this.spec,H.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:"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:"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:"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:"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:"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:"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:"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:"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:"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: "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: "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: "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: "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: "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: "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: "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: "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: "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/EjWVza8O9IGtyYWpcIixcbiAgICAgICAgICBwb2x5Z29uOiBcIk0xNzMuNSw0NDUuNjFMMTc5LjUsNDQ3LjM2TDE4NS42MTU5OTk5OTk5OTk5OSw0NTIuNjkyTDE4NC42MTU5OTk5OTk5OTk5OSw0NTUuNzg5TDE4OC45NjMsNDYyLjMxTDE5Ni41Nyw0NjMuNjY5TDE5OC43NDMsNDcwLjQ2MDk5OTk5OTk5OTk2TDIwMy45MDUsNDc3LjI1Mjk5OTk5OTk5OTkzTDIwNi4wNzksNDgzLjUwMTk5OTk5OTk5OTk1TDIxMS43ODQwMDAwMDAwMDAwMiw0ODMuNzcyOTk5OTk5OTk5OTdMMjIxLjU2NTAwMDAwMDAwMDAzLDQ5My4wMUwyMjYuNzI3MDAwMDAwMDAwMDMsNDk0LjkxMUwyMzIuNDMzMDAwMDAwMDAwMDIsNTAxLjcwNEwyMjguMzU4MDAwMDAwMDAwMDMsNTA2LjA1MUwyMzcuMzI0MDAwMDAwMDAwMDQsNTE1LjAxNjk5OTk5OTk5OTlIMjQ3LjY0ODAwMDAwMDAwMDA1TDI1Ny45NzIwMDAwMDAwMDAwNCw1MTYuOTE3OTk5OTk5OTk5OUwyNjYuMzk0MDAwMDAwMDAwMDYsNTIxLjgwODk5OTk5OTk5OTlMMjc4LjM0ODAwMDAwMDAwMDA3LDUxMS43NTU5OTk5OTk5OTk4NkwyODAuNzkzMDAwMDAwMDAwMDYsNTA1LjUwNzk5OTk5OTk5OTg3TDI4Ny4wNDIwMDAwMDAwMDAxLDUxMC45NDE5OTk5OTk5OTk5TDI5My44MzQwMDAwMDAwMDAwNiw1MTIuMjk5OTk5OTk5OTk5OEwyOTkuMjY4MDAwMDAwMDAwMSw1MTAuOTQxOTk5OTk5OTk5ODRMMzA4LjIzNDAwMDAwMDAwMDEsNTE2LjkxODk5OTk5OTk5OTlMMzExLjc2NjAwMDAwMDAwMDEsNTExLjIxMzk5OTk5OTk5OTlMMzEwLjY4MDAwMDAwMDAwMDA2LDUwNS43Nzk5OTk5OTk5OTk4NkwzMTEuNzY3MDAwMDAwMDAwMDUsNDk2LjU0Mjk5OTk5OTk5OTg0TDMxOS4zNzQwMDAwMDAwMDAxLDQ5MC4yOTQ5OTk5OTk5OTk4NUwzMjIuMDkxMDAwMDAwMDAwMDcsNDgyLjQxNTk5OTk5OTk5OThMMzI5LjE1NTAwMDAwMDAwMDEsNDgyLjY4Njk5OTk5OTk5OTg0TDMzOC45MzYwMDAwMDAwMDAxLDQ4NS42NzQ5OTk5OTk5OTk4NEwzNDAuNTY2MDAwMDAwMDAwMSw0ODIuNjg2OTk5OTk5OTk5ODRMMzM4LjEyMTAwMDAwMDAwMDEsNDc4LjMzOTk5OTk5OTk5OTg2TDMzOS40NzkwMDAwMDAwMDAxLDQ3Mi4zNjE5OTk5OTk5OTk4NUwzNDEuOTI0MDAwMDAwMDAwMSw0NjUuMDI1OTk5OTk5OTk5ODRMMzQxLjEwOTAwMDAwMDAwMDEsNDU1LjUxNjk5OTk5OTk5OThMMzQwLjU2NjAwMDAwMDAwMDEsNDQ1LjQ2Mzk5OTk5OTk5OThMMzQzLjU1NDAwMDAwMDAwMDEsNDM5Ljc1ODk5OTk5OTk5OTg0TDM1Mi41MjAwMDAwMDAwMDAxLDQ0Mi43NDY5OTk5OTk5OTk4NEwzNjAuMTI3MDAwMDAwMDAwMSw0NDQuMzc3OTk5OTk5OTk5OEwzNjIuNTcyMDAwMDAwMDAwMSw0NTIuNTI3OTk5OTk5OTk5OEwzNzQuMjU1MDAwMDAwMDAwMSw0NDkuODEwOTk5OTk5OTk5OEwzNzcuNTE1MDAwMDAwMDAwMSw0NDUuNDYyOTk5OTk5OTk5OEwzODUuMzk0MDAwMDAwMDAwMSw0NDUuNzM0OTk5OTk5OTk5OEwzOTcuMzQ5MDAwMDAwMDAwMSw0NTEuOTgyOTk5OTk5OTk5OEw0MDEuNDI0MDAwMDAwMDAwMSw0NTMuODg0OTk5OTk5OTk5NzZMNDA1LjUwMTAwMDAwMDAwMDEsNDU5Ljg1Njk5OTk5OTk5OTc0TDQwOC43NTEwMDAwMDAwMDAxLDQ1Mi44NTY5OTk5OTk5OTk3NEw0MDQuNzUxMDAwMDAwMDAwMSw0NDYuNjA2OTk5OTk5OTk5NzRMNDAwLjI1MTAwMDAwMDAwMDEsNDQyLjYwNjk5OTk5OTk5OTc0TDQwNS43NTEwMDAwMDAwMDAxLDQzNi44NTY5OTk5OTk5OTk3NEw0MDYuNzUxMDAwMDAwMDAwMSw0MzAuNjA2OTk5OTk5OTk5NzRMNDEyLjAwMTAwMDAwMDAwMDEsNDI5LjYwNjk5OTk5OTk5OTc0TDQxMi43NTEwMDAwMDAwMDAxLDQyNS4xMDY5OTk5OTk5OTk3NEw0MDUuNTAxMDAwMDAwMDAwMSw0MTkuMzU2OTk5OTk5OTk5NzRMMzk4LjUwMTAwMDAwMDAwMDEsNDIwLjg1Njk5OTk5OTk5OTc0TDM5MC4wMDEwMDAwMDAwMDAxLDQyMC42MDY5OTk5OTk5OTk3NEwzODMuNTAxMDAwMDAwMDAwMSw0MTQuMTA2OTk5OTk5OTk5NzRMMzg0LjUwMTAwMDAwMDAwMDEsNDA4LjYwNjk5OTk5OTk5OTc0TDM4MS4yNTEwMDAwMDAwMDAxLDQwNC4xMDY5OTk5OTk5OTk3NEwzNzQuMDAxMDAwMDAwMDAwMSw0MDUuMzU2OTk5OTk5OTk5NzRMMzY2LjAwMTAwMDAwMDAwMDEsNDAyLjM1Njk5OTk5OTk5OTc0TDM2MS4wMDEwMDAwMDAwMDAxLDQwNS4xMDY5OTk5OTk5OTk3NEwzNTUuNTAxMDAwMDAwMDAwMSw0MDAuMTA2OTk5OTk5OTk5NzRMMzUyLjc1MTAwMDAwMDAwMDEsMzk1LjEwNjk5OTk5OTk5OTc0TDM0Ni41MDEwMDAwMDAwMDAxLDM5MS42MDY5OTk5OTk5OTk3NEwzNDEuNzUxMDAwMDAwMDAwMSwzOTQuMzU2OTk5OTk5OTk5NzRMMzM2LjI1MTAwMDAwMDAwMDEsMzg5Ljg1Njk5OTk5OTk5OTc0TDMzMy41MDEwMDAwMDAwMDAxLDM4NC44NTY5OTk5OTk5OTk3NEwzMzQuNzUxMDAwMDAwMDAwMSwzODAuMzU2OTk5OTk5OTk5NzRMMzMyLjAwMTAwMDAwMDAwMDEsMzc0LjYwNjk5OTk5OTk5OTc0VjM2Ni44NTY5OTk5OTk5OTk3NEwzMzUuMDAxMDAwMDAwMDAwMSwzNjMuMTA2OTk5OTk5OTk5NzRMMzM1LjI1MTAwMDAwMDAwMDEsMzU2LjEwNjk5OTk5OTk5OTc0TDMzMy41MDEwMDAwMDAwMDAxLDM0OS42MDY5OTk5OTk5OTk3NEwzMzAuMjUxMDAwMDAwMDAwMSwzNDQuODU2OTk5OTk5OTk5NzRMMzI4LjAwMTAwMDAwMDAwMDEsMzM5LjM1Njk5OTk5OTk5OTc0TDMyMy43NTEwMDAwMDAwMDAxLDMzOS44NTY5OTk5OTk5OTk3NEwzMTYuMDAxMDAwMDAwMDAwMSwzMzMuMzU2OTk5OTk5OTk5NzRMMzEwLjc1MTAwMDAwMDAwMDEsMzM3LjEwNjk5OTk5OTk5OTc0TDMxMi4yNTEwMDAwMDAwMDAxLDM0NC44NTY5OTk5OTk5OTk3NEwzMDUuNzUxMDAwMDAwMDAwMSwzNDguMzU2OTk5OTk5OTk5NzRMMzAyLjI1MTAwMDAwMDAwMDEsMzUyLjM1Njk5OTk5OTk5OTc0TDI5NS4wMDEwMDAwMDAwMDAxLDM0OS4zNTY5OTk5OTk5OTk3NEwyODcuMDAxMDAwMDAwMDAwMSwzNDcuMzU2OTk5OTk5OTk5NzRMMjgyLjUwMTAwMDAwMDAwMDEsMzQ4LjEwNjk5OTk5OTk5OTc0TDI3Ni4wMDEwMDAwMDAwMDAxLDM0NS4xMDY5OTk5OTk5OTk3NEwyNjkuNzUxMDAwMDAwMDAwMSwzNDguODU2OTk5OTk5OTk5NzRDMjY5Ljc1MTAwMDAwMDAwMDEsMzQ4Ljg1Njk5OTk5OTk5OTc0LDI2Ni4xMDMwMDAwMDAwMDAwNywzNDguNjIxOTk5OTk5OTk5NzMsMjY1LjUwMTAwMDAwMDAwMDEsMzQ4LjYwNjk5OTk5OTk5OTc0UzI2MS41MDEwMDAwMDAwMDAxLDM0My42MDY5OTk5OTk5OTk3NCwyNjEuNTAxMDAwMDAwMDAwMSwzNDMuNjA2OTk5OTk5OTk5NzRIMjU1LjUwMTAwMDAwMDAwMDFMMjUyLjUwMTAwMDAwMDAwMDEsMzQ3LjM1Njk5OTk5OTk5OTc0TDIzOS4wMDEwMDAwMDAwMDAxLDM0OC44NTY5OTk5OTk5OTk3NEwyMzUuMjUxMDAwMDAwMDAwMSwzNDQuODU2OTk5OTk5OTk5NzRIMjMwLjUwMTAwMDAwMDAwMDFMMjI3Ljc1MTAwMDAwMDAwMDEsMzQ5LjYwNjk5OTk5OTk5OTc0TDIyMC43NTEwMDAwMDAwMDAxLDM1My4xMDY5OTk5OTk5OTk3NEwyMTYuMjUxMDAwMDAwMDAwMSwzNTAuODU2OTk5OTk5OTk5NzRMMjAyLjUwMTAwMDAwMDAwMDEsMzUwLjM1Njk5OTk5OTk5OTc0TDE5OS43NTEwMDAwMDAwMDAxLDM1NC4zNTY5OTk5OTk5OTk3NEwyMDEuMjUxMDAwMDAwMDAwMSwzNTkuODU2OTk5OTk5OTk5NzRWMzY0LjM1Njk5OTk5OTk5OTc0TDIwMC41MDEwMDAwMDAwMDAxLDM3Mi4xMDY5OTk5OTk5OTk3NEwyMDQuMDAxMDAwMDAwMDAwMSwzNzcuODU2OTk5OTk5OTk5NzRMMTk5LjUwMTAwMDAwMDAwMDEsMzg0Ljg1Njk5OTk5OTk5OTc0TDE5Ni4wMDEwMDAwMDAwMDAxLDM4Ny42MDY5OTk5OTk5OTk3NFYzOTEuMzU2OTk5OTk5OTk5NzRMMTkzLjAwMTAwMDAwMDAwMDEsMzk0LjEwNjk5OTk5OTk5OTc0TDE5Ni43NTEwMDAwMDAwMDAxLDM5OC4zNTY5OTk5OTk5OTk3NEwxOTIuMDAxMDAwMDAwMDAwMSw0MDAuODU2OTk5OTk5OTk5NzRMMTk1LjAwMTAwMDAwMDAwMDEsNDA2Ljg1Njk5OTk5OTk5OTc0TDE5Mi41MDEwMDAwMDAwMDAxLDQxMi44NTY5OTk5OTk5OTk3NEwxODYuNTAxMDAwMDAwMDAwMSw0MTUuMTA2OTk5OTk5OTk5NzRMMTg1LjAwMTAwMDAwMDAwMDEsNDE3Ljg1Njk5OTk5OTk5OTc0TDE4MC41MDEwMDAwMDAwMDAxLDQxNi4zNTY5OTk5OTk5OTk3NEwxNzkuMjUxMDAwMDAwMDAwMSw0MjYuMTA2OTk5OTk5OTk5NzRMMTgxLjc1MTAwMDAwMDAwMDEsNDMwLjEwNjk5OTk5OTk5OTc0TDE4MC41MDEwMDAwMDAwMDAxLDQzMy42MDY5OTk5OTk5OTk3NEwxNzUuMjUxMDAwMDAwMDAwMSw0MzUuODU2OTk5OTk5OTk5NzRMMTczLjU3NjAwMDAwMDAwMDA4LDQ0MS44MzE5OTk5OTk5OTk3N0wxNzMuNSw0NDUuNjFaXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiBcInBsemVuc2t5XCIsXG4gICAgICAgICAgbmFtZTogXCJQbHplxYhza8O9IGtyYWpcIixcbiAgICAgICAgICBwb2x5Z29uOiBcIk0xNTEuMDI3LDI0Ni43NzFMMTQ3LjYzNywyNTUuMDU5TDE0MS45ODYsMjU2LjU2NlYyNjUuMDQyTDEzNC40NTIsMjU5LjM5MDk5OTk5OTk5OTk2TDEyNi41NDEsMjU4LjQ0ODk5OTk5OTk5OTk2TDExMS40NzIsMjY4LjI0Mjk5OTk5OTk5OTk0VjI3My44OTM5OTk5OTk5OTk5NUwxMDcuNjEwOTk5OTk5OTk5OTksMjc3Ljc1NDk5OTk5OTk5OTk0TDEwMS4zMDA5OTk5OTk5OTk5OSwyNzQuNjQ3OTk5OTk5OTk5OUw5OC4wOTg5OTk5OTk5OTk5OSwyNzYuMTU0OTk5OTk5OTk5OUw5MS44ODMsMjcyLjM4Njk5OTk5OTk5OTk0TDg0LjM0ODk5OTk5OTk5OTk5LDI3NS41ODg5OTk5OTk5OTk5NEw3OC45ODEsMjgwLjk1Njk5OTk5OTk5OTk0TDczLjk5LDI3Ni41Mjk5OTk5OTk5OTk5TDY5LjQ2OSwyODAuMjk3OTk5OTk5OTk5OUw2Mi4zNTU5OTk5OTk5OTk5OTUsMjgwLjAwNjk5OTk5OTk5OTlMNTQuNDc3LDI5MS45NjA5OTk5OTk5OTk5TDU0LDI5OS4xMUw0NS43ODQsMzA2LjYzMzAwMDAwMDAwMDA0TDUyLjAzMywzMTMuNjk2TDU5LjY0LDMxOC44NThMNTkuMDk3LDMyNi43MzdMNjQuMjU5LDMzMi43MTUwMDAwMDAwMDAwM0w2My45ODcsMzQwLjA1TDcyLjEzOCwzNDUuNzU2MDAwMDAwMDAwMDNMNzEuMzIzMDAwMDAwMDAwMDEsMzU0LjcyMUw3Mi42ODEwMDAwMDAwMDAwMSwzNjAuOTY5TDc5LjIwMjAwMDAwMDAwMDAxLDM2NC41MDFMODQuOTA4MDAwMDAwMDAwMDIsMzcwLjQ3OUw4OS4yNTUwMDAwMDAwMDAwMSwzNzcuODEzOTk5OTk5OTk5OTZMOTcuMTM0MDAwMDAwMDAwMDEsMzc5Ljk4Nzk5OTk5OTk5OTk0TDk5Ljg1MTAwMDAwMDAwMDAxLDM3OC4wODY5OTk5OTk5OTk5M0wxMDYuOTE0MDAwMDAwMDAwMDIsMzc5LjQ0NDk5OTk5OTk5OTk0TDExNS44ODAwMDAwMDAwMDAwMSwzODUuOTY1OTk5OTk5OTk5OTVMMTE2Ljk2NzAwMDAwMDAwMDAxLDM5My4zMDA5OTk5OTk5OTk5M0wxMjQuODQ2MDAwMDAwMDAwMDIsNDAxLjE3OTk5OTk5OTk5OTk1VjQwNC45ODM5OTk5OTk5OTk5TDEzMi4xODEsNDEwLjY4OTk5OTk5OTk5OTk0TDEzMy41MzkwMDAwMDAwMDAwMiw0MTYuMzk0OTk5OTk5OTk5OUwxMzguNDMsNDE5LjkyNjk5OTk5OTk5OTlIMTQ1LjIyMkwxNTEuNzQzLDQyNi40NDc5OTk5OTk5OTk5TDE1Ny43Miw0MzUuMTQwOTk5OTk5OTk5OUwxNTguNTM1LDQ0NC42NTA5OTk5OTk5OTk5TDE2OS42NzQsNDUxLjk4NTk5OTk5OTk5OTlMMTczLjUwMSw0NDUuNjEwOTk5OTk5OTk5OUwxNzMuNTc2LDQ0MS44MzU5OTk5OTk5OTk5TDE3NS4yNTEsNDM1Ljg2MDk5OTk5OTk5OTlMMTgwLjUwMSw0MzMuNjEwOTk5OTk5OTk5OUwxODEuNzUxLDQzMC4xMTA5OTk5OTk5OTk5TDE3OS4yNTEsNDI2LjExMDk5OTk5OTk5OTlMMTgwLjUwMSw0MTYuMzYwOTk5OTk5OTk5OUwxODUuMDAxLDQxNy44NjA5OTk5OTk5OTk5TDE4Ni41MDEsNDE1LjExMDk5OTk5OTk5OTlMMTkyLjUwMSw0MTIuODYwOTk5OTk5OTk5OUwxOTUuMDAxLDQwNi44NjA5OTk5OTk5OTk5TDE5Mi4wMDEsNDAwLjg2MDk5OTk5OTk5OTlMMTk2Ljc1MSwzOTguMzYwOTk5OTk5OTk5OUwxOTMuMDAxLDM5NC4xMTA5OTk5OTk5OTk5TDE5Ni4wMDEsMzkxLjM2MDk5OTk5OTk5OTlWMzg3LjYxMDk5OTk5OTk5OTlMMTk5LjUwMSwzODQuODYwOTk5OTk5OTk5OUwyMDQuMDAxLDM3Ny44NjA5OTk5OTk5OTk5TDIwMC41MDEsMzcyLjExMDk5OTk5OTk5OTlMMjAxLjI1MSwzNjQuMzYwOTk5OTk5OTk5OVYzNTkuODYwOTk5OTk5OTk5OUwxOTkuNzUxLDM1NC4zNjA5OTk5OTk5OTk5TDIwMi41MDEsMzUwLjM2MDk5OTk5OTk5OTlMMTk5LjI1MSwzNDQuODYwOTk5OTk5OTk5OUwxOTkuNTAxLDMzOC44NjA5OTk5OTk5OTk5TDIwMC43NTEsMzM0LjM2MDk5OTk5OTk5OTlMMTk3LjUwMSwzMzEuODYwOTk5OTk5OTk5OUwxOTQuMDAxLDMyNy4zNjA5OTk5OTk5OTk5TDE5NS43NTEsMzIyLjM2MDk5OTk5OTk5OTlMMTkxLjc1MSwzMTguMTEwOTk5OTk5OTk5OUwxOTcuMDAxLDMxNC4zNjA5OTk5OTk5OTk5SDIwMi41MDFMMjA3LjI1MSwzMDguNjEwOTk5OTk5OTk5OUwyMDUuMDAxLDMwNC4xMTA5OTk5OTk5OTk5TDIwNy41MDEsMjk5Ljg2MDk5OTk5OTk5OTlMMjA1LjI1MSwyOTMuODYwOTk5OTk5OTk5OUwyMTAuMDAxLDI4OS4xMTA5OTk5OTk5OTk5TDIwOC43NTEsMjg1LjM2MDk5OTk5OTk5OTlMMjA5LjI1MSwyNzguODYwOTk5OTk5OTk5OUwyMDUuMDAxLDI3Ni4xMTA5OTk5OTk5OTk5TDIwMC4wMDEsMjc1LjExMDk5OTk5OTk5OTlMMTk5Ljc1MSwyNzEuMTEwOTk5OTk5OTk5OUwxOTQuNzUxLDI3Mi4xMTA5OTk5OTk5OTk5QzE5NC43NTEsMjcyLjExMDk5OTk5OTk5OTksMTg5LjY5NSwyNjUuNDA0OTk5OTk5OTk5ODYsMTg5LjUwMSwyNjUuMzYwOTk5OTk5OTk5OVMxODUuMDAxLDI2Ny4xMTA5OTk5OTk5OTk5LDE4NS4wMDEsMjY3LjExMDk5OTk5OTk5OTlMMTgwLjUwMSwyNjQuODYwOTk5OTk5OTk5OUwxNzYuNTAxLDI2Mi42MTA5OTk5OTk5OTk5TDE3NS43NTEsMjU4LjM2MDk5OTk5OTk5OTlMMTY5LjAwMSwyNTcuODYwOTk5OTk5OTk5OUwxNjUuMDAxLDI2MC4zNjA5OTk5OTk5OTk5TDE2MS41MDEsMjU3LjExMDk5OTk5OTk5OTlMMTY0LjI1MSwyNTMuNjEwOTk5OTk5OTk5ODhMMTYxLjk1NjAwMDAwMDAwMDAyLDI1MC43MjY5OTk5OTk5OTk5TDE1NS4xNzUsMjQ2Ljc3MDk5OTk5OTk5OTlMMTUxLjAyNywyNDYuNzcxWlwiLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6IFwia2FybG92YXJza3lcIixcbiAgICAgICAgICBuYW1lOiBcIkthcmxvdmFyc2vDvSBrcmFqXCIsXG4gICAgICAgICAgcG9seWdvbjogXCJNNjkuNDcsMjgwLjI5OUw2Mi4zNTcsMjgwLjAwOFYyNzQuODQ2TDU3LjE5NSwyNzIuNDAxTDU3LjQ2NiwyNjYuNDI0MDAwMDAwMDAwMDRMNDIuMjUxLDI1Ni4xTDMyLjc0MiwyNTEuMjEwMDAwMDAwMDAwMDRMMjguNjY1OTk5OTk5OTk5OTk3LDI0My44NzQwMDAwMDAwMDAwMkwyNC41OTA5OTk5OTk5OTk5OTgsMjM5LjI1NTAwMDAwMDAwMDAyTDI2LjQ5MywyMzAuODMzMDAwMDAwMDAwMDNMMjAuMjQ0LDIyMS4zMjRMMTUuNzYxLDIxNi44NDFMMTguODg2LDIxMC43MjhMMTYuMTY5OTk5OTk5OTk5OTk4LDIwMy45MzZIMjQuODYzOTk5OTk5OTk5OTk3TDI3LjAzNywyMDYuMTFWMjEyLjA4NzAwMDAwMDAwMDAySDMxLjY1NkwzNC4yMzcsMjE0LjY2OEwzMi43NDIwMDAwMDAwMDAwMDQsMjE4Ljg3OTAwMDAwMDAwMDAyTDM1LjQ1OSwyMjEuNTk2MDAwMDAwMDAwMDNWMjI4LjM4ODAwMDAwMDAwMDAzTDM5LjUzNTAwMDAwMDAwMDAwNCwyMzIuNDY0MDAwMDAwMDAwMDNMNDEuNDM3MDAwMDAwMDAwMDA1LDIyMi42ODMwMDAwMDAwMDAwMkM0MS40MzcwMDAwMDAwMDAwMDUsMjIyLjY4MzAwMDAwMDAwMDAyLDQwLjA3OTAwMDAwMDAwMDAxLDIxOS40MjIwMDAwMDAwMDAwMyw0MS40MzcwMDAwMDAwMDAwMDUsMjE4LjA2NDAwMDAwMDAwMDAyUzQ2Ljg3MSwyMTIuNjMwMDAwMDAwMDAwMDIsNDYuODcxLDIxMi42MzAwMDAwMDAwMDAwMkw0OS4zMTYsMjA0LjQ3OUw1OS45MTIwMDAwMDAwMDAwMDYsMTk4Ljc3NFYxOTQuOTdMNjMuMzA4MDAwMDAwMDAwMDEsMTkxLjU3NEw3MS4wNTEsMTkwLjM1MUw4MC44MzIwMDAwMDAwMDAwMSwxODguNzIxTDg0LjA5MjAwMDAwMDAwMDAxLDE5MS45ODFMODkuNTI2MDAwMDAwMDAwMDEsMTg1LjE4OUw5OS41NzkwMDAwMDAwMDAwMSwxODIuNDcxOTk5OTk5OTk5OThMMTEwLjE3NTAwMDAwMDAwMDAxLDE5MC4zNTA5OTk5OTk5OTk5N0wxMTUuMDE5LDE5NS4xOTQ5OTk5OTk5OTk5NkgxMjUuMDM2TDEyOS45MzMsMTk3LjA0NDk5OTk5OTk5OTk2QzEyOS45MzMsMTk3LjA0NDk5OTk5OTk5OTk2LDEyOS42NzYsMjAxLjI1OTk5OTk5OTk5OTk2LDEyOS45MzMsMjAxLjc1Mzk5OTk5OTk5OTk2UzE0MC42Njg5OTk5OTk5OTk5OCwyMDAuNjIzOTk5OTk5OTk5OTcsMTQwLjY2ODk5OTk5OTk5OTk4LDIwMC42MjM5OTk5OTk5OTk5N0wxNDUuMzc4LDIwNS4zMzI5OTk5OTk5OTk5N0wxNDAuNzYyOTk5OTk5OTk5OTgsMjA5Ljk0Nzk5OTk5OTk5OTk4TDE0My4zMDU5OTk5OTk5OTk5OCwyMTQuNzUwOTk5OTk5OTk5OThMMTQxLjYxMSwyMjAuOTY1OTk5OTk5OTk5OThMMTQ1Ljc1NSwyMjUuMTA5OTk5OTk5OTk5OTlMMTQ0LjA2LDIyOC42ODlMMTQ4Ljc2OCwyMzUuMDkzTDE0NC4wNTksMjM5LjgwMUwxNTEuMDI4LDI0Ni43NzFMMTQ3LjYzOCwyNTUuMDU5TDE0MS45ODcsMjU2LjU2NlYyNjUuMDQyTDEzNC40NTMsMjU5LjM5MDk5OTk5OTk5OTk2TDEyNi41NDIsMjU4LjQ0ODk5OTk5OTk5OTk2TDExMS40NzMsMjY4LjI0Mjk5OTk5OTk5OTk0VjI3My44OTM5OTk5OTk5OTk5NUwxMDcuNjEyLDI3Ny43NTQ5OTk5OTk5OTk5NEwxMDEuMzAxOTk5OTk5OTk5OTksMjc0LjY0Nzk5OTk5OTk5OTlMOTguMSwyNzYuMTU0OTk5OTk5OTk5OUw5MS44ODQsMjcyLjM4Njk5OTk5OTk5OTk0TDg0LjM1LDI3NS41ODg5OTk5OTk5OTk5NEw3OC45ODIsMjgwLjk1Njk5OTk5OTk5OTk0TDczLjk5MSwyNzYuNTI5OTk5OTk5OTk5OUw2OS40NywyODAuMjk5WlwiLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6IFwidXN0ZWNreVwiLFxuICAgICAgICAgIG5hbWU6IFwiw5pzdGVja8O9IGtyYWpcIixcbiAgICAgICAgICBwb2x5Z29uOiBcIk0xMTAuMTc0LDE5MC4zNTFMMTE5LjY4MywxODUuMTg5TDExOS40MTIsMTc3Ljg1Mzk5OTk5OTk5OTk4TDEyMi42NzIwMDAwMDAwMDAwMSwxNzQuNTkzTDEzMi40NTMsMTcyLjk2M0wxNDAuNjA0LDE3NC4wNDk5OTk5OTk5OTk5OEwxNDMuODY0LDE2OC4wNzI5OTk5OTk5OTk5OFYxNjMuNzI1OTk5OTk5OTk5OTdMMTQ2LjU4MTAwMDAwMDAwMDAyLDE1OC44MzU5OTk5OTk5OTk5OEgxNDkuODQxTDE1MS40NzEsMTYzLjcyNTk5OTk5OTk5OTk3TDE1NS41NDYsMTYyLjM2Nzk5OTk5OTk5OTk3VjE1Ni4zOTA5OTk5OTk5OTk5NkwxNTguMTI4LDE1My44MDg5OTk5OTk5OTk5N0wxNTkuNjIxOTk5OTk5OTk5OTksMTQ5Ljg2OTk5OTk5OTk5OTk4SDE2My40MjQ5OTk5OTk5OTk5OEwxNjUuMDU0OTk5OTk5OTk5OTgsMTU1LjAzMTk5OTk5OTk5OTk4TDE2OS40MDIsMTU3Ljc0OUwxNzcuODIzOTk5OTk5OTk5OTgsMTUxLjc3MkwxNzguMzY3LDE0MS43MkwxODIuMzA1OTk5OTk5OTk5OTgsMTM3Ljc4MUwxODYuNzg5LDE0MC4wOUwxOTIuMjIyOTk5OTk5OTk5OTgsMTM1LjIwMDAwMDAwMDAwMDAyTDE5NS43NTUsMTM4LjczMjAwMDAwMDAwMDAzTDIwMi4yNzU5OTk5OTk5OTk5OCwxMzUuMjAwMDAwMDAwMDAwMDJMMjA5LjYxMSwxMzQuMzg1MDAwMDAwMDAwMDJMMjExLjI0MDk5OTk5OTk5OTk5LDEzOC4xODkwMDAwMDAwMDAwMkgyMTQuMjNMMjE5LjExOTk5OTk5OTk5OTk4LDEzMy4yOTkwMDAwMDAwMDAwNFYxMjUuNjkyMDAwMDAwMDAwMDRMMjI1LjM2ODk5OTk5OTk5OTk3LDEyNC42MDUwMDAwMDAwMDAwM0wyMjkuNzE1OTk5OTk5OTk5OTgsMTIwLjI1ODAwMDAwMDAwMDA0TDIzNS40MjEsMTIzLjc5MDAwMDAwMDAwMDAzTDI0NC4xMTQ5OTk5OTk5OTk5OCwxMTkuMTcxMDAwMDAwMDAwMDNMMjQ3LjY0NywxMTUuNjM5MDAwMDAwMDAwMDRMMjU0Ljk4MiwxMTYuMTgyMDAwMDAwMDAwMDRMMjU4LjUxNCwxMDkuMTE5MDAwMDAwMDAwMDRIMjYzLjQwNEwyNjUuMzA2LDExMS4yOTIwMDAwMDAwMDAwNEwyNzUuMDg3LDEwNy43NjAwMDAwMDAwMDAwNUwyNzYuMTc0LDEwMC45NjgwMDAwMDAwMDAwNUwyNjguMDIyOTk5OTk5OTk5OTcsOTguMjUxMDAwMDAwMDAwMDVWOTMuMDg5MDAwMDAwMDAwMDRMMjU5Ljg3Myw5MS40NTkwMDAwMDAwMDAwNUwyNjIuODYxLDg2LjAyNTAwMDAwMDAwMDA1TDI2NS41NzgsNzguOTYxMDAwMDAwMDAwMDRMMjczLjcyOSw4Mi43NjUwMDAwMDAwMDAwNEwyNzUuNjMxLDg0LjY2NzAwMDAwMDAwMDA0SDI4MC41MjA5OTk5OTk5OTk5NkwyODguMTI4LDgxLjk1MDAwMDAwMDAwMDA1TDI5My4wMTgsODYuODQwMDAwMDAwMDAwMDVMMjk3LjkwOSw5MS40NTkwMDAwMDAwMDAwNUwyOTguMTgsOTcuNDM2MDAwMDAwMDAwMDVMMjk0LjEwNSwxMDQuMjI4MDAwMDAwMDAwMDVMMzAzLjM0MjAwMDAwMDAwMDA0LDEwMi41OTgwMDAwMDAwMDAwNkwzMDEuNzEyMDAwMDAwMDAwMDUsMTEyLjEwNzAwMDAwMDAwMDA2VjExNi40NTQwMDAwMDAwMDAwNUwyOTUuMzEwMDAwMDAwMDAwMDYsMTE4LjY5MDAwMDAwMDAwMDA1TDI5NC4zNjgwMDAwMDAwMDAwNSwxMjYuMDM2MDAwMDAwMDAwMDZMMjg3Ljk2NDAwMDAwMDAwMDA2LDEyMy41ODcwMDAwMDAwMDAwNkwyODAuODA3MDAwMDAwMDAwMSwxMjIuNjQ1MDAwMDAwMDAwMDdMMjgyLjMxNDAwMDAwMDAwMDEsMTI4LjY3MjAwMDAwMDAwMDA1TDI3Ny41MTEwMDAwMDAwMDAxLDEzMy40NzUwMDAwMDAwMDAwNVYxMzcuMzM2MDAwMDAwMDAwMDRMMjczLjMyMDAwMDAwMDAwMDEsMTQxLjUyNzAwMDAwMDAwMDA0QzI3My4zMjAwMDAwMDAwMDAxLDE0MS41MjcwMDAwMDAwMDAwNCwyNjkuMjUwMDAwMDAwMDAwMSwxNDcuMjEzMDAwMDAwMDAwMDUsMjY5LjMxODAwMDAwMDAwMDEsMTQ4LjI2MTAwMDAwMDAwMDA1UzI3Mi43MDgwMDAwMDAwMDAxLDE1My43MjMwMDAwMDAwMDAwNCwyNzIuNzA4MDAwMDAwMDAwMSwxNTMuNzIzMDAwMDAwMDAwMDRWMTU4LjgwOTAwMDAwMDAwMDA1TDI3OS44NjcwMDAwMDAwMDAxLDE3MC42NzIwMDAwMDAwMDAwNUwyODQuOTUxMDAwMDAwMDAwMSwxNzYuODg5MDAwMDAwMDAwMDdMMjgyLjY5MTAwMDAwMDAwMDEsMTc5LjkwNDAwMDAwMDAwMDA1TDI4My42MzMwMDAwMDAwMDAxLDE4Ny4wNjIwMDAwMDAwMDAwNEgyNzguOTI0MDAwMDAwMDAwMUwyNzcuNDE3MDAwMDAwMDAwMSwxOTEuNTgzMDAwMDAwMDAwMDNIMjcyLjUyMDAwMDAwMDAwMDFMMjc0LjIxNTAwMDAwMDAwMDEsMjAwLjA1OTAwMDAwMDAwMDAzTDI3MC42MzYwMDAwMDAwMDAxLDIwMy42MzgwMDAwMDAwMDAwM0wyNjIuNTM3MDAwMDAwMDAwMSwyMDIuODg1MDAwMDAwMDAwMDVMMjU4LjIwNDAwMDAwMDAwMDA2LDIwNy4yMTgwMDAwMDAwMDAwNUgyNDEuODE3MDAwMDAwMDAwMDZMMjMzLjkwNjAwMDAwMDAwMDA2LDIwMy42MzkwMDAwMDAwMDAwNEwyMjcuNTAyMDAwMDAwMDAwMDcsMjA3LjAyOTAwMDAwMDAwMDAyVjIxMS41NUwyMjIuMzIyMDAwMDAwMDAwMDYsMjE2LjczMDAwMDAwMDAwMDAySDIxNi4zODkwMDAwMDAwMDAwN0wyMTQuMzY0MDAwMDAwMDAwMDYsMjE4Ljc1NDAwMDAwMDAwMDAyTDIxNC41MDYwMDAwMDAwMDAwNiwyMjIuNjYzTDIwOC44NTUwMDAwMDAwMDAwNSwyMTkuMjcyMDAwMDAwMDAwMDJMMjAyLjY0MDAwMDAwMDAwMDA0LDIyNS40ODcwMDAwMDAwMDAwMkwxOTMuOTc1MDAwMDAwMDAwMDUsMjI1LjI5OTAwMDAwMDAwMDA0TDE4NS42ODcwMDAwMDAwMDAwNCwyMzAuMzg1MDAwMDAwMDAwMDVMMTc4LjM0MTAwMDAwMDAwMDA0LDIzMC43NjEwMDAwMDAwMDAwNUwxNzIuNjkwMDAwMDAwMDAwMDMsMjM2LjAzNTAwMDAwMDAwMDA1TDE3MS41NjAwMDAwMDAwMDAwMywyNDIuNjI3MDAwMDAwMDAwMDdMMTY1LjM0NDAwMDAwMDAwMDAyLDI0NS4yNjQwMDAwMDAwMDAwN0wxNjEuOTU0MDAwMDAwMDAwMDQsMjUwLjcyNjAwMDAwMDAwMDA2TDE1NS4xNzMwMDAwMDAwMDAwMywyNDYuNzcwMDAwMDAwMDAwMDdMMTUxLjAyNjAwMDAwMDAwMDA0LDI0Ni43NzEwMDAwMDAwMDAwN0wxNDQuMDU3MDAwMDAwMDAwMDQsMjM5LjgwMTAwMDAwMDAwMDA3TDE0OC43NjYwMDAwMDAwMDAwNSwyMzUuMDkzMDAwMDAwMDAwMDdMMTQ0LjA1ODAwMDAwMDAwMDA1LDIyOC42ODkwMDAwMDAwMDAwOEwxNDUuNzUzMDAwMDAwMDAwMDQsMjI1LjExMDAwMDAwMDAwMDA3TDE0MS42MDkwMDAwMDAwMDAwNCwyMjAuOTY2MDAwMDAwMDAwMDdMMTQzLjMwNDAwMDAwMDAwMDAzLDIxNC43NTEwMDAwMDAwMDAwNkwxNDAuNzYxMDAwMDAwMDAwMDIsMjA5Ljk0ODAwMDAwMDAwMDA2TDE0NS4zNzYwMDAwMDAwMDAwMywyMDUuMzMzMDAwMDAwMDAwMDZMMTQwLjY2NzAwMDAwMDAwMDAzLDIwMC42MjQwMDAwMDAwMDAwNUwxMjkuOTMxMDAwMDAwMDAwMDQsMjAxLjc1NDAwMDAwMDAwMDA1VjE5Ny4wNDUwMDAwMDAwMDAwNEwxMjUuMDM0MDAwMDAwMDAwMDMsMTk1LjE5NTAwMDAwMDAwMDA1SDExNS4wMTcwMDAwMDAwMDAwNEwxMTAuMTc0LDE5MC4zNTFaXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogXCJsaWJlcmVja3lcIixcbiAgICAgICAgICBuYW1lOiBcIkxpYmVyZWNrw70ga3JhalwiLFxuICAgICAgICAgIHBvbHlnb246IFwiTTQwMS4xNTEsMTI3Ljg2M0w0MDcuMTk3LDEzNC42OTdMNDA1LjMxNCwxNDIuNjA4TDQwOC41MTUwMDAwMDAwMDAwNCwxNTAuMzMxMDAwMDAwMDAwMDJMNDA3LjAwOTAwMDAwMDAwMDA3LDE1NC40NzUwMDAwMDAwMDAwMkw0MTAuNzc2MDAwMDAwMDAwMDcsMTU4LjI0MjAwMDAwMDAwMDAyTDQwNy43NjIwMDAwMDAwMDAwNiwxNjQuMjY5TDQxMy40MTMwMDAwMDAwMDAwNywxNjkuOTIwMDAwMDAwMDAwMDJWMTczLjQ5OTAwMDAwMDAwMDAyTDQwMy44MDcwMDAwMDAwMDAxLDE3NS41NzEwMDAwMDAwMDAwM0wzOTkuMjg2MDAwMDAwMDAwMDYsMTcxLjA1MDAwMDAwMDAwMDA0TDM5My40NDcwMDAwMDAwMDAwNiwxNzQuODE3MDAwMDAwMDAwMDRWMTc5LjkwMjAwMDAwMDAwMDA0TDM4OC41NTAwMDAwMDAwMDAwNywxODIuNzI3MDAwMDAwMDAwMDNMMzg1LjM0ODAwMDAwMDAwMDA3LDE3Ny44MzAwMDAwMDAwMDAwNEwzNzQuNDIzMDAwMDAwMDAwMDYsMTc0LjA2MzAwMDAwMDAwMDA1TDM2Ny4yNjYwMDAwMDAwMDAxLDE3OC43NzIwMDAwMDAwMDAwNUwzNTkuMzU1MDAwMDAwMDAwMSwxNzMuNjg2MDAwMDAwMDAwMDRMMzU0LjI3MDAwMDAwMDAwMDEsMTcxLjQyNjAwMDAwMDAwMDA0VjE2Ny42NTkwMDAwMDAwMDAwNUwzNDcuMTU5MDAwMDAwMDAwMSwxNjQuMDMzMDAwMDAwMDAwMDRMMzQzLjkxMDAwMDAwMDAwMDEsMTYwLjc4NDAwMDAwMDAwMDA1SDMzOC4zNTMwMDAwMDAwMDAwN0wzMzQuMTE1MDAwMDAwMDAwMDcsMTU2LjU0NjAwMDAwMDAwMDA1TDMyOS45NzEwMDAwMDAwMDAwNiwxNjMuNzAzMDAwMDAwMDAwMDZMMzIzLjM3ODAwMDAwMDAwMDA0LDE3MS4wNDkwMDAwMDAwMDAwNkwzMjEuMTE4MDAwMDAwMDAwMDUsMTY4Ljc4OTAwMDAwMDAwMDA3TDMxNS40NjgwMDAwMDAwMDAxLDE2OS43MzAwMDAwMDAwMDAwOFYxNzQuNDM5MDAwMDAwMDAwMDhMMzA3LjU1NzAwMDAwMDAwMDEsMTgwLjg0MzAwMDAwMDAwMDA3TDI5OC4xMzkwMDAwMDAwMDAwNywxODMuMTAzMDAwMDAwMDAwMDdMMjk1Ljg3OTAwMDAwMDAwMDEsMTc2LjMyMjAwMDAwMDAwMDA2TDI4NC45NTEwMDAwMDAwMDAxLDE3Ni44ODcwMDAwMDAwMDAwNkwyNzkuODY3MDAwMDAwMDAwMSwxNzAuNjcwMDAwMDAwMDAwMDRMMjcyLjcwODAwMDAwMDAwMDEsMTU4LjgwNzAwMDAwMDAwMDA0VjE1My43MjEwMDAwMDAwMDAwM0wyNjkuMzE4MDAwMDAwMDAwMSwxNDguMjU5MDAwMDAwMDAwMDRMMjczLjMyMDAwMDAwMDAwMDEsMTQxLjUyNTAwMDAwMDAwMDAzTDI3Ny41MTEwMDAwMDAwMDAxLDEzNy4zMzQwMDAwMDAwMDAwM1YxMzMuNDczMDAwMDAwMDAwMDRMMjgyLjMxNDAwMDAwMDAwMDEsMTI4LjY3MDAwMDAwMDAwMDA0TDI4MC44MDcwMDAwMDAwMDAxLDEyMi42NDMwMDAwMDAwMDAwNEwyODcuOTY0MDAwMDAwMDAwMDYsMTIzLjU4NTAwMDAwMDAwMDA0TDI5NC4zNjgwMDAwMDAwMDAwNSwxMjYuMDM0MDAwMDAwMDAwMDNMMjk1LjMxMDAwMDAwMDAwMDA2LDExOC42ODgwMDAwMDAwMDAwM0wzMDEuNzEyMDAwMDAwMDAwMDUsMTE2LjQ1MjAwMDAwMDAwMDAzTDMxOC41NTcsMTIxLjYxNDAwMDAwMDAwMDAzTDMyMy45OTEwMDAwMDAwMDAwNCwxMTMuNzM1MDAwMDAwMDAwMDNMMzM0LjA0MzAwMDAwMDAwMDA2LDExMy4xOTIwMDAwMDAwMDAwMkMzMzQuMDQzMDAwMDAwMDAwMDYsMTEzLjE5MjAwMDAwMDAwMDAyLDM0MC42NTcwMDAwMDAwMDAwNCwxMTQuNDIwMDAwMDAwMDAwMDIsMzQxLjEwNzAwMDAwMDAwMDEsMTE0LjAwNzAwMDAwMDAwMDAyUzM0Mi43MzcwMDAwMDAwMDAxLDEwNC40OTgwMDAwMDAwMDAwMiwzNDIuNzM3MDAwMDAwMDAwMSwxMDQuNDk4MDAwMDAwMDAwMDJMMzQ0LjkxMDAwMDAwMDAwMDEsOTUuODA0MDAwMDAwMDAwMDJMMzQwLjI5MTAwMDAwMDAwMDA1LDkxLjE4NTAwMDAwMDAwMDAyTDM0NC42MzgwMDAwMDAwMDAwMyw4Ni44MzgwMDAwMDAwMDAwMkgzNTEuOTczTDM1NS43NzcsOTAuMzcwMDAwMDAwMDAwMDJMMzYxLjc1Mzk5OTk5OTk5OTk2LDg3LjExMDAwMDAwMDAwMDAxTDM2NS4wMTM5OTk5OTk5OTk5NSw5Mi44MTYwMDAwMDAwMDAwMkwzNjkuOTAzOTk5OTk5OTk5OTQsOTAuNjQzMDAwMDAwMDAwMDFMMzc1LjMzNzk5OTk5OTk5OTk3LDk3LjE2NDAwMDAwMDAwMDAyTDM3Mi44OTMsMTAyLjU5ODAwMDAwMDAwMDAxTDM3NS42MDk5OTk5OTk5OTk5NiwxMTEuMDIwMDAwMDAwMDAwMDFMMzgwLjM2NCwxMTUuNzc0MDAwMDAwMDAwMDJMMzg0Ljg0NywxMjAuMjU3MDAwMDAwMDAwMDJMMzg1LjM5LDEyOC4xMzYwMDAwMDAwMDAwMkwzODcuMTU2LDEyOS45MDIwMDAwMDAwMDAwMkwzOTMuMjY5LDEyNC4zMzIwMDAwMDAwMDAwMkw0MDEuMTUxLDEyNy44NjNaXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogXCJqaWhvbW9yYXZza3lcIixcbiAgICAgICAgICBuYW1lOiBcIkppaG9tb3JhdnNrw70ga3JhalwiLFxuICAgICAgICAgIHBvbHlnb246IFwiTTU0Ni42NjcsMzM2Ljc3N0w1NDAuNSwzMzAuNjFINTIyTDUxOC4zMzMsMzM2LjYxSDUwNkw1MDIuNzUsMzM5Ljg2TDUwMS41LDM0NC42MUw1MDYuNzUsMzQ4LjExTDUwNS4yNSwzNTEuMTFMNTAwLjI1LDM1NC4xMUw1MDMsMzYwLjYxTDUwMC43NSwzNjUuMzZMNTAyLjc1LDM3MC4zNkw1MDMuMjUsMzc5LjM2TDQ5My41LDM4My44Nkw0OTEuNzUsMzg3Ljg2TDQ4Ny4yNSwzOTAuODZMNDkxLDM5NS42MUw0ODcsMzk4Ljg2TDQ4NS43NSw0MDMuMzZMNDkxLDQwOC42MUw0ODUuMjUsNDEyLjExTDQ4Ni43NSw0MTcuMTFDNDg2Ljc1LDQxNy4xMSw0OTEuMTIsNDE5LjY5Nyw0OTEuMjUsNDIwLjM2UzQ4OS41LDQyMy42MSw0ODkuNSw0MjMuNjFMNDg1Ljc1LDQyNC42MUw0ODMuNSw0MzAuMTFMNDc4Ljc1LDQyOC44Nkw0NzUuNzUsNDMzLjYxTDQ3MC4yNSw0MzYuMzZMNDY0LjUsNDM0LjYxTDQ2MC4yNSw0MzcuMTFMNDU0LDQzMi44Nkw0NDcsNDM1Ljg2TDQ0NC43NSw0NDEuMTFINDM4Ljc1TDQzNS41LDQ0NS42MUw0MzIsNDQ2LjYxTDQyOSw0NTIuMzZMNDIzLjI1LDQ0OC4xMUw0MTcuNzUsNDUzLjg2TDQxMy4yNSw0NTAuNjFMNDA4Ljc1LDQ1Mi44Nkw0MDUuNSw0NTkuODZMNDA5LjAzLDQ2MC40MDlMNDE2LjA5Mjk5OTk5OTk5OTk2LDQ2MS4yMjNMNDI0LjI0Mjk5OTk5OTk5OTk0LDQ2Ny4yMDFMNDMyLjM5Mzk5OTk5OTk5OTk1LDQ2OC4wMTZMNDM0LjI5NDk5OTk5OTk5OTk2LDQ2NC43NTVMNDQyLjQ0NDk5OTk5OTk5OTk0LDQ2NS41N0w0NTQuMzk5OTk5OTk5OTk5OSw0NzMuOTkyTDQ1NS43NTc5OTk5OTk5OTk5LDQ3OC4zNDAwMDAwMDAwMDAwM0w0NzEuNTE0OTk5OTk5OTk5OTMsNDg3LjAzM0w0OTAuMjYxOTk5OTk5OTk5OTQsNDg2Ljc2Mkw1MDQuNjYwOTk5OTk5OTk5OTQsNDg5LjQ3OUw1MTAuMDk0OTk5OTk5OTk5OTcsNDgzLjIyOTk5OTk5OTk5OTk2TDUxMy4wODMsNDc1LjA4TDUyMy4xMzYsNDc0LjUzN0w1MjcuNDgzLDQ3OS4xNTVMNTM3LjUzNiw0ODAuNzg0OTk5OTk5OTk5OTdMNTM4Ljg5Mzk5OTk5OTk5OTksNDg3LjU3OEw1NDQuMDU1OTk5OTk5OTk5OSw0ODUuOTQ3TDU1My4wMjE5OTk5OTk5OTk5LDQ5MS4zODJMNTYxLjE3MTk5OTk5OTk5OTksNDg5LjIwOEw1NjYuNjA1OTk5OTk5OTk5OSw0OTIuNzRMNTY5LjMyMjk5OTk5OTk5OTksNTA2LjMyNEw1NzMuNjcwOTk5OTk5OTk5OCw1MDUuNzgxTDU3Ni45MzA5OTk5OTk5OTk4LDQ5NC4zN0w1NzkuMTA0OTk5OTk5OTk5OCw0ODYuNDkxTDU4OC4wNzA5OTk5OTk5OTk4LDQ3NS4zNTFMNTkwLjI0Mzk5OTk5OTk5OTgsNDY3Ljc0Mzk5OTk5OTk5OTk3TDU5My41MDQ5OTk5OTk5OTk4LDQ2Ni4zODU5OTk5OTk5OTk5N0w1OTguMzk0OTk5OTk5OTk5OCw0NjEuNDk2SDYwMy41NTY5OTk5OTk5OTk4TDYxMy42MDk5OTk5OTk5OTk4LDQ2NS44NDI5OTk5OTk5OTk5Nkw2MjIuMzAzOTk5OTk5OTk5Nyw0NzEuMDA0OTk5OTk5OTk5OTRMNjMwLjk5Njk5OTk5OTk5OTcsNDY1LjI5OTk5OTk5OTk5OTk1TDYzOC4zMzI5OTk5OTk5OTk3LDQ3MC4xODk5OTk5OTk5OTk5NEw2NDQuODUzOTk5OTk5OTk5Nyw0NjguNTU5OTk5OTk5OTk5OTVMNjUxLjY0NTk5OTk5OTk5OTcsNDYyLjMxMDk5OTk5OTk5OTlMNjQ5LjQ5OTk5OTk5OTk5OTgsNDU5LjYxMDk5OTk5OTk5OTkzTDY0NS43NDk5OTk5OTk5OTk4LDQ1NC4xMTA5OTk5OTk5OTk5M0w2MzkuNDk5OTk5OTk5OTk5OCw0NTIuNjEwOTk5OTk5OTk5OTNMNjM5LjI0OTk5OTk5OTk5OTgsNDQ4LjYxMDk5OTk5OTk5OTkzTDYzMy40OTk5OTk5OTk5OTk4LDQ0NS4xMTA5OTk5OTk5OTk5M0w2MjYuOTk5OTk5OTk5OTk5OCw0NDcuNjEwOTk5OTk5OTk5OTNMNjIxLjQ5OTk5OTk5OTk5OTgsNDQyLjYxMDk5OTk5OTk5OTkzTDYxNi4yNDk5OTk5OTk5OTk4LDQ0Mi44NjA5OTk5OTk5OTk5M0w2MTYuNDk5OTk5OTk5OTk5OCw0MzcuMTEwOTk5OTk5OTk5OTNMNjA4LjI0OTk5OTk5OTk5OTgsNDM2LjExMDk5OTk5OTk5OTkzTDYwMS45OTk5OTk5OTk5OTk4LDQzMi42MTA5OTk5OTk5OTk5M0w2MDIuNzQ5OTk5OTk5OTk5OCw0MjYuODYwOTk5OTk5OTk5OTNMNTk5Ljc0OTk5OTk5OTk5OTgsNDIzLjYxMDk5OTk5OTk5OTkzTDU5MS40OTk5OTk5OTk5OTk4LDQyNi44NjA5OTk5OTk5OTk5M0w1ODcuNzQ5OTk5OTk5OTk5OCw0MjIuMTEwOTk5OTk5OTk5OTNMNTkyLjc0OTk5OTk5OTk5OTgsNDE2Ljg2MDk5OTk5OTk5OTkzTDU5Ny4yNDk5OTk5OTk5OTk4LDQxMy44NjA5OTk5OTk5OTk5M0w1OTcuOTk5OTk5OTk5OTk5OCw0MDguODYwOTk5OTk5OTk5OTNMNTkxLjI0OTk5OTk5OTk5OTgsNDA4LjExMDk5OTk5OTk5OTkzTDU5Mi43NDk5OTk5OTk5OTk4LDQwMi44NjA5OTk5OTk5OTk5M0w1ODkuNzQ5OTk5OTk5OTk5OCwzOTcuNjEwOTk5OTk5OTk5OTNMNTkzLjM3NDk5OTk5OTk5OTgsMzkyLjczNTk5OTk5OTk5OTkzTDU4OS40OTk5OTk5OTk5OTk4LDM4Ni4xMTA5OTk5OTk5OTk5M1YzODIuMzYwOTk5OTk5OTk5OTNMNTg2LjM3NDk5OTk5OTk5OTgsMzc5LjIzNTk5OTk5OTk5OTkzSDU3OS41TDU3OC41LDM3My44NjA5OTk5OTk5OTk5M1YzNjguODYwOTk5OTk5OTk5OTNMNTcyLjUsMzY1LjExMDk5OTk5OTk5OTkzVjM2MC42MTA5OTk5OTk5OTk5M0w1NjguNjI1LDM1Ni43MzU5OTk5OTk5OTk5M0w1NjYuMjUsMzUxLjYxMDk5OTk5OTk5OTkzSDU2MC43NUw1NTcsMzU1Ljg2MDk5OTk5OTk5OTkzTDU2MSwzNTkuODYwOTk5OTk5OTk5OTNMNTY1LjEyNSwzNjMuOTg1OTk5OTk5OTk5OTNMNTYwLjc1LDM3MC4zNjA5OTk5OTk5OTk5M0w1NTcuNzUsMzczLjM2MDk5OTk5OTk5OTkzTDU1MC4yNSwzNjcuODYwOTk5OTk5OTk5OTNMNTUzLjc1LDM2NC4zNjA5OTk5OTk5OTk5M0w1NDkuMjUsMzU4LjM2MDk5OTk5OTk5OTkzVjM1MS44NjA5OTk5OTk5OTk5M0w1NTQuMjUsMzQ2LjYxMDk5OTk5OTk5OTkzTDU0OC41LDM0NC44NjA5OTk5OTk5OTk5M0w1NDMuNzUsMzQ0LjYxMDk5OTk5OTk5OTkzTDU0Ni42NjcsMzM2Ljc3N1pcIixcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiBcInpsaW5za3lcIixcbiAgICAgICAgICBuYW1lOiBcIlpsw61uc2vDvSBrcmFqXCIsXG4gICAgICAgICAgcG9seWdvbjogXCJNNzM3LjUsMzY1LjA0Nkw3MzEuNzUsMzYyLjM2TDczMC41LDM1Ni42MUw3MjMuNSwzNTIuMTFMNzIzLDM0Ny42MUw3MTcuNSwzNDkuODZINzEyLjI1TDcwNi4yNSwzNDUuNjFMNjk4LjI1LDM0My44Nkw2OTAuMjUsMzQ3LjExTDY4NS4yNSwzNDIuODZINjc5LjVMNjc1LjM3NSwzNDYuOTg1TDY3MS4yNSwzNDUuNjFMNjY0LjUsMzUwLjExVjM1Ny4xMUM2NjQuNSwzNTcuMTEsNjYwLjE2NCwzNjEuNzM2LDY1OS4xMjUsMzYyLjQ4NVM2NTMuMjUsMzU1Ljg2LDY1My4yNSwzNTUuODZMNjQ1LjUsMzU4LjYxTDY0Ny43NSwzNjUuMzZMNjQxLDM2Ny4zNkw2MzYsMzY1Ljg2TDYzMS44NzUsMzY5Ljk4NUw2MjksMzc1LjExTDYyNS4xMjUsMzcxLjIzNUw2MTguNSwzNzEuNjFMNjE2LjUsMzY2Ljg2TDYxMi41LDM3MC4zNkw2MTQuNzUsMzc4LjExTDYxMSwzODEuODZMNjA4Ljc1LDM4NS4zNkw1OTkuMjUsMzg2Ljg2TDU5My4zNzUsMzkyLjczNUw1ODkuNzUsMzk3LjYxTDU5Mi43NSw0MDIuODZMNTkxLjI1LDQwOC4xMUw1OTgsNDA4Ljg2TDU5Ny4yNSw0MTMuODZMNTkyLjc1LDQxNi44Nkw1ODcuNzUsNDIyLjExTDU5MS41LDQyNi44Nkw1OTkuNzUsNDIzLjYxTDYwMi43NSw0MjYuODZMNjAyLDQzMi42MUw2MDguMjUsNDM2LjExTDYxNi41LDQzNy4xMUw2MTYuMjUsNDQyLjg2TDYyMS41LDQ0Mi42MUw2MjcsNDQ3LjYxTDYzMy41LDQ0NS4xMUw2MzkuMjUsNDQ4LjYxTDYzOS41LDQ1Mi42MUw2NDUuNzUsNDU0LjExTDY0OS41LDQ1OS42MUw2NTEuNjQ2LDQ2Mi4zMUg2NTYuNTM2OTk5OTk5OTk5OUw2NjMuNjAwOTk5OTk5OTk5OSw0NTcuOTYzTDY2OC40OTA5OTk5OTk5OTk5LDQ0OS41NEw2NzguNTQzOTk5OTk5OTk5OSw0NDguOTk3TDY4MC4zMDk5OTk5OTk5OTk4LDQzNS41NDhMNjg0LjI0ODk5OTk5OTk5OTgsNDMxLjYwOUw2OTcuMjg5OTk5OTk5OTk5OCw0MzAuNTIyTDcwNC4wODI5OTk5OTk5OTk5LDQyMC43NDJWNDA5LjA2TDcwNy42MTM5OTk5OTk5OTk4LDM5OS4wMDdWMzkxLjk0NEw3MTMuMDQ3OTk5OTk5OTk5OCwzODMuNTIyTDcyMC4zODM5OTk5OTk5OTk4LDM4MS42Mkw3MjcuMTc1OTk5OTk5OTk5OCwzNzguMDg4TDczMy4xNTM5OTk5OTk5OTk4LDM3NS45MTVMNzM3LjUsMzY1LjA0NlpcIixcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiBcInN0cmVkb2Nlc2t5XCIsXG4gICAgICAgICAgbmFtZTogXCJTdMWZZWRvxI1lc2vDvSBrcmFqXCIsXG4gICAgICAgICAgcG9seWdvbjogXCJNNDA0LjE2NywyNzMuMTFMMzk3LjMzMzk5OTk5OTk5OTk1LDI2OS43NzdMMzk3LjE2NywyNjUuMTFMMzkxLjY2NywyNjMuMjc3TDM4NiwyNTkuOTQ0TDM4Ni44MzMsMjU1LjI3NzAwMDAwMDAwMDAyTDM5MC4yNDgwMDAwMDAwMDAwNSwyNTAuMzQ3TDM5Mi4zMjAwMDAwMDAwMDAwNSwyNDMuNTY2TDM4NC4yMjEwMDAwMDAwMDAwNiwyMzkuMjM0TDM4OC4xNzcwMDAwMDAwMDAxLDIzMi4yNjUwMDAwMDAwMDAwMUwzODYuMTA1MDAwMDAwMDAwMSwyMjcuNzQ0MDAwMDAwMDAwMDNMMzg3LjIzNTAwMDAwMDAwMDA3LDIyMi4wOTQwMDAwMDAwMDAwMkwzODUuOTE3MDAwMDAwMDAwMSwyMTYuMDY2MDAwMDAwMDAwMDNMMzgyLjkwMzAwMDAwMDAwMDEsMjEzLjA1MjAwMDAwMDAwMDAyTDM3Ny40NDEwMDAwMDAwMDAxLDIxNi42MzEwMDAwMDAwMDAwM0wzNjguNTg4MDAwMDAwMDAwMSwyMTUuNTAxMDAwMDAwMDAwMDNWMjEwLjIyNzAwMDAwMDAwMDAzTDM2My43ODUwMDAwMDAwMDAxLDIwNS40MjQwMDAwMDAwMDAwNEwzNTcuNDc1MDAwMDAwMDAwMSwyMDQuMjAwMDAwMDAwMDAwMDVMMzU2LjE1NzAwMDAwMDAwMDEsMTk5LjQ5MTAwMDAwMDAwMDA0TDM2MC45NjAwMDAwMDAwMDAxLDE5NC42ODgwMDAwMDAwMDAwNUwzNTguMDQxMDAwMDAwMDAwMSwxODYuNjgzMDAwMDAwMDAwMDVMMzU5LjczNjAwMDAwMDAwMDEsMTgxLjk3NDAwMDAwMDAwMDA1TDM1Ni45MTEwMDAwMDAwMDAxLDE3Ny40NTMwMDAwMDAwMDAwNkwzNTkuMzU3MDAwMDAwMDAwMTQsMTczLjY4NTAwMDAwMDAwMDA2TDM1NC4yNzIwMDAwMDAwMDAxNiwxNzEuNDI1MDAwMDAwMDAwMDdWMTY3LjY1ODAwMDAwMDAwMDA3TDM0Ny4xNjEwMDAwMDAwMDAyLDE2NC4wMzIwMDAwMDAwMDAwN0wzNDMuOTEyMDAwMDAwMDAwMTUsMTYwLjc4MzAwMDAwMDAwMDA3SDMzOC4zNTUwMDAwMDAwMDAxM0wzMzQuMTE3MDAwMDAwMDAwMTMsMTU2LjU0NTAwMDAwMDAwMDA3TDMyOS45NzMwMDAwMDAwMDAxLDE2My43MDIwMDAwMDAwMDAwOEwzMjMuMzgwMDAwMDAwMDAwMSwxNzEuMDQ4MDAwMDAwMDAwMUwzMjEuMTIwMDAwMDAwMDAwMSwxNjguNzg4MDAwMDAwMDAwMUwzMTUuNDcwMDAwMDAwMDAwMTQsMTY5LjcyOTAwMDAwMDAwMDFWMTc0LjQzODAwMDAwMDAwMDFMMzA3LjU1OTAwMDAwMDAwMDE0LDE4MC44NDIwMDAwMDAwMDAxTDI5OC4xNDEwMDAwMDAwMDAxMywxODMuMTAyMDAwMDAwMDAwMUwyOTUuODgxMDAwMDAwMDAwMTQsMTc2LjMyMTAwMDAwMDAwMDA4TDI4NC45NTMwMDAwMDAwMDAxNSwxNzYuODg2MDAwMDAwMDAwMDhMMjgyLjY5MzAwMDAwMDAwMDE1LDE3OS45MDEwMDAwMDAwMDAwN0wyODMuNjM1MDAwMDAwMDAwMTYsMTg3LjA1OTAwMDAwMDAwMDA1SDI3OC45MjYwMDAwMDAwMDAxNkwyNzcuNDE5MDAwMDAwMDAwMTUsMTkxLjU4MDAwMDAwMDAwMDA0SDI3Mi41MjIwMDAwMDAwMDAxNkwyNzQuMjE3MDAwMDAwMDAwMTYsMjAwLjA1NjAwMDAwMDAwMDA0TDI3MC42MzgwMDAwMDAwMDAxNSwyMDMuNjM1MDAwMDAwMDAwMDVMMjYyLjUzOTAwMDAwMDAwMDE2LDIwMi44ODIwMDAwMDAwMDAwNkwyNTguMjA2MDAwMDAwMDAwMTMsMjA3LjIxNTAwMDAwMDAwMDA2SDI0MS44MTkwMDAwMDAwMDAxM0wyMzMuOTA4MDAwMDAwMDAwMTMsMjAzLjYzNjAwMDAwMDAwMDA1TDIyNy41MDQwMDAwMDAwMDAxMywyMDcuMDI2MDAwMDAwMDAwMDRWMjExLjU0NzAwMDAwMDAwMDAzTDIyMi4zMjQwMDAwMDAwMDAxMywyMTYuNzI3MDAwMDAwMDAwMDNIMjE2LjM5MTAwMDAwMDAwMDEzTDIxNC4zNjYwMDAwMDAwMDAxMywyMTguNzUxMDAwMDAwMDAwMDNMMjE0LjUwODAwMDAwMDAwMDEyLDIyMi42NjAwMDAwMDAwMDAwM0wyMDguODU3MDAwMDAwMDAwMSwyMTkuMjY5MDAwMDAwMDAwMDNMMjAyLjY0MjAwMDAwMDAwMDEsMjI1LjQ4NDAwMDAwMDAwMDA0TDE5My45NzcwMDAwMDAwMDAxMiwyMjUuMjk2MDAwMDAwMDAwMDVMMTg1LjY4OTAwMDAwMDAwMDEsMjMwLjM4MjAwMDAwMDAwMDA2TDE3OC4zNDMwMDAwMDAwMDAxLDIzMC43NTgwMDAwMDAwMDAwN0wxNzIuNjkyMDAwMDAwMDAwMSwyMzYuMDMyMDAwMDAwMDAwMDdMMTcxLjU2MjAwMDAwMDAwMDEsMjQyLjYyNDAwMDAwMDAwMDA4TDE2NS4zNDYwMDAwMDAwMDAxLDI0NS4yNjEwMDAwMDAwMDAwOEwxNjEuOTU2MDAwMDAwMDAwMSwyNTAuNzIzMDAwMDAwMDAwMDdMMTY0LjI1MTAwMDAwMDAwMDEsMjUzLjYwNzAwMDAwMDAwMDA2TDE2MS41MDEwMDAwMDAwMDAxLDI1Ny4xMDcwMDAwMDAwMDAxTDE2NS4wMDEwMDAwMDAwMDAxLDI2MC4zNTcwMDAwMDAwMDAxTDE2OS4wMDEwMDAwMDAwMDAxLDI1Ny44NTcwMDAwMDAwMDAxTDE3NS43NTEwMDAwMDAwMDAxLDI1OC4zNTcwMDAwMDAwMDAxTDE3Ni41MDEwMDAwMDAwMDAxLDI2Mi42MDcwMDAwMDAwMDAxTDE4MC41MDEwMDAwMDAwMDAxLDI2NC44NTcwMDAwMDAwMDAxTDE4NS4wMDEwMDAwMDAwMDAxLDI2Ny4xMDcwMDAwMDAwMDAxTDE4OS41MDEwMDAwMDAwMDAxLDI2NS4zNTcwMDAwMDAwMDAxTDE5NC43NTEwMDAwMDAwMDAxLDI3Mi4xMDcwMDAwMDAwMDAxTDE5OS43NTEwMDAwMDAwMDAxLDI3MS4xMDcwMDAwMDAwMDAxTDIwMC4wMDEwMDAwMDAwMDAxLDI3NS4xMDcwMDAwMDAwMDAxTDIwNS4wMDEwMDAwMDAwMDAxLDI3Ni4xMDcwMDAwMDAwMDAxTDIwOS4yNTEwMDAwMDAwMDAxLDI3OC44NTcwMDAwMDAwMDAxTDIwOC43NTEwMDAwMDAwMDAxLDI4NS4zNTcwMDAwMDAwMDAxTDIxMC4wMDEwMDAwMDAwMDAxLDI4OS4xMDcwMDAwMDAwMDAxTDIwNS4yNTEwMDAwMDAwMDAxLDI5My44NTcwMDAwMDAwMDAxTDIwNy41MDEwMDAwMDAwMDAxLDI5OS44NTcwMDAwMDAwMDAxTDIwNS4wMDEwMDAwMDAwMDAxLDMwNC4xMDcwMDAwMDAwMDAxTDIwNy4yNTEwMDAwMDAwMDAxLDMwOC42MDcwMDAwMDAwMDAxTDIwMi41MDEwMDAwMDAwMDAxLDMxNC4zNTcwMDAwMDAwMDAxSDE5N0wxOTEuNzUsMzE4LjEwNzAwMDAwMDAwMDFMMTk1Ljc1LDMyMi4zNTcwMDAwMDAwMDAxTDE5NCwzMjcuMzU3MDAwMDAwMDAwMUwxOTcuNSwzMzEuODU3MDAwMDAwMDAwMUwyMDAuNzUsMzM0LjM1NzAwMDAwMDAwMDFMMTk5LjUsMzM4Ljg1NzAwMDAwMDAwMDFMMTk5LjI1LDM0NC44NTcwMDAwMDAwMDAxTDIwMi41LDM1MC4zNTcwMDAwMDAwMDAxTDIxNi4yNSwzNTAuODU3MDAwMDAwMDAwMUwyMjAuNzUsMzUzLjEwNzAwMDAwMDAwMDFMMjI3Ljc1LDM0OS42MDcwMDAwMDAwMDAxTDIzMC41LDM0NC44NTcwMDAwMDAwMDAxSDIzNS4yNUwyMzksMzQ4Ljg1NzAwMDAwMDAwMDFMMjUyLjUsMzQ3LjM1NzAwMDAwMDAwMDFMMjU1LjUsMzQzLjYwNzAwMDAwMDAwMDFIMjYxLjVMMjY1LjUsMzQ4LjYwNzAwMDAwMDAwMDFMMjY5Ljc1LDM0OC44NTcwMDAwMDAwMDAxTDI3NiwzNDUuMTA3MDAwMDAwMDAwMUwyODIuNSwzNDguMTA3MDAwMDAwMDAwMUwyODcsMzQ3LjM1NzAwMDAwMDAwMDFMMjk1LDM0OS4zNTcwMDAwMDAwMDAxTDMwMi4yNSwzNTIuMzU3MDAwMDAwMDAwMUwzMDUuNzUsMzQ4LjM1NzAwMDAwMDAwMDFMMzEyLjI1LDM0NC44NTcwMDAwMDAwMDAxTDMxMC43NSwzMzcuMTA3MDAwMDAwMDAwMUwzMTYsMzMzLjM1NzAwMDAwMDAwMDFMMzIzLjc1LDMzOS44NTcwMDAwMDAwMDAxTDMyOCwzMzkuMzU3MDAwMDAwMDAwMUwzMzAuMjUsMzQ0Ljg1NzAwMDAwMDAwMDFMMzMzLjUsMzQ5LjYwNzAwMDAwMDAwMDFMMzM2LjI1LDM0Ni44NTcwMDAwMDAwMDAxTDMzNi41LDM0MS42MDcwMDAwMDAwMDAxTDM0MiwzMzYuMTA3MDAwMDAwMDAwMUwzNTAuMjUsMzM3LjM1NzAwMDAwMDAwMDFMMzU2Ljc1LDMzNy4xMDcwMDAwMDAwMDAxTDM2MS4yNSwzMzcuODU3MDAwMDAwMDAwMUwzNjMuNSwzMzMuODU3MDAwMDAwMDAwMUwzNjcuMjUsMzM1LjYwNzAwMDAwMDAwMDFMMzcyLDMzMi4zNTcwMDAwMDAwMDAxTDM3MS43NSwzMjcuMTA3MDAwMDAwMDAwMUwzNjQsMzIzLjM1NzAwMDAwMDAwMDFMMzY0LjI1LDMxNy42MDcwMDAwMDAwMDAxTDM2OCwzMTQuMTA3MDAwMDAwMDAwMUwzNjguNzUsMzEwLjEwNzAwMDAwMDAwMDFMMzcxLjc1LDMwOC4zNTcwMDAwMDAwMDAxTDM3NS43NSwzMDkuMzU3MDAwMDAwMDAwMUwzNzksMzA2LjM1NzAwMDAwMDAwMDFIMzg0Ljc1TDM4Ni43NSwzMDIuMTA3MDAwMDAwMDAwMUwzOTIuNSwzMDIuMzU3MDAwMDAwMDAwMUwzOTIsMjk2LjM1NzAwMDAwMDAwMDFMMzk2LDI5My4xMDcwMDAwMDAwMDAxTDQwMiwyOTIuNjA3MDAwMDAwMDAwMUw0MDAsMjg0LjQ0MTAwMDAwMDAwMDFMNDAzLjY2NywyODAuNzc0MDAwMDAwMDAwMUw0MDQuMTY3LDI3My4xMVpNMzEwLDI1NC4xMUwzMDUuMTY3LDI1NC42MUwzMDEuODMzOTk5OTk5OTk5OTUsMjU2Ljk0MzAwMDAwMDAwMDA0TDMwNC4xNjcsMjU4Ljk0MzAwMDAwMDAwMDA0TDMwNC42NjcsMjY0LjExTDMwMS4xNjcsMjY3LjI3N0wyOTcuMTY3LDI2NC42MUwyOTIsMjYzLjk0NEwyODkuNSwyNjYuNDQ0TDI4NC44MzMsMjY3LjYxMUwyODIuMTY2MDAwMDAwMDAwMDUsMjcxLjQ0NEwyNzguNDk5MDAwMDAwMDAwMSwyNzEuNjExTDI3NC45OTkwMDAwMDAwMDAxLDI3My4yNzc5OTk5OTk5OTk5NkwyNzMuOTk5MDAwMDAwMDAwMSwyNzUuOTQ0OTk5OTk5OTk5OTRMMjY5LjQ5OTAwMDAwMDAwMDEsMjc2Ljk0NDk5OTk5OTk5OTk0TDI2Ni4xNjYwMDAwMDAwMDAwNSwyNzMuMjc3OTk5OTk5OTk5OTZMMjY3LjgzMywyNjcuOTQ0OTk5OTk5OTk5OTRMMjYzLjE2NjAwMDAwMDAwMDA1LDI2NS42MTE5OTk5OTk5OTk5TDI2NC40OTkwMDAwMDAwMDAxLDI2Mi42MTE5OTk5OTk5OTk5TDI2MC42NjYwMDAwMDAwMDAwNSwyNjAuMTExOTk5OTk5OTk5OUwyNTcuNjY2MDAwMDAwMDAwMDUsMjU1Ljc3ODk5OTk5OTk5OTlMMjU5Ljk5OTAwMDAwMDAwMDEsMjUyLjI3ODk5OTk5OTk5OTlMMjU2LjE2NjAwMDAwMDAwMDA1LDI0Ny42MTE5OTk5OTk5OTk5TDI2My4xNjYwMDAwMDAwMDAwNSwyNDQuMTExOTk5OTk5OTk5OUwyNjUuODMzLDI0NS42MTE5OTk5OTk5OTk5TDI3MC41LDI0NS45NDQ5OTk5OTk5OTk5TDI2OS4zMzMsMjQxLjYxMTk5OTk5OTk5OTlMMjcyLjMzMywyMzkuNzc4OTk5OTk5OTk5OUwyNzYuNSwyNDAuNjExOTk5OTk5OTk5OUwyODEuMTY3LDIzOC4xMTE5OTk5OTk5OTk5TDI4My42NjcsMjM0Ljc3ODk5OTk5OTk5OTlMMjg5LjE2NywyMzQuOTQ1OTk5OTk5OTk5OUwyOTAuNSwyMzcuMjc4OTk5OTk5OTk5OUwyOTMuNjY3LDIzOC4yNzg5OTk5OTk5OTk5TDI5NC42NjcsMjM5Ljc3ODk5OTk5OTk5OTlMMjk4LjMzMzk5OTk5OTk5OTk1LDIzOC45NDU5OTk5OTk5OTk5TDI5Ny4zMzM5OTk5OTk5OTk5NSwyNDIuNjEyOTk5OTk5OTk5OTFMMzAyLjE2NywyNDMuNzc5OTk5OTk5OTk5OTJMMzA0LjMzMzk5OTk5OTk5OTk1LDI0Ny4yNzk5OTk5OTk5OTk5MkgzMDcuNTAwOTk5OTk5OTk5OUwzMTAuNTAwOTk5OTk5OTk5OSwyNTEuMTEyOTk5OTk5OTk5OTFMMzEwLDI1NC4xMVpcIixcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiBcInByYWhhXCIsXG4gICAgICAgICAgbmFtZTogXCJIbGF2bsOtIG3Em3N0byBQcmFoYVwiLFxuICAgICAgICAgIHBvbHlnb246IFwiTTI1Ni4xNjcsMjQ3LjYxTDI2My4xNjcsMjQ0LjExTDI2NS44MzM5OTk5OTk5OTk5NSwyNDUuNjFDMjY1LjgzMzk5OTk5OTk5OTk1LDI0NS42MSwyNzAuMDAyOTk5OTk5OTk5OTMsMjQ2LjQxNTAwMDAwMDAwMDAyLDI3MC41MDA5OTk5OTk5OTk5LDI0NS45NDNTMjY5LjMzMzk5OTk5OTk5OTk1LDI0MS42MSwyNjkuMzMzOTk5OTk5OTk5OTUsMjQxLjYxTDI3Mi4zMzM5OTk5OTk5OTk5NSwyMzkuNzc3MDAwMDAwMDAwMDJMMjc2LjUwMDk5OTk5OTk5OTksMjQwLjYxTDI4MS4xNjc5OTk5OTk5OTk5LDIzOC4xMUwyODMuNjY3OTk5OTk5OTk5OSwyMzQuNzc3MDAwMDAwMDAwMDJMMjg5LjE2Nzk5OTk5OTk5OTksMjM0Ljk0NDAwMDAwMDAwMDAyTDI5MC41MDA5OTk5OTk5OTk5LDIzNy4yNzcwMDAwMDAwMDAwMkwyOTMuNjY3OTk5OTk5OTk5OSwyMzguMjc3MDAwMDAwMDAwMDJMMjk0LjY2Nzk5OTk5OTk5OTksMjM5Ljc3NzAwMDAwMDAwMDAyTDI5OC4zMzQ5OTk5OTk5OTk4NywyMzguOTQ0MDAwMDAwMDAwMDJMMjk3LjMzNDk5OTk5OTk5OTg3LDI0Mi42MTEwMDAwMDAwMDAwMkwzMDIuMTY3OTk5OTk5OTk5OSwyNDMuNzc4MDAwMDAwMDAwMDJMMzA0LjMzNDk5OTk5OTk5OTg3LDI0Ny4yNzgwMDAwMDAwMDAwMkgzMDcuNTAxOTk5OTk5OTk5ODRMMzEwLjUwMTk5OTk5OTk5OTg0LDI1MS4xMTEwMDAwMDAwMDAwMkwzMTAuMDAxOTk5OTk5OTk5ODQsMjU0LjExMTAwMDAwMDAwMDAyTDMwNS4xNjg5OTk5OTk5OTk4LDI1NC42MTEwMDAwMDAwMDAwMkwzMDEuODM1OTk5OTk5OTk5OCwyNTYuOTQ0TDMwNC4xNjg5OTk5OTk5OTk4LDI1OC45NDRMMzA0LjY2ODk5OTk5OTk5OTgsMjY0LjExMUwzMDEuMTY4OTk5OTk5OTk5OCwyNjcuMjc3OTk5OTk5OTk5OTZMMjk3LjE2ODk5OTk5OTk5OTgsMjY0LjYxMUwyOTIsMjYzLjk0NEwyODkuNSwyNjYuNDQ0TDI4NC44MzMsMjY3LjYxMUwyODIuMTY2MDAwMDAwMDAwMDUsMjcxLjQ0NEwyNzguNDk5MDAwMDAwMDAwMSwyNzEuNjExTDI3NC45OTkwMDAwMDAwMDAxLDI3My4yNzc5OTk5OTk5OTk5NkwyNzMuOTk5MDAwMDAwMDAwMSwyNzUuOTQ0OTk5OTk5OTk5OTRMMjY5LjQ5OTAwMDAwMDAwMDEsMjc2Ljk0NDk5OTk5OTk5OTk0TDI2Ni4xNjYwMDAwMDAwMDAwNSwyNzMuMjc3OTk5OTk5OTk5OTZMMjY3LjgzMywyNjcuOTQ0OTk5OTk5OTk5OTRMMjYzLjE2NjAwMDAwMDAwMDA1LDI2NS42MTE5OTk5OTk5OTk5TDI2NC40OTkwMDAwMDAwMDAxLDI2Mi42MTE5OTk5OTk5OTk5TDI2MC42NjYwMDAwMDAwMDAwNSwyNjAuMTExOTk5OTk5OTk5OUwyNTcuNjY2MDAwMDAwMDAwMDUsMjU1Ljc3ODk5OTk5OTk5OTlMMjU5Ljk5OTAwMDAwMDAwMDEsMjUyLjI3ODk5OTk5OTk5OTlMMjU2LjE2NywyNDcuNjFaXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogXCJsaWJlcmVja3lcIixcbiAgICAgICAgICBuYW1lOiBcIkxpYmVyZWNrw70ga3JhalwiLFxuICAgICAgICAgIHBvbHlnb246IFwiTTQwMS4xNTEsMTI3Ljg2M0w0MDcuMTk3LDEzNC42OTdMNDA1LjMxNCwxNDIuNjA4TDQwOC41MTUwMDAwMDAwMDAwNCwxNTAuMzMxMDAwMDAwMDAwMDJMNDA3LjAwOTAwMDAwMDAwMDA3LDE1NC40NzUwMDAwMDAwMDAwMkw0MTAuNzc2MDAwMDAwMDAwMDcsMTU4LjI0MjAwMDAwMDAwMDAyTDQwNy43NjIwMDAwMDAwMDAwNiwxNjQuMjY5TDQxMy40MTMwMDAwMDAwMDAwNywxNjkuOTIwMDAwMDAwMDAwMDJWMTczLjQ5OTAwMDAwMDAwMDAyTDQwMy44MDcwMDAwMDAwMDAxLDE3NS41NzEwMDAwMDAwMDAwM0wzOTkuMjg2MDAwMDAwMDAwMDYsMTcxLjA1MDAwMDAwMDAwMDA0TDM5My40NDcwMDAwMDAwMDAwNiwxNzQuODE3MDAwMDAwMDAwMDRWMTc5LjkwMjAwMDAwMDAwMDA0TDM4OC41NTAwMDAwMDAwMDAwNywxODIuNzI3MDAwMDAwMDAwMDNMMzg1LjM0ODAwMDAwMDAwMDA3LDE3Ny44MzAwMDAwMDAwMDAwNEwzNzQuNDIzMDAwMDAwMDAwMDYsMTc0LjA2MzAwMDAwMDAwMDA1TDM2Ny4yNjYwMDAwMDAwMDAxLDE3OC43NzIwMDAwMDAwMDAwNUwzNTkuMzU1MDAwMDAwMDAwMSwxNzMuNjg2MDAwMDAwMDAwMDRMMzU0LjI3MDAwMDAwMDAwMDEsMTcxLjQyNjAwMDAwMDAwMDA0VjE2Ny42NTkwMDAwMDAwMDAwNUwzNDcuMTU5MDAwMDAwMDAwMSwxNjQuMDMzMDAwMDAwMDAwMDRMMzQzLjkxMDAwMDAwMDAwMDEsMTYwLjc4NDAwMDAwMDAwMDA1SDMzOC4zNTMwMDAwMDAwMDAwN0wzMzQuMTE1MDAwMDAwMDAwMDcsMTU2LjU0NjAwMDAwMDAwMDA1TDMyOS45NzEwMDAwMDAwMDAwNiwxNjMuNzAzMDAwMDAwMDAwMDZMMzIzLjM3ODAwMDAwMDAwMDA0LDE3MS4wNDkwMDAwMDAwMDAwNkwzMjEuMTE4MDAwMDAwMDAwMDUsMTY4Ljc4OTAwMDAwMDAwMDA3TDMxNS40NjgwMDAwMDAwMDAxLDE2OS43MzAwMDAwMDAwMDAwOFYxNzQuNDM5MDAwMDAwMDAwMDhMMzA3LjU1NzAwMDAwMDAwMDEsMTgwLjg0MzAwMDAwMDAwMDA3TDI5OC4xMzkwMDAwMDAwMDAwNywxODMuMTAzMDAwMDAwMDAwMDdMMjk1Ljg3OTAwMDAwMDAwMDEsMTc2LjMyMjAwMDAwMDAwMDA2TDI4NC45NTEwMDAwMDAwMDAxLDE3Ni44ODcwMDAwMDAwMDAwNkwyNzkuODY3MDAwMDAwMDAwMSwxNzAuNjcwMDAwMDAwMDAwMDRMMjcyLjcwODAwMDAwMDAwMDEsMTU4LjgwNzAwMDAwMDAwMDA0VjE1My43MjEwMDAwMDAwMDAwM0wyNjkuMzE4MDAwMDAwMDAwMSwxNDguMjU5MDAwMDAwMDAwMDRMMjczLjMyMDAwMDAwMDAwMDEsMTQxLjUyNTAwMDAwMDAwMDAzTDI3Ny41MTEwMDAwMDAwMDAxLDEzNy4zMzQwMDAwMDAwMDAwM1YxMzMuNDczMDAwMDAwMDAwMDRMMjgyLjMxNDAwMDAwMDAwMDEsMTI4LjY3MDAwMDAwMDAwMDA0TDI4MC44MDcwMDAwMDAwMDAxLDEyMi42NDMwMDAwMDAwMDAwNEwyODcuOTY0MDAwMDAwMDAwMDYsMTIzLjU4NTAwMDAwMDAwMDA0TDI5NC4zNjgwMDAwMDAwMDAwNSwxMjYuMDM0MDAwMDAwMDAwMDNMMjk1LjMxMDAwMDAwMDAwMDA2LDExOC42ODgwMDAwMDAwMDAwM0wzMDEuNzEyMDAwMDAwMDAwMDUsMTE2LjQ1MjAwMDAwMDAwMDAzTDMxOC41NTcsMTIxLjYxNDAwMDAwMDAwMDAzTDMyMy45OTEwMDAwMDAwMDAwNCwxMTMuNzM1MDAwMDAwMDAwMDNMMzM0LjA0MzAwMDAwMDAwMDA2LDExMy4xOTIwMDAwMDAwMDAwMkMzMzQuMDQzMDAwMDAwMDAwMDYsMTEzLjE5MjAwMDAwMDAwMDAyLDM0MC42NTcwMDAwMDAwMDAwNCwxMTQuNDIwMDAwMDAwMDAwMDIsMzQxLjEwNzAwMDAwMDAwMDEsMTE0LjAwNzAwMDAwMDAwMDAyUzM0Mi43MzcwMDAwMDAwMDAxLDEwNC40OTgwMDAwMDAwMDAwMiwzNDIuNzM3MDAwMDAwMDAwMSwxMDQuNDk4MDAwMDAwMDAwMDJMMzQ0LjkxMDAwMDAwMDAwMDEsOTUuODA0MDAwMDAwMDAwMDJMMzQwLjI5MTAwMDAwMDAwMDA1LDkxLjE4NTAwMDAwMDAwMDAyTDM0NC42MzgwMDAwMDAwMDAwMyw4Ni44MzgwMDAwMDAwMDAwMkgzNTEuOTczTDM1NS43NzcsOTAuMzcwMDAwMDAwMDAwMDJMMzYxLjc1Mzk5OTk5OTk5OTk2LDg3LjExMDAwMDAwMDAwMDAxTDM2NS4wMTM5OTk5OTk5OTk5NSw5Mi44MTYwMDAwMDAwMDAwMkwzNjkuOTAzOTk5OTk5OTk5OTQsOTAuNjQzMDAwMDAwMDAwMDFMMzc1LjMzNzk5OTk5OTk5OTk3LDk3LjE2NDAwMDAwMDAwMDAyTDM3Mi44OTMsMTAyLjU5ODAwMDAwMDAwMDAxTDM3NS42MDk5OTk5OTk5OTk5NiwxMTEuMDIwMDAwMDAwMDAwMDFMMzgwLjM2NCwxMTUuNzc0MDAwMDAwMDAwMDJMMzg0Ljg0NywxMjAuMjU3MDAwMDAwMDAwMDJMMzg1LjM5LDEyOC4xMzYwMDAwMDAwMDAwMkwzODcuMTU2LDEyOS45MDIwMDAwMDAwMDAwMkwzOTMuMjY5LDEyNC4zMzIwMDAwMDAwMDAwMkw0MDEuMTUxLDEyNy44NjNaXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogXCJ1c3RlY2t5XCIsXG4gICAgICAgICAgbmFtZTogXCLDmnN0ZWNrw70ga3JhalwiLFxuICAgICAgICAgIHBvbHlnb246IFwiTTExMC4xNzQsMTkwLjM1MUwxMTkuNjgzLDE4NS4xODlMMTE5LjQxMiwxNzcuODUzOTk5OTk5OTk5OThMMTIyLjY3MjAwMDAwMDAwMDAxLDE3NC41OTNMMTMyLjQ1MywxNzIuOTYzTDE0MC42MDQsMTc0LjA0OTk5OTk5OTk5OTk4TDE0My44NjQsMTY4LjA3Mjk5OTk5OTk5OTk4VjE2My43MjU5OTk5OTk5OTk5N0wxNDYuNTgxMDAwMDAwMDAwMDIsMTU4LjgzNTk5OTk5OTk5OTk4SDE0OS44NDFMMTUxLjQ3MSwxNjMuNzI1OTk5OTk5OTk5OTdMMTU1LjU0NiwxNjIuMzY3OTk5OTk5OTk5OTdWMTU2LjM5MDk5OTk5OTk5OTk2TDE1OC4xMjgsMTUzLjgwODk5OTk5OTk5OTk3TDE1OS42MjE5OTk5OTk5OTk5OSwxNDkuODY5OTk5OTk5OTk5OThIMTYzLjQyNDk5OTk5OTk5OTk4TDE2NS4wNTQ5OTk5OTk5OTk5OCwxNTUuMDMxOTk5OTk5OTk5OThMMTY5LjQwMiwxNTcuNzQ5TDE3Ny44MjM5OTk5OTk5OTk5OCwxNTEuNzcyTDE3OC4zNjcsMTQxLjcyTDE4Mi4zMDU5OTk5OTk5OTk5OCwxMzcuNzgxTDE4Ni43ODksMTQwLjA5TDE5Mi4yMjI5OTk5OTk5OTk5OCwxMzUuMjAwMDAwMDAwMDAwMDJMMTk1Ljc1NSwxMzguNzMyMDAwMDAwMDAwMDNMMjAyLjI3NTk5OTk5OTk5OTk4LDEzNS4yMDAwMDAwMDAwMDAwMkwyMDkuNjExLDEzNC4zODUwMDAwMDAwMDAwMkwyMTEuMjQwOTk5OTk5OTk5OTksMTM4LjE4OTAwMDAwMDAwMDAySDIxNC4yM0wyMTkuMTE5OTk5OTk5OTk5OTgsMTMzLjI5OTAwMDAwMDAwMDA0VjEyNS42OTIwMDAwMDAwMDAwNEwyMjUuMzY4OTk5OTk5OTk5OTcsMTI0LjYwNTAwMDAwMDAwMDAzTDIyOS43MTU5OTk5OTk5OTk5OCwxMjAuMjU4MDAwMDAwMDAwMDRMMjM1LjQyMSwxMjMuNzkwMDAwMDAwMDAwMDNMMjQ0LjExNDk5OTk5OTk5OTk4LDExOS4xNzEwMDAwMDAwMDAwM0wyNDcuNjQ3LDExNS42MzkwMDAwMDAwMDAwNEwyNTQuOTgyLDExNi4xODIwMDAwMDAwMDAwNEwyNTguNTE0LDEwOS4xMTkwMDAwMDAwMDAwNEgyNjMuNDA0TDI2NS4zMDYsMTExLjI5MjAwMDAwMDAwMDA0TDI3NS4wODcsMTA3Ljc2MDAwMDAwMDAwMDA1TDI3Ni4xNzQsMTAwLjk2ODAwMDAwMDAwMDA1TDI2OC4wMjI5OTk5OTk5OTk5Nyw5OC4yNTEwMDAwMDAwMDAwNVY5My4wODkwMDAwMDAwMDAwNEwyNTkuODczLDkxLjQ1OTAwMDAwMDAwMDA1TDI2Mi44NjEsODYuMDI1MDAwMDAwMDAwMDVMMjY1LjU3OCw3OC45NjEwMDAwMDAwMDAwNEwyNzMuNzI5LDgyLjc2NTAwMDAwMDAwMDA0TDI3NS42MzEsODQuNjY3MDAwMDAwMDAwMDRIMjgwLjUyMDk5OTk5OTk5OTk2TDI4OC4xMjgsODEuOTUwMDAwMDAwMDAwMDVMMjkzLjAxOCw4Ni44NDAwMDAwMDAwMDAwNUwyOTcuOTA5LDkxLjQ1OTAwMDAwMDAwMDA1TDI5OC4xOCw5Ny40MzYwMDAwMDAwMDAwNUwyOTQuMTA1LDEwNC4yMjgwMDAwMDAwMDAwNUwzMDMuMzQyMDAwMDAwMDAwMDQsMTAyLjU5ODAwMDAwMDAwMDA2TDMwMS43MTIwMDAwMDAwMDAwNSwxMTIuMTA3MDAwMDAwMDAwMDZWMTE2LjQ1NDAwMDAwMDAwMDA1TDI5NS4zMTAwMDAwMDAwMDAwNiwxMTguNjkwMDAwMDAwMDAwMDVMMjk0LjM2ODAwMDAwMDAwMDA1LDEyNi4wMzYwMDAwMDAwMDAwNkwyODcuOTY0MDAwMDAwMDAwMDYsMTIzLjU4NzAwMDAwMDAwMDA2TDI4MC44MDcwMDAwMDAwMDAxLDEyMi42NDUwMDAwMDAwMDAwN0wyODIuMzE0MDAwMDAwMDAwMSwxMjguNjcyMDAwMDAwMDAwMDVMMjc3LjUxMTAwMDAwMDAwMDEsMTMzLjQ3NTAwMDAwMDAwMDA1VjEzNy4zMzYwMDAwMDAwMDAwNEwyNzMuMzIwMDAwMDAwMDAwMSwxNDEuNTI3MDAwMDAwMDAwMDRDMjczLjMyMDAwMDAwMDAwMDEsMTQxLjUyNzAwMDAwMDAwMDA0LDI2OS4yNTAwMDAwMDAwMDAxLDE0Ny4yMTMwMDAwMDAwMDAwNSwyNjkuMzE4MDAwMDAwMDAwMSwxNDguMjYxMDAwMDAwMDAwMDVTMjcyLjcwODAwMDAwMDAwMDEsMTUzLjcyMzAwMDAwMDAwMDA0LDI3Mi43MDgwMDAwMDAwMDAxLDE1My43MjMwMDAwMDAwMDAwNFYxNTguODA5MDAwMDAwMDAwMDVMMjc5Ljg2NzAwMDAwMDAwMDEsMTcwLjY3MjAwMDAwMDAwMDA1TDI4NC45NTEwMDAwMDAwMDAxLDE3Ni44ODkwMDAwMDAwMDAwN0wyODIuNjkxMDAwMDAwMDAwMSwxNzkuOTA0MDAwMDAwMDAwMDVMMjgzLjYzMzAwMDAwMDAwMDEsMTg3LjA2MjAwMDAwMDAwMDA0SDI3OC45MjQwMDAwMDAwMDAxTDI3Ny40MTcwMDAwMDAwMDAxLDE5MS41ODMwMDAwMDAwMDAwM0gyNzIuNTIwMDAwMDAwMDAwMUwyNzQuMjE1MDAwMDAwMDAwMSwyMDAuMDU5MDAwMDAwMDAwMDNMMjcwLjYzNjAwMDAwMDAwMDEsMjAzLjYzODAwMDAwMDAwMDAzTDI2Mi41MzcwMDAwMDAwMDAxLDIwMi44ODUwMDAwMDAwMDAwNUwyNTguMjA0MDAwMDAwMDAwMDYsMjA3LjIxODAwMDAwMDAwMDA1SDI0MS44MTcwMDAwMDAwMDAwNkwyMzMuOTA2MDAwMDAwMDAwMDYsMjAzLjYzOTAwMDAwMDAwMDA0TDIyNy41MDIwMDAwMDAwMDAwNywyMDcuMDI5MDAwMDAwMDAwMDJWMjExLjU1TDIyMi4zMjIwMDAwMDAwMDAwNiwyMTYuNzMwMDAwMDAwMDAwMDJIMjE2LjM4OTAwMDAwMDAwMDA3TDIxNC4zNjQwMDAwMDAwMDAwNiwyMTguNzU0MDAwMDAwMDAwMDJMMjE0LjUwNjAwMDAwMDAwMDA2LDIyMi42NjNMMjA4Ljg1NTAwMDAwMDAwMDA1LDIxOS4yNzIwMDAwMDAwMDAwMkwyMDIuNjQwMDAwMDAwMDAwMDQsMjI1LjQ4NzAwMDAwMDAwMDAyTDE5My45NzUwMDAwMDAwMDAwNSwyMjUuMjk5MDAwMDAwMDAwMDRMMTg1LjY4NzAwMDAwMDAwMDA0LDIzMC4zODUwMDAwMDAwMDAwNUwxNzguMzQxMDAwMDAwMDAwMDQsMjMwLjc2MTAwMDAwMDAwMDA1TDE3Mi42OTAwMDAwMDAwMDAwMywyMzYuMDM1MDAwMDAwMDAwMDVMMTcxLjU2MDAwMDAwMDAwMDAzLDI0Mi42MjcwMDAwMDAwMDAwN0wxNjUuMzQ0MDAwMDAwMDAwMDIsMjQ1LjI2NDAwMDAwMDAwMDA3TDE2MS45NTQwMDAwMDAwMDAwNCwyNTAuNzI2MDAwMDAwMDAwMDZMMTU1LjE3MzAwMDAwMDAwMDAzLDI0Ni43NzAwMDAwMDAwMDAwN0wxNTEuMDI2MDAwMDAwMDAwMDQsMjQ2Ljc3MTAwMDAwMDAwMDA3TDE0NC4wNTcwMDAwMDAwMDAwNCwyMzkuODAxMDAwMDAwMDAwMDdMMTQ4Ljc2NjAwMDAwMDAwMDA1LDIzNS4wOTMwMDAwMDAwMDAwN0wxNDQuMDU4MDAwMDAwMDAwMDUsMjI4LjY4OTAwMDAwMDAwMDA4TDE0NS43NTMwMDAwMDAwMDAwNCwyMjUuMTEwMDAwMDAwMDAwMDdMMTQxLjYwOTAwMDAwMDAwMDA0LDIyMC45NjYwMDAwMDAwMDAwN0wxNDMuMzA0MDAwMDAwMDAwMDMsMjE0Ljc1MTAwMDAwMDAwMDA2TDE0MC43NjEwMDAwMDAwMDAwMiwyMDkuOTQ4MDAwMDAwMDAwMDZMMTQ1LjM3NjAwMDAwMDAwMDAzLDIwNS4zMzMwMDAwMDAwMDAwNkwxNDAuNjY3MDAwMDAwMDAwMDMsMjAwLjYyNDAwMDAwMDAwMDA1TDEyOS45MzEwMDAwMDAwMDAwNCwyMDEuNzU0MDAwMDAwMDAwMDVWMTk3LjA0NTAwMDAwMDAwMDA0TDEyNS4wMzQwMDAwMDAwMDAwMywxOTUuMTk1MDAwMDAwMDAwMDVIMTE1LjAxNzAwMDAwMDAwMDA0TDExMC4xNzQsMTkwLjM1MVpcIixcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiBcInZ5c29jaW5hXCIsXG4gICAgICAgICAgbmFtZTogXCJLcmFqIFZ5c2/EjWluYVwiLFxuICAgICAgICAgIHBvbHlnb246IFwiTTUwMi43NSwzMzkuODZMNDk1LjUsMzMyLjYxTDQ4OS42NjcsMzMyLjQ0MzAwMDAwMDAwMDA0TDQ4Mi41LDMyMy45NDMwMDAwMDAwMDAwNEw0NjguNSwzMjAuNzc3MDAwMDAwMDAwMDRMNDY2LDMxNC45NDMwMDAwMDAwMDAwNEw0NTkuMzMzLDMxNS4xMVYzMTEuNDQzMDAwMDAwMDAwMDRMNDUyLjUsMzE1Ljc3NzAwMDAwMDAwMDA0QzQ1Mi41LDMxNS43NzcwMDAwMDAwMDAwNCw0NTIuNzI5LDMyMS4yNTUwMDAwMDAwMDAwNSw0NTIuNSwzMjEuNDQzMDAwMDAwMDAwMDRTNDQ0LjgzMywzMTguNzc3MDAwMDAwMDAwMDQsNDQ0LjgzMywzMTguNzc3MDAwMDAwMDAwMDRMNDQxLDMxNi43NzcwMDAwMDAwMDAwNFYzMTEuNzc3MDAwMDAwMDAwMDRMNDM1LjgzMywzMDkuMTEwMDAwMDAwMDAwMDdMNDMxLjgzMywzMDguMjc3MDAwMDAwMDAwMDRMNDI3LjY2NzAwMDAwMDAwMDAzLDMwMy45NDMwMDAwMDAwMDAwNEw0MjAuNjY3MDAwMDAwMDAwMDMsMjk5LjQ0MzAwMDAwMDAwMDA0TDQxMSwyOTkuNjFMNDAyLDI5Mi42MUwzOTYsMjkzLjExTDM5MiwyOTYuMzZMMzkyLjUsMzAyLjM2TDM4Ni43NSwzMDIuMTFMMzg0Ljc1LDMwNi4zNkgzNzlMMzc1Ljc1LDMwOS4zNkwzNzEuNzUsMzA4LjM2TDM2OC43NSwzMTAuMTFMMzY4LDMxNC4xMUwzNjQuMjUsMzE3LjYxTDM2NCwzMjMuMzZMMzcxLjc1LDMyNy4xMUMzNzEuNzUsMzI3LjExLDM3Mi4wMzIsMzMxLjcyNiwzNzIsMzMyLjM2UzM2Ny4yNSwzMzUuNjEsMzY3LjI1LDMzNS42MUwzNjMuNSwzMzMuODZMMzYxLjI1LDMzNy44NkwzNTYuNzUsMzM3LjExTDM1MC4yNSwzMzcuMzZMMzQyLDMzNi4xMUwzMzYuNSwzNDEuNjFMMzM2LjI1LDM0Ni44NkwzMzMuNSwzNDkuNjFMMzM1LjI1LDM1Ni4xMUwzMzUsMzYzLjExTDMzMiwzNjYuODZWMzc0LjYxTDMzNC43NSwzODAuMzZMMzMzLjUsMzg0Ljg2TDMzNi4yNSwzODkuODZMMzQxLjc1LDM5NC4zNkwzNDYuNSwzOTEuNjFMMzUyLjc1LDM5NS4xMUwzNTUuNSw0MDAuMTFMMzYxLDQwNS4xMUwzNjYsNDAyLjM2TDM3NCw0MDUuMzZMMzgxLjI1LDQwNC4xMUwzODQuNSw0MDguNjFMMzgzLjUsNDE0LjExTDM5MCw0MjAuNjFMMzk4LjUsNDIwLjg2TDQwNS41LDQxOS4zNkw0MTIuNzUsNDI1LjExTDQxMiw0MjkuNjFMNDA2Ljc1LDQzMC42MUw0MDUuNzUsNDM2Ljg2TDQwMC4yNSw0NDIuNjFMNDA0Ljc1LDQ0Ni42MUw0MDguNzUsNDUyLjg2TDQxMy4yNSw0NTAuNjFMNDE3Ljc1LDQ1My44Nkw0MjMuMjUsNDQ4LjExTDQyOSw0NTIuMzZMNDMyLDQ0Ni42MUw0MzUuNSw0NDUuNjFMNDM4Ljc1LDQ0MS4xMUg0NDQuNzVMNDQ3LDQzNS44Nkw0NTQsNDMyLjg2TDQ2MC4yNSw0MzcuMTFMNDY0LjUsNDM0LjYxTDQ3MC4yNSw0MzYuMzZMNDc1Ljc1LDQzMy42MUw0NzguNzUsNDI4Ljg2TDQ4My41LDQzMC4xMUw0ODUuNzUsNDI0LjYxTDQ4OS41LDQyMy42MUw0OTEuMjUsNDIwLjM2TDQ4Ni43NSw0MTcuMTFMNDg1LjI1LDQxMi4xMUw0OTEsNDA4LjYxTDQ4NS43NSw0MDMuMzZMNDg3LDM5OC44Nkw0OTEsMzk1LjYxTDQ4Ny4yNSwzOTAuODZMNDkxLjc1LDM4Ny44Nkw0OTMuNSwzODMuODZMNTAzLjI1LDM3OS4zNkw1MDIuNzUsMzcwLjM2TDUwMC43NSwzNjUuMzZMNTAzLDM2MC42MUw1MDAuMjUsMzU0LjExTDUwNS4yNSwzNTEuMTFMNTA2Ljc1LDM0OC4xMUw1MDEuNSwzNDQuNjFMNTAyLjc1LDMzOS44NlpcIixcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiBcInBhcmR1Ymlja3lcIixcbiAgICAgICAgICBuYW1lOiBcIlBhcmR1Ymlja8O9IGtyYWpcIixcbiAgICAgICAgICBwb2x5Z29uOiBcIk01NTUuNzQyLDIyNi43NTdMNTU0LDIzNC45NDRMNTQ5LjMzMywyNDMuOTQ0TDU0Ny44MzMsMjUyLjYxMUw1NTAuMzMzLDI1Ni43Nzc5OTk5OTk5OTk5Nkw1NDAuMzMzLDI2NC45NDQ5OTk5OTk5OTk5NFYyNzAuNjExOTk5OTk5OTk5OUw1NDIuODMzLDI3Ni40NDQ5OTk5OTk5OTk5NEw1NDMuODMzLDI4My43Nzg5OTk5OTk5OTk5NEw1NDYuMjUsMjg2LjE5NTk5OTk5OTk5OTlMNTQwLjY2NywyODkuOTQ0OTk5OTk5OTk5OTRMNTQ0LjgzMzAwMDAwMDAwMDEsMjk4LjExMTk5OTk5OTk5OTlMNTQ5LjMzMzAwMDAwMDAwMDEsMzA2Ljk0NDk5OTk5OTk5OTk0VjMxMS40NDQ5OTk5OTk5OTk5NEw1NTUuMDAwMDAwMDAwMDAwMSwzMTMuOTQ0OTk5OTk5OTk5OTRWMzIxLjQ0NDk5OTk5OTk5OTk0TDU0OS44MzMwMDAwMDAwMDAxLDMyNi42MTE5OTk5OTk5OTk5VjMzMi4yNzg5OTk5OTk5OTk5TDU0Ni42NjcsMzM2Ljc3ODk5OTk5OTk5OTlMNTQwLjUsMzMwLjYxMTk5OTk5OTk5OTlINTIyTDUxOC4zMzMsMzM2LjYxMTk5OTk5OTk5OTlINTA2TDUwMi43NSwzMzkuODYxOTk5OTk5OTk5OUw0OTUuNSwzMzIuNjExOTk5OTk5OTk5OUw0ODkuNjY3LDMzMi40NDQ5OTk5OTk5OTk5NEw0ODIuNSwzMjMuOTQ0OTk5OTk5OTk5OTRMNDY4LjUsMzIwLjc3ODk5OTk5OTk5OTk0TDQ2NiwzMTQuOTQ0OTk5OTk5OTk5OTRMNDU5LjMzMywzMTUuMTExOTk5OTk5OTk5OVYzMTEuNDQ0OTk5OTk5OTk5OTRMNDUyLjUsMzE1Ljc3ODk5OTk5OTk5OTk0VjMyMS40NDQ5OTk5OTk5OTk5NEw0NDQuODMzLDMxOC43Nzg5OTk5OTk5OTk5NEw0NDEsMzE2Ljc3ODk5OTk5OTk5OTk0VjMxMS43Nzg5OTk5OTk5OTk5NEw0MzUuODMzLDMwOS4xMTE5OTk5OTk5OTk5N0w0MzEuODMzLDMwOC4yNzg5OTk5OTk5OTk5NEw0MjcuNjY3MDAwMDAwMDAwMDMsMzAzLjk0NDk5OTk5OTk5OTk0TDQyMC42NjcwMDAwMDAwMDAwMywyOTkuNDQ0OTk5OTk5OTk5OTRMNDExLDI5OS42MUw0MDIsMjkyLjYxTDQwMCwyODQuNDQ0TDQwMy42NjcsMjgwLjc3NzAwMDAwMDAwMDA0TDQwNC4xNjcsMjczLjExMDAwMDAwMDAwMDA3TDM5Ny4zMzM5OTk5OTk5OTk5NSwyNjkuNzc3MDAwMDAwMDAwMDRMMzk3LjE2NywyNjUuMTEwMDAwMDAwMDAwMDdMMzkxLjY2NywyNjMuMjc3MDAwMDAwMDAwMDRMMzg2LDI1OS45NDRMMzg2LjgzMywyNTUuMjc3MDAwMDAwMDAwMDJMMzkwLjI0ODAwMDAwMDAwMDA1LDI1MC4zNDdMMzk4Ljk1OTAwMDAwMDAwMDA2LDI0OC40MDMwMDAwMDAwMDAwMkw0MDguODk1MDAwMDAwMDAwMDQsMjM5Ljc5OTAwMDAwMDAwMDA0TDQxNC4xNjkwMDAwMDAwMDAwNCwyNDIuODEzMDAwMDAwMDAwMDVDNDE0LjE2OTAwMDAwMDAwMDA0LDI0Mi44MTMwMDAwMDAwMDAwNSw0MjMuMjk4MDAwMDAwMDAwMDYsMjQzLjE0MzAwMDAwMDAwMDA2LDQyMy43NzQwMDAwMDAwMDAwNiwyNDIuODEzMDAwMDAwMDAwMDVTNDI4Ljg2MDAwMDAwMDAwMDA3LDIzNS44NDQwMDAwMDAwMDAwNSw0MjguODYwMDAwMDAwMDAwMDcsMjM1Ljg0NDAwMDAwMDAwMDA1SDQzMy43NTcwMDAwMDAwMDAwNlYyNDEuNDk1MDAwMDAwMDAwMDZMNDM3LjI0MTAwMDAwMDAwMDA0LDI0Mi43MjAwMDAwMDAwMDAwNkw0NDAuNTM3MDAwMDAwMDAwMDMsMjM5LjQyNDAwMDAwMDAwMDA2TDQ0Ni45NDEwMDAwMDAwMDAwMywyMzYuMjIyMDAwMDAwMDAwMDdMNDU0LjY2NDAwMDAwMDAwMDA0LDIzNi40MTAwMDAwMDAwMDAwNUw0NTguMDU1MDAwMDAwMDAwMDYsMjM5LjgwMDAwMDAwMDAwMDA0VjI0Ni4zOTMwMDAwMDAwMDAwM0g0NjIuNTc2MDAwMDAwMDAwMUw0NjYuNzIwMDAwMDAwMDAwMSwyNTAuNTM3MDAwMDAwMDAwMDNMNDczLjk3MjAwMDAwMDAwMDEsMjU0Ljc3NTAwMDAwMDAwMDAzTDQ3OC4yMTAwMDAwMDAwMDAxLDI1OS4wMTMwMDAwMDAwMDAwM0w0ODQuODAyMDAwMDAwMDAwMSwyNTcuMTMwMDAwMDAwMDAwMDVINDk0LjIyMDAwMDAwMDAwMDFMNDk1LjkxNTAwMDAwMDAwMDEsMjQ5Ljk3MzAwMDAwMDAwMDA0TDUwMS4xODkwMDAwMDAwMDAxLDI0NC42OTkwMDAwMDAwMDAwNEw1MTEuMTcxMDAwMDAwMDAwMDUsMjQxLjg3NDAwMDAwMDAwMDA1VjIzNi40MTIwMDAwMDAwMDAwNkg1MTUuMTI2MDAwMDAwMDAwMUw1MjMuNTIxMDAwMDAwMDAwMSwyNDAuMTcxMDAwMDAwMDAwMDVMNTM1LjkwODAwMDAwMDAwMDEsMjQ3LjEzNjAwMDAwMDAwMDA1TDU0Mi45NzEwMDAwMDAwMDAxLDI0MC4wNzMwMDAwMDAwMDAwNkw1NDYuNjM5MDAwMDAwMDAwMSwyMzYuNDA1MDAwMDAwMDAwMDZMNTQ2LjUwMzAwMDAwMDAwMDIsMjMwLjAyMDAwMDAwMDAwMDA3TDU1NS43NDIsMjI2Ljc1N1pcIixcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiBcImtyYWxvdmVocmFkZWNreVwiLFxuICAgICAgICAgIG5hbWU6IFwiS3LDoWxvdsOpaHJhZGVja8O9IGtyYWpcIixcbiAgICAgICAgICBwb2x5Z29uOiBcIk00MDEuMTUxLDEyNy44NjNMNDA5LjMwMiwxMjguNDA2TDQxOC4yNjcsMTMyLjQ4MUw0MjAuOTg0LDEzNS4xOThMNDI3LjIzMywxMzYuMjg1TDQzNC4wMjUsMTMyLjQ4MUw0MzYuNzQxOTk5OTk5OTk5OTYsMTM4LjQ1OEw0NDAuNTQ1OTk5OTk5OTk5OTQsMTQ2Ljg4SDQ0NS40MzY5OTk5OTk5OTk5NUw0NTIuNDk5OTk5OTk5OTk5OTQsMTQ0LjE2Mjk5OTk5OTk5OTk4TDQ1Ni44NDc5OTk5OTk5OTk5NiwxNTIuMzEzTDQ1Ni4zMDQsMTU3LjQ3NUw0NjMuMDk3LDE1Mi41ODVMNDY3LjcxNSwxNDcuOTY2TDQ3NS44NjQ5OTk5OTk5OTk5NSwxNTMuNjcxMDAwMDAwMDAwMDJMNDc5Ljk0MSwxNTMuOTQzTDQ4MS4yOTksMTQ3Ljk2Nkg0OTIuNDM4TDUwNi4yOTQsMTYxLjU1TDUwMS42NzQ5OTk5OTk5OTk5NSwxNjUuNjI2TDUwMC41ODc5OTk5OTk5OTk5NywxNzMuNTA1TDQ5MS44OTUsMTc2Ljc2NUw0NzkuMzk3LDE4Ni41NDZMNDgwLjQ4NCwxOTEuOThMNDg3LjU0Njk5OTk5OTk5OTk3LDIwMC4xM0w0OTMuNTI1LDE5Ny4xNDJMNDk2LjkyMSwyMDAuNTM3OTk5OTk5OTk5OThWMjA0Ljc0OUw1MDAuNzkyLDIwOC42MjA5OTk5OTk5OTk5OEw1MDUuNzUsMjA4LjAxTDUxMS40NTYsMjE4LjA2M0w1MTkuMzM1LDIyNC4zMTE5OTk5OTk5OTk5OEw1MjAuNjkzLDIzNC4zNjQ5OTk5OTk5OTk5OEw1MjMuNTIxLDI0MC4xNjg5OTk5OTk5OTk5OEw1MTUuMTI2LDIzNi40MUg1MTEuMTcxVjI0MS44NzE5OTk5OTk5OTk5OUw1MDEuMTg4OTk5OTk5OTk5OTYsMjQ0LjY5Njk5OTk5OTk5OTk3TDQ5NS45MTQ5OTk5OTk5OTk5NiwyNDkuOTcwOTk5OTk5OTk5OThMNDk0LjIxOTk5OTk5OTk5OTk3LDI1Ny4xMjhINDg0LjgwMTk5OTk5OTk5OTk2TDQ3OC4yMSwyNTkuMDEwOTk5OTk5OTk5OTdMNDczLjk3MiwyNTQuNzcyOTk5OTk5OTk5OTdMNDY2LjcxOTk5OTk5OTk5OTk3LDI1MC41MzQ5OTk5OTk5OTk5N0w0NjIuNTc1OTk5OTk5OTk5OTYsMjQ2LjM5MDk5OTk5OTk5OTk2SDQ1OC4wNTQ5OTk5OTk5OTk5NVYyMzkuOEw0NTQuNjYzOTk5OTk5OTk5OTMsMjM2LjQxMDAwMDAwMDAwMDAzTDQ0Ni45NDA5OTk5OTk5OTk5LDIzNi4yMjIwMDAwMDAwMDAwNEw0NDAuNTM2OTk5OTk5OTk5OSwyMzkuNDI0MDAwMDAwMDAwMDRMNDM3LjI0MDk5OTk5OTk5OTkzLDI0Mi43MjAwMDAwMDAwMDAwM0M0MzcuMjQwOTk5OTk5OTk5OTMsMjQyLjcyMDAwMDAwMDAwMDAzLDQzNC4wOTI5OTk5OTk5OTk5LDI0MS42MjEwMDAwMDAwMDAwNCw0MzMuNzU2OTk5OTk5OTk5OTUsMjQxLjQ5NTAwMDAwMDAwMDAzUzQzMy43NTY5OTk5OTk5OTk5NSwyMzUuODQ0MDAwMDAwMDAwMDIsNDMzLjc1Njk5OTk5OTk5OTk1LDIzNS44NDQwMDAwMDAwMDAwMkg0MjguODU5OTk5OTk5OTk5OTZMNDIzLjc3Mzk5OTk5OTk5OTk0LDI0Mi44MTMwMDAwMDAwMDAwMkg0MTQuMTY4OTk5OTk5OTk5OUw0MDguODk0OTk5OTk5OTk5OSwyMzkuNzk5TDM5OC45NTg5OTk5OTk5OTk5NSwyNDguNDAzMDAwMDAwMDAwMDJMMzkwLjI0Nzk5OTk5OTk5OTkzLDI1MC4zNDdMMzkyLjMxOTk5OTk5OTk5OTk0LDI0My41NjZMMzg0LjIyMDk5OTk5OTk5OTk1LDIzOS4yMzRMMzg4LjE3Njk5OTk5OTk5OTk2LDIzMi4yNjUwMDAwMDAwMDAwMUwzODYuMTA0OTk5OTk5OTk5OTYsMjI3Ljc0NDAwMDAwMDAwMDAzTDM4Ny4yMzQ5OTk5OTk5OTk5NiwyMjIuMDk0MDAwMDAwMDAwMDJMMzg1LjkxNywyMTYuMDY2MDAwMDAwMDAwMDNMMzgyLjkwMjk5OTk5OTk5OTk2LDIxMy4wNTIwMDAwMDAwMDAwMkwzNzcuNDQxLDIxNi42MzEwMDAwMDAwMDAwM0wzNjguNTg3OTk5OTk5OTk5OTcsMjE1LjUwMTAwMDAwMDAwMDAzVjIxMC4yMjcwMDAwMDAwMDAwM0wzNjMuNzg0OTk5OTk5OTk5OTcsMjA1LjQyNDAwMDAwMDAwMDA0TDM1Ny40NzQ5OTk5OTk5OTk5NywyMDQuMjAwMDAwMDAwMDAwMDVMMzU2LjE1NywxOTkuNDkxMDAwMDAwMDAwMDRMMzYwLjk2LDE5NC42ODgwMDAwMDAwMDAwNUwzNTguMDQxLDE4Ni42ODMwMDAwMDAwMDAwNUwzNTkuNzM2LDE4MS45NzQwMDAwMDAwMDAwNUwzNTYuOTExLDE3Ny40NTMwMDAwMDAwMDAwNkwzNTkuMzU3LDE3My42ODUwMDAwMDAwMDAwNkwzNjcuMjY4MDAwMDAwMDAwMDMsMTc4Ljc3MTAwMDAwMDAwMDA3TDM3NC40MjUsMTc0LjA2MjAwMDAwMDAwMDA3TDM4NS4zNSwxNzcuODI5MDAwMDAwMDAwMDZMMzg4LjU1MiwxODIuNzI2MDAwMDAwMDAwMDZMMzkzLjQ0OSwxNzkuOTAxMDAwMDAwMDAwMDdWMTc0LjgxNjAwMDAwMDAwMDA2TDM5OS4yODgsMTcxLjA0OTAwMDAwMDAwMDA2TDQwMy44MDksMTc1LjU3MDAwMDAwMDAwMDA1QzQwMy44MDksMTc1LjU3MDAwMDAwMDAwMDA1LDQxMy4zMTcsMTczLjYwNTAwMDAwMDAwMDA1LDQxMy40MTUsMTczLjQ5ODAwMDAwMDAwMDA1UzQxMy40MTUsMTY5LjkxOTAwMDAwMDAwMDA0LDQxMy40MTUsMTY5LjkxOTAwMDAwMDAwMDA0TDQwNy43NjQsMTY0LjI2ODAwMDAwMDAwMDAzTDQxMC43NzgsMTU4LjI0MTAwMDAwMDAwMDA0TDQwNy4wMTEsMTU0LjQ3NDAwMDAwMDAwMDA1TDQwOC41MTcsMTUwLjMzMDAwMDAwMDAwMDA0TDQwNS4zMTYsMTQyLjYwNzAwMDAwMDAwMDAzTDQwNy4xOTg5OTk5OTk5OTk5NiwxMzQuNjk2MDAwMDAwMDAwMDNMNDAxLjE1MSwxMjcuODYzWlwiLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6IFwib2xvbW91Y2t5XCIsXG4gICAgICAgICAgbmFtZTogXCJPbG9tb3Vja8O9IGtyYWpcIixcbiAgICAgICAgICBwb2x5Z29uOiBcIk02MTcuNjg3LDIxNC4yNTlWMjI0LjYwOTk5OTk5OTk5OTk5SDYxMi43NUw2MDguMjUsMjI5LjEwOTk5OTk5OTk5OTk5TDU5OC4yNSwyMzUuNjA5OTk5OTk5OTk5OTlWMjQyLjYwOTk5OTk5OTk5OTk5TDU5NC43NSwyNDYuMTA5OTk5OTk5OTk5OTlMNTk3LjUsMjUxLjEwOTk5OTk5OTk5OTk5TDU5MS41LDI1OS42MUw1ODkuNzUsMjY3LjM2TDU5My44NzUsMjcxLjQ4NUw1OTAsMjc3Ljg2TDU4OC43NSwyODUuMzZMNTkyLjM3NSwyODguOTg1SDU5N1YyOTQuMzZINjAzLjI1TDYwNy4yNSwyOTguMzZMNjE0LjUsMjk2LjM2TDYyMC41LDMwNS4xMUg2MjUuNUw2MjkuNzUsMzA3LjM2TDYzNC43NSwzMDMuODZMNjM5LDMwOC4xMUw2NDQuNSwzMDUuMTFMNjUyLDMwOS4xMUw2NTAuMjUsMzE3LjYxSDY1OEw2NjAuNzUsMzI1LjExTDY2Ni43NSwzMjcuMTFMNjcxLjg3NSwzMzIuMjM1TDY3MS4yNSwzMzcuMzZINjc2Ljc1TDY3OS41LDM0Mi44Nkw2NzUuMzc1LDM0Ni45ODVMNjcxLjI1LDM0NS42MUw2NjQuNSwzNTAuMTFWMzU3LjExTDY1OS4xMjUsMzYyLjQ4NUw2NTMuMjUsMzU1Ljg2TDY0NS41LDM1OC42MUw2NDcuNzUsMzY1LjM2TDY0MSwzNjcuMzZMNjM2LDM2NS44Nkw2MzEuODc1LDM2OS45ODVMNjI5LDM3NS4xMUw2MjUuMTI1LDM3MS4yMzVMNjE4LjUsMzcxLjYxTDYxNi41LDM2Ni44Nkw2MTIuNSwzNzAuMzZMNjE0Ljc1LDM3OC4xMUw2MTEsMzgxLjg2TDYwOC43NSwzODUuMzZMNTk5LjI1LDM4Ni44Nkw1OTMuMzc1LDM5Mi43MzVMNTg5LjUsMzg2LjExVjM4Mi4zNkw1ODYuMzc1LDM3OS4yMzVINTc5LjVMNTc4LjUsMzczLjg2VjM2OC44Nkw1NzIuNSwzNjUuMTFWMzYwLjYxTDU2OC42MjUsMzU2LjczNUw1NjYuMjUsMzUxLjYxSDU2MC43NUw1NTcsMzU1Ljg2TDU2MSwzNTkuODZMNTY1LjEyNSwzNjMuOTg1TDU2MC43NSwzNzAuMzZMNTU3Ljc1LDM3My4zNkw1NTAuMjUsMzY3Ljg2TDU1My43NSwzNjQuMzZMNTQ5LjI1LDM1OC4zNlYzNTEuODZMNTU0LjI1LDM0Ni42MUw1NDguNSwzNDQuODZMNTQzLjc1LDM0NC42MUw1NDYuNjY3LDMzNi43NzdMNTQ5LjgzMzAwMDAwMDAwMDEsMzMyLjI3N1YzMjYuNjFMNTU1LjAwMDAwMDAwMDAwMDEsMzIxLjQ0MzAwMDAwMDAwMDA0VjMxMy45NDMwMDAwMDAwMDAwNEw1NDkuMzMzMDAwMDAwMDAwMSwzMTEuNDQzMDAwMDAwMDAwMDRWMzA2Ljk0MzAwMDAwMDAwMDA0TDU0NC44MzMwMDAwMDAwMDAxLDI5OC4xMUw1NDAuNjY3LDI4OS45NDMwMDAwMDAwMDAwNEw1NDYuMjUsMjg2LjE5NEw1NDMuODMzLDI4My43NzcwMDAwMDAwMDAwNEw1NDIuODMzLDI3Ni40NDMwMDAwMDAwMDAwNEw1NDAuMzMzLDI3MC42MVYyNjQuOTQzMDAwMDAwMDAwMDRDNTQwLjMzMywyNjQuOTQzMDAwMDAwMDAwMDQsNTUwLjIyMSwyNTcuMDMyMDAwMDAwMDAwMDQsNTUwLjMzMywyNTYuNzc2MDAwMDAwMDAwMDdTNTQ3LjgzMywyNTIuNjA5MDAwMDAwMDAwMDcsNTQ3LjgzMywyNTIuNjA5MDAwMDAwMDAwMDdMNTQ5LjMzMywyNDMuOTQyMDAwMDAwMDAwMDZMNTU0LDIzNC45NDIwMDAwMDAwMDAwNkw1NTUuNzQyLDIyNi43NTUwMDAwMDAwMDAwNUw1NjQuNDM1LDIyMi42NzkwMDAwMDAwMDAwNkg1NzEuMjI4TDU3MS40OTg5OTk5OTk5OTk5LDIxNC4yNTcwMDAwMDAwMDAwNkw1NjcuMDE2LDIwOS43NzQwMDAwMDAwMDAwNkw1NjIuNTM0LDIwOC4wMDgwMDAwMDAwMDAwN0w1NTkuMjczLDE5Ni4zMjUwMDAwMDAwMDAwN0w1NTIuMjEsMTkyLjUyMTAwMDAwMDAwMDA3TDU1Ni4wMTQsMTg1LjE4NjAwMDAwMDAwMDA2TDU2NC40MzYsMTg3LjM1OTAwMDAwMDAwMDA3TDU3MC42ODUwMDAwMDAwMDAxLDE4OC43MTcwMDAwMDAwMDAwN0w1ODEuMDA5LDE5MS43MDYwMDAwMDAwMDAwN0w1ODUuMjIsMTk1LjkxNzAwMDAwMDAwMDFMNTkyLjQyMDAwMDAwMDAwMDEsMTkzLjYwNzAwMDAwMDAwMDA4TDU5My41MDcwMDAwMDAwMDAxLDIwMC42NzEwMDAwMDAwMDAwOEw1OTkuMjEyMDAwMDAwMDAwMSwyMDUuMDE4MDAwMDAwMDAwMUg2MDcuOTA2MDAwMDAwMDAwMUw2MTAuMDc5MDAwMDAwMDAwMSwyMTIuNjI1MDAwMDAwMDAwMDlMNjE3LjY4NywyMTQuMjU5WlwiLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6IFwibW9yYXZza29zbGV6c2t5XCIsXG4gICAgICAgICAgbmFtZTogXCJNb3JhdnNrb3NsZXpza8O9IGtyYWpcIixcbiAgICAgICAgICBwb2x5Z29uOiBcIk02MTcuNjg3LDIxNC4yNTlWMjI0LjYwOTk5OTk5OTk5OTk5SDYxMi43NUw2MDguMjUsMjI5LjEwOTk5OTk5OTk5OTk5TDU5OC4yNSwyMzUuNjA5OTk5OTk5OTk5OTlWMjQyLjYwOTk5OTk5OTk5OTk5TDU5NC43NSwyNDYuMTA5OTk5OTk5OTk5OTlMNTk3LjUsMjUxLjEwOTk5OTk5OTk5OTk5TDU5MS41LDI1OS42MUw1ODkuNzUsMjY3LjM2TDU5My44NzUsMjcxLjQ4NUw1OTAsMjc3Ljg2TDU4OC43NSwyODUuMzZMNTkyLjM3NSwyODguOTg1SDU5N1YyOTQuMzZINjAzLjI1TDYwNy4yNSwyOTguMzZMNjE0LjUsMjk2LjM2TDYyMC41LDMwNS4xMUg2MjUuNUw2MjkuNzUsMzA3LjM2TDYzNC43NSwzMDMuODZMNjM5LDMwOC4xMUw2NDQuNSwzMDUuMTFMNjUyLDMwOS4xMUw2NTAuMjUsMzE3LjYxSDY1OEw2NjAuNzUsMzI1LjExTDY2Ni43NSwzMjcuMTFMNjcxLjg3NSwzMzIuMjM1TDY3MS4yNSwzMzcuMzZINjc2Ljc1TDY3OS41LDM0Mi44Nkg2ODUuMjVMNjkwLjI1LDM0Ny4xMUw2OTguMjUsMzQzLjg2TDcwNi4yNSwzNDUuNjFMNzEyLjI1LDM0OS44Nkg3MTcuNUw3MjMsMzQ3LjYxTDcyMy41LDM1Mi4xMUw3MzAuNSwzNTYuNjFMNzMxLjc1LDM2Mi4zNkw3MzcuNSwzNjUuMDQ2TDc0Mi4xMTksMzYzLjQxNkw3NTAuODEzLDM1Mi4wMDVMNzUwLjI2OSwzNDUuNDg0TDc1Ni4yNDcsMzQyLjc2N0w3NjEuMTM3OTk5OTk5OTk5OSwzNDUuMjEyTDc2OS4yODc5OTk5OTk5OTk5LDM0My41ODJMNzc2LjA3OTk5OTk5OTk5OTksMzQ1Ljc1NUw3ODQuNzczOTk5OTk5OTk5OSwzNDEuNjhMNzg2LjEzMTk5OTk5OTk5OTgsMzM1LjE1OUw3ODEuMjQwOTk5OTk5OTk5OSwzMjEuODQ3TDc3OC4yNTI5OTk5OTk5OTk4LDMxMi42MDk5OTk5OTk5OTk5Nkg3NzEuMTg4OTk5OTk5OTk5OUw3NjguMjAwOTk5OTk5OTk5OCwzMDkuMDc4TDc1OS4yMzQ5OTk5OTk5OTk4LDMwNi4zNjFMNzU3Ljg3Njk5OTk5OTk5OTgsMjk5Ljg0TDc1MS44OTg5OTk5OTk5OTk5LDI4Ni43OTlMNzU1LjE1OTk5OTk5OTk5OTksMjc5LjczNkw3NTIuNDQyOTk5OTk5OTk5OSwyNzguNjQ5TDc0OS43MjU5OTk5OTk5OTk5LDI3MS4wNDJMNzQ0LjI5MTk5OTk5OTk5OTksMjc1LjExNjk5OTk5OTk5OTk2TDczMy42OTU5OTk5OTk5OTk5LDI2OS4xNEw3MjQuNDU3OTk5OTk5OTk5OSwyNjcuNzgyTDcyMS4xOTc5OTk5OTk5OTk5LDI3My40ODhMNzE2LjMwNjk5OTk5OTk5OTksMjY1LjMzOEw3MTAuMDU3OTk5OTk5OTk5OSwyNjIuMzQ5MDAwMDAwMDAwMDVMNzA3LjA2OTk5OTk5OTk5OTgsMjU4LjU0NTAwMDAwMDAwMDFMNzAxLjYzNTk5OTk5OTk5OTksMjYyLjA3NzAwMDAwMDAwMDA2TDY5Ni4yMDE5OTk5OTk5OTk5LDI1OS42MzIwMDAwMDAwMDAwNkw2OTYuNjA4OTk5OTk5OTk5OSwyNTIuOTc1MDAwMDAwMDAwMDVMNjkyLjEyNywyNDguNDkzMDAwMDAwMDAwMDVMNjg1LjYwNiwyNDkuNTgwMDAwMDAwMDAwMDRMNjgyLjM0NSwyNTguMDAyMDAwMDAwMDAwMDdDNjgyLjM0NSwyNTguMDAyMDAwMDAwMDAwMDcsNjc2LjgxMSwyNjMuOTM5MDAwMDAwMDAwMSw2NzYuMDk2LDI2NC4yNTEwMDAwMDAwMDAxUzY3MC4yNTUsMjY0LjExNTAwMDAwMDAwMDA3LDY3MC4yNTUsMjY0LjExNTAwMDAwMDAwMDA3TDY2NC42ODYsMjU4LjU0NjAwMDAwMDAwMDA1TDY1OC45OCwyNTYuNjQ0MDAwMDAwMDAwMDZMNjU1Ljk5MiwyNDcuNjc5MDAwMDAwMDAwMDZMNjUwLjgyOTk5OTk5OTk5OTksMjQwLjM0MzAwMDAwMDAwMDA1TDY0NC45ODc5OTk5OTk5OTk5LDI0MS4wMjMwMDAwMDAwMDAwNUw2MzkuNDE5LDIzNS40NTMwMDAwMDAwMDAwNlYyMzAuODM0MDAwMDAwMDAwMDZMNjQ5LjE5OTk5OTk5OTk5OTksMjI3Ljg0NTAwMDAwMDAwMDA2TDY1Ni45NDMsMjI0LjA0MTAwMDAwMDAwMDA1VjIxOS41NTgwMDAwMDAwMDAwNUw2NTEuOTE3LDIxNC41MzIwMDAwMDAwMDAwNEw2NTMuMDA0LDIwOS4wOTgwMDAwMDAwMDAwNEw2NDcuNTcsMjAzLjY2NDAwMDAwMDAwMDA0TDY0NC44NTIwMDAwMDAwMDAxLDIwOS4wOTgwMDAwMDAwMDAwNEw2NDAuNzc3LDIxMy4xNzMwMDAwMDAwMDAwM0w2MjcuMTkzMDAwMDAwMDAwMSwyMTIuMDg2MDAwMDAwMDAwMDRMNjE3LjY4NywyMTQuMjU5WlwiLFxuICAgICAgICB9LFxuICAgICAgXVxuICAgIH07XG4gIH0sXG59O1xuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDx2dWUtc2xpY2stY2Fyb3VzZWwgdi1iaW5kPVwic2V0dGluZ3NcIiBjbGFzcz1cInR3aXR0ZXItY2Fyb3VzZWxcIj5cbiAgICA8c2xvdD48L3Nsb3Q+XG4gIDwvdnVlLXNsaWNrLWNhcm91c2VsPlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBWdWVTbGlja0Nhcm91c2VsIGZyb20gJ3Z1ZS1zbGljay1jYXJvdXNlbCdcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wb25lbnRzOiB7VnVlU2xpY2tDYXJvdXNlbH0sXG4gIG5hbWU6ICdUd2l0dGVyQ2Fyb3VzZWwnLFxuICBkYXRhOiAoKSA9PiAoe1xuICAgIHNldHRpbmdzOiB7XG4gICAgICBcImRvdHNcIjogZmFsc2UsXG4gICAgICBcImluZmluaXRlXCI6IGZhbHNlLFxuICAgICAgXCJzbGlkZXNUb1Nob3dcIjogNCxcbiAgICAgIFwic2xpZGVzVG9TY3JvbGxcIjogMSxcbiAgICAgIFwicmVzcG9uc2l2ZVwiOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBcImJyZWFrcG9pbnRcIjogMTYwMCxcbiAgICAgICAgICBcInNldHRpbmdzXCI6IHtcbiAgICAgICAgICAgIFwic2xpZGVzVG9TaG93XCI6IDNcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcImJyZWFrcG9pbnRcIjogMTIwMCxcbiAgICAgICAgICBcInNldHRpbmdzXCI6IHtcbiAgICAgICAgICAgIFwic2xpZGVzVG9TaG93XCI6IDNcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcImJyZWFrcG9pbnRcIjogOTAwLFxuICAgICAgICAgIFwic2V0dGluZ3NcIjoge1xuICAgICAgICAgICAgXCJzbGlkZXNUb1Nob3dcIjogMlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiYnJlYWtwb2ludFwiOiA1MDAsXG4gICAgICAgICAgXCJzZXR0aW5nc1wiOiB7XG4gICAgICAgICAgICBcInNsaWRlc1RvU2hvd1wiOiAxXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfVxuICB9KVxufVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDxkaXY+XG4gICAgPHNsb3RcbiAgICAgIHYtYmluZDp2aWV3cz1cInZpZXdzXCJcbiAgICAgIHYtYmluZDppc0N1cnJlbnRWaWV3PVwiaXNDdXJyZW50Vmlld1wiXG4gICAgICB2LWJpbmQ6dG9nZ2xlVmlldz1cInRvZ2dsZVZpZXdcIlxuICAgICAgdi1iaW5kOnNob3dWaWV3PVwic2hvd1ZpZXdcIlxuICAgICAgdi1iaW5kOnNldFZpZXc9XCJzZXRWaWV3XCJcbiAgICA+PC9zbG90PlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3BzOiB7XG4gICAgaW5pdGlhbDoge1xuICAgICAgZGVmYXVsdDogKCkgPT4ge31cbiAgICB9LFxuICAgIHN5bmNMb2NhdGlvbjoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgIH0sXG4gICAgbG9jYXRpb25QYXJhbToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogXCJ2aWV3XCIsXG4gICAgfVxuICB9LFxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB2aWV3czogdGhpcy4kcHJvcHMuaW5pdGlhbCxcbiAgICAgIHF1ZXJ5UGFyYW1zOiBudWxsLFxuICAgICAga2V5TGlzdGVuZXI6IGUgPT4ge1xuICAgICAgICAvLyBFc2NcbiAgICAgICAgaWYgKGUua2V5Q29kZSA9PT0gMjcpIHtcbiAgICAgICAgICB0aGlzLmhpZGVBbGxWaWV3cygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfSxcbiAgd2F0Y2g6IHtcbiAgICByb3V0ZVZpZXcoKSB7XG4gICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG4gICAgfVxuICB9LFxuICBtZXRob2RzOiB7XG4gICAgc2V0Vmlldyh2aWV3SWQsIHNob3csIGhpZGVPdGhlcnMgPSBmYWxzZSkge1xuICAgICAgaWYgKGhpZGVPdGhlcnMpIHtcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy4kZGF0YS52aWV3cykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgIGlmIChrZXkgIT09IHZpZXdJZCkge1xuICAgICAgICAgICAgdGhpcy5zZXRWaWV3KGtleSwgZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuJGRhdGEudmlld3Nbdmlld0lkXSA9IHNob3c7XG5cbiAgICAgIGlmIChzaG93ICYmIHRoaXMuJHByb3BzLnN5bmNMb2NhdGlvbikge1xuICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG5cbiAgICAgICAgcXVlcnlQYXJhbXMuc2V0KHRoaXMuJHByb3BzLmxvY2F0aW9uUGFyYW0sIHZpZXdJZCk7XG4gICAgICAgIGhpc3RvcnkucHVzaFN0YXRlKG51bGwsIG51bGwsIFwiP1wiICsgcXVlcnlQYXJhbXMudG9TdHJpbmcoKSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBzZXRWaWV3cyh1cGRhdGVzKSB7XG4gICAgICB0aGlzLiRkYXRhLnZpZXdzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5kYXRhLnZpZXdzLCB1cGRhdGVzKTtcbiAgICB9LFxuICAgIHRvZ2dsZVZpZXcodmlld0lkKSB7XG4gICAgICAhdGhpcy5pc0N1cnJlbnRWaWV3KHZpZXdJZCkgJiYgdGhpcy5zZXRWaWV3KHZpZXdJZCwgIXRoaXMuaXNDdXJyZW50Vmlldyh2aWV3SWQpLCB0cnVlKTtcbiAgICB9LFxuICAgIHNob3dWaWV3KHZpZXdJZCkge1xuICAgICAgdGhpcy5zZXRWaWV3KHZpZXdJZCwgdHJ1ZSwgdHJ1ZSk7XG4gICAgfSxcbiAgICBpc0N1cnJlbnRWaWV3KHZpZXdJZCkge1xuICAgICAgcmV0dXJuIHRoaXMuJGRhdGEudmlld3Nbdmlld0lkXTtcbiAgICB9LFxuICAgIGhpZGVBbGxWaWV3cygpIHtcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMuJGRhdGEudmlld3MpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgdGhpcy5zZXRWaWV3KGtleSwgZmFsc2UpO1xuICAgICAgfSk7XG4gICAgfVxuICB9LFxuICBtb3VudGVkKCkge1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy4kZGF0YS5rZXlMaXN0ZW5lcik7XG5cbiAgICBpZiAodGhpcy4kcHJvcHMuc3luY0xvY2F0aW9uKSB7XG4gICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG4gICAgICBjb25zdCBsb2NhdGlvblZpZXcgPSBxdWVyeVBhcmFtcy5nZXQodGhpcy4kcHJvcHMubG9jYXRpb25QYXJhbSk7XG5cbiAgICAgIGlmIChsb2NhdGlvblZpZXcgJiYgT2JqZWN0LmtleXModGhpcy4kZGF0YS52aWV3cykuaW5kZXhPZihsb2NhdGlvblZpZXcpICE9PSAtMSkge1xuICAgICAgICB0aGlzLnNob3dWaWV3KGxvY2F0aW9uVmlldyk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBkZXN0cm95ZWQoKSB7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLiRkYXRhLmtleUxpc3RlbmVyKTtcbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDxkaXYgQG1vdXNlZW50ZXI9XCJvbk1vdXNlRW50ZXJcIiBAbW91c2VsZWF2ZT1cIm9uTW91c2VMZWF2ZVwiPlxuICAgIDxzcGFuIHYtaWY9XCIhaHJlZlwiIGNsYXNzPVwibmF2YmFyLW1lbnVfX2xpbmsgbmF2YmFyLW1lbnVfX3N1Ym1lbnUtdG9nZ2xlXCIgOmNsYXNzPVwieyduYXZiYXItbWVudV9fc3VibWVudS10b2dnbGUtLW9wZW4nOiBzaG93fVwiIEBjbGljaz1cImhhbmRsZUNsaWNrXCI+e3sgbGFiZWwgfX08L3NwYW4+XG4gICAgPGEgdi1pZj1cImhyZWZcIiA6aHJlZj1cImhyZWZcIiBjbGFzcz1cIm5hdmJhci1tZW51X19saW5rIG5hdmJhci1tZW51X19zdWJtZW51LXRvZ2dsZVwiIDpjbGFzcz1cInsnbmF2YmFyLW1lbnVfX3N1Ym1lbnUtdG9nZ2xlLS1vcGVuJzogc2hvd31cIiBAY2xpY2sucHJldmVudD1cImhhbmRsZUNsaWNrXCI+e3sgbGFiZWwgfX08L2E+XG4gICAgPGRpdiA6Y2xhc3M9XCJ7J25hdmJhci1tZW51X19zdWJtZW51LXdyYXAtLXNob3cnOiBzaG93fVwiIGNsYXNzPVwibmF2YmFyLW1lbnVfX3N1Ym1lbnUtd3JhcFwiPlxuICAgICAgPHNsb3Q+XG4gICAgICA8L3Nsb3Q+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGlzTGdTY3JlZW5TaXplIH0gZnJvbSBcIi4uLy4uL3V0aWxzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2hvdzogZmFsc2VcbiAgICB9O1xuICB9LFxuICBwcm9wczoge1xuICAgIGhyZWY6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICB9LFxuICAgIGxhYmVsOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfVxuICB9LFxuICBtZXRob2RzOiB7XG4gICAgb25Nb3VzZUVudGVyKCkge1xuICAgICAgaWYgKGlzTGdTY3JlZW5TaXplKCkpIHtcbiAgICAgICAgdGhpcy4kZGF0YS5zaG93ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG9uTW91c2VMZWF2ZSgpIHtcbiAgICAgIGlmIChpc0xnU2NyZWVuU2l6ZSgpKSB7XG4gICAgICAgIHRoaXMuJGRhdGEuc2hvdyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlQ2xpY2soZXZ0KSB7XG4gICAgICAvLyBPbiBtb2JpbGUgc2NyZWVucywgZmlyc3QgY2xpY2sgc2hvdWxkIGp1c3QgdG9nZ2xlIGFuZCByZWRpciBvbiBzZWNvbmQgb25lXG4gICAgICBpZiAoaXNMZ1NjcmVlblNpemUoKSB8fCB0aGlzLiRkYXRhLnNob3cpIHtcbiAgICAgICAgaWYgKHRoaXMuJHByb3BzLmhyZWYpIHtcbiAgICAgICAgICB3aW5kb3cubG9jYXRpb24gPSB0aGlzLiRwcm9wcy5ocmVmO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuJGRhdGEuc2hvdyA9ICF0aGlzLiRkYXRhLnNob3c7XG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cbiAgPGRpdiBAbW91c2VlbnRlcj1cIm9uTW91c2VFbnRlclwiIEBtb3VzZWxlYXZlPVwib25Nb3VzZUxlYXZlXCI+XG4gICAgPHNwYW4gdi1pZj1cIiFocmVmXCIgY2xhc3M9XCJuYXZiYXItbWVudV9fbGluayBuYXZiYXItbWVudV9fc3VibWVudS10b2dnbGVcIiA6Y2xhc3M9XCJ7J25hdmJhci1tZW51X19zdWJtZW51LXRvZ2dsZS0tb3Blbic6IHNob3d9XCIgQGNsaWNrPVwiaGFuZGxlQ2xpY2tcIj57eyBsYWJlbCB9fTwvc3Bhbj5cbiAgICA8YSB2LWlmPVwiaHJlZlwiIDpocmVmPVwiaHJlZlwiIGNsYXNzPVwibmF2YmFyLW1lbnVfX2xpbmsgbmF2YmFyLW1lbnVfX3N1Ym1lbnUtdG9nZ2xlXCIgOmNsYXNzPVwieyduYXZiYXItbWVudV9fc3VibWVudS10b2dnbGUtLW9wZW4nOiBzaG93fVwiIEBjbGljay5wcmV2ZW50PVwiaGFuZGxlQ2xpY2tcIj57eyBsYWJlbCB9fTwvYT5cbiAgICA8ZGl2IDpjbGFzcz1cInsnbmF2YmFyLW1lbnVfX3N1Ym1lbnUtd3JhcC0tc2hvdyc6IHNob3d9XCIgY2xhc3M9XCJuYXZiYXItbWVudV9fc3VibWVudS13cmFwXCI+XG4gICAgICA8dWwgY2xhc3M9XCJuYXZiYXItbWVudV9fc3VibWVudVwiPlxuICAgICAgICA8bGkgdi1mb3I9XCIoaXRlbSwgaW5kZXgpIGluIHBhcnNlZEl0ZW1zXCIgOmtleT1cImluZGV4XCI+XG4gICAgICAgICAgICA8YSA6aHJlZj1cIml0ZW1bMV1cIiBjbGFzcz1cIm5hdmJhci1tZW51X19saW5rXCI+e3sgaXRlbVswXSB9fTwvYT5cbiAgICAgICAgPC9saT5cbiAgICAgIDwvdWw+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGlzTGdTY3JlZW5TaXplIH0gZnJvbSBcIi4uLy4uL3V0aWxzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2hvdzogZmFsc2UsXG4gICAgICBwYXJzZWRJdGVtczogSlNPTi5wYXJzZSh0aGlzLml0ZW1zKSxcbiAgICB9O1xuICB9LFxuICBwcm9wczoge1xuICAgIGhyZWY6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICB9LFxuICAgIGxhYmVsOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgICBpdGVtczoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIG9uTW91c2VFbnRlcigpIHtcbiAgICAgIGlmIChpc0xnU2NyZWVuU2l6ZSgpKSB7XG4gICAgICAgIHRoaXMuJGRhdGEuc2hvdyA9IHRydWU7XG4gICAgICB9XG4gICAgfSxcbiAgICBvbk1vdXNlTGVhdmUoKSB7XG4gICAgICBpZiAoaXNMZ1NjcmVlblNpemUoKSkge1xuICAgICAgICB0aGlzLiRkYXRhLnNob3cgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZUNsaWNrKGV2dCkge1xuICAgICAgLy8gT24gbW9iaWxlIHNjcmVlbnMsIGZpcnN0IGNsaWNrIHNob3VsZCBqdXN0IHRvZ2dsZSBhbmQgcmVkaXIgb24gc2Vjb25kIG9uZVxuICAgICAgaWYgKGlzTGdTY3JlZW5TaXplKCkgfHwgdGhpcy4kZGF0YS5zaG93KSB7XG4gICAgICAgIGlmICh0aGlzLiRwcm9wcy5ocmVmKSB7XG4gICAgICAgICAgd2luZG93LmxvY2F0aW9uID0gdGhpcy4kcHJvcHMuaHJlZjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLiRkYXRhLnNob3cgPSAhdGhpcy4kZGF0YS5zaG93O1xuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCI8c2NyaXB0PlxuICBpbXBvcnQgVWlOYXZiYXJTdWJpdGVtIGZyb20gXCIuL05hdmJhclN1Yml0ZW1cIjtcbiAgaW1wb3J0IFVpTmF2YmFyU3ViaXRlbVJlcGxhY2luZyBmcm9tIFwiLi9OYXZiYXJTdWJpdGVtUmVwbGFjaW5nXCI7XG4gIGltcG9ydCB7IGlzTGdTY3JlZW5TaXplIH0gZnJvbSBcIi4uLy4uL3V0aWxzXCI7XG5cbiAgZXhwb3J0IGRlZmF1bHQge1xuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgIFVpTmF2YmFyU3ViaXRlbSxcbiAgICAgIFVpTmF2YmFyU3ViaXRlbVJlcGxhY2luZyxcbiAgICB9LFxuICAgIGRhdGEoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc0xnU2NyZWVuU2l6ZTogaXNMZ1NjcmVlblNpemUoKSxcbiAgICAgICAgc2hvdzogZmFsc2UsXG4gICAgICAgIHJlc2l6ZUhhbmRsZXI6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLiRkYXRhLmlzTGdTY3JlZW5TaXplID0gaXNMZ1NjcmVlblNpemUoKTtcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSxcbiAgICBtb3VudGVkKCkge1xuICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCB0aGlzLiRkYXRhLnJlc2l6ZUhhbmRsZXIpO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBiZWZvcmVEZXN0cm95KCkge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgdGhpcy4kZGF0YS5yZXNpemVIYW5kbGVyKTtcbiAgICB9XG4gIH1cbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICA8ZGl2IDpjbGFzcz1cIlt3cmFwcGVyY2xhc3MsICdmb290ZXItY29sbGFwc2libGUnXVwiPlxuICAgIDxzcGFuIGNsYXNzPVwidGV4dC14bCBmb250LWFsdCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZSB0ZXh0LXdoaXRlIGZvb3Rlci1jb2xsYXBzaWJsZV9fdG9nZ2xlXCIgOmNsYXNzPVwiW2xhYmVsY2xhc3MsIHNob3cgPyAnZm9vdGVyLWNvbGxhcHNpYmxlX190b2dnbGUtLW9wZW4nIDogJyddXCIgQGNsaWNrPVwiaGFuZGxlQ2xpY2tcIj57eyBsYWJlbCB9fTwvc3Bhbj5cbiAgICA8ZGl2IHYtc2hvdz1cInNob3cgfHwgaXNMZ1NjcmVlblNpemVcIiA6Y2xhc3M9XCJbc2xvdHdyYXBwZXJjbGFzc11cIj5cbiAgICAgIDxzbG90PlxuICAgICAgPC9zbG90PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBpc0xnU2NyZWVuU2l6ZSB9IGZyb20gXCIuLi8uLi91dGlsc1wiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzTGdTY3JlZW5TaXplOiBpc0xnU2NyZWVuU2l6ZSgpLFxuICAgICAgc2hvdzogZmFsc2UsXG4gICAgICByZXNpemVIYW5kbGVyOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuJGRhdGEuaXNMZ1NjcmVlblNpemUgPSBpc0xnU2NyZWVuU2l6ZSgpO1xuICAgICAgfSxcbiAgICB9O1xuICB9LFxuICBwcm9wczoge1xuICAgIGhyZWY6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICB9LFxuICAgIGxhYmVsOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgICBsYWJlbGNsYXNzOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgICB3cmFwcGVyY2xhc3M6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6IFwiXCIsXG4gICAgfSxcbiAgICBzbG90d3JhcHBlcmNsYXNzOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiBcIlwiLFxuICAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIGhhbmRsZUNsaWNrKCkge1xuICAgICAgaWYgKHRoaXMuJHByb3BzLmhyZWYpIHtcbiAgICAgICAgd2luZG93LmxvY2F0aW9uID0gdGhpcy4kcHJvcHMuaHJlZjtcbiAgICAgIH1cblxuICAgICAgdGhpcy4kZGF0YS5zaG93ID0gIXRoaXMuJGRhdGEuc2hvdztcbiAgICB9XG4gIH0sXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgdGhpcy4kZGF0YS5yZXNpemVIYW5kbGVyKTtcbiAgICB9KTtcbiAgfSxcbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCB0aGlzLiRkYXRhLnJlc2l6ZUhhbmRsZXIpO1xuICB9XG59XG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cImZsaXAtY2xvY2tcIj5cbiAgICA8dGVtcGxhdGUgdi1mb3I9XCJkYXRhIGluIHRpbWVEYXRhXCIgdi1zaG93PVwic2hvd1wiPlxuICAgICAgPHNwYW4gdi1iaW5kOmtleT1cImRhdGEubGFiZWxcIiBjbGFzcz1cImZsaXAtY2xvY2tfX3BpZWNlXCIgOmlkPVwiZGF0YS5lbGVtZW50SWRcIiB2LXNob3c9XCJkYXRhLnNob3dcIj5cbiAgICAgICAgPHNwYW4gOmNsYXNzPVwiWydmbGlwLWNsb2NrX19jYXJkJywgJ2ZsaXAtY2FyZCcsIGNsb2NrQ2xhc3NlcyBdXCI+XG4gICAgICAgICAgPGIgY2xhc3M9XCJmbGlwLWNhcmRfX3RvcFwiPnt7IGRhdGEuY3VycmVudCB8IHR3b0RpZ2l0cyB9fTwvYj5cbiAgICAgICAgICA8YiBjbGFzcz1cImZsaXAtY2FyZF9fYm90dG9tXCIgdi1iaW5kOmRhdGEtdmFsdWU9XCJkYXRhLmN1cnJlbnQgfCB0d29EaWdpdHNcIj48L2I+XG4gICAgICAgICAgPGIgY2xhc3M9XCJmbGlwLWNhcmRfX2JhY2tcIiB2LWJpbmQ6ZGF0YS12YWx1ZT1cImRhdGEucHJldmlvdXMgfCB0d29EaWdpdHNcIj48L2I+XG4gICAgICAgICAgPGIgY2xhc3M9XCJmbGlwLWNhcmRfX2JhY2stYm90dG9tXCIgdi1iaW5kOmRhdGEtdmFsdWU9XCJkYXRhLnByZXZpb3VzIHwgdHdvRGlnaXRzXCI+PC9iPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuIDpjbGFzcz1cIlsnZmxpcC1jbG9ja19fc2xvdCcsICdmb250LWFsdCcsIHNsb3RDbGFzc2VzXVwiPnt7IGRhdGEubGFiZWwgfX08L3NwYW4+XG4gICAgICA8L3NwYW4+XG4gICAgPC90ZW1wbGF0ZT5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBmb3JFYWNoTm9kZSB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdmbGlwQ291bnRkb3duJyxcbiAgcHJvcHM6IHtcbiAgICBkZWFkbGluZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgIH0sXG4gICAgc3RvcDoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICB9LFxuICAgIHVuaXRzOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnZGF5cyxob3VycyxtaW51dGVzLHNlY29uZHMnXG4gICAgfSxcbiAgICBjbG9ja0NsYXNzZXM6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICd0ZXh0LTZ4bCdcbiAgICB9LFxuICAgIHNsb3RDbGFzc2VzOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAndGV4dC0zeGwnXG4gICAgfVxuICB9LFxuICBkYXRhKCkge1xuICAgIGNvbnN0IHV1aWQgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDApO1xuICAgIHJldHVybiB7XG4gICAgICBub3c6IE1hdGgudHJ1bmMobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKSxcbiAgICAgIGRhdGU6IG51bGwsXG4gICAgICBpbnRlcnZhbDogbnVsbCxcbiAgICAgIGRpZmY6IDAsXG4gICAgICBzaG93OiBmYWxzZSxcbiAgICAgIHRpbWVEYXRhOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBjdXJyZW50OiAwLFxuICAgICAgICAgIHByZXZpb3VzOiAwLFxuICAgICAgICAgIGxhYmVsOiBcIkRuw61cIixcbiAgICAgICAgICBlbGVtZW50SWQ6ICdmbGlwLWNhcmQtZGF5cy0nICsgdXVpZCxcbiAgICAgICAgICBzaG93OiB0aGlzLnVuaXRzLmluZGV4T2YoXCJkYXlzXCIpICE9PSAtMSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGN1cnJlbnQ6IDAsXG4gICAgICAgICAgcHJldmlvdXM6IDAsXG4gICAgICAgICAgbGFiZWw6IFwiSG9kXCIsXG4gICAgICAgICAgZWxlbWVudElkOiAnZmxpcC1jYXJkLWhvdXJzLScgKyB1dWlkLFxuICAgICAgICAgIHNob3c6IHRoaXMudW5pdHMuaW5kZXhPZihcImhvdXJzXCIpICE9PSAtMSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGN1cnJlbnQ6IDAsXG4gICAgICAgICAgcHJldmlvdXM6IDAsXG4gICAgICAgICAgbGFiZWw6IFwiTWluXCIsXG4gICAgICAgICAgZWxlbWVudElkOiAnZmxpcC1jYXJkLW1pbnV0ZXMtJyArIHV1aWQsXG4gICAgICAgICAgc2hvdzogdGhpcy51bml0cy5pbmRleE9mKFwibWludXRlc1wiKSAhPT0gLTEsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBjdXJyZW50OiAwLFxuICAgICAgICAgIHByZXZpb3VzOiAwLFxuICAgICAgICAgIGxhYmVsOiBcIlNla1wiLFxuICAgICAgICAgIGVsZW1lbnRJZDogJ2ZsaXAtY2FyZC1zZWNvbmRzLScgKyB1dWlkLFxuICAgICAgICAgIHNob3c6IHRoaXMudW5pdHMuaW5kZXhPZihcInNlY29uZHNcIikgIT09IC0xLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICB9LFxuICBjcmVhdGVkKCkge1xuICAgIGlmICghdGhpcy5kZWFkbGluZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBwcm9wcyAnZGVhZGxpbmUnXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGVuZFRpbWUgPSB0aGlzLmRlYWRsaW5lO1xuICAgIHRoaXMuZGF0ZSA9IE1hdGgudHJ1bmMoRGF0ZS5wYXJzZShlbmRUaW1lLnJlcGxhY2UoLy0vZywgJy8nKSkgLyAxMDAwKTtcblxuICAgIGlmICghdGhpcy5kYXRlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHByb3BzIHZhbHVlLCBjb3JyZWN0IHRoZSAnZGVhZGxpbmUnXCIpO1xuICAgIH1cblxuICAgIHRoaXMuaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICB0aGlzLm5vdyA9IE1hdGgudHJ1bmMobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKTtcbiAgICB9LCAxMDAwKTtcbiAgfSxcbiAgbW91bnRlZCgpIHtcbiAgICBpZiAodGhpcy5kaWZmICE9PSAwKSB7XG4gICAgICB0aGlzLnNob3cgPSB0cnVlO1xuICAgIH1cbiAgfSxcbiAgd2F0Y2g6IHtcbiAgICBkZWFkbGluZShuZXdWYWwsIG9sZFZhbCkge1xuICAgICAgY29uc3QgZW5kVGltZSA9IHRoaXMuZGVhZGxpbmU7XG4gICAgICB0aGlzLmRhdGUgPSBNYXRoLnRydW5jKERhdGUucGFyc2UoZW5kVGltZS5yZXBsYWNlKC8tL2csICcvJykpIC8gMTAwMCk7XG5cbiAgICAgIGlmICghdGhpcy5kYXRlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcHJvcHMgdmFsdWUsIGNvcnJlY3QgdGhlICdkZWFkbGluZSdcIik7XG4gICAgICB9XG4gICAgfSxcbiAgICBub3codmFsdWUpIHtcbiAgICAgIHRoaXMuZGlmZiA9IHRoaXMuZGF0ZSAtIHZhbHVlO1xuXG4gICAgICBpZiAodGhpcy5kaWZmIDw9IDAgfHwgdGhpcy5zdG9wKSB7XG4gICAgICAgIHRoaXMuZGlmZiA9IDA7XG4gICAgICAgIHRoaXMudXBkYXRlVGltZSgzLCAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudXBkYXRlVGltZSgwLCBNYXRoLnRydW5jKHRoaXMuZGlmZiAvIDYwIC8gNjAgLyAyNCkpO1xuICAgICAgICB0aGlzLnVwZGF0ZVRpbWUoMSwgTWF0aC50cnVuYyh0aGlzLmRpZmYgLyA2MCAvIDYwKSAlIDI0KTtcbiAgICAgICAgdGhpcy51cGRhdGVUaW1lKDIsIE1hdGgudHJ1bmModGhpcy5kaWZmIC8gNjApICUgNjApO1xuICAgICAgICB0aGlzLnVwZGF0ZVRpbWUoMywgTWF0aC50cnVuYyh0aGlzLmRpZmYpICUgNjApO1xuICAgICAgfVxuICAgIH0sXG4gIH0sXG4gIGZpbHRlcnM6IHtcbiAgICB0d29EaWdpdHModmFsdWUpIHtcbiAgICAgIGlmICh2YWx1ZS50b1N0cmluZygpLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgIHJldHVybiAnMCcgKyB2YWx1ZS50b1N0cmluZygpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgfSxcbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIHVwZGF0ZVRpbWUoaWR4LCBuZXdWYWx1ZSkge1xuICAgICAgaWYgKGlkeCA+PSB0aGlzLnRpbWVEYXRhLmxlbmd0aCB8fCBuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYXBwbHlVcGRhdGUgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGQgPSB0aGlzLnRpbWVEYXRhW2lkeF07XG4gICAgICAgIGNvbnN0IHZhbCA9IG5ld1ZhbHVlIDwgMCA/IDAgOiBuZXdWYWx1ZTtcbiAgICAgICAgY29uc3QgZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtkLmVsZW1lbnRJZH1gKTtcbiAgICAgICAgaWYgKHZhbCAhPT0gZC5jdXJyZW50KSB7XG4gICAgICAgICAgZC5wcmV2aW91cyA9IGQuY3VycmVudDtcbiAgICAgICAgICBkLmN1cnJlbnQgPSB2YWw7XG4gICAgICAgICAgaWYgKGVsKSB7XG4gICAgICAgICAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKCdmbGlwJyk7XG4gICAgICAgICAgICB2b2lkIGVsLm9mZnNldFdpZHRoO1xuICAgICAgICAgICAgZWwuY2xhc3NMaXN0LmFkZCgnZmxpcCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaWR4ID09PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBlbHMgPSBlbC5xdWVyeVNlbGVjdG9yQWxsKCdzcGFuIGInKTtcbiAgICAgICAgICAgIGlmIChlbHMpIHtcbiAgICAgICAgICAgICAgZm9yRWFjaE5vZGUoZWxzLCBlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjbHMgPSBlLmNsYXNzTGlzdFswXTtcbiAgICAgICAgICAgICAgICBpZiAobmV3VmFsdWUgLyAxMDAwID49IDEpIHtcbiAgICAgICAgICAgICAgICAgIGlmICghY2xzLmluY2x1ZGVzKCctNGRpZ2l0cycpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0NscyA9IGNscyArICctNGRpZ2l0cyc7XG4gICAgICAgICAgICAgICAgICAgIGUuY2xhc3NMaXN0LmFkZChuZXdDbHMpO1xuICAgICAgICAgICAgICAgICAgICBlLmNsYXNzTGlzdC5yZW1vdmUoY2xzKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgaWYgKGNscy5pbmNsdWRlcygnLTRkaWdpdHMnKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdDbHMgPSBjbHMucmVwbGFjZSgnLTRkaWdpdHMnLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgIGUuY2xhc3NMaXN0LmFkZChuZXdDbHMpO1xuICAgICAgICAgICAgICAgICAgICBlLmNsYXNzTGlzdC5yZW1vdmUoY2xzKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgaWYgKHdpbmRvd1sncmVxdWVzdEFuaW1hdGlvbkZyYW1lJ10pIHtcbiAgICAgICAgdGhpcy5mcmFtZSA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShhcHBseVVwZGF0ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhcHBseVVwZGF0ZSgpO1xuICAgICAgfVxuICAgIH0sXG4gIH0sXG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgaWYgKHdpbmRvd1snY2FuY2VsQW5pbWF0aW9uRnJhbWUnXSkge1xuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5mcmFtZSk7XG4gICAgfVxuICB9LFxuICBkZXN0cm95ZWQoKSB7XG4gICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICA8ZGl2IHJlZj1cInNsaWRlclwiXG4gICAgICAgY2xhc3M9XCJob3Jpem9udGFsLXNjcm9sbGluZyBkcmFnZ2FibGUgbm8tc2Nyb2xsYmFyc1wiXG4gICAgICAgOmNsYXNzPVwieydhY3RpdmUnOiBpc0Rvd259XCJcbiAgICAgICB2LW9uOm1vdXNlZG93bj1cIm1vdXNlZG93blwiXG4gICAgICAgdi1vbjptb3VzZWxlYXZlPVwibW91c2VsZWF2ZVwiXG4gICAgICAgdi1vbjptb3VzZXVwPVwibW91c2V1cFwiXG4gICAgICAgdi1vbjptb3VzZW1vdmU9XCJtb3VzZW1vdmVcIlxuICA+XG4gICAgPHNsb3Q+PC9zbG90PlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGE6ICgpID0+ICh7XG4gICAgaXNEb3duOiBmYWxzZSxcbiAgICBzdGFydFg6IG51bGwsXG4gICAgc2Nyb2xsTGVmdDogbnVsbFxuICB9KSxcbiAgbWV0aG9kczoge1xuICAgIG1vdXNlbW92ZTogZnVuY3Rpb24gKGUpe1xuICAgICAgaWYgKCF0aGlzLmlzRG93bikgcmV0dXJuXG4gICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgIGNvbnN0IGRpc3RhbmNlID0gdGhpcy4kcmVmcy5zbGlkZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCB8IG51bGxcbiAgICAgIGNvbnN0IHggPSBlLnBhZ2VYIC0gZGlzdGFuY2VcbiAgICAgIGNvbnN0IHdhbGsgPSB4IC0gdGhpcy5zdGFydFhcbiAgICAgIHRoaXMuJHJlZnMuc2xpZGVyLnNjcm9sbExlZnQgPSB0aGlzLnNjcm9sbExlZnQgLSB3YWxrXG4gICAgfSxcbiAgICBtb3VzZWxlYXZlOiBmdW5jdGlvbiAoKXtcbiAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcbiAgICB9LFxuICAgIG1vdXNldXA6IGZ1bmN0aW9uICgpe1xuICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxuICAgIH0sXG4gICAgbW91c2Vkb3duOiBmdW5jdGlvbiAoZSl7XG4gICAgICB0aGlzLmlzRG93biA9IHRydWU7XG4gICAgICBjb25zdCBkaXN0YW5jZSA9IHRoaXMuJHJlZnMuc2xpZGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgfCBudWxsXG4gICAgICB0aGlzLnN0YXJ0WCA9IGUucGFnZVggLSBkaXN0YW5jZVxuICAgICAgdGhpcy5zY3JvbGxMZWZ0ID0gdGhpcy4kcmVmcy5zbGlkZXIuc2Nyb2xsTGVmdFxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCI8c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBtb3VudGVkKCkge1xuICAgIGNvbnNvbGUubG9nKGBNb3VudGVkIGdlbmVyaWMgVnVlIGFwcCBpbiBgICwgdGhpcy4kZWwpO1xuICB9XG59XG48L3NjcmlwdD5cbiIsImltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuXG5pbXBvcnQgeyBmb3JFYWNoTm9kZSB9IGZyb20gXCIuL3V0aWxzXCI7XG5cbmltcG9ydCBBcnRpY2xlQ2Fyb3VzZWwgZnJvbSBcIi4vY29tcG9uZW50cy9hcnRpY2xlcy9BcnRpY2xlQ2Fyb3VzZWxcIjtcbmltcG9ydCBIZWFkZXJDYXJvdXNlbCBmcm9tIFwiLi9jb21wb25lbnRzL2hlYWRlci9IZWFkZXJDYXJvdXNlbFwiO1xuaW1wb3J0IFJlbmRlcmVyIGZyb20gXCIuL2NvbXBvbmVudHMvY2FsZW5kYXIvUmVuZGVyZXJcIjtcbmltcG9ydCBEdW1teVByb3ZpZGVyIGZyb20gXCIuL2NvbXBvbmVudHMvY2FsZW5kYXIvRHVtbXlQcm92aWRlclwiO1xuaW1wb3J0IEdvb2dsZVByb3ZpZGVyIGZyb20gXCIuL2NvbXBvbmVudHMvY2FsZW5kYXIvR29vZ2xlUHJvdmlkZXJcIjtcbmltcG9ydCBSZWdpb25NYXAgZnJvbSBcIi4vY29tcG9uZW50cy9SZWdpb25NYXBcIjtcbmltcG9ydCBUd2l0dGVyQ2Fyb3VzZWwgZnJvbSBcIi4vY29tcG9uZW50cy9Ud2l0dGVyQ2Fyb3VzZWxcIjtcbmltcG9ydCBWaWV3UHJvdmlkZXIgZnJvbSBcIi4vY29tcG9uZW50cy9WaWV3UHJvdmlkZXJcIjtcbmltcG9ydCBOYXZiYXIgZnJvbSBcIi4vY29tcG9uZW50cy9uYXZiYXIvTmF2YmFyXCI7XG5pbXBvcnQgRm9vdGVyQ29sbGFwc2libGUgZnJvbSBcIi4vY29tcG9uZW50cy9mb290ZXIvRm9vdGVyQ29sbGFwc2libGVcIjtcbmltcG9ydCBGbGlwQ2xvY2sgZnJvbSBcIi4vY29tcG9uZW50cy9GbGlwQ2xvY2tcIjtcbmltcG9ydCBIb3Jpem9udGFsU2Nyb2xsYWJsZSBmcm9tIFwiLi9jb21wb25lbnRzL0hvcml6b250YWxTY3JvbGxhYmxlXCI7XG5cblxuVnVlLmNvbXBvbmVudChcInVpLWFydGljbGUtY2Fyb3VzZWxcIiwgQXJ0aWNsZUNhcm91c2VsKTtcblZ1ZS5jb21wb25lbnQoXCJ1aS1oZWFkZXItY2Fyb3VzZWxcIiwgSGVhZGVyQ2Fyb3VzZWwpO1xuVnVlLmNvbXBvbmVudChcInVpLWNhbGVuZGFyLXJlbmRlcmVyXCIsIFJlbmRlcmVyKTtcblZ1ZS5jb21wb25lbnQoXCJ1aS1jYWxlbmRhci1kdW1teS1wcm92aWRlclwiLCBEdW1teVByb3ZpZGVyKTtcblZ1ZS5jb21wb25lbnQoXCJ1aS1jYWxlbmRhci1nb29nbGUtcHJvdmlkZXJcIiwgR29vZ2xlUHJvdmlkZXIpO1xuVnVlLmNvbXBvbmVudChcInVpLXJlZ2lvbi1tYXBcIiwgUmVnaW9uTWFwKTtcblZ1ZS5jb21wb25lbnQoXCJ1aS10d2l0dGVyLWNhcm91c2VsXCIsIFR3aXR0ZXJDYXJvdXNlbCk7XG5WdWUuY29tcG9uZW50KFwidWktdmlldy1wcm92aWRlclwiLCBWaWV3UHJvdmlkZXIpO1xuVnVlLmNvbXBvbmVudChcInVpLW5hdmJhclwiLCBOYXZiYXIpO1xuVnVlLmNvbXBvbmVudChcInVpLWZvb3Rlci1jb2xsYXBzaWJsZVwiLCBGb290ZXJDb2xsYXBzaWJsZSk7XG5WdWUuY29tcG9uZW50KFwidWktZmxpcC1jbG9ja1wiLCBGbGlwQ2xvY2spO1xuVnVlLmNvbXBvbmVudChcInVpLWhvcml6b250YWwtc2Nyb2xsYWJsZVwiLCBIb3Jpem9udGFsU2Nyb2xsYWJsZSk7XG5cblxuaW1wb3J0IFVpQXBwIGZyb20gXCIuL2NvbXBvbmVudHMvVWlBcHAudnVlXCI7XG5cblxuY29uc3QgYXBwRmFjdG9yeSA9IChlbCwgYXR0cnMpID0+IHtcbiAgLy8gQm9vdHN0cmFwIFZ1ZS5qcy5cbiAgbmV3IFZ1ZSh7XG4gICAgZWwsXG4gICAgY29tcG9uZW50czoge1xuICAgICAgVWlBcHBcbiAgICB9XG4gIH0pO1xufTtcblxuXG4vKipcbiAqIEJvb3RzdHJhcCBWdWUuanMgYXBwbGljYXRpb24gYXQgZ2l2ZW4gRWxlbWVudCBpbnN0YW5jZS5cbiAqXG4gKiBBcHAgcHJvcGVydGllcyBhcmUgcGFzc2VkIHZpYSBkYXRhIGF0dHJpYnV0ZXMsIGxpa2U6XG4gKlxuICogPGRpdiBjbGFzcz1cIl9fdnVlLXJvb3RcIiBkYXRhLW1lc3NhZ2U9XCJIZWxsb1wiIGRhdGEtYXBwPVwiU29tZUFwcFwiPjwvZGl2PlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWwgRE9NIEVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gcmVuZGVyVnVlQXBwRWxlbWVudChlbCkge1xuICBjb25zdCBhdHRycyA9IE9iamVjdC5hc3NpZ24oe30sIGVsLmRhdGFzZXQpO1xuICByZXR1cm4gYXBwRmFjdG9yeShlbCwgYXR0cnMpO1xufVxuXG5cbmZ1bmN0aW9uIGluaXQoZXZlbnQpIHtcbiAgLy8gSW5pdGlhbGl6ZSBWdWUuanMgYXBwcy5cbiAgZm9yRWFjaE5vZGUoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLl9fanMtcm9vdCcpLCByZW5kZXJWdWVBcHBFbGVtZW50KVxufVxuXG5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgaW5pdCk7XG4iXSwibmFtZXMiOlsidGhpcyIsIkFydGljbGVDYXJvdXNlbCIsIkhlYWRlckNhcm91c2VsIiwiUmVuZGVyZXIiLCJEdW1teVByb3ZpZGVyIiwiR29vZ2xlUHJvdmlkZXIiLCJSZWdpb25NYXAiLCJUd2l0dGVyQ2Fyb3VzZWwiLCJWaWV3UHJvdmlkZXIiLCJOYXZiYXIiLCJGb290ZXJDb2xsYXBzaWJsZSIsIkZsaXBDbG9jayIsIkhvcml6b250YWxTY3JvbGxhYmxlIiwiVWlBcHAiXSwibWFwcGluZ3MiOiI7Ozs7O0VBQUEsV0FBYyxHQUFHO0VBQ2pCLEVBQUUsSUFBSSxFQUFFLE9BQU87RUFDZixFQUFFLElBQUksRUFBRSxPQUFPO0VBQ2YsRUFBRSxJQUFJLEVBQUUsT0FBTztFQUNmLEVBQUUsSUFBSSxFQUFFLFFBQVE7RUFDaEIsRUFBRSxLQUFLLEVBQUUsUUFBUTtFQUNqQixDQUFDOztFQ0pELE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDaEU7RUFDTyxNQUFNLFdBQVcsR0FBRyxVQUFVLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFO0VBQzdELEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7RUFDekMsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNuQyxHQUFHO0VBQ0gsQ0FBQyxDQUFDO0FBQ0Y7RUFDTyxTQUFTLGNBQWMsR0FBRztFQUNqQyxFQUFFLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLFdBQVcsSUFBSSxDQUFDLEVBQUUsTUFBTSxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUNyRixDQUFDO0FBQ0Q7RUFDTyxTQUFTLGNBQWMsR0FBRztFQUNqQyxFQUFFLE9BQU8sY0FBYyxFQUFFLElBQUksWUFBWSxDQUFDO0VBQzFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQ2hCQSxDQUFDLFNBQVMsZ0NBQWdDLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRTtFQUMxRCxDQUNFLGNBQWMsR0FB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SyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7RUFDeEMsR0FBRyxDQUFDO0VBQ0osQ0FBQztBQUNEO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQSxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUU7RUFDdkQsRUFBRSxNQUFNLEtBQUssTUFBTSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQzFCO0VBQ0EsRUFBRSxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7RUFDaEIsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUM1QjtFQUNBLEVBQUUsT0FBTyxFQUFFLEtBQUssR0FBRyxNQUFNLEVBQUU7RUFDM0IsSUFBSSxJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDM0I7RUFDQSxJQUFJLElBQUksUUFBUSxHQUFHLFVBQVU7RUFDN0IsUUFBUSxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQztFQUNqRSxRQUFRLFNBQVMsQ0FBQztBQUNsQjtFQUNBLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxLQUFLLFNBQVMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUM7RUFDOUUsR0FBRztFQUNILEVBQUUsT0FBTyxNQUFNLENBQUM7RUFDaEIsQ0FBQztBQUNEO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQSxTQUFTLGNBQWMsQ0FBQyxRQUFRLEVBQUU7RUFDbEMsRUFBRSxPQUFPLFFBQVEsQ0FBQyxTQUFTLE1BQU0sRUFBRSxPQUFPLEVBQUU7RUFDNUMsSUFBSSxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7RUFDbEIsUUFBUSxNQUFNLEdBQUcsT0FB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R0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO0FBQzVCO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQSxTQUFTLFdBQVcsQ0FBQyxLQUFLLEVBQUU7RUFDNUIsRUFBRSxPQUFPLEtBQUssSUFBSSxJQUFJLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztFQUN2RSxDQUFDO0FBQ0Q7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBLFNBQVMsaUJBQWlCLENBQUMsS0FBSyxFQUFFO0VBQ2xDLEVBQUUsT0FBTyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0VBQ25ELENBQUM7QUFDRDtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQSxTQUFTLFVBQVUsQ0FBQyxLQUFLLEVBQUU7RUFDM0I7RUFDQTtFQUNBLEVBQUUsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQzlELEVBQUUsT0FBTyxHQUFHLElBQUksT0FBTyxJQUFJLEdBQUcsSUFBSSxNQUFNLENBQUM7RUFDekMsQ0FBQztBQUNEO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBLFNBQVMsUUFBUSxDQUFDLEtBQUssRUFBRTtFQUN6QixFQUFFLE9BQU8sT0FBTyxLQUFLLElBQUksUUFBUTtFQUNqQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksZ0JBQWdCLENBQUM7RUFDOUQsQ0FBQztBQUNEO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQSxTQUFTLFFBQVEsQ0FBQyxLQUFLLEVBQUU7RUFDekIsRUFBRSxJQUFJLElBQUksR0FBRyxPQUFPLEtBQUssQ0FBQztFQUMxQixFQUFFLE9BQU8sQ0FBQyxDQUFDLEtBQUssS0FBSyxJQUFJLElBQUksUUFBUSxJQUFJLElBQUksSUFBSSxVQUFVLENBQUMsQ0FBQztFQUM3RCxDQUFDO0FBQ0Q7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQSxTQUFTLFlBQVksQ0FBQyxLQUFLLEVBQUU7RUFDN0IsRUFBRSxPQUFPLENBQUMsQ0FBQyxLQUFLLElBQUksT0FBTyxLQUFLLElBQUksUUFBUSxDQUFDO0VBQzdDLENBQUM7QUFDRDtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7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QTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0EsU0FBUyxXQUFXLENBQUMsS0FBSyxFQUFFO0VBQzVCLEVBQUUsT0FBTyxLQUFLLElBQUksSUFBSSxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7RUFDdkUsQ0FBQztBQUNEO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQSxTQUFTLGlCQUFpQixDQUFDLEtBQUssRUFBRTtFQUNsQyxFQUFFLE9BQU8sWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztFQUNuRCxDQUFDO0FBQ0Q7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0EsU0FBUyxVQUFVLENBQUMsS0FBSyxFQUFFO0VBQzNCO0VBQ0E7RUFDQSxFQUFFLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUM5RCxFQUFFLE9BQU8sR0FBRyxJQUFJLE9BQU8sSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDO0VBQ3pDLENBQUM7QUFDRDtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQSxTQUFT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QUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDN0IsSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFLElBQUksS0FBSyxLQUFLLEVBQUUsRUFBRTtFQUN0QyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQy9CLE1BQU0sSUFBSSxLQUFLLEtBQUssRUFBRSxJQUFJLEtBQUssS0FBSyxHQUFHLEVBQUUsT0FBTyxHQUFHLENBQUM7RUFDcEQsS0FBSyxNQUFNLElBQUksS0FBSyxLQUFLLEVBQUUsRUFBRTtFQUM3QixNQUFNLFFBQVEsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7RUFDOUIsUUFBUSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDLENBQUMsTUFBTTtFQUN6RCxRQUFRLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsQ0FBQyxNQUFNO0VBQzFELFFBQVEsU0FBUyxPQUFPLENBQUMsRUFBRSxDQUFDO0VBQzVCLE9BQU87RUFDUCxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzNCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7RUFDN0IsTUFBTSxLQUFLLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtFQUMvQyxRQUFRLElBQUksR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0VBQ3hDO0VBQ0E7RUFDQSxRQUFRLElBQUksSUFBSSxHQUFHLEVBQUUsSUFBSSxJQUFJLEdBQUcsT0FBTyxFQUFFLE9BQU8sR0FBRyxDQUFDO0VBQ3BELE9BQU8sQ0FBQyxPQUFPLFFBQVEsQ0FBQyxNQUFNLEVBQUUsS0FB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ckUsQ0FBQztBQUNEO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQSxTQUFTLFFBQVEsQ0FBQyxJQUFJLEVBQUU7RUFDeEIsRUFBRSxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUU7RUFDcEIsSUFBSSxJQUFJO0VBQ1IsTUFBTSxPQUFPLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDckMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUU7RUFDbEIsSUFBSSxJQUFJO0VBQ1IsTUFBTSxRQUFRLElBQUksR0FBRyxFQUFFLEVBQUU7RUFDekIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUU7RUFDbEIsR0FBRztFQUNILEVBQUUsT0FBTyxFQUFFLENBQUM7RUFDWixDQUFDO0FBQ0Q7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0EsU0FBUyxPQUFPLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRTtFQUNqQyxFQUFFLElBQUksT0FBTyxJQUFJLElBQUksVUFBVSxLQUFLLFFBQVEsSUFBSSxPQUFPLFFBQVEsSUFBSSxVQUFVLENBQUMsRUFBRTtFQUNoRixJQUFJLE1BQU0sSUFBSSxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUM7RUFDekMsR0FBRztFQUNILEVBQUUsSUFBSSxRQUFRLEdBQUcsV0FBVztFQUM1QixJQUFJLElBQUksSUFBSSxHQUFHLFNBQVM7RUFDeEIsUUFBUSxHQUFHLEdBQUcsUUFBUSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDN0QsUUFBUSxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQztBQUMvQjtFQUNBLElBQUksSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO0VBQ3hCLE1BQU0sT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQzVCLEtBQUs7RUFDTCxJQUFJLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0VBQ3hDLElBQUksUUFBUSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztFQUM1QyxJQUFJLE9BQU8sTUFBTSxDQUFDO0VBQ2xCLEdBQUcsQ0FBQztFQUNKLEVBQUUsUUFBUSxDQUFDLEtBQUssR0FBRyxLQUFLLE9BQU8sQ0FBQyxLQUFLLElBQUksUUFBUSxDQUFDLENBQUM7RUFDbkQsRUFBRSxPQUFPLFFBQVEsQ0FBQztFQUNsQixDQUFDO0FBQ0Q7RUFDQTtFQUNBLE9BQU8sQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDO0FBQ3pCO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBLFNBQVMsRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUU7RUFDMUIsRUFBRSxPQUFPLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssSUFBSSxLQUFLLEtBQUssS0FBSyxDQUFDLENBQUM7RUFDakUsQ0FBQztBQUNEO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7QUFDNUI7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0EsU0FBUyxVQUFVLENBQUMsS0FBSyxFQUFFO0VBQzNCO0VBQ0E7RUFDQSxFQUFFLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUM5RCxFQUFFLE9BQU8sR0FBRyxJQUFJLE9BQU8sSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDO0VBQ3pDLENBQUM7QUFDRDtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0EsU0FBUyxRQUFRLENBQUMsS0FBSyxFQUFFO0VBQ3pCLEVBQUUsSUFBSSxJQUFJLEdBQUcsT0FBTyxLQUFLLENBQUM7RUFDMUIsRUFBRSxPQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssSUFBSSxJQUFJLFFBQVEsSUFBSSxJQUFJLElBQUksVUFBVSxDQUFDLENBQUM7RUFDN0QsQ0FBQztBQUNEO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0EsU0FBUyxZQUFZLENBQUMsS0FBSyxFQUFFO0VBQzdCLEVBQUUsT0FBTyxDQUFDLENBQUMsS0FBSyxJQUFJLE9BQU8sS0FBSyxJQUFJLFFBQVEsQ0FBQztFQUM3QyxDQUFDO0FBQ0Q7RUFDQTtFQUNBO0VBQ0E7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Q0Q7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBLFNBQVMsUUFBUSxDQUFDLEtBQUssRUFBRTtFQUN6QixFQUFFLElBQUksSUFBSSxHQUFHLE9BQU8sS0FBSyxDQUFDO0VBQzFCLEVBQUUsT0FBTyxDQUFDLENBQUMsS0FBSyxLQUFLLElBQUksSUFBSSxRQUFRLElBQUksSUFBSSxJQUFJLFVBQVUsQ0FBQyxDQUFDO0VBQzdELENBQUM7QUFDRDtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBLFNBQVMsWUFBWSxDQUFDLEtBQUssRUFBRTtFQUM3QixFQUFFLE9BQU8sQ0FBQyxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssSUFBSSxRQUFRLENBQUM7RUFDN0MsQ0FBQztBQUNEO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBLFNBQVMsUUFBUSxDQUFDLEtBQUssRUFBRTtFQUN6QixFQUFFLE9BQU8sT0FBTyxLQUFLLElBQUksUUFBUTtFQUNqQyxLQUFLLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDO0VBQ3JFLENBQUM7QUFDRDtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQSxTQUFT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O0VBQ2xCOzs7RUR2RUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FFVUE7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7OztFQW5CQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNxQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0VBakVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VDREE7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0VBRUE7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBRUE7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7OztFQXhLQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VDREE7O0FBRUE7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0VBRUE7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztFQUVBO0VBRUE7RUFDQTtFQUNBO0VBQ0E7O0VBRUE7O0VBRUE7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztFQUVBO0VBQ0E7O0VBRUE7O0VBRUE7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7RUFFQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7RUFyR0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDeUJBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7RUE5SUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDT0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0VBNUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDV0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0VBRUE7O0VBRUE7RUFDQTs7RUFFQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0VBRUE7RUFDQTtFQUNBOztFQUVBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0VBOUZBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDWUE7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7RUFFQTtFQUNBO0VBQ0E7RUFDQTs7O0VBaERBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNlQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0VBRUE7RUFDQTtFQUNBO0VBQ0E7OztFQXZEQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDR0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0VBekJBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ1dBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztFQUVBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0VBekRBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2tCQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0VBRUE7RUFDQTs7RUFFQTtFQUNBO0VBQ0E7O0VBRUE7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0VBRUE7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztFQUVBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7RUFFQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztFQUVBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7RUE3TEE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDWUE7RUFDQTtF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 diff --git a/main/styleguide/source/_patterns/atoms/buttons/button-animated.mustache b/main/styleguide/source/_patterns/atoms/buttons/button-animated.mustache index 7abcece0..056c8619 100644 --- a/main/styleguide/source/_patterns/atoms/buttons/button-animated.mustache +++ b/main/styleguide/source/_patterns/atoms/buttons/button-animated.mustache @@ -1,8 +1,8 @@ <a href="" class="btn btn__slide__wrap {{ classes }}"> - <span class="btn text-lg bg-black text-white w-32 lg:text-base"> + <span class="btn text-lg bg-black px-1 text-white lg:text-base"> {{ btn-text }} </span> - <span class="btn text-lg bg-white text-black w-32 lg:text-base"> + <span class="btn text-lg bg-white px-1 text-black lg:text-base"> {{ btn-text }} </span> </a> diff --git a/main/styleguide/source/_patterns/molecules/articles/article-carousel-item.mustache b/main/styleguide/source/_patterns/molecules/articles/article-carousel-item.mustache index 1dfedaeb..5ff4053b 100644 --- a/main/styleguide/source/_patterns/molecules/articles/article-carousel-item.mustache +++ b/main/styleguide/source/_patterns/molecules/articles/article-carousel-item.mustache @@ -8,10 +8,7 @@ Komentář Lukáše Koláříka: Kriminalita ve virtuálním prostoru není imaginární, ale skutečná. Jak nenaletět internetovým šmejdům? </h4> - <a href="" class="btn btn__slide__wrap "> - <span class="btn text-sm bg-black text-white w-32 lg:text-base">Zjistit více</span> - <span class="btn text-sm bg-white w-32 lg:text-base">Zjistit více</span> - </a> + {{> atoms-button-animated(btn-text: "Zjistit více") }} </div> </div> </div> diff --git a/main/styleguide/source/_patterns/molecules/blocks/contact-block.mustache b/main/styleguide/source/_patterns/molecules/blocks/contact-block.mustache index cfa01e94..7968f980 100644 --- a/main/styleguide/source/_patterns/molecules/blocks/contact-block.mustache +++ b/main/styleguide/source/_patterns/molecules/blocks/contact-block.mustache @@ -10,12 +10,5 @@ Další osoby naleznete na stránce pirati.cz </p> </div> - <a href="" class="btn btn__slide__wrap"> - <span class="btn bg-black text-white w-32"> - Lidé - </span> - <span class="btn bg-blue-300 text-white w-32"> - Lidé - </span> - </a> + {{> atoms-button-animated(btn-text: "Lidé") }} </div> diff --git a/main/styleguide/source/_patterns/molecules/representative-box.mustache b/main/styleguide/source/_patterns/molecules/representative-box.mustache index bdb8431f..d3633386 100644 --- a/main/styleguide/source/_patterns/molecules/representative-box.mustache +++ b/main/styleguide/source/_patterns/molecules/representative-box.mustache @@ -1,12 +1,5 @@ <div class="w-96 h-60 flex bg-white flex-col items-center bg-cover justify-center drop-shadow-xl xl:m-0 sm:w-80 sm:h-80" style="background-image: url('https://i.picsum.photos/id/261/350/350.jpg?hmac=GOGR4Va2TTfzr3sxRHwTlAxqhpu4M_pl_oKex2O7fcQ')"> <h5 class="head-alt-md text-white mt-24 mb-8">poslanci za piráty</h5> - <a href="" class="btn btn__slide__wrap w-32 mt-"> - <span class="btn bg-black text-white w-32"> - Poslanecký klub - </span> - <span class="btn bg-white text-black w-32"> - Poslanecký klub - </span> - </a> + {{> atoms-button-animated(btn-text: "Poslanecký klub") }} </div> diff --git a/main/styleguide/source/_patterns/templates/homepage.mustache b/main/styleguide/source/_patterns/templates/homepage.mustache index 2a85423a..66fa3b68 100644 --- a/main/styleguide/source/_patterns/templates/homepage.mustache +++ b/main/styleguide/source/_patterns/templates/homepage.mustache @@ -10,8 +10,8 @@ <h1 class="text-white">72% domácností bylo</h1> <h1 class="text-orange-250 mb-2">násilně digitalizováno</h1> <a href="" class="btn btn__slide__wrap btn-carousel"> - <span class="btn text-lg bg-white w-32 lg:text-base">Zjistit více1</span> - <span class="btn text-lg bg-black text-white w-32 lg:text-base">Zjistit více1</span> + <span class="btn text-lg bg-white px-1 lg:text-base">Zjistit více1</span> + <span class="btn text-lg bg-black text-white px-1 lg:text-base">Zjistit více1</span> </a> </div> </div> @@ -23,8 +23,8 @@ <h1 class="text-white">72% domácností bylo</h1> <h1 class="text-orange-250 mb-2">násilně digitalizováno</h1> <a href="" class="btn btn__slide__wrap btn-carousel"> - <span class="btn text-lg bg-white w-32 lg:text-base">Zjistit více1</span> - <span class="btn text-lg bg-black text-white w-32 lg:text-base">Zjistit více1</span> + <span class="btn text-lg bg-white px-1 lg:text-base">Zjistit více1</span> + <span class="btn text-lg bg-black text-white px-1 lg:text-base">Zjistit více1</span> </a> </div> </div> @@ -36,8 +36,8 @@ <h1 class="text-white">Pokud si tady</h1> <h1 class="text-orange-250 mb-2">tak si na konci</h1> <a href="" class="btn btn__slide__wrap btn-carousel"> - <span class="btn text-lg bg-white w-32 lg:text-base">Díky</span> - <span class="btn text-lg bg-black text-white w-32 lg:text-base">Díky</span> + <span class="btn text-lg bg-white px-1 lg:text-base">Díky</span> + <span class="btn text-lg bg-black text-white px-1 lg:text-base">Díky</span> </a> </div> </div> diff --git a/main/styleguide/source/css/molecules/sliding_button.pcss b/main/styleguide/source/css/molecules/sliding_button.pcss index 4e1fbdab..03ce560c 100644 --- a/main/styleguide/source/css/molecules/sliding_button.pcss +++ b/main/styleguide/source/css/molecules/sliding_button.pcss @@ -1,5 +1,6 @@ .btn { @apply font-alt inline-flex justify-center items-center leading-9 py-1 h-11; + min-width: 8rem; } .btn__slide__wrap { diff --git a/main/templates/main/blocks/boxes_block.html b/main/templates/main/blocks/boxes_block.html index 531b82b4..638b941a 100644 --- a/main/templates/main/blocks/boxes_block.html +++ b/main/templates/main/blocks/boxes_block.html @@ -1,7 +1,14 @@ {% load static wagtailimages_tags %} <div class="bg-cover bg-no-repeat section-clip py-16 xl:h-screen lg:py-36" - style="background-image: url('{% static 'main/images/background-images/bg-join-us.jpg' %}')"> + style="background-image: + {% if self.image %} + {% image self.image original as original_image %} + url({{ original_image.url }}) + {% else %} + url('{% static 'main/images/background-images/bg-join-us.jpg' %}') + {% endif %} + "> <div class="container--wide mx-auto z-10"> <h2 class="head-7xl xl:text-center mb-6 xl:mb-28"> {{ self.title }} diff --git a/main/templates/main/blocks/news_block.html b/main/templates/main/blocks/news_block.html index ea3184b2..0451d901 100644 --- a/main/templates/main/blocks/news_block.html +++ b/main/templates/main/blocks/news_block.html @@ -1,23 +1,32 @@ {% load shared_filters static wagtailcore_tags wagtailimages_tags %} <div class="bg-cover bg-no-repeat section-clip mb-8 py-16 lg:py-36 lg:mb-16" - style="background-image: url('{% static 'main/images/background-images/bg-join-us.jpg' %}')"> - <div class="container--medium mx-auto px-4"> - <h2 class="head-7xl xl:text-center mb-6 xl:mb-28"> - {{ self.title }} - </h2> - <div class="flex flex-wrap mb-5 lg:mb-10"> - {% image article_data_list.0.image original as article_img %} - <img src="{{ article_img.url }}" draggable="false" alt="" class="lg:max-w-lg lg:mr-11 h-fit"> - <div class="flex flex-col max-w-xl items-start"> - <span class="text-green-500 head-3xl mt-10 mb-4 lg:mb-8">{{ article_data_list.0.date }}</span> - <h5 class="head-4xl mb-5 lg:mb-10">{{ article_data_list.0.title }}</h5> - <p class="leading-6 mb-4 lg:mb-8">{{ article_data_list.0.perex }}</p> - {% include 'main/includes/button_animated.html' with btn_link=article_data_list.0.url btn_text="Číst dále" %} - </div> - </div> + style="background-image: + {% if self.image %} + {% image self.image original as original_image %} + url({{ original_image.url }}) + {% else %} + url('{% static 'main/images/background-images/bg-join-us.jpg' %}') + {% endif %} + "> + <div class="container--medium mx-auto px-4"> + <h2 class="head-7xl xl:text-center mb-6 xl:mb-28"> + {{ self.title }} + </h2> + <div class="flex flex-wrap mb-5 lg:mb-10"> + {% image article_data_list.0.image original as article_img %} + <img src="{{ article_img.url }}" draggable="false" alt="" class="lg:max-w-lg lg:mr-11 h-fit"> + <div class="flex flex-col max-w-xl items-start"> + <span class="text-green-500 head-3xl mt-10 mb-4 lg:mb-8">{{ article_data_list.0.date }}</span> + <h5 class="head-4xl mb-5 lg:mb-10">{{ article_data_list.0.title }}</h5> + <p class="leading-6 mb-4 lg:mb-8">{{ article_data_list.0.perex }}</p> + {% include 'main/includes/button_animated.html' with btn_link=article_data_list.0.url btn_text="Číst dále" %} + </div> + </div> - <div class="__js-root"> - <ui-article-carousel></ui-article-carousel> - </div> - </div> + <div class="__js-root"> + <ui-article-carousel> + {% include 'main/includes/article_carousel_item.html' with article_carousel_list=article_carousel_list %} + </ui-article-carousel> + </div> + </div> </div> diff --git a/main/templates/main/blocks/regions_block.html b/main/templates/main/blocks/regions_block.html index 14f767ee..136a6915 100644 --- a/main/templates/main/blocks/regions_block.html +++ b/main/templates/main/blocks/regions_block.html @@ -1,7 +1,14 @@ -{% load static %} +{% load static wagtailimages_tags %} <div class="bg-cover bg-no-repeat section-clip py-16 lg:py-36" - style="background-image: url('{% static 'main/images/background-images/bg-map.jpg' %}')"> + style="background-image: + {% if self.image %} + {% image self.image original as original_image %} + url({{ original_image.url }}) + {% else %} + url('{% static 'main/images/background-images/bg-map.jpg' %}') + {% endif %} + "> <div class="container--medium mx-auto px-4 "> <h2 class="head-7xl xl:text-center mb-6 xl:mb-28"> {{ self.title }} diff --git a/main/templates/main/blocks/twitter_block.html b/main/templates/main/blocks/twitter_block.html index d3781e86..f6fdd448 100644 --- a/main/templates/main/blocks/twitter_block.html +++ b/main/templates/main/blocks/twitter_block.html @@ -15,10 +15,10 @@ data-url="{{ page_url }}?page=" data-page="2" class="btn btn__slide__wrap"> - <span class="btn text-sm bg-black text-white w-32 lg:text-base"> + <span class="btn text-sm bg-black text-white px-1 lg:text-base"> Zobrazit starší </span> - <span class="btn text-sm bg-white text-black w-32 lg:text-base"> + <span class="btn text-sm bg-white text-black px1 lg:text-base"> Zobrazit starší </span> </a> @@ -46,4 +46,4 @@ tweet.setAttribute('data-page', dataPage) }); } -</script> \ No newline at end of file +</script> diff --git a/main/templates/main/includes/article_carousel_item.html b/main/templates/main/includes/article_carousel_item.html new file mode 100644 index 00000000..e63da73a --- /dev/null +++ b/main/templates/main/includes/article_carousel_item.html @@ -0,0 +1,18 @@ +{% load wagtailimages_tags %} +{% for article_item in article_carousel_list %} + <div> + <div class="flex max-w-md items-start xl:mr-2"> + {% image article_item.image fill-128x128 as image %} + <img src="{{ image.url }}" + alt="" + class="w-16 xl:w-36 mr-4"> + <div class="flex flex-col justify-between items-start"> + <span class="text-green-500 mb-2">{{ article_item.date | date }}</span> + <h4 class="font-alt leading-5 text-base uppercase lg:text-base mb-2"> + {{ article_item.title }} + </h4> + {% include 'main/includes/button_animated.html' with btn_link=article_item.url btn_text="Zjistit více" %} + </div> + </div> + </div> +{% endfor %} diff --git a/main/templates/main/includes/button_animated.html b/main/templates/main/includes/button_animated.html index 1bc3ae08..56cf3175 100644 --- a/main/templates/main/includes/button_animated.html +++ b/main/templates/main/includes/button_animated.html @@ -1,8 +1,8 @@ <a href="{{ btn_link }}" class="btn btn__slide__wrap {{ extra_classes }}"> - <span class="btn text-lg bg-black text-white w-32 lg:text-base"> + <span class="btn text-lg bg-black text-white px-1 lg:text-base"> {{ btn_text | default_if_none:"Číst dále" }} </span> - <span class="btn text-lg bg-white text-black w-32 lg:text-base"> + <span class="btn text-lg bg-white text-black px-1 lg:text-base"> {{ btn_text | default_if_none:"Číst dále" }} </span> </a> diff --git a/main/templates/main/main_articles_page.html b/main/templates/main/main_articles_page.html index bf5e46d3..c9f57102 100644 --- a/main/templates/main/main_articles_page.html +++ b/main/templates/main/main_articles_page.html @@ -46,10 +46,10 @@ data-months="2" class="btn btn__slide__wrap" > - <span class="btn text-sm bg-black text-white w-32 lg:text-base"> + <span class="btn text-sm bg-black text-white px-1 lg:text-base"> Zobrazit další </span> - <span class="btn text-sm bg-white text-black w-32 lg:text-base"> + <span class="btn text-sm bg-white text-black px-1 lg:text-base"> Zobrazit další </span> </a> @@ -75,10 +75,10 @@ data-page="2" class="btn btn__slide__wrap" > - <span class="btn text-sm bg-black text-white w-32 lg:text-base"> + <span class="btn text-sm bg-black text-white px-1 lg:text-base"> Zobrazit další </span> - <span class="btn text-sm bg-white text-black w-32 lg:text-base"> + <span class="btn text-sm bg-white text-black px-1 lg:text-base"> Zobrazit další </span> </a> -- GitLab